Wenn Sie einen eigenen Server betreiben, ist Sicherheit selbstredend das A und O. Dennoch verletzen viele Admins häufig die elementarsten Regeln: Wie sonst ist es zu erklären, dass Cracker (selbst technisch Unerfahrene) immer wieder in fremde Systeme eindringen können. Glücklicherweise steht mit Nikto ein probates Mittel bereit, um das Risiko erheblich zu minimieren. Das mächtige Werkzeug schützt Sie nachhaltig vor ungebetenen Gästen und zeigt Schwachstellen der Konfiguration auf. Der Beitrag führt in die Benutzung ein und zeigt die ersten Schritte.
Für versierte Administratoren gehört die Arbeit mit Tools wie Nikto [1] (und auch Whisker [2]) mittlerweile längst zum Alltag, denn mit Hilfe solcher Werkzeuge lassen sich in Windeseile Schwachstellen der Serverkonfiguration (und damit der Website) aufspüren. Durch die alarmierende Sicherheitslage werden aber auch immer mehr Privatanwender (vielleicht betreiben Sie eine kommerziell ausgerichtete Website?) mit diesen Werkzeugen konfrontiert. Die folgende Aufstellung umreißt die wichtigsten Einsatzgebiete Niktos. Sie können es verwenden, um
- Webserver umfassend auf Schwachstellen zu prüfen,
- Default-Webfiles aufzufinden,
- CGI-Skripts auf Sicherheitslücken zu testen und
- veraltete Server-Software zu testen.
Nikto, das Tool wurde in Perl geschrieben, setzt auf der bekannten Bibliothek
LibWhisker auf und erweitert den Aktionsradius derselben sogar noch. So können Sie mit Nikto HTTP- und HTTPS-Requests absetzen. Falls Ihnen in diesem Zusammenhang Programme wie Nessus, Satan und Saint einfallen, liegen Sie grundsätzlich richtig. Überdies ist Nikto in der Lage, so genannte NIDS-Programme (NIDS=Network Intrusion Detection System) auszutricksen. Das Programm schaltet dazu in den Evasive Mode (evasive=ausweichen), der wiederum durch die zugrunde liegende Bibliothek LibWhisker aktiviert wird. Diese Vorgehensweise ist besonders hilfreich, um die Leistungsfähigkeit, Konfiguration und Verlässlichkeit eingesetzter NIDS-Systeme auszutesten (Snort und Co.).
Apropos: Sie können mit Nikto auch einfache Portscans durchführen; zudem verfügt das Tool last not least über einen automatisierten Download-Mechanismus, um bei Bedarf selbstständig Updates vom Mainserver vorzunehmen (dazu unten mehr). Dieses Feature garantiert, dass Sie sicherheitstechnisch stets auf dem neuesten Stand sind.
Achtung: Nikto darf selbstverständlich zur Wahrung berechtigter persönlicher Interessen verwendet werden. Setzen Sie Nikto jedoch gegen fremde Sites ein, wird dieses Vorgehen als Angriff verstanden und zieht Ärger nach sich. Und: Beim Einsatz Niktos ist Vorsicht geboten, denn das Tool ist in der Lage, bis zu 70.000 Requests abzusetzen, d.h. ein funktionierendes System kann unter Umständen, bei falscher Handhabung des Serverscanners, schnell in die Knie gehen. Deshalb ist es in der Tat notwendig, die Dokumentation eingehend zu studieren.
Grundlagen
Nikto wird von den Entwicklern kostenlos abgegeben. Eine Installation entfällt glücklicherweise auch, da das Programm lediglich eine funktionierende Perl-Installation voraussetzt (unter Linux ist Perl vorinstalliert). Welche Perl-Version an Bord ist, zeigt dieser Aufruf:
ich@meinrechner>perl -V | less
Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
Platform:
osname=linux, osvers=2.6.9, archname=i586-linux-thread-multi
...
Sie müssen sich Nikto allerdings selbst aus dem Netz besorgen, da es nicht zum Lieferumfang einer typischen Linux-Distributionen gehört. Entpacken Sie den Tarball wie üblich in einem Verzeichnis Ihrer Wahl:
ich@meinrechner> tar xvzf nikto-verXXX.tar.gz
Danach wechseln Sie in das neu angelegte Verzeichnis und testen anschließend, ob Nikto einwandfrei funktioniert:
ich@meinrechner> perl nikto.pl -help | less
Das typische Aufrufschema für einen einfachen Serverscan sieht so aus:
ich@meinrechner> perl nikto.pl -h 192.168.1.100
Der Schalter
-h spezifiziert den Host. Hier sehen Sie Teile der Ausgabe:
ich@meinrechner> perl nikto.pl -h macbeth
---------------------------------------------------------------------------
- Nikto 1.34/1.29 - www.cirt.net
+ Target IP: 192.168.1.100
+ Target Hostname: macbeth
+ Target Port: 80
+ Start Time: Fri Mar 25 15:48:26 2005
---------------------------------------------------------------------------
- Scan is dependent on "Server" string which can be faked, use -g to override
+ Server: Apache/1.3.29 (Darwin)
...
Insbesondere die letzte Zeile ist sehr aufschlussreich: auf dem entfernten Rechner "macbeth" läuft also
Apache/1.3.29 (Darwin). Die Zeichenkette Darwin legt zudem nahe, dass es sich um einen Mac handelt. Solche Informationen werden von Angreifern dankbar aufgegriffen, um sich ein genaues Bild der vorhandenen Infrastruktur zu machen. Eine geeignete Gegenmaßnahme wäre: Sie bearbeiten die Konfigurationsdatei (
httpd.conf für Apache) des entfernten Servers, um die Ausgabe in Zukunft wesentlich knapper zu halten. Dazu wird in
httpd.conf die Variable
ServerTokens angepasst (mit der Angabe:
ServerTokens Prod). Ein erneuter Nikto-Scan würde als Serverkennung nur noch allgemeine Angaben zurückliefern. Nikto hilft Ihnen auch zu ermitteln, welche HTTP-Methoden (
RFC 2616, HTTP/1.1) derzeit bereitstehen. Ein Beispiel:
ich@meinrechner> perl nikto.pl -h localhost
...
+ Allowed HTTP Methods: GET,HEAD,POST,OPTIONS,TRACE
+ HTTP method 'TRACE' is typically only used for debugging. It should be disabled.
...
Vorsicht: Achten Sie unbedingt darauf, dass standardmäßig die HTTP-Methoden
PUT und
DELETE deaktiviert sind, denn mit diesen kann man direkt auf den Server zugreifen! Und auch
TRACE sollte im Normalfall, Nikto warnt im Beispiel, nicht erlaubt sein.
Das nächste Beispiel zeigt, wie man einen HTTPS-Scan (Port 443) durchführt, der Schalter
-s erzwingt SSL-Verschlüsselung - falls SSL-Support angeboten wird (Serverheader werden im Beispiel ignoriert):
ich@meinrechner> perl nikto.pl -h 192.168.1.100 -p 443 -s -g
Um einen bestimmten Port-Bereich abzufragen, verwenden Sie wiederum dieses Schema:
ich@meinrechner> perl nikto.pl -h 192.168.1.100 -p 22-80
Sind Sie hingegen nur an bestimmten Ports interessiert, hilft folgender Aufruf weiter:
ich@meinrechner> perl nikto.pl -h 192.168.1.100 -p 80,443,8000,8080
Tipps
Zum Lieferumfang Niktos gehört auch die zentrale Konfigurationsdatei
config.txt. Mit Hilfe der in
config.txt enthaltenen Variablen steuern Sie das Laufzeitverhalten des Serverscanners und passen Nikto step-by-step an eigene Bedürfnisse an. Beispielsweise enthält
config.txt die Variable
@CGIDIRS wie man sieht, handelt es sich um ein Perl-Array). Diese Variable nimmt die verschiedenen existierenden Bezeichnungen für CGI-Directories auf (
cgi-bin,
cgi-sys etc.): Zur Laufzeit wird die Variable ausgelesen und alle darin enthaltenen Verzeichnisse werden nun von Nikto beim Scannen berücksichtigt. Die mitgelieferte Dokumentation liefert diesbezüglich weiterführende Informationen.
Es wurde bereits erwähnt, dass Nikto in der Lage ist, selbstständig Updates vorzunehmen. Mit diesem Aufruf aktivieren Sie dieses Verhalten:
ich@meinrechner> perl nikto.pl -update
Der Befehl sorgt dafür, dass sich Nikto automatisch mit
cirt.net, dem Mainserver, verbindet. Von dort werden dann Updates für die interne Scan-Datenbank
scan_database.db sowie aktuelle Plug-in-Dateien heruntergeladen. Seien Sie aber auf der Hut und prüfen Sie genau, woher Sie die Daten beziehen. Diese Option (
-update) darf übrigens nicht mit anderen Schaltern kombiniert werden.
Abschliessend muss vor dem Hintergrund der Serversicherheit unbedingt auf Programme wie Ethereal [3] und Snort [4] hingewiesen werden, da beide aus sicherheitstechnischer Perspektive absolut empfehlenswert sind (natürlich auch tcpdump). Außerdem sind beide Tools, genau wie Nikto, frei erhältlich (Snort wird zudem in einer kommerziellen Version angeboten).
Ethereal, häufig als Super-tcpdump bezeichnet, verfügt über eine ausgezeichnete grafische Oberfläche, die es Ihnen gestattet, einen guten Überblick über den Netzwerkverkehr zu bekommen. Und für Snort existieren ebenfalls optionale GUI-Lösungen (Barnyard etc., auf der Homepage finden Sie weitere Angaben).
Besonders der kombinierte Einsatz von Nikto, Ethereal und Snort hilft enorm, den Server (nebst Webauftritt) effektiv zu schützen. Somit können Sie Szenarien nachstellen und handfeste Erfahrungen im Umgang mit Netzwerken sammeln. Vielleicht entdecken Sie beim Einsatz von Snort am Ende gar die Spuren eines Nikto-Scans.
Fazit
Heutzutage ist man gut beraten, Tools wie Nikto regelmäßig einzusetzen, um den eigenen Webauftritt besser vor Angriffen zu schützen. Nikto ist mächtig und hilft, eklatante Sicherheitslücken aufzuspüren. Durch die gewonnenen "Einsichten" machen Sie Angreifern in Zukunft das Leben schwerer. Es darf jedoch nicht verschwiegen werden, dass gute HTTP-Kenntnisse eine wichtige Voraussetzung für das erfolgreiche Handling sind.
Links