Risikoanalyse von Netzwerken

Aus LinuxUser 11/2009

Risikoanalyse von Netzwerken

© Sean Gladwell, Fotolia

Unter der Lupe

Nur verriegelte Türen halten Einbrecher ab. Clevere Werkzeuge wie Port- und Security-Scanner fördern potenzielle Sicherheitslücken zutage und helfen Ihnen so dabei, die Rechner in Ihrem Netz besser gegen Angreifer abzusichern.

Rechtlicher Hinweis

Einige der im Artikel besprochenen Programme fallen in die Kategorie “dual use”. Der Anwender entscheidet über deren produktiven oder destruktiven Einsatz. Der Versuch, mit ihnen ohne die explizite Zustimmung der Besitzer Schwachstellen in fremden Netzen oder Rechnern ausfindig zu machen, ist strafbar und wird gemäß des “Hackerparagraphen” (§202c) mit Haftstrafen von bis zu einem Jahr geahndet.

Das Wissen über die Funktionsweise der Kommunikation zwischen Rechnern im Netz bildet eine unentbehrliche Grundlage für das Security Auditing, weswegen dieser Artikel sich im ersten Drittel damit beschäftigt. Der zweite Abschnitt führt Sie in den Einsatz der Portscanner Nmap und Portbunny ein. Schließlich erfahren Sie im letzten Teil, wie Sie mithilfe des Vulnerability-Scanners Nessus Sicherheitslücken auf den Rechnern Ihres Netzwerks aufspüren.

OSI-Modell

Das Transmission Control Protocol / Internet Protocol, kurz TCP/IP, ist aus der modernen Internetkommunikation nicht mehr wegzudenken. Beinahe alle Rechner verwenden es, um sich miteinander zu unterhalten, aber nur wenige Anwender wissen, was dabei vor sich geht.

Das OSI-Schichtenmodell [1] dient zum besseren Verständnis der Netzwerktechnik und als Referenz zur Implementierung. Es unterteilt die verschiedenen Aufgaben des Netzwerkes auf sieben Schichten.

Die erste Schicht (Bitübertragungsschicht, “Physical Layer”) beschreibt den Standard auf der Hardware-Ebene, etwa für Kabel, Stecker und einfache Verteiler (Hubs). Die zweite Schicht (Sicherungsschicht, “Data Link Layer”) behandelt die Kommunikation zwischen den einzelnen, in einem Netzwerk direkt verbundenen Komponenten, etwa zwischen zwei Netzwerkkarten. Die Kommunikation zwischen verschiedenen Netzwerken, zum Beispiel über IP, regelt Schicht 3 (Vermittlungsschicht, “Network Layer”) des Modells. Hier könnte leicht der Eindruck entstehen, dass jede Schicht mit der gegenüberliegenden kommuniziert. Tatsächlich werden jedoch die Pakete der einzelnen Schichten in die jeweils darunter liegende Schicht eingepackt, auf Layer 1 zum Gegenüber gesendet, und dort in umgekehrter Reihenfolge wieder ausgepackt und nach oben gereicht.

Das Internet Protokoll (IP) ermöglicht das Versenden einzelner Pakete von Host zu Host. IP-Pakete finden selbständig ihren Weg von A nach B, Router leiten sie dabei in andere Netze weiter. Damit Pakete nicht wegen Netzwerkfehlern bis in alle Ewigkeiten von Router zu Router wandern, besitzen sie ein Time-To-Live-Feld (TTL). Jeder Router zählt dieses Nummernfeld beim Weitertransport um eine Stelle herunter. Kommt der Wert bei 0 an, verwirft der Router das Paket. Um den Absender davon in Kenntnis zu setzen, sendet er diesem ein ICMP-Paket. Das Internet Control Message Protocol dient einzig und allein dazu, Informationen über den Zustand des Netzwerks zu versenden. Im OSI-Modell befindet es sich auf der gleichen Ebene (Schicht 3) wie IP. Neben Nachrichten über abgelaufene TTLs informiert ICMP auch über nicht erreichbare Netzwerke und Hosts. Auch das bekannte Tool ping versendet ICMP-Pakete.

Ports

Gäbe es nur das Internet-Protokoll, könnte immer nur ein einziges Programm mit einem anderen auf der Gegenseite Daten austauschen. Aus diesem Grund gibt es die vierte Schicht des OSI-Modells, die Transportschicht (“Transport Layer”). Hier kommen Protokolle wie TCP oder UDP zum Einsatz. Beide weisen ein Paket einem von 216 verfügbaren Ports zu. Mit deren Hilfe ordnet das Betriebssystem ein Paket einem bestimmten Dienst zu.

Die 65.535 möglichen Ports teilen sich in drei Bereiche auf: Die Ports mit den Nummern von 0 bis 1023 enthält die so genannten “well-known” Ports, welche die Internet Assigned Numbers Authority (IANA, [2]) vergibt. Ein Großteil der alltäglich benutzen Protokolle operieren in diesem Bereich. Unter Linux dürfen nur Programme, die mit Root-Rechten laufen, diese Ports öffnen, weswegen man sie auch als privilegierte Ports bezeichnet.

Die Ports 1024 bis 49?150 nennt man registrierte Ports. Als Anwendungshersteller kann man bei der IANA einen solchen Port für seine Applikation registrieren lassen. Der letzte Bereich von 49?151 bis 65?535 enthält die komplett freien privaten Ports. Die Datei /etc/services enthält eine Liste bekannter Ports samt der Dienstnamen sowie einer kurzen Beschreibung dazu.

Die Zuordnung von Diensten zu Ports ist jedoch unverbindlich. Praktisch alle Dienste erlauben die freie Wahl, auf welchem Port sie lauschen sollen. Gerade für sicherheitsrelevante Programme, die nur ein kleiner Personenkreis benutzt, verwenden Admins häufig Portnummern abseits des Standards, um sie einer zu schnellen Entdeckung – beispielsweise durch Portscanner – zu entziehen.

Ports besitzen nur die Zustände offen oder geschlossen. Entweder horcht eine Applikation auf dem Port oder nicht. Wartet ein Programm am entsprechenden Port auf eine neue Verbindung, so erhältman auf Anfragen ein Antwortpaket mit gesetzten SYN-ACK-Flags. Ist der Port nicht belegt, kommt stattdessen ein Paket mit gesetzten RST-ACK Flags zurück. In jedem Fall darf ein Anfragender bei Kontaktversuchen sowohl zu offenen als auch zu geschlossenen Ports eine Antwort erwarten.

Bleibt diese aus, kommen dafür zwei Ursachen in Frage: Entweder ist das Paket auf der Strecke verloren gegangen, oder eine Firewall hat es verworfen. Dies ist eines der Hauptprobleme beim Portscanning: Es lässt sich bei einzelnen Pakten nicht mit Bestimmtheit sagen, ob der Port gefiltert ist – also eine Firewall das Paket verwirft – oder das Paket nur verloren gegangen ist.

Header

Das User Datagram Protocol – kurz UDP – macht nichts weiter, als jedes IP-Paket um einen Quell- und Zielport sowie einen zusätzlichen Header zu erweitern. Der Header besteht aus der Größe des Paketes in Byte und einer Prüfsumme (Abbildung 1).

Abbildung 1: Der Header eines jeden UDP-Paketes enthält neben dem Quell- und Zielport eine Prüfsumme der versendeten Daten.

Abbildung 1: Der Header eines jeden UDP-Paketes enthält neben dem Quell- und Zielport eine Prüfsumme der versendeten Daten.

Diese Art der Datenübertragung wirft jedoch ein Problem auf: Gehen IP-Pakete beispielsweise bei Überlastung des Netzes oder kaputter Routen unterwegs verloren, bekommt der Absender davon nichts mit. Darüber hinaus legen IP-Pakete unter Umständen verschiedene Strecken (Routen) zurück. Durch die damit verbundenen Laufzeitdifferenzen kommt es vor, dass Pakete sich überholen und in der falschen Reihenfolge ankommen. Diese Einschränkungen löst das Transmission Control Protocol (TCP) auf. Es baut eine Pseudo-Verbindung zwischen den Hosts auf, indem es die Pakete durchnummeriert und sich den korrekten Empfang von Paketen bestätigen lässt. Gehen Pakete verloren, fordert TCP die Gegenstelle automatisch dazu auf, das Paket erneut zu versenden.

Neben dem Quell- und Zielport befindet sich im Header die Nummer des aktuellen Paketes, Sequenznummer genannt. Diese zählt das Protokoll vom Beginn der Verbindung an hoch. Des weiteren enthält der Header eine Bestätigungsnummer, welche die Sequenznummer des letzten erfolgreich angekommen Paketes enthält. Um den Paketfluss zu steuern und die TCP-Verbindung auf- und wieder abzubauen, umfasst der TCP-Header zudem einige Flags, die das Protokoll nach Bedarf setzt.

Den Verbindungsaufbau kennzeichnet das SYN-Flag (“Synchronize”), den Erhalt eines Paketes das ACK-Flag (“Acknowledge”). Ungültige Pakete wie zum Beispiel unerlaubte SYN-Pakete beantwortet die Gegenstelle mit einem im Paket gesetzten RST-Flag (“Reset”). Das FIN-Flag (“Finalize”) dient dazu, eine Verbindung wieder abzubauen.

Um einen Datentransfer zu etablieren, verwendet TCP den so genannten Drei-Wege-Handshake (Abbildung 2). Der Client sendet zuerst ein TCP-Paket mit gesetztem SYN-Flag an den Server. Darauf antwortet dieser mit einem gesetztem SYN- und ACK-Flag im Paket. In das Sequenznummernfeld trägt er seine eigene 32-Bit-Zahl ein, das Bestätigungsnummernfeld versieht er mit der Sequenznummer des gerade angekommen Pakets. Um den Handshake abzuschließen, sendet der Client ein Paket mit gesetztem ACK-Feld und der Sequenznummer des Servers im Bestätigungsfeld. Seine eigene Sequenznummer inkrementiert er um eins.

Abbildung 2: Um eine Netzwerkverbindung zu etablieren verwenden TCP den so genannten Drei-Wege-Handshake.

Abbildung 2: Um eine Netzwerkverbindung zu etablieren verwenden TCP den so genannten Drei-Wege-Handshake.

Um Pakete, die in falscher Reihenfolge ankommen, in der korrekten Sortierung an höhere Schichten im OSI-Modell weiterzureichen, benötigt TCP einen Zwischenspeicher, der ein Paket solange vorhält, bis alle vorhergegangen Pakete (erkennbar an der Sequenznummer) angekommen sind. Die Größe dieses Zwischenspeichers definiert die Window-Size, die auch als Feld im TCP-Header steht. Sie dient dazu, zu verhindern, dass der Sender den Speicher zu schnell voll schreibt.

Das Auf- und Abbauen von TCP-Verbindungen übernimmt im Regelfall der TCP-Stack des Kernels, der für die darüber liegenden Programme transparent arbeitet. Das Anwenderprogramm muss sich damit nicht mehr um die Einteilung in die einzelnen Pakete kümmern, sondern schickt stattdessen einen konstanten Datenstrom an das Ziel. Allerdings besteht für diese Vorgehensweise auch eine Notwendigkeit, denn Programme, die mit den Rechten unprivilegierter Benutzer laufen, dürfen selbst keine TCP-Pakete erzeugen, sondern müssen zwingend die Verbindungsfunktion des Kernels nutzen.

Layer 5 bis 7

In den Strom der TCP- oder UDP-Pakete werden die Protokolle des Layer 5 (Sitzungsschicht, “Session Layer”) verpackt. Auch in dieser Schicht existieren verschiedene Standards für diverse Aufgaben. So dient etwa HTTP (“Hypertext Transfer Protocol”) zur Kommunikation zwischen Webservern und Browsern unterschiedlicher Hersteller. Die Anzahl der Protokolle auf Layer 5 ist sehr umfangreich, da diese keiner zentralen Spezifizierung unterliegen und jeder Anwendungsentwickler sein eigenes Protokoll schreiben kann.

Der Layer 6 (Darstellungsschicht, “Presentation Layer”) legt Kodierungsverfahren für übertragene Daten fest, wie beispielsweise JPEG für Bilder oder MPEG für Videos. Im höchsten Layer, der Anwendungsschicht (“Application Layer”), befinden sich schlussendlich die Programme, die auf das Netzwerk zugreifen.

Portscanner

Als Schweizer Taschenmesser unter den Portscannern gilt Nmap [3], das kürzlich in Version 5.0 erschien. Das relative neue Tool Portbunny [4] schickt sich aufgrund seiner extrem hohen Verarbeitungsgeschwindigkeit jedoch an, ihm den Rang abzulaufen. Während die alte Version von Nmap Bestandteil aller großen Distributionen ist, stellt das Projekt die neue sowohl paketiert als auch im Quelltext zum Download bereit. Darüber hinaus spendierte das Projekt dem Scanner eine grafische Benutzeroberfläche namens Zenmap (Abbildung 3). Ihr Hauptvorteil liegt in wesentlich ausführlicheren Reporting-Funktionen, als sie die Kommandozeilenvariante besitzt.

Abbildung 3: Die Reporting-Funktionen von Zenmap ermöglichen eine detaillierte Analyse einzelner Rechner oder des gesamten Netzwerks.

Abbildung 3: Die Reporting-Funktionen von Zenmap ermöglichen eine detaillierte Analyse einzelner Rechner oder des gesamten Netzwerks.

Die einfachste Möglichkeit von Portscans besteht darin, eine TCP-Verbindung zu jedem einzelnem Port aufzubauen. Da der normale Benutzer unter Linux selbst keine TCP Pakete senden darf, stellt das für ihn auch den einzigen Weg dar. Starten Sie Nmap ohne Root-Rechte als normaler Benutzer, wählt das Programm automatisch die Methode Connect-Scan. Möchten Sie diese Scan-Methode als root benutzen, weisen Sie das Programm mit dem Schalter -sT entsprechend an. Optional teilen Sie der Applikation mit dem Parameter -p auch den Port-Bereich mit, den sie scannen soll.

Als Ziel akzeptiert Nmap sowohl IP-Adressen als auch Domainnamen. Entsprechend starten Sie mit der Eingabe von nmap -sT -p 0-1023 www.linux-user.de einen Connect-Scan des Portbereichs 0 bis 1023 der Domain linux-user.de. Um komplette Netze zu scannen, geben Sie hinter der IP-Adresse die Netzmaske an. So scannt der Aufruf nmap -sT 192.168.1.0/24 alle Rechner mit den Adressen 192.168.1.1 bis 192.168.1.254. Drücken Sie während des Scans eine beliebige Taste, zeigt das Programm Informationen zum Fortschrittsinformationen des aktuellen Suchlaufs.

Eine andere Technik nennt sich SYN- oder auch Halfopen-Scan (Abbildung 4). Dabei baut Nmap keine komplette TCP-Verbindung auf, sondern versendet in Form eines SYN-Pakets nur die Aufforderung dazu an den entsprechenden Port. Die Antwort, entweder SYN-ACK oder RST-ACK, wertet das Programm aus. Starten Sie Nmap mit Root-Rechten, wählt der Scanner automatisch diesen Modus. Manuell nutzen Sie diese Methode mittels des Schalters -sS, beispielsweise nmap -sS www.linux-user.de.

Abbildung 4: Der SYN-Scan ähnelt dem Drei-Wege-Handshake zum Aufbau von TCP-Verbindungen, allerdings fehlt ihm das abschließende ACK-Paket.

Abbildung 4: Der SYN-Scan ähnelt dem Drei-Wege-Handshake zum Aufbau von TCP-Verbindungen, allerdings fehlt ihm das abschließende ACK-Paket.

Erhält ein geschlossener Port ein Paket mit gesetztem FIN-Flag (das normalerweise eine aufgebaute Verbindung beendet), so antwortet er laut TCP-Spezifikation mit einem RST-Paket. Diese Eigenschaft machen sich Portscanner zu Nutze, um geschlossenen Ports auf dem System ausfindig zu machen. Eine Unterscheidung zwischen offenen und gefilterten Ports ist jedoch nicht möglich, da bei beiden Zuständen keine Antwort kommt. Bei Nmap benutzen Sie den Parameter -sF für den FIN-Scan (Abbildung 5). Wirklich Sinn macht diese Technik allerdings nur bei Systemen, die keine Firewall schützt und der Status “gefiltert” damit wegfällt.

Abbildung 5: FIN-Scans entdecken geschlossene Ports.

Abbildung 5: FIN-Scans entdecken geschlossene Ports.

Sendet man ein TCP-Paket mit gesetztem ACK-Flag an einen Port, erfolgt als Antwort ein RST – egal, ob der Port offen oder geschlossen ist. Für sich alleine genommen dient der ACK-Scan nur dazu, herauszufinden, ob ein Port gefiltert wird. Der Trick besteht darin, die Window-Size zu betrachten. Sie gibt Auskunft über den Füllstand des Zwischenspeichers beim Zielsystem. Einige Betriebssysteme setzen die Window-Size bei geschlossenem Port auf 0 und auf >0, wenn er offen ist. Andere System machen es genau anderes herum. Gibt Nmap nur wenige Ports als geschlossen aus und den Rest als offen oder gefiltert, handelt es sich dabei um ein Indiz dafür, dass sehr wahrscheinlich die “geschlossenen” Ports offen stehen und umgekehrt. Mit dem Schalter -sW weisen Sie Nmap an, einen solchen Window-Scan durchzuführen.

Ausgetrickst

Jeder Portscan überträgt die eigene IP-Adresse an das Zielsystem. Um das zu vermeiden, führen Sie mit Nmap den so genannten Idle-Scan (Abbildung 6) durch. Dazu benötigen Sie die IP-Adresse eines älteren, ungepatchten Systems – etwa eines älteren, inaktiven Netzwerkdrucker im internen Netzwerk. Der Scan macht sich zunutze, dass bei älteren System die IPID (ein Nummern-Feld im Kopfbereich von IP-Paketen) linear ansteigt und somit vorhersehbar ist. Zu Beginn des Scans sendet Nmap ein Paket an dieses System (das man auch Zombie nennt) und erhält mit der Antwort die aktuelle IPID. Nun sendet der Scanner ein SYN-Paket an die Adresse des Ziels und trägt als Absender die IP-Adresse des Zombies ein. Für das Ziel sieht es damit so aus, als ob die Anfrage vom Zombie-System kommen würde.

Abbildung 6: Für einen Idle Scan wird ein dritter Computer benötigt, der als Zombie auftritt.

Abbildung 6: Für einen Idle Scan wird ein dritter Computer benötigt, der als Zombie auftritt.

Je nachdem, ob der betreffende Port offen oder geschlossen ist, antwortet er dem Zombie mit SYN/ACK (offen) oder RST/ACK (geschlossen). Der Zombie weiß von der Anfrage jedoch nichts und beschwert sich im Falle des SYN/ACK mit einem RST-Paket beim Zielsystem. Erhält der Zombie ein RST/ACK, lässt er die Sache auf sich beruhen und antwortet nicht. Durch das Versenden des RST-Pakets an das Zielsystem steigt die IPID des Zombies an. Der Scanner schickt nun abermals ein Paket an den Zombie und erhält mit der Antwort die aktuelle IPID des Zombies. Stieg diese seit der ersten Anfrage um den Wert 2 an, weiß der Angreifer, das der Zombie mittlerweile ein weiteres Paket versendet hat – nämlich das RST-Paket. Der Angreifer kann daher davon ausgehen, das der entsprechende Port am Zielsystem offen steht. Hat sich die IPID des Zombies hingegen nur um 1 erhöht, sind in der Zwischenzeit keine weiteren Pakete von Zombie ausgegangen. Der Nmap-Aufruf lautet:

# nmap -sI Zombie-IPZiel-IP

Alle bisher besprochenen Portscans untersuchen ausschließlich TCP-Dienste. Doch einige Dienste, etwa IP-Telefonie, DNS oder Media-Streaming, benutzen UDP. Die Schwierigkeit hier: UDP-Ports antworten auch dann nicht unbedingt, wenn sie offen stehen. Daher fällt hier das Unterscheiden geschlossener und nicht antwortender Ports schwer. Mit Nmap nehmen Sie UDP-Scans über den Schalter -sU vor.

Eine Schwierigkeit bei allen Portscans besteht in der Wahl der optimalen Geschwindigkeit. Zu schnell aufeinander folgende Pakete überlasten unter Umständen das Netzwerk und verfälschen das Ergebnis. Um das zu vermeiden, drosselt Nmap die Geschwindigkeit, sobald es merkt, dass Pakete keine Antwort mehr liefern. Trifft das Tool auf eine Reihe gefilterter Ports, senkt es seine Geschwindigkeit auf ein Minimum – was zur Folge hat, dass ein Scan sehr lange dauert. Dieses Problem versucht Portbunny zu lösen.

Portbunny

Der Portscanner Portbunny wurde als Kernelmodul konzipiert, weswegen er zur Installation die aktuellen Kernel-Header benötigt. Das Frontend setzt außerdem ein installiertes Python voraus. Sie finden die Quellen der aktuellen Version sowohl auf der Heft-DVD als auch der Projektseite. Entpacken Sie das Archiv und übersetzten Sie die Sourcen mit make, gefolgt von sudo make install.

Portbunny unterstützt ausschließlich SYN-Scans. Um die Geschwindigkeit besser kontrollieren zu können und trotz geschlossener Ports hoch zu halten, streut Portbunny in seinen Datenstrom einige Pakete ein, auf die es garantiert eine Antwort erhält. Auf diese Weise kontrolliert das Programm, ob etwa Pakete wegen zu hoher Netzauslastung oder auf Grund gefilterter Ports nicht zurück kommen.

Welche Pakete das Tool in den Datenstrom einstreut, legt es zu Beginn eines Scans für jedes Ziel individuell fest. Zur Auswahl stehen zum Beispiel SYN-Anfragen auf populäre Ports wie 80 (HTTP) oder 22 (SSH) sowie Pings. Stellt Portbunny fest, dass die Antwort auf eine Portanfrage ausbleibt, das Trigger-Paket hingegen ankommt, wertet es den Port als gefiltert. Die Verwendung von Portbunny gestaltet sich ebenso einfach wie die von Nmap. Als Ziel nimmt der Scanner sowohl Domains als auch IP-Adressen und Netzmasken entgegen. Ein Standardaufruf für den Scan der Ports 1 bis 1023 lautet beispielsweise portbunny www.linux-user.de -p 1-1023.

Security-Scanner

Anders als Port-Scanner arbeiten Security-Scanner auf der Applikationsebene. Das heißt, sie prüfen anhand meist entschärfter Exploits (siehe Kasten “Exploits”) die Verwundbarkeit der untersuchten Anwendung. So liefern sie umfassende Informationen, die Ihnen helfen, das getestete System auf einem hohen Sicherheitsniveau zu halten. Die am weitesten verbreitete Applikation dieser Gattung heißt Nessus [5]. Sie arbeitet als Server, den ein Client steuert. Ähnlich wie ein Virenscanner arbeitet das Tool mit Pattern-Dateien, die der Hersteller ständig aktualisiert und für Privatanwender kostenlos zur Verfügung stellt.

Exploits

Als Exploit bezeichnet man Software, die Programmierfehler (etwa Buffer Overflows) ausnutzt und dabei Schadcode auf dem Zielsystem ausführt. Exploits bestehen meist aus zwei Teilen: Der erste ebnet den Weg, um den zweiten direkt in den Speicher des Systems zu schreiben und dort auszuführen. Dieser zweite Teil, auch Nutzlast (“Payload”) genannt, besteht meistens aus Maschinencode und muss daher für jede Plattform angepasst werden. Oftmals ist es nötig, den Schadcode aufwendig zu bearbeiten, da er im Falle von String Buffer Overflows zum Beispiel keine Null-Bytes enthalten darf. Mögliche Nutzlasten öffnen zum Beispiel eine Shell oder fügen einen neuen Benutzer mit bekanntem Passwort hinzu. Neue Exploits zu schreiben bedeutet auch für Profis viel Ausprobieren.

Bis zur Version 2.2.11 stand Nessus unter der GPL und war damit ohne Einschränkungen frei verfügbar. Seit Version 3.0 führt die Firma Tenable die Entwicklung hinter verschlossenen Türen weiter. Dennoch stellt das Unternehmen den Vulnerability-Scanner kostenlos für die verschiedensten Plattformen und Betriebssysteme zum Download bereit. Privatanwender beziehen darüber hinaus kostenfrei und tagesaktuell die neuesten Nessus-Plugins, die Grundlage des Scanners. Kommerzielle Anwender bezahlen eine jährliche Gebühr von 1200 US-Dollar. Einen weiteren, jedoch ungleich komplizierteren Security-Scanner bietet das Metasploit-Framework [6] (siehe Kasten “Metasploit”).

Metasploit

Das in der der Scriptsprache Ruby geschriebene Metasploit-Framework vereint zwei Funktionen unter einem Dach: Auf der einen Seite bringt es über 250 Exploits für verschiedene Betriebssysteme und Programme sowie diverse Payloads mit. Zum anderen ermöglicht es Sicherheitsanalytiker, neue Gefahrenszenarien und passende Abwehrmaßnahmen zu entwickeln. Metasploit enthält drei Benutzerschnittstellen: Eine auf Ruby on Rails basierende Weboberfläche, eine GTK-GUI und ein Kommandozeilenprogramm.

Installation

Wählen Sie auf der Downloadseite des Herstellers [7] aus dem Dropdown-Menü Select a Product to Download den Link Nessus for Linux und bestätigen Sie anschließend die Nutzungsvereinbarung mit einem Klick auf I accept. Das folgende Registrierungsformular können Sie fürs Erste mit einem Klick auf Click here to download Nessus directly überspringen. In der Liste finden Sie Pakete für diverse Distributionen, aus der Sie das für Ihr System passende auswählen. Anschließend wiederholen Sie den Prozess, und wählen im Dropdown-Menü NessusClient 4.0.2 for Linux. Die beiden heruntergeladenen Pakete installieren Sie nun wie gewohnt. Sowohl der Server als auch der Client verwenden als Installationsziel /opt/nessus/. Benötigen Sie den Scanner nur selten, entfernen Sie Nessus aus dem Runlevel, da er sonst bei jedem Booten des Rechners startet. Auf Debian-basierten Systemen erledigen Sie das mit dem Programm rcconf, Anwender von Opensuse verwenden das entsprechende YaST-Modul. Vor jedem Benutzen müssen Sie danach Nessus allerdings mit sudo /etc/init.d/nessusd start manuell starten.

Vor dem ersten Betrieb gilt es, einen Nessus-Benutzer anzulegen. Dazu rufen Sie sudo /opt/nessus/sbin/nessus-adduser auf und folgen den Anweisungen. Als Login geben Sie einen beliebigen Namen ein, der auch mit einem vorhandenen Linux-Account übereinstimmen darf. Die Frage nach Authentication beantworten Sie mit der Standard Antwort pass für Passwort, das Sie danach frei wählen. Anschließend fragt das Programm, ob Sie den neuen Benutzer einschränken möchten. Verneinen Sie das mit der Eingabe von [Strg]+[D].

Theoretisch wäre Nessus nun einsatzbereit. Um jedoch immer die neuesten Plugins zu erhalten, müssen Sie Nessus kostenlos registrieren. Rufen Sie dazu die Registrierungsseite [8] auf und geben Sie eine funktionierende E-Mail-Adresse an. An diese Adresse schickt Tenable dann binnen einiger Stunden einen Registrierungscode. Mit der Eingabe von /opt/nessus/bin/nessus-fetch --register Registrierungscode übertragen Sie die Informationen an das Programm. Läuft Nessus als Daemon permanent im Hintergrund, versorgt er sich nun selbständig alle 24 Stunden mit den neusten Plugins. Alternativ stoßen Sie mit sudo /opt/nessus/sbin/nessus-update-plugins die Aktualisierung manuell an.

Der Client

Starten Sie als normaler Benutzer den Nessus-Client mit dem Aufruf /opt/nessus/bin/NessusClient im Terminal. Klicken Sie im Client-Fenster auf den Schalter Connect in der linken unteren Ecke, und wählen Sie aus der Liste localhost aus. Bearbeiten Sie den Eintrag mit Edit. Hostnamen und Port belassen Sie in der Standardeinstellung (localhost und 1241), bei Login tragen Sie den Benutzernamen und das Passwort des zuvor angelegten Users ein. Ein abschließender Klick auf Save sichert die Einstellungen. Zurück im Menü, wählen Sie localhost und betätigen danach Connect. Das Programmfenster teilt sich nun in die Reiter Scan und Report. Im ersten geben Sie neue Scans in Auftrag, im zweiten sehen Sie die Ergebnisse ein.

Der Reiter Scan unterteilt sich in zwei Spalten. Auf der linken Seite konfigurieren Sie die zu scannenden Hosts, auf der rechten wählen Sie die Scan-Regeln aus. Klicken Sie auf den Schalter mit dem Plus-Zeichen unterhalb der linken Spalte. Im sich öffnenden Dialog tragen Sie bei Host name die IP-Adresse des zu scannenden Rechners ein (Abbildung 7). Für einen ersten Test nutzen Sie zum Beispiel Ihren Router oder einen beliebigen PC im eigenen Netzwerk. Soll es direkt das ganze Netzwerk sein, wählen Sie bei den vier Radio-Buttons Subnet aus, und tragen bei Network ihre Netzwerkadresse ein, beispielsweise 192.168.1.0, ein. Unter Netmask ergänzen Sie die entsprechende Netzmaske, in unserem Beispiel 255.255.255.0. Anschließend klicken Sie auf Save.

Abbildung 7: Auf der rechten Seite des Hauptfensters fügen Sie die zu scannenden Hosts hinzu und legen die Netzwerkparameter fest.

Abbildung 7: Auf der rechten Seite des Hauptfensters fügen Sie die zu scannenden Hosts hinzu und legen die Netzwerkparameter fest.

Durch wiederholtes Klicken auf den +-Schalter fügen Sie beliebig viele Host in der linken Spalte hinzu. Um einen normalen Scan zu starten, wählen Sie hier die gewünschten Hosts aus und legen auf der rechten Seite die Default Scan Policy fest. Mit Scan Now bestätigen Sie die Wahl. Der Client wechselt dann automatisch in den Reiter Report. In der zweigeteilten Ansicht finden Sie auf der linken Seite eine Liste der gescannten Hosts. Ein Klick auf das kleine Kreuz vor dem Eintrag öffnet eine Baumansicht, die alle offenen Ports darstellt. Wählen Sie einen Host beziehungsweise einen Port aus, um weitere Informationen zu erhalten.

Der Dienstname, den Nessus vor dem Port anzeigt, gibt keinen Aufschluss darüber, welches Programm tatsächlich hinter diesem Port lauscht. Nessus zeigt lediglich den Standarddienst für diesen Ports an. Welcher Service sich tatsächlich dahinter verbirgt, signalisiert Nessus in der detaillierten Darstellung auf der rechten Seite.

Bis zum vollständigen Abschluss eines Scan-Laufs können je nach Umfang und Netzgeschwindigkeit Minuten oder gar Stunden vergehen. Den laufenden Scan zeigt der Client in der rechten unteren Fensterecke an, wo Sie ihn bei Bedarf jederzeit pausieren oder stoppen. Die Ergebnisse verarbeitet Nessus in Echtzeit. Nach dem Bestimmen der Dienste macht Nessus sich an die Arbeit, den Host auf bekannte Sicherheitslücken hin zu untersuchen. Findet sich eine, zeigt der Daemon sie in der Detailansicht an. Schwere Sicherheitslücken markiert Nessus rot, mittelschwere gelb. Zu jeder entdeckten Lücke bietet das Fenster eine Kurzbeschreibung und verweist darüber hinaus auf weitere Quellen im Netz (Abbildung 8).

Abbildung 8: Im Reiter "Report" zeigt Nessus das Ergebnis der Sicherheitsüberprüfung an. Die Farben der Einträge geben Aufschluss über deren Gefahrenpotential.

Abbildung 8: Im Reiter “Report” zeigt Nessus das Ergebnis der Sicherheitsüberprüfung an. Die Farben der Einträge geben Aufschluss über deren Gefahrenpotential.

Neue Regeln

Wechseln Sie zurück in den Scan-Reiter und klicken Sie auf den +-Schalter der rechten Spalte, um eine neue Scan-Policy hinzuzufügen. In der ersten Rubrik des Fensters Edit Policy legen Sie einen Namen für die neue Regel fest. In den Options geben Sie an, wie viele Tests Nessus gleichzeitig starten darf. Die voreingestellten Werte erwiesen sich jedoch als vernünftig. Sollte ihr System zu hoch oder zu niedrig ausgelastet sein, korrigieren Sie die Werte entsprechend. Unter Credentials stellen Sie ein, ob Sie einen Host nicht nur auf Remote-Exploits, sondern auch auf lokale Schwachstellen hin untersuchen möchten. Voraussetzung dafür ist ein laufender SSH-Daemon auf dem Rechner. Wählen Sie im Dropdown-Menü SSH settings und geben Sie Benutzernamen und Passwort oder Key für den zu scannenden Rechner ein. Im Reiter Plugin Selection legen Sie fest, welche Plugins das Programm zum Scan verwendet (Abbildung 9).

Abbildung 9: Im     <code srcset=

Policy Editor legen Sie fest, welche Plugins Nessus beim Scan verwendet.” width=”278″ height=”300″ /> Abbildung 9: Im Policy Editor legen Sie fest, welche Plugins Nessus beim Scan verwendet.

Wissen Sie zum Beispiel, dass auf dem Zielsystem Linux läuft, schalten Sie die Plugins für Windows, Solaris und Mac ab. Zu einem erheblichen Zeitgewinn führt das allerdings nicht, da Nessus ohnehin eine Vorauswahl trifft, welche Plugins es anwendet. Läuft auf dem Zielhost beispielsweise kein Webservice, findet auch kein CGI-Scan statt.

Sitzungen

Damit angelegte Hosts und Policies sowie fertige Scan-Reports nicht verloren gehen, erlaubt Nessus das Abspeichern von Sitzungen. Klicken Sie dazu im Menü auf File | Save as…. Der Client speichert eine Datei mit der Endung .nessus, die sie später über File | Open… wieder öffnen. Möchten Sie lediglich die Ergebnisse abspeichern, dann klicken Sie unter Report auf Export. Nessus erzeugt dann eine HTML-Seite mit allen Resultaten.

Als sehr nützliches Feature beim Scannen kompletter Netzwerke erweist sich das Filterwerkzeug: Damit weisen Sie Nessus an, beispielsweise nur schwere und mittelschwere Lücken anzuzeigen (Abbildung 10).

Abbildung 10: Speziell beim Scan kompletter Netzwerke erweist sich das Filterwerkzeug von Nessus als äußerst hilfreich, da es den Report auf bestimmte Kriterien einschränkt.

Abbildung 10: Speziell beim Scan kompletter Netzwerke erweist sich das Filterwerkzeug von Nessus als äußerst hilfreich, da es den Report auf bestimmte Kriterien einschränkt.

Klicken Sie dazu auf den Schalter Filter…. Die Einstellung im Dropdown-Menü Only show vulnerabilities… belassen Sie auf any. Im Menü darunter wählen Sie beim Eintrag Plugin severity is die Option Medium aus. Mit einem Klick auf den +-Schalter fügen Sie eine weitere Filterregel hinzu und wählen Plugin severity is in Kombination mit High.

Glossar

Nessus-Plugins

Vergleichbar mit den Virendefinitionen von Virenscannern. Sie enthalten Methoden, um Sicherheitslücken auf Rechnern aufzuspüren, ohne diese auszunutzen. Je aktueller diese Plugins sind, desto zuverlässiger findet Nessus auch kürzlich bekannt gewordene Schwachstellen.

Infos

[1] OSI-Schichtenmodell: http://de.wikipedia.org/wiki/OSI-Modell

[2] IANA: http://iana.org

[3] Nmap: http://nmap.org

[4] Portbunny: http://portbunny.recurity.com

[5] Nessus: http://www.nessus.org

[6] Metasploit-Framework: http://www.metasploit.com

[7] Nessus herunterladen: http://nessus.org/download/

[8] Nessus registrieren: http://www.nessus.org/plugins/index.php?view=register

LinuxUser 11/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben