Nikto : pré-analyse rapide de web vunerabilities
Bonjour à tous !
Aujourd'hui, nous allons faire un premier pas dans le domaine de la sécurisation de nos serveurs web, mais pas tous seuls !
Nikto est là pour nous aider !
Nikto ?
Nikto est un scanner de vulnérabilité de votre serveur Web. Il est écrit en Perl. Il permet de rapidement pointer du doigt ce qui pourrait constituer un problème niveau sécurité de vos applications web. Nikto n'a pas vocation à être un outil très discret. En effet, le but premier est d'apporter une réponse rapide, claire et concise sur les vulnérabilités constatées sur un serveur Web et non d'obtenir furtivement des informations afin de mener une attaque. Nikto est conçu pour détecter :- Les mauvaises configurations (serveurs comme logiciels)
- Les fichiers et programmes installés par défaut
- Les fichiers et programmes mal sécurisés
- Les versions obsolètes
Fonctionnement
Dans ses versions précédentes, Nikto s'appuyait, comme beaucoup d'outils de sécurisation web, sur les réponses HTTP des serveurs. Cependant, beaucoup d'implémentations ne respectent pas les RFC, de plus, les réponses ne sont pas forcément les mêmes selon le type de fichier (script CGI, html,...). Afin de pallier à ce problème sans avoir à entrer systématiquement dans le contenu, Nikto utilise plutôt une liste d'extension, générée au moment du run. Lors du test d'un élément, si le serveur renvoie un 404 (not found), le résultat (404) sera associé au test de l'élément dans la base de données servant aux tests. Si le serveur répond favorablement (200, ok response), alors il y a examen du contenu renvoyé sur des motifs d'erreur (could not be found...), afin de pouvoir déterminer les éléments non trouvés, et caetera.Installation
L'installation par les packages est possible, mais elle ne met pas à disposition la toute dernière version, du coup, on va se le faire depuis les sources. Perl mis à part, Nikto n'est pas très exigent en terme de requirements. Il y a quelques modules à installer pour OpenSSL, mais rien qui ne sorte vraiment de l'ordinaire. Le seul élément non standard est fourni avec l'installation de Nikto (il s'agit de LibWhisker, disponible en tant que LW.pm, sur lequel repose tout le fonctionnement). Enfin, depuis les sources est un bien grand mot, puisqu'une fois détaré, Nikto est utilisable en l'état. L'arborescence obtenue est la suivante :nikto-2.1.1 $ ls -lsa total 36 4 drwxr-xr-x 5 4096 2010-02-02 20:34 . 4 drwxr-xr-x 4 4096 2010-07-07 12:13 .. 4 drwxr-xr-x 2 4096 2010-02-02 20:34 docs 4 -rw-r--r-- 1 2891 2010-02-02 20:28 nikto.conf 12 -rwxr-xr-x 1 9936 2010-02-02 20:28 nikto.pl 4 drwxr-xr-x 2 4096 2010-02-02 20:30 plugins 4 drwxr-xr-x 2 4096 2010-02-02 20:31 templates
La conf
La conf spécifie les infos :- liées au fonctionnement de nitko :
- répertoire des plugins disponibles
- niveau de log
- définition de proxy
- gestion des cookies
- ...
- liées aux scans
- ports à exclure
- dénomination des répertoires contenant les scripts cgi, une arborescence pour l'administration, les modules, ...
- une liste d'utilisateurs à tester
- ...
Les plugins
Afin de pouvoir déterrer toutes les informations dont vous avez besoin, Nikto s'appuie sur un ensemble de plugins, chacun dédié à un point de vulnérabilité potentielle précis. Ces plugins sont écrits en perl, donc possibilité de s'en coder un sur mesure. La liste des plugins est obtenue par un :perl nikto.pl -list-plugins Plugin headers HTTP Headers - Performs various checks against the headers returned from a HTTP request. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin cgi CGI - Enumerates possible CGI directories. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin report_text Text reports - Produces a text report. Written by Deity, Copyright (C) 2008 CIRT Inc. Plugin user_enum_apache Apache User Enumeration - Attempts to enumerate usernames by guessing usernames. Written by Javier Fernandez-Sanguinoi Pena, Copyright (C) 2008 CIRT Inc. Plugin embedded Embedded Detection - Checks to see whether the host is an embedded server. Written by Deity, Copyright (C) 2009 CIRT Inc. Plugin msgs Server Messages - Checks the server version against known issues. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin outdated Outdated - Checks to see whether the web server is the latest version. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin Tests Nikto Tests - Test host with the standard Nikto tests Written by Sullo, Deity, Copyright (C) 2008 CIRT Inc. Plugin robots Robots - Checks whether there's anything within the robots.txt file and analyses it for other paths to pass to other scripts. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin report_xml Report as XML - Produces an XML report. Written by Sullo/Jabra, Copyright (C) 2008 CIRT Inc. Plugin put_del_test Put/Delete test - Attempts to upload and delete files through the PUT and DELETE HTTP methods. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin httpoptions HTTP Options - Performs a variety of checks against the HTTP options returned from the server. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin passfiles Password Files - Checks for any files that may potentially contain passwords. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin subdomain Sub-domain forcer - Attempts to bruteforce commonly known sub-domains Written by Ryan Dewhurst, Copyright (C) 2009 Ryan Dewhurst Plugin favicon Favicon - Checks the web server's favicon against known favicons. Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin mutiple_index Multiple Index - Checks for multiple index files Written by deity, Copyright (C) 2009 CIRT Inc Plugin report_csv CSV reports - Produces a CSV report. Written by Deity, Copyright (C) 2008 CIRT Inc. Plugin dictionary Dictionary attack - Attempts to dictionary attack commonly known directories/files Written by Deity, Copyright (C) 2009 CIRT Inc Plugin apacheusers Apache Users - Checks whether we can enumerate usernames directly from the web server Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin report_html Report as HTML - Produces an HTML report. Written by Sullo/Jabra, Copyright (C) 2008 CIRT Inc. Plugin apache_export_xss Apache Expect XSS - Checks whether the web servers has a cross-site scripting vulnerability through the Expect: HTTP header Written by Sullo, Copyright (C) 2008 CIRT Inc. Plugin mutate Mutate - Performs various extra independant checks that may not be needed for each scan. Written by Sullo, Copyright (C) 2008 CIRT Inc.
La LW2.pm
LW2 est connue plus scientifiquement sous le doux sobriquet de Perl HTTP library. Ce pm constitue la base de tout : c'est là-dessus que s'appuie entièrement Nikto. Il s'agit d'une librairie qui réimplémente en Perl certaines fonctionnalités disponibles dans les modules "LWP", "URI", "Digest::MD5", "Digest::MD4", "Data::Dumper", "Authen::NTLM", "HTML::Parser", "HTML::FormParser", "CGI::Upload", "MIME::Base64", et "GetOpt::Std". Le code a été optimisé et rendu autonome (puisque vous n'avez qu'un fichier et non tout une tripotée de pm). Il a aussi été assoupli afin de pouvoir faire exactement ce qui est spécifié, même si cela signifie casser le protocole. Parmis les fonctions implémentées, on retrouve :- auth_brute_force, effectue une attaque par bruteforce des mots de passe sur un serveur Web.
- cookie_*, fonctions relatives à la forge, à la réception et à l'exploitation des données contenues dans un cookie
- crawl, http crawler
- encode_anti_ids, fonction qui met en oeuvre des mécanismes d'encodage destinés à perdre les IDS
- ntlm_*, destinées à éprouver les IIS servers, et bien d'autres...
perl nikto.plEn réalité, nikto.pl effectue en gros une initialisation de l'environnement, puis passe la main à plugins/nikto_core.plugin. C'est donc nikto_core.plugin qui s'occupe d'attaquer la besogne (ce qui explique qu'il soit conséquent), puis chacun des plugins déroulera son code afin de rapatrier les infos qui lui sont demandées.
Un essai ?
$ perl nikto.pl -h bux --------------------------------------------------------------------------- - Nikto 1.35/1.34 - www.cirt.net + Target IP: 192.168.206.1 + Target Hostname: bux + Target Port: 80 + Start Time: Wed Jul 14 11:03:12 2010 --------------------------------------------------------------------------- - Scan is dependent on "Server" string which can be faked, use -g to override + Server: Apache/2.0.54 (Debian GNU/Linux) PHP/5.3.2 - Retrieved X-Powered-By header: PHP/5.3.2 + /robots.txt - contains 10 'disallow' entries which should be manually viewed (added to mutation file lists) (GET). + 2.0.54 (Debian GNU/Linux) PHP/5.3.2 - TelCondex Simpleserver 2.13.31027 Build 3289 and below allow directory traversal with '/.../' entries. + /~root - Enumeration of users is possible by requesting ~username (responds with Forbidden for real users, not found for non-existent users) (GET). + /ganglia/ - Ganglia Cluster reports reveal detailed information. (GET) + /index.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET) + /index.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET) + /index.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET) + /index.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 - PHP reveals potentially sensitive information via certain HTTP requests which contain specific QUERY strings. OSVDB-12184. (GET) + /index.php?module=My_eGallery - My_eGallery prior to 3.1.1.g are vulnerable to a remote execution bug via SQL command injection. (GET) + /index.php?top_message=<script>alert(document.cookie)</script> - Led-Forums allows any user to change the welcome message, and it is vulnerable to Cross Site Scripting (XSS). CA-2000-02. (GET) + /cgi-bin/test.cgi - This might be interesting... (GET) + /index.php?base=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + /index.php?IDAdmin=test - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + /index.php?pymembs=admin - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + /index.php?SqlQuery=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + /index.php?tampon=test%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + /index.php?topic=&lt;script&gt;alert(document.cookie)&lt;/script&gt;%20 - This might be interesting... has been seen in web logs from an unknown scanner. (GET) + 3184 items checked - 16 item(s) found on remote host(s) + End Time: Wed Jul 14 11:03:41 2010 (29 seconds) --------------------------------------------------------------------------- + 1 host(s) testedVoila ce qui arrive, quand on installe par-dessus la jambe... Alors, bien évidemment, vous verrez que Nikto est beaucoup trop bavard et pollue intempestivement les logs de vos serveurs web, mais il constitue déjà un premier déblayage en ce qui concerne la sécurisation de vos serveurs web. Si, en revanche, vous préférez un outil plus discret, moins spécifique, et plus couteau suisse, p0f est à votre disposition et mérite largement le coup d'œil (après tout, il est inclue dans de grands outils comme Ettercap, et Prelude IDS...). Mais attention, les objectifs ne sont pas les mêmes... Enjoy !