Author: Zalewski M.  

Tags: internet   kommunikation im internet  

ISBN: 3-446-40800-2

Year: 2007

Text
                    michal ZALEWSKI
) - «...^ F.
STILLE
I NETZ
EIN PRAXISHANDBUCH ZU
PASSIVER RECONNAISSANCE
UND INDIREKTEN ANGRIFFEN
„Zalewski's book should be read by
anyone interested in Computer security."
Srijith Krishnan Nair, ACM Reviews.com
HANSER
NO STAUCH
PRESS


Michal Zalewski Stille im Netz Ein Praxishandbuch zu passiver Reconnaissance und indirekten Angriffen HANSER
Copyright © 2005 by Michal Zalewski. Title of English-language original: Silence on the Wire, ISBN 1-59327-046-1, publishedbyNo Starch Press. Geiman-language edition Copyright © 2007 by Carl Hanser Verlag. All rights reserved. Übersetzung: Christian Alkeinper, Karlsruhe Alle in diesem Buch enthaltenen Informationen, Verfahren und Darstellungen wurden nach bestem Wissen zusammengestellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund sind die im vorliegenden Buch enthaltenen Informationen mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine juristische Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieser Informationen — oder Teilen davon — entsteht. Ebenso übernehmen Autoren und Verlag keine Gewähl' dafür, dass beschriebene Verfahren usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt deshalb auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Bibliografische Information Der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Fotokopie, Mikrofilm oder ein anderes Verfahren) — auch nicht für Zwecke der Unterrichtsgestaltung — reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. © 2007 Call Hanser Verlag München Wien Lektorat: Fernando Schneider Herstellung: Monika Kraus Umschlagdesign: Marc Müller-Bremer, Rebranding, München Umschlaggestaltung: MCP ■ Susanne Kraus GbR, Holzkirchen Datenbelichtung, Druck und Bindung: Kösel, Krugzell Ausstattung patentrechtlich geschützt. Kösel FD 351, Patent-Nr. 0748702 Printed in Geimany ISBN-10: 3-446-40800-2 ISBN-13: 978-3-446-40800-5 www.hanser.de/cornputer
Für Maja
Über den Autor Michal Zalewski ist Autodidakt im Bereich der IT-Sicherheitsforschung. Er arbeitet an so unterschiedhchen Themen wie Entwicklungsprinzipien für Haidwaie und Betiiebssysteme einerseits und der Netzwerktechnologie andererseits. Zalewski ist ein erfahrener Bugjäger und seit Mitte der Neunzigerjahre regelmäßiger BugTraq-Poster. Femer ist er Autor beliebter Sicherheitsutilitys wie pOf einem Tool für passives Betiiebssystem-Fingeiprinting. Außerdem hat er eine Anzahl von der Kritik gelobter Artikel verfasst. Michal Zalewski hat als Sicherheitsfachrnann für viele bekannte Unternehmen (darunter zwei große Telekormnunikationsfirmen) in seinem Herkunftsland Polen und in den Vereinigten Staaten gearbeitet. Er ist nicht nur ein begeisterter Forscher und Gelegenheitspro- grarnrnierer, sondern beschäftigt sich nebenbei auch ein wenig mit Bereichen wie der künstlichen Intelligenz, der angewandten Mathematik und der Elektronik und ist außerdem Fotograf aus Leidenschaft.
Inhalt Einleitung 1 Teil I - Die Quelle 1 Die redselige Tastatur 7 1.1 Zufall — wofür eigentlich? 8 1.1.1 Zufallszahlen automatisiert erzeugen 11 1.2 Wie sicher sind Zufallsgeneratoren? 12 1.3 I/O-Entropie: Hier kommt die Maus! 13 1.3.1 Interrupts in der Praxis 13 1.3.2 Abkürzung ohne Rückfahrschein 16 1.3.3 Von der Bedeutung, pedantisch zu sein 18 1.4 Entropie—je mehr desto besser 18 1.5 Angriff: Folgen eines jähen Paradigmenwechsels 20 1.5.1 Tastatureingaben unter der Lupe 21 1.5.2 Taktiken zur Verteidigung 24 1.5.3 Zufallszahlenerzeugung via Hardware — die bessere Lösung? 25 1.6 Denkanstöße 26 1.6.1 Entfernte Tirningangriffe 27 1.6.2 Ausnutzen der Systemdiagnose 27 1.6.3 Reproduzierbare Unberechenbarkeit 28 2 Mehrarbeit fällt auf 29 2.1 BoolesErbe 29 2.2 Auf dem Weg zum Universaloperator 30 2.2.1 DeMorgan im Einsatz 31 2.2.2 Komfort ist notwendig 32 2.2.3 Die Komplexität beim Schöpfe packen 33 2.3 ... und weiter in die Welt der Materie 34 2.4 Der stromlose Computer 34 2.5 Eine Computerkonstruktion, die ein ganz klein wenig weiter verbreitet ist 36 V
2.5.1 Logikgatter 36 2.6 Von Logikoperatoren zu Berechnungen 37 2.7 Von der elektronischen Eieruhr zum Computer 40 2.8 Turingund die Komplexität von Anweisungsmengen 42 2.8.1 Endlich: Funktionalität 43 2.8.2 Der Heilige Gral: Em programmierbarer Computer 44 2.8.3 Fortschritt durch Schlichtheit 45 2.8.4 Aufgabenverteilung 46 2.8.5 Ausfuhrungsstufen 47 2.8.6 Speicher ist nicht gleich Speicher 48 2.8.7 Mehr desselben: Pipelining 49 2.8.8 Das große Problem beim Pipelining 50 2.9 Auswirkungen — die kleinen Unterschiede 51 2.9.1 Mit Ablaufmustern Daten rekonstruieren 52 2.9.2 Bit für Bit 53 2.10 In der Praxis 54 2.10.1 Early-Out-Optimierung 55 2.10.2 Funktionierender Code — selbstgemacht 57 2.11 Vorbeugung 59 2.12 Denkanstöße 59 3 Die zehn Häupter der Hydra 61 3.1 Aufschlussreiche TV-Ausstrahlung 61 3.2 Datenschutz mit beschränkter Häftling 64 3.2.1 Er war's, erwar's, er war's! 64 3.2.2 Moment mal: *_~lq'@@ ... und Ihr Passwort lautet 66 4 Wirken für das Gemeinwohl 67 4.1 Das große Krabbeln 67 Teil II - Der sichere Hafen 5 Blinkenlichten 75 5.1 Die Kunst, Daten zu übertragen 75 5.1.1 Wie aus Ihrer Mail eine Menge Lärm wird — und dann wieder eine Mail 78 5.1.2 Die Situation heute 84 5.1.3 Manchmal ist auch ein Modem nur ein Modem 85 5.1.4 Kollisionen unter Kontrolle 86 5.1.5 Hinter den Kulissen: Die Sache mit den Leitungen — und unsere Lösung dafür 88 5.1.6 Blihkenlichten in der Kommunikation 90 5.2 Die Auswirkungen der Ästhetik 91 5.3 Spionageausrüstung selbstgebaut 93 5.4 ... und eingesetzt 94 5.5 Wie man die Zeigefreudigkeit von LEDs bändigt — und warum es dann doch nicht klappt...97 5.6 Denkanstöße 101
6 Echos der Vergangenheit 103 6.1 Der Turmbau zu Babel 103 6.1.1 Das OSI-Modell 104 6.2 Der fehlende Satz 106 6.3 Denkanstöße 108 7 Sicherheit in geswitchten Netzwerken 109 7.1 Ein wenig Theorie 110 7.1.1 Adressauflösung und Switching 110 7.1.2 Virtuelle Netzwerke und Datenverkehrsrnanagement 112 7.2 Angriff auf die Architektur 114 7.2.1 CAM-Überlauf und erlauschte Daten 114 7.2.2 Weitere Angriffsszenarien: DTP, STPund Trunks 115 7.3 Vorbeugung 116 7.4 Denkanstöße 116 8 Wir gegen die 119 8.1 logische" Blinkenlichten und ihre ungewöhnliche Verwendung 121 8.1.1 Zeig mir, wie du tippst, und ich sage dir, wer du bist 121 8.2 Private Daten, wohin man auch sieht 122 8.3 Wi-Fi-spezifische Sicherheitslücken 123 Teil IM-In der Wildnis 9 Der verräterische Akzent 129 9.1 Die Sprache des Internets 130 9.1.1 Routing auf naive Art 131 9.1.2 Routing im wirklichen Leben 132 9.1.3 Der Adressraum 132 9.1.4 Fingerabdrücke auf dem Umschlag 135 9.2 Das IP-Protokoll 135 9.2.1 Protokollversion 135 9.2.2 Header-Länge 136 9.2.3 Diensttyp (Type of Service, TOS) 137 9.2.4 Paketlänge 137 9.2.5 Absenderadresse 137 9.2.6 Zieladresse 138 9.2.7 Kennung des übergeordneten Protokolls 138 9.2.8 TTL 138 9.2.9 Flags und Offsets 139 9.2.10 IP-Kennung 141 9.2.11 Prüfsumme 141 9.3 Jenseits von IP 141 9.4 Das UDP-Protokoll 142 9.4.1 Einführung in die Portadressierung 143 9.4.2 Übersicht zum UDP-Header 144
9.5 TCP-Pakete 144 9.5.1 TCP-Handshake mit Steuer-Flags 145 9.5.2 Weitere Parameter des TCP-Headers 148 9.5.3 TCP-Optionen 150 9.6 ICMP-Pakete 152 9.7 Bühne frei für passives Fingerprinting 154 9.7.1 Schnüffeln in IP-Paketen: Die gute alte Zeit 154 9.7.2 Der TTL-Startwert (IP-Schicht) 155 9.7.3 Das DF-Flag (IP-Schicht) 155 9.7.4 Die IP-Kennung (IP-Schicht) 156 9.7.5 Diensttyp (IP-Schicht) 156 9.7.6 Felder mit erzwungenen Null- und Nichtnullwerten (TP- und TCP-Schichten) 157 9.7.7 Quellport (TCP-Schicht) 157 9.7.8 Fenstergröße (TCP-Schicht) 158 9.7.9 Dringlichkeitszeiger und Bestätigungsnummer (TCP-Schicht) 159 9.7.10 Reihenfolge und Einstellungen von Optionen (TCP-Schicht) 159 9.7.11 Fensterskalierung (TCP-Schicht) 159 9.7.12 MSS (Option in der TCP-Schicht) 160 9.7.13 Zeitstempeldaten (Option in der TCP-Schicht) 160 9.7.14 Andere Schauplätze passiven Fingeiprintings 161 9.8 Passives Fingeiprinting in der Praxis 161 9.9 Passives Fingeiprinting in der praktischen Anwendung 163 9.9.1 Statistikermittlung und Ereignisprotokollierung 164 9.9.2 Optimierung von Inhalten 164 9.9.3 Durchsetzung von Richtlinien 165 9.9.4 Die Sicherheit des kleinen Mannes 165 9.9.5 Sicherheitstestsund angriffsvorbereitende Beurteilung 165 9.9.6 Erstellung von Kundenprofilen und Eindringen in die Privatsphäre 166 9.9.7 Spionage und verdeckte Aufklärung 166 9.10 Wie man Fingeiprinting verhindert 166 9.11 Denkanstöße: Der verhängnisvolle Fehler bei der IP-Fragmentierung 167 9.11.1 Wie man TCP zertrümmert 170 10 Schäfchen zählen für Fortgeschrittene 173 10.1 Vor-und Nachteile des traditionellen passiven Fingerprintings 173 10.2 Eine kurze Geschichte der Sequenznummern 176 10.3 Holen Sie mehr aus Ihren Sequenznummern 177 10.4 Koordinatenverzögerung: Zeitliche Abfolgen in Bildern 179 10.5 Schöne Bilder: Die Galerie des TCP/TP-Stapels 182 10.6 Angreifen mit Attraktoren 189 10.7 Zurück zum Fingeiprinting 192 10.7.1 ISNProber: Theorie in Aktion 193 10.8 Wie man die passive Analyse verhindert 194 10.9 Denkanstöße 194
11 Anomalien erkennen und nutzen 197 11.1 Grundlagen zu Paket-Firewalls 198 11.1.1 Zustandslose Filterung und Fragmentierung 199 11.1.2 Zustandslose Filterung und unsynchrone Daten 200 11.1.3 Zustandsbehaftete Paketfilter 202 11.1.4 Neuschieiben von Paketen und NAT 203 11.1.5 Lost in Translation 204 11.2 Der Mummenschanz und seine Folgen 206 11.3 Roulette spielen mit der Segmentgröße 207 11.4 Zustandsbehaftete Nachverfolgung und unerwartete Antworten 208 11.5 Zuverlässigkeit oder Leistung: Der Streit ums DF-Bit 210 11.5.1 Ausfallszenarien für die PMTU-Erkennung 210 11.5.2 Der Kampf gegen PMTUD und seine Nebenprodukte 212 11.6 Denkanstöße 212 12 Löcher im Datenstapel 215 12.1 Kristjans Server 215 12.2 Erstaunliche Erkenntnisse 216 12.3 Die Offenbarung: Reproduktion eines Phänomens 218 12.4 Denkanstöße 219 13 Schall und Rauch 221 13.1 Der Missbrauch von IP, oder: Port-Scanning für Fortgeschrittene 222 13.1.1 Eins, zwei, drei, vier, Eckstein 222 13.1.2 Idle-Scanning 223 13.2 Idle-Scanning abwehren 225 13.3 Denkanstöße 226 14 Clientidentifikation: Die Ausweise, bitte! 227 14.1 Die Kunst der Tarnung 228 14.1.1 Wie man das Problem angeht 229 14.1.2 Wie die Lösung aussehen könnte 229 14.2 Eine (ganz) kurze Geschichte des Web 230 14.3 Eine Einführung in HTTP 232 14.4 Wie HTTP besser wird 234 14.4.1 Latenzverringerung per Notnagel 234 14.4.2 Caching von Inhalten 236 14.4.3 Sitzungen mit Cookies verwalten 238 14.4.4 Cache und Cookies: Die Mischung macht's 240 14.4.5 Wie man die Cache-Cookie-Attacke verhindert 240 14.5 Verrat! Verrat! 241 14.5.1 Verhaltensanalyse: Eine einfache Fallstudie 242 14.5.2 Was uns der Künstler mit seinem Bild sagen will 244 14.5.3 Gentlemen, startyour engines! 246 14.5.4 Was sonst noch hinter dem Horizont lauert 246
14.6 Vorbeugung 248 14.7 Denkanstöße 248 15 Das Opfer als Nutznießer 249 15.1 Angriffsmetriken definieren 250 15.2 Den Beobachter beobachten 254 15.3 Denkanstöße 255 Teil IV - Das große Ganze 16 Parasitic Computing, oder: Kleinvieh macht auch Mist 259 16.1 Knabbern an der CPU 260 16.2 Praktische Aspekte 263 16.3 Parasitic Storage — früher 265 16.4 Parasitic Storage — heute 267 16.5 Anwendungen, soziale Gesichtspunkte und Abwehr 273 16.6 Denkanstöße 274 17 DieTopologie des Netzwerks 275 17.1 Momentaufnahmen 275 17.2 Herkunftsnachweis mit Topologiedaten 278 17.3 Netzwerktriangulation mit Topologiedaten 280 17.4 Stresstest im Netzwerk 282 17.5 Denkanstöße 284 18 Der Blick in die Leere 285 18.1 Taktische Ansätze der direkten Beobachtung 285 18.2 Die Abfallprodukte einer Attacke 289 18.3 Wie man verstümmelte oder fehlgeleitete Daten erkennt 291 18.4 Denkanstöße 293 Nachwort 295 Literatur 297 Register 301
Vorwort Was braucht es, um einen Roman zur Computersicherheit zu schieiben? Oder besser: Um überhaupt einen Roman zur modernen Datenverarbeitung zu schieiben? Einen jungen und doch sehr erfahrenen Autor mit Begabungen in vielen Bereichen wie Computing, Mathematik und Elektronik, vielleicht der Robotertechnik als Hobby, zahlreichen anderen, auf den ersten Blick fachfrernden Interessen (wie beispielsweise der fatalistischen erotischen Fotografie) und dem ausgeprägten Wunsch, zu schieiben - wobei diese Begabung gleichermaßen ausgeprägt ist. Es war einmal in einem dunklen und weitgehend unerforschten Wald. Dort gebaren die (Hirnzellen-)Bäume dank Zauberwerk ein Datenbit. Sie sandten es einen reißenden Fluss hinab, bis es das riesige Meer (des Internets) erreichte. Dort fand es ein neues Heim, sein Grab oder vielleicht auch einen Platz in einem Museum. Und so beginnt unsere Geschichte. Ob unser kleines Bit gut oder böse ist, spielt keine Rolle: Bereits in jungen Jahren wird es den Strom erreichen, der in eine strahlende Burg führt, welche aus weißem Metall gebaut ist (und den meisten doch nur als schwarzer Kasten gilt). Es wird durch das Portal treten und sich zum Schalter begeben, um sich anzumelden. Wäre es nicht so naiv und blauäugig, es hätte die Gruppe verkommen aussehender Bits längst bemerkt, die den Schalter von Ferne beäugen und zur Kenntnis nehmen, wann immer Bits ein- oder auschecken; allerdings hätte es sowieso keine andere Wahl gehabt, als mit der Anmeldung fortzufahren. Nach einer kurzen Erholung würde unser Held gebeten, sich seinen Geschwistern oder einer anderen Gruppe von Bits beizugesellen. Gemeinsam würden sie ihre Leiber dann sämtlichst in ein gebrauchtes Schlauchboot quetschen. Ein vorsichtiges Bit könnte Abfallbits im Boot bemerken, die mutmaßlich von einer vorherigen Fracht übrig geblieben sind. (Aber ist das eigentlich wirklich Abfall?) Nach einer langen und beengten Fahrt durch Staus und vorbei an vielen Verkehrsampeln (deren Lichtzeichen selbstverständlich beachtet werden) gelangen unsere Bits in einen sicheren Hafen und schippern dort zu den Landungsbrücken. Wird man sie von den Burgen und Leuchttürmen in der Nähe aus wahrnehmen? Wird jemand hingehen und verzeichnen, wann die Ampeln umschalteten — nur um genau sagen zu können, XI
wann unser Trupp fuhr? Wird irgendjemand Scheinwerfer auf den Pier richten und dort Fotos machen? Werden die anderen bösen Bits die Identität unserer Haudegen übernehmen und zuerst absegeln? Unsere Bits würden es nicht wissen. Und so wechseln sie am Pier das Gefährt und stechen erneut in See. Die Fahrt unserer Helden geht weiter, und es stehen ihnen noch viele Gefahren bevor ... Nein, Michal Zalewskis Buch verbirgt die technischen Abläufe nicht hinter einer Mär, wie ich es gerade getan habe. Stattdessen beschreibt es alle Fakten klar und deutlich und vermittelt die Lösungen für die größten Herausforderungen gleich zu Anfang jedes Kapitels. Und trotzdem macht es Spaß, dieses Buch zu lesen. Stille im Netz ist in vielerlei Hinsicht einmalig. Zwei Aspekte aber treten besonders deutlich zutage: Zunächst bietet es eine ausführliche Beschreibung fast aller wesentlichen Phasen der Datenverarbeitung, die das moderne ,Jnternetworking" ermöglichen — von der ersten Tastaturbetätigung bis zum gewünschten endgültigen Ergebnis dieser Handlung. Zweitens skizziert es die weitgehend vernachlässigten, zu wenig erforschten und inhärenten Sicherheitsfragen, die mit der Netzwerktechnologie im Ganzen und mit jeder ihrer einzelnen Phasen verbunden sind. Die hier behandelten Sicherheitsprobleme eignen sich gut, um die verschiedenen Formen der Erforschung von Schwachstellen sowohl aus der Perspektive des Angreifers als auch aus der des Verteidigers zu demonstrieren, und bestärken den Leser darin, weitere Untersuchungen in diesem Bereich anzustellen. Natürlich kann ein Buch über Computersicherheit niemals vollständig sein. In Stille im Netz provoziert Zalewski durch seinen Ansatz, all die veitiauten, hochgiadig gefährlichen und weitverbreiteten Sicherheitslücken und Angriffe, die heutzutage von fast allen Mitgliedern der Datensicherheits-Cormnunity beschrieben werden, außen vor zu lassen. Er erzählt Ihnen vielmehr etwas über subtile tastaturbasierte Timingangriffe, erwähnt aber nicht, dass Trojanische Pferde, die Tastatureingaben protokollieren können, derzeit nicht nur wesentlich häufiger auftreten, sondern generell auch einfacher zu realisieren sind, als es die von ihm beschriebene Angriffsform je sein wird. Man ist zu fragen versucht, warum Timingangriffe erwähnt werden, Trojaner jedoch nicht. Nun, solche auf Ablaufmustem basierenden Angriffe werden auch von den Profis im Bereich IT-Sicherheit weitgehend unterschätzt, während Trojanische Pferde eine Bedrohung darstellen, die weithin bekannt und offenkundig ist. Die Anfälligkeit gegenüber Timingan- griffen ist eine strukturelle Eigenschaft zahlreicher häufig eingesetzter Komponenten, wählend die Implantation eines Trojaners entweder einen Softwarefehler oder ein Fehlver- halten des Endbenutzers erfordert. Von nur sehr wenigen Ausnahmen abgesehen werden Sie in Stille im Netz konsequenterweise nicht die kleinste Einlassung zu vielfach ausgenutzten Softwarebugs finden - nicht einmal universelle „Bugklassen" wie Pufferüberläufe werden hier mit einem Wort erwähnt. Wenn Sie mit den gängigen Computersicherheitsrisiken nicht vertraut sind und dieses Wissen erwerben wollen, dann müssen Sie sich unter Umständen auch weniger spannendes Material (insbesondere zu den von Ihnen verwendeten Betriebssystemen) zu
Vorwort Gemüte führen, welches Sie im Internet und in anderen Büchern finden. Dann aber wird dieses Buch sie mitnehmen auf eine spannende Reise. Warum aber sollte man sich der Stille widmen, fragen Sie sich? Die Stille ist doch ein Nichts! In gewissem Sinne schon. Eine Null ist in diesem gewissen Sinne auch ein Nichts. Aber sie ist auch eine Zahl — ein Konzept, ohne welches wir die Welt nicht verstehen können. Genießen Sie die Stille — so gut wie möglich. Alexander Peslyak Gründer und technischer Direktor von Openwall, Inc. besser bekannt unter dem Namen Solar Designer Leiter des Openwall-Projekts XIII
Einleitung Ein paar Worte zu meiner Person Ich bin wohl schon als Cornputerfreak geboren worden, aber meine Abenteuer in der Netzwerksicherheit begannen eigentlich nur' durch einen Zufall. Ich habe es immer gehebt, zu experimentieren, neue Ideen zu erforschen und scheinbar fest urnrissene, aber doch verlockende Herausforderungen anzugehen, die innovative und kreative Vorgehensweisen erforderten — auch wenn ich am Ende nicht immer erfolgreich war. Als ich jung war, verbrachte ich meine Zeit vorzugsweise mit manchmal riskanten und oftmals peinlichen Versuchen, die Welten der Chemie, der Mathematik, der Elektronik und schließlich auch der Computertechnik zu erforschen, statt den ganzen Tag lang mit meinem Rad um den Block zu heizen. (Wahrscheinlich übertreibe ich ein bisschen, aber meine Mutter hat sich scheinbar ständig Sorgen gemacht.) Kurz nach meiner ersten Begegnung mit dem Internet (Mitte der Neunziger, etwa acht Jahre, nachdem ich mein erstes , JTallo Weif'-Programm auf meinem gehebten 8-Bit-Rechner entwickelt hatte) erhielt ich ein sehr ungewöhnliches Gesuch. Es handelte sich um ein Werbeschreiben, welches - wie abwegig! — mich (und ein paar Tausend andere Leute) aufforderte, Mitglied eines Untergrundteams vermutlich bösartiger Black-Hats zu werden. Ich ging dann zwar nicht in den Untergrund - vielleicht aufgrund eines stark ausgeprägten Selbsterhaltungstriebs (welcher mancherorts auch mit dem Begriff „Feigheit" beschrieben wird) —, aber irgendwie motivierte mich dieser Vorfall, den Bereich der Computersicherheit genauer zu erforschen. Da ich hobbymäßig bereits viel programmiert hatte, fand ich es fesselnd, mir Code aus einer anderen Perspektive anzusehen und Wege zu suchen, wie man einen Algorithmus rnehr machen lassen kann als das, wofür er ursprünglich gedacht war. Das Internet schien mir eine unerschöpfliche Ressource für die Art von Herausforderungen zu sein, die ich mir erträumte — ein riesiges und komplexes System, das nur einem Prinzip gehorchte: Traue niemandem! So fing alles an. Ich verfüge nicht über den Background, den Sie vielleicht von einem normalen Sicherheitsexperten erwarten würden, denn schließlich ist das heute ja ein ganz respektabler' Beruf. Ich habe niemals eine formale Ausbildung im Bereich der Computertechnik erhalten
Einleitung und kann auch keine Sammlung von Zertifikaten bedeutend klingender Institutionen vorweisen. Sicherheit war einfach immer eine meiner großen Leidenschaften (und mittlerweile lebe ich auch davon). Ich gehöre auch nicht zu den typischen Cornputerfreaks: Hin und wieder nehme ich etwas Abstand von meiner Arbeit, um sie aus einer gesunden Distanz zu betrachten. Und manchmal mache ich auch eine Zeit lang überhaupt nichts mit Computern. All diese Umstände sind — im Guten oder vielleicht auch Schlechten — in Fonn und Inhalt dieses Buches eingeflossen. Mein Ziel besteht darin, anderen meine Sicht der Computersicherheit zu präsentieren — und nicht die, die gewöhnlich gelehrt wird. Für mich ist Sicherheit kein isoliertes Problem, das gelöst werden muss. Sie ist auch kein Prozess, den man Schritt flu' Schritt abarbeiten kann. Ebenso wenig steht und fällt sie mit dem Fachwissen in einem bestimmten Bereich. Unter Sicherheit verstehe ich eine Übung in der Betrachtung des gesamten Ökosystems und im Verstehen aller dazu gehörenden Komponenten. Ein paar Worte zu diesem Buch Auch im fahlen Licht unserer Monitore besehen sind wir menschliche Wesen. Man hat uns gelehrt, anderen zu vertrauen, und man will ja auch nicht überrnäßig argwöhnisch erscheinen. Also müssen wir einen vernünftigen Kornprorniss zwischen Sicherheit und Produktivität finden, um ein angenehmes Leben fuhren zu können. Das Internet aber ist anders als die Gesellschaften im wirklichen Leben. Man kann keinen allgemeinen Nutzen daraus ziehen, sich an die Regeln zu halten. Zudem muss man virtuelle Missetaten nur selten bereuen. Wir können dem System also nicht einfach trauen, und alle Versuche, auch nur eine einzige Regel zu ersinnen, die sich auf alle Probleme anwenden lässt, sind unweigerlich zum Scheitern verurteilt. Instinktiv ziehen wir eine Grenze, um „uns" von „denen" abzuschotten, und betrachten dies dann als sicheres Eiland. Dann fangen wir- an, nach feindlichen Schiffen am Horizont Ausschau zu halten. Nur allzu bald tauchen die ersten Sicherheitsprobleme auf: lokal eingrenzbare Abnormitäten, die sich ganz einfach definieren, diagnostizieren und beheben lassen. Aus dieser Perspektive werden die Angreifer von klar definierten Motiven angetrieben, und wir- können sie rechtzeitig erkennen und stoppen, wenn wir nur aufmerksam genug sind. Doch in der virtuellen Welt sieht manches anders aus: Sicherheit ist mehr als das Fehlen von Bugs, und Schutz besteht nicht nur darin, sich außerhalb der Reichweite von Angreifern zu befinden. Praktisch jedem Vorgang, bei dem Daten im Spiel sind, wohnen sicherheitstechnische Aspekte inne, die uns in dem Moment offenbar weiden, in dem wir- über den Bereich des eigentlichen Ziels hinaussehen, das mit dem Prozess erreicht weiden soll. Die Kunst, Sicherheit zu verstehen, besteht einfach darin, Grenzen zu überschreiten und die Perspektiven zu wechseln. Dies ist ein unkonventionelles Buch - zumindest hoffe ich das. Es handelt sich nicht um ein Kompendium von Problemen oder einen Leitfaden zur Absicherung Ihrer Systeme. Vielmehr beginnt es mit dem Versuch, dem Weg eines Datenelements zu folgen - von dem Moment, in dem Sie Ihre Hände auf die Tastatur legen, über die gesamte Strecke bis hin zum Empfänger am anderen Ende der Leitung. Behandelt werden Technologien und 2
Einleitung ihre Sicherheitsaspekte, wobei wir uns auf Probleme konzentrieren werden, die nicht als Bugs bezeichnet werden können - Probleme, bei denen kein Angreifer, kein zu analysierender und zu behebender Fehler, ja, noch nicht einmal ein Angriff vorhanden ist (zumindest kein Angriff, den wir von zulässigen Aktivitäten unterscheiden können). Ziel dieses Buches ist es, zu demonstrieren, dass die einzige Möglichkeit, das Internet zu verstehen, darin besteht, genug Mut zu haben, um jenseits der Spezifikationen zu agieren oder zwischen den Zeilen zu lesen. Wie der Untertitel bereits nahe legt, behandelt dieses Buch in erster Linie Datenschutz- und Sicherheitsprobleme, die Bestandteil der täglichen Kornmunikation und Datenverarbeitung sind. Einige dieser Problerne haben tiefgreifende Auswirkungen, während andere lediglich interessant und anlegend sind. Keines der beschriebenen Probleme wirkt sich direkt auf Ihre Umgebung aus oder zerstört Daten auf Ihrer Festplatte. Die vermittelten Informationen sind nützlich und wertvoll für IT-Profis und beschlagene Amateure, die eine Herausforderungen für ihre grauen Zellen suchen und mehr zu den diffusen Folgen struktureller Entscheidungen erfahren wollen. Dieses Buch ist für jene gedacht, die lernen wollen, wie man diese Feinheiten nutzt, um seine Umgebung zu kontrollieren und der Außenwelt stets einen Schritt voraus zu sein. Das Buch ist in vier Teile gegliedert. Die ersten drei behandeln Phasen des Datenflusses und die dabei zum Einsatz kommenden Technologien. Der letzte Abschnitt hingegen betrachtet das Netzwerk als Ganzes. Jedes Kapitel beschreibt die relevanten Elemente der zur Veraibeitung von Daten in den einzelnen Phasen verwendeten Technologien, erläutert die relevanten sicherheitstechnischen Auswirkungen, veranschaulicht möghche Nebeneffekte und bietet (sofern möglich) Lösungsvorschläge für die behandelten Probleme und Empfehlungen zur Vertiefung des jeweiligen Themas. Ich werde mein Bestes geben, um weitgehend ohne Elemente wie Diagiamme, Tabellen, Spezifikationen usw. auszukommen. (Um eine größere Zahl von Fußnoten kommen Sie allerdings nicht herum.) Da online eine Menge gutes Referenzmaterial verfügbar ist, habe ich mein Hauptaugenmerk darauf gelegt, dieses Buch einfach zu einer vergnüglichen Angelegenheit zu machen. Können wir anfangen? 3
Die Quelle Von den Problemen, die bereits auftauchen, lange bevor man Daten über das Netzwerk versendet
1 Die redselige Tastatur Erstes Kapitel. In welchem wir ergründen werden, wie sich Tastaturaktivitäten überwachen lassen - aus ganz, ganz großer Entfernung Von der Sekunde an, in der Sie die erste Taste auf Ihrer Tastatur drücken, machen sich Daten, die Sie versenden, auf eine lange Reise durch die virtuelle Welt. Bereits Mikrosekun- den, bevor Pakete durch Glasfaserleitungen rasen und von Satelritentransceivem weitergeleitet werden, begibt sich ein Datenelement auf einen langen Trip quer durch ein beeindruckendes Labyrinth aus Schaltkreisen. Noch ehe Ihre Tastatureingaben vom Betriebssystern empfangen und Anwendungen gestaltet wurden, sind bereits zahlreiche präzise und subtil agierende rnaschinennahe Mechanismen mit einem Vorgang befasst, der für Hacker jeder Alt interessant und auch für Sicherheitsfachleute von großer Bedeutung ist. Der Weg in die Gefilde des Users birgt viele Überraschungen. In diesem Kapitel werden wir uns mit den frühen Phasen der Datenbewegung und den Möglichkeiten befassen, die sich Ihren (potenziell niederträchtigen) Mitbenutzem bieten, viel zu viel über das herauszufinden, was Sie - an Ihrern Terminal vermeintlich geschützt - so treiben. Ein charakteristisches Beispiel potenzieller Datenoffenlegung durch die Art und Weise, wie ein Computer Eingaben veraibeitet, finden wir in einem Bereich vor, der - zumindest auf den ersten Blick - so gar nichts damit zu tun zu haben scheint: der schwierigen Aufgabe, Zufallszahlen mit einem Gerät zu erzeugen, welches vollkommen berechenbar arbeitet. Eine weniger offensichtliche Verbindung mag schwer vorstellbar sein, doch das Problem, von dem die Rede ist, ist ausgesprochen real, und ein heimlicher Beobachter kann eine ganze Menge aus den Aktivitäten eines Benutzers herleiten - von seinen Passwörtem bis hin zu privaten E-Mails.
1 Die redselige Tastatur 1.1 Zufall - wofür eigentlich? Computer sind vollständig detenninistisch, d. h. sie verarbeiten Daten auf eine Art und Weise, die von einer Ordnung wohldefinierter Gesetzmäßigkeiten geregelt wird. Techniker und Ingenieure geben ihr Bestes, um Schwächen beim Herstellungsprozess und Unzulänglichkeiten der elektronischen Komponenten selbst (z. B. in Bezug auf Interferenzen und andere Störungen) auszugleichen — alles nur, um zu gewährleisten, dass die Systeme immer derselben Logik folgen und korrekt arbeiten. Wenn solche Komponenten aufgrund von Alterung oder Belastung nicht rnehr wie erwartet funktionieren, betrachten wir den Computer als fehlerhaft. In Kombination mit ihren fantastischen Rechenkünsten ist es vor allem die Fähigkeit dieser Maschinen, ein derartiges Maß an Konsistenz zu erzielen, die Computer zu einem solch großartigen Werkzeug für' all jene machen, die sie zu beherrschen und zu kontrollieren verstehen. Eines muss natürlich klar- sein: Es ist nicht alles Gold, was glänzt, und nicht alle, die über die Unzuverlässigkeit von Computern schimpfen, haben unrecht. Trotz makelloser Funktion der Hardware neigen Cornputerprogramme bei verschiedenen Gelegenheiten zu Fehlverhalten. Das liegt daran, dass zwar' Computerhardware konsistent und zuverlässig arbeiten kann (und dies häufig auch tut), man aber normalerweise nie langfristige Voraussagen zum Verhalten eines einigermaßen komplexen Cornputerprogramms treffen kann — von einer komplexen Matrix voneinander abhängiger Programme (wie etwa einem Betriebssystem) einmal ganz abgesehen. Dies macht eine Bewertung von Cornputerpro- grarnrnen auch dann recht schwierig, wenn ein detailliertes, einigermaßen stringentes und doch fehlerfreies hypothetisches Modell dessen vorliegt, was das Programm tun sollte. Warum? Nun, 1936 wies Alan Turing, einer der Urväter des Computers, durch eine Reduc- tio ad absurdum (Zuriickfuhrung auf einen Widerspruch) nach, dass es keine allgemeingültige Methode zur Bestimmung des Ergebnisses einer beliebigen Computerprozedur' (oder eines Algorithmus) innerhalb einer endlichen Zeit geben kann (wiewohl spezifische Methoden für einige Algorithmen durchaus existieren können).1 In der Praxis bedeutet dies, dass Sie zwar' nicht davon ausgehen können, dass Ihr' Betriebssystem oder Ihre Textverarbeitung sich für' alle Ewigkeit so verhalten werden, wie Sie oder der Programmautor es sich wünschen, aber Sie können mit gutem Grund erwarten, dass zwei Instanzen einer Textverarbeitung auf Systemen, die auf derselben Hardware basieren, bei gleicher Eingabe ein konsistentes und identisches Verhalten an den Tag legen (natürlich immer vorausgesetzt, dass nicht eine der Instanzen durch ein vom Himmel fallendes Klavier zerstört oder aufgrund anderer externer Einflüsse widriger Art beeinträchtigt wird). Für' die Softwareuntemehmen ist dies zwar eine sehr willkommene Erkenntnis, aber uns Sicherheitsleuten wäre sicher in manchen Fällen wohler, wenn Computer ein bisschen weniger deterministisch wären - weniger in Bezug darauf, wie sie sich verhalten, als darauf, was aufgrund dessen passieren kann. Tiiri36 8
1.1 Zufall - wofür eigentlich? Betrachten wir etwa die Datenverschlüsselung und insbesondere jenes geheimnisvolle Wesen namens „Kryptografie mit öffentlichen Schlüsseln". Diese neuartige und brillante Form der Verschlüsselung (und nicht nur dies) wurde in den Siebzigerjahren des 20. Jahrhunderts von Whitfield Diffie und Martin Hellman vorgestellt und bereits kurz darauf von Ron Rivest, Adi Sharnir und Len Adleman zu einem umfassenden System ausgebaut. Sie basiert auf einer ganz einfachen Idee: Manche Dinge sind schwieriger als andere. Das ist natürlich auf den ersten Blick einleuchtend, aber wenn man das eine oder andere Konzept der höheren Mathematik mit einfließen lässt, steht man über kurz oder lang mit einer bahnbrechenden Erfindung dar. Traditionell verlangt symmetrische Verschlüsselung nach einem identischen, gemeinsamen „Geheimwert" (also einem Schlüssel), der an alle Paiteien eines geheimen KoHimunika- tionsvorgangs ausgegeben wird. Der Schlüssel ist erforderlich und auch ausreichend, um die übertragenen Daten zunächst zu ver- und später wieder zu entschlüsseln. Auf diese Weise kann ein Dritter die Information auch dann nicht ermitteln, wenn er die Verschlüs- selungsHiethode kennt. Die Tatsache, dass zur Kommunikation ein gemeinsames Geheimnis erforderlich ist, bedingte, dass dieser Ansatz nicht immer optimal für die Computer- koHimunikation geeignet war, denn zunächst einmal mussten die Paiteien einen sicheren Datenkanal einrichten, bevor überhaupt Kommunikation stattfinden konnte: Die Übertragung des Geheimnisses über einen unsicheren Kanal hätte das System anfallig für eine unerwünschte Entschlüsselung gemacht. In der Welt der Computer kommunizieren Sie häufig mit Systemen oder Leuten, die Sie noch nie gesehen haben und zu denen Sie keinen sicheren oder erschwinglichen KoHimunikationskanal aufbauen können. Die Verschlüsselung mit öffentlichen Schlüsseln hingegen benötigt kein gemeinsames Geheimnis. Jede Partei verfügt über zwei Datenelemente: den öffentlichen Schlüssel, der zur Verschlüsselung von Daten dient, zur Entschlüsselung jedoch ungeeignet ist, und den privaten Schlüssel, mit dem eine zuvor verschlüsselte Mitteilung entschlüsselt werden kann. Die Paiteien können ihre öffentlichen Schlüssel nun über einen unsicheren Kanal austauschen - auch auf die Gefahr hin, dass dieser ausspioniert wird. Sie übermitteln einander die (für Dritte unbrauchbare) Informationen, die zur Verschlüsselung von Nachrichten zwischen den Paiteien erforderlich sind, behalten aber den Teil, der für den Zugriff auf die verschlüsselten Daten benötigt wird, für sich. Und siehe da: Die sichere Kommunikation zwischen Personen, die einander vollkommen fremd sind - also etwa zwischen einem Kunden, der in seiner Wohnung auf dem Sofa hockt, und dem Server eines Onlinehändlers -, schien nun Wirklichkeit geworden zu sein. Im Wesentlichen fußt das ursprüngliche RSA-Verschlüsselungssystem2 auf der Beobachtung, dass die rechentechnische Komplexität der Multiplikation zweier behebig großer Zahlen vergleichsweise geling ist: Sie ist direkt proportional zur Anzahl der zu multiplizierenden Ziffern. Die Komplexität beim Suchen von Faktoren einer großen Zahl (Faktorisie- rung) ist hingegen wesentlich höher (sofern Sie nicht gerade als sprichwörtliches Rechen- Die Benennung „RSA" wurde von den ersten Buchstaben der Nachnamen der Entwickler abgeleitet Rivest, Shainir und Adleman. 9
1 Die redselige Tastatur genie bei den Schlapphüten tätig sind). Der RSA-Algorithmus wählt zunächst zwei behebige, sehr große Primzahlen3 p und q aus, die er miteinander multipliziert. Dann erstellt er auf der Basis dieses Produkts und einer teilelfremden Zahl4 (p—l)(q-l) einen öffentlichen Schlüssel. Dieser Schlüssel kann zur Verschlüsselung von Daten verwendet werden, ist allein allerdings nicht ausreichend, um Daten zu entschlüsseln, wenn ein Rückgriff auf die Faktorisierang nicht möglich ist. Und der Haken ist: Die Faktorisierang ist bei Produkten zweier großer Primzahlen häufig nicht praktizierbar und vereitelt demzufolge solche Angriffe. Die schnellste universelle Faktorisierang für ganze Zahlen auf traditionellen Computern, das allgemeine Zahlkörpersieb (engl. General Number Field Sieve, GNFS), würde mehr als tausend Jahre benötigen, um Faktoren einer solchen 1024-Bit-Ganzzahl zu ermitteln, wenn man eine Rate von einer Million Tests pro Sekunde voraussetzt. Für einen noiinalen PC hingegen ist das Ermitteln zweier Primzahlen, die ein derart großes Produkt bilden, lediglich eine Frage von Sekunden. Wie bereits oben erwähnt, erzeugen Sie bei RSA neben Ihrem öffentlichen auch einen privaten Schlüssel. Dieser Schlüssel enthält eine zusätzhche Information zu den Primzahlen und erlaubt damit die Entschlüsselung der mit dem öffentlichen Schlüssel chiffrierten Daten. Dieser Trick ist möglich dank des chinesischen Resttheorems, des Eulerschen Theorems und anderer etwas absonderlicher, aber nichtsdestoweniger faszinierender mathematischer Konzepte, die der besonders neugierige Leser allein erforschen mag.5 Im Laufe der Zeit wurden einige weitere Kryptosysteme mit öffentlichen Schlüsseln entwickelt, die auf anderen anspruchsvollen Problemen der Mathematik fußen (z. B. Kryptosysteme über elliptische Kurven usw.). All diese System aber haben das Konzept der öffentlichen und privaten Schlüssel gemeinsam. Diese Methode hat sich als praktikabel für den Schutz von E-Mails, Webfransaktionen und ähnlichem erwiesen - und zwar auch in Situationen, in denen die beiden betreffenden Parteien niemals zuvor miteinander kommuniziert haben und es auch keinen sicheren Kanal gibt, über den vor dem Herstellen einer Verbindung zusätzhche Informationen ausgetauscht werden können.0 Fast jede heutzutage verwendete Verschlüsselungsmethode - von SSH (Secure Shell) und SSL (Secure Sockets Layer) bis hin zu digital signierten Updates oder Smartcards - existiert dank der freundlichen Mithilfe der Herren Diffie, Hellman, Rivest, Shamir und Adleman. Eine Primzahl ist eine positive ganze Zahl, die nur durch 1 und sich selbst teilbar ist. Eine Zahl, die für x teilerfreind ist (man bezeichnet dies auch als „relativ prirn zu x"), hat außer 1 und —1 keinen Faktor mit x gemein: Der größte gemeinsame Teiler ist also 1. Rive78 Der Vollständigkeit halber soll an dieser Stelle angemerkt werden, dass die Ad-hoc-Kryptografie mit öffentlichen Schlüsseln unter anderem anfällig für Man-in-the-Middle-Angiiffe ist; hierbei gibt sich der Angreifer als einer der Endpunkte aus und übermittelt einen eigenen, gefälschten öffentlichen Schlüssel, um die Kommunikationsvorgänge abfangen zu können. Um solche Angriffe zu verhindern, müssen zusätzliche Ansätze zur Prüfung der Schlüsselauthentizität ins Auge gefasst werden — entweder durch Verwendung einer sicheren Austauschmethode oder durch Einrichtung einer zentralen Zertifizierungsstelle für Schlüssel (Infrastruktur öffentlicher Schlüssel, PKI). 10
1.1 Zufall - wofür eigentlich? 1.1.1 Zufallszahlen automatisiert erzeugen Freilich gibt es ein Problem: Bei der Implementierung von RSA auf einem deterministischen System besteht der erste Schritt in der Erzeugung zweier sehr großer Primzahlen p und q. Das Suchen einer großen Primzahl ist für den Computer ganz einfach, es gibt aber einen winzigen Haken: Dritten muss es unmöglich sein, diese Primzahlen zu erraten, und sie dürfen auch auf keinem Computer identisch sein. (Andernfalls würde ein Angriff auf diesen Algorithmus keine Faktorisierang erfordern, und/» und q könnten von jedem ermittelt werden, der über einen ähnlichen Computer verfügt.) Im Laufe der letzten Jahre wurde eine Reihe von Algorithmen entwickelt, die mögliche Primzahlen (Pseudoprimzahlen) schnell finden und dann prompt vorläufige Primalitätstests durchführen, mit denen die Pseudoprimzahlen überprüft werden.7 Um aber eine wirklich unvorhersagbare Primzahl erstellen zu können, benötigen wir ein gerüttelt Maß an Entropie oder Zufälligkeit, um entweder blindlings eine der Primzahlen in einem Bereich auszuwählen oder aber an einer zufällig gewählten Stelle zu beginnen und dann die erste Primzahl auszuwählen, über die wir stolpern. Zwar ist die Notwendigkeit eines gewissen Maßes an Zufall zum Zeitpunkt der Schlüsselerstellung wesentlich, aber damit endet diese Notwendigkeit noch nicht. Die Kryptografie mit öffentlichen Schlüsseln basiert auf ziemlich komplexen Berechnungen und ist demzufolge ziemlich langsam. Dies gilt insbesondere im Vergleich mit der traditionellen Kryptografie mit symmetrischen Schlüsseln, die kurze gemeinsame Schlüssel und eine Anzahl Operationen verwendet, die Maschinen sehr schnell ausführen können. Um Funktionalitäten wie SSH zu implementieren, bei denen eine gewisse Leistung vorausgesetzt wird, ist es sinnvoller, die ersten Konimunikationsschritte und die Basisverifizierung mithilfe von Algorithmen durchzufuhren, die auf öffentlichen Schlüsseln basieren, um auf diese Weise einen sicheren Kanal zu erstellen. Der nächste Schritt besteht im Austausch eines kompakten, vielleicht 128 Bits umfassenden symmetrischen Schlüssels, woraufhin auf die altmodische symmetrische Kryptografie umgeschaltet wird. Das Hauptproblem bei der symmetrischen Kryptografie wird behoben, indem anfänglich ein sicherer (wenn auch langsamer) Kanal für den Austausch eines gemeinsamen Geheimnisses eingerichtet und dann auf schnellere Algorithmen umgeschaltet wird. Auf diese Weise profitiert der Benutzer von der höheren Leistung, ohne Einbußen in punkto Sicherheit hinnehmen zu müssen. Doch um Kryptografie sinnvoll nutzen zu können, benötigen wir noch ein gewisses Maß an Entropie, damit wir auch einen wirklich nicht vorhersagbaren Schlüssel für jede sichere Kommunikationssitzung erzeugen können. Maur94
1 Die redselige Tastatur 1.2 Wie sicher sind Zufallsgeneratoren? Programmierer haben viele Möglichkeiten für Computer entwickelt, scheinbar zufällige Zahlen zu erzeugen. In den Regel heißen diese Algorithmen PRNGs (Pseudo Random Nurnber Generators, Pseudozufallszahlengeneratoren). Pseudozufallszahlengeneratoren sind für triviale Aufgaben wie das Erzeugen „zufälliger" Ereignisse für Computerspiele oder bedeutungslose Betreffzeilen besonders aufdringlicher Spammails absolut ausreichend. Nehmen wir etwa den linearen Kongmenzgenerator8, ein klassisches Beispiel für einen solchen Algorithmus. Trotz seines seltsamen Namens macht dieser Zufallsgenerator nichts anderes, als bei jeder Erzeugung einer „Zufallszahl" eine Folge einfacher Operationen (Multiplikation, Addition und Modulo9) durchzuführen. Der Generator verwendet dabei seine vorherige Ausgabe r, um den nächsten Ausgabewert rt+1 zu berechnen (wobei t die Zeit ist): }'t+i = (a ■ rt + c) mod M Der Modulooperator steuert den Bereich und verhindert Überläufe (hierunter versteht man Fälle, in denen das Ergebnis zu einem bestimmten Zeitpunkt den vordefinierten Wertebereich verlässt). Wenn r0, a, Mund c - die Steuervariablen des Generators - sämtlichst positive Ganzzahlen sind, dann liegen alle Ergebnisse dieser Gleichung im Bereich zwischen 0 undM-i. Die Ausgabe dieses Algorithmus mag zwar - in leicht optimierter Form - statistische Eigenschaften aufweisen, die sie zur Erzeugung von Pseudozufallszahlen geeignet erscheinen lassen, aber bei diesen Operationen gibt es nichts, was nicht vorhersagbar wäre. Und hier liegt das Problem: Ein Angreifer kann ganz einfach eine eigene Kopie des Generators entwickeln und damit eine behebige Anzahl von Ergebnissen bestimmen, die unser Generator erzeugen wird. Selbst dann, wenn wir mit einem Ausgangszustand des Generators (r0) beginnen, der dem Angreifer nicht bekannt ist, kann dieser häufig mit Erfolg wichtige Eigenschaften dieses Wertes ableiten, indem er lediglich die nachfolgenden Ausgabewerte des Generators betrachtet, der vom Opfer verwendet wird, und mit diesem Wissen seinen eigenen Generator so trimmen, dass er sich wie unsere Version verhält. Tatsächlich wurde schon vor mehr als zehn Jahren eine allgemeine Methode zur Rekonstruktion und Vorhersage aller polynomen Kongruenzgeneratoren entwickelt10; es wäre also ziemlich unklug, dieses bescheidene, doch etwas unbequeme Detail zu übergehen, macht es doch die Chance, diesen Algorithmus bei kritischen Aufgaben zu verwenden, vollends zunichte. * Knut97 Der Modulooperator gibt den Restwert einer ganzzahligen Division zweier Zahlen zurück. So hat z. B. 7 geteilt durch 3 das ganzzahlige Ergebnis 2 zur Folge, der Restwert ist 1: 7 = 2 - 3 + 1. Insofern ist 7 mod 3 = 1. 10 Kraw92 12
1.3 I/O-Entropie: Hier kommt die Maus! Im Laufe der Zeit hat sich herauskristallisiert, dass es - von massiven Speicherfehlem und einer Prozessorschmelze abgesehen - nur eine einzige sinnvoll einsetzbare Möglichkeit für einen Computer gibt, praktisch unvorhersagbare Zahlen zu erzeugen: Man muss möglichst viele praktisch unvorhersagbare Eigenschaften aus der physischen Umgebung des Systems ableiten und diese dann als Werte an eine Anwendung weitergeben, die echte Zufallsangaben benötigt. Problematisch ist dabei, dass ein Durchschnittscomputer keine „Sinne" hat, mit denen er offensichtlich zufällige externen Faktoren in seiner Umgebung „erspüren" könnte. Doch zum Glück kennen wir eine recht gute Möglichkeit, diese Schwierigkeit zu umgehen. 1.3 I/O-Entropie: Hier kommt die Maus! Bei praktisch jedem Cornputersystern melden externe Geräte relevante asynchrone Ereignisse (z. B. Daten, die von der Netzwerkkalte verfügbar gemacht oder über die Tastatur eingegeben werden) unter Verwendung eines hardwareseitig implementierten Interraptrne- chanisiiius. Jedem Gerät ist eine Hai-dwareinterruptnurmner (TRQ-Nuimner) zugewiesen, und alle Geräte melden wichtige Entwicklungen, indem sie eine Spannung ändern. Diese Spannungsänderung wird über eine Leitung in das Innere des Computers übertragen, die dem jeweiligen IRQ entspricht. Ein Gerät namens PIC (Programmable Interrupt Controller, programmierbarer Interruptcontroller) interpretiert diese Änderungen und macht sie dem oder den Hauptprozessoren verfügbar. Auf Anweisung des Prozessors entscheidet der PIC, ob, wann, wie und mit welcher Priorität Anforderungen externer Geräte an die Haupteinheit weitergeleitet werden. Dies erleichtert dem Prozessor die Verwaltung von Ereignissen auf effiziente und zuverlässige Weise. Hat der Prozessor ein Signal vom PIC empfangen, dann unterbricht er seine derzeitige Aufgabe (es sei denn, er ignoriert vorübergehend alle Intemiptanforderangen, was bei extremer Auslastung notwendig sein kann). Als nächstes ruft er einen Code auf, der ihm vom Betriebssystem zugewiesen wurde und mit dessen Hilfe er die Meldungen des oder der externen Geräte verarbeitet. Sobald dieses Programm das Ereignis entgegengenommen hat, stellt der Prozessor den unterbrochenen Prozess und den zugehörigen Kontext (d. h. den Zustand der Umgebung zum Zeitpunkt der Unterbrechung) wieder her und fährt fort, als ob nichts gewesen wäre. 1.3.1 Interrupts in der Praxis In der Praxis umfasst der Vorgang der Erkennung einer externen Bedingung und der Erzeugung und Inempfangnahme eines IRQ viele weitere Schritte. Abbildung 1.1 zeigt die Abfolge der Ereignisse, die beim Betätigen oder Loslassen einer Taste auf der Computertastatur ausgelöst werden. Bevor Sie auch nur eine einzige Taste anrühren, ist ein winziger Mikrochip in Ihrer Tastatur - der Tastaturcontroller - bereits fortlaufend damit beschäftigt, die Tastatur auf Zustandsänderungen zu prüfen. 13
1 Die redselige Tastatur Der Aufbau einer Tastatur basiert auf einer Anordnung horizontaler und vertikaler Leitungen. Tasten (Mikroschalter oder druckempfindliche Membranschalter) sind an den Kreuzungspunkten der Reihen und Spalten installiert. Der Controller testet alle Reihen und Spalten separat und mit sehr hoher Geschwindigkeit. Tastaturcontroller Daten verfügbar (1) (2) Leseanforderung Scancodedaten (3) 8048 (5) IRQ 1 Eingabegerät- Controller (Onboard) IRQ-Anforderung (4) Confirmation (EOI) (8) Interrupt-Controller (6) Scancode Eingabegeräte Controller Lesebestätigung (7) Zum Betriebssystem, Benutzeranwendungen usw. Abbildung 1.1 Kommunikation zwischen Tastatur und Computer Wenn der Tastaturcontroller nun bei der Übeipriifung von Reihe 3 bei Spalte 5 einen geschlossenen Stromkreis erkennt (und zwar am niedrigen Widerstand, der durch das Anlegen der Spannung an die betreffenden Leitungen entsteht), dann schließt er daraus, dass die Taste an der entsprechenden Position (J) betätigt wird. Erkennt der Tastaturcontroller eine Änderung, dann wandelt er die Reihen- und Spaltenkoordinaten in einen Scancode um, d. h. einen Wert, der eine Taste anhand einer eindeutigen Kennung identifiziert. Der Scancode wird dann im internen Puffer eines Chips in eine Warteschlange eingereiht. Dieser Chip teilt der CPU mit, dass neue Daten vorhanden sind, und kümmert sich dann wieder um seine eigenen Angelegenheiten. Das Gegenstück des Tastaturcontrollers auf der Hauptplatine ist ein Eingabecontrollerchip. Dieser Controller verwaltet normalerweise alle wesenthchen Eingabegeräte wie etwa Maus oder Tastatur. Er bekommt vom Tastaturchip einen einzelnen Scancode und fordert beim Handlanger der CPU - dem PIC - einen entsprechenden Interrupt an. Sobald der PIC be- 14
1.3 I/O-Entropie: Hier kommt die Maus! reit ist, genau diesen Interrupt bereitzustellen, sendet er das entsprechende Signal an den Prozessor, welcher dann (normalerweise) seine aktuelle Aufgabe unterbricht und den Interrupt-Händler aufruft, der vom Betriebssystem installiert wurde. Aufgabe des Handlers ist es, die Daten zu lesen und dem Chip mitzuteilen, dass er den Scancode erfolgreich gelesen hat. Der Eingabecontroller fahrt dann mit seinem nonnalen Betiieb fort und erhält früher oder später von der Tastatur einen anderen Scancode, sofern Daten im Puffer vorhanden sind.11 Dieser Ansatz ist für die Erzeugung von Zufallszahlen wichtig, auch wenn seine Bedeutung eher indirekter Natur ist. Der Computer verwendet ein asynchrones Benachrichtigungssystem (nämlich Interrupts) für Ereignisse: Er erhält Informationen zu Benutzeraktivitäten praktisch verzögerungsfrei und mit höchster Genauigkeit. Am interessantesten dabei sind vielleicht die exakt gemessenen Intervalle zwischen den Anschlägen auf der Tastatur. Zwar sind auch diese Angaben nicht unbedingt unvorhersehbar, aber sie stellen die wohl beste Quelle für externe, rnessbare und gewissermaßen nichtdetenninistische Signale dar, die das System bekommen kann. Und deswegen greifen Autoren sicherer PRNG- Implementiemngen, um das deterministische Wesen von Computern zu umgehen und dem Zufall Einlas s in ihre Berechnungen zu gewähren, zur Enfropieemiittlung häufig auf das generell unvorhersehbare Verhalten bestimmter Geräte zurück: Mäuse, Tastaturen, Netzwerkkarten und manchmal auch Festplattenlaufwerke. Zu diesem Zweck fügen sie im Interrupt-Händler für das Betriebssystem zusätzlichen Code ein, der bestimmte Parameter für jedes geeignete Ereignis aufzeichnet. Nun ließe sich zwar einwenden, dass keine dieser Quellen fortlaufend „echte" Zufallswerte bereitstellen kann - denn schließlich ist, wenn der Benutzer die Buchstaben Rhinoz eingibt, die Wahrscheinlichkeit, dass eros folgt, schon relativ hoch -, aber in einem gewissen Maß ist das Verhalten aus praktischer Sicht ebenso unvorhersagbar wie meine Vorstellung von einem Nashorn (und ich möchte an dieser Stelle schließlich keine akademische Diskussion über den freien Willen und deterministische Universen beginnen). Diese Methode der Entropieeinbringung funktioniert zufriedenstellend, denn sie integriert mehrere Faktoren, die ein Angreifer realistisch betachtet nicht berücksichtigen, überwachen oder vorhersagen kann, ohne den Verstand zu verlieren. Die Erfassung von Daten aus all diesen Quellen über einen längeren Zeitraum hinweg erlaubt uns nach den Gesetzen der Wahrscheinlichkeit die Generierung eines bestimmten Entropiewertes. Sammeln wir die Daten in einem Puffer, dann erzeugen wir einen Entropiepool, der je nach Angebot an und Nachfrage nach nicht voraussagbaren Daten entweder voll oder leer ist. Leider sind die kleinen zufälligen Elemente im Pool - die etwa dem von kosmischen Energien gesteuerten Bedienen von Tastatur oder Maus entstammen - immer noch mit vielen leicht vorhersagbaren Daten gemischt. Insofern lassen sie sich zumindest direkt noch nicht für die Produktion von Zu- fallszahlen einsetzen. Auf vielen Architekturen rnuss dem PIC manuell mitgeteilt werden, dass der Interrupt verarbeitet wurde und keine weiteren Interrupts mehr blockiert werden müssen. Dies wird mit dem EOI-Code (End of Interrupt) realisiert. 15
1 Die redselige Tastatur Um zu gewährleisten, dass die tatsächliche Menge an Entiopie, die im Zuge der Pflege und Auffüllung des Entropiepools ermittelt wird, sich gleichmäßig auf alle PRNG-Ausgabebits verteilt (und gleichzeitig alle vorhandenen nicht vorhersagbaren Daten berücksichtigt werden), muss der Pool mit einer Hash-Funktion verarbeitet, d. h. gänzlich geschüttelt und gerührt werden, sodass kein Bereich des Pools leichter vorauszusagen ist als ein anderer. Jedes Ausgabebit muss auf gleiche Weise von allen Eingabebits abhängen - und dies auf eine nichttriviale Alt. Dies zu erreichen, ohne zu wissen, welche Datenelemente vorhersagbar sind und welche nicht (also Informationeil, die mit einem Computer, der Tastaturaktionen oder Mausbewegungen überwacht, nicht ermittelt werden können), kann eine schwierige Aufgabe sein. 1.3.2 Abkürzung ohne Rückfahrschein Zum Glück gibt es sichere Einweg-Hash-Funktionen (so genannte „Message-Digest- Funktionen"). Dieses Vorzeigeprodukt modemer Kryptografie hilft uns beim Vermischen der Daten, um für jedes Ausgabebit das Maximum an Entiopie herauszuholen. Dabei spielt es keine Rolle, wie uneinheitlich die Eingabedaten sind. Solche Funktionen erzeugen einen verkürzten Zielwert mit einer festen Länge, also eine eindeutige Kennung für eine beliebige Eingabedatenmenge. Aber das ist noch nicht alles. Alle unumkehrbaren Hash-Funktionen weisen zwei wichtige Eigenschaften auf: ■ Die Berechnung des verkürzten Zielwertes ist relativ einfach. Allerdings ist es nicht möglich, die ursprüngliche Eingabe oder ihre Eigenschaften aus dem Ergebnis abzuleiten: Eine behebige Änderung der Eingabe wirkt sich auf alle Eigenschaften der Ausgabe mit ebenso hoher Wahrscheinlichkeit aus wie jede andere Änderung. ■ Die Wahrscheinlichkeit, dass zwei unterschiedliche Eingaben dieselbe Verkürzung erzeugen, wird nur durch die Größe des Zielwertes bestimmt. Ist der Zielwert ausreichend groß (d. h. groß genug, um umfangreiche Suchvorgänge praktisch unmöglich zu machen), dann ist es unmöglich, zwei Eingabewerte zu finden, die denselben Ausgabewert erzeugen. Derzeit gelten Zielwerte mit einer Länge zwischen 128 und 160 Bit als ausreichend groß; sie entsprechen einer Menge von 3,4E+38 bis l,46E+48 Kombinationen. Infolgedessen stellen Verkürzungsfunktionen eine Möglichkeit dar, die in den Eingabedaten vorhandene Entiopie gleichförmig auf die Ausgabedaten zu verteilen. Hierdurch wird das Problem der generell zufälligen, aber lokal vorhersagbaren Entiopiequellen beseitigt: Wir ermitteln eine annähernde Menge Entiopie aus der Umgebung, vermischen diese ggf. mit vorhersagbaien Daten und können dann eine Verkürzung erzeugen, die garantiert ebenso unvorhersagbar ist wie die anfangs ermittelte Entropie - unabhängig davon, wie die Eingangsentiopie auf die Eingabedaten verteilt wurde. Wie nun funktionieren Verkürzungsfunktionen? Auch hier basieren einige auf mathematischen Problemen, die, soweit wir wissen, sehr schwierig zu lösen sind. Tatsächlich lässt sich jede sichere symmetrische oder auf öffentlichen Schlüssel fußende Kryptografie ganz einfach in eine sichere Hash-Funktion umwandeln. Solange die Menschheit keine wirklich 16
1.3 I/O-Entropie: Hier kommt die Maus! clevere Lösung flu- eines dieser Probleme findet, sollte man sich auf diesen Ansatz verlassen können. Wenn wir aber nun die wirklich schweren Geschütze auffahren, haben wir am Ende nur langsame und übermäßig komplizierte Tools zur Erzeugung von Verkürzungen, die für kompakte Implementierungen meist unbrauchbar sind; dies gilt insbesondere für die Integration einer solchen Lösung mit einem Betriebssystem. Die Alternative besteht darin, die Daten so zu verarbeiten, dass die gegenseitige Abhängigkeit aller Eingabe- und Ausgabebits ausreichend komplex ist, um die Eingabe vollständig zu verschleiern, und zu hoffen, dass dies „gut genug" ist, um bekannte Kryptoanalysemethoden zu überfordern. Weil aber „hoffentlich gut genug" in der Infonnationswissenschaft ein durchaus gängiges Motto ist, wollen wir dies gerne als sinnvollen Ansatz akzeptieren. Der Vorteil der letztgenannten Gruppe von Algorithmen, zu der auch verbreitete Funktionen wie MD2, MD4, MD5 und SHA-1 gehören, besteht darin, dass sie normalerweise wesentlich schneller und zudem leichter zu verwenden sind als ihre auf schwierigen mathematischen Aufgaben fußenden Gegenstücke, und dass sie zudem, sofern sie sauber erstellt wurden, nicht für die einschlägigen Tricks der Kryptoanalyse anfällig sind. Ihre Schwäche hingegen ist die Tatsache, dass sie nicht nachweisbar sicher sind, denn keine dieser Methoden lässt sich auf ein klassisches, schwer zu lösendes Problem zurückführen. Und in der Tat haben einige dieser Methoden bereits gewisse Schwächen an den Tag gelegt.12 Wie bereits früher angedeutet, besteht ein wesentlicher Vorzug der Verkifrzungsfunktionen in Bezug auf die Erzeugung pseudozufalliger Zahlen darin, dass sie sich für ein Datensegment ausführen lassen, das n Zufallsbits und eine behebige Anzahl vorhersagbarer Bits enthält, und (dank der beiden weiter oben beschriebenen Grundeigenschaften von Einweg- Hash-Funktionen) auf dieser Grundlage eine Verkürzung erzeugen, bei der n Entropiebits gleichmäßig auf alle Bits in der Verkürzung verteilt werden. Infolgedessen ist die Verkürzungsfunktion ein ausgesprochen probates Mittel zur Entiopieextraktion. Indem wir eine ausreichende Menge Daten, die von einem generell unvorhersagbaren Interrupt-Händler gesammelt wurden, durch eine Verkiü-zungsfunktion verarbeiten lassen, können wir Zufallszahlen erzeugen, ohne verwendbare Informationen zur exakten Form der Daten preiszugeben, mit denen wir diese Zahlen erstellt haben. Zudem besteht kein Risiko, dass eine schwache Eingabe sich nennenswert auf die Ausgabe auswirkt. Wir müssen lediglich sicherstellen, dass einem Block von Interruptdaten eine ausreichende Menge Entropie entnommen und der Veifcürzungsfunktion zugeführt wird - andernfalls steht das gesamte System auf tönernen Füßen. Wenn der Angreifer beträchtliche Teile der Daten vorhersagen kann, die wir zur Erzeugung von Zufallszahlen verwenden, und für den Rest nur eine Handvoll möglicher Kombinationen existiert, dann kann er eine erfolgreiche Brate-Force- Attacke gegen unsere Implementierung reiten, indem er ganz einfach alle möglichen Werte ausprobiert und überprüft. Verwenden wir beispielsweise eine Verkürzungsfunktion, die unabhängig von der Anzahl der tatsächlich gesammelten Daten 128-Bit-Digests erzeugt, dann müssen wir vor dem Verkürzen sicherstellen, dass mindestens 128 Eingabebits für 12 Bakh95
1 Die redselige Tastatur den Angreifer unvorhersehbar sind - ganz gleich, ob nun 200 oder 2.000.000 Tastenanschläge als Grundlage verwendet werden. 1.3.3 Von der Bedeutung, pedantisch zu sein An dieser Stelle folgt ein kleines Beispiel dafür, was passieren kann, wenn die Dinge nicht so funktionieren wie gewünscht. Angenommen, ein Benutzer möchte ein Shellskript schreiben. Zum betreffenden Zeitpunkt ist der Entropiepool des Systems leer (etwa weil kurz zuvor eine zufallszahlenhungrige Operation durchgeführt wurde). Daran, dass vi delallusers.sh ausgefühlt wird, bemerkt der Angreifer, dass der Benutzer im Begriff ist, ein Skript zu schreiben; außerdem geht er davon aus, dass das Skript mit etwas in der Art von #!/bm/sh anfangt. Zwar kann er nicht sicher sein, was als nächstes kommt, hat aber den begründeten Verdacht, dass das Skript mit dem Aufruf eines Shellbefehls beginnen wird; die Wahrscheinlichkeit, dass irgendein altmodisches Gedicht über Rhinozerosse folgt, ist hingegen eher gering. An dieser Stelle nun fordert irgendein Verschlüsselungs-Utihty unverrnittelt eine 128-Bit- Zufallszahl beim System an, die es als Sitzungsschlüssel zum Schutz der Kommunikation verwenden will. Das System jedoch kann den Entopieumfang, der in dem Puffer, in dem der Vorgang des Schreibens der ersten Skriptzeilen aufgezeichnet wurde, vorhanden ist, nicht korrekt einschätzen. Der Angreifer hat nun leichtes Spiel. Der Computer weiß gar nicht, ob die in genau diesem Moment vom Benutzer durchgeführte Aktion von anderen vorhergesagt werden kann oder nicht; er kann nur (unterstützt von den vom Programmierer getroffenen Annahmen) darauf spekulieren, dass die Benutzeraktionen sich im Laufe der nächsten Minuten oder Stunden zu einem Ergebnis summieren werden, das nicht präzise vorhergesagt werden kann, und dass dieser Teil der Eingabe im Durchschnitt tatsächlich von den Faktoren abhängt, die für den Angreifer nicht vorhersehbar sind. An dieser Stelle kennt der Angreifer den größten Teil des Entropiepools und hat bezüglich des ihm unbekannten Anteils nur ein paar tausend Optionen zur Auswahl (während gleichzeitig das Betriebssystem davon überzeugt ist, dass in diesem Puffer weitaus rnehr Entropie vorhanden ist). Und dies stellt für jemandem, der von einem Computer unterstützt wird, wohl kaum eine große Herausforderung dar. Statt also eine 128-Bit-Zufallszahl zu erhalten, deren Anzahl möglicher Kombinationen im neununddreißigstelligen Bereich hegt, bekommt die arglose Kryptografieanwendung eine Zahl zurück, die auf einer Eingabe basiert, welche nur ein paar tausend Werte annehmen kann. Diese lässt sich vom Angreifer ganz einfach via Trial-and-Error ermitteln, woraufhin er schon bald in der Lage sein wird, die Daten, die doch scheinbar so sicher waren, zu entschlüsseln. 1.4 Entropie - je mehr desto besser Da es praktisch unmöglich ist, die Menge an Entropie, die für einen Benutzer angesammelt wurde, auf kurze Sicht exakt vorherzusagen, integrieren alle Implementierungen die Ver- 18
1.4 Entropie -je mehr desto besser kürzung oder den internen PRNG-Status in den Vorgang der Erzeugung neuer Ausgaben, damit das zuvor beschriebene Problem der vorhersagbaren PRNG-Ausgabe gar nicht erst entsteht. Die vorherige Ausgabe wird Teil der Gleichung, die zur Berechnung des nächsten PRNG-Wertes verwendet wird. Bei diesem Ansatz müssen, sobald eine ausreichende Menge Entropie vom System ermittelt wurde, die aktuellsten Daten, die zum Auffüllen des Entropiepools verwendet werden, nicht jederzeit völlig zufällig sein, um ein Mindestmaß an Sicherheit zu gewährleisten. Doch es gibt noch ein weiteres Problem: Wenn die Implementierungen für längere Zeit mit alter, geerbter Entropie arbeiten, die wieder und wieder mit MD5 oder SHA-1 gehasht wird, dann werden sie letztendlich von der Sicherheit des Verküi-zungsalgorithmus abhängig, der aufgrund des Leistungs- und Sicherheitskompromisses, den wir oben beschrieben haben, nicht hundertprozentig vertrauenswürdig ist. Außerdem müssen die Hashing- Funktionen nicht unbedingt von kompetenten Kryptografen einer entsprechenden Eignungsprüfung für den jeweiligen Zweck unterzogen worden sein. Die Implementierung basiert dann nicht rnehr einfach nur auf den Bit-Hashing-Eigenschaften einer Verkürzungsfunktion, sondern steht und fällt nun mit der Unverwundbarkeit gegenüber Crackerangriffen. Wird bei jedem nachfolgenden Schritt auch nur ein bisschen Information zum internen Zustand des Erzeugers offenbart und werden gleichzeitig keine neuen Daten zum Pool hinzugefügt, dann können die Daten langfristig dazu geeignet sein, den internen Zustand mit einiger Sicherheit rekonstruieren oder erraten zu können. Dies kann eine Vorhersage des zukünftigen Verhaltens des Gerätes möglich machen. Andererseits wird, wenn neue Zufallsdaten mit einer Häufigkeit hinzugefugt werden, die - zumindest statistisch - eine umfassende Wiederverwendung des internen Zustandes vermeidet, ein Angriff auch dann weitaus schwieriger, wenn die Hashing-Funktion selbst nicht niehr funktionsfähig ist. Viele Experten sind der Ansicht, dass ein solches Maß an Vertrauen in und Abhängigkeit von der Hashing-Funktion für sehr anspruchsvolle Anwendungen ungeeignet ist. Aus diesem Grund ist es für eine Implementierung wichtig, ein Auge darauf zu haben, dass ein Mindestmaß an im System gesammelter Entropie vorhanden ist, die, sofern auch nicht in jedem Augenblick korrekt, doch eine allgemeine statistische Tendenz widerspiegelt, die wir von den verwendeten Quellen erwarten können. Kleinere vorübergehende Fluktuationen bei der Veifügbarkeit externer Entropie - wie etwa bei dem oben beschriebenen Skriptbeispiel - können und werden auftreten; sie werden aber durch den Algorithmus zur Wiederverwendung der Ausgabe ausgeglichen. Trotzdem ist es erforderlich, exakte langfristige Vorhersagen zu machen, damit ein häufiges Auffüllen des internen Entropiepools sichergestellt und die Gefährdung minimiert ist, sollte die Hashing-Funktion nach einer gewissen Zeit den internen Zustand Stück für Stück preisgeben. Insofern niuss die Implementierung Buch darüber führen, wie viel Entropie in Daten für Benutzelprozesse umgesetzt wurde, und gegebenenfalls die Ausgabe weiterer Zufallszahlen unterbinden, bis wieder eine ausreichende Menge Entropie zur Verfügung steht. Ein gutes Beispiel für eine zweckmäßige PRNG-Implementierung, die alle oben genannten Faktoren berücksichtigt, ist das exzellente System, welches 1994 von Theodore Ts'o vom Massachusetts Institute of Technology ersonnen wurde. Seine Methode namens
1 Die redselige Tastatur /dev/random wurde zunächst in Linux implementiert, später folgten andere Systeme wie FreeBSD, NetBSD und HP/UX. Ts'os Ansatz überwacht eine Anzahl von I/O-Ereignissen auf dem System und ermittelt Zeitabstände und andere wichtige Interrupteigenschaften. Außerdem wird der Entropiepool beim Beenden des Systems auf Festplatte gespeichert und nach dem Neustart weiterverwendet; auf diese Weise wird verhindert, dass das System nach dem Start einen vollständig vorhersagbaren Zustand aufweist. So wird ein Angriff zusätzlich erschwert. 1.5 Angriff: Folgen eines jähen Paradigmenwechsels Welches Problem nun könnte in Verbindung mit diesem scheinbar narrensicheren System zur Bereitstellung nicht vorhersagbarer Zufallszahlen für anspruchsvolle Anwendungen auftreten? Gar keins. Zumindest nicht dort, wo man es erwarten würde. Die Zahlen, die erzeugt werden, sind tatsächlich schwer vorherzusagen. Trotzdem hat der Entwickler dieses Ansatzes einen kleinen Denkfehler gemacht - mit fatalen Folgen. Theodore Ts'os Technik setzt voraus, dass der Angreifer ein Interesse daran hat, Zufallszahlen basierend auf seinen Kenntnissen des Systems und seiner Umgebung vorauszusagen. Was aber wäre, wenn der Angreifer genau das Gegenteil will? Der Angreifer kann, wenn er über ein Konto auf dem betreffenden Computer verfügt, auch dann, wenn er gar keinen direkten Zugriff auf die Daten hat, die der Benutzer eingibt, den exakten Moment, an dem die Eingabeaktivitäten im System auftauchen, ermitteln, indem er zunächst den Entropiepool leert (was ganz einfach durch gezieltes Abrufen und nachfolgendes Verwerfen von Zufallsdaten auf dem System erfolgen kann) und dann die Verfügbarkeit der PRNG-Ausgabe überwacht. Erfolgen keine I/O-Aktivitäten, dann stehen dem PRNG keine neuen Daten zur Verfügung, weil die Entropieschätzung sich nicht ändert. Wird nun eine Taste betätigt oder losgelassen, dann hat der Angreifer ein paar Daten zur Verfügung, aus denen er ableiten kann, dass eine Taste betätigt oder losgelassen wurde. Auch andere Ereignisse wie etwa Festplattenzugriffe erzeugen PRNG-Ausgabedaten, aber die Menge und die Ablaufmuster der auf diese Weise ermittelten Entropie unterscheiden sich in ihren Eigenschaften von den tastaturerzeugten rntermptdaten. Insofern ist es möglich und auch nicht besonders schwer, Ereignisse aufgrund der Menge der zu einem gegebenen Zeitpunkt vorhandenen Daten zu unterscheiden: Die Daten von Tastaturanschlägen sehen anders aus als die von Festplattenaktivitäten. Letztendlich führt eine Methode, mit der ein Höchstmaß an Sicherheit bei der Erzeugung von Zufallszahlen erzielt werden soll, also zu einer Beeinträchtigung der Privatsphäre des Benutzers: das Vorhandensein dieser Funktion zur Einschätzung der Entropie, die von einer externen Stelle zur Verfügung gestellt wird, kann missbraucht und dazu verwendet werden, bestimmte Aspekte der Eingabeaktivitäten auf dem System zu überwachen. Zwar kann der Angreifer nicht genau erkennen, was eingetippt wird, aber für das Schreiben bestimmter Wörter auf der Tastatur gibt es charakteristische Ablaufmuster. Dies gilt insbe- 20
1.5 Angriff: Folgen eines jähen Paradigmenwechsels sondere, wenn präzise Informationen zu den Zeitpunkten des Anschlagens und Loslassens der Taste vorhanden sind, was hier ja auch der Fall ist. Durch eine Übeipiiifung dieser Muster kann der Angreifer dann die eigentlich Eingabe ableiten, zumindest aber leichter erraten. 1.5.1 Tastatureingaben unter der Lupe Eine Tiefenanalyse, die von einem Forschungsteam an der University of California durchgeführt wurde13, lässt darauf schließen, dass es durchaus möglich ist, bestimmte Eigenschaften der Benutzereingabe abzuleiten - oder die Eingabe womöglich sogar vollständig zu rekonstruieren -, indem man einfach das Timing der Tastaturaktionen betrachtet. Man kam zu dem Ergebnis, dass die Intervalle zwischen den Tastenbetätigungen zwar bei geübten Tastaturschreibem und unterbrechungsfreiern Tippen durchaus gewisse Schwankungen aufweisen können, dass aber vorherrschende Ablaufhiuster für jede Abfolge zweier Tasten ganz offensichtlich sind. Der Grund hierfür ist die Tatsache, dass unsere Hände auf eine ganz bestimmte Weise auf der Tastatur zu liegen kommen, und dass die Position einer Taste auf der Tastatur sich darauf auswirkt, wie schnell wir die nächste Taste mit unseren Fingern erreichen können. So unterscheidet sich beispielsweise der zeitliche Abstand bei der Tastenfolge E —» N von dem der Folge M—» 1. Das liegt daran, dass beim ersten Fall eine Hand die linke Seite der Tastatur und die andere die rechte Seite bedient (Abbildung 1.2), d. h. die Eingabe der beiden Zeichen erfordert praktisch keine Bewegung, und die beiden Tasten werden fast gleichzeitig angeschlagen- das Intervall hegt bei weniger als 100 Millisekunden. Die Folge M —» 1 hingegen ist vergleichsweise umständlich und benötigt demzufolge wesentlich niehr Zeit. OOOOOOOC OOOOOOO OOODOOO OOOOOOt Rückschritt f \ Eng. Umschalttaste ] Leertaste Alt J Istrg 1 Abbildung 1.2 Die üblichen Bedienbereiche auf einer Tastatur: Die dunkelgrauen Tasten werden normalerweise von der linken Hand bedient, die hellen von der rechten Hand. Aufgrund der Analyse einer Anzahl von Proben schätzen die Autoren dieser Untersuchung, dass ca. 1,2 Datenbits pro betätigter Taste den Timingwerten entnommen werden SongOl 21
1 Die redselige Tastatur können. Durch Beobachtung von Tastenfolgemntervallen ist es möglich, eine Menge von Tastaturaktionen zu ermitteln, die das jeweilige Muster höchstwahrscheinlich erzeugt haben, was es wiederum einfacher macht, die exakte Abfolge der eingegebenen Tasten zu erraten. Der Ansatz, Bruchteile von Bits zu zählen, mag auf den ersten Blick grotesk erscheinen, bedeutet aber eigentlich, dass die Anzahl der Möglichkeiten für jede Taste um den Faktor 21'2 oder etwa das 2,40-fache reduziert werden kann. Bei einem normalen Tastaturanschlag, der normalerweise erst einmal nicht rnehr als 6 Bits Zuiälligkeit erzeugt, verringert dies die Optionsmenge von ca. 64 auf 26 Elemente. In der Summe verkleinert dieser Umstand also den Suchraum: Wir sehen, dass es, wenn wir die betätigten Tasten erraten wollen, eine Möglichkeit gibt, die Anzahl der Eventualitäten zu verringern. Zwar mag diese Verringerung für sich genommen nicht besonders beeindruckend erscheinen, aber wenn Sie den Urnstand einbeziehen, dass die über die Tastatur eingegebenen Daten selbst wahrscheinlich nicht von wahllos betätigten Tasten stammen, sondern sinnvoll sind, dann stellt sich der Sachverhalt schon anders dar. Die Entropie eines englischsprachigen Texts hegt bei nur ca. 0,6 bis 1,3 Bit pro Zeichen14, d. h. man benötigt durchschnitthch nur 1,5 bis 2,5 Versuche, um das nächste Zeichen erfolgreich vorherzusagen. Mithilfe einer Methode, die den Suchraum weiter verkleinert, ist es möghch, eindeutige Wörterbuchübereinstimmungen für fast alle Eingabedaten zu ermitteln. Um ihre Schätzungen zu verifizieren und das Problem in der Praxis zu demonstrieren, haben die Wissenschaftler zum Erraten von Tastenanschlägen das Verborgene Markow- Modell und den Viterbi-Algorithmus eingesetzt. Ein Markow-Modell stellt eine Methode zur Beschreibung eines diskreten Systems dar, in dem der nächste Wert nur von seinem aktuellen Zustand und nicht von den vorherigen Werten abhängt (Markow-Kette). Das Verborgene Markow-Modell ist eine Variante, die eine Methode zur Beschreibung eines Systems darstellt, bei dem jeder interne Zustand eine Beobachtung erzeugt, während der eigentlich Zustand selbst nicht bekannt (also verborgen) ist. Dieses Modell wird häufig in Anwendungen wie etwa der Spracherkennung eingesetzt, deren Ziel es ist, einer bestimmten Manifestation (aufgezeichnete Wellenform) die reinen Daten (Textdarstellung des gesprochenen Wortes) zu entnehmen. Die Autoren der Studie schlussfolgem, dass das Verborgene Markow-Modell auf die Analyse von Tastenbetätigungen anwendbar ist, und gehen davon aus, dass den internen Zustand des Systems die Angaben zu den betätigten Tasten darstellen; die Beobachtung im Verborgenen Markow-Modell sind die zeitlichen Abstände zwischen den Anschlägen. Man könnte nun einwenden, dass dies eine übermäßige Vereinfachung ist, denn insbesondere in der in Abbildung 1.3 gezeigten Situation könnte eine tiefergehende Abhängigkeit vorhanden sein. Der Viterbi-Algorithmus stellt eine Möglichkeit dar, Probleme in Verbindung mit dem Verborgenen Markow-Modell zu lösen. Der Algorithmus kann verwendet werden, um die wahrscheinlichste Abfolge der internen Zustände basierend auf einer Folge von Beobach- 14 Shan50 22
1.5 Angriff: Folgen eines jähen Paradigmenwechsels tungen zu erkennen. In diesem speziellen Fall bestimmen wir damit die wahrscheinlichste Folge von Zeichen auf der Basis einer Folge zeitlicher Abstände. Das Endergebnis der Anwendung des Viterbi-Algorithmus ist eine Verringerung des Such- raums um den Faktor 50 bei Passwörtern mit einer Länge von acht Zeichen, die nicht aus einem Wörterbuch stammen. Bei der Rekonstruktion eines eingegebenen wörterbuchbasierten Textes in englischer Sprache ist dieser Faktor wahrscheinlich erheblich höher. OOO Im.. llfv» ffHv [aiigl ^ DO A OOOE LOOOj DOOC )OOOC jsgangszi )OG jstan llsIrllRnEtadif. " | law d OOOOOOOOOOOOOII " lOOOOOC )QOOOO "TQQQG Anschlag der Taste W OOOOOOOOOOOOOG IQQQQDQpanQQ \~\ ]OOOOl \1 n TvlElkt Anschlag der Taste P OOOOOOOOOJDJDJDO 0OOOOOOO QQQ oofl Anschlag der Taste V Abbildung 1.3 Die Notwendigkeit, die linke Hand im vorherigen Schritt an eine andere Position setzen zu müssen, wirkt sich auf die Geschwindigkeit der Folge P —> V aus. Das Markow-Modell ist nicht in der Lage, die vorherige Position der Hand bei Handwechseln zu berücksichtigen. Werfen wir nun einen Blick auf die Überwachung von Interrupts. Die oben erwähnte Studie konzentrierte sich auf Teihnformationen, die durch das Abhören von SSH- Datenverkehrsrnustem (Secure Shell) gewonnen wurden. Im Falle der Interruptüberwachung erhält der Angreifer erheblich mehr Informationen. Zum Ersten stehen ihm Angaben zur Dauer eines Tastenanschlags ebenso zur Verfügung wie zu den zeithchen Abständen zwischen den Anschlägen. Die Dauer des Anschlags hängt vom verwendeten Finger ab: Beim Zeigefinger ist der Kontakt am kürzesten, beim Ringfinger wahrscheinlich am längsten usw. Dies sind wesentliche Informationen, die die Eingrenzung eines geeigneten Tastaturbereichs beträchtlich erleichtem. Zweitens erlauben es die Daten dem Angreifer auch, Handwechsel zu überwachen, d. h. den Moment, in dem ein Zeichen von der linken und das darauffolgende Zeichen von der rechten Hand (oder umgekehrt) angeschlagen wird. Weil die beiden Hände von jeweils unterschiedlichen Hemisphären im Gehirn gesteuert werden, schlagen fast alle geübten Tasta- 23
1 Die redselige Tastatur turschreiber beim Handwechsel mehr oder weniger häufig die zweite Taste bereits an, bevor sie die erste losgelassen haben. Zwar sind diese Anschlag- und Loslassereignisse als solche nicht zu unterscheiden, aber ein besonders kurzer Abstand zwischen zwei Tastaturereignissen ist ein klares Anzeichen für dieses Phänomen. In einigen seltenen Situationen - und besonders dann, wenn der Schreiber in Eile ist -, erfolgt der zweite Anschlag nicht nur vor dem Loslassen, sondern bereits vor dem Anschlagen der ersten Taste. Dies führt zu verbreiteten Rechtschreibfehlern des Typs „udn" (statt „und"). Abbildung 1.4 zeigt einen protokollierten Ablauf von Tastaturaktionen. Der Benutzer gibt das Wort evil ein. Der mittlere Finger der linken Hand betätigt für eine mittlere Zeitdauer die Taste E. Danach kommt es zu einer beträchtlichen Pause, bevor als nächstes V eingegeben wild; dies hegt daran, dass der Schreiber die gesamte Hand bewegen rnuss, um die Taste VmA dem Zeigefinger zu erreichen (der Daumen kann hierfür nicht benutzt werden, da die Leertaste im Weg ist). Die Taste Fwird - ebenso wie /— nur ganz kurz angeschlagen, wobei hierbei jeweils der Zeigefinger zum Einsatz kommt. Es gibt auch eine sichtbare Überschneidung: Aufgrund des Handwechsels wird / angeschlagen, bevor V losgelassen wird. Abschließend betätigt der Ringfinger nach einer kleinen Pause (aufgrund des nicht erforderlichen Handwechsels) die Taste L, wobei der Anschlag relativ lange dauert. 0 0 0 0 111 h 1111| 111 h 1111|111 h 1111| 111| 111 h 1111| 111 h 1111| 111 h 1111| 111| 111 h 1111| 111 h 1111| 111 h 1111| 111|111 h 1111 Zeit «- Abbildung 1.4 Ablaufmuster für Anschlagen und Loslassen bei Handwechsel Insofern kann man vernünftigerweise davon ausgehen, dass es möglich ist, bei einem solchen Angriff eine wesentlich höhere Erfolgsquote zu erziehen. (Die meisten dieser Faktoren waren in dem Szenario, welches in dem oben erwähnten Weißbuch beschrieben wird, nicht verfügbar.) 1.5.2 Taktiken zur Verteidigung Jetzt wissen wir also, welches Potenzial das Belauschen einer Tastatur birgt. Doch wie können wir uns dagegen verteidigen? Die beste Möglichkeit besteht in der Nutzung eines separaten Tastaturentropiepuffers angemessener Größe. Der Puffer wird erst dann geleert und sein Inhalt an die PRNG-KemiinpleHientierung übergeben, wenn ein Überlauf erfolgt oder eine gewisse Zeitspanne vergangen ist, die erheblich größer ist als die üblichen Inter- 24
1.5 Angriff: Folgen eines jähen Paradigmenwechsels valle zwischen Tastatuianschlägen (d. h. mehrere Sekunden). Auf diese Weise sind durch Überwachung ermittelte Timingangaben unbrauchbar. Bei dieser Lösung erhält der Angreifer nur zwei Alten von Informationen. Wenn der Puffer beim Überlauf geleert wird, kann der Angreifer erkennen, dass eine (von der Puffergröße abhängige) Anzahl von Tasten innerhalb eines rnessbaren Zeitraums angeschlagen wurde; er kann die exakten Intervalle zwischen den einzelnen Tastaturaktivitäten jedoch nicht erkennen. Die zweite Möglichkeit ergibt sich aus dem zeitgesteuerten Leeren des Puffers und zeigt dem Angreifer, dass eine oder mehrere Tasten während eines festgelegten Zeitraums betätigt wurden; es lassen sich jedoch keine Angaben dazu ennitteln, wie viele Ereignisse dies waren und wann genau sie aufgetreten sind. Die auf diese Weise ermittelbaren Informationen sind für ablaufbezogene Angriffe nur von geringem Wert, denn sie lassen sich lediglich zur Ermittlung allgemeiner statistischer Angaben zur Tastaturaktivität nutzen, was für sich genommen in den meisten Mehrbenutzerumgebungen keinerlei Bedrohung darstellt. 1.5.3 Zufallszahlenerzeugung via Hardware - die bessere Lösung? Viele moderne Hardwareplattformen implementieren physische Zufallszahlengeneratoren, die oft auch als TRNGs (Trae Random Number Generators, Generatoren für echte Zufallszahlen) bezeichnet werden. Diese Geräte erlauben die zuverlässigere Erzeugung wirklich unvorhersagbarer Daten (im Gegensatz zur Sammlung von Informationen, von denen man lediglich annimmt, dass sie nicht vorhersagbar sind) und stellen die zur Entropiebildung generell empfohlene Vorgehensweise dar, sofern eine solche Funktionalität vorhanden ist. Zwei zum Zeitpunkt der Abfassung dieses Buchs verbreitete Lösungen sind von Intel und "VTA entwickelte integrierte Schaltungen. Der Intel-Generator ist mit Chipsätzen wie dem i810 ausgestattet und verwendet einen konventionellen Aufbau mit zwei Oszillatoren. Der Hochfrequenzoszillator erzeugt ein Basissignal, welches im Wesentlichen ein Muster abwechselnder logischer Zustände (010101010101 ...) darstellt. Der andere Oszillator ist ein Niederfrequenzgerät, das mit einer Nominalfrequenz von einem Hundertstel der Frequenz des Hochgeschwindigkeitsos- zillators berieben wird; die tatsächliche Frequenz aber wird von einem Widerstand moduliert, der als eine erste Entropiequelle dient. Bestimmte messbare Eigenschaften eines Widerstandes ändern sich infolge von Wärme- rauschen und anderen zufälligen Materialeffekten. Der Niederfrequenzoszillator steuert die Entnahme von Proben des Wechselsignals mit nun zufälligen Häufigkeiten (fallende Flanke des Oszillatorausgangssignals). Das Signal wird dann - nach einer erförderlichen Anpassung und , Aufbereitung" mithilfe der Korrektur nach von Neumann - der Außenwelt zur Verfügung gestellt. Eine sorgfältige Analyse von Aufbau und tatsächlicher Ausgabe des Generators, die von Benjamin Jun und Paul Kocher von Cryptography Research15 Jun99
1 Die redselige Tastatur durchgeführt wurde, hat gezeigt, dass die Ausgabequalität konstant hoch ist und der Generator je Ausgabebit eine geschätzte Entropie von 0,999 Bits erzeugt. Der VIA C3-Generator („Nehemiah") basiert auf einem etwas anderen Aufbau, der einen Satz Oszillatoren verwendet, die aber nicht als separate Rauschquellen, sondern als spezieller Widerstandsanschluss dienen. Verwendet wird hier der interne Jitter (Signalunbeständigkeit) der Oszillatoren - ein Effekt, der einer Reihe interner und externer Faktoren zugeordnet werden kann und außerdem durch eine konfigurierbare ,3ias-Funktion" (zur Erzeugung systematischer Fehler) gesteuert wird. In diesem Fall hat eine separate Analyse durch Cryptography Research10 aufgezeigt, dass der Generator offensichtlich eine Entropie geringerer Qualität liefert als sein Gegenstück: Sie hegt im Bereich zwischen 0,855 und 0,95 Bits je Ausgabebit. Dies ist ein bedenkliches Ergebnis, wenn die Generatorausgabe in unveränderter Form als vollständig zufällige Zahlen - etwa zur SchlUsselgenerierung oder für andere kritische Aufgaben - verwendet wird, denn die Menge eigentlicher Entropie verringert sich entsprechend. Um dieses Problern zu beheben, können wir dem Generator Hiehr Daten als eigentlich notwendig entnehmen und diese mit einer sicheren Hashing-Funktion (z. B. SHA-1) verarbeiten, um einen Mangel an systematischem Fehler oder Entropie zu beseitigen. Dieser Ansatz ist empfohlene Praxis für TRNG-spezifische Probleme, solange sich die unerwünschten Effekte innerhalb angemessener Grenzen bewegen (d. h. solange jedes Bit noch ein ausreichendes Maß an Entropie in sich trägt). Mehrere Experten haben auch vorgeschlagen, nichtspezialisierte Eingabegeräte - z. B. Webcams oder eingebaute Mikrofone - als Entropiequelle einzusetzen. CCD-Sensoren in Digrtalkameras neigen zur Erzeugung von Pixelrauschen, und ein erheblich übersteuertes Mikrofonsignal ist grundsätzhch eine geeignete Quelle für Zufallsrauschen. Allerdings gibt es keine universelle Methode zur Einrichtung eines solchen Generators, denn es gibt herstellerspezifische Unterschiede bei den Schaltungen verbreiteter Mediengeräte, weswegen die Qualität der erzeugten „Zufallszahlen" nicht gewährleistet ist. Und tatsächlich nehmen einige Geräte scheinbar zufällige, aber doch vollständig vorhersagbare Funkstöningen oder bestimmte schaltungsinteme Signale auf. Außerdem erzeugen manche Geräte (insbesondere CCD-Sensoren) statische Rauschmuster: Diese scheinen zwar zufällig, ändern sich aber nicht unverrnittelt, weswegen es geiährlich sein kann, sich einzig und allein darauf zu verlassen. 1.6 Denkanstöße Ich habe mich entschieden, die tiefgründige Beschreibung einiger interessanter Konzepte auszulassen. Nichtsdestoweniger können diese eine wertvolle Inspiration für weitere Erkundungen sein. Qyp03 26
1.6 Denkanstöße 1.6.1 Entfernte Timingangriffe Theoretisch könnte es möghch sein, den PRNG-Timingangriff auch über ein Netzwerk auszuführen. Bestimmte kryptografieiahige Dienste implementieren eine symmetrische Kryptografie. Nach Herstellen eines langsameren asymmetrischen Stioms mithilfe der PKI und der Verifizierung der beiden beteiligten Parteien wird ein symmetrischer Sitzungsschlüssel erstellt, und die beiden Endpunkte schalten auf die schnellere symmetrische Alternative um. ■ Es ist eventuell möghch, die Ablaufmuster von Tastaturanschlägen zu überwachen, indem man dafür sorgt, dass die Anwendung einen im System vorhandenen Entropiepool bis zu dem Punkt aufbraucht, an dem gerade eben nicht rnehr genug Entropie vorhanden ist, um einen neuen Sitzungsschlüssel zu generieren. Die Anwendung verzögert dann die Erstellung eines symmetrischen Schlüssels, bis wieder genug Entropie vorhanden ist, um den Rest eines Schlüssels zu erstellen; dies aber wird - neben anderen Möglichkeiten - beim nächsten Anschlagen oder Loslassen einer Taste der Fall sein. ■ Meiner Ansicht nach wird eine solche Attacke eher in einem Testfeld als in irgendeiner realen praktischen Anwendung Erfolg haben. Mein Fachlektor allerdings ist anderer Meinung, weswegen Sie meine Aussage lediglich als einen möglichen Standpunkt betrachten sollten. Eine interessante Analyse der University of Virginia17 kritisierte die im erwähnten Dokument beschriebene Studie zu SSH-Ab laufen dahingehend, dass bereits die Signalunbeständigkeiten im Netzwerk ein Ermitteln von Ablaufmustem unmöglich machen würden; allerdings sei darauf hingewiesen, dass die konstante Wiederholung einer Aktivität (z. B. die Eingabe desselben Passworts bei jeder Anmeldung) zufällige Netzwerkleistungsschwankungen durchaus kompensieren könnte. 1.6.2 Ausnutzen der Systemdiagnose Es gibt Systeme, die bessere Möglichkeiten haben, Angaben zu Tastaturaktivitäten und andere Ablaufdaten wiederherzustellen. Nach der Veröffenthchung meiner Studie zum PRNG-Timing wurde ich darauf hingewiesen, dass Linux eine Datei /proc/intermpts enthält, die interruptspezifische Statistikübersichten anzeigt; ihr Sinn ist die Bereitstellung einiger nützlicher Leistungsdaten. Durch Überprüfen der Änderungen beim rnterruptzähler von IRQ 1 ist es möghch, dieselben Ablaufinfonnationen zu erhalten, die sich mithilfe eines PRNG ermitteln lassen; hierbei sind zudem Implikationen von Festplatten- und Netzwerkaktivitäten bereits ausgefiltert, d. h. die Entblößung der Privatsphäre erfolgt in ähnlichem Maße wie beim oben beschriebenen Fall. HogyOl
1 Die redselige Tastatur 1.6.3 Reproduzierbare Unberechenbarkeit Andere Probleme, die einen Blick wert sein könnten, beziehen sich auf die PRNG- Irnplernentierung selbst. Wenn Sie dieselbe Hardware in großen Stückzahlen erwerben und in jedem Ihrer Systeme installieren (was gängige Praxis ist), dann kann dies ein Problem bei Servern darstellen, die konsolenseitig nicht besonders stark beanspracht werden. Risiken bestehen auch, wenn eine Installation mithilfe spezieller Klontools gespiegelt und das Image dann auf eine größere Anzahl von Servern aufgespielt wird. In all diesen Situationen ist am Ende unter Umständen zu lange zu wenig wirkliche Entropie vorhanden. 28
2 Mehrarbeit fällt auf Zweites Kapitel. In dem wir erfahren, wie man einen Computer aus Holz baut und Informationen sammelt, indem man einem echten Computer bei der Arbeit zusieht Die Daten, die Sie eingegeben haben, befinden sich nun im sicheren Hafen der Anwendung, die Sie gestaltet haben. Das Programm nimmt sich die Zeit, zu entscheiden, was mit den Daten geschehen soll, wie sie zu inteipretieren sind und welche Handlungen nun als nächste durchzuführen sind. In diesem Kapitel werden wir die maschinennahe Mechanik der Datenveraibeitung im Detail untersuchen und einige der Probleme benennen, die tief unter dem Kühlkörper Ihres Prozessors lauem. Dabei werden wir besonderes Augenmerk auf Rückschlüsse legen, die sich durch einfaches Beobachten ziehen lassen: Beobachten, wie ein System bestimmte Programme ausführt und wie lange die Erledigung bestimmter Aufgaben dauert. Als Zugabe werden wir zudem einen voll funktionsfähigen Computer aus Holz bauen. 2.1 Booles Erbe Um den Aufbau eines Prozessors zu verstehen, müssen wir zurückkehren zu den Tagen, als noch niemand ahnen konnte, dass es so etwas wie Prozessoren überhaupt einmal geben würde. Alles begann seinerzeit ganz unschuldig im 19. Jahrhundert, als George Boole (1815 -1864), Autodidakt auf dem Gebiet der Mathematik, ein einfaches binäres Algebrasystem ersann, das als Rahmen zum Verstehen und Gestalten eines formalen Logikkalküls dienen sollte. Sein Ansatz reduzierte die Menge der logischen Grundkonzepte auf drei einfache algebraische Operationen, welche auf Elemente angewendet werden können, die zwei gegenteilige Zustände - wahr und falsch - abbilden. Diese Operationen sind: 29
2 Mehrarbeit fällt auf ■ Disjunktionsoperator (OR, ODER). Dieser ist wahr, wenn mindestens einer der Operanden1 wahr ist.2 ■ Konjunktionsoperator (AND, UND). Dieser ist nur wahr, wenn alle Operanden wahr sind. ■ Negationsoperator (NOT, NICHT). Dieser ist wahr, wenn der (einzige) Operand falsch ist. Wiewohl simpel in seiner Struktur, erwies sich das Boolesche Algebramodell als leistungsfähiges Tool zur Lösung logischer Probleme und anderer mathernatischer Aufgaben. Letztendlich war es dieses Modell, welches es zahlreichen beherzten Visionären ermöglichte, den Traum von der intelligenten analytischen Maschine Wirklichkeit werden zu lassen, die eines Tages unser tägliches Leben ändern sollte. Für die meisten versierten Computerbenutzer ist die Boolesche Logik heute kaum mehr ein Buch mit sieben Siegeln - ganz anders als der Weg, der von dieser Sammlung trivialer Operationen zu unseren modernen Computern fühlt. Wir werden mit der Erforschung dieses Pfades beginnen, indem wir zunächst einmal versuchen werden, die Essenz dieses Modells in seiner einfachsten Form zu erfassen. 2.2 Auf dem Weg zum Universaloperator Der Pfad zur Schlichmeit nimmt häufig genug scheinbar unnötig komplexe Wege. Auch dieser Fall bildet keine Ausnahme. Bereits hier - am Anfang der Ausführungen - müssen wir das Werk eines anderen Mathematikers des 19. Jahrhunderts einbeziehen: Augustus DeMorgan (1806 -1871). DeMorgans Gesetz besagt: Die Negation einer Disjunktion ist die Konjunktion der Negationen. Diese niederträchtige Übung zur Verschleierung trivialer Konzepte hat für die Boolesche Logik - und damit letztendhch auch für den Aufbau digitaler Schaltungen - einige tiefgreifende Folgen. Einfach gesagt, erläutert DeMorgans Gesetz, dass, wenn eine von zwei Bedingungen (oder beide) nicht erfüllt sind, die Aussage, dass beide Bedingungen erfüllt sind (oder - anders gesagt - eine Konjunktion der Bedingungen auftritt), ebenso falsch ist. Urngekehrt gilt dasselbe natürlich auch. Das Gesetz folgert, dass NOT OR (a, b) logisch äquivalent mit AND (NOT a, NOT b) sein sollte. Wir wollen dies an einem Beispiel aus dem wirklichen Leben veranschaulichen, in dem a und b folgendes darstellen: ■ a = „Peter mag Milch" ■ b = „Peter mag Äpfel" Ein Operand ist ein Element, welches inithilfe eines Operators verglichen wird. Das logische OR ist nicht exklusiv, d. h. es bedeutet „eines von beiden Elementen" und nicht „entweder das eine oder das andere Element". 30
2.2 Auf dem Weg zum Universaloperator Die beiden Seiten von DeMorgans Gleichung können nun wie folgt formuliert werden: OR (NOT a, NOT b) e> Peter mag NICHT Milch ODER Peter mag NICHT Äpfel NOT AND (a, b) ö Es ist NICHT wahr, dass Peter Milch UND Äpfel mag Die beiden Ausdrücke sind funktionell äquivalent. Wenn wahr ist, dass Peter eine Abneigung entweder gegen Milch oder gegen Äpfel hat, dann ist der erste Ausdruck wahr. Ebenso ist wahr, dass er beide nicht mag, d. h. der zweite Ausdruck ist ebenfalls wahr. Die Umkehrung der Situation fühlt ebenfalls zu einer Übereinstimmung: Wenn es nicht wahr ist, dass Peter wenigstens eine der angebotenen Lebensmittel verabscheut, dann mag er beide (und der erste Ausdruck ist falsch). In diesem Fall ist ebenso wenig wahr, dass er beide nicht mag (weswegen der zweite Ausdruck ebenfalls falsch ist). 2.2.1 DeMorgan im Einsatz Um Logikanweisungen auszuwerten, ohne dabei auf die Mittel der Intuition oder eine Kristallkugel zurückzugreifen, kann es hilfreich sein, so genannte Wahrheitstabellen zu erstellen, die alle Ergebnisse aller möglichen Kombinationen wahrer und falscher Operatoren in übersichtlicher Form enthalten. Die folgenden beiden Tabellen stellen die Ausdrücke des obigen Beispiels dar. Jede Tabelle enthält Spalten für beide Operatoren und die entsprechenden Ergebnisse für alle möglichen Wahr/Falsch-Kombinationen. Und so sehen Sie in der ersten Zeile, dass die ersten beiden Spalten - die Operanden für NOT AND(a, b) - falsch sind. Dies fühlt dazu, dass AND(a, b) ebenfalls falsch ist - NOT AND(a, b) ist mithin wahr. Das Ergebnis finden Sie in der dritten Spalte. Wie Sie sehen, verhalten sich die beiden Ausdrücke identisch. Tabelle 2.1 NOT AND(a, b): AND mit negiertem Ergebnis Operand 1 (a) FALSCH FALSCH WAHR WAHR Operand 2 (a) FALSCH WAHR FALSCH WAHR Ergebnis WAHR WAHR WAHR FALSCH Tabelle 2.2 OR(NOT a, NOT b): OR mit negierten Operanden Operand 1 FALSCH FALSCH WAHR WAHR Operand 2 FALSCH WAHR FALSCH WAHR Ergebnis WAHR WAHR WAHR FALSCH 31
2 Mehrarbeit fällt auf Was aber haben nun Peters lukullische Leidenschaften mit der Entwicklung von Computern zu tun? Nichts weniger, als dass DeMorgans Gesetz im Kontext Boolescher Operatoren die Bedeutung hat, dass die Menge der Basisoperatoren, die die Boolesche Algebra kennt, teilweise redundant ist: Eine Kombination aus NOT und einem behebigen der beiden anderen Operatoren (OR und AND) ist immer ausreichend, um den verbleibenden Operator zu bilden. Ein Beispiel: OR (a, b) e> NOT AND(NOT a, NOT b) AND (a, b) e> NOT OR(NOT a, NOT b) Diese Auslegung verringert die Anzahl der Operatoren auf zwei, aber das Boolesche System lässt sich noch weiter vereinfachen. 2.2.2 Komfort ist notwendig Einige weitere Operatoren sind zur Implementierung Boolescher Logik zwar nicht zwingend erforderlich, ergänzen die vorhandenen Möglichkeiten aber sinnvoll. Diese Zusatzoperatoren NAND (NOT AND) und NOR (NOT OR) sind nur dann wahr, wenn AND bzw. OR falsch sind: NAND(a, b) e> NOT AND(a, b) e> OR(NOT a, NOT b) NOR(a, b) e> NOT OR(a, b) e> AND(NOT a, NOT b) Diese neuen Funktionen sind nicht komplexer als AND und OR. Für jede gibt es eine Wahrheitstabelle mit vier Zuständen (also vier Zeilen), d. h. der Wert kann mit ebenso viel Aufwand errnittelt werden. ■ Hinweis NOR und NAND gehören nicht zu den Basisoperanden, weil beide keiner häufig verwendeten, grundlegenden Forrn einer logischen Beziehung zwischen Aussagen entsprechen und sich auch nicht in einer atornischen Darstellung in der Alltagssprache wiederfinden. Ich habe nun also ein paar neue Operatoren vorgestellt, die von den vorhandenen Operatoren abgeleitet sind und scheinbar keinen anderen Zweck zu verfolgen scheinen, als denjenigen unter uns, die ausgesprochen eigenartige logische Abhängigkeiten oder Probleme mithilfe einer formalen Notierung darstellen wollen, die Sache etwas einfacher zu machen. Warum eigentlich? Nun, die Emfühiiing von NAND und NOR ermöglicht es uns, ganz ohne AND, OR und NOT auszukommen. Dies bringt uns unserem Ziel der Einfachheit näher und gestattet es, das gesamte System der Booleschen Algebra mit immer weniger Elementen und Operatoren zu beschreiben. Die Bedeutung dieser negierten Hilfsoperatoren besteht darin, dass Sie mit ihnen ein vollständiges Boolesches Algebrasystem erstellen können. Letztendlich können Sie sogar alle Basisoperatoren mit NAND nachbauen, wie nachfolgend veranschaulicht wird (dabei steht 32
2.2 Auf dem Weg zum Universaloperator W für „wähl-" und F für „falsch"3). Wie das? Nun, augenscheinlich sind die folgenden Aussagepaare äquivalent: NOT a e> NAND(W, a) AND(a, b) e> NOT NAND(a, b) e> NAND(W, NAND(a, b)) OR(a, b) e> NAND(NOT a, NOT b) e> NAND(NAND(W, a), NAND(W, b)) Alternativ können wir auch wie folgt formulieren, sofern wir ausschließlich NOR (statt NAND) verwenden wollen: NOT a e> NOR(F, a) OR(a, b) e> NOT NOR(a, b) e> NOR(F, NOR(a, b)) AND(a, b) e> NOR(NOT a, NOT b) e> NOR(NOR(F, a), NOR(F, b)) 2.2.3 Die Komplexität beim Schöpfe packen Es ist schwer zu glauben, dass sich die Essenz der gesamten elektronischen Datenverarbeitung mithilfe nur eines einzigen der verfügbaren Logikoperatoren einfangen lässt. Sie können die meisten komplexen Algorithmen, ansprachsvoUen Berechnungen, topaktuellen Spiele und das Intemetsurfen mit einer Matrix einfacher Schaltungen implementieren, die auf einer der folgenden Wahlheitstabellen basieren, mit denen Eingabesignale in Ausgabesignale umgewandelt werden. Tabelle 2.3 Zustandstabelle für NAND Operand 1 FALSCH FALSCH WAHR WAHR Operand 2 FALSCH WAHR FALSCH WAHR Ergebnis WAHR WAHR WAHR FALSCH Tabelle 2.4 Zustandstabelle für NOR Operand 1 FALSCH FALSCH WAHR WAHR Operand 2 FALSCH WAHR FALSCH WAHR Ergebnis WAHR FALSCH FALSCH FALSCH Puristen mögen einwenden, dass W beispielsweise äquivalent zu AND(a, a) ist, denn dieser Ausdruck ist immer wähl-. Gleichermaßen ist F äquivalent zu NOT AND(a, a), denn dieser Ausdruck ist immer falsch. Mit anderen Worten: Wir haben kein neues Konzept oder Gleichungselement vorgestellt, sondern an dieser Stelle lediglich die Notierung ein wenig vereinfacht. 33
2 Mehrarbeit fällt auf Sie wenden ein, das führe doch zu nichts? Wie könnte man denn mit dieser simplen Menge von Abhängigkeiten ein Gerät bauen, das in der Lage ist, komplexe Probleme zu lösen? Ein Gerät, dem es gelingt, Ihren Kreditantrag ebenso höflich wie bestimmt abzulehnen? Und was bitte schön hat eine Theorie, die auf den Zuständen „wahr" und „falsch" basiert, mit digitalen Schaltkreisen gemeinsam? 2.3 ... und weiter in die Welt der Materie Der Mechanismus, den Boole entwickelt hat, hat nichts Komplexes an sich. Er verlangt lediglich zwei gegenteilige logische Zustände: „wahr" und „falsch", 0 und 1, „blaugrün" und „purpurn", 999 und 999,5. Die eigentliche Bedeutung, die physische Daistellung und das Medium spielen keine Rolle. Was hingegen wichtig ist, ist die frei gewählte Konvention, die bestimmte Zustände des Mediums mit einer bestimmten Menge logischer Werte verknüpft. Computer, wie wir sie kennen, benutzen zwei verschiedene Spannungspegel in einem Stromkreis und interpretieren diese als Werte, die ihre Konstrukteure als 0 und 1 bezeichnen. Diese Werte, die im Stromkreis übertragen werden, stellen die beiden Ziffern im binären Zahlensystem dar. Niemand kann uns allerdings daran hindern, irgendeine andere Methode zur Übertragung der Daten zu verwenden: eine Wasserströrnung, eine chemische Reaktion, Rauchzeichen oder auch Drehmomente, die von einem Satz meisterhaft gefertigter Holzzahnräder übertragen werden. Die Information bleibt stets dieselbe - unabhängig vom Informationsträger. Der Schlüssel zur Implementiemng der Booleschen Logik in der physischen Welt ist einfach, sobald man definiert hat, wie logische Werte physisch dargestellt werden. Nun müssen wir nur noch eine Möglichkeit finden, einen Satz Komponenten auf eine spezielle Weise anzuordnen, damit diese Werte so manipuliert werden können, dass unser Computer genau das tut, was wir wollen. Wir kommen darauf in Bälde zurück; zunächst aber wollen wir herausfinden, wie man Signale manipuliert und echte Logikgeräte implementiert. Diese werden gemeinhin als Gatter bezeichnet. In unserem Fall: Holzgatter. 2.4 Der stromlose Computer Der Schritt von einer Anzahl theoretischer Operationen, die die Welt der trockenen Mathematik hervorgebracht hat, hin zu einem Gerät, welches Strömungen, Drehmomente oder elektrische Signale so reduzieren kann, dass ein logischer Operator nachgeahmt wird, scheint eine recht aufwändige Aufgabe zu sein. Eigentlich aber ist es gar nicht so schwer. Abbildung 2.1 zeigt einen ganz einfachen Zahnradsatz, der die NOR-Funktionalität mit- hilfe einer drehmornentbasierten Logik implementiert. Wenn das , Ausgaberad" still steht, stellt es den Zustand 0 dar. Wird auf dieses Rad nun ein Drehmoment ausgeübt, dann ist 34
2.4 Der stromlose Computer der Zustand 1. Das Gerät überträgt das Drehmoment von einer externen Quelle nur dann an die Ausgabe, wenn kein Drehmoment auf die beiden steuernden „Eingaberäder" ausgeübt wild. Theoretisch ist eine externe Energiequelle nicht erforderlich, und der Aufbau könnte auch etwas einfacher sein; in der Praxis jedoch würden Reibung und andere Faktoren die Konstruktion eines komplexeren Satzes vollkorninen selbstständiger Gatter erheblich erschweren. Das Ausüben eines Drehmoments auf eines der Eingaberäder (oder auf beide Räder) zieht das kleine Verbindungszahnrad heraus - das Ausgabezahnrad bleibt stehen. Wenn hingegen die Eingaberäder stehen bleiben, wird das Verbindungsrad von einer Feder wieder in die Ursprungsposition gezogen. Die Wahrheitstabelle für dieses Gerät entspricht exakt der von NOR. Eingabe 1 Abbildung 2.1 Aufbau eines mechanischen NOR-Gatters Wie bereits erwähnt, sind NOR oder NAND alles, was wir zur Implementierung eines Booleschen Logikoperators benötigen. Zwar würde die Möglichkeit, weitere Operatoren zu ergänzen, ohne NAND- und NOR-Gatter neu kombinieren zu müssen, unser Gerät kleiner und effizienter machen, aber für die Funktion ist dies nicht erforderlich. Wenn wir das vertrackte Detail übergehen, alle Gatter so zu verschalten, wie wir es gewohnt sind, dann können wir daraus schließen, dass Computer sich mit praktisch jeder Technologie konstruieren lassen.4 Und natürlich sind nichtelektrische Computer keine fromme Mär. Zu den berühmtesten Beispielen gehören die Analytical Engine von Charles Babbage, und auch Ansätze wie die Nanotechnologie sind vielversprechend. Vgl. Merk93. 35
2 Mehrarbeit fällt auf 2.5 Eine Computerkonstruktion, die ein ganz klein wenig weiter verbreitet ist Zwar begann der Cornputerboorn der letzten Jahrzehnte mit dem pfiffigen Konzept des Transistors, doch ist dieser weder durch seine einzigartige Qualität noch durch irgendwelches Zauberwerk dafür prädestiniert. Es handelt sich schlichtweg um die kostengünstigste, bedienungsfreundlichste und effizienteste Konstruktion, die uns derzeit zur Verfügung steht. Anders als unsere möglicherweise weit überlegene Holzzahnradmaschine leiten die von uns benutzten elektronischen Computer lediglich Elektrosignale mithilfe von Transistoren weiter - winzig kleinen Geräten, bei denen zwischen zwei Knoten (Anschlusspunkten) ein Strorn in definierter Richtung fließt, sobald eine Spannung an den dritten Knoten angelegt wird. Transistoren lassen sich recht effizient miniaturisieren, benötigen nur wenig Leistung und sind zudem zuverlässig und billig. 2.5.1 Logikgatter Der Transistor ist einfach aufgebaut. Er ist eigentlich sogar zu einfach aufgebaut, als dass er für sich genommen Boolesche Logik in sinnvoller Form implementieren könnte. Werden Transistoren jedoch passend zu Logikgattem verschaltet, dann kann man mit ihnen alle einfachen und erweiterten Operationen der Booleschen Algebra durchführen. Das AND-Gatter lässt sich implementieren, indem man zwei Transistoren seriell anordnet, sodass beide einen niedrigen Widerstand aufweisen (also „an" sein) müssen, bevor die Spannung zum Ausgang fließen kann. Jeder Transistor wird über eine separate Eingangsleitung angesteuert. Das Ausgangssignal wird mithilfe eines Widerstands nominell „herabgesetzt", hat also die Massespannung 0 („falsch"); wenn beide Transistoren eingeschaltet sind, kann ein kleiner Strorn fließen, und der Ausgangswert übersteigt 0. Das OR-Gatter wird implementiert, indem parallele Transistoren konfiguriert werden, sodass einer der vorhandenen Transistoren aktiviert werden kann, damit die Ausgabe einen Wert ungleich 0 erreichen kann (dies entspricht „wahr"). Das letzte Basisgatter NOT wird mit einem einzigen Transistor und einem Widerstand implementiert. Die Ausgabe von NOT ist bei inaktivem Transistor 1 (was rnithilfe des Widerstands realisiert wird) und wird auf 0 herabgesetzt, sobald der Transistor öffnet. Abbildung 2.2 zeigt den Aufbau der drei einfachen Transistorgatter AND, OR und NOT. ■ Hinweis Sie werden feststellen, dass sich AND- und OR-Gatter ohne Hinzunahnie weiterer Komponenten in NAND- bzw. NOR-Gatter uniwandeln lassen. Es reicht aus, einen Aufbau zu wählen, der beim Schema für NOT-Gatter abgeguckt ist: Widerstand und „Ausgangspunkt" werden zur Versorgungsspannung verschoben, wodurch die Ausgabelogik umgekehrt wird. 36
2.6 Von Logikoperatoren zu Berechnungen AND-Gatter Eing. 1 Eing. 2 Ausg. OR-Gatter Eing.1 y Eing. 2 __ Ausg. NOT-Gatter Ausg. Eing. A Abbildung 2.2 Transistorbasierte Logikgatter: Konstruktion und Symbole Wir haben nun einen Punkt erreicht, an dem wir Transistoren kombinieren können, um eines der Universalgatter zu implementieren; allerdings können wir noch so viele Gatteibauen - mit echter elektronischer Datenverarbeitung hat das noch nichts zu tun. Sicher ist alles, was bislang in diesem Kapitel gesagt wurde, faszinierend, aber was kann man mit Boolescher Logik anderes anfangen, als Denkspiele zu Peters Ernährung aufzulösen? 2.6 Von Logikoperatoren zu Berechnungen Die Kombination trivialer Boolescher Logikoperationen eröffnet uns eine Vielzahl überraschender Fähigkeiten. So können wir etwa Rechenoperationen mit den Binärdarstellungen von Zahlen dmchführen. Und dies ist die Stelle, an der es interessant wird. So lässt sich beispielsweise eine Eingabezahl mithilfe einer Gruppe von XOR- und AND- Gattem um den Wert 1 erhöhen. Dies ist der allererste Schritt auf unserem Weg zur Addition. Abbildung 2.3 zeigt den Aufbau eines Zählers, der auf diesem Konzept basiert. Und was ist nun wieder „XOR"? XOR ist noch ein „bequemer" Boolescher Logikoperator: Er ist wahr, wenn genau einer seiner Operanden wahr ist. XOR (exklusives OR) wird häufig zur Notationsvereinfachung verwendet, ist aber andererseits durch Kombination von AND, NOT und OR einfach zu implementieren. Es ist wie folgt definiert: XOR(a, b) e> AND(OR(a, b), NOT AND(a, b)) Nun aber zurück zu unserer Schaltung. Was kann man damit anfangen? Das in Abbildung 2.3 gezeigte Gerät lässt sich mit einer in Binärförm notierten Zahl füttern. In diesem Beispiel ist die Zahl auf drei Bits beschränkt, der Aufbau lässt sich aber ganz einfach so erweitem, dass auch größere Eingabezahlen verarbeitet werden können. Dieses einfache Rechengerät funktioniert nach dem gleichen Prinzip wie das schriftliche Addieren: Der Verarbeitung erfolgt von rechts nach links, und es sind Überträge möglich. Der einzige echte Unterschied besteht darin, dass das Binärprinzip zur Anwendung kommt. 37
2 Mehrarbeit fällt auf Wir wollen einmal sehen, wie das funktioniert. Wir nehmen eine Binärzahl, die in eine Zeile geschrieben ist. Diese Zahl wollen wir nun um den Wert 1 erhöhen. Wir beginnen - wie wir es von der Dezirnaladdition her kennen - bei der Stelle ganz rechts. Eingabezahl 1» ', '* J NOT—f~\ KU^\J \ 1 "\ c * AND J r 1—"*> AND ] u j xorV j xorV o„ —• o2 —• 03 (Übertrag) Ausgabezahl Abbildung 2.3 Einfache „Plus-1 -Schaltung" Dort finden wir eine Binärziffer. Wenn wir eine solche Ziffer um 1 erhöhen, sind nur zwei Ergebnisse möglich: Wenn die vorhandene Ziffer 0 ist, ist die Ausgabe 1 (0+1 = 1). Andernfalls ist die Ausgabe 0, und wir müssen 1 in die nächste Spalte übertragen (1 + 1 = 10). Mit anderen Worten tun wir zweierlei: Wir erzeugen eine Ausgabe, die eine Negation der Eingabe ist (1 für 0 oder 0 für 1), und wir behalten, wenn die Eingabeziffer 1 ist, eine 1 im Sinn, die später eingefugt werden muss. Dies ist genau das, was diese Schaltung tut - für die erste Eingabeziffer I0. Das oberste Gatter verarbeitet die Eingabe, indem es sie negiert und als O0 ausgibt. Außerdem wird der Eingabewert den Gattern zugeführt, die für die Verarbeitung der nächsten Spalte zuständig sind (00. O0 = NOT I0 Q)= lo So, nun haben wir die Zahl um 1 erhöht. Wenn kein Übertrag von der vorherigen Spalte vorhanden ist, dann bleibt nichts mehr zu tun. Ohne Übertrag sollte Oi J_i widerspiegeln; ist allerdings ein Übertrag vorhanden, dann müssen wir den Fall auf gleiche Weise bearbeiten wie beim Hinzuaddieren von 1 zur vorherigen Spalte: Die Ausgabe muss negiert werden, und ein Wert wird ggf. in die nächste Spalte übertragen. Von diesem Punkt an wird jeder nachfolgende Ausgabewert (On für w > 0) entweder direkt von In kopiert, sofern kein Bit aus der vorherigen Spalte übertragen wurde, oder aufgnind der Addition eines Übertragsbits um den Wert 1 erhöht (was wiederum einer Negation entspricht). Und ist wird, wenn In = 1 ist, der Übertrag Cn dieser Spalte ebenfalls 1 sein, während On = 0 ist (denn binär ist 1 + 1 =10). Unter Umständen haben Sie bereits festgestellt, 38
2.6 Von Logikoperatoren zu Berechnungen dass die Ausgabe an der Position n eigentlich nur das Ergebnis einer XOR-Operation des Eingabewerts an der Position n und des Übertragbits der Spalte n — 1 ist. Insofern erzeugt die Schaltung den Wert On durch eine XOR-Verknüpfung des von Cn_i übertragenen Bits mit dem Wert von In und eine AND-Verknüpfung des Übertrags von Cvi mit In, um zu bestimmen, ob ein Übertrag in die nächste Spalte erfolgen rnuss: On = XOR(In,Cn_l) Cn = AND(In,Cn_1) Betrachten Sie das folgende Beispiel: Wir wollen den Eingabewert 3 (binär 011) um 1 erhöhen. Die Eingabewerte sehen wie folgt aus: Io=l Ii=l I2 = 0 Die Schaltung erzeugt O0 durch Negjerang von I0, d. h. O0 = 0. Da L, ungleich 0 ist, erfolgt zudem ein Übertrag in die nächste Spalte. In der nächsten Spalte setzt das XOR-Gatter Oi auf 0, denn It war zwar 1, aber es erfolgte ein Übertrag von der vorherigen Spalte (1 + 1 = 10). Auch hier kommt es wieder zu einem Übertrag in die nächste Spalte. In einer weiteren Spalte ist zwar I2 = 0, aber das AND-Gatter zeigt einen Ubeitragswert aus der vorherigen Spalte an, weil die beiden vorherigen Eingabewerte jeweils 1 waren. Es erfolgt kein Übertrag in die letzte Spalte. Die Ausgabe lautet: O0 = 0 Oi = 0 o2 = i O0 = 0 .. .oder 0100, was - dezimal ausgedrückt - ganz zufällig 4 entspricht. Und siehe da: Das ist +1, geschrieben in Binärform. ■ Hinweis Wir haben soeben das erste Berechnungsproblein in Begriffen der Booleschen Algebra ausgedrückt. Sie könnten nun versucht sein, den Aufbau so zu erweitem, dass Sie damit zwei beliebige Zahlen — statt nur einer Zahl und der Zahl 1 — addieren können. Nichtsdestoweniger macht die Grundschaltung einen Großteil vom A und O der EDV aus. Digitale Rechenschaltungen funktionieren, indem man bestimmte Eingabedaten durch ein Array clever angeordneter Logikgatter führt, die ihrerseits Additions-, Subtraktions-, Mul- tiplikations- und andere einfache Vorgänge an einer Anzahl Bits durcMuhren. Das hat nur wenig mit Zauberei zu tun. Bislang habe ich erläutert, wie man mithilfe von Siliziumchips oder zurechtgesägten Holzscheiben festgelegte Grundoperationen wie etwa Berechnungen mit ganzen Zahlen durchführen kann. Allerdings fehlt in diesem Bild noch etwas: Wenn Sie Ihren Computer zum ersten Mal einschalten, werden Sie nämlich feststellen, dass Textverarbeitungsprograrnrne, 39
2 Mehrarbeit fällt auf Spiele und Tauschbörsensoftware keineswegs fest in ein fürchterlich komplexes Array von Logikgattern in der CPU einkodiert sind. Wo zum Teufel ist also die Software? 2.7 Von der elektronischen Eieruhr zum Computer Der echte Wert eines Computers hegt in seiner Fähigkeit, sich so programmieren zu lassen, dass er auf eine ganz bestimmte Alt und Weise agiert - also eine Folge von Softwarebefehlen gemäß einem bestimmten Plan ausführt. Abbildung 2.4 veranschaulicht den nächsten Schritt auf unserem Weg zur Entwicklung einer flexiblen Maschine, die rnehr kann, als nur eine einzige, fest verdrahtete Aufgabe erledigen: nämlich die Speicherung und Ablage von Daten. In der Abbildung sehen wir eine Speichereinheit, die unter der Bezeichnung Flipflop bekannt ist. Diese Speicherzelle hat zwei Steuerleitungen namens „Set" („Setzen") und „Reset" („Zurücksetzen"). Wenn an keinem dieser Eingänge ein Signal anliegt, behält das Gatter seinen aktuellen Zustand aufrecht. Dies hegt an einer Rückleitung zwischen seinem Eingang und dem Ausgang zum OR-Gatter. Die vorherige Ausgabe von OR wird über ein AND-Gatter gefühlt, weil die andere Leitung auf 1 gesetzt ist (negiertes „Reset"); dessen Ausgabe wird wieder durch OR geführt, weil das andere Eingangssignal 0 ist („Set"). Der Ausgangsstatus wird aufrechterhalten, solange die Gatter mit Spannung versorgt werden. Wenn am Eingang „Set" ein Signal anliegt, dann wird das OR-Gatte auf den Ausgabeweit 1 gesetzt und behält diesen Wert auch bei, wenn kein Signal mehr an „Set" anliegt. Liegt an „Reset" ein Signal an, dann wird das AND-Gatter auf 0 gesetzt und die Rückführungs- schleife wird unterbrochen: Die Ausgabe der Schaltung iällt auf 0. Dies bleibt auch so, wenn „Reset" wieder signalfrei ist. Wenn an beiden Steuerleitungen ein Signal anliegt, wird die Schaltung instabil. Das ist nicht gerade schön - besonders, wenn es sich um einen mechanischem Computer handelt. Taktsignal Daten Flipflopzelle Ausgabe OR) » > Änderungsschnittstelle Abbildung 2.4 Flipflopspeicher mit praktischer Schnittstelle 40
2.7 Von der elektronischen Eieruhr zum Computer Die Wahlheitstabelle für diesen Aufbau sieht wie folgt aus (Vbezeichnet dabei einen behebigen Logikwert): Tabelle 2.5 Wahrheitstabelle für Flipflopschaltung Set 0 1 0 1 Reset 0 0 1 1 Qm V - - - Qt V 1 0 instabil Eine praktischere Variante einer Fhpflopschaltung, die über eine „Ändemngsschnittstelle" (siehe Abbildung 2.4) verfügt, verwendet zwei AND-Gatter und ein NOT-Gatter, sodass der Zustand einer Eingangsleitung immer dann (von einer Abtast- und Halteschaltung) er- fasst wird, wenn ein externes „Taktsignal" abgesetzt wird. Dieser Aufbau beseitigt das Vorhandensein instabiler Eingangssignalkornbinationen und erleichtert auf diese Weise die Verwendung eines solchen Speichers zum Ablegen von Daten. Tabelle 2.6 Verbesserte Wahrheitstabelle für Flipflopschaltung Eingangssignal - S Taktsignal 0 1 Qm V - Qt V s Diese triviale Gatterkonfiguration weist eine entscheidende Eigenschaft auf: Sie kann Daten speichern. Eine einzelne Zelle kann nur ein einziges Bit speichern, die Speicherkapazität lässt sich jedoch durch Kombination einer Anzahl von Flipflops erweitern. Zwar gibt es heutzutage viele verschiedene Speicherkonstruktionen, aber die Bedeutung dieser Funktionalität bleibt doch die gleiche: Sie gestattet das Ausführen von Prograrnrnen. Wie das? In der Grundausführung speichert der Chip einen besonderen Wert, der häufig als Befehlszeiger bezeichnet wird, auf einem internen Speicherelement auf dem Chip selbst. Dieses so genannte Register besteht aus mehreren Flipflops. Da gängige Computer synchronisiert arbeiten (d. h. alle Prozesse werden von einem Taktgenerator zeitlich festgelegt, der mit sehr hoher Frequenz arbeitet), wählt der Zeiger bei jedem Taktzyklus eine Speicherzelle aus dem Hauptspeicher aus. Die auf diese Weise abgerufenen Steuerdaten wählen und aktivieren die für die Verarbeitung der Daten geeignete Rechenschaltung. Bei manchen Steuerdaten fühlt unser hypothetischer Chip eine Addition durch, bei anderen ist er Bestandteil einer Eingabe-Ausgabe-Operation. Nach dem Abrufen eines Steuerdatenelementes (d. h. aller Maschinenanweisungen) muss der Chip seinen Anweisungszeiger weiterschalten, damit er auf das Lesen des nächsten Befehls im nächsten Zyklus vorberei- 41
2 Mehrarbeit fällt auf tet ist. Dank dieser Funktionalität können wir mit dem Chip eine Folge von Maschinenanweisungen ausführen. Und ein Programm ist nichts anderes als eine solche Folge. Es ist nun an der Zeit herauszufinden, welche Operationen der Chip ausführen können rnuss, um einsetzbar zu sein. 2.8 Turing und die Komplexität von Anweisungsmengen Wie sich herausstellt, muss der Prozessor gar nicht so komplex sein. Vielmehr ist die Menge der Anweisungen, die ein Chip benötigt, um eine behebige Aufgabe durchzuführen, erstaunlich klein. Die Chui-ch-Tuiing-These besagt, dass jede Berechnung der physischen Welt von einer Turingmaschine - einem primitiven Computermodell - ausgeführt werden kann. Die nach Ihrem Erfinder benannte Turingmaschine ist ein einfach strukturiertes Gerät, das mit einem potenziell endlos langen, aus einzelnen Zellen bestehenden Band arbeitet - einem hypothetischen, völlig abstrakten Speichermedium. Jede Zelle kann ein einzelnes, einem „Maschinenalphabet" entnommenes Zeichen speichern, welches lediglich der Name einer endlichen, sortierten Menge möglicher Werte ist. (Dieses Alphabet hat nichts mit Alphabeten zu tun, wie wir sie kennen, sondern wurde lediglich so benannt, um unter Laien für angemessene Verwirrung zu sorgen.) Femer ist das Gerät mit einem internen Register ausgestattet, welches eine endliche Anzahl gleichermaßen interner Zustände enthalten kann. Eine Turingmaschine beginnt in einem gegebenen Zustand bei einer bestimmten Bandposition und liest dann ein Zeichen aus einer Zelle auf dem Band aus. Jedem Automaten ist eine Menge von Änderangsmustern zugeordnet, die beschreiben, wie sein interner Zustand geändert werden kann, was basierend auf der Situation nach dem Lesevorgang auf dem Band gespeichert wird und wie man das Band (optional) um eine Zelle bewegt. Eine solche Menge von Übergängen definiert die Regeln zur Berechnung des nächsten Zustandes des Systems basierend auf den aktuellen Eigenschaften. Diese Regeln werden häufig mit einer Zustandsänderangstabelle wie der folgenden dokumentiert. Tabelle 2.7 Zustandsänderungstabelle Aktueller Zustand Ct 0 1 st so so Neuer Zustand/Aktion Ct+i 1 0 S(H S1 so VORWÄRTS - ZURÜCK Die Tabelle besagt, dass, wenn der aktuelle Wert der Zelle, an der sich die Maschine derzeit befindet, 0 ist, und der interne Zustand der Maschine in diese Moment SO ist, das Gerät den Zustand von C auf 1 und den internen Zustand auf Sl setzen und den Lesekopf nicht bewegen wird. 42
2.8 Turing und die Komplexität von Anweisungsmengen Abbildung 2.5 zeigt ein Beispiel einer Turingmaschine, die an der Zelle C positioniert ist und den internen Zustand S hat. Wir wollen dies im Einzelnen durchgehen. Wie Sie Abbildung 2.5 entnehmen können, verwendet die Maschine ein Alphabet mit den beiden Zeichen 0 und 1 und hat zwei interne Zustände SO und Sl. Sie beginnt im Zustand SO. (Die Anfangsbedingungen können behebig definiert werden, und genau das habe ich hier auch gemacht.) Wenn die Maschine am Ende (also beim niederwertigen Bit) einer auf dem Band gespeicherten Binärzahl positioniert wild, arbeitet Sie entsprechend folgender Logik: ■ Wenn das Zeichen unter dem Lesekopf 0 ist, wird es zu 1, und der Zustand der Maschine wird zu Sl. Dies entspricht der ersten Änderung, die in Tabelle 2.7 dokumentiert ist. Da keine Änderungsregel von Sl vorhanden ist, bleibt die Maschine beim nächsten Zyklus stehen. ■ Wenn das Zeichen unter dem Lesekopf 1 ist, wird es zu 0, und der Zustand bleibt derselbe. Femer bewegt die Maschine den Lesekopf auf dem Band gemäß der zweiten Änderungsregel nach links. Danach wiederholt sich der gesamte Vorgang beginnend an der neuen Position, weil die Maschine in Ihrem aktuellen Zustand verbleibt, für den weitere Änderungsregeln definiert sind. 2.8.1 Endlich: Funktionalität Auch wenn es jetzt überraschend klingen mag: Diese spezielle Maschine ist tatsächlich zweckmäßig und implementiert eine Aufgabe, die rnehr als nur theoretischen Wert haben kann: Sie führt Grundrechnungen aus. Genauer gesagt tut sie das Gleiche wie unsere weiter oben beschriebene „Plus-1-Schaltung". Sie implementiert sogar denselben Algorithmus: Bits auf dem Band werden - beginnend an der letzten Stelle - invertiert, bis 0 gefunden (und ebenfalls invertiert) wird. so 0 1 0 SO, C = 1 110 0 1 CwirdO 1 1 ■ iänd~C Band bewe9t sich nach LINKS; S ändert sich nicht. SO 0 1 0 1 S1 1 SO, C = 0 0 1110 0 1 C wird 1 Band C Keine Bandbewegung; S wird auf S1 gesetzt. Zustand S1 Ist die Abschlussbedingung. 1110 0 1 Die Maschine bleibt stehen. BandC Abbildung 2.5 Ausführungsstufen einer Turingmaschine 43
2 Mehrarbeit fällt auf Dies ist natürlich nur die Spitze des Eisbergs. Eine echte Turingmaschine kann jeden nur vorstellbaren Algorithmus implementieren. Das einzige Problem besteht darin, dass jeder Algorithmus die Implementieiimg eines eigenen Satzes mit Änderungsregeln und internen Zuständen erfordert, d. h. wir müssen für jede neue Aufgabe eine neue Tuiingmaschine bauen. Dies ist auf lange Sicht wohl kaum realisierbar. Zum Glück aber gibt es einen Sonderfall dieser Maschine, die Universelle Turingmaschine (UTM). Diese verfügt über einen Anweisungssatz, der ausreichend entwickelt ist, um alle möglichen Turingmaschinen zu implementieren und jeden behebigen Algorithmus auszuführen, ohne die Änderungstabelle modifizieren zu müssen. Diese „Übennaschine" ist weder besonders abstrakt noch außerordentlich komplex. Ihre Existenz ist garantiert, weil sich (gemäß der bereits erwähnten Church-Turing-These) für die Ausführung jedes endlichen Algorithmus eine passende Turingmaschine entwickeln lässt. Da die Methode zum „Ausführen" der Maschine bereits selbst einen endlichen Algorithmus darstellt, lässt sich auch hierfür eine Maschine entwickeln. Ein paar Anmerkungen zur Komplexität dieser Maschine: Eine Maschine mit einem Bit, also zwei Elementen (die kleinste entwickelte UTM) erfordert 22 interne Zustände und Anweisungen, die Zustandsänderungen beschreiben, um Algorithmen auf einem sequen- ziellen unendlichen Speicherband auszuführen.5 Diese Menge ist durchaus Überschaubai-. 2.8.2 Der Heilige Gral: Ein programmierbarer Computer Die Tuiingmaschine ist auch weit mehr als nur ein hypothetisches abstraktes Gerät, das Mathematiker zur eigenen Erbauung nutzen: Es handelt sich um ein Konstrukt, das nachgerade danach schreit, rnithilfe eines speziell entwickelten, Booleschen, logikbasierten elektronischen (oder mechanischen) Gerätes implementiert und vielleicht auch erweitert zu werden, um seinen Nutzen zu steigern. Dies bringt uns einen Schritt näher an den sinnvollen Einsatz von Computern. Das einzige Problem besteht darin, dass die Anforderung eines unendlich langen Eingabebandes sich in der physischen Welt nicht realisieren lässt. Nichtsdestoweniger können wir einen Großteil davon zur Verfügung stellen, was eine Hardwareversion der Tuiingmaschine zur Lösung der meisten Probleme des täglichen Lebens recht nützlich macht. Bühne frei für den Universalcomputer. Echte Computer gehen natürlich weit über das hinaus, was sich mit einem Ein-Bit- Speicher mit sequenziellem Zugriff machen lässt; auf diese Weise wird die Menge der Anweisungen, die zur Erzielung einer vollständigen Turingimplernentierung erforderlich sind, erheblich reduziert. Eine UTM, die mit einem Alphabet mit 18 Zeichen arbeitet, erfordert lediglich zwei interne Zustände, um korrekt zu arbeiten. Echte Computer hingegen arbeiten normalerweise mit einem „Alphabet", das mindestens 4.294.967.296 Zeichen (32 Bit) enthält - und oft auch weit mehr. Dies erlaubt einen nichtsequenziellen Speicher- Rogo98 44
2.8 Turing und die Komplexität von Anweisungsmengen zugriff und die Verwendung sehr vieler Register mit einer astronomisch großen Zahl möglicher interner Zustände. Letztendlich beweist das UTM-Modell - und unsere täglichen Erfahrungen bestätigen dies auch -, dass es möglich ist, eine flexible, programmierbare Verarbeitungseinheit zu konstruieren, die nur eine Handvoll Merkmale aufweist und mit zwei oder drei internen Registern (Befehlszeiger, Schreiblesezeiger für Daten und unter Urnständen ein Akkumulator) und einer kleinen Menge von Anweisungen auskommt. Es ist absolut rnachbar, ein solches Gerät mit nur ein paar hundert Logikgattern zu erstellen - auch wenn moderne Systeme weitaus rnehr verwenden. Wie Sie sehen, ist die Idee, einen Computer selbst zu bauen, gar nicht einmal so abwegig. Selbst, wenn man dabei Holz als Werkstoff benutzt. 2.8.3 Fortschritt durch Schlichtheit Wenn man mit einer so kleinen Menge Anweisungen arbeiten muss, ist es natürlich recht schwierig, daraus ein schnelles oder einfach zu programmierendes Gerät zu entwickeln. Universelle Turingmaschinen können (auch, weil sie so einfach gestrickt sind) praktisch alles machen, aber sie sind enervierend langsam und schwierig zu programmieren - so schwierig, dass sogar die Irnplernentierung einer rnaschinengestützten Übersetzung aus Klartextsprachen in Maschinencode rnühselig ist. Aber es soll ja Programmierer geben, die das Risiko eines längeren Klinikaufenthaltes durchaus einzugehen bereit sind. Architekturen oder Sprachen, die sich zur Erzielung Turingscher Vollständigkeit auf ein zu elementares Niveau begeben, heißen auch Turingteei-gruben. Dies bedeutet, dass es zwar theoretisch möglich ist, mit ihrer Hilfe jede behebige Aufgabe dmchführen zu können, dies aber in der Praxis nicht rnachbar ist und selbst der Versuch bereits zu zeitaufwändig und beschwerlich wäre. Die Konfiguration sogar einfachster Aufgaben wie der Multiplikation ganzer Zahlen oder der Verschiebung von Speicherinhalten kann Ewigkeiten dauern, und ihre Ausführung dauert dann noch einmal doppelt so lang. Doch es gilt: Je weniger Aufwand und Zeit zur Erledigung einfacher und periodischer Aufgaben erforderlich sind und je geringer die Anzahl der Aufgaben ist, die von einer Software mithilfe einer Anzahl separater Anweisungen zu erledigen sind, umso besser. Eine häufig verwendete Vorgehensweise zur Verbesserang der Funktionalität und Leistung einer Verarbeitungseinheit besteht darin, bestimmte wiederholt auftretende Aufgaben, deren Duichführung in der Software eher lästig wäre, hardwareseitig zu implementieren. Diese einfachen Aufgaben (etwa Multiplikation oder die Ablehnung von Kreditanträgen) werden mithilfe eines Arrays spezialisierter Schaltungen implementiert. Sie stellen insofern praktische Erweiterungen der Architektur dar und erlauben eine zügigere und der geistigen Gesundheit zuträglichere Entwicklung von Programmen. Gleichzeitig kann das System diese Funktion aber nach wie vor in einer programmierten, flexiblen Reihenfolge ausführen. Erstaunlicherweise ist es, wenn man bei der Konstruktion eines Prozessors über die ersten paar Schritte hinaus ist, nicht immer passend, die Komplexität der Schaltungen linear zu 45
2 Mehrarbeit fällt auf erhöhen, damit die Prozessoren etwa höhere Geschwindigkeiten erzielen, effizienter arbeiten und ein besseres Feature-Set aufweisen. Sie können natürlich eine große Zahl von Schaltungen zur Durchführung aller vorstellbaren komplexen Aufgaben erstellen, die häufig durchgeführt werden müssen. Dies allerdings ist erst praktikabel, wenn eine Architektur vollständig ausgereift ist und Ihr Budget es Ihnen gestattet, weiteren Aufwand und Ressourcen in die Konstruktion eines Chips zu investieren. Zwar werden Programme auf einer solchen Plattform tatsächlich schneller ausgeführt und sind einfacher zu schreiben, aber das eigentliche Gerät ist weitaus schwieriger zu bauen, braucht rnehr Energie und könnte für den täglichen Einsatz schlichtweg zu sperrig oder zu teuer sein. Um komplexe Algorithmen wie die Division oder Fließkornrnaoperationen in einem Schritt zu verarbeiten, wird ein wahnsinnig großes Array mit vielen Gattern benötigt, die zudem vorwiegend untätig sind. 2.8.4 Aufgabenverteilung Statt den kostspieligen (und wohl auch etwas naiven) Ansatz der Konstruktion von Blöcken zur Ausführung ganzer Anweisungen in einem Schritt zu verfolgen, sollte man das Modell der Ausführung einer Anweisung je Zyklus beiseite lassen, bis man einen funktionsfähigen Aufbau und viel Zeit hat, um diesen zu optimieren. Eine bessere Möglichkeit, komplexe Funktionalitäten hardwareseitig zu implementieren, besteht darin, die Aufgabe in kleinste Bestandteile aufzuteilen und umfassende Aufgaben über mehrere Zyklen hinweg auszuführen. Bei einem solchen Mehrzyklussystem durchläuft der Prozessor eine Anzahl interner Stufen — ähnlich wie die Plus-1-Turingmaschine im obigen Beispiel. Der Prozessor führt die Daten in der korrekten Reihenfolge durch einfache Schaltungen und implementiert auf diese Weise Schritt für Schritt eine komplexe Funktionalität, die sich auf die elementaren Komponenten stützt. Statt also mit einem komplexen Gerät alle Berechnungen sofort auszuführen, könnte der Prozessor mit einer Schaltung die einzelnen Bits von 32-Bit-Ganzzahlen multiplizieren und Überträge ermitteln und dann in einem 33. Zyklus das Endergebnis erzeugen. Oder er könnte bestimmte unabhängige Vorbereitungsaufgaben dui-chführen, die der eigentlichen Operation voranschreiten. Dies würde uns von der Aufgabe entbinden, Dutzende von Schaltungen für jede Variante eines Operationscodes abhängig davon zu entwickeln, wo dieser seine Operanden abholt oder Ergebnisse speichert. Ein weiterer Vorteil dieses Ansatzes besteht darin, dass er ein effizienteres Management der Hardwareressourcen ermöglicht: Bei simplen Operanden wird ein Algorithmus variabler Komplexität schneller fertig gestellt, braucht also nur so viele Zyklen wie absolut notwendig. Man kann beispielsweise davon ausgehen, dass eine Division durch 1 weniger Zeit benötigt als eine Division durch 187.371. Eine einfach gestrickte, billige Schaltung mit maximaler Auslastung und variabler Ausführungszeit kann sehr schnell kostengünstiger sein als ein komplexes und leistungshungriges Pendant mit konstanter Ausführungszeit. Zwar versuchen einige moderne Prozessoren, innerhalb einer festen Anzahl von Zyklen immer mehr Aufgaben auszuführen, aber praktisch 46
2.8 Turing und die Komplexität von Anweisungsmengen alle davon haben einmal als Multizyklusarchitekturen ihr Dasein begonnen. Auch bei diesen großen Jungens bleibt — wie Sie gleich sehen werden — das Modell nur selten wirklich einzyklig. Zunächst aber wollen wir herausfinden, wie dieser Vorteil der Schlichtheit durch Multi- zyklusausfiihrung nach hinten losgehen kann. 2.8.5 Ausführungsstufen Eine Variante der Multizyklusausführung ist eine Methode, die eine Aufgabe nicht in eine Anzahl sich wiederholender Schritte, sondern eine Folge separater, aber universeller Vor- bereitungs- und Ausfuhnmgsstufen aufteilt. Mithilfe dieser Methode — des so genannten Stagings — steigern moderne Prozessoren ihre Leistung, ohne dass sie deswegen in gleichem Maße komplexer werden müssten. Diese Implementienmg von Ausfiihrungsstufen ist zu einem der wichtigeren Merkmale eines Prozessors geworden. Moderne Prozessoren können jede Anweisung in eine Menge weitgehend unabhängiger kleiner Schritte übersetzen. Bestimmte Schritte lassen sich rnithilfe von Universalschaltungen umsetzen, die von allen Anweisungen verwendet werden und so zur Gesamtvereinfachung beitagen. Beispielsweise kann die Schaltung, die für eine bestimmte Aufgabe vorgesehen ist (ich denke dabei sofort wieder an unseren Favoriten: die Multiplikation), universeller gestaltet und als Teil verschiedener komplexerer Anweisungen wiederverwendet werden, indem man sie von Aufgaben des universellen I/O-Handlings entbindet. Die Menge der Ausführungsstufen und Übergänge hängt von der Architektur ab, ähnelt aber normalerweise weitgehend dem in Abbildung 2.6 gezeigten Schema. Abbildung 2.6 zeigt die folgenden Stufen an: ■ Anweisung holen und dekodieren. Der Prozessor ruft eine Anweisung aus dem Speicher ab, übersetzt sie in eine rnaschinennahe Folge und entscheidet dann, wie fortzufahren ist und welche Daten an alle nachfolgenden Stufen zu übergehen sind. Die Schaltung wird für alle Operationen verwendet. ■ Operanden holen und dekodieren. Der Prozessor holt rnithilfe einer Universalschaltung Operanden für diese spezielle Anweisung aus den betreffenden Quellen (z. B. aus angegebenen internen Registern), damit die Hauptschaltung nicht alle möglichen Operandenkombinationen und Abholstrategien unterstützen muss. ■ ALU. Eine ALU (Arithmetic Logic Unit, arithmetisch-logische Einheit), die für die Dmchfühmng der betreffenden Operation — unter Umständen auch in mehreren Schritten — maßgeschneidert ist, wird aufgerufen, um eine bestimmte Rechenaufgabe auszuführen. Bei nichtaiithmetischen Anweisungen (z. B. Speicheltransfer) werden genetische oder dedizierte ALU-Schaltungen gelegentlich zur Berechnung von Quell- und Zieladressen verwendet. ■ Speicherung. Das Ergebnis wird an der Zielposition gespeichert. Bei nichtarithmeti- schen Operationen wird der Speicherinhalt zwischen zwei Positionen kopiert. 47
2 Mehrarbeit fällt auf Anweisung holen/dekodieren Operand holen/dekodieren ALU-Stufe N "► Speicherung "► "► ► Anweisung 1 FERTIG Anweisung 2 FERTIG Abbildung 2.6 Ausführungsstufen von Basisanweisungen Für sich genommen mag dies lediglich als Variante der regulären Multizyklusausfuhrung und als Maßnahme zur Wiederverwendung von Schaltungen erscheinen— eine Maßnahme, die bei modernen Prozessorkonstruktionen weit verbreitet ist. Aber wie Sie noch sehen werden, ist dies auch für die Ausführungsgeschwindigkeit von allerhöchster Wichtigkeit. 2.8.6 Speicher ist nicht gleich Speicher Die Geschichte ist aber mit schlichten Schaltungen noch nicht zu Ende. Ein weiterer Vorteil des Multizyklusaufbaus besteht darin, dass die Prozessorgeschwindigkeit nicht rnehr vom Speicher beschränkt wird denn dieser ist die langsamste Komponente des Systems. Externer Speicher für Verbrauchersysteme ist erheblich langsamer als moderne Prozessoren und weist zudem eine hohe Zugriffs- und Schreiblatenz auf. Die maximale Geschwindigkeit eines Einzelzyklusprozessors wird dadurch festgelegt, wie schnell er zuverlässig auf Speicher zugreifen kann — und zwar auch dann, wenn er nicht fortlaufend auf Speicher zugreift. Er muss schlichtweg deswegen so langsam sein, weil eine der Einzelzyklusanweisungen, die ihm zugeführt werden, auf Speicher zugreifen könnte; und deswegen muss einfach genug Zeit hierfür eingeplant werden. Im Gegensatz dazu gestatten Multizykluskon- struktionen es dem Prozessor, sich soviel Zeit wie erforderlich zu nehmen und sogar ein paar Zyklen lang untätig zu bleiben, sofern dies notwendig sein sollte (etwa bei Speicher- I/O-Operationen); andererseits muss er mit voller Geschwindigkeit laufen, wenn er interne Berechnungen dui-chfühit. Überdies ist es bei der Verwendung von Multizyklus Systemen einfacher, speicherintensive Operationen zu beschleunigen, ohne in schnelleren Hauptspeicher investieren zu müssen. Der Flipflopaufbau, der gemeinhin als SRAM (Static RAM, statisches RAM) bezeichnet wird bietet gelinge Zugriffslatenzen und benötigt wenig Leistung. Aktuelle Ausführungen benötigen etwa 5 Nanosekunden, was dem Zyklusintervall einiger Prozessoren entspricht. Leider benötigt dieser Aufbau aber auch eine beträchtliche Anzahl von Komponenten pro Flipflop — etwa sechs Transistoren je Bit. Anders als SRAM verwendet DRAM (Dynamic RAM, dynamisches RAM), der zweite heutzutage weit verbreitete Speichertyp, zur Speicherung von Daten ein Array mit Kon- 48
2.8 Turing und die Komplexität von Anweisungsmengen densatoren. Kondensatoren jedoch neigen zur Entladung und müssen deswegen regelmäßig aufgefrischt werden. DRAM benötigt rnehr Leistung als SRAM und hat eine wesentlich höhere Zugriffs- und Andenmgslatenz (bis zu 50 Nanosekunden). Andererseits ist DRAM wesentlich billiger herzustellen als SRAM. Die Verwendung von SRAM als Hauptspeicher ist praktisch unbekannt, denn dies verbietet sich aus Kostengründen quasi von selbst. Außerdem gäbe es Probleme bei der Nutzung der sich hierdurch ergebenden Leistungssteigerung, denn in diesem Fall könnte es notwendig sein, den Speicher mit beinahe derselben Geschwindigkeit wie die CPU zu betreiben. Unerfreulich: Weil Hauptspeicher ziemlich groß ist und zudem erweiterbar sein soll, muss er außerhalb des Prozessors positioniert werden. Der Prozessorkem kann zwar normalerweise mit einer Geschwindigkeit laufen, die wesentlich höher ist als die seiner Umgebung, aber es entstehen erhebliche Probleme mit der Zuverlässigkeit, wenn die Daten über größere Stecken transportiert werden müssen: Leiterbahnkapazität auf der Hauptplatine, Störungen, Kosten für sehr schnelle Peripheriechips usw. Statt nun die aufgrund der Kosten inakzeptablen Ansätze der Verwendung schnelleren Speichers oder der Integration des gesamten Speichers auf der CPU zu verfolgen, gehen die Hersteller in der Regel einen vernünftigeren Weg. Fortschrittliche Prozessoren sind mit schnellem, aber erheblich kleinerem Speicher im Kern ausgestattet. Hierbei wird meist SRAM oder ein Derivat verwendet, welches zur Zwischenspeichemng der meistbenutzten Speicherregionen und manchmal auch zur Speicherang bestimmter CPU-spezifischer Zusatzdaten verwendet wird. Wann immer also ein Speichersegment im Cache gefunden wird (Cacheteffer), kann auf dieses sehr schnell zugegriffen werden. Nur dann, wenn ein Speichersegment aus dem Hauptspeicher geholt werden muss (Cachefehlschlag), kann es zu einer beträchtlichen Verzögerang kommen; in diesem Fall muss der Prozessor einige seiner Operationen eine Zeit lang verschieben. (Einzelzyklusprozessoren können das interne Caching nicht vollständig ausnutzen.) 2.8.7 Mehr desselben: Pipelining Wie bereits erwähnt, bietet das Staging einen beträchtlichen Geschwindigkeitsvorteil, der weit über einen traditionellen Multizyklusansatz hinausgeht. Es gibt allerdings einen wesentlichen Unterschied zwischen diesen Methoden: Da viele Stufen von verschiedenen Anweisungen gemeinsam verwendet werden, gibt es keinen Gnmd, die Ausführung nicht ein wenig zu optimieren. Abbildung 2.6 zeigt, dass, wenn separate Stufen auch separat ausgeführt werden, bei jedem Zyklus nur ein bestimmter Teil des Geräts benutzt wird. Auch wenn die Anweisung, die gerade ausgeführt wird, die ersten Stufen bereits passiert hat, blockiert sie bis zu ihrem Abschluss doch die gesamte CPU. Bei Systemen mit einer großen Zahl von Ausführungsstufen (ihre Anzahl en-eicht oder überschreitet bei modernen Chips häufig einen Wert von 10; beim Pentium 4 sind es sogar rnehr als 20) fühlt dies zu einer irrsinnigen Verschwendung von Rechenleistung. 49
2 Mehrarbeit fällt auf Eine Lösung besteht darin, die nächste Anweisung bereits in die Ausführangs-Pipeline einzuspeisen, sobald die vorherige Anweisung zu nächsten Stufe fortgeschritten ist (siehe Abbildung 2.7). Sobald eine bestimmte Stufe der ersten Anweisung abgeschlossen ist und die Ausführung zur nächsten Stufe fortschreitet, wird der vorherigen Stufe bereits ein Teil der nachfolgenden Anweisung zugeführt. Wenn die erste Anweisung abgeschlossen ist, ist die nächste nur eine Stufe vom Abschluss entfernt, die übernächste zwei Stufen usw. Die Ausführungsdauer verringert sich dadurch ausgesprochen drastisch, und die Chipnutzung wird durch diese Kaskadierungsrnethode optimiert. Dieses Pipelining funktioniert wunderbar, solange die Anweisungen nicht voneinander abhängen und keine die Ausgabe eines Vorgängers verarbeitet, der sich noch in der Pipeline befindet. Sollten die Anweisungen jedoch aufeinander aufbauen, dann sind erhebliche Probleme vorprogrammiert. Insofern muss eine Spezialschaltung implementiert werden, die die Pipeline überwacht und derartige Blockiersituationen verhindert. Das Pipelining stellt aber noch mehr Herausforderungen. So kann sich bei einigen Prozessoren etwa die Menge der Stufen bei verschiedenen Operationen unterscheiden. Nicht alle Stufen sind immer anwendbar, und es kann sogar vorteilhaft sein, eine oder mehrere zu überspringen. Bestimmte einfache Operationen können die Pipeline begreiflicherweise wesentlich schneller durchlaufen, weil keine Operanden geholt oder gespeichert werden müssen. Femer können einige Stufen unterschiedlich viele Zyklen benötigen, was zum Kollisionsrisiko beiträgt, wenn zwei Anweisungen gleichzeitig dieselbe Ausführangsstufe erreichen. Um dies zu verhindern, müssen bestimmte Zusatzmechanisrnen wie Pipeline- Bubbles entwickelt werden: operationsfreie Stufen, deren Zweck darin besteht, bei Bedarf flüchtige Verzögerungen einzubringen. Anweisung holen/dekodieren Operand holen/dekodieren tfc w F 1 P ALU-Stufe h ► 1 w Speicherung k p- Anweis FERTK P* Anweisung 2 FERTIG Abbildung 2.7 Pipeline-Ausführungsmodell 2.8.8 Das große Problem beim Pipelining Traditionelle Pipelines sind hervorragend, um mit einem einfachen, mehrstufigen Chipaufbau eine hohe Leistung zu erzielen, indem die Latenz nachfolgender Anweisungen verringert und eine optimale Schaltungsnutzung gewährleistet wird. Allerdings sind sie auch nicht ohne Prob lerne: Es ist beispielsweise nicht möglich, Anweisungen in einer Pipeline 50
2.9 Auswirkungen - die kleinen Unterschiede über eine Bedingungsanweisung mit Verzweigungen hinaus zu transportieren, wenn diese Anweisung die weitere Rograrnrnausführang ändern könnte. Tatsächlich ist dies häufig möglich, aber der Prozessor weiß natürlich nicht, welchem Aus- führiingspfad er folgen soll; wird eine falsche Entscheidung gefällt, dann muss die gesamte Pipeline geleert werden, sobald eine Verzweigungsanweisung auftritt. (Die CPU muss auch das Festschreiben von Änderungen verzögern, die von diesen Anweisungen vorgenommen wurden, denn schließlich wurden die Anweisungen nicht ausgefühlt.) Durch das Entleeren der Pipeline kommt es zu einer weiteren Verzögerung. Und unglücklicherweise (zumindest für diesen Aufbau) sind viele prozessorintensive Aufgaben — darunter etwa viele Video- und Audioalgorithmen — auf kleine Bedingungsschlei- fen angewiesen, die millionenfach wiederholt werden und sich auf diese Weise katastrophal auf die Pipeline-Architektur auswirken. Die Antwort auf dieses Problern ist die Verzweigungsprognose. Hierfür verwendete Verzweigungsprädiktoren sind meistens ziemlich einfach gestrickte Zählerschaltungen, die die aktuelle Codeausführang überwachen und rnithilfe eines kleinen Verlaufspuffers das wahrscheinliche Ergebnis einer konditionalen Verzweigungsoperation vorherzusagen versuchen (auch wenn häufig komplexere Entwürfe zum Einsatz kommen0). Alle Verzweigungsprädiktoren verwenden eine Strategie, die für einen gegebenen Code die optimale Pipelining-Leistung ermöglichen soll: Wenn eine bestimmte Verzweigungsanweisung häufiger ausgeführt wird, ist es besser, die Anweisungen zu holen und in der Pipeline zu transportieren. Natürlich kann die Prognose fehlschlagen; in diesem Fall muss die gesamte Warteschlange verworfen werden. Allerdings erzielen moderne Prädiktoren Erfolgsraten von bis zu 90 Prozent bei konventionellem Code. 2.9 Auswirkungen - die kleinen Unterschiede Die hochentwickelten Optimierungen, die in modernen Prozessoren implementiert sind, haben eine Reihe interessanter Auswirkungen zur Folge. Wir stellen fest, dass die Ausfiih- mngszeiten von den folgenden Merkmalen abhängen, die sich in drei Gruppen aufteilen lassen: ■ Konstruktionstyp und Operationskomplexität. Es gibt Operationen, die wesentlich schneller ausgeführt werden als andere. ■ Operandenwerte. Bestimmte Multizyklenalgorithmen arbeiten umso schneller, je einfacher die Eingabewerte sind. Die Multiplikation eines Wertes mit 0 ist generell ziemlich trivial und erfolgt daher sehr zügig. ■ Speicherposition, von der die für die Anweisung erforderlichen Daten abgerufen werden. Daten im Cache sind schneller verfugbar. 6 Mile02
2 Mehrarbeit fällt auf Die Wichtigkeit, Verbreitung und Auswirkung jeder dieser Eigenschaften hängt vom exakten Aussehen der fraglichen Prozessorarchitektur ab. Das erste Merkmal — variable Ausfuhrungszeiten für Anweisungen — ist allen MultizyMusarchitekturen gemein, aber unter Umständen bei einigen einfach gestrickten Chips nicht vorhanden. Die zweite Eigenschaft — die Abhängigkeit von Operanden— stirbt bei den Spitzenprozessoren zunehmend aus. Bei den Geräten der Oberklasse arbeiten ALU- und FPU-Komponenten (Floating Point Unit, Fheßkominaeinheit) manchmal mit einer Geschwindigkeit, die höher ist als die der CPU selbst. Insofern können Unterschiede in der Rechengeschwindigkeit — sofern sie denn überhaupt vorhanden sind — nicht exakt gemessen werden, weil ein Großteil der Berechnung während eines einzigen Prozessortaktes erfolgt. Die letzte Gruppe der Ablaufparameter — die Abhängigkeit von der Speicherposition — ist im Gegensatz zum vorherigen Punkt nur bei modernen Hochleistungscomputern vorhanden und bei Mittelklassecontrollem und diversen eingebetteten Konstruktionen unbekannt. Die ersten beiden Gruppen — die Abhängigkeit von der Operationskomplexität und vom Operandenwert — können sich auch auf einer Ebene äußern, die knapp über der CPU steht: der Software. Prozessoren enthalten Rechenwerke, die mit relativ kleinen ganzen Zahlen (zwischen 8 und 128 Bits) und einigen Fließkornmazahlen normalerweise problemlos klarkommen; moderne Kryptografie und viele andere Anwendungen erfordern aber die Manipulation sehr großer Zahlen mit häufig Hunderten oder Tausenden von Stellen, hochpräzisen Fließkominazahlen oder verschiedenen mathematischen Operationen, die hardwaresei- tig nicht implementiert sind. Aufgrund dessen wird diese Funktionalität in der Regel in Softwarebibliotheken implementiert. Die Algorithmen in diesen Bibliotheken wiederum benötigen mit hoher Wahrscheinlichkeit abhängig von den Charakteristika der Operation und der Operanden unterschiedlich viel Zeit zur Verarbeitung. 2.9.1 Mit Ablauf mustern Daten rekonstruieren Es gibt Gründe, die dafür sprechen, dass ein Angreifer verschiedene Eigenschaften der Operanden oder einer durchgeführten Operation erschließen könnte, indem er überwacht, wie lange ein Programm zur Verarbeitung von Daten benötigt. Hierdurch entsteht ein potenzielles Sicherheitsrisiko, weil in verschiedenen Szenarien zumindest einer der Operanden ein geheimer Wert sein kann, der Dritten keinesfalls bekannt werden darf. Zwar mag die Idee der Rekonstruktion von Daten durch jemanden, der mit der Stoppuhr in der Hand neben Ihnen steht, bizarr anmuten, aber moderne Prozessoren enthalten präzise Zähler, die es dem Kundigen gestatten, exakte Zeitabstände zu bestimmen. Natürlich können einige Operationen auch beträchtlich zeitaufwändiger sein: Die Ausfuhrung bestimmter komplexer Operationscodes auf der Intel-Plattform kann mehrere Tausend Zyklen benötigen. Angesichts der kontinuierlichen Zunahme des Netzwerkdurchsatzes und immer schnelleren Reaktionszeiten ist es aber noch nicht einmal völlig unmöglich, diese Informationen von einem Remote-System aus zu ermitteln. Das Wesen der Daten, die als Maß für die Rechenkomplexität verwendet werden können, ist möglicherweise nicht auf den ersten Blick erkennbar. Für diejenigen unter Ihnen, denen 52
2.9 Auswirkungen - die kleinen Unterschiede es genau so geht, hat Paul Kocher von Cryptography Research bereits im letzten Jahrtausend (genauer gesagt, in den Neunzigern7) ein großartiges Beispiel für einen solchen Angriff gebracht. Hierbei kam der RSA-Algorithmus zur Anwendung, den wir bereits in Kapitel 1 beschrieben haben. 2.9.2 Bit für Bit... Kocher beobachtete, dass der Vorgang der Entschlüsselung von Daten im RSA- Algorithmus relativ simpel ist und auf der Auflösung der folgenden Gleichung basiert: T=ckmodM Hierbei ist T die entschlüsselte Nachricht, c die verschlüsselte Nachricht, k der Geheimschlüssel und Mein Modulo, der Teil eines Schlüsselpaares ist. Ein einfacher ganzzahliger Modulopotenzierungsalgorithmus, der in einer typischen Implementierung eingesetzt wird, hat eine ganz wichtige Eigenschaft: Wenn ein bestimmtes Bit des Exponenten 1 ist, wird ein Teil des Ergebnisses berechnet, indem eine Modulomultiplikation an einem Teil der Basis (d. h. einigen Bits von c) durchgeführt wird. Ist das Bit 0, dann wird dieser Schritt übergangen. Und auch wenn der Schritt nicht übergangen wird, variiert — wie bereits erwähnt — die Zeit, die die Software zur Ausführung der Multiplikation benötigt. Die meisten einfachen Fälle — wie etwa die Multiplikation mit einer Zweierpotenz — werden schneller gelöst als andere. Aufgrund dessen ist es bei einem solchen System offensichtlich möglich, eine Menge Angaben zum Schlüssel (k) zu bestimmen, indem man wiederholt überprüft, wie lange das Entschlüsseln einer Information dauert. Auch auf Plattformen, auf denen die Hardware- rnultiplikation eine feste Zeit benötigt, ergibt sich ein Ablaufmuster häufig aus der Verwendung softwareseitig implementierter Multiplikationsalgorithmen (wie dem Karatsuba- Algorithmus), die zur Verarbeitung großer Zahlen benötigt werden — Zahlen, wie sie bei der Kryptografie mit öffentlichen Schlüsseln verwendet werden. Nachfolgende Bits des Exponenten bilden den privaten Schlüssel, während die Basis eine Darstellung der Nachricht ist, die gesendet wurde bzw. für den neugierigen Zuschauer sichtbar ist. Der Angriff ist vergleichsweise simpel: Der Übeltäter sendet dem Opfer zwei ähnliche, aber doch leicht unterschiedliche Segmente verschlüsselter Daten. Diese unterscheiden sich in einem Abschnitt X, d. h. die Entschlüsselung dieses Bereichs benötigt jeweils unterschiedlich viel Zeit. Eine der Varianten von X ist, was die Vorstellung des Bösewichts von der Implementierung der Modulomultiplikation aufseiten des Opfers betrifft, ein ganz einfacher Fall, was eine schnelle Entschlüsselung von X gestatten würde. Die zweite Variante wird rnehr Zeit benötigen. Wenn das Opfer zum Entschlüsseln und Beantworten der beiden Folgen dieselbe Zeit benötigt, dann kann der Angreifer sicher davon ausgehen, dass der Teil des Schlüssels, der zur Dekodierang des Bereichs X verwendet wurde, aus Nullen besteht. Überdies kann er Koch99
2 Mehrarbeit fällt auf voraussetzen, dass der Multiplikationsalgorithmus die naheliegendste Optimierung vorgenommen hat (nämlich die, überhaupt keine Multiplikation durchzuführen). Benötigt jedoch einer der Fälle mehr Zeit, dann ist offensichtlich, dass in beiden Fällen eine Multiplikation durchgeführt wurde, wobei einer der Fälle einfacher zu lösen war. Der entsprechende Teil des Geheirnschlüsselbits muss also ein Wert ungleich 0 sein. Indem man diese Methode einsetzt — nämlich aufeinanderfolgende Bits der verschlüsselten Nachlicht als ,3ereich X" zu setzen und dann einfach verschlüsselte Nachlichten, die in diesem Szenario funktionieren, zu erzeugen oder (sofern genug Zeit vorhanden ist) auf diese zu waiten—, ist es möglich, jedes Bit des Schlüssels zu rekonstruieren. ■ Hinweis Forschungen geben Grund zu der Annahme, dass dieser Ansatz sich erfolgreich auf praktisch jeden Algorithmus anwenden lässt, der in einer variablen Zeit ausgeführt wird, und beschreiben einige praktische Optimierungen für den Angriff, z. B. die Möglichkeit der Nutzung einer eingeschränkten Fehlererkennungs- und -koiTekturfunktionalität. 2.10 In der Praxis Die Möglichkeit, greifbare Eigenschaften von Operanden für Rechenanweisungen allein auf der Basis von Zeitangaben abzuleiten, ist der offensichtlichste, effizienteste und interessanteste Vektor für die Dui-chführung rechenkomplexitätsbasierter Angriffe. Andere Methoden wie die Abläufe bei Cachetreffern und -fehlschlagen erfordern normalerweise eine wesentlich detailliertere Analyse und offenbaren in jedem Zyklus weniger Informationen. Es ist klar, dass dieses Problem bis zu einem gewissen Grad viele Sofrwarealgorithmen betreffen würde, z. B. Berechnungsbibliotheken für große Zahlen, wie sie in Kryptografie- anwendungen häufig zum Einsatz kommen. Wenn man aber Sofrwarealgorithmen und die gesamte Theorie beiseite lässt, dann stellen sich nach wie vor ein paar wichtige Fragen: Wie real ist die Abhängigkeit von der Ausführungszeit auf der Hardwareebene, und wie kann sie gemessen werden? Ein Beispiel haben wir zur Hand: Zumindest ein Teil der IA32-Architektur von Intel legt dieses Verhalten an den Tag. Das 80386 Pi'ogrammer's Reference Manual8 beschreibt unter der Kurzbezeichnung IMUL einen Operations code für die Multiplikation vorzeichenbehafteter Integer-Zahlen. In seiner Giirndform multipliziert der Operations code den im Akkumulator (einem Mehizweckarbeitsregister, das auf dieser Plattform den Namen [E]AX hat) vorhandenen Wert mit einem Wert, der in einem anderen Register gespeichert ist. Das Ergebnis wird dann wieder in den Akkumulator zurückgespeichert. Die Dokumentation fährt fort: Inte86 54
2.10 In der Praxis Der 80386 verwendet einen Early-Out-Multiplikationsalgorithmus. Die tatsächliche Zahl der Takte hängt von der Position des höchstwertigen Bits im optimierenden Multiplikator ab. (...) Die Optimierung erfolgt gleichermaßen für positive und negative Werte. Aufgrund des Early-Out-AIgorithmus sind die angegebenen Taktzahlen Minimal- bzw. Maximalwerte. Um die eigentlichen Takte zu berechnen, verwenden Sie die folgende Formel: Tatsächliche Taktung bei m # 0: Maximum(Grenzwei"t(log2(m)), 3) + 6 Takte Tatsächliche Taktung bei m = 0:9 Takte Das mag kryptisch klingen, die Bedeutung ist aber ganz einfach: Der Prozessor optimiert die Multiplikation basierend auf dem Wert des Multiplikators. Statt den Multiplikanden zu vervielfachen, bis alle Bits des Multiplikators aufgebraucht sind, Uberspiingt er Nullen am Anfang des Operanden. 2.10.1 Early-Out-Optimierung Um die Bedeutung dieser Vorgehensweise bei der Multiplikation ganzer Zahlen nachzu- vollziehen, stellen Sie sich eine traditionelle iterative Multiplikationsmethode vor, wie auch Sie sie in der Schule gelernt haben — diesmal allerdings im Binärformat. Eine hypothetische „stumme" Implementierung dieses Algorithmus fühlt die folgenden Operationen durch. 00000000 00000000 11001010 11111110 Multiplikand (P) 00000000 00000000 00000000 00000110 Multiplikator (R) 00000000 00000000 00000000 00000000 00000000 00000000 + 0 00000000 00000000 00000001 00000011 00000000 00000000 00000000 00000100 00000000 10010101 00101011 00000000 00000000 00000000 11000001 00000000 1111110 111110 00000 0000 000 11110100 p p p p p p p * * * * * * * R[0] = P * R[l] = P * R[2] = P * R[3] = P * R[4] = P * R[5] = P * R[31] = P ' 0 1 1 0 0 0 ■r Es sollte offensichtlich sein, dass eine große Zahl dieser Operationen absolut unnötig und ungerechtfeitigt ist und dass die Fortsetzung einer Operation schlichtweg sinnlos ist, wenn alle nachfolgenden Bits des Multiplikators Nullen sind. Ein sinnvollerer Ansatz besteht mithin darin, sie zu übergehen: 00000000 00000000 11001010 11111110 Multiplikand (P) 00000000 00000000 00000000 00000110 Multiplikator (R) - optimiert 00000000 00000000 00000000 00000000 P * R[0] = P * 0 00000000 00000001 10010101 1111110 P * R[l] = P * 1 00000000 00000011 00101011 111110 P * R[2] = P * 1 ... Schluss jetzt - führende Nullen bei R werden ignoriert! 00000000 00000100 11000001 11110100 55
2 Mehrarbeit fällt auf Und dies ist im Wesentlichen die Veranlagung der Earfy-Out-Optimierung (d. h. Optimierung durch frühzeitige Beendigung), die Intel verwendet hat. ■ Hinweis Diese Optimierung macht die Multiplikation zeitlich unsymmetrisch: 2-100 wird weniger schnell berechnet als 100 - 2 (!), obwohl das Ergebnis dasselbe ist. Durch die Early-Out-Optimierung benötigen Intel-Prozessoren eine variable Anzahl von Zyklen zur Dui-chfuhrung von Multiplikationen. Die Dauer ist direkt proportional zur Position des ältesten (höchstweitigen) Bits, das im zweiten Operanden gesetzt ist. Durch Anwendung des Taktzählungsalgorithmus aus der Dokumentation kann man die Wechselbeziehung zwischen dem Multiplikator und der IMUL-Zeit ermitteln. Die folgende Tabelle verschaulicht dies. Tabelle 2.8 Korrelation zwischen Multiplikator und IMUL-Zyklen Wertebereich des Multiplikators 0-7 8-15 16-31 32-63 64-127 128-255 256-1.023 1.024-2.047 2.048-4.095 4.096-8.191 8.192-16.383 16.384-32.767 32.768 - 65.535 65.536-131.071 131.072-262.143 262.144-524.287 524.288-1.048.575 1.048.576-2.097.151 2.097.152-4.194.303 4.194.304-8.388.607 8.388.608-16.777.215 16.777.216-33.554.431 Anzahl erforderlicher Zyklen 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
2.10 In der Praxis 33.554.432-67.108.863 67.108.864 -134.217.727 134.217.728 - 268.435.455 268.435.456 - 536.870.911 536.870.912-1.073.741.823 1.073.741.824 - 2.147.483.647 31 32 33 34 35 36 Eine ähnliche Abhängigkeit besteht bei negativen Multiplikatorwerten. 2.10.2 Funktionierender Code - selbstgemacht Das folgende Codelisting zeigt eine praktische Irnplernentierung in C für Unix-Systeme und -Derivate und kann zur Enmttlung und Messung von Unterschieden in Ablaufmustern verwendet werden. Das Programm wird mit zwei Parametern aufgerufen: dem Multiplikanden (der eigentlich keine Auswirkungen auf die Leistung haben sollte) und dem Multiplikatoren (der wahrscheinlich bei Early-Out-Optimierungen verwendet wird und sich daher auf die Geschwindigkeit der gesamten Operation auswirkt). Das Programm fühlt 256 Tests von 500 aufeinanderfolgenden Multiplikationen mit den gewählten Parametern durch und gibt die kürzeste gemessene Zeit zurück. Wir führen 256 Tests durch und wählen das beste Ergebnis aus, um Fälle auszugleichen, in denen die Ausführung vom System für eine gewisse Zeit unterbrochen wird — dies kommt in Multitasking-Umgebungen relativ häufig vor. Nun kann ein einzelner Test von einem solchen Vorfall beeinträchtigt werden, aber zumindest einige in einer Folge aufeinanderfolgender Tests werden mit hoher Wahrscheinlichkeit ohne Unterbrechung durchgeführt. Der Code verwendet die Systemuhr, um die Ausführungsdauer in Mikrosekunden zu messen. ■ Hinweis Mehrere moderne Intel-Chips verfügen über einen präzisen Zeitgabeinechanisinus, der über den Operationscode RDTSC verfügbar ist. Diese Methode des Zugriffs auf den internen Taktzyklenzähler ist auf älteren Plattformen nicht vorhanden, weswegen wir sie hier außer Acht lassen. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/time.h> #include <limits.h> int main(int argc,char** argv) { int Shortest = INT_MRX; int i,p,r; if (arge != 3) { printf("Usage: %s multiplicand multiplier\n",argv[0]); exit (1) ; 57
2 Mehrarbeit fällt auf */ p=atoi (argv[l] ) ; r=atoi (argv[2] ) ; for (i=0;i<25S;i++) { int ct; struct timeval s; struct timeval e; gettimeofday(&s,NULL); asm( " movl $500,%%ecx \n" "imul_loop: \n" " movl %%esi,%%eax \n" " movl %%edi,%%edx \n" " imul %%edx,%%eax \n" loop imul_loop "ax' (p), »D" , "ex", (r) 'dx" \n" gettimeofday(&e,NULL); et ( .tv_usec .tv sec - - s.tv_usec s.tv sec ) /* Schleifenwiederholungszähler (R) */ /* Beim 1. Durchlauf auskommentieren * 1000000; if (et < shortest) shortest = ct; printf ("T[%d,%d] return 0; %d usec\n",p,r,shortest) } Indem wir den Code mit anfangs auskornmentierter IMUL-Anweisung kompilieren und das Programm mit wülkürlichen Parametern aufrufen, können wir den Verwaltungsaufwand des Zeitnahmecodes (TIdle) veranschlagen. Liegt dieser Wert außerhalb des Bereichs zwischen 10 und 100 Mikrosekunden (was groß genug ist, um beim Auslesen eine feine Abstufung zu ermöglichen, aber niedrig genug, um die Chance zu maximieren, dass keine Unterbrechung durch das Betriebssystern erfolgt), dann stellen Sie den Schleifenwiederholungszähler R, der standardmäßig auf 500 gesetzt ist, neu ein. Nach der Wiederherstellung der IMUL-Anweisung und der Neukornpilierung und Ausführung des Programms mit einem gewählten Multiplikanden D und dem Wiederholungszähler R ist es möghch, den zurückgegebenen Zeitnäherungswert TDR zur Veranschlagung der Prozessorzyklen CDR zu verwenden, die für die IMUL-Operation erforderlich waren, sofern die Betriebsfrequenz des Prozessors (FMHz) bekannt ist: Cd, r = (Td, r — THle) ■ r^^^ — R Erwartungsgemäß tagen bei neueren und anspruchsvolleren Chips Pipelining und Verzweigungsprognosen ihren Teil bei und verzerren das Ergebnis leicht, aber für eine brauchbare Schätzung ist es allemal ausreichend. 58
2.11 Vorbeugung Hinweis ■ Bei neueren Intel-Prozessoren ist die Zeit, die zur Durchführung einer Multiplikation erforderlich ist, bereits konstant. 2.11 Vorbeugung Es gibt eine Reihe von Methoden, um sich gegen die Analyse der Rechenleistung zu schützen. Die offensichtlichste Lösung besteht darin, dafür zu sorgen, dass die Ausführung aller Operationen die gleiche Zeit benötigt. Allerdings ist dies schwierig und fühlt häufig zu schweren Leistungseinbußen, weil alle Berechnungen derart verlängert werden rnüssten, dass sie in ihrer Dauer der langsamsten Operation entsprechen. Das Ergänzen zufälliger Verzögerungen scheint eine annehmbare Verteidigungstaktik für Anwendungen zu sein, sofern die Latenz unkritisch ist. Dies würde insbesondere nichtinteraktive Netzwerkdienste betreffen und fühlt zu einer Verringerung der Prozessorbelastung. Allerdings lässt sich dieses Zufallsrauschen effizient ausfiltern, wenn der Angriff wiederholt ausgeführt werfen kann. Ein weiterer Ansatz — das so genannte Blinding — basiert darauf, dass man eine gewisse Menge Rauschen im System selbst erzeugt, indem man zufällige oder auf andere Weise unechte Daten mit der tatsächlichen Eingabe des Algorithmus kombiniert, um es dem Angreifer auch bei einer Anfälligkeit des VerschlUsselungsalgorithmus gegenüber Tirning- Angriffen unmöglich zu machen, sinnvolle Eigenschaften der Eingabe abzuleiten. Danach werden die überflüssigen Daten, die wird gar nicht verschicken wollen, entfemt. Zwar ist die Leistungseinbuße in diesem Fall wesentlich geringer, aber es ist schwierig, das Blinding gut zu implementieren. 2.12 Denkanstöße Das war eine sehr erschöpfende Beschreibung — ich hoffe, Sie fanden es lehrreich. Wie üblich, beende ich das Kapitel mit einigen Fragen und Problemen, die Sie unter Umständen recht interessant finden. ■ Zwar habe ich mich vorwiegend auf die Auswirkungen von auf der Rechenkomplexität basierenden Angriffen auf kryptografiespezifische Anwendungen konzentriert, aber das Problem ist nicht auf diesen Bereich beschränkt, sondern äußert sich überall dort, wo persönliche oder vertrauliche Daten verarbeitet werden. Es lassen sich bestimmt verschiedene grundlegende Angaben zu HTTP-Anfordenmgen oder SMTP-Traffic erschließen, indem man den entsprechenden Dienst auf einem System sorgfältig beobachtet. Können Sie sich weitere praktische Anwendungen vorstellen? ■ Auch wenn die Daten, die von einem Dienst verarbeitet werden, nicht geheim sind, können Angaben zur Rechenkomplexität von gewissem Nutzen sein. Betrachten wir 59
2 Mehrarbeit fällt auf etwa Anwendungen wie Netzwerk-Daernons, die die Offenlegung von Geheimnissen verhindern, indem sie Fehler- und Erfolgsmeldungen unter Umständen übermäßig universeller Natur erzeugen. Dies soll es unter anderem einem Angreifer möglichst schwer machen, herauszufinden, ob eine Anmeldung aufgrund eines falsch geschriebenen Passworts oder aber deswegen fehlgeschlagen ist, weil der Benutzer gar nicht existiert. Allerdings kann der gewiefte Beobachter aus der Zeit, die benötigt wurde, um die Meldung zu senden, erschließen, welcher Pfad im Code tatsächlich ausgefühlt wurde und ob der Fehler gleich am Anfang (bei der Prüfung auf einen korrekten Benutzernamen) oder erst später (bei der Überprüfung des Passworts) erfolgte. Experimentieren Sie mit den konventionellen Netzwerkdiensten wie SSH, POP3 und Telnet, um festzustellen, ob es rnessbare und konsistente Unterschiede gibt. ■ Wie üblich neigen auch die besten Verteidigungsmaßnahmen gegen die Enthüllung von Informationen dazu, im unerwarteten Moment zu versagen. Außerdem ist die rechentechnische Komplexität nicht die einzige Möglichkeit zu ermitteln, was in einem Siliziumchip vor sich geht. Befrachten wir etwa folgendes Beispiel: Biham und Shainir9 haben ein brillantes System zum Knacken „sicherer" Chips entwickelt, die in Smartcards verwendet werden. Zweck von Smartcards ist die sichere Speicherung von Daten — z. B. persönlichen Geheimzahlen oder kryptografischen Schlüsseln —, die nur bestimmten Authentifizieningsdiensten und vertrauenswürdigen Clients preisgegeben werden dürfen. Wie sich herausstellte, kann man die Eigenschaften der geschützten Daten oder den Schutzmechanismus erschließen, indem man das Gerät rnissbraucht und Fehler durch mechanische Belastung, energiereiche Strahlung, Überhitzung oder ähnliche externe Faktoren hervorruft, die zu einem Fehlverhalten beim Gerät führen. Ich meine, das sollten Sie wissen. 9 Biha96 60
3 Die zehn Häupter der Hydra Drittes Kapitel. In welchem wir weitere reizende Abläufe kennen lernen werden, die zu einem sehr frühen Zeitpunkt im Kommunikationsprozess auftreten In den Kapiteln 1 und 2 haben ich zwei getrennte Datenenthülhingsszenarien beschrieben, die auftreten können, weil Versuche, die Funktionalität des Computers zu erweitern bzw. seine Wartung zu vereinfachen, zwar brillant ersonnen, aber letztendlich doch nur unzureichend zu Ende gedacht wurden. Die passive Schnüffelei ermöglichenden Vektoren, die durch diese strukturellen Entscheidungen erschlossen werden, sind tief unterhalb der eigentlichen Implementierung verborgen und gewähren faszinierende Einblicke in die frühesten Bedrohungen für verarbeitete Daten. Andererseits ist das Risiko naturgemäß auf die physische oder logische Nähe zur überwachten Umgebung beschränkt. Zwar gibt es bereits sehr früh auf dem Weg eines Datensegments eine praktisch unendliche Anzahl von Möglichkeiten, Daten zu enthüllen, ich habe aber beschlossen, diese beiden Fälle herauszustreichen - wegen ihrer Einzigartigkeit, ihrer Schönheit und der relativen Leichtigkeit, mit der ein entschlossener Angreifer eine Attacke ausführen kann. Doch auch die übrigen Szenarien sind der Erwähnung wert, weswegen ich in diesem Kapitel einige der interessanteren Möghchkeiten anreißen will, die zwar keine umfassende Beschreibung rechtfertigen, Sie aber unter Umständen als Gegenstand einer eigenen, weitergehenden Analyse interessieren könnten. 3.1 Aufschlussreiche TV-Ausstrahlung In den Fünfzigerjahren des letzten Jahrhunderts erkannte die Wissenschaft, dass elektromagnetische Strahlen häufig geeignet sind, Informationen zum Verhalten des abstrahlenden Geräts ganz einfach wiederherzustellen oder zu rekonstruieren. Bei diesen Strahlen 61
3 Die zehn Häupter der Hydra handelt es sich um unerwünschte Störungen, die von praktisch allen elektronischen, elek- troHiechanischen und elektrischen Geräten ungeachtet ihrer Konstruktion und des vorgesehenen Zwecks erzeugt werden und sich über Stiomleitungen oder die Luft - häufig über beträchtliche Entfernungen hinweg - ausbreiten. Zuvor war man der Ansicht gewesen, dass das Problem der elektromagnetischen Strahlung aufgrund des Risikos unvorhergesehener Störungen zwischen gesonderten Geräten oder Schaltungen zwar durchaus für die Technik als solche relevant sei, dass sie aber von keinerlei Wert für Personen sei, die die vom betreffenden Gerät ausgesendeten Funkfrequenzen überwachen. Als allerdings die Welt in die Ära des Datenkriegs eintrat und elektronische Datenverarbeitungs- und Telekommunikationsgeräte immer weiter entwickelt und zunehmend (auch für die Übertragung oder Speicherung vertraulicher oder sensibler Daten) eingesetzt wuiden, bereitete den Herrschenden der freien Welt (und auch der nicht ganz so freien Welt) die Folgerung, dass ein entfernter Beobachter einen Teil der von einem System verarbeiteten Daten rekonstruieren könnte, indem er einfach eine bestimmte Frequenz abhört, erhebliche Kopfschmerzen. Der Begriff TEMPEST (Transient Electrornagnetic Pulse Emanation Standard) stammt aus einer Geheimstudie zur elektroHiagnetischen Emission, die das amerikanische Militär in den Sechzigerjahren erstellt hat, und wurde ursprünglich als Bezeichnung für eine Sammlung von Maßnahmen verwendet, mit denen die Enthüllung von Emissionen elektrischer Schaltungen verhindert werden sollte, die sensible Daten bearbeiteten. Später wurde daraus dann ein Schlagwort zur Beschreibung einer allgemeinen Klasse von Problemen und Methoden, die mit dem Abfangen und Rekonstruieren von Funkfrequenzernissionen in Zusammenhang stehen. Zwar klang diese Gefährdung in den Ohren der Skeptiker anfangs mehr wie der Plot eines schlechten Science-Fiction-Rornans als nach einer tatsächlichen Bedrohung, aber eine wichtige Forschungsarbeit1, die 1985 vom Wim van Eck veröffentlicht wurde, veranschaulichte, dass es relativ einfach wäre (und auch tatsächlich ist), das auf einem Röhrenmonitor angezeigte Bild durch Abfangen der Funkfrequenzsignale, die von den Hochspannungsschaltungen im Geräteinnern erzeugt werden, zu rekonstruieren. Ein normaler Röhrenrnonitor (Abbildung 3.1) baut seine Anzeige auf, indem er Zeile für Zeile jeden Punkt des Bildes nacheinander mit sehr hoher Geschwindigkeit ansteuert und die Signalstärke abhängig von der Position des jeweiligen Bildpunkts moduliert. Zu diesem Zweck wird ein dünner Elektronenstrahl von einer Kathode am hinteren Ende des Geräts ausgegeben. Dieser Elektronenstrahl trifft auf die Anode (eine Schicht leitfähigen Materials auf der Anzeigefläche), die dann ihrerseits Lichtphotonen aussendet, die wir sehen können. Der Elektronenstrahl wird durch eine spezielle Schaltung moduliert und zudem durch einen Satz von Elektrornagneten positioniert und kann so den gesamten Anzeigebereich von links nach rechts und von oben nach unten überstreichen - auf dem Bildschirm entsteht das Bild, welches dann kontinuierlich aktualisiert wird. Wim van Eck stellte fest, 1 Eck85 62
3.1 Aufschlussreiche TV-Ausstrahlung dass die Oszillatoren, die die Elektromagneten und die Kathodenelektronik steuern, verschiedene Arten charakteristischer Signale auf Standardfrequenzen aussenden. Es ist recht einfach, diese Signale im FunkspektmHi zu erkennen2, und jedes dieser Signale ist normalerweise deutlich und stark genug, um ein ziemlich billiges Gerät bauen und die Emissionen von Röhrengeräten auch aus relativ großer Entfernung ermitteln zu können. Abbildung 3.1 Bildabtastung beim Röhrengerät und zugehöriger Erzeugungsprozess ■ Hinweis Emissionen sind natürlich nicht auf Kathodenstrahlröhren beschränkt und kommen bei LCD- bzw. TFT-Displays und allen Computerschaltungen gleichermaßen vor. Ebenso häufig treten sie in Datenbussen auf, über die Daten zwischen separaten Chips übertragen werden. Die Reise der Daten führt dabei durch ein umfangreiches Netz auf der Hauptplatine angeordneter, relativ langer und sehr verwinkelter Leiterbahnen, die unter anderem als ausgezeichnete Antenne fungieren (auch wenn die Einfachheit der Extraktion und Interpretation eines bestimmten Signals ebenso erheblich variieren kann wie der Emissionsbereich). Zwar gibt es - abgesehen von militärischen und nachrichtendienstlichen Anwendungen (insbesondere während des Kalten Krieges3) - keine nachprüfbaren Berichte zu in freier Wildbahn ausgeführten Emissionsattacken, aber es sind ein paar Anekdoten aus dem Bereich der Industriespionage in der Fachliteratur beschrieben.4 Offenbai- hat diese Angriffsform ihre Einschränkungen: Der Angreifer muss sich in der Nähe des Ziels befinden. Femer muss er, sofern er nicht gerade analoge Röhreninonitore überwacht, mit teuren und aufwändigen Gerätschaften ausgestattet sein. Dies gilt insbesondere für die Kontrolle modemer störungsarmer Displays und aktueller Prozessoren und Bussen mit hoher Taktung. Andererseits ist die Vorbeugung gegen solche Attacken schwierig und kostspielig. Deswegen und aufgrund von Störungen durch Stromleitungen müssen Anhänger des „Naturradios", die die von der Erde erzeugten, sehr tiefen Audiofrequenzsignale belauschen wollen, mit ihrer Auf- zeichnungsausrüstung lange Wege zu völlig entlegenen Orten zurücklegen. Murp97 Schw96 63
3 Die zehn Häupter der Hydra 3.2 Datenschutz mit beschränkter Haftung Die bislang beschriebenen Risikoszenarien lassen sich als unerwünschte oder unvorhergesehene Folgen der Alt und Weise beschreiben, wie eine bestimmte Technologie entwickelt oder eingesetzt wurde. Diese Folgen sind aufgetreten, obwohl die Ziele oder Erwartungen von Entwickler und Endbenutzer identisch waren. In manchen Fällen jedoch führt die Gefährdung zu kleinen Unterschieden bei den Zielen und Erwartungen der beiden Gruppen. Zwar sind datenschutzspezifische Problerne auf Softwareebene, die der Inkompetenz oder Hinterlist des Programmierers entstammen, berüchtigt und gewöhnlich auch allgegenwärtig, aber subtilere strukturelle Probleme, die für sich genommen eigentlich keinen Mangel darstellen, treten ebenso auf. Einige der interessanteren Problemfälle in diesem Bereich fallen in die Kategorie der Datenoffenlegung in elektronischen Dokumenten. Wenn wir ein Dokument abfassen, gehen wir natürlich davon aus, dass alle Informationen, die sich nicht auf den Inhalt des Dokuments beziehen (und insbesondere Informationen, die den Urheber eindeutig identifizieren), vor Dritten, die auf das Dokument zugreifen können, verborgen werden, sofern der Autor eine Offenlegung nicht gezielt ermöglicht. Aber die Ära der Klartexteditoren ist lange vergangen. Heutzutage unterstützen Dokument- fonnate umfassende Speicherfunktionen für Metadaten. Der Zweck dieser Vorgehensweise besteht darin, Dokumente einfacher attributieren zu können, um sie nachfolgend indizieren, durchsuchen und nachverfolgen zu können. Was daran besorgniserregend ist, ist die Tatsache, dass die Entwickler solcher Autorensysteme dazu neigen, bestimmte Angaben automatisch eintragen zu lassen. Dabei hat der eigentliche Urheber des Dokuments häufig nur wenig bis gar keine Kontrolle über den Prozess - ja, er wird in der Regel noch nicht einmal darauf hingewiesen. Obwohl diese Praxis tatsächlich als ein weiterer Versuch gewertet werden kann, die Umgebung benutzerfreundlicher und (für den Benutzer) transparenter zu gestalten, sind sich nur die wenigsten der Tatsache bewusst, dass dieser Umstand weitgehend unbekannt ist. 3.2.1 Er war's, er war's, er war's! Ein bei Autorensystemen häufig auftretendes Problem besteht darin, dass bestimmte Anwendungen eindeutige Attribute (Tags) speichern, die es ermöglichen, ein Dokument seiner Quelle zuzuordnen. Dies gilt insbesondere für Microsoft Word. Hier wurde jahrelang mithilfe der Hardwareadresse der Netzwerkkalte des Computers - sofern vorhanden - eine GUID (Globally Unique Identifier, global eindeutige Kennung) in das Dokument eingetragen - unabhängig davon, ob es sich dabei um ein Kochrezept oder ein Handbuch zum Bombenbau handelte. Zwar wurde dieses Problem in den aktuelleren Versionen der Officesuite von Microsoft behoben, aber diese Praxis hatte eine Reihe interessanter Auswirkungen: ■ Jedes Gerät hat eine eindeutige Netzwerkkaitenadresse. Da Hardwareadressen zum Auffinden eines bestimmten Geräts im lokalen Netzwerk verwendet werden, ist diese Eindeutigkeit erforderlich, um Probleme zu verhindern, die entstünden, wenn zwei 64
3.2 Datenschutz mit beschränkter Haftung Computer mit derselben Hardwareadresse an dasselbe Netzwerk angeschlossen würden. Insofern kann die im GUTD-Feld eines Microsoft Word-Dokuments vorhandene Nummer zur eindeutigen Identifizierung des Autors verwendet werden - unabhängig davon, ob diese Person das Dokument anonym verfasst oder signiert hat. Dieser Umstand kann sowohl als wertvolles Werkzeug der Forensik als auch als effiziente Möglichkeit gewertet werde, in bestimmten Situationen die Meinungsfreiheit zu unterdrücken: So könnte etwa ein Boss die Attribute benutzen, um allzu gesprächige Mitarbeiter loszuwerden. ■ Hardwareadressen werden den Herstellern chargenweise zugeordnet. Ferner werden Netzwerkkalten bei der Herstellung häufig mit aufeinanderfolgenden Nummern versehen und dann en gros an Computerhersteller verkauft. Insofern kann ein verschlagener Schnüffler nicht nur ermitteln, wer eine bestimmte Karte gebaut hat, sondern auch, wer sie verkauft an - und an wen. In vielen Situationen lässt sich eine bestimmte Hardwareadresse bis zu einem bestimmten Gerät zurückverfolgen - und damit bis zu einer Privatperson oder einer Organisation. Der entschlossene Ermittler kann auf diese Weise unter Umständen die Herkunft eines bestimmten Dokuments ermitteln. ■ Da Hardwareadressen chargenweise zugewiesen werden, lassen sich unter Umständen auch Rückschlüsse auf die Hardwarekonfiguration des Systems ziehen, auf dem ein Dokument erstellt wurde. Zwar ist die hiervon ausgehende Bedrohung nur geling, kann sich aber als interessante Informationsquelle für diejenigen von uns erweisen, die leicht zum Schmunzeln zu bringen oder besonders neugierig sind. Ein Teil der Funktionalität ist dem Benutzer zwar eigentlich zugänglich, aber die Parameter sind derart tief in der Bedienoberfläche vergraben, dass ein „Normalbenutzer" keine Ahnung davon hat, was gespeichert wird und wie man die Voreinstellung ändert. Produktivitätssoftware wie Microsoft Word und OpenOfSce ist berüchtigt für das Einfügen von Angaben zum „Standardverfasser". Für diese Angaben werden normalerweise die Daten der Softwarelizenz oder aber Parameter verwendet, die bei der ersten Ausführung eingegeben wurden. Diese Daten werden dann tief in den Metadaten des Dokuments abgelegt, wo die meisten Benutzer sowieso nicht suchen würden. Obwohl dies ein recht praktisches Feature sein kann - insbesondere bei der gemeinsamen Nutzung von Dokumenten -, überwiegen die Datenschutzbedenken mögliche Vorteile für den Endbenutzer doch bei weitem. Ein anderes Beispiel ist die „benutzerfreundliche" Praxis, in das Feld „Titel" in den MetaHeadern eines Dokuments den ersten Satz des betreffenden Dokuments einzusetzen. Dies ist zwar eigentliche eine nette Idee, aber die Auswahl ist oft von Dauer, d. h. auch dann, wenn der erste Absatz später geändert wird (sodass das neue Angebot nun an eine Mitbewerber adressiert ist), lässt sich der ursprüngliche Inhalt von einem aufmerksamen Beobachter ableiten. Auch hier enthüllt das „Merkmal" rnehr, als der Autor dem Empfänger eines Dokuments zu eröffnen gedachte. Ältere Versionen von Microsoft Word speicherten Dokumente häufig auch, ohne zuvor alle Daten zu löschen, die zuvor vom Benutzer entfernt worden waren. Hierdurch stellten diese Dokumente im Endeffekt Undo-Informationen bereit und zeichneten alle vorherigen Versionen des Textes auf. Diese Informationen ließen sich im Nachhinein von jedem
3 Die zehn Häupter der Hydra halbwegs fähigen Angreifer mithilfe einer Software wiederherstellen, die OLE-Container (Object Linking and Embedding) analysieren kann (in diesem Format speichert die Textverarbeitung alle Daten). Dieses Problem ist besonders schwerwiegend, wenn eine ältere Version eines Dokuments als Vorlage wiederverwendet und an einen anderen Empfänger - unter Umständen einen Mitbewerber des ursprünglichen Adressaten - gesendet wird. Die Möglichkeit, eine ältere Version eines Angebots, einer Bewerbung oder einer offiziellen Antwort an einen Kunden wiederherzustellen, ist auf jeden Fall unterhaltsam und lehrreich, aber für den Absender nicht immer wünschenswert. Natürlich kann man angesichts der aktuellen Tendenz hin zum Trasted Computing und zur zunehmenden „Haftung" im Sinne einer Verringerung von Urheberrechtsverletzungen vernünftigerweise davon ausgehen, dass es gängige Praxis werden wird, alle Dokumente zu attributieren, sodass sie jeweils zum Verfasser zurückverfolgt werden können. 3.2.2 Moment mal: *_~1q'@@ ... und Ihr Passwort lautet... Die letzte Gruppe von Problemen, die vielen Textverarbeitungen gemein ist, sind Speicherlecks. Diese Forrn der Offenlegung ist das Ergebnis schierer Inkompetenz oder unzureichender Erprobungen, unterscheidet sich jedoch von anderen Codemängeln darin, dass der Code nicht selbst für einen Angriff anfallig gemacht wird, sondern dem aufmerksamen Beobachter einige nützliche Hinweise preisgibt. Ob das Problem auf das Programm selbst beschränkt ist oder von systemweiten Lecks verursacht wird (was insbesondere für Systeme mit unzureichendern Speicherschutz gilt, also etwa Windows 3.x oder Windows 9x), spielt keine Rolle: Die ausgetretenen Daten können sensible Informationen wie weitere Dokumente, Browserverläufe, Inhalte von E-Mails oder sogar Passwörter enthalten. Das Problem tritt auf, wenn eine Anwendung beispielsweise einem Bearbeitungspuffer einen Speicherblock zuweist, der zuvor vielleicht für eine andere Aufgabe verwendet worden war, und dabei vergisst, die Daten in diesem Block zu löschen, bevor er für einen ganz anderen Zweck verwendet wird. Aus Perforrnancegründen wird der Speicher nicht immer neutralisiert, bevor er einer Anwendung zur Verfügung gestellt wird. Die Anwendung verwendet und überschreibt dann unter Umständen nur einen kleinen Teil des Speicherblocks, schreibt aber den gesamten zugewiesenen Datenblock beim Speichern der Datei: Es werden also sowohl die gewünschten Daten als auch einige Restinhalte gespeichert, die wer weiß wie alt sind. Es ist wohl keine Überraschung, zu erfahren, dass ältere Versionen von Microsoft Word einst benichtigt dafür waren, beträchtliche Mengen von RAM mit praktisch allen erzeugten Dokumenten zu speichern. Das Problem ist mehrfach bei Microsoft Word aufgetaucht, zuerst 1998 bei allen Versionen, 2001 dann nur noch auf Mac OS. Es gibt Gerüchte, dieses Verhalten sei auch auf anderen Systemen beobachtet worden, aber diese Vorfälle sind spärlich dokumentiert. 66
4 Wirken für das Gemeinwohl Viertes Kapitel. In dem die Frage, wie der Computer die Absichten seines Benutzers bestimmt, gestellt wird. Und unbeantwortet bleibt Den Liebreiz eines angemessen umfangreichen und vielfältigen Cornputemetzwerks - und gleichzeitig eines seiner größten Probleme - macht die Tatsache aus, dass Sie niemandem, der an dieses Netzwerk angeschlossen ist, blindlings vertrauen können: Ihr Gegenüber muss nicht der sein, der zu sein er vorgibt, und es ist unmöglich, die Absichten oder wirklichen Triebkräfte hinter seinen Aktionen zuverlässig zu bestimmen. Ich werde das Problern der Identitätsbestimmung einer Quelle im dritten Teil dieses Buchs behandeln, wenn ich die Architektur des Netzwerks sezieren und die Risiken erforschen werde, die sich aus der Art und Weise ergeben, wie ein Netzwerk aufgebaut ist. Allerdings ist das Problern der Absichten eines solchen Urhebers ein separater und faszinierender Aspekt der Cornputersicherheit, der häufig schwerwiegende und fernliegende soziale und rechtliche Auswirkungen haben kann, die weit über die Welt der Datenverarbeitung hinausgehen. In dem Maße, wie wir Computer immer besser darin machen, die Absichten ihrer Benutzer vorherzusagen (was für sich genommen bereits ein Mittel zur Erlangung von Intuitivität und Benutzerfreundlichkeit ist), und ihnen zunehmend mehr Autonomie verleihen, wird es immer einfacher, eine solche Maschine zu einem Werkzeug in den Händen des Gegners zu machen, statt dem Benutzer zu helfen. 4.1 Das große Krabbeln Über diesen Bereich wurden bereits Myriaden von Abhandlungen verfasst, nebst einer Anzahl hitziger Diskussionen zu der Frage, wer denn daran Schuld hat und wen man belangen könnte, wenn etwas danebengeht. Meiner Ansicht nach ist es zwar wichtig, das Problem hier anzureißen, aber unangemessen, Ihnen eine bestimmte Sicht der Dinge zu verrnitteln. 67
4 Wirken für das Gemeinwohl Insofern will ich diesen Teil des Buches mit einem kurzen und sehr technischen Artikel beschließen, den ich urspilinghch 2001 im Phrack-Magazin (Vol. 57) veröffenthcht habe. Ich habe ein paar kleinere Änderungen daran vorgenommen und werde mich jeden weiteren Kommentars enthalten. Warten Sie mal kurz, der muss hier doch irgendwo ... Ja, hier ist er: ==Phrack Inc.== Volume 0x0b, Issue 0x39, Phile #0x0a of 0x12 -=[ Wider das System: Der Aufstand der Roboter ]: -=[ (C)Copyright 2001 Michal Zalewski <lcamtuf@bos.bindview.com> ]=-= -- [1] Einleitung " ... besteht der große Unterschied zwischen dem Web und herkömmlichen, gut gepflegten Sammlungen darin, dass sich praktisch nicht kontrollieren lässt, was die Leute ins Web stellen. Wenn man diese Flexibilität, beliebige Inhalte zu veröffentlichen, mit dem enormen Einfluss kombiniert, den Suchmaschinen auf das Datenrouting haben, dann werden Unternehmen, die Suchmaschinen gezielt manipulieren, um Umsätze zu machen, sehr schnell zu einem erheblichen Problem." -- Sergej Brin, Lawrence Page [A] Stellen Sie sich einen entfernten Angreifer vor, der ein Remote-System übernimmt, ohne überhaupt Daten an sein Opfer zu schicken. Stellen Sie sich einen Angriff vor, der schlicht darauf basiert, eine Datei zu erstellen, mit der sich Tausende von Computern gefährden lassen, und für dessen Ausführung keine lokalen Ressourcen erforderlich sind. Willkommen in der Welt von aufwandsfreien Exploit-Techniken, Automation und anonymen wie auch praktisch unaufhaltsamen Angriffen, die auf der ständig zunehmenden Komplexität des Internets basieren. Aufwandsfreie Exploits schreiben einen Wunschzettel und lassen diesen dann irgendwo im Cyberspace zurück, wo er von anderen gefunden werden kann. Die "Hilfsarbeiter des Internets" [B] -- Hunderte von unermüdlichen Robotern, Datenbrowsern, Suchmaschinen und intelligenten Agenten, die niemals ruhen -- kommen irgendwann vorbei, finden und registrieren den Wunschzettel und werden so ungewollt zum Werkzeug in den Händen des Angreifers. Einen dieser Automaten können Sie vielleicht aufhalten, aber Sie werden sie sicher nicht alle stoppen können. Vielleicht finden Sie heraus, wie ihre Befehle aussehen, aber wissen Sie, wie diese Befehle morgen aussehen werden? Nein, denn diese lauern in den Tiefen des noch nicht indizierten Cyberspace. Diese Privatarmee ist stets zu Diensten: Sie nimmt die Befehle entgegen, die man ihr zukommen lässt. Sie lässt sich einsetzen, ohne dass man dafür den Oberbefehl ergreifen müsste. Sie tut das, wofür sie gemacht ist -- und das auf optimale Art und Weise. Willkommen in der neuen Wirklichkeit, in der unsere KI-Maschinen sich gegen uns erheben können. Betrachten wir einen Wurm. Einen Wurm, der nichts tut. Er wird von Dritten getragen und weitergegeben, infiziert sie aber nicht. Dieser Wurm erstellt nun eine Liste von 10.000 Zufallsadressen mit bestimmten Befehlen. Dann wartet er. Intelligente Agenten nehmen diese Liste auf, und mit ihren vereinten Kräften versuchen sie dann, die Ziele anzugreifen. Stellen Sie sich weiter vor, dass sie dabei nicht besonders viel Glück haben und eine Erfolgsrate von gerade einmal 0,1 Prozent erzielen. Nun sind also zehn neue Hosts infiziert. Auf jedem dieser Hosts tut der Wurm nun wieder genau dasselbe: Er stellt eine Liste zusammen. Nun kommen die Agenten zurück und infizieren hundert neue Hosts. Und so setzt sich die Geschichte fort. 68
4.1 Das große Krabbeln Agenten sind praktisch unbemerkbar, denn die Leute haben sich mittlerweile an ihr Vorhandensein und ihre Beharrlichkeit gewöhnt. In einer Endlosschleife rücken Agenten ganz langsam vor. Sie arbeiten systematisch. Sie verschicken nur wenig Daten, d. h. Verbindungen bleiben immer verfügbar; ein Zusammenbruch des Netzwerks, Spitzenwerte beim Datenverkehr oder andere verräterische Anzeichen der Infektion sind nicht erkennbar. Woche für Woche probieren sie behutsam neue Hosts aus, und ihre Forschungen nehmen kein Ende. Ist es möglich, festzustellen, dass sie einen Wurm in sich tragen? Unter Umständen ... -- [2] Ein Beispiel Als mir diese Vorstellung in den Sinn kam, probierte ich einen ganz einfachen Ansatz aus, um zu sehen, ob ich recht hatte. Mein Ziel waren diverse universelle Webcrawler. Ich erstellte also ein sehr kurzes HTML- Dokument, legte dieses irgendwo auf meiner Website ab und wartete dann ein paar Wochen. Und sie kamen: AltaVista, Lycos und Dutzende anderer. Sie fanden neue Links, nahmen sie begierig auf und waren dann tagelang nicht mehr gesehen. bigipl-snat.sv.av.com: GET /indexme.html HTTP/1.0 sjc-fe5-l.sjc.lycos.com: GET /indexme.html HTTP/1.0 Später kamen sie wieder, um nachzusehen, ob ich ihnen neues Futter bereitet hatte. http://somehost/cgi-bin/script.pl?pl=../../../../attack http://somehost/cgi-bin/script.pl?pl=;attack http://somehost/cgi-bin/script.pl?pl=|attack http://somehost/cgi-bin/script.pl?pl="attack" http://somehost/cgi-bin/script.pl?pl=$(attack) http://somehost:54321/attack?~id~ http://somehost/AAAAAAAAAAAAAAAAAAAAA... Die Links stellten jeweils simulierte Sicherheitslücken dar, und die Bots folgten ihnen. Zwar wirkten sich diese Exploits nicht auf meinen Server aus, aber sie hätten problemlos bestimmte Skripten oder den vollständigen Webserver eines Remote-Systems verändern können. Auf diese Weise hätten sich über das Skript beliebige Befehle ausführen lassen können, um in beliebige Dateien zu schreiben oder -- besser noch -- einen Pufferüberlauf zu verursachen: sjc-feS-l.sjc.lycos.com: GET /cgi-bin/script.pl?pl=;attack HTTP/1.0 212.135.14.10: GET /cgi-bin/script.pl?pl=$(attack) HTTP/1.0 bigipl-snat.sv.av.com: GET /cgi-bin/script.pl?pl=../../../../attack HTTP/1.0 Dankbar stellten die Bots auch Verbindungen mit Nicht-HTTP-Ports her, die ich für sie vorbereitet hatte, und begannen einen Kommunikationsvorgang, indem sie Daten sendeten, die ich in URLs übergeben hatte; auf diese Weise wurde es möglich, sogar andere Dienste als nur Webserver anzugreifen: GET /attack?~id~ HTTP/1.0 Host: somehost Pragma: no-cache Accept: text/* User-Agent: Scooter/1.0 From: scooter@pa.dec.com 69
4 Wirken für das Gemeinwohl GET /attack?~id~ HTTP/1.0 User-agent: Lycos_Spider_(T-Rex) From: spider@lycos.com Accept: */* Connection: close Host: somehost:54321 GET /attack?~id~ HTTP/1.0 Host: somehost:54321 From: crawler@fast.no Accept: */* User-Agent: FAST-WebCrawler/2.2.6 (crawler@fast.no; [...]) Connection: close Neben den bekannten Websuchmaschinen antworteten auch einige andere private Webcrawler und Agenten, die von bestimmten Organisationen und Unternehmen betrieben werden. Bots von ecn.purdue.edu, visual.com, poly.edu, inria.fr, powerinter.net und xyleme.com sowie eine ganze Reihe nicht i- dentifizierter Engines fanden meine Seite und fraßen, was ich ihnen vorsetzte. Zwar akzeptierten einige Roboter nicht alle Adressen (einige Crawler indizieren keine CGI-Skripten, während andere vor Nichtstandardports zurückschrecken), aber die Mehrheit selbst der leistungsfähigsten Bots griff praktisch alle Ziele an, die ich angegeben hatte, und selbst die vorsichtigeren ließen sich immer so täuschen, dass sie zumindest ein paar Angriffe durchführten. Dieses Experiment ließe sich so abändern, dass eine Sammlung echter Sicherheitslücken zum Einsatz kommen könnte: Tausende von Webserverüberläufen, Unicode-Problemen bei Servern wie Microsoft IIS oder Skriptprobleme. Und statt auf meinen eigenen Server zu zeigen, könnten die Bots auf eine Liste zufällig erzeugter IP-Adressen oder eine beliebige Auswahl von .com-, .org- oder .net-Servern zeigen. Oder Sie setzen die Bots auf einen Dienst an, der durch Übergeben eines bestimmten Eingabestrings attackiert werden kann. Es gibt ein ganzes Heer von Robotern, die eine Vielzahl von Gattungen, Funktionen und Intelligenzstufen umfassen. Und diese Roboter tun, was immer man ihnen sagt. -- [3] Soziale Überlegungen Wer nun ist schuld, wenn ein "besessener" Webcrawler Ihr System erfolgreich attackiert? Die naheliegendste Antwort lautet: der Autor der Webseite, auf der der Crawler sich infiziert hat. Aber Webseitenautoren sind schwer zu ermitteln, und der Indizierungszyklus eines Crawlers beträgt mehrere Wochen. Es ist schwierig zu ermitteln, wann eine bestimmte Seite in Netz gestellt wurde, denn das Einstellen lässt sich auf viele unterschiedliche Arten ermöglichen, und manche Seiten werden sogar von anderen Robotern erstellt. Es gibt keine Möglichkeit zur Rückverfolgung im Web, die eine ähnliche Funktionalität bietet wie die im SMTP-Protokoll implementierte. Außerdem erinnern sich viele Crawler gar nicht daran, wo sie neue URLs "erlernt" haben. Weitere Probleme werden von Indizierungs-Flags verursacht, z. B. von "noindex" in Verbindung mit der Option "nofollow". In vielen Fällen lassen sich die Identität eines Autors und der Ursprung eines Angriffs nie zweifelsfrei klären. Aufgrund einer Gleichstellung mit anderen Fällen kann man davon ausgehen, dass, sollten solche Angriffe Wirklichkeit werden, die Entwickler intelligenter Bots zur Implementierung bestimmter Filter gezwungen wären oder andernfalls Schadenersatz in enormer Höhe an die Opfer zahlen müssten1. Anmerkung des Übersetzers: Der Autor bezieht sich hier auf die gängige Rechtsprechung in den Vereinigten Staaten, die den Leidtragenden von Produktfehlern aus europäischer Sicht exorbitant hohe Schadensersatzsummen zuzusprechen. In einer Anmerkung hält er zudem fest: „Ein weiteres Problem besteht darin, dass nicht alle Crawler unter die Gesetzgebung der amerikanischen Staaten fallen; die Rechtsprechung anderer Länder kann sich im Bereich des Coniputermissbrauchs erheblich unterscheiden". 70
4.1 Das große Krabbeln Wenn Sie andererseits die Anzahl und Vielfalt bekannter Sicherheitslücken berücksichtigen, scheint es praktisch unmöglich, die zur Beseitigung bösartigen Codes erforderlichen Inhaltsfilter implementieren zu können. Und so besteht das Problem fort. -- [4] Abwehr Wie bereits erwähnt, bieten Webcrawler selbst angesichts der schieren Vielzahl webbasierter Anfälligkeiten nur eingeschränkte Verteidigungsund Vermeidungsfunktionen. Es ist unmöglich, alle bösartigen Codesequenzen einfach auszusperren, und ein heuristischer Ansatz ist problematisch: Eine Eingabe, die für ein Skript gültig und auch erforderlich ist, kann in einem anderen Fall durchaus für einen Angriff verwendet werden. Ein sinnvoller Verteidigungsansatz besteht darin, dafür zu sorgen, dass alle potenziellen Opfer sichere und aktuelle Software verwenden, aber dieses Konzept ist aus verschiedensten Gründen extrem unbeliebt. (Ich habe auf die Schnelle einen sehr unwissenschaftlichen Test durchgeführt: Die Suche nach dem String "CGI vulnerability" auf Google, bei der ein Filter aktiviert war, der passende Dokumente nur einmal nannte, förderte 52.100 Ergebnisse zutage. [C]) Eine andere Verteidigungsmethode gegen infizierte Bots ist die Verwendung der Standardausschlussdatei /robots.txt [D]. Der Preis hierfür ist jedoch hoch: Ihre Site wird von nun an von Suchmaschinen teilweise oder vollständig geschnitten, was in den meisten Fällen nicht wünschenswert oder gar unannehmbar ist. Außerdem gibt es Bots, die derart beschädigt oder gezielt so geschrieben sind, dass sie /robots.txt ignorieren, wenn sie einer direkten Verknüpfung mit einer neuen Website folgen. -- [5] Referenzen [A] S. Brin und L. Page: The Anatomy of a Large-Scale Hypertextual Web Search Engine" (Googlebot-Konzept). Stanford University. URL: http://www7.scu.edu.au/programme/fullpapers/1921/coml921.htm [B] The Web Robots Database. URL: http://www.robotstxt.org/wc/active.html [C] L. D. Stein: Web Security FAQ. URL: http://www.w3.org/Security/Faq/www-security-faq.html [D] M. Koster: A Standard for Robot Exclusion. URL: http://info.webcrawler.com/mak/projects/robots/norobots.html | = [ EOF ] = | Es erscheint praktisch unmöghch, einen automatisierten Missbrauch vorherzusagen, wenn man die Absicht hinter einer bestimmten Benutzerhandlung nicht vorausahnen und einordnen kann. Dies aber wird in absehbarer Zeit auch nicht der Fall sein. Mittlerweile nimmt die Anzahl der Systeme, die auf eine automatisierte Interaktion mit anderen Entitäten angewiesen sind, Jahr für Jahr zu. Aufgrund dessen ist dieses Thema heute vielleicht noch interessanter als vor ein paar Jahren, als ich den Artikel geschrieben habe. Denn in der Zwischenzeit haben immer rnehr ausgefuchste Würmer mit hohem Verbreitungspotenzial im Internet zugeschlagen. 71
4 Wirken für das Gemeinwohl Hat diese Geschichte eine Moral, oder gibt es ein nahehegende Schlussfolgerung? Eigentlich nicht. Allerdings sollte man stets im Hinterkopf behalten, dass Maschinen auch dann nicht immer im Auftrag ihrer Betreiber agieren, wenn sie nicht augenscheinlich übernommen wurden oder unverblümt für feindselige Aktionen verwendet werden. Die Absicht und den Ort zu bestimmen, an dem der Wunsch, eine verruchte Handlung auszuführen, seinen Ursprung nahm, kann eine kolossale Herausforderung sein. Wir werden uns dem in späteren Kapiteln widmen. 72
Der sichere Hafen Von den Gefahren, die zwischen Computer und Internet lauern
5 Blinkenlichten Fünftes Kapitel. In welchem wir erkennen, dass auch Liebreiz tödlich sein kann, und lernen, LEDs zu lesen Im ersten Teil dieses Buches haben wir uns auf verschiedene Probleme konzentriert, die den Aufbau des Dateneingabepunkts im System betreffen. Diese Probleme beschränkten sich auf das Erschließen der Eingabe durch die Beobachtung scheinbar bezugsloser Verhaltensmuster durch einen Benutzer, der lokalen Zugriff auf das System hat. Wenn aber die Daten ihren Weg zum Adressaten fortsetzen und dieses System verlassen, wird die Angriffsfläche größer, und die Probleme werden greifbarer. Der zweite Teil dieses Buches behandelt einige der Probleme, die auftreten, wenn die Daten das Urspmngssystern verlassen haben, aber noch in Reichweite sind - der Moment, bevor sie in das Internet eintreten. Die hier beschriebenen Risiken beschränken sich weitgehend auf den physischen Bereich eines LAN und seiner direkten Umgebung. Ein Angriff in diesem Bereich erfordert einen Beobachtungspunkt, der zwar zum Ursprungssystem lokal sein muss, aber keinen Zugriff auf Systemebene benötigt. Das in diesem Kapitel beschriebene Problern unterscheidet sich in gewisser Hinsicht von den zuvor behandelten: Die Schwachstelle manifestiert sich auf der Hardwareebene - ähnlich wie bei TEMPEST, doch ein wenig anders. Die Schönheit dieses Phänomens und die Leichtigkeit, mit der es sich ohne Spezialgeräte beobachten lässt, rechtfertigen mehr als nur einen flüchtigen Blick. 5.1 Die Kunst, Daten zu übertragen Dass es Computern möglich sein muss, mit anderen elektronischen Geräten zu kommunizieren, war seit Anbeginn der praktischen Datenverarbeitung ebenso offensichtlich wie die 75
5 Blinkenlichten Schwierigkeit, diese Möglichkeit zuverlässig und kostengünstig zu implementieren Wir können die interne Kommunikation eines Systems steuern, indem wir reichhaltige und maßgeschneiderte Schnittstellen für alle wesentlichen Komponenten, für die dies wünschenswert ist, bereitstellen, präzise Signaleigenschaften definieren und einen allgemeinen Referenztakt für alle Operationen verwenden, damit Absender und Empfänger jederzeit wissen, wann Daten zu senden sind bzw. wann man auf Empfang gehen soll. Die Kommunikation über lange Strecken oder mit Geräten, die mit billigen, mchtspezialisierten Schnittstellen ausgestattet sind, stellt jedoch eine andere Herausforderung dar: Der Computer muss nämlich über ein Medium kommunizieren, welches nicht den Grad an Freiheit bietet, den wir von der systeminternen Kommunikation her gewohnt sind. Tatsächlich aber ist die Situation eigentlich genau umgekehrt. Der Kunde erwartet einfache, praktische, bequeme und preiswerte Lösungen Computer über 96-adrige, anndicke Leitungen zum Meterpreis von 100 Euro aneinander anzubinden, ist offensichtlich keine solche Lösung. Einfachheit ist also notwendig. Im Kern nutzt jeder externe Kornmunika- tionskanal praktisch immer die serielle Übertragung aufeinanderfolgender Bits, die erst dann, wenn sie wieder zusammengesetzt und gruppiert werden, numerische Werte, Zeichenketten oder andere Daten bilden, die in der Systemumgebung des Absenders oder Empfängers nativ sind. Wenn im scheinbar trivialsten und offensichtlichsten Szenario zwei Maschinen oder Geräte, die nur über ein Leitungspaar miteinander verbunden sind, Daten austauschen müssen, dann tun sie dies, indem sie einen der Leiter auf eine relativ zum anderen (Referenz-)Leiter höhere oder niedrigere Spannung setzen oder - allgemeiner formuliert - unterschiedliche Signale oder Zustände verwenden. Dies tun sie, um aufeinanderfolgende Datenbits mit einer gegebenen Frequenz zu senden: einer Frequenz, die auf beiden Geräten weitestmöglich synchronisiert sein muss. Aber bereits bei einem so einfachen Aufbau ergeben sich von Anfang an eine Reihe von Problemen. Zunächst einmal benutzen die Geräte keinen gemeinsamen Referenztakt. Zwar haben beide interne quarzgesteuerte Taktgeber, aber keine zwei bezahlbaren Taktgeber können jemals genau genug sein, um über einen längeren Zeitraum hinweg eine schnelle und zuverlässige Kommunikation zu gewählleisten - aufgrund von kleinen Fertigungsdefekten, Interferenzen und anderen physischen Bedingungen. Und die serielle Kommunikation braucht nun einmal eine präzise arbeitende Synchronisation. Das unkomplizierte Bitkodierschema, welches wir unter der Bezeichnung NRZ (Non-Return-to-Zero) kennen, gibt einfach ein Signal (also eine Spannung) für 0 und ein anderes Signal für 1 aus. In einem solchen System ist es einfach, die beiden Endpunkte synchron zu halten, wenn die Werte sich regelmäßig ändern: Das System muss lediglich eine fallende oder steigende Flanke erkennen, diese als Referenz benutzen und seine eigene Taktung entsprechend einstellen. Tritt aber eine längere Folge von Einsen oder Nullen auf, dann wird es für den Empfänger zunehmend schwierig, genau zu bestimmen, wie viele Bits eigentlich gesendet werden Tatsächlich kann bereits eine kleine Taktabweichung Probleme verursachen, und es gibt keine Möglichkeit, dies während des Austauschs einer konstanten Bitfolge auszugleichen 76
5.1 Die Kunst, Daten zu übertragen Die offensichtliche Lösung, einfach ein separates, unterscheidbares Timingsignal zwischen die Daten zu setzen, stellt nicht immer die bequemste und effektivste Methode dar: Ein Mehl- an Komplexität und auch ein geringerer Durchsatz werden oft als lästig empfunden. Um dieses Problern effizient zu lösen, verwenden viele Systeme die so genannte Manchester-Kodierung. Der Algorithmus der Manchester-Kodierung, die gemeinsam mit NRZ in Abbildung 5.1 gezeigt ist, kodiert Daten nicht über Signalpegel, sondern über die Signal- flanken. Die ursprüngliche, bereits erwähnte NRZ-Kodierung verwendet eine interne Uhr, um die Spannungspegel mit konstanter Rate zu messen, wobei niedrige Spannungsweite als 0 und hohe Werte als 1 interpretiert werden. Die Manchester-Kodierung hingegen überfragt die Daten in den Übergängen von der niedrigen zur hohen Spannung oder umgekehrt. Bei einem solchen System wird das Signal auf einen hohen Pegel geschaltet, um die binäre 1 anzuzeigen; der Wechsel auf einen niedrigen Pegel zeigt die binäre 0 an.1 0 1110 NRZ- Kodierung: Zeit (Zyklen) I +5V 0V 0 1110 Manchester- Kodierung: Zeit (Zyklen) Abbildung 5.1 Kodierungen für die Datenübertragung über serielle Leitungen: NRZ- und Manchester- Kodierung Zwar erfordert diese Kodierung keine Synchronisierung der Taktgeber, aber in ihrer bislang beschriebenen Form ist sie noch nicht gut genug: Es gibt keine Möglichkeit, zwei binäre Nullen oder Einsen zu kodieren, denn ein Übergang vom niedrigen zum hohen Spannungspegel lässt sich nicht zweimal hintereinander realisieren, ohne dazwischen wieder auf den niedrigen Pegel zurückzukehren (und umgekehrt). Damit derartige Datentypen kodiert werden können, werden Übergänge, die kurz nach einer steigenden oder fallenden Signalflanke auftreten, ignoriert; auf diese Weise kann das System mehrere aufeinanderfolgende Nullen oder Einsen kodieren, indem in der Mitte des Zyklus wieder der vorherige Spannungspegel eingenommen wird. Um die „Amnesieperiode" nach einem Übergang zu verwalten, ist ein einfacher, einmal auslösender Intervalltaktgeber erforderlich. Die Struktur einer seriellen Verbindung, die auf dem beschriebenen Selbstsynchronisie- mngsschema basiert, wird häufig erweitert, um eine Vollduplexkommunikation zu erlauben, bei der die beiden beteiligten Partner gleichzeitig kommunizieren können - entweder Oder auch umgekehrt —je nach Aufbau des Senders. 77
5 Blinkenlichten über zwei separate Sende- und Empfangsleitungen oder durch Verwendung fortschrittlicher Echoerkennungs- und -kornpensierungstricks zur Unterscheidung zwischen dem eigenen Signal und den Daten, die von der anderen Seite gesendet werden. Einige Medien erfordern oder gestatten zwar anspruchsvollere Signalsysteme - z. B. den Versand mehrerer Bits je Zyklus -, das Kornmunikationsprinzip bleibt jedoch stets das gleiche, und die Manchester-Kodierung über die kleinste mögliche Zahl von Leitern (meistens zwei) ist vorherrschend. Ausgestattet mit dem Grundwissen zur seriellen Kommunikation über „Leiterpaare" wollen wir nun einen Bück auf zwei bedeutende Beispiele der seriellen Kommunikation in der Netzwerktechnik werfen, erfahren, wie Daten intern ausgetauscht werden, und sehen, wie diese Daten bei Dritten landen können, ohne dass der Benutzer etwas davon mitbekommt. 5.1.1 Wie aus Ihrer Mail eine Menge Lärm wird - und dann wieder eine Mail Das wohl verbreitetste Gerät für die Computerkornmunikation über große Entfernungen ist ganz sicher das Modem. Ursprünglich in den 1950em zur Wartung und Ansteuemng bestimmter militärspezifischer Geräte an entfernten Standorten entwickelt, war es das Modem, das den Massen den Zugang zum Internet ermöglicht hat. Zwar wird das Modem heute häufig als veraltet beteachtet, aber es war Ursprung vieler modemer Technologien, z. B. ebenso schneller wie auch kostengünstiger DSL-Systeme (Digital Subscriber Line) oder Kabelmodems. Diese Geräte verwenden sämtlichst intelligente Variationen derselben Technik zur Kommunikation über Telefonleitungen oder andere nichtdedizierte Analogmedien unter Verwendung hörbarer oder unhörbarer Signale. Forschungen, deren Zweck die Verbesserung von Modems war, trugen auch zu unserem Verständnis für zahlreiche umfassende Probleme elektronischer Strukturen im Allgemeinen und von Computer- und Netzwerkstndcturen im Besonderen bei. Insofern sind Kenntnisse zur Funktionsweise von Modems wichtig, um andere - modernere - Memoden der Datenfernübertragung verstehen zu können Das universale Wesen einer Telefonleitung macht sie zum prädestinierten Medium für die Computerkornmunikation Telefonleitungen findet man fast überall, und Telefonsysteme bieten exzellente Funktionalitäten zur Rufweglenkung; hierdurch ist es möglich, mit wenig oder gar ganz ohne Aufwand praktisch jeden behebigen Ort zu kontaktieren. Es gibt allerdings einen kleinen Nachteil: Telefonleitungen wurden entwickelt, um die menschliche Stimme als Wellenform innerhalb eines schmalen Frequenzbandes zu übertragen (dieses ist nur wenige Kilohertz breit). Da diese Frequenzen als Spannungsänderungen über ein Leiterpaar aufgezeichnet und über eine Anzahl analoger Repeater und Verstärker weitergeleitet wurden, war die Übertragungsqualität nicht besonders hoch. Sie musste eben auch nur gut genug sein, damit die Gesprächspartner einander hören und verstehen konnten. Und weil das Gehirn ein ganz ausgezeichnetes Signalfilterungs- und Signalverarbeitungssystem darstellt, waren gelegentliches Rauschen oder Lautstärkeschwankungen unproblematisch. (Dies änderte sich erst viel später, als die Kundschaft immer kleinlicher wurde.) 78
5.1 Die Kunst, Daten zu übertragen Dagegen werden Computer normalerweise so konstruiert, dass sie binäre Informationen austauschen, die als relativ exakte Spannungspegel kodiert und über kurze, sorgfältig gefeitigte Leitungen mit hoher Signalqualität und niedrigern Widerstand übertragen werden. Diese sind so ziemlich das Gegenteil der langen, schlecht geschirmten Telefonleitungen mit ihren unzureichenden Signaleigenschaften. Computer tauschen auch wesentlich schneller und wesentlich rnehr Nachlichten aus, als es Menschen normalerweise tun. Insofern hatten Modementwickler - um es einmal nett zu formulieren - eine unangenehme Herausforderung zu meistern: Sie mussten einen Weg finden, Datenbits nicht nur so zu kodieren, dass sie über eine Leitung effizient an ein entferntes System übeitiagen werden konnten (was durch die Manchester-Kodierung ein bisschen einfacher geworden war), sondern die Kodierung musste auch in Form von Audiosignalen erfolgen, die sich am anderen Ende der Leitung präzise voneinander unterscheiden lassen mussten - ungeachtet meist völlig unvorhersagbarer Spannungsänderungen und anderer Verfälschungen auf dem Übertragungsweg. Sie hatten robuste Fehlerkorrektuialgorithmen und verschiedene Übertragungsraten zu implementieren, um den unterschiedlichsten Beeinträchtigungen Rechnung zu tragen: schlechte Leitungsqualität, gelegentliches Übersprechen, Lastkraftwagen, die über unterirdische Telefonleitungen fahren, Vogelnester auf Telefonrnasten usw. Die Entwickler nahmen zur Kenntnis, verfielen ins Grübeln und schenkten uns dann - nach nur knapp 40 Jahren - eine bezahlbare und akzeptabel schnelle Methode für die Kornmunikation zwischen Computern. Wir wollen kurz skizzieren, wie diese Entwicklung im Laufe der Jahrzehnte fortschritt und reifte - und wie die Grundlagen im Wesentlichen doch dieselbe blieben. Die Geschichte der Entwicklung und Standaidisierang kommerzieller Modems begann in den 1960em, als zwei Standaids konzipiert wuiden: Bell 103/113 und V.21. Diese beiden Standaids definierten Vollduplexverbindungen mit einer (für damalige Verhältnisse) erstaunlich hohen Übertragungsrate von 300 Baud (Bit/Sekunde). Hierzu kam eine Technologie namens FSK (Frequency Shifi Keying, Frequenzumtastung) zum Einsatz. FSK ist ein rätselhaft klingender Begriff, der allerdings ein recht simples Signalkodierschema bezeichnet: Er verwendet zwei verschiedene Töne zur Darstellung unterschiedlicher Werte, näm- lich eine Frequenz für- Signale mit gesetztem Pegel (H-Signale, vom Englischen high) und eine weitere für Signale mit nicht gesetztem Pegel (L-Signale, low). Der Vorteil der Verwendung von Frequenzen im Audiobereich gegenüber anderen Signaltypen ist beträchtlich: Es handelt sich um die einzige Signalform, die sich relativ problemlos über das Telefonsystem weiterleiten lässt - denn schließlich wurde das System für genau diesen Zweck entwickelt. Alle anderen Signale würden bestenfalls bis zur Unkenntlichkeit verstümmelt werden, bevor sie das jenseitige Ende der Leitung erreichen könnten - oder aber schlimmstenfalls sofort von Bandpassfiltem im Signalweg ausgefütert werden. Neben der Definition der FSK-Kodierung unterteilten die genannten Standaids Bell 103/113 und V.21 den Frequenzbereich, der von Telefonleitungen übeitiagen werden kann, in zwei Unterbereiche: ■ Eines der Modems - der Anrufer - verwendet eine Frequenz von 980 Hz für die Kodierung von L-Signalen und 1180 Hz für H-Signale.
5 Blinkenlichten ■ Das obere Ende des Spektrums blieb dem Angerufenen vorbehalten: Hier kamen die Frequenzen 1650 Hz bzw. 1850 Hz zum Einsatz. Und warum wurde das Frequenzband so unterteilt? Weil eine Telefonleitung im Grunde genommen nichts anderes ist als ein Paar Leiter, die zwar für die gleichzeitige Ubeitiagung von zwei Geräten verwendet werden können (Vollduplexcharakteristik), dies aber nur dann, wenn das Problern von Überlagerungen der gesendeten und empfangenen Nachrichten beseitigt wird. Bei der Vollduplexkornmunikation muss jedes Gerät in der Lage sein, sein eigenes Signal in den empfangenen Daten zu erkennen und es auszufiltem. Kann dies nicht erfolgreich bewerkstelligt werden, dann rnüsste jedes Gerät schweigen, solange das andere redet (Simplexmodus); hierdurch würde der ohnehin nicht gerade imposante Durchsatz eihebhch beeinträchtigt. Dank der Verteilung der Frequenzbereiche übeitiägt die Telefonleitung lediglich zwei verschiedene „Stimmen", wodurch sichergestellt ist, dass die gleichzeitige Kornmunikation kollisionsfrei erfolgen kann. Es sollte 25 weitere Jahre dauern, bis Modems die nächste bedeutende Hürde nehmen konnten. Die nächste wichtige Nonnensammlung - Bell 212A und V.22 - stellt einen riesigen Schritt nach vorne da: Die Frequenzumtastung wurde zugunsten von DPSK (Differential Phase Shifi Keying, differentielle Phasemimtastung) fallengelassen. Statt die Frequenz einer Welle zu ändern, verschiebt DPSK zur Darstellung verschiedener Werte die Signalphase. Die Phasenumtastung (oder Phasenmodulation) bringt eine minimale zeitliche Verschiebung in das Signal ein. Diese führt zu einem winzigen Synchronisationsversatz zur Ursprungswelle, während die Wellenfonn exakt gleich bleibt (Abbildung 5.2). Frequenzumtastung Phasenumtastung Die Frequenz ändert (erhöht) sich. Die Frequenz verschiebt sich relativ zur Referenzfrequenz. ■ Referenz- Ifequenz- spitzen L-Wert H-Wert Abbildung 5.2 Frequenzumtastung und Phasenumtastung 80
5.1 Die Kunst, Daten zu übertragen Der Wert der Phasenverschiebung - der so genannte Verschiebungswert - wird in Grad ausgedrückt.2 Ein Verschiebungswert um 360° beschreibt eine Verschiebung um die gesamte Wellenlänge, was nichts anderes bedeutet, als dass die Wellen wieder synchron laufen - der Effekt ist dann nicht vorhanden. Die Zuordnung verschiedener Phasenlagen wird in Abbildung 5.3 auf der linken Seite angezeigt. Referenzsigna Phase 0 Signalreferenz Abbildung 5.3 Phasenverschobene Signale (links) und Ergebnis der Subtraktion einer Referenzwellenform zur einfacheren Unterscheidung zwischen Phasen (rechts) Sobald beide Seiten zueinander synchronisiert sind und eine Möglichkeit haben, das über das Kabel empfangene Signal mit der erwarteten Wellenform zu vergleichen, lassen sich die kodierten Daten ganz einfach ermitteln. Eine Differenzialschaltung kann zwei Signale miteinander vergleichen, sie subtrahieren und die exakte Phasenverschiebung des Signals problemlos bestimmen, indem sie sie mit einem Referenzsignal vergleicht (Abbildung 5.3, rechte Seite). Der neue Standard profitierte auch von einer fortschrittlicheren Datenkodiennethode. Statt einfach zwei abwechselnde Signale zur Übertragung von Nullen und Einsen zu verwenden, wie es zuvor der Fall war, kodiert V.22 ganze Dibits (Bitpaare). Die gleichzeitige Kodierung zweier Bits lässt sich mithilfe von vier Phasenverschiebungswerten realisieren, wobei Dies ist eine Referenz an seinen Effekt bei Winkelfunktionen: Um 90° verschoben, ist y = sinfx) exakt dasselbe wie y = sin(90° + x). 81
5 Blinkenlichten der Verschiebungsumfang zur Daistellung der möghchen Werte so gewählt werden muss, dass die Werte gleichförmig und mit möglichst großem Abstand voneinander auf das 360°- SpektruHi verteilt werden und auf diese Weise optimal voneinander unterscheidbar sind (Tabelle 5.1). Tabelle 5.1 Verwenden von Phasenverschiebungen zum Kodieren zweier Datenbits (Dibit) Dibit 00 01 10 11 Phasenverschiebung 90° 0° 180° 270° Die Verwendung von Dibits erlaubte erheb lieh höherer Übertragungsraten (1.200 Baud), ohne dass die physische Modulationsrate für das Signal hätte erhöht werden müssen. Pro Ton wurden also doppelt so viele Daten (doppelt so viele Bits) übertragen. ■ Hinweis Zwar ist es theoretisch möglich, auch bei FSK ein erweitertes Alphabet aus zusammengesetzten Signalen, die Dibits ähneln, zu verwenden (also Signale, die niehr als zwei Zustände darstellen und so mehr als ein Bit gleichzeitig kodieren können), aber dies ist etwas problematischer. FSK-Signale müssen Subharmonische und andere Frequenzen vermeiden, die bei der Übertragung über Telefonsysteme besonders störanfällig sind, weswegen der Umfang möglicher Zustände erheblich eingeschränkt ist. Der Vorteil von DPSK gegenüber FSK besteht darin, dass eine feste Frequenz verwendet wird, die bekanntermaßen am wenigsten anfällig für Übertragungsprobleme ist und so auch bei höheren Übertragungsraten zuverlässig eingesetzt werden kann. In den folgenden Jahren beschleunigte sich das Forschungstempo ein wenig, und eine Reihe neuer Standaids wurde aufgelegt. Der Standard V.22bis fühlte das Konzept der Signalisierung mit einem längeren Alphabet fort: DPSK wurde mit der Amplitudenmodulation (Signallautheit) kombiniert, und es entstand eine zweidimensionale Menge mit 16 Werten. Der Übergang von einem gemessenen Signal in Binärwerte wurde mithilfe einer zweidimensionalen Tabelle ausgedrückt. Der Wert, dem ein Signal entspricht, wird ermittelt, indem zunächst die Spalte basierend auf dem gemessenen Phasenverschiebungswert ennit- telt und dann die passende Zeile für die gemessene Amplitude gesucht wird. Ein vereinfachtes, aber analoges 2 • 4-Beispiel zeigt Tabelle 5.2. Tabelle 5.2 Zweidimensionale Kodierung dreier Bits mithilfe zweier verschiedener Signalparameter Niedrige Amplitude Hohe Amplitude Phase 0° 000 (0) 100(4) Phase 90° 001 (1) 101 (5) Phase 180° 010 (2) 110(6) Phase 270° 011 (3) 111 (7) 82
5.1 Die Kunst, Daten zu übertragen Um die Verwirrung noch zu erhöhen, nannte man diesen Ansatz QAM (Quadratlire Amplitude Modulation, Quadraturamplitudenmodulation). QAM ermöglichte den Sprang von 1.200 auf 2.400 Bit/s - nicht durch Erhöhung der Signalmodulationsrate, sondern durch Steigerung der Anzahl von Bedeutungen, die ein einzelnes Signalatom haben kann. Der nächste größere Schritt in der Evolution war V.32. V.32 war der erste Ansatz, der ein ganz neues Konzept einführte: Statt die Frequenzen aufzuteilen, wurde eine fortgeschrittene EchokoHipensierungsschaltung3 verwendet, um das vom Gerät selbst übertragene Signal in den über die Leitung empfangenen Daten zu erkennen und abzuziehen. Diese Methode gestattete beiden Geräten (Sender und Empfänger) die Verwendung des gesamten (statt nur des halben) Frequenzspektrurns, wobei trotzdem ein Vollduplexbetrieb implementiert wurde. Die Entwicklung schritt fort, und bald erschien das V.34-Protokoll auf der Bildfläche. Zwar änderte sich die Rate, bei der das Signal gefahrlos und ohne erhebhche Störungen geändert werden konnte, im Laufe der Jahre nicht merklich, aber trotzdem war dieser Standard erheblich schneller als die Vorgänger. V.34 erzielt einen Durchsatz von 28.800 Baud, der von den Hersteilem gelegentlich noch ein wenig nach oben auf einen Wert von 33.600 Baud (33,6 Kbit/s) gedrückt wurde, indem 2.500 statt 3.500 Signalproben (Alphabetsymbole) pro Sekunde gesendet wurden; allerdings kombiniert er aus vier verschiedenen Kodierschemata eine vierdimensionale Struktur mit 1.664 möglichen Zuständen. Auf diese Weise lassen sich 41 Bits auf einmal senden. Wie sich zeigt, geht es also nicht nur um die Geschwindigkeit als solche, sondern darum, was man aus dem macht, was man hat. Es wird weithin angenommen, dass der V.34-Standard und seine Derivate sich der theoretischen Grenze der Datenübertragung über das sprachbasierte Telefonnetz bereits sehr stark annähern. Dies mag zwar angesichts der Tatsache, dass heutzutage praktisch nur noch Modems mit einer Rate von 56 Kbit/s eingesetzt werden, etwas abwegig erscheinen. Die Sache hat aber einen Haken: 56-Kbit/s-Geräte erzielen diese Übertragungsrate auf eine ganze andere Weise als analoge Lösungen. Wenn man weiß, dass die meisten Telefonnetze mittlerweile von analoger auf digitale Technik umgestellt wurden und die meisten Inter- netprovider ihre Systeme inzwischen direkt an das digitale TelekoHimunikationsSystem anschließen, dann ist offensichtlich, dass die Provider wieder auf eine nahehegende, aber bis vor kurzeni nicht verfügbare Lösung zurückgreifen können: Die Änderung von Netzspannungen anstatt einer Verschiebung von Frequenzen beim Senden von Daten an einen Teilnehmer. Da das Signal von Anfang an in Form digitaler Daten übertragen wird - und über unterirdische Kupferleitungen nur bis zur nächstgelegenen Vennittlungsstelle des Netzbetreibers geleitet wird -, gibt es praktisch keine Probleme mit der Signalqualität; die einzige Einschränkung stellt die Sprachübeitragungsfunktionalität dar, die in der Telefonsys- Echokornpensierangsschaltungen versuchen, vorn Gerät selbst gesendete Signale von denen zu trennen, die vom Gegenüber stammen, und erstere dann auszublenden oder aber zumindest erheblich abzuschwächen. Verschiedene Typen solcher Geräte werden häufig eingesetzt — nicht nur bei der Übertragung digitaler Daten, sondern auch zur Verbesserung der Übertragungsqualität bei Telefonanrufen, zur Beseitigung von Mila-ofonrückkopplungen bei Musikkonzerten und ähnlichen Veranstaltungen und zur Lösung vieler anderer alltäglicher Probleme. 83
5 Blinkenlichten temhardware implementiert ist. Mit über 8.000 Symbolen pro Sekunde, aber unter Verwendung eines beträchtlich kleineren Alphabets (normalerweise etwa 128 Symbole oder Spannungspegel) ist es möglich, Daten mit höherer Geschwindigkeit als gewöhnlich an einen Teilnehmer zu senden, dessen 56-Kbit/s-Modem über hochwertige Leitungen angebunden ist. Der Upstieam - also die Ubeitiagung vom Teilnehmer zum Provider - erfolgt allerdings nach wie vor über die alte Vorgehensweise und ist insofern erheblich langsamer. Insofern ist das Modem nur teilweise 56-Kbit/s-fähig - und auch nur dann, wenn die Bedingungen es zulassen. 5.1.2 Die Situation heute Viel hat sich nicht geändert seit der Konzipierung der Modemtechnologie. In dem Maße, wie die Übertragungsprotokolle fortschritten, wurden auch die Fehlerkorrektur- und Re- servernechanisHien verbessert, die für eine zuverlässige Ubeitiagung erforderlich sind - wenn etwa Ihr Vierbeiner mal wieder Telefonkabel zum Frühstück hatte. Standaids schössen wie Pilze aus dem Boden: V.42 brachte eine einfache PnifsuinmeniinplementieiTmg (Cyclic Redundancy Check, CRC) mit sich, MNP-1 bis MNP-4 proprietäre Fehlerkorrekturalgorithmen, V.42bis und MNP-5 Integiitätspräfung in Verbindung mit Komprimierung und so fort. Aber die wirkliche Revolution steht uns noch bevor. Oder ist sie schon da? Sie könnten einwenden, dass DSL und Kabelmodems eine bahnbrechende Technologie darstellen, die die Welt verändert haben. Ich halte dagegen, dass diese Technologien ihren älteren Cousins - den Modems - eigentlich doch recht ähnlich sind. Die einzigen bedeutsamen Unterschiede bestehen darin, dass sich der andere Endpunkt - der Server, der alle Verbindungen verwaltet - nun nicht rnehr in einer entfernten Stadt befindet, in der der Provider ansässig ist, sondern in der nächstgelegenen Vermittlungsstelle des Netzbetreibers, und die Verbindung erfolgt direkt über Kupferkabel von der Wohnung des Kunden. Da diese Direktverbindungen keine anderen Geräte passieren, können die entsprechenden Geräte hohe, unhörbare Frequenzen und subtilere Signale verwenden, die im Telefonnetz verstümmelt oder aber gar nicht weitergeleitet würden. Im Gegensatz dazu war das gute alte Modem strikt auf einen schmalen Bereich hörbarer Frequenzen und Signale beschränkt, für deren Ubeitiagung das Telefonsystem vorgesehen war (und die es infolgedessen auch gut übertragen hat). In vielerlei Hinsicht haben es die DSL-Geräte heute viel leichter als das gute alte Modern. Wie wir sehen, ist die Entwicklung eines Modems eigentlich eine recht komplexe und schwierige Aufgabe. Deswegen hat es auch Jahrzehnte gedauert, um uns von den teuren und klobigen 300-Baud-Geräten zu der Situation zu bringen, die wir heute vorfinden.4 Erstaunlicherweise aber können all diese Geräte miteinander kommunizieren — sogar mit Geräten, die schon zehn Jahre alt sind, und mit Übertragungsraten, die wir schon lange erfolgreich verdrängt haben. Wir alle sind uns der heute bekannten Standards einschließlich ihrer Bing88 84
5.1 Die Kunst, Daten zu übertragen Vielzahl von Alternativen und Verzweigungen bewusst. Macht nicht gerade dieser Umstand Modems zu einem Wunder in der Geschichte der Computerentwicklung? Aber wer zieht die Strippen? 5.1.3 Manchmal ist auch ein Modem nur ein Modem Die Kommunikation zwischen Modems ist natürlich weder der Anfang noch das Ende der Geschichte. Das Modem ist nur ein Teil einer ziemlich trägen Middleware, und noch nicht einmal einer von Format. Damit ein Modem zu irgend etwas nutze ist, muss es mit einem Computer kommunizieren können, um Befehle entgegenzunehmen und Daten auszutauschen, auch wenn es nur zu so etwas Profanern wie dem Surfen im Internet verwendet wild. Interne Modems haben es leicht: ISA (Integrated Systems Architecture), PCI (Pe- ripheral Component Interconnect), PCMCIA (PC Memory Card International Association) und einige andere dedizierte Busse bieten schnelle und ziemlich vielfältige parallele Schnittstellen, die den Kommunikationsvorgang ganz einfach gestalten. Externe Modems (z. B. Analog- oder DSL-Modems) hingegen müssen den steinigen Weg der seriellen Anbindung gehen. Die meisten Analogmodems verwenden das bekannte serielle RS-232-Protokoll (welches in den Neunzigern etwas prägnanter in EIA/TIA-232-E umbenannt wurde5); viele neuere Vaiianten setzen hingegen auf USB (Universal Serial Bus). Wenn wir uns den Datenenthüllungsszenarien mit diesen Geräten annähern, werden wir auch einen Blick daiauf riskieren, was mit den Daten auf ihrem Weg zwischen Modem und Computer passiert, denn dies spielt bei einer Attacke eine wesentliche Rolle. Zwar müssen externe Modems inhumane Kommunikationsrnittel nicht nur für Verbindungen mit Remote-Systemen, sondern auch mit dem lokalen Rechner selbst verwenden, aber dank der physischen Nähe zum Computer und der Tatsache, dass Schnittstellen wie RS- 232 digital arbeiten und von Anfang an für den Einsatz mit Computern konzipiert waren, ist diese Stufe weitaus einfacher als die Modulation und Demodulation von Telefonsignalen, für die Bitmoderns berühmt sind. RS-232 verwendet eine relativ unkomplizierte Implementierung der bipolaren Kodierung für Daten, die über zwei separate Leitungen ausgetauscht werden, und unterstützt diese mit einer Anzahl von NRZ-Steuerleitungen. Um das Leben interessanter zu gestalten, bietet es eine Vielzahl von Verbindungs- und Rotokollfunktionen, die eine Implementierung von Grund auf relativ schwierig gestalten: das asynchrone Wesen der Schnittstelle, eine Unmenge möglicher Einstellungen und Geschwindigkeiten und unkonventionelle Spannungspegel. Trotz allem aber stellt RS-232 noch nicht einmal ansatzweise eine Herausforderung für einen Entwickler dar, der die Signalmodulation über Telefonleitungen bewältigt hat. USB hingegen ist ein Versuch, die serielle Schnittstelle zu standardisieren und zu vereinheitlichen. Obwohl USB komplexere Schaltungen erfordert als RS-232, um für einen Computer eine Schnittstelle zu einem Gerät bereitzustellen — weil etwa u. a. eine höhere 5 EIA91
5 Blinkenlichten Abstraktionsebene und höhere Übertragungsraten vorhanden sind —, ist USB universell (daher der Name) und zeichnet sich durch weniger Merkwürdigkeiten und überkommene Funktionalitäten aus. Eine weitere gängige Methode zur Kommunikation mit lokalen Geräten ist nicht zuletzt auch der Einsatz von Ethernet, einer Technik, die USB ähnelt, aber älter ist. Schauen wir uns also zunächst Ethernet an— früher oder später kommen alle diese Kornmunikationspro- tokolle wieder zusammen. 5.1.4 Kollisionen unter Kontrolle Ethernetnetzwerke sind im Grunde genommen die fortgeschrittene Variante einer seriellen Verbindung mit vielen Teilnehmern.0 Ein Ethemetnetzwerk setzt sich aus einer Anzahl von Computern zusammen, die durch ein gemeinsames Medium aneinander angebunden sind. Dies ist in seiner einfachsten Ausprägung nichts fürchterlich Komplexes — einfach nur ein paar ziemlich gewöhnlicher Leitungen. Wenn ein Gerät im Netzwerk dieses Medium nutzt, legt es eine Spannung an den Leiter an; alle anderen angeschlossenen Systeme können die Daten dann inteipretieren, indem Sie die Spannungen messen. Eine Reihe von Tests gewährleistet dabei, dass mehrere Geräte die Leitung nicht gleichzeitig verwenden und dass, wenn es doch zu einem Zusammenstoß kommt, die Wiederherstellung unproblematisch ist. Aber auch, wenn man diese Möglichkeit in Betracht zieht, ist die Grundstruktur verglichen mit Modems schier unglaublich trivial. Um das Problem zu umgehen, dass zwei angeschlossene Systeme gleichzeitig zu kommunizieren beginnen, hat man einen Standard namens CSMA/CD (Carrier Sense Multiple Access with Collision Detection) ersonnen, der als zentraler Mechanismus die gesamte Kommunikation über Ethernet regelt. Bevor Daten gesendet werden, arbeitet jedes angeschlossene Gerät eine CSMA/CD-Prozedur ab, um festzustellen, ob ein anderes Gerät das Kabel gerade benutzt, indem es die elektrischen Eigenschaften des Modems überprüft. Findet gerade keine andere Übertragung statt, dann wechselt das Gerät in die Übertragungsphase und sendet seine Daten hinaus in das Netzwerk. In dieser Phase werden die Daten über die Leitung als Folge von Bits übertragen. Hierbei kommt die bipolare Kodierung zum Einsatz: Die Daten enthalten jeweils einen Header mit allen nötigen Angaben zu Absender und Empfänger sowie eine Prüfsurnme, deren Zweck der Schutz der Datenintegrität im Falle externer oder interner Störungen vierbeiniger und anderer Alt ist. Eine Netzwerkschnittstelle, die davon ausgeht, im Auftrag eines Empfängers zu handeln — etwa weil sie die im Paket erkannte Zieladresse mit der auf der Karte gespeicherten eindeutigen MAC-Adresse (Hardwareadresse) verglichen und eine Übereinstimmung erkannt hat —, sollte diesen Datenverkehr akzeptieren und die Prüfsumrne verifizieren. Gleichzeitig sollten alle anderen Beteiligten diesen Frame ignorieren; wenn sie dies jedoch nicht tun (und praktisch alle Kalten können dazu angewiesen werden), dann kann der Benutzer Datenverkehr, der an Dritte gerichtet ist, natürlich anzeigen oder auf diesen 6 Spiu-00 86
5.1 Die Kunst, Daten zu übertragen reagieren. (Sie sehen schon, dass Ethernet im Geiste abwegiger Gutgläubigkeit und Unei- gennützigkeit entwickelt wurde — ein nobler, doch vernunftwidriger Ansatz.) Es ist möglich (und auch recht wahrscheinlich), dass zwei Geräte in einem Ethernetnetz- werk im exakt gleichen Moment mit der Ubeitragung beginnen, obwohl sich beide nur Mikro- oder Nanosekunden zuvor vergewissert haben, dass kein anderer Beteiligter Daten sendet. Und wenn nun tatsächlich beide im exakt gleichen Moment die Übertragung starten, dann ist die Katastrophe vorprogrammiert. Zwei Übertragungen werden vermischt und verstümmelt, und beim Empfänger schlägt der Prüfsurnmentest dann fehl. Oder? Zwar ist der Einsatz der Prüfsurnme, die in der Spezifikation für Ethemet-Frarnes festgelegt ist, in aller Regel ausreichend, um die Genauigkeit der Datenübertragung zu verifizieren, aber wenn die Leitung voll ist und Hunderte oder Tausende Kollisionen innerhalb kürzester Zeit auftreten, dann ist es mit der Effizienz vorbei: Die Riifsumrne ist so knapp, dass von Zeit zu Zeit zufällig das korrekte Ergebnis herauskommen wird. Das Wahrscheinlichkeitsgesetz sagt uns, dass einige beschädigte Pakete — rein zufällig — die gleiche Prüfsumme haben werden wie das jeweilige ursprüngliche Paket. Aber auch, wenn wir das Problem der Priifsurnmenrnängel ignorieren, sollten wir Kollisionen so bald wie möglich beenden: Lässt man Kollisionen wuchern, dann wird man postwendend feststellen, dass eine ausreichend schnelle Neuübertragung beschädigter oder verworfener Frames im Netzwerk nicht rnehr möglich ist. Schließlich hat der Absender es ohne Anzeichen eines Problems versandt, und der Empfänger hat nichts erhalten, was auch nur im Entferntesten an ein Paket mit Nutzdaten erinnerte. Die Lösung verbirgt sich hinter der zweiten Abkürzung im Standard: CD steht für „Colli- sion Detection" (Kollisionserkennung). Die Spezifikation weist den Absender an, die Netzwerkleitung zu überwachen, solange er sich anderen gegenüber äußert. Wird ein anderer Teilnehmer bei dem Versuch ertappt, zur selben Zeit zu kommunizieren, dann sollte dies (ebenfalls durch eine einfache Messung der elektrischen Eigenschaften der Leitung) erkannt werden, woraufhin die Übertragung sofort abbricht. Femer sollte das Gerät auch einen so genannten Jam-Code (d. h. ein Störsignal) senden, um sicherzustellen, dass beide Frames — der, der vom Gerät selbst versendet wurde, und der Störenfried — vorbehaltlos gelöscht werden, ohne dass es überhaupt zu einer Verifizierung der Prüfsurnmen kommt; der Empfänger sollte das Jam-Signal erkennen und daraufhin den Empfang der Daten, die er gerade verarbeitet, abbrechen. Das Gerät wartet dann einen (anfangs) möglichst zufälligen, nach und nach immer länger werdenden Zeitraum — den so genannten Backoff— ab, bevor die Neuübeitiagung erfolgt; hierdurch soll die Wahrscheinlichkeit einer erneuten Kollision minimiert werden. ■ Hinweis Wollen Sie was Lustiges hören? Der Mechanismus für den Jam-Code erlegt dem Protokoll eine ungewöhnliche Anforderung auf. Alle Frames müssen eine Mindestlänge (!) aufweisen, wobei der Wert so berechnet wird, dass der Jam-Code erzeugt und an alle Systeme im Netzwerk gesendet werden kann, bevor die Übertragung des Frames abgeschlossen ist. Bei sehr kurzen Frames kann es sein, dass hierfür nicht genug Zeit vorhanden ist. Aus diesem Grund muss der Absender alle ausgehenden Übertragungen künstlich erweitern.
5 Blinkenlichten 0 0 $ ^, SENDER A M Will senden, j? erkennt Signal und wartet x. SENDER B W[ Sendet Daten St EMPFÄNGER n Empfängt 7 Daten 0 $ $ s, SENDER A H Wartet eine 7 Zeit lang s, SENDER B fl Wartet eine 7 Zeit lang ■^ EMPFÄNGER SENDERA Keine Aktivität erkannt Senden wird vorbereitet SENDERB Will auch senden EMPFANGER SENDERA Startet Neuübertragung SENDERB Wartet. EMPFANGER Empfangt Daten SENDERA Sendet Daten SENDERB Sendet Daten Kollision! EMPFÄNGER O Empfängt beschädigte Daten SENDERA Sendet. SENDERB Erwacht sieht anderes Signal wartet... EMPFÄNGER Still receives.. SENDERA EMPFANGER lEmpfängt Jam- 'Code, löscht erhaltene Daten $ & ÖJ s, SENDER A fl Fertig! s. SENDERB f\ Kein Signal 7* erkannt startet Neuübertragg. s. EMPFÄNGER ifj Empfängt 7 Daten Abbildung 5.4 Phasen der Ethemetkommunikafion Abbildung 5.4 zeigt die genaue Abfolge der Ereignisse in einem typischen Kollisionsszenario. Wie Sie sehen, hofft Sender A, Daten an den Empfänger übermitteln zu können, stellt aber fest, dass eine andere Ubeitragung stattfindet, und beschließt demzufolge, eine Zeit lang zu warten, bis die andere Ubeitragung endet. Dann bereitet sich Sender A auf den Versand seiner Daten vor. Leider tut Sender B genau dasselbe, und beide gelangen fast gleichzeitig zu dem Schluss, dass das Versenden der Daten sicher ist. Beide probieren also eine Übertragung, und die Daten werden verstümmelt. Zu diesem Zeitpunkt nun erkennen beide die jeweils andere Übertragung und senden ganz schnell einen Jam-Code, um den Empfänger anzuweisen, den betreffenden Frame zu verwerfen. Abschließend halten beide Sender für einen zufälligen Zeitrauni still und schaffen es danach hoffentlich, ihre Übertragungen nicht wieder gleichzeitig zu starten. 5.1.5 Hinter den Kulissen: Die Sache mit den Leitungen - und unsere Lösung dafür Zwar ist das Ethernetprotokoll kein Beispiel für eine besonders gut skalierbare oder elegante Konstruktion, aber es ist erstaunlich leistungsfähig und einfach einzusetzen. So er- 88
5.1 Die Kunst, Daten zu übertragen rnöglichte es die Einrichtung preiswerter Netzwerke mit einer Peer-Struktur unter Verwendung von Koaxialkabeln an praktisch jedem beliebigen Ort. Aufgrund dessen wurde es zum De-facto-Standard und hat viele andere (teils überlegene, aber teurere oder proprietäre) Netzwerkarchitekturen ersetzt. Natürlich hatte das einfache Ethernet über Koaxialkabel seine Einschränkungen und Nachteile: Es basierte im Wesentlichen auf einem langen Leiterkabel, an das an verschiedenen Punkten Geräte angeschlossen waren und das an beiden Enden Widerstände aufwies. Eine solche Konstruktion ist nun nicht gerade etwas, dem man die Verantwortung für die Kommunikation in einem Bürokornplex anvertrauen möchte. Eine kleine, schwer zu findende Panne wie etwa ein kurzgeschlossener Anschluss konnte die gesamte Infrastruktur außer Gefecht setzen. Insofern war ein fortgeschrittener — zudem nur unwesentlich teurerer — Ersatz sehr willkommen. Elektronische Multiport-Repeater (Hubs) erlaubten das mühelose Herstellen der Verbindungsstrecken rnithilfe von LP-Kabeln (Lwisted Pair, also verdrillte Leiterpaare). Dies waren in der Regel CAT3- und CAT5-Kabel mit RJ-45-Steckem. Die Inbetriebnahme sah so aus, dass man seinen Rechner einfach mit einem kurzen Kabel an eine Blackbox anschloss, und schon konnten alle an diese Blackbox angeschlossenen Geräte mit ihm kommunizieren. Probleme mit der Elektrik oder die Möglichkeit, dass ein Kabelbrach das gesamte Netzwerk zum Ausfall bringen konnte, gehörten der Vergangenheit an. Hubs sind im Grande genommen einfache Repeater, die den gesamten an einem Port empfangenen Datenverkehr an alle anderen Ports weiterleiten. Sie ermöglichen die Erstellung einfach umzukonfigurierender und zuverlässigerer Netzwerke mit Stemtopologie, tiagen ansonsten aber wenig bei. Wenn das Netzwerk wächst, dann machen die Kosten der Übertragung jedes einzelnen Datenbits an alle Punkte und die Tatsache, dass nur ein Gerät gleichzeitig über das Netzwerk kommunizieren kann, nur allzu deutlich, dass die Einfachheit dieser Struktur gleichzeitig auch ihren größten Nachteil darstellt. Die Lösung waren Switches. Switches sind die nächste Generation der Hubs. Ausgestattet mit einem richtigen Prozessor und ein wenig Speicher, ermöglichen Sie eine zusätzliche Analyse auf höherer Ebene und stellen eine teurere Alternative zu Hubs dar. Diese Analyse verknüpft Hardwareadressen mit bestimmten Ports und optimiert das Routing von Frames, indem bestimmte Pakete im Unicast-Modus direkt an den passenden Ausgangsanschluss übergeben werden, statt sie im Broadcasting-Verfahren an alle Punkte zu senden (siehe Abbildung 5.5). Hierdurch wird die Leistungsfähigkeit mirfangreicher Netzwerke erheblich verbessert. ■ Hinweis Wollen Sie noch was Lustiges hören? Echte Hubs sind heutzutage fast ausgestorben. Praktisch alle 10/100-Mbit/s-Geräte, die angeboten werden, enthalten eigentlich einfache Switch-Chipsätze. Es ist schlichtweg einfacher, den Chip umzuetikettieren, als mehrere Varianten zu entwickeln und zu pflegen. 89
5 Blinkenlichten Ich schätze, spätestens an dieser Stelle fragen Sie sich, worauf zum Teufel ich hinaus will. Was sollen denn Modems mit der Enthüllung von Daten zu tun haben? Welche Bedeutung haben serielle Verbindungen in diesem Kontext? Was soll die Abhandlung über Ethernet? Und was bitteschön sind Blinkenlichten? Ich bin froh, dass Sie fragen. Wir werden nun darauf eingehen. Auf Ihre letzte Frage, meine ich. y*^S Empfänger t*^yr Empfänger Abbildung 5.5 Hubs und Switches im LAN 5.1.6 Blinkenlichten in der Kommunikation Früher waren die fest kühlschrankgroßen Computer mit zahlreichen, hervorstechend angeordneten Diagnoseoberflächen ausgestattet. Hierzu gehörten Matrizen mit winzigen Lämpchen, die unter anderem gewisse unergründliche Eigenschaften des internen Zustandes einer Maschine anzeigten: Welche Werte haben die internen Register, welche Flags wurden vom Zentralprozessor gesetzt, wurde die Katze heute schon gefüttert usw. In dem Maße, wie Computer zuverlässiger und kompakter wurden und der Dui-chschnittsbenutzer die inneren Abläufe des Systems nicht rnehr verstehen rnusste, um es effizient einsetzen zu können, verschwanden diese Lämpchen zunehmend. Immer höhere Taktgeschwmdigkeiten trugen ebenfalls zu ihrem Niedergang bei, denn irgendwann war der Zeitpunkt gekommen, an dem es dem menschlichen Auge nicht rnehr möglich war, den Anzeigen eine sinnvolle Bedeutung zu entnehmen, änderten sich diese doch tausend- oder millionenfach in jeder Sekunde. Bei einigen Anwendungen jedoch blieben die Lämpchen vorhanden. So sind etwa fest alle Netzwerkgeräte mit LEDs auf der Vorder- oder Rückseite ausgestattet. Diese ermöglichen
5.2 Die Auswirkungen der Ästhetik Verbindungsdiagnosen: Sie zeigen etwa an, ob ein bestimmtes Modul oder ein Anschluss einwandfrei funktionieren, das System ans Netzwerk angeschlossen ist, Daten übertragen werden usw. Diese Anzeigen sind aber auch nicht nur ein einfaches Diagnosetool: Ihre hypnotischen Muster muten merkwliidig an, und ihr Mysterium pflanzt die Saat von Furcht, Verzagtheit und Demut in die Herzen jener Unwissenden, die das Reich des Ser- verraurns betoten. Der Begriff Blinkenlichten (oder Blinkenlights) wird seit dem finsteren Mittelalter der Computertechnik zur Bezeichnung der vielbewunderten Einrichtung von Diagnoselämp- chen auf Rechengeräten verwendet —jener Lampen, die den Cornputerfreak in seinen langen und einsamen Nächten vor dem Terminal in ein sanftes grünes Licht tauchten. Das Wort stammt von einem Hinweisschild, das in Pseudodeutsch abgefasst war und das irgendein Witzbold in den Fünfzigern in den EDV-Laboren von IBM aufgehängt hat. (Dieses Schild war selbst bereits eine Parodie auf einen nicht computerbezogenen Scherz aus dem 2. Weltkrieg.) Das Schild hing bald darauf in vielen Serverräumen und Laboreinrichtungen in aller Welt. Es lautete wie folgt7: ACHTUNG! ALLES LOOKENSPEEPERS! Alles touristen und non-technischen looken peepers! Das computermachine ist nicht fuer gefingerpoken und mittengrabben. Ist easy schnappen der springenwerk, blowenfusen und poppencorken mit spitzensparken. Ist nicht fuer gewerken bei das dumpkopfen. Das rubbernecken sichtseeren keepen das cotton-pickenen hans in das pockets muss,- relaxen und watchen das blinkenlichten. Kormnunikationseiniichtungen gehören zu den letzten Bereichen, in denen es noch Leuchtanzeigen gibt (und das wird sich scheinbar auch so bald nicht ändern). Aber das ist noch nicht alles. Praktisch alle diese Einrichtungen verwenden für die Kommunikation serielle Leitungen. Und für aus Gründen der Einfachheit und Ästhetik sind diese Aktivitäts- LEDs manchmal direkt — über eine einfache Ansteuerschaltung — mit der Empfangs- oder Sendeleitung des Geräts verbunden. Der Vorhang fällt. 5.2 Die Auswirkungen der Ästhetik Es dauerte Jahrzehnte, bis das Problem erkannt wurde. Und als es dann so weit war — im Jahre 2002 —, waren wir alle vor den Kopf gestoßen, so simpel und augenscheinlich war es. Es war derart peinlich, dass man versucht war, mehrfach mit dem Kopf vor die Wand zu rennen. In ihrer Forschungsarbeit „Information Leakage frorn Optical Emanations"8 beschrieben Joe Lughry und David A. Umphiess ein neuartiges Signalenthüllungsszenario bei be- Raym96 Lugh02
5 Blinkenlichten stimmten Alten von Netzwerkeinrichtungen (vorzugsweise Modems). Sie zogen die Schlussfolgerung, dass jemand, der diese Anzeigedioden genau beobachtete, anderes im Sinn haben könnte, als sich von Zauberlichtem betören zu lassen. Anders als Glühlampen haben LEDs sehr schnelle Ansprech- und Abfallzeiten, d. h. sie schalten sich praktisch verzögerungsfrei ein und aus. Dieser Umstand ist nicht überraschend, denn schließlich werden hochwertige LEDs auch zur Ansteuerang von Glasfaserverbindungen und anderen optoelektronischen KoHimunikationskanälen verwendet. Mithin spiegelt das Blinken einer LED, die an einer seriellen Datenleitung hängt, tatsächlich oft einzelne Bits wider, die über die Leitung übertragen werden. Wenn es eine Möglichkeit gäbe, diese Aktivitäten mit ausreichender Geschwindigkeit aufzuzeichnen, dann ist auch vorstellbar, dass diese Daten ermittelt werden können, sofern man die winzigkleine Lampe am Gerät mit dem bloßen Auge (oder einem Teleobjektiv) erkennen kann. Diese Aibeit sorgte in der Industrie für gehörigen Wirbel — die einen spielten sie herunter, die anderen überbewerteten sie. Die Folge war ein großes Durcheinander, und seitdem hat sich wenig geändert. Viele widersprüchliche Berichte entstanden als Reaktion auf das Dokument; sein Grundsatz aber ist einfach und wahrhaft anmutig. Die Anmut dieser Methode besteht darin, dass es ganz simpel ist, ein Gerät zum Empfang des Signals zu bauen: Die gleichermaßen billigen und verbreiteten Gegenstücke zu LEDs — Fotodioden und Fototransistoren — sind leicht zu besorgen und ebenso leicht mit dem Computer zu verkoppeln. Und anders als bei den in Kapitel 3 beschriebenen TEMPEST-Aktionen ist die Offenbarangs- zone nicht Gegenstand moderner Märchen oder ausschließlich im Testfeld erzielter Ergebnisse, sondern lässt sich direkt beobachten und messen. Im Zuge ihrer Forschungen haben die Autoren eine Anzahl Experimente durchgeführt, um nachzuweisen, dass das Signal sich aus einer Entfernung von 20 Metern aufzeichnen lässt, ohne dass hierfür eine zusätzliche digitale Signalaufbereitung erforderlich gewesen wäre. Der gesunde Menschenverstand legt nahe, dass selbst dies eine Untertreibung ist — insbesondere wenn gute optische Einrichtungen zum Einsatz kommen. (Die Autoren verwendeten ein Objektiv mit einer Brennweite von 100 mm und dem Blendenöffhungswert f2.0; ein wesentlich besseres Teleobjektiv ist allerdings schon für viele Spiegeheflexkameras auch im nichtprofessionellen Bereich erhältlich. Und wenn jemand so richtig Geld ausgeben will, kann er auch ein ultrahochwertiges Objektiv mit einer Brennweite von sage und schreibe 1.200 mm erwerben.) Die Aibeit nimmt einen defensiven Standpunkt ein, und der sorgfältige Leser könnte den Eindruck gewinnen, dass einige der aufgefühlten Geräte gegen dieses Problem gefeit seien. Allerdings weisen, wie Sie im Abschnitt zur Vorbeugung weiter unten in diesem Kapitel noch erfahren werden, insbesondere einige Ethernetgeräte eine subtilere Variante der Schwachstelle auf. Zunächst aber sollten Sie das Problem mit eigenen (Cornputer-)Augen betrachten. Meinen Sie nicht auch? 92
5.3 Spionageausrüstung selbstgebaut... 5.3 Spionageausrüstung selbstgebaut... Die Tatsache, dass es extiem einfach ist, ein Bespitzelungsgerät zu bauen, macht genau dies so verlockend. In diesem Abschnitt finden Sie mehrere Vorschläge und grobe Schaltbilder, die zeigen, wie man ein solches Gerät baut und an einen konventionellen Computer anschließt. Zwar ist die Schaltung nicht gerade komplex, man braucht kein Fachmann für Löttechnik zu sein, und eine Software zum Entwerfen des Leiterplattenaufbaus ist auch nicht erforderlich, aber ein Minimum an elektrotechnischen Fertigkeiten ist ebenso wünschenswert wie eine Dosis gesunden Menschenverstandes. Obwohl die externen Schnittstellen modemer Rechner relativ robust und narrensicher sind, besteht immer das Risiko eines Schadens am Computer, wenn man in Heirnarbeit gebastelte Geräte auf wahrhaft innovative Weise oder aber in einem kurzen Moment geistiger Umnachtung anschließt. Das ist selbst den größten Experten schon passiert. Der Grundaufbau ist extiem einfach. Er basiert auf einem einzelnen Fototransistor (einer Komponente, die aus einem von einer integrierten Fotodiode angetriebenen Transistor besteht), einem leistungsarmen npn-Transistor zur geringfügigen Verstärkung des Signals (nicht unbedingt notwendig) und eine Anzahl Potentiometer (etwa im Bereich von lOkOhrn, damit ausreichend viel Flexibilität gewährleistet ist), um die Spannung versuchsweise herunterzuregeln und die Empfindlichkeit sowie die Schwellwerte der Schaltung zu steuern. Hinsichtlich der Komponenten gibt es keine besonderen Anforderungen, allerdings hängt die Leistungsfähigkeit der Schaltung von der Qualität ab. Sie sollten einen Fototransistor verwenden, der im Bereich des sichtbaren Lichts ein ordentliches Ansprechverhalten aufweist, wobei eigentlich auch alle billigen Exemplare funktionieren sollten. (Zur Information sei angemerkt, dass eine grüne LED eine Wellenlänge von ca. 520 mn aufweist.) Abbildung 5.6 zeigt eine Beispielschaltung. Die optimale Betriebsspannung der Schaltung hegt bei ca. 5 V. Der Maxirnalstiom ist niedrig: Eine Stromquelle, die 10 bis 50 rnA liefert, ist mehr als ausreichend. Eine Mahnung: Wenn Sie eine Quelle verwenden, die eine höhere Spannung anlegt, riskieren Sie eine Beschädigung des Cornputeranschlusses oder der Computers selbst. Gleiches gilt, wenn Sie eine leistungsfähigere Quelle verwenden und den Fluss stäikerer Ströme durch die Schaltung nicht unterbinden. ■ Hinweis Wenn Sie für Rvarl oder Rvar2 einen sehr niedrigen Widerstand wählen, kann es zu einem Kurzschluss der Schaltung kommen. Sollten Sie also gedankenlos mit den Reglern herumspielen, empfiehlt sich die Ergänzung eines Festwiderstands zur Begrenzung der Stromaufhahme. Sie müssen den Fototransistor vor externen Lichtquellen schützen. Dies lässt sich etwa mit einem hchrundurchlässigen Rohr bewerkstelligen. Da der Transistor keinen Scharfstel- lungsmechanismus aufweist, lassen sich damit wohl kaum weiter entfernte Signale (mit Ausnahme des Urngebungslichts) auffangen. Daher sollten sie ihn zum Testen anfangs vollständig abdecken, um Dunkelheit zu simulieren, und dann mit einer LED die Schaltung 93
5 Blinkenlichten anregen. Sie können auch eine weitere LED vorübergehend zwischen Masse und Ausgangsleitung setzen, um die Schaltung zu testen. Die Prüf-LED sollte leuchten, wenn der Sensor auf eine Lichtquelle gerichtet wird, und andernfalls rnehr oder minder dunkel bleiben. Vcc 2N2222 oder ähnlicher npn-Transistor Rvar2 VW zum Computer GND Abbildung 5.6 Einfache Empfängerschaltung 5.4 und eingesetzt Wenn die Schaltung mit integrierter Prüf-LED so weit funktioniert, können Sie zufrieden sein: Sie haben gerade einen fantasievollen TV-Femtester gebaut. Da universelle Fototransistoren billiger Bauart nur zu bereitwillig Infraiotlicht auffangen, sollte Ihre Schöpfung nun Infrarotstrahlen in sichtbares Licht umwandeln — rnehr aber auch nicht. Um den Nutzen zu steigern, müssen Sie eine Verbindung von der Schaltung zum Computer herstellen. Hierzu bietet sich die paiallele Druckerschnittstelle (LPT-Schnittstelle) an, sofern Ihr Computer über eine solche verfügt. Leider wird dieses für den Hacker fabelhafte Werkzeug bei vielen kompakteren und anspruchsvolleren Systemen zunehmend weggelassen. Zwar war die LPT-Schnittstelle urspiiinghch nur zur Ausgabe vorgesehen (d. h. für den unidirektionalen Betrieb konzipiert), aber sie bietet eine Reihe von Statusrückleitungen, z. B. „Paper Out", „Busy" und „Acknowledgment". Diese sollten es dem Rechner ermöglichen, bei Bedarf Probleme zu melden. Die Daten, die über diese Schnittstelle gelangen, lassen sich relativ einfach durch Zugriff auf Port 0x379 (LPT1-Statusregister) auf einem PC-kompatiblen System auslesen. Wenn Sie eine Schaltung an den Parallelport anschließen, können Sie ganz einfach Informationen an den Computer übermitteln. Wenn Sie in Betracht ziehen, die Schaltung an eine andere Schnittstelle anzuschließen, dann lassen Sie sich gesagt sein, dass LPT wesentlich schneller als beispielsweise RS-232 ist und Sie sich dabei nicht mit profanen Protokollen, Signalisierungssysternen oder unkonventionellen Spannungspegeln befassen müssen. Außerdem müssen Sie — anders als bei USB und ähnlichen aktuellen Systemen — keine SpezialController verwenden, um einem recht komplexen Protokoll lediglich beizubringen, mit Ihrem PC zu kommunizieren.
5.4... und eingesetzt Hinweis ■ Zwar bietet LPT mit ECP und EPP auch bidirektionale Betriebsinodi, aber der Versuch, diese Funktionalität für eine derart simple Aufgabe zu verwenden, ist ziemlich sinnlos. Unidirektio- nal stehen vier Bits für die Hingabe zur Verfügung, was für diese Anwendung mehr als genug ist; das Umschalten auf bidirektionale Modi wie EPP oder ECP bietet viel' weitere Bits. Welche Statusleitung Sie verwenden wollen, hegt ganz bei Ihnen. Tabelle 5.3 zeigt die Kontaktanordnung des DB25-Steckers, der für den Druckerport verwendet wird. Die hervorgehobenen Zeilen können flu' die Eingabe verwendet werden. Tabelle 5.3 LPT-Kontaktbelegung (DB25, Standard) Kontakt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Kontakt 16 17 18 19 20 21 22 23 24 25 Name Strebe DO D1 D2 D3 D4 D5 D6 D7 ACK Busy Paper Out Select In Autofeed Error Name Init Select GND GND GND GND GND GND GND GND Funktion Steuerausgabebit 0 Datenausgabebit 0 Datenausgabebit 1 Datenausgabebit 2 Datenausgabebit 3 Datenausgabebit 4 Datenausgabebit 5 Datenausgabebit 6 Datenausgabebit 7 Statuseingabebit 2 Statuseingabebit 3 Statuseingabebit 1 Statuseingabebit 0 Steuerausgabebit 1 Statuseingang (wird nicht verwendet) Funktion Steuerausgabebit 2 Steuerausgabebit 3 Erde (0V) Erde (0V) Erde (0V) Erde (0V) Erde (0V) Erde (0V) Erde (0V) Erde (0V) 95
5 Blinkenlichten Sie schließen die Schaltung an diesen Port an, indem Sie den Bezugserdkontakt des Steckers mit einem der in Ihrer Schaltung verwendeten Punkte verbinden und die Ausgangsleitung an einen behebigen der fünf verfügbaren Kontakte anschließen. (Vergessen Sie nicht, zuerst die für die Diagnose verwendete LED abzutrennen.) Als nächstes überwachen Sie den Statusport, denn Sie werden ihn zunächst dem Licht aussetzen und den Sensor dann abdecken. In beiden Fällen hängt der Messwert davon ab, wie Sie die Schaltung angeschlossen haben. Der exakte Wert ist dabei unwichtig; wesentlich ist, dass sich die beiden Werte unterscheiden lassen. Weil die Chiplogik etwas andere Eingangspegel benötigt als Ihre Test-LED, müssen Sie Rvar2 unter Urnständen ein wenig optimieren, bis Sie, wenn Sie den Sensor abdecken, andere Werte erhalten, als wenn Sie ihn dem Lichteinfall aussetzen. Zu diesem Zweck ist es am besten, wenn Sie den Port in Echtzeit am Computer selbst überwachen können. Aufweiche Weise Sie den Zustand des Ports überwachen können, hängt vom Betriebssystem und der von Ihnen verwendeten Programmiersprache ab. Wenn Sie etwa C verwenden, heißt die Funktion zum Auslesen des Wertes eines Ports iiib (port); in diesem Fall würden Sie also iiib (0x379) absetzen und dann den Rückgabewert überprüfen. Bei anderen Sprachen lautet der Name der Funktion wahrscheinlich ähnlich: Suchen Sie etwa nach in, inport, readport usw. Windows-Benutzer finden das eingebaute Utility debug und die zugehörige Funktion i (,,Port auslesen") unter Umständen recht praktisch. ■ Hinweis Auf manchen Systemen wie etwa Linux müssen Sie unter Umständen zuerst beim System eine Erlaubnis anfordern, um auf einen bestimmten Port zugreifen zu dürfen. Weitere Informationen finden Sie in der Dokumentation zu iopl(3) oder einem ähnlichen Aufruf. So, nun ist es so weit: Richten Sie Ihre Sonde auf eine behebige an einem Gerät vorhandene LED, stellen Sie den Sensor entsprechend der Helhgkeit ein und beginnen Sie mit dem Auslesen abwechselnder Muster heller und dunkler Signale, um zu ermitteln, welche Daten ausgetauscht werden (sofern überhaupt Daten ausgetauscht werden). ■ Hinweis Wenn Sie neugierig sind, können Sie einmal die Helligkeit der Anzeigediode selbst statt einer binären Darstellung ihres Zustandes überprüfen. Möglicherweise stellt sich heraus, dass es, obwohl eine bestimmte LED nicht dafür vorgesehen ist, ein Signal in der seriellen Leitung direkt in Blinkmuster umzusetzen, zu einem analogen Übersprechen zwischen den Schaltungen kommt und das Signal einen gewissen Einfluss auf die Helligkeit hat. Ein billiger Analog- Digital-Wandler schreit geradezu danach, auf diese Weise eingesetzt zu werden. Sie können diese Methode verwenden, um die Frequenz von weniger als einer Million Bits pro Sekunde zu messen. Dies sollte ausreichend sein, um die Übertragung vieler Netzwerkkarten zu erfassen, nicht unbedingt jedoch flu- Ethemetports (über die mindestens 10 Millionen Bits pro Sekunde übertragen werden). Jenseits dieser Erfassungskapazität wird Ihr LPT-Port sehr wahrscheinlich die physischen Durchsatzgrenzen erreichen. Doch keine Angst: Solange der Sensor (Fototransistor) mit einer für die Erfassung der fraglichen 96
5.5 Wie man die Zeigefreudigkeit von LEDs bändigt - und warum es dann doch nicht klappt Kormnunikation erforderlichen Rate umschalten kann, haben Sie noch eine weitere Option. Zur Erinnerung: LPT ist eine parallele Schnittstelle. Um höhere Erfassungsgeschwindigkeiten wie etwa für Ethernet zu erzielen, kombinieren Sie einen ganz einfachen Taktgeber, eine Zählerschaltung und einen Satz Abtast- und Haltespeicher (wie etwa 74LS377), um die Daten sequenziell zwischen den cornputerseitigen Portleseversuchen zu speichern. Sie können diese Information für kurze Zeit abspeichern und dann durch Verwendung mehrerer Statuskontakte (oder durch Umschalten des Ports in einen bidirektionalen Modus) problemlos mehrere Bits (Proben) in einem Rutsch - also einem Lesezyklus - an den Computer senden. Auf diese Weise erhöhen Sie die Leserate auf das Vier- oder Achtfache. Ich erspare Ihnen einen weiteren, vielleicht überflüssigen Exkurs in die Welt der Elektronik. Wenn Sie mit der Idee der Hochgeschwindigkeits- oder der analogen Probenentnahme hebäugeln oder einfach nur Spaß daran haben, irgendwas zusammenzulöten und dann an einen Computer anzuschließen, dann sollten Sie einen Bück in meine recht umfassende Einführung werfen, die sich unter dem dünnen Schleier eines Projekts zur Erstellung eines computergesteuerten Roboters verbirgt.9 Es folgt für alle, die sich mehr für die praktischen Seiten des Themenbereichs Sicherheit interessieren, eine kurze Abhandlung zu der Frage, wie man diesem Problern begegnen kann, wenn man nicht alle LEDs im Rechenzentrum mit Klebeband abkleben will. 5.5 Wie man die Zeigefreudigkeit von LEDs bändigt - und warum es dann doch nicht klappt Die einfachste Lösung für dieses Problem, die auch in der ursprünglichen Forschungsarbeit vorschlagen wurde, ist die Impulsdehnung - eine Praxis, deren Zweck darin besteht, das Blinken einer Anzeige zu verzeichnen, indem man einige der Blinkimpulse verlängert und auf diese Weise eine Wiederherstellung der Daten praktisch unmöglich zu machen scheint. Impulsdehnungsschaltungen sind eine Gmppe relativ einfach stndcturierter Geräte, die die Dauer eines empfangenen H-Signals um eine bestimmte Zeit verlängern. Die meisten einfachen Irnpulsdehner verwenden hierzu einen Kondensator, der durch das Vorhandensein eines Eingangssignals aufgeladen wird und sich dann langsam wieder entlädt. Dieser Kondensator ist über einen binären Diskriminator angebunden; dies ist nicht der Name eines neuen Actionfilms mit austeokahfomischem Hauptdarsteller, sondern ein Gerät, das Analogdaten in ein binäres Ausgabeformat wandelt, indem es einen bestimmten Schwellwert ansetzt: Es wird also für alle Eingangsspannungswerte über n eine bestimmte Spannung, die eine logische 1 repräsentiert, und für alle darunter hegenden Eingangswerte eine der logischen 0 entsprechende Spannung ausgegeben. In diesem Fall dient ein bestimmter Kondensatorladestand als Unterscheidungsschwelle. Sie finden sie unter http://lcamtiif.coredump.cx/robot.txt. 97
Fortgeschrittenere und zuverlässigere Ausfonnungen einschließlich digitaler Schaltungen sind ebenfalls gängig, und sie alle können in Hubs und Switches eingesetzt werden, damit die LEDs auch schön leuchten. Ohne sie würde das mit häufig mehr als 50 Zyklen je Sekunde sehr hochfrequente Blinken angesichts der Trägheit unserer optischen Wahrnehmung normalerweise dazu führen, dass wir die Diode als - wenn auch schwach, so doch konstant - leuchtend wahrnehmen würden. Ein Diskriminator sorgt dafür, dass die LED durch Einsen öfter angesprochen wird als durch Nullen, indem die Impulsdauer der logischen 1 gedehnt wird. So wird die LED heller und blinkt weniger oft. Abbildung 5.7 zeigt das Verhalten eines solchen Irnpulsdehners: Eine einzelne Spitze (logische 1) wird auf die dreifache Länge gedehnt, wohingegen Nullimpulse nicht angerührt werden. Eingabe: 01000 I +5V 0V Zyklen *- Ausgabe: 01000 I I I +5V 0V Zyklen *- Abbildung 5.7 Impulsdehnverhalten (3fach) Da LEDs wie bereits erwähnt in erster Linie der Optik dienen, scheint dies auch ein guter Ansatz zu sein, das Problern der Datenoffenlegung durch Lichtabgabe zu lösen, indem man dem Angreifer nur Rückschlüsse zu bestimmten allgemeinen Eigenschaften des Datenverkehrs gestattet. Auf diese Weise kann der Angreifer maximal ein paar generelle Fakten ennitteln, z. B. wann etwas gesendet wird und wann nicht.10 Was aber auf den ersten Bhck eine gute Lösung zu sein scheint, muss dies nicht immer sein. Betrachten Sie die folgenden Beispieldaten und das entsprechende Signal auf der seriellen Leitung: 10 Dies ist zwar technisch gesehen nach wie vor ein Angriffsszenario in dem Sinne, wie wir es in Kapitel 1 definiert haben, aber es ist deutlich weniger effektiv und praktikabel, denn wir erhalten nur eine grobe Ahnung dessen, was passiert, und keine Kopie der Daten.
5.5 Wie man die Zeigefreudigkeit von LEDs bändigt - und warum es dann doch nicht klappt Daten: 010100100000100001 1000001 1000000 NRZ-Signal: y\z\-j~\ r\ r~\ r~\ Angenommen, das Signal wird durch einen 5fach-Irnpulsdehner verarbeitet, der jede 1 um fünf zusätzliche Zyklen verlängert. (Die Autoren der Forschungsarbeit halten eine Verlängerung um den Faktor 2 für ausreichend, aber wir wollen es an dieser Stelle der Veranschaulichung wegen ein wenig übertreiben.) Ursprungssignal: j\/\-y\ r\ r~\ r~\ Mit Impulsdehnung (5x) bearbeitetes Signal: J \J \J V_ Daten, die sich über die LED nach der Dehnung ablesen lassen: 01111111111011111111111011111100 Es hat zwar den Anschein, als wären fast alle wichtigen Infonnationen im Vergleich zum Eingangssignal, das wir abfangen wollen, verloren gegangen, aber es lässt sich doch eine Menge davon wiederherstellen. Hierzu sind vier wichtige Beobachtungen erforderlich: ■ Es ist ersichtlich, dass alle Bereiche in der impulsgedehnten Ausgabe, die 0 sind, auch im Originalsignal 0 gewesen sein müssen. ■ Jeder gedehnte Einserbereich muss von einer 1 an der Anfangsposition im Originalsignal ausgelöst worden sein. ■ Jede Folge von m Einsen muss ursprünglich mindestens eine 1 für alle n Zyklen enthalten haben, wobei n der Dehnungsfaktor der Schaltung ist; andernfalls gäbe es Lücken in der Folge. Die Anzahl der Einsen in einem Datenblock, der in der Ausgabe von einer Folge von Einsen dargestellt wird, muss größer als oder gleich dem aufgerundeten Ergebnis von m + n sein. ■ Jede Folge endet nach exakt n — 1 Nullen im UrsprungsdatenstroHi. Wir wissen, dass diesen Nullen eine 1 vorangegangen sein muss, weil die Folge andernfalls früher geendet hätte. Wenn wir diese Erkenntnisse auf das vorherige Beispiel anwenden, können wir den größten Teil der Daten wie folgt rekonstruieren: 99
5 Blinkenlichten Ausgabe des Impulsdehners: J \J \J V_ 01????1000001??7? 710000011000000 * 1 ' x Hier steht mindestens eine 1 Im vorherigen, recht realistischen Beispiel gingen weniger als 9 von 32 Datenbits aufgrund der Impulsdehnung verloren und lassen sich nachfolgend nicht mehr rekonstruieren. (Die verlorenen Bits sind in der Grafik als Fragezeichen dargestellt.) Auf diese Weise haben wir 99,999988 Prozent des potentiellen Suchraums wiederhergestellt. Die restlichen Daten müssen wir erraten, was (insbesondere, wenn die erschnüffelten Daten einen normalen Text - z. B. eine E-Mail - darstellen) im Vergleich zu unserem Ausgangspunkt relativ einfach ist. Die Autoren der Forschungsarbeit waren der Ansicht, dass Werte von 1,5 oder 2 für n ausreichend wären, um die Daten zu verschleiern; das rnuss aber nicht unbedingt der Fall sein. Das obige Wiederherstellungssystem funktioniert bei gedehnten Nullen oder Einsen gleichermaßen. Manche Leitungsverbindungen verwenden RZ-Kodierangen (Retum-to-Zero), die der weiter oben beschriebenen Manchester-Kodierung ähneln. Weil sich das Signal hier kontinuierlich ändert, kann die zweifache Dehnung in der Tat ausreichend sein, um alle Daten zu verschleiern. Dies trifft aber nur zu, wenn die LED von einem Signal „angestoßen" wird, welches vor der ersten internen Dekodierung nach NRZ hegt; das aber ist in den meisten Situationen nicht der Fall. Tatsächlich ist die Anwendung der Impulsdehnung auf RZ-kodierte Signale meist eine recht alberne Idee, weil die LED dann konstant leuchten würde; aufgrund dessen scheint es relativ zwecklos zu sein, dies als erstes zu tun. Wie bereits oben erwähnt, ergibt sich ein weiteres Problern aus der Qualität des Impuls- dehners und seiner Anfälligkeit gegenüber Störeinflüssen, die von anderen internen Schaltungen stammen: Schwankungen der LED-Spannungen, die zu leichten Helligkeitsänderungen während einer Dehnungsperiode führen, können ebenfalls gewisse Informationen preisgeben. Dies gilt insbesondere für kondensatorbasierte Lösungen. Deswegen können einige Systeme - und hier besonders Ethemetgeräte, die das Impulsdehnungsprinzip bekanntennaßen einsetzen - teilweise für Angriffe anfällig sein, obwohl die schon mehrfach erwähnte Arbeit die Ansicht vertritt, dass es keine direkte Verbindung zwischen den übertragenen Daten und dem Verhalten einer LED gibt (diese Annahme fußte auf Beobachtungen eines aufgezeichneten Blinkmusters, die mit einem Oszilloskop gemacht wurden). Insbesondere bei anderen Kodieningstypen oder dann, wenn die Impulsdehnung aus einem anderen Grund nicht wünschenswert ist (weil der Entwickler etwa verhindern will, dass die LED flu- die Dauer der Übertragung kontinuierlich leuchtet), besteht die optimale Lösung darin, die Leitung mit einer relativ niedrigen Frequenz von vielleicht 20 Hz abzutasten und den Abtastwert in einem Register zu speichern, wo er verbleibt, bis der nächste Wert ermittelt und gespeichert wird. Genau dieses Register steuert dann die LED-Anzeige. So, und ab jetzt wird wieder Klartext geredet. 100
5.6 Denkanstöße 5.6 Denkanstöße Neben den LEDs von Netzwerkgeräten lassen sich andere - viele andere! - gleichennaßen interessante Szenarien finden, bei denen Informationen durch Lichternission preisgegeben werden, auch wenn der Urnfang dieser Informationen erheblich geringer sein kann. Beteachten wir etwa Festplattenaktivitätsanzeigen. Natürlich verwendet die Festplattenkommunikation keine serielle Signalisierung; vielmehr werden Datensegmente, die von einzelnen Bytes bis zu 32-Bit-Wörtern reichen, gleichzeitig über eine Anzahl Signalleitungen übertragen. Und obwohl die LED normalerweise so angeschlossen ist, dass lediglich der Zustand einer speziellen Steuerleitung angezeigt wird, ist es nichtsdestoweniger möglich, viele Aspekte der Systemaktivitäten abzuleiten, indem man Zugriffszeiten oder die Menge der geschriebenen oder gelesenen Daten ermittelt. (Je nachdem, wie die LED angeschlossen ist, lassen sich entweder einer dieser Werte oder sogar beide messen.) Obwohl es unwahrscheinlich ist, dass diese Information einem Angreifer einen direkten Vorteil verschaffen würde, lassen sich bestimmte externe I/O-Aktivitäten mit Beobachtungen der Festplattenaktivitätsanzeige kombinieren und so interessante Schlussfolgerungen ziehen. (Mir sind allerdings keine Forschungen in dieser Richtung bekannt.) Andere potenzielle Angriffssituationen beziehen sich auf USB-Geräte und andere proprietäre Schnittstellen. Wie bereits erwähnt, ist USB ein serieller Bus, und es gibt USB-Geräte, die Aktivitätsanzeigen aufweisen. Es gibt verschiedene weitere ungewöhnliche und rätselhafte Enthiülungsszenarien, die angedacht und teilweise erforscht, zumindest aber ausprobiert wurden. Hierzu gehört das Messen akustischer Effekte beim Neuladen von Kondensatoren, wenn die CPU verschiedene Leistungsebenen abhängig von der ausgeführten Anweisung benötigt11, oder das Vermessen einer Blackbox durch Analyse ihrer Leistungsaufnahme rnithilfe der statistischen Analyse.12 Auch hier wurden noch keine umfassenden Forschungen zu den Enthüllungskanälen durchgeführt (wenn man mal vom klassischen Beispiel - der Messung der Abstrahlung elektromagnetischer Felder - absieht). Dies scheint also ein durch lohnens- werter Ansatz zu sein. Ich wünsche Ihnen dabei recht viel Glück. :-) 11 Sham04 12 KochOO 101
6 Echos der Vergangenheit Sechstes Kapitel. In welchem wir anhand eines skurrilen Fehlers in Ethernet lernen, wie wichtig es ist, deutlich zu sprechen Im vorherigen Kapitel haben wir die Grundlagen der Ethernetkonununikation angerissen. Diese scheinbar narrensichere und dabei überraschend simple Methode ist offensichtlich nicht in der Lage, schwerwiegende Sicherheitsprobleme zu vemrsachen - vielleicht mit Ausnahme eines potenziellen Missbrauchs der Vertrauensbeziehung, der durch das reguläre Versenden der Daten an alle Punkte im Netzwerk (Broadcasting) möglich wird. Dies ist eine wohlbekannte und wohlverstandene Eigenschaft von Ethemetnetzwerken; entsprechende Abhilfernaßnahmen sind unter anderem der Einsatz von Switches und Bridges und die Netzwerksegmentierung. Nichtsdestoweniger äußert sich dieser Aspekt auf völlig unvorhergesehene Alt und Weise. Das hegt in erster Linie an der unglücklichen Wahl der Wörter (bzw. an ihrem Fehlen) in den offiziellen Implementierungsanforderungen für Ethemettreiber. Folge ist ein weitverbreitetes Implementiemngsproblem, das inzwischen ein solches Ausmaß erreicht hat, dass es ein eigenes Kapitel in diesem Buch verdient hat. In diesem Kapitel erläutern wir eine interessante Fallstudie dieser Klasse von Problernen, an denen niemand schuld sein will. 6.1 Der Turmbau zu Babel Das Ethernetprotokoll stellt alle erforderlichen Mittel zur Verfügung, um Bytes über eine Leitung zu verbreiten, nämlich ein rnaschinennahes Datenkodiersystern und ein Datenfor- rnat, das einen Teil der Daten aufnehmen kann. Der Ethemet-Frarne enthält Versandanweisungen (d. h. wer die Daten sendet und wer als Empfänger vorgesehen ist) sowie eine kurze Beschreibung des gekapselten Datentyps. Weitere Methoden zur Fehlererkennung sind ebenfalls vorhanden. Der gesamte Frame wird dann an alle Systeme (einschließlich des 103
6 Echos der Vergangenheit potenziellen Empfangers) geschickt. Funktionalitätsseitig ähnelt Ethernet den Datenkapselungssystemen über verschiedene Medien oder in verschiedenen Anwendungen wie etwa Frame Relay, ATM (Asynchronous Transfer Mode), PPP (Point-to-Point Protocol) usw. Die Frage lautet: Welche Daten sollten durch einen solchen Ethemet-Frame übertragen werden? Computer verwenden Hunderte von Formaten und Anwendungsprotokollen und können unterschiedlichste Anwendungen von Netzwerkspielen und Chat-Clients bis hin zu wissenschaftlichen Simulationen ausfuhren. Aufgnind dessen ist es zwar möglich, aber nicht sinnvoll, die Daten für einen entfernten Empfänger einfach in einem Ethemet-Frame zu kapseln, denn der Empfänger würde gar nicht wissen, was er mit ihnen anfangen sollte: Handelt es sich um eine eingehende E-Mail? Ein Bild aus dem Internet? Oder vielleicht doch Konfigurationsdaten? Man weiß es nicht so genau. Die Unterscheidung wird zudem durch die Tatsache erschwert, dass ein normaler Computer eine Vielzahl von Programmen praktisch zeitgleich ablaufen lässt. Ethernet wirft aber noch ein anderes Problem größeren Ausmaßes auf: Wie erreicht man den Gegenüber? Das Broadcasting von Daten an alle Punkte im lokalen Netzwerk ist einfach; was aber, wenn das andere System - der Punkt, den einer der lokalen Benutzer zu erreichen hofft - gar nicht lokal ist? Was, wenn er über ein WAN (Wide-Area Network) erreicht werden muss und ein ganz anderes Sicherungsschichtprotokoll verwendet? Sogar dann, wenn wir einen Weg finden, die Daten jenem entfernten Empfänger zukommen zu lassen, bleibt doch eine grundlegende Frage: Wie muss das Paket adressiert werden? Ethernet verwendet ein eigenes, spezielles Adressierungsscherna. Hosts werden anhand ihrer theoretisch eindeutigen Hardwareidentifikationsnurnmer - der MAC-Adresse (Media Access Control, Medienzugriffssteuerung) - kontaktiert, die vom Hersteller in jeden Ethernetadapter fest eingebrannt wird. Diese Adressen sind nur für Ethernet von Bedeutung; für andere Netzwerktypen spielen sie keine Rolle und sind zudem weitgehend ungeeignet, eine Hardwarekornponente zu orten, sofern Sie nicht gerade Zugriff auf die lokale Konfiguration haben. Hierdurch entsteht ein Problem mit der Vertrauenswürdigkeit: Wer beispielsweise hat eine Karte mit der MAC-Adresse 00:0D:56:E3:FB:E4 gekauft, und wo befinden sich Karte und Käufer jetzt? Können Sie wirklich darauf bauen, dass Sie es mit dem ursprünglichen Käufer und nicht mit einem Betrüger zu tun haben? Maschinennahe Adressierungsschernata wie dieses sind für die Weiterleitung von Daten zum Empfänger normalerweise unbrauchbar, sofern die Hardware mit der jeweiligen MAC-Adresse nicht direkt an das physische Netzwerk des Absenders angeschlossen ist. Es gibt keine Möglichkeit, eine physische Gerätekennung einem Punkt auf diesem Globus direkt zuzuordnen und daraus einen Pfad zu erschließen, der für den Versand der Daten verwendet werden sollte. 6.1.1 Das OSl-Modell Die Protokolle der Sicherungsschicht wurden entwickelt, um die Kommunikation zwischen lokalen Knoten bzw. - in Extremfällen - zwischen zwei festen Endpunkten einer gemeinsamen Verbindung zu ermöglichen. Um Netzwerkverbunde zu ermöglichen und 104
6.1 Der Turmbau zu Babel einige praktischere Anwendungen von Netzwerken praktikabel zu machen, wurde eine hierarchische Struktur der Netzwerkprotokolle entwickelt: das OSI-Modell. Das in Abbildung 6.1 gezeigte OSI-Modell (Open Systems Interconnection) definiert die physische Verbindungsebene (oder Bitübertmgungsschicht) als unterste Schicht und setzt Funktionen höherer Ebenen darauf auf. Protokolle auf Leitungsebene bilden die zweite Schicht (Sichemngsschicht) und sind erwartungsgemäß als Möglichkeit definiert, mit anderen lokalen Knoten zu kommunizieren, die dieselbe physische Verbindung nutzen. Diese Protokolle übertragen übergeordnete, nicht leitungsspezifische Protokolldaten, die der dritten Schicht des Modells - der Vennittlungsschicht - entstammen. Das IP-Protokoll (Internet Protocol) ist das wohl bekannteste Beispiel für ein solches Protokoll. Ethernet-Frame (Schicht 2) ^ rj) <Ü c5 3 1.1« IP-Paket (Schicht 3) I TCP/UDP-Paket (Schicht 4) Kontextkennung. Prüfsumme Anwendungsprotokolle (Schicht 7) NUTZDATEN Abbildung 6.1 Physisches Datenlayout im OSI-Modell (Beispiel) Die dritte Schicht vermittelt Informationen über das allgemeine Wesen des Datenverkehrs sowie universelle Kennungen von Ursprung und Endziel der Daten. Hier kommt eine netzwerkspezifische Adressierung zum Einsatz, die das Routing des Pakets erleichtert. Anders als bei Protokollen der zweiten Schicht werden die Daten der dritten Schicht unterwegs nicht gelöscht oder modifiziert und enthalten auch keine leitungsspezifischen Merkmale wie MAC-Adressen, CSMA/CD-Zusatzdaten usw. Die vierte Schicht stellt ein Vehikel zur Herstellung bestimmter KoHimunikationskanäle zwischen Endpunkten bereit, beginnend und endend auf einem gegebenen System. Auf diese Weise wird eine Möglichkeit zur gleichzeitigen Kommunikation mehrerer Typen und Kanäle vermittelt. Keines der Protokolle der vierten Schicht muss von Zwischensystemen verstanden werden, damit die Daten ordnungsgemäß beim Empfanger ausgehefert werden können. Die Pakete werden nur vom endgültigen Empfänger interpretiert, der anhand inner bestimmt, welche Anwendung die Daten erhalten soll und wie sich das Datensegment zu den benachbarten Paketen verhält. Die nächsten Schichten des OSI-Modells sind wahrscheinlich weniger interessant und verschmelzen tendenziell miteinander. Die fünfte Schicht soll Verlässhchkeitsfunktionen bereitstellen, die häufig entweder in den Protokollen der Schicht 4 wie etwa TCP/IP (Transmission Control Protocol/Intemet Protocol) oder auf Anwendungsebene vorhanden sind. In 105
6 Echos der Vergangenheit manchen Fällen sind sie noch nicht einmal implementiert (nämlich dann, wenn eine zuverlässige Kormnunikation gar nicht erforderlich ist). Die sechste Schicht bietet „Bibliotheksfunktionen" wie etwa Entkomprimiemng und Dekodierung der Daten und wird wie auch Schicht 5 vorzugsweise über Funktionen auf der Anwendungsebene realisiert. Die siebte Schicht schließlich ist die Anwendungsschicht. Hier werden die Daten in ein spezifisches Format übertragen. Beachten Sie, dass die oberen Schichten des OSI-Modells unabhängig von den unteren Schichten sind, denn sie beziehen sich auf die übertragenen Daten. Zum betreffenden Zeitpunkt lassen sich die unteren Schichten nach und nach entfernen, ohne dass die Daten oder die Fähigkeit, sie weiterzuverarbeiten, verloren gehen. Die zweite Schicht wird bei jedem Zwischensystem verworfen und neu erstellt, die dritte lässt sich entfernen, sobald die Daten beim Zielsystem angekommen sind. Schicht 4 wird vor dem Übergeben der Daten an die Clientanwendung gelöscht. Die Vermittlungsschicht (Schicht 3) bleibt normalerweise vollkommen unabhängig vom darunter vorhandenen Sicherungsschichtprotokoll; sie enthält vollständige Angaben zu Absender und Empfänger, einen Mechanismus für den Integritätsschutz (Prüfsurnmenbil- dung) und Informationen zur Größe der übertragenen Nutzdaten. Dies ist genau das, was IPtut. Eine wichtige Auswirkung dieser Konstruktion besteht darin, dass alle überflüssigen Daten, die während des Transports in Schicht 2 an das Paket angehängt werden, die Alt und Weise, wie der Adressat die IP-Angaben interpretiert, nicht beeinträchtigen. 6.2 Der fehlende Satz Im vorigen Kapitel erwähnte ich bei der Beschreibung von Ethernet eine interessante Anforderung, die sich aus der Notwendigkeit ergibt, den Jam-Code im Falle einer Kollision zuverlässig im Netzwerk verschicken zu können: die Mindestlänge eines Ethemet-Frames. Diese Anforderung wurde auch Bestandteil der offiziellen Kapselungsspezifikationen für IP über Ethernet (z. B. RFC1042, „A Standard for the Transit of Internet Protocol Da- tagrarns Over IEEE 802 Networks"1), die vorsehen, dass Frames, die die erforderliche Mindestlänge unterschreiten, aufgefüllt werden. Dieses Auffüllen (auch Padding genannt) kann nach Bedarf aus gefühlt werden und wirkt sich nicht auf die in der IP-Schicht übertragenen Daten aus, da sich die in den IP-Headem angegebene Paketlänge nicht ändert. Insofern werden die Fülldaten vom Empfänger nicht als Teil der Daten übergeordneter OSI- Schichten interpretiert. Es gibt allerdings ein kleines Problern: Zwar erfordert der RFC das Auffüllen der Daten mit Nullen, er gibt aber nicht an, wer die Fülldaten richten oder einfügen und auf welcher Softwareebene das Auffüllen erfolgen soll. Die Notwendigkeit, dass die Fülldaten einen Post88 106
6.2 Der fehlende Satz bestimmten Wert haben müssen, ist auch eine Anforderung, die ihrem Wesen nach ziemlich willkürlich ist. Insofern wird ihr keine Aufmerksamkeit zuteil: Hätten sie andere Werte, dann würde sich das nicht auf die Funktionsweise des Protokolls auswirken, weil die überzähligen Daten beim Empfang einfach verworfen werden. Um die Verwirrung noch zu steigern, bieten viele Netzwerkkalten eine so genannte Auto- padding-Funktion, die vom Betriebssystem an die Hardware gesendete Pakete ergänzt, wenn diese zu kurz geraten sind; die Funktion prüft aber nicht den eigentlichen Inhalt der Fiüldaten, wenn das erforderliche Auffüllen bereits softwareseitig erfolgt ist. Dies hat auf- seiten einiger Entwickler zu viel Konfusion gefühlt, denn diese entschieden, dass die Größenanforderung zu beachten sei, und änderten die Größe eines Pakets in der Software, indem sie einfach die deklarierte Länge erweiterten. Häufig bemerkten sie nicht, dass die Daten zwischen dem Ende des IP-Pakets und dem des aufgefüllten Frames weder vom Treiber noch vom Betriebssystem oder der Hardware initialisiert (d. h. auf 0 gesetzt) wurden. Dieser Umstand blieb jahrelang weitgehend unbemerkt, obwohl er eine knifflige Frage aufwarf, die Netzwerkhacker regelmäßig in den Wahnsinn trieb: Die Pakete, die sie aus lokalen Systemen abriefen, enthielten an ihrern Ende häufig eine Menge irrelevanten Datenmülls wie etwa Fragmente von Webseiteninhalten oder sogar Chatprotokollen. Die Hacker machten die Ernpfängerseite dafür verantwortlich - Hardware, Anwendungen zur Datenverkehrsanalyse oder Bibliotheken seien fehlerhaft -, aber schließlich gaben sie es auf, nach der Ursache zu suchen, denn die Relevanz dieses Sachverhaltes war vemachlässigbar. Und so erhielt das Problern niemals die Aufmerksamkeit, die es eigentlich verdient hätte. Zumindest nicht, bis Ofir Arkin und Josh Anderson von @Stake sich die Sache genauer ansahen. Ihr im Jahr 2003 erschienener Beitag „EtherLeak: Ethernet Frame Padding Information Leaks"2 untersucht diesen Aspekt im Detail. Die Autoren stellten fest, dass bei einer großen Zahl mai'ktfuhrender Systeme - z. B. Linux, NetBSD, Microsoft Windows und anderen Plattformen - am Ende eines neu erstellten Ethemet-Frames keine Initialisierung des Speichers durchgeführt wird, nachdem seine Länge geändert wurde. Einigen Implementierungen gelingt es noch nicht einmal, die Größe des Frames korrekt abzuändern oder eine passende Anzahl von Bytes an die Hardwareschicht zu senden. Aufgrund dessen wird das IP-Paket mit den Daten aufgefüllt, die gerade im betreffenden Bereich des Systemspeichers vorhanden sind und zuvor eigentlich für andere Zwecke dort abgelegt wurden. Der Speicher kann also je nach Treiber oder Betiiebssystem entweder einen Teil eines zuvor gesendeten Pakets oder ein anderes Fragment des Kernel-Speichers enthalten. Und an dieser Stelle entsteht ein faszinierendes Datenenthiülungsszenario: Ein Angreifer sendet unscheinbare und zulässige Daten an das Opfer und erhält mit etwas Glück potenziell sensible Daten zurück. Der Umfang der preisgegebenen Daten ist in der Regel ausreichend, um Besorgnis auszulösen. Die Schwachstelle beschränkt sich auf ein einzelnes Ethemetnetzwerk und ist insofern örtlich relativ beschränkt und in einer typischen LAN-Umgebung unkritisch. Es bleibt aber 2 Ai-ki03
6 Echos der Vergangenheit ein Problem von einiger Bedeutung, und auch wenn jedes lokale Netzwerk teilweise anfällig flu- Schnüffeleien ist, so gestattet dieses Problern doch einige Schlussfolgerungen, die über den Rahmen des Offensichtlichen hinausgehen: ■ Bei Systemen, die für Ethernet-Frames dynamische Puffer verwenden (z. B. Linux), können in den Fülldaten nicht nur Teile des vorherigen Frames auftauchen, sondern auch Fragmente anderer Speichelinhalte, z. B. angezeigte oder bearbeitete Dokumente, URLs, Passwörter oder andere sensible Daten. In diesem Fall kann ein sorgfältiger Beobachter unter Umständen auf Informationen zugreifen, die sich auf andere Weise nicht im Netzwerk erschleichen lassen. ■ Bei Systemen, die statische Puffer nur zur Vorbereitung der Ethernet-Frames verwenden, lässt sich das Problem nutzen, um in Systeme einzudringen, die gegen Sniffer geschützt sind (z. B. Switches). Auf diese Weise kann der Angreifer Daten einer anderen Verbindung abfangen. ■ Bei bestimmten statischen Pufferkonstruktionen werden unter Urnständen Daten eines anderen Segments auf einem Multihoming-System offengelegt, dessen eine Schnittstelle an ein allgemeines LAN angeschlossen ist, während die andere mit einem eingeschränkten Netzwerk verbunden ist. Auf diese Weise gelangen Teile möglicherweise geheimer Daten in die öffentliche Infrastruktur. Die Autoren des Dokuments haben verschiedene Open-Source-Implementienmgen umfassend überprüft und festgestellt, dass eine Vielzahl von Ansätzen und Pufferentwürfen eingesetzt wird und dass es kein vorherrschendes Reservierungs- und Verwendungskonzept für Puffer gibt. Und was schließen sie daraus? Dass eine typische Netzwerkumgebung früher oder später von allen drei Problerntypen betroffen sein wird. 6.3 Denkanstöße Das hier beschriebene Problem ist für Ethernet und für das Netzdesign nicht ungewöhnlich: Solche Fälle treten meistens auf wenn eine ansonsten sehr detaillierte Implementierungsdokumentation einen erforderlichen Schritt auslässt oder nur ungenau beschreibt. Viele Entwickler übersehen das Problem bei der Implementierung des Standards schlichtweg. Wären rnehr derartig schwammige Anweisungen vorhanden, dann wäre ein Entwickler wahrscheinlich gezwungen, über das Problem nachzudenken; stattdessen implementiert er einfach Schiittanleitungen, weswegen er weitaus anfälliger dafür ist, einen Fehler zu begehen. „Narrensichere" Anweisungen, die beschreiben, wie bestimmte Aufgaben durchzuführen sind - und nicht, welche Ziele erreicht werden sollen -, gehen oft nach hinten los. Wir werden - wenn auch in einem etwas anderem Kontext - in Teil ZU dieses Buches noch einmal auf das Problem protokollspezifischer Datenlecks zurückkommen. 108
7 Sicherheit in geswitchten Netzwerken Siebtes Kapitel. In welchem wir auch erfahren, warum Ethernet-LANs nie richtig in Ordnung gebracht werden können - egal, wie sehr man es auch probiert Ememetnetzwerke bieten keine einfache und universelle Möglichkeit, die Integrität oder Vertraulichkeit der übertragenen Daten zu gewählleisten, und sind auch nicht so konstruiert, dass sie bösartigen, gezielt eingespeisten Datenverkehr abwehren. Ethernet ist lediglich Mittel zu dem Zweck, eine Anzahl lokaler, mutmaßhch vertrauenswürdiger Systeme aneinander anzubinden. Ein solches Maß an Vertrauen ist in der Planungsstufe wahrscheinlich angemessen und für Peer-Systeme im selben Netzwerk (und meist auch am selben physischen Standort) theoretisch ausreichend. Aber wie sagt das alte Sprichwort: Theoretisch gibt es keinen Unterschied zwischen Theorie und Praxis. In der Praxis aber sieht das ganz anders aus. Wie sich zeigt, ist eine vollständige Kontrolle lokaler Netzwerke schwierig, und sie müssen vor ihren eigenen Benutzern ebenso geschützt werden wie vor externen Bedrohungen. In jedem expandierenden LAN wird - egal ob intern oder von außen - früher oder später ein Schurke auftauchen, der einen Fehler an einem der Systeme auszunutzen versuchen wird. Das Auftreten einer solchen Schwachstelle ist nur eine Frage der Zeit - das muss jeder Netzwerkadministrator irgendwann einmal erfahren. Praktische Netzwerksicherheit geht weit über das Hochziehen von Verteidigungseinrichtungen am Rande des Netzwerks hinaus: Es ist die Kunst, sicherheitsrelevante Vorfälle erkennen, Angriffspunkte ininiinieren und die Risiken auf allen Ebenen bewerten und verstehen zu können. Welches Problem stellt sich? Eine ungeschützte Ememetinfrastruktur ist anfällig für alle Arten von Datenklau, Überfällen und Fällen von Identitätsübemahme: Wenn ein Angreifer oder ein zulässiger, aber böswilliger Benutzer nach Durchbrechen der 109
7 Sicherheit in geswitchten Netzwerken einzigen Verteidigungslinie ein einzelnes System im Netzwerk in seine Gewalt bringen kann, dann kann er die gesamte Infrastruktur minieren und mit minimalem Aufwand auf bestimmte Ressourcen und Dienste zugreifen oder diese übernehmen. 7.1 Ein wenig Theorie Ethernet-Switches könnten eine Lösung für dieses Problem darstellen. Es handelt sich dabei um eine Gattung cleverer Geräte, die dafür sorgen, dass Unicast-Daten in der zweiten OSI-Schicht an den passenden Port statt - im Broadcasting-Verfahren - an alle Knoten weitergeleitet werden (wie es bei Hubs oder Direktverbindungen der Fall ist). Viele Leute glauben, dass Switches die sicherheitsspezifischen Probleme lösen könnten, die mit der Fähigkeit in Verbindung stehen, von einem System aus Daten Dritter zu beobachten oder zu rauben; dies stimmt aber nicht. Die Lösung ist nicht so einfach, und die Verwirrung, die diese Fehlannahme auslöst, verursacht oft so viel Schaden, dass die Vorteile der Verwendung von Switches rnehr als ausgeglichen werden. Aber wir wollen uns zunächst den wichtigen Dingen zuwenden. Um die Bedrohung zu verstehen, müssen wir erst einmal begreifen, wie Ethernet-Switches wirklich funktionieren. 7.1.1 Adressauflösung und Switching Die gesamte Kommunikation innerhalb eines lokalen Netzwerks basiert auf dem in Kapitel 5 beschriebenen Adressierungsscherna. Eindeutige Kennungen, die Endpunktkomponenten von den Ffardwareherstellem zugewiesen werden, dienen zur Kontaktierung von Systemen und zur Auslieferung von Daten-Frames. Allerdings sind das Internet und die Mehrzahl modemer privater Netzwerke um eine flexiblere und universellere Protokollsuite hemm aufgebaut und verwenden ein Adressierungssystern in der dritten OSI-Schicht: die so genannten IP-Adressen. Die IP-Adresse wird in erster Linie zur Lenkung der Daten über die ganze Welt hin zu einem passenden lokalen Netzwerk verwendet. Hierbei kommt eine Hierarchie von Routing-Tabellen auf Mittels Systemen zum Einsatz, die auf dem gesamten Globus verteilt sind: Erst dann, wenn das Paket den Rand des Zielnetzwerks erreicht, muss der endgültige Empfänger auf althergebrachte Weise - durch Nachschlagen der Hardwareadresse - angesprochen werden. Wenn ein System im lokalen Netzwerk beschließt, einen anderen lokalen Punkt über eine bestimmte IP-Adresse anzusprechen, dann bestimmt es mithilfe eines speziellen Adress- auflösungsprotokolls - des ARP-Protokolls (Address Resolution Protocol) - die Verknüpfung zwischen der physischen Adresse einer Netzwerkkalte (der Basis für Adressierungssysteme im lokalen Netzwerk) und der universellen Systemkennung für das Internet, nämlich der IP-Adresse.1 Der Absender sendet dazu eine ARP-Abfrage an eine spezielle Broadcast-Adresse im lokalen Netzwerk. Diese reservierte Adresse ist für alle Systeme im Pluin82 110
7.1 Ein wenig Theorie Netzwerk garantiert erreichbar und funktionsfähig - unabhängig davon, welche Hardwareadresse den einzelnen Knoten zugewiesen ist. In diesem Szenario wird erwartet, dass das System, welches annimmt, das Recht zu Verwendung der in der Abfrage angegebenen IP- Adresse zu haben, eine Antwort an den Absender schickt und darin seine Hardwareadresse angibt; alle anderen Punkte sollten das empfangene ARP-Paket stillschweigend ignorieren. Nach diesem Datenaustausch kennen die beiden beteiligten Parteien die IP- und MAC- Adressen des jeweils anderen. Sie sollten die Ergebnisse nun in einem speziellen Puffer ablegen, damit nicht jedes Mal, wenn ein neuer Datenaustausch stattfinden soll, der gesamte Abfragevorgang aufs Neue erfolgen muss, und dann mit der eigentlichen Kommunikation fortfahren; im Gegensatz dazu tauschen sie jedoch einige Pakete basierend auf der IP- Adressierung aus. Dieser Aufbau ist ein wunderbares Beispiel althergebrachter Gutgläubigkeit und Liebenswürdigkeit. Was aber kann man nun tun, um die Gefährdung durch einen bösartigen Zuschauer im selben Netzwerk, der jemand anderes zu sein vorgibt, zu verringern? Und wie verhindert man, dass neugierige Benutzer oder üble Gegenspieler zu weit gehen? Die Hersteller von Ethemethardware haben den Netzwerkadministratoren einen Bärendienst erwiesen, indem sie eine Änderung der MAC-Adresse bei den meisten gängigen Geräten zum Kinderspiel gemacht haben - wohl um eine Neuprograrnrnierang für den Fall zu ermöglichen, dass eines Tages doch einmal eine Chaige Netzwerkkalten das Werk verlässt, deren Adressen bereits vergeben waren. Auch in diesem Fall scheinen Switches das Problem zu lösen. Das Grundkonzept eines intelligenten Switchs basiert darauf, den MAC-Adresscache auf der Ebene eines zwischen- geschalteten Netzwerkgeräts zu duplizieren. Ein Switch ist mit zahlreichen Ethemetports ausgestattet, an die jeweils ein System (oder manchmal auch eine Gruppe von Systemen) angeschlossen ist. Statt aber wie ein tumber Repeater zu arbeiten, der alle an einem Port empfangenen Daten über alle anderen Ports weiterleitet (wie Ethemet-Hubs es tun), versuchen Switches, sich die MAC-Adressen der Systeme zu merken, die an die einzelnen Ports angeschlossen sind, und erstellen auf diese Weise MAC-Port-Zuordnungen (im Gegensatz zu den MAC-IP-Verknüpfungen, die von Endpunktsystemen erzeugt werden). Die Daten, die im CAM (Content Addressable Memory, Assoziativspeicher)2 abgelegt sind, bestimmen, wohin die eingehenden Pakete weitergeleitet werden. Wenn Daten ankommen, versucht der Switch zu ermitteln, an welchem Port der Adressat hängt. Sobald diese Angabe verfügbar ist, wird das Paket direkt an den betreffenden Port (und nur dorthin) weitergeleitet; andere Ports bekommen die Daten nicht zu sehen, was auch die Leistung des Netzwerks optimiert. Wie der Name bereits sagt, lässt sich dieser Speichertyp direkt von dem Parameter adressieren, dessen Wert Sie bestimmen wollen; hierdurch wild Zeit eingespart, die normalerweise fiir die Suche nach dem Parameter benötigt würde. Ein einfaches Beispiel für einen Assoziativspeicher ist ein Bibliothekskatalog: Sie müssen nicht alle Bücher in der Bibliothek durchgehen, um ein bestimmtes zu finden, sondern anhand der Frage, was Sie suchen (ein Inforcnationseleinent zum „Inhalt"), bestimmen, wo Sie suchen müssen. 111
7 Sicherheit in geswitchten Netzwerken 7.1.2 Virtuelle Netzwerke und Datenverkehrsmanagement Einige fortgeschrittenere Switch-Lösungen bieten zusätzliche Funktionen, die die Verwaltung umfangieicher Netzwerke vereinfachen und Kosten und Dauer der Inbetriebnahrne verringern sollen. Diese Funktionen scheinen auch die Netzwerksicherheit zu erhöhen. Im Einzelnen geht es um folgendes: ■ VLAN (Virtual LAN, virtuelles LAN). Dies ist ein generischer Name für eine Reihe von Methoden, mit deren Hilfe ein Pool mit Ports eines physischen Gerätes in eine Anzahl logischer Netzwerke unterteilt wird; hierdurch werden Daten für eine Portgruppe von anderen Daten getrennt, und es wird ein Übergreifen von Daten zwischen diesen beiden Portgruppen auf der Switch-Ebene verhindert. (Dieses System wird meistens unter Verwendung des Standaids IEEE 802. IQ implementiert; siehe auch den nächsten Punkt dieser Aufzählung.) Die Implementienmg eines VLAN ist eine Alt Aufteilung eines einzelnen Switchs in mehrere vollkommen unabhängige Geräte, nur ist die VLAN-Lösung weitaus flexibler und kostengünstiger, denn Sie können Ihr Netzwerk nach Beheben uniformen und physische Ressourcen behebig neu verteilen. VLANs lösten bei Ihrer Einführung allerorten viel Begeisterung unter den Netzwerktechnikem aus, denn sie verhießen eine einfache und doch leistungsfähige Lösung zur Erstellung separater Netzwerke an einem einzelnen Gerät oder zur Trennung der Server von den Workstations - ohne dass man für jede Gruppe einen dedizierten Switch hätte kaufen müssen. ■ Trunking (Bündelung). Das Trunking stellt eine natürliche Erweiterung des VLAN- Grundkonzepts dar. Trunks tunneln mithilfe des Frame-Taggings nach IEEE 802.IQ mehrere logische VLAN-Verbindungen über dieselbe Leitung; auf diese Weise ist der Benutzer nicht gezwungen, getrennte Leitungen für jedes VLAN zu verlegen, das zwei Geräte miteinander verbindet (Abbildung 7.1). Pakete einiger oder aller VLANs am Quell-Switch werden mit einer ausreichenden Anzahl an Attributen oder Tags versehen, um dem Header des Ethemet-Frames das sendende VLAN entnehmen zu können, dann über eine konventionelle Verbindung zum anderen Endpunkt getunnelt, dekodiert und beim Empfönger schließlich wieder auf die einzelnen VLANs verteilt. Durch diese Vorgehensweise wird zwar die Leistung im Vergleich zur Verwendung separater Kabel pro Subnetz verringert, sie ist aber schlicht und einfach praktischer. Trunking-Systeme arbeiten häufig auch mit DTP (Dynamic TrunJäng Protocol). Hierbei handelt es sich um ein Protokoll zur automatischen Konfiguration von Trunks, welches Geräten das selbstständige Ermitteln und Austauschen gekapselter Frames anderer Trunking-fähiger Geräte ermöglicht, ohne dass spezielle Handlungen seitens des Administrators erforderlich wären. 112
7.1 Ein wenig Theorie 802.1Q-Trunk Pakete aus beiden VLANs, gekennzeichnet mit Tags Abbildung 7.1 VLAN-Trunking in Aktion. Die VLANs erstrecken sich über zwei Geräte. Geräte aller Instanzen der VLANs 1 und 2 können jeweils miteinander kommunizieren, ein „Übersprechen" von VLAN 1 in VLAN 2 und umgekehrt ist jedoch nicht möglich. STP (Spanning Tree Protocol). Das STP-Rotokoll gestattet Ihnen die Erstellung redundanter Netzwerkstrukturen, in denen Switches an mehreren Standorten aus Gründen der Fehlertoleranz miteinander verbunden sind. Normalerweise könnten Broadcast- Daten und andere Pakete bei einer solchen Konfiguration in einer Endlosschleife kreisen, weil Daten, die an einer Schnittstelle empfangen und an einer anderen wieder ausgegeben werden, letztendlich wieder beim ursprünglichen Absender landen (Abbildung 7.2, links). Dies würde auch die Netzwerkleistung erheblich beeinträchtigen. Wenn man ein Netzwerk plant, ist es oft schwierig, das versehentliche Erstellen solcher Broadcast-Schleifen zu vermeiden. Auch ist es manchmal wünschenswert, Architekturen mit potenziellen Schleifen zu erstellen, bei denen ein Switch an zwei oder rnehr andere Switches angeschlossen ist, denn ein solches Netzdesign ist wesentlich fehlertole- ranter, und ein einzelnes Gerät oder eine Leitungsverbindung lassen sich herausnehmen, ohne das gesamte Netzwerk in zwei getrennte „Inseln" aufzuspalten. Damit sich Schleifen bilden und andere komplexe Architekturen erstellen lassen, ohne dass es zu schwer-wiegenden Leistungseinbußen kommt, implementiert STP eine Aus- wahlmethode, um einen Switch als „Stamrnknoten" zu selektieren. Auf der Basis der Ergebnisse des Auswahlprozesses wird beginnend bei diesem Stammknoten eine baumförrnige Datenverteilungshierarchie erstellt; Verbindungen, die eine umgekehrte Ausbreitung des Broadcast-Datenverkehrs verursachen könnten, werden vorübergehend deaktiviert (Abbildung 7.2, rechts). Sie können diese einfache, sich selbst organisierende Hierarchie schnell anpassen, wenn einer der Knoten ausfällt, und eine Leitung reaktivieren, die zuvor vielleicht unnötig schien. 113
7 Sicherheit in geswitchten Netzwerken Redundante (fehlertolerante) Switch-Architektur Redundante Architektur mit STP-Wahl Stamm' knoten Abbildung 7.2 Paketsturmproblem und STP-Auswahlsystem: Auf der linken Seite ist ein fehlertolerantes Netzwerk ohne STP abgebildet, bei dem einige Pakete (praktisch) für immer zwischen den Switches kreisen werden. Auf der rechten Seite sehen wir dasselbe Netzwerk, in dem jedoch eines der Geräte durch STP automatisch als Stammknoten ausgewählt wurde und dessen Topologie die Beseitigung von Schleifen gestattet. Fällt eine Verbindung aus, dann lässt sich das Netzwerk umkonfigurieren, um einen korrekten Betrieb zu gewährleisten. 7.2 Angriff auf die Architektur Die bislang beschriebenen Mechanismen wurden für ein Netzwerk, das keinerlei Sicherheitsfunktionen bietet, entwickelt, um die elementaren Komponenten zu optimieren und dabei gleichzeitig eine hohe Leistung zu gewährleisten.3 Während gewisse, häufig auftretende, wohlbekannte und leicht zu verhindernde Angriffe wie beispielsweise das MAC- Spoofing (bei dem ein Angreifer eine ARP-Meldung manipuliert und die Identität eines Geräts mit einer bestimmten IP-Adresse annimmt) weithin als Nachteil der LAN- Technologje anerkannt und mit entsprechend konfigurierten Switches relativ einfach zu umgehen sind, gibt es andere gravierende Mängel, die weniger trivial und auch nicht ganz so einfach abzustellen sind. Es ist nicht immer nachvollziehbar, dass Lösungen, die ge- meinhin als der Sicherheit förderlich angesehen werden, eigentlich gar keine Hilfe darstellen. 7.2.1 CAM-Überlauf und erlauschte Daten Einer der Aufsehen enegenderen Gründe dafür, Switches nicht als Sicherheitsfunktion in Betracht zu ziehen, ist der CAM-Überlauf. Der CAM, der die MAC-Port-Verknüpfungen speichert, hat eine feste und begrenzte Größe und im Allgemeinen einen nichtselektiven Aufbau. Wenn Angaben zu einem System im CAM nicht aufgefunden werden können, hat der Switch nur noch eine Möglichkeit, das Paket auszuliefern: Er rnuss in den Hub-Modus Sene02 114
7.2 Angriff auf die Architektur wechseln und das Paket als Broadcast an alle Systeme weiterleiten - in der Hoffnung, dass der Empfänger die betreffenden Daten als an ihn gerichtet erkennt und dass andere Systeme so nett sind, sie vollständig zu ignorieren. Insofern kann ein sorgfältig arbeitender Angreifer eine Taktik zur Erzeugung einer großen Zahl gefälschter ARP-Abfragen und -Antworten oder einiger anderer Pakete verwenden, die die Identitäten einer Vielzahl anderer Netzwerkgeräte nachahmen - und so den CAM des Switchs bis zum Rand füllen. Sofern dies gelingt, hat der Angriff die Netzwerksicherheit verringert, indem er das intelligente Routing von Frames auf dem Switch außer Gefecht gesetzt und den Switch gezwungen hat, alle Daten wieder als Broadcasts zu senden. Nun kann der Angieifer alle Kornmu- nikationsvorgänge überprüfen - ganz so, als ob im Netzwerk überhaupt kein Switch vorhanden wäre. Er kann dies sogar tun, ohne die Identität des Empfängers anzunehmen oder den Netzwerkbetiieb spürbar zu stören; die Wahrscheinlichkeit, dass das Opfer überhaupt nichts von dem Angriff bemerkt, ist also eher hoch. Dies ist ein strukturelles Problern: Es hegt nicht in einem Mangel bei der vorgesehenen Verwendung dieser Geräte, sondern in einer ebenso weitverbreiteten wie schwerwiegenden Falschauffassung dessen begründet, was Switches eigentlich tun. Und verlassen Sie sich drauf: Es ist in einer gewöhnlichen Umgebung praktisch unmöglich, dieses Problem umfassend zu lösen. Einige Switches implementieren Grenzwerte für Ports und zeitliche Abläufe, um solche Angriffe zu verhindern, aber diese sind nicht hundertprozentig effizient. 7.2.2 Weitere Angriffsszenarien: DTP, STP und Trunks Andere Probleme sind in der Regel einfacher zu vermeiden und für das Opfer leichter festzustellen, veranschaulichen aber trotzdem die ethemetspezifischen Sicherheitsfragen. So stellt etwa ein Angriff auf den bereits erwähnten DTP-Mechanismus eine interessante Möglichkeit dar. Die DTP-Autonegotiation (automatische Aushandlung von Übertra- gungsparametem) ist häufig für alle Ports eines Geräts aktiviert, um die Einrichtung zu vereinfachen. Das Problem besteht nun darin, dass der gewiefte Angieifer vorgeben kann, ein Trunking-fähiger Switch (statt nur eine einfache Workstation oder ein profaner Server) zu sein. Sobald nun der echte Switch das vermeintlich freundlich gesinnte Gerät erkennt, erhält der Angieifer 802. IQ-Frames mit Tags, die Datenverkehr für andere von dem Switch bediente VLANs erhalten; auf diese Weise kann der Ganove Daten abhören oder bösartigen Code in Netzwerke einspeisen, mit denen er eigentlich gar nicht kommunizieren dürfte. In vielen Netzwerken, in denen derselbe Switch sowohl geschützte („entmilitarisierte") Netzwerke als auch die normale LAN-Infrastruktur des Unternehmens verwaltet, lassen sich durch einen solchen Angriff sehr aussagekräftige Daten in Besitz bringen, indem man Systeme in einem der Netzwerke dazu veranlasst, mit dem anderen zu interagje- ren bzw. darin zu schnüffeln. Sie können dieses DTP-Problern bei einigen Geräten lösen, indem Sie die Standardkonfiguration abändern und die dedizierten, Trunking-fähigen Ports des Switchs explizit definieren. Allerdings ist das Problem damit noch nicht vollständig beseitigt: Unser anderer kleiner Helfer - STP - lässt sich auf ähnliche Weise missbrauchen, denn damit kann sich ein Angieifer selbst als Stammknoten auswählen und einen Gutteil der Daten im Netzwerk 115
7 Sicherheit in geswitchten Netzwerken abfangen. In einer typischen Filmenumgebung ist das Deaktivieren von STP unter Umständen noch viel problematischer. Es gibt aber noch ein weiteres Problem, wenn ein Trunk in einem nichtdedizierten VLAN seinen Anfang oder sein Ende nimmt (d. h. der Port, der für das Trunking verwendet wird, befindet sich in einem VLAN, das auch von Workstations benutzt wird). Durch Einspeisen bereits mit Tags versehener Frames lassen sich Daten auch in einen Trunk injizieren. Dies ist zweifelsohne ein Konfigurationsproblem, welches zudem häufig übersehen wird, da viele Techniker annehmen, dass die Methode zur Implementiemng von Trunks weitaus fortgeschrittener und mächtiger ist, als dies tatsächlich der Fall ist. 7.3 Vorbeugung Diese Probleme sind - insbesondere in einem Netzwerk, das nicht während aller Ent- wicklungs- und Expansionsphasen umfassend und genauestens überwacht wurde - häufig schwer zu lösen. Zwar bieten bestimmte High-End-Geräte erweiterte Sicherheitsfunktionen, um potenziellen Angriffsvektoren zu begegnen und einige der Risiken zu lindem oder ganz zu beseitigen, aber sicherheitstechnische Gesichtspunkte spielten bei der Entwicklung von Ethernetnetzwerken eine gelinge Rolle. Dies gilt auch für die intelligenten Geräte, die diese Netzwerke verwalten sollen. Ein Angreifer kann einige dieser Funktionen (oder alle) ausschalten und das Netzwerksicherheitsmodell auf den am wenigsten wünschenswerten Zustand zurückfahren. Zwar gibt es Memoden und rigide Praktiken, mit denen man ein lokales Ethemetnetzweik absichern kann, aber mal ganz abgesehen von der schieren Anzahl der Vektoren machen es die Komplexität dieses Vorgangs und die zusätzlichen finanziellen Aufwendungen und Leistungseinbußen, die er mit sich bringt, offenbar, dass diese Technologie keinesfalls im Hinblick auf praktische Netzwerksicherheit entwickelt wurde. 7.4 Denkanstöße Als Ethernet entwickelt wurde, war es nicht abwegig, Sicherheitsaspekte bei den strukturellen Entscheidungen außen vor zu lassen und die Last der Netzwerkabsicherung höheren Aichitektuien, Verschlüsselungslösungen usw. zu übertragen. Im Laufe der Zeit jedoch hat diese anfängliche Entscheidung immer stärker zu den Waitungsgesamtkosten für Ethemet- netzwerke und zur Schwierigkeit beigetragen, diese einigermaßen angriffssicher zu machen, ohne die Funktionalität umfassend einzuschränken. Das Problem ist auch nicht auf Ethernet beschränkt. Viele Netzwerke, die als vertrauenswürdig auf der Basis von Kriterien des physischen Zugangs bzw. des Hardwarezugriffs entwickelt wurden - beispielsweise auch die Telefonsysteme dieser Welt - sind vom Wesen her und auf nicht beeinflussbare Weise internen Risiken ausgesetzt, und es gibt nur 116
7.4 Denkanstöße wenige oder aber gar keine Möglichkeiten, diese Angriffsflächen klein zu halten und die Kollateralschäden, die die Übernahme nur eines einzigen Systems im Netzwerk mit sich bringt, zu kontrollieren. In dem Maße, wie die Größe von Netzwerken zunimmt und die Anzahl der Austauschmöglichkeiten wächst, nähert sich die Wahrscheinlichkeit, dass ein System von einem Angreifer übernommen wird oder auf der Ebene des physischen oder des Femzugriffs unzureichend geschützt ist, unerbittlich einem Wert von 100 Prozent. Zwar ist es traditionell erforderlich, auf den Backbone (statt auf eine Endbenutzerstation) zuzugieifen, um das System zu übernehmen (weswegen sich die Situation im Vergleich zu Ethernet etwas anders daisteilt), aber heutzutage schwächen VoIP-Systeme (Voice over IP) diese Schwierigkeit ab, denn sie gestatten häufig kinderleichtes Spoofing und andere Tricks, weil sie dem Endbenutzer einfach zu viel Vertrauen entgegenbringen. 117
8 Wir gegen die Achtes Kapitel. In welchem die Frage behandelt wird, was innerhalb der lokalen Grenzen „unseres" Netzwerks passieren kann - und das ist eine ganze Menge LAN-Strukturen wie Token Ring oder das allgegenwärtige Ethernet wurden in der Annahme entwickelt, dass es nicht notwendig sei, die Sicherheit auf der Ebene (bzw. in der Schicht) der zur Übertragung der eigentlichen Daten verwendeten Technologie zu gewählleisten. In der Fnihzeit der Computer wurde von Benutzem, die ein Netzwerk gemeinsam nutzten, Fairplay erwartet. Auch wenn man nur aus diesem Grund annehmen könnte, dass die Entwickler von Ethernet einfach keinen Grund gesehen haben, richtige Sicherheitsfunktionen in der Spezifikation zu implementieren, so muss man ihnen doch ihren ungerechtfertigten Optimismus vorwerfen und kritisieren, dass sie das Unvermeidliche nicht vorhergesehen haben. Ethernet lässt einfach keinen Raum zur einfachen Implementierung von Methoden, mit denen sich Integrität und Vertraulichkeitsgrade in den übergeordneten OSI-Schichten, Geräten und Anwendungen überprüfen lassen und die eine Verifizierung des Absenders erlauben. Folgeprotokolle und Konnnunikationssysteme versuchten, den Datenschutz und ein Mindestmaß an Unbestechlichkeit zumindest teilweise nachzuieichen, scheiterten aber an dem Punkt, an dem man erkannte, dass die Implementierung einer angemessenen Sicherheitsstufe nicht möglich sei, ohne dass man die SicherungsSchicht von Grund auf neu entwickelt. Die einzige andere Möglichkeit, die blieb, bestand darin, rechentechnisch aufwändige und komplexe kryptografische Vehikel auf das System aufzusetzen, deren schiere Komplexität die Anzahl der entdeckten Sicherheitslücken Jahr für Jahr vergrößert. Diese bedauerliche und später halbwegs beabsichtigte Tendenz hat im Endeffekt zur Erstellung von Netzwerkmechanismen geführt, die zwar alle ganz gut funktionieren und halbwegs kostengünstig sind, aber keinesfalls geeignet sind, auch nur einigermaßen sensible Daten zu verwalten, wenn ein feindlich gesinntes Individuum anwesend ist (und in ei- 119
8 Wir gegen die nein LAN sind praktisch alle ausgetauschten Benutzerdaten sensibel). Lösungen, die sich dieser Probleme anzunehmen versuchen - z. B. VPN-Amvendungen (Virtual Private Network, virtuelles privates Netzwerk), eine verschlüsselte Kapselung für einige wenige der verbreitetsten Webprotokolle, fortschrittliche Switches usw. -, sind in der Regel weitaus teurer und vertrackter, als es notwendig gewesen wäre, wäre der Sicherheitsbereich bereits bei der Entwicklung des Grundkonzepts für ein Ethernetkomrnunikationssystem ein Schlüsselfaktor gewesen. Bevor wir an diesem Punkt angekommen waren, lebten wir eine ganze Zeit lang in einer Alt Dämmerschlaf. Als man dann der Realität ins Auge sehen musste, dass mangelnde Sicherheit tatsächlich ein Problem war (zu Zeiten der Intemetexpansion und der plötzlichen drastischen Zunahme von Angriffen auf Systeme), konzentrierten sich die ersten Verteidigungsmaßnahmen auf die Außenwelt und ignorierten dabei die Bedrohungen, die von innen kamen - schließlich war das Netzwerk selbst „vertrauenswürdig". Es sollte aber nicht allzu lange dauern, bis eine Reihe von Unternehmen und Institutionen einige schmerzhafte Lektionen lernen mussten. Im Laufe der Zeit wurde dann offenbar, dass nach außen gerichtete Befestigungen wie Firewalls und Intmsion-Detection-Systeme selbst dann, wenn sie untemehmensweit einwandfrei konfiguriert waren, allein nicht ausreichten. Die Vermitt- lungsschicht war nach wie vor anfällig, denn sie gestattete es internen Benutzern, den Datenaustausch zu gefährden, ohne auch nur eine Sicherheitslücke auf einem einzigen System im Finnennetzwerk auszunutzen. Man könnte nun einwenden, dass das Netzwerk durch Verwendung geeigneter Verschlüs- selungsrnethoden zur Identitäts- und Integritätsverifizierung an allen Schnittstellen gesichert werden könnte; aber das ist oft nicht praktikabel oder gar unmöglich - insbesondere dann, wenn man die Leistung und Zuverlässigkeit des Netzwerks nicht beeinträchtigen und die Kosten niedrig halten will (ganz zu schweigen von Kompatibilitätsproblemen in Zusammenhang mit verschiedenen Betriebssysternen oder Anwendungen). Außerdem ist, wie ich bereits erwähnte, Kryptografie nicht immer der Schlüssel: Es ist zwar wesentlich einfacher, einen erfolgreichen Angriff duichzuführen, wenn die Daten sichtbar sind und abgefangen werden können (beispielsweise bei Wiedergabe- oder Ablaufmusterangriffen), aber bestimmte Faktoren - z. B. das Problem des Paddings von Ethernet-Frames, von dem bereits die Rede war - können alle Bemühungen durchkreuzen, den Benutzer zu schützen. In Teil II dieses Buchs werden wir einige der Bedrohungen behandeln, die spezifisch für lokale Netzen sind. Diese Schwachstellen machen Daten zugänglich, ohne dass jemals eine konventionelle Attacke durchgeführt wird. Diese ganzen Probleme werden uns begleiten, solange Netzwerke den alten und bewährten Entwurf verwenden, der für die moderne Netzwerktechnik weitgehend ungeeignet ist. Doch wir wollen uns nicht aufhalten. Bevor wir aber in die wilde und faszinierende Welt jenseits der Gienzen des lokalen Netzwerks eintauchen, wollen wir noch einen Blick auf einige weitere (und ziernlich konkrete) Enthüllungsszenarien werfen. 120
8.1 „Logische" Blinkenlichten und ihre ungewöhnliche Verwendung 8.1 „Logische" Blinkenlichten und ihre ungewöhnliche Verwendung Ein solches Szenario behandelt den Missbrauch logischer „Anzeigen", also Indikatoren wie beispielsweise Zähler, Flags und andere Apparaturen, die nicht optisch dargestellt, sondern auf einem Computer verwaltet und in Softwareanwendungen verfügbar gemacht werden, die in LANs häufig implementiert werden. Logische Indikatoren sind praktisch, setzen aber ebenfalls voraus, dass das lokale Netzwerk vertrauenswürdig ist. Das SNMP-Protokoll (Simple Network Management Protocol)1 ist die verbreitetste Methode zur Überwachung und gelegentlich auch zur Administration von Netzwerkgeräten. SNMP wird häufig auf Endpunktsystemen wie Servern und Workstations, aber auch auf Netzwerkgeräten wie etwa Switches, Routern und Druckern implementiert. Das Protokoll erlaubt das Lesen (oder Ändern) einer abstrakten Darstellung vieler Systern- und Anwendungsintema, Betiiebs- und Konfigurationsparameter und Statistiken. Mit SNMP können Sie bei einem Netzwerkdrucker die Anzahl der Netzwerkkalten, über die er verfügt, oder seine Laufzeit abfragen. Die gleiche Methode können Sie auch verwenden, um bei einem Mainframe dieselben Angaben abzurufen, obwohl diese vom Gerät intern auf eine auf jedem System völlig unterschiedliche Weise ermittelt werden. Aus diesem Grund macht SNMP das Überwachen und Verwalten heterogener Umgebungen ohne Implementierung einer Vielzahl von Zugriffsprotokollen und Piiifprozeduren ganz einfach. Natürlich weist SNMP eine Menge sicherheitsrelevanter Probleme in Bezug auf Implementierung und Gebrauch auf, aber darum geht es mir hier gar nicht. Auch bei ordnungsgemäßer Implementierung kann das Protokoll eine Offenlegung von Sicherheitsinformationen zur Folge haben, indem es etwa schreibgeschützten Zugriff auf scheinbar irrelevante Statistiken zu einer Netzwerkschnittstelle gewährt. (Diese Sicherheitslücke lässt sich beseitigen, indem die Funktionalität des Rotokolls sorgfältig auf das Notwendige beschiänkt wild, aber dies ist bei bestimmten Netzwerkgeräten gar nicht möglich.) Ein gewiefter Angreifer kann Frame- oder Paketzähler auf einem System beobachten, auf dem SNMP läuft, und dann mit diesen Informationen Profile für Ablaufmusterangriffe erstellen, die die Wiederherstellung von Daten interaktiver Sitzungen oder anderer interessanter Angaben ermöglichen; die Vorgehensweise ähnelt dabei der in Kapitel 1 beschriebenen. Oha! Aber sollte es denn wirklich möglich sein, dass allein deswegen so viel passieren könnte? 8.1.1 Zeig mir, wie du tippst, und ich sage dir, wer du bist Zwar habe ich Probleme dieser Kategorie bereits mehrfach erwähnt, und die davon ausgehende Gefahr mag auch sehr abstrakt erscheinen, aber die Folgen sind selbst dann real, wenn der Wiederherstellungsvektor, dem ich mich in Kapitel 1 widmete, nicht berücksich- Case90
8 Wir gegen die tigt wird. Beispielsweise hat eine Gruppe deutscher Forscher vom Institut für Bankinnovation ein kommerzielles Rodukt namens PSYLock entwickelt, welches Biostatistiken auf der Basis von Tastenanschlagsrnustem erstellt2: Mit PSYLock ließen sich Benutzer eindeutig identifizieren (und deswegen unter Umständen auch zurückverfolgen), indem man untersuchte, wie sie ihre Tastatur benutzten. PSYLock nutzt in erster Linie Messungen der Intervalle zwischen den Tastaturaktionen - ein Trick, den ich zuvor bereits beschrieben habe. Vorausgesetzt, Paketzähler für einen bestimmten Computer lassen sich beobachten und darauf basierend berechnen, wann im Verlauf einer interaktiven Sitzung eine Taste vom Benutzer betätigt wurde, können Sie eine Person unabhängig vom verwendeten Terminal zweifelsfrei identifizieren. Es ließen sich einige interessante Anwendungen bösaitiger wie auch kontioUierender Natur basierend auf der Anwendung dieses Konzepts in der Vennittlungsschicht ersinnen. Wenn der Angreifer weiß, dass eine interaktive Sitzung auf der Basis irgendeines Fernzugriffsprotokolls durchgeführt wild, für die sich die SNMP-Statistiken zum Switch-Port überwachen lassen, dann kann er durch wiederholte Abfrage des Zählers ermitteln, wann Tasten angeschlagen werden, und daraus Rückschlüsse ziehen - etwa was eingegeben wird oder wer es eingibt. Auch eine „Lightversion" des Angriffs ist machbar, die keine fortgeschrittene Modellierung in der Alt benötigt, wie wir sie weiter oben beschrieben haben. In einem BugTraq- Beitrag namens „Passive Analysis of SSH (Secure Shell) Traffic"3 beschreiben Solar Designer und Dug Song unter anderem noch ein Angriffsszenario, diesmal unter Verwendung des SSH-Rotokolls, einer gängigen Methode zur Verbindung mit einem Remote-System. Obwohl SSH verschlüsselt ist, ist es bei Versionen, die vor Abfassung des genannten Beitrags erschienen, möglich, die Länge eines Passworts zu errnitteln, indem man die Größe eines bei der Anmeldung beobachteten Pakets analysiert (das Passwort wird nach der Eingabe durch den Benutzer als genau ein Datensegment verschickt). Diese Methode ließe sich ebenso gut auf andere Kryptografieprotokolle anwenden, die die Passwortlänge nicht aktiv verbergen, indem sie das Passwort vor dem Versand mit Fülldaten erweitern. Und folgerichtig lässt sich der Angriff ausführen, indem man einfach einen SNMP-Bytezähler (statt des eigentlichen Datenverkehrs) beobachtet. 8.2 Private Daten, wohin man auch sieht Es gibt einen weiteren Grund dafür, dass wir nicht allzu erfreut von der Aussicht sein sollten, einen ungebetenen Gast hinter den Kulissen unseres Netzwerks vorzufinden (unabhängig davon, ob wir die dort vorhandenen Daten für sensibel halten oder nicht): Viele Softwareanwendungen verletzen das Rinzip des geringsten Erstaunens. Das Prinzip des geringsten Erstaunens ist eine Grundregel der Softwareentwicklung, die im Wesentlichen 2 Bank03 3 SolaOl 122
8.3 Wi-Fi-spezifische Sicherheitslücken besagt, dass ein Programm so auf Benutzelhandlungen reagieren sollte, wie der Benutzer es annimmt - auf eine konsistente, intuitive, vorhersagbare oder anderweitig zu erwartende Weise. Wie sich aber herausstellt, übermitteln viele Programme unterschiedlicher Softwareanbieter eine bemerkenswerte Anzahl wertvoller Daten (weitaus mehr als man erwarten würde) und stellen Benutzer damit vor Situationen, auf die sie nicht gefasst sind. Wie üblich spielt Microsoft Windows bei diesen im wahrsten Sinne des Wortes „verblüffenden" Programmen die führende Rolle und tut sich bei der Übermittlung von Daten in gezielter, aber häufig leicht zu übersehender und unauffälliger Weise besonders hervor. Aber der freundliche Softwareriese ist beileibe nicht allein. Es wissen wohl nur die wenigsten Benutzer, dass Windows, wenn es Mitglied einer Domäne und für die Verwendung servergespeicherter Profile konfiguriert ist, bei jeder Anoder Abmeldung des Benutzers große Teile der Registrierung des Benutzers an den Dornä- nencontroller sendet. (Solche Profile sollen es Benutzem ermöglichen, sich von einer anderen Workstation aus anzumelden und auf ihre persönlichen Daten zuzugreifen.) Die im Profil enthaltenen Daten mögen zwar auf den ersten Blick ziemlich wertlos erscheinen, aber sie bergen verschiedene persönliche Einstellungen und Verlaufsinfonnationen, die recht interessant sein können: eine Liste der zuletzt ausgeführten Befehle, die zuletzt besuchten Webseiten, die zuletzt geöffneten Dokumente und ähnliches. Es gibt ein ähnliches, vielleicht noch verblüffenderes Phänomen: Wenn das Starnmver- zeichnis eines Benutzers innerhalb der Domäne auf einem Netzlaufwerk liegt, ruft Windows alle vom Benutzer im Fenster „Ausführen" eingegebenen Befehle zunächst auf dem Remote-Server und dann lokal ab. Auf diese Weise werden alle Befehle, die der Benutzer abgesetzt hat, dem aufmerksamen Beobachter über das SMB-Protokoll (Server Message Block) enthüllt. Diese und viele weitere Beispiele machen uns auf schmerzhafte Weise deutlich, dass praktisch alle Netzwerkdaten als vertraulich zu gelten haben. Insofern sind lokale Netze im Allgemeinen nicht besondere gut für die Übertragung häufig auftretender Daten geeignet. Ausgenommen sind lediglich spezielle, eingeschränkte oder zusätzlich geschützte Konfigurationen. Und es gibt keine geeignete Möglichkeit, diese Daten zu schützen, ohne schwere Geschütze wie verschlüsselte IP-Tunnel oder ähnliche Software einzusetzen oder jeden einzelnen Aspekt der Netzwerktechnologie von Grund auf neu zu entwickeln. 8.3 Wi-Fi-spezifische Sicherheitslücken Es wäre nicht fair, dieses Kapitel zu beenden, ohne ein Wort zu den Problemen bei Wi-Fi, der drahtlosen Variante von Ethernet, zu verlieren. Drahtlose Netzwerke nach dem IEEE 802.11-Standard haben im Untemehmensbereich wie auch bei Privatbenutzern mächtig an Fahrt gewonnen. Leider stellte sich bereits lange, bevor die Technologie flächendeckend akzeptiert wurde (und obwohl sie mit der Absicht entwickelt wurde, im Vergleich zu leitungsgestützten Entwürfen ein Mehr an Sicherheit zu 123
8 Wir gegen die bieten), heraus, dass die korrekte Inbetriebnahme von Wi-Fi gar nicht einfach ist. Das liegt möglicherweise daran, dass man versuchte, Wi-Fi ein wenig zu sehr in die Schuhe seines älteren Binders einzupassen. Der 802.11-Standard unterscheidet sich hinsichtlich seiner Betriebsprinzipien nicht besonders von Ethernet. Er verwendet das traditionelle System nach dem Motto „Einer redet, und alle hören zu"; der einzige Unterschied besteht darin, dass als Signalmedium kein Lei- terpaar, sondern eine bestimmte Funkfrequenz zum Einsatz kommt. Was uns gleich zum ersten Prob lern von 802.11 bringt. Im Mai 2004 gab das ISRC (Information Security Research Centre) der Queensland Uni- versity of Technology Ergebnisse seiner Untersuchungen bekannt: Jedes 802.11-Netzwerk in jedem behebigen Unternehmen kann innerhalb von Sekunden außer Gefecht gesetzt werden, indem man einfach ein Signal überträgt, dass die Kommunikation anderer Parteien erfolgreich unterbindet. Natürlich gilt dies auch für Ethernet; dort muss man allerdings zunächst eine physische Verbindung zum Netzwerk herstellen, was ein Aufspulen des Angreifers natürlich erheblich vereinfacht und eine Lösung des Problems erleichtert: Überprüfen Sie einfach den Switch und folgen Sie dem Kabel. Dieser Angriff kommt eigentlich nicht überraschend, ist aber auch nicht das, was die Nutzer in der Industrie vorausgesehen haben. Das ist aber noch nicht alles. Dort, wo der 802.11-Standard versucht hat, Angriffe auf Medienebene zu unterbinden, hat er gnadenlos versagt. WEP (Wired Equivalent Privacy) wurde für Wi-Fi-Netzwerke entwickelt, um Schutz gegen das Abhören von Netzwerksitzungen durch Dritte zu bieten und so ein Maß an Sicherheit zu gewährleisten, das mit dem traditioneller LANs vergleichbar- ist. Allerdings fanden Forscher der University of California und von Zero Knowledge Systems im Jahre 2001 eine Menge stndctureller Mängel im WEP-Entwurf die das System weitgehend ungeeignet machten. Bedauerlicherweise war Wi-Fi zu jenem Zeitpunkt bereits so weit verbreitet, dass eine Implementierung notwendiger Änderungen sich schwierig gestaltete.4 Hinzu kommt erschwerend, dass die Nutzung von WEP optional und bei den meisten Netzwerkgeräten abgeschaltet ist: Diese Einrichtungen nehmen eingehende Daten bereitwillig entgegen und leiten sie weiter. Dies ist bei leitungsgestützten Netzwerken, bei denen eine zusätzliche Sicherheitsebene in der Bitübertragungsschicht gegeben ist, zwar durchaus akzeptabel; Funknetze hingegen stehen jedem offen, der gerade in der Nähe ist. Die Praxis des Wardrivings, bei dem man sich - mit einem Auto und einem Wi-Fi-fähigen Laptop bewaffnet - auf Netzwerkerkundungstour macht, wurde extrem populär, nachdem man feststellte, dass die Funknetze größerer Unternehmen mehrheitlich teilweise oder vollständig geöffnet waren. Besonders erfolgreich war man dabei in großen Einkaufszentren und Geschäftsvierteln praktisch aller Städte. Die Angriffe verlaufen meist recht simpel und reichen vom Erschnorren eines Intemetzugangs bis hin zum Versand von Spam oder BoriOl 124
8.3 Wi-Fi-spezifische Sicherheitslücken der Dmchiuhrung von Fernangriffen über das Netzwerk des Opfers. Trotzdem ist das Risiko, dass ein erfahrener Angreifer ein Netzwerk von innen her knackt, sehr real. Abbildung 8.1 Tracy Reeds Warflight5 Abbildung mit freundlicher Genehmigung von Tracy Reed (treed@copiloteonsulting.com) von der Firma Copilot Consulting. 125
8 Wir gegen die Wie sieht das wahre Ausmaß des Problems aus? Es genügt wohl zu sagen, dass das Wardiiving an dem Tag Vergangenheit war, als jemand das Warßying ersonn: Wardriving mit dem Flugzeug statt dem Auto. Im Jahr 2002 beschloss Tracy Reed von der Firma Copilot Consulting, die Gegend von San Diego mit einem Funknetzscanner zu überfliegen. Auf diesem Flug schaffte er es, aus einer Höhe von 1.500 Fuß (ca. 450 Meter) fast 400 Access-Points mit Standardkonfiguiation zu finden. Dies bedeutete kostenlosen Zugang zum Internet oder zu Filmenintranets für jeden, der sich in Reichweite befand und nur wollte (vgl. Abbildungen 8.1 und 8.2). Nur 23 Prozent der Geräte, die Reed scannte, waren geschützt - durch das (generell leicht zu knackende) WEP oder mit besseren Methoden. Denken Sie sich Ihren Teil. Abbildung 8.2 Warflight im Silicon Valley 126
In der Wildnis Wenn Sie erst im Internet sind, wird es richtig schlimm
9 Der verräterische Akzent Neuntes Kapitel. In dem wir das passive Fingerprinting kennen lernen und feststellen müssen, dass subtilste Unterschiede in unserem Verhalten Anderen gegenüber Zeugnis darüber ablegen, wer wir sind Im Internet — dem „Netz der Netze" — entziehen sich Daten, die an einen entfernten Gegenüber gesendet werden, der Kontrolle des Absenders. Anders als im lokalen Intranet, welches für Pakete in aller Regel ein sicherer Hafen ist, sofern kein Unbefugter eindringt, ist es, sobald die Daten in freier Wildbahn unterwegs sind, nicht mehr möglich, die Gefahren einzuschätzen und effizient zu handhaben, die ihnen dort draußen drohen: Niemand kann den Pfad der Daten steuern oder die Absichten aller an der Kommunikation beteiligten Parteien bestimmen — von ihrem jeweihgen Sicherheitsansatz ganz zu schweigen. In einem derart komplexen Netzwerk ist die Wahrscheinlichkeit, dass an einem Standort auf dem Weg zum Empfänger Böses im Schilde gefühlt wird, weder vemachlässigbar noch einfach einzuschätzen. Tatsächlich kann sogar die Person, mit der Sie eine zulässige Verbindung herstellen, Hintergedanken haben. Oder sie ist einfach ein bisschen neugierig. „Unaufgeforderte Datenerfassungsversuche" (um sie einmal so zu nennen) unterscheiden sich auch aus einigen anderen Gründen, wenn sie über das Internet ausgeführt werden. Das Wichtigste aber ist: Sie müssen nicht gezielt erfolgen, und sie sind nicht auf ein bestimmtes Segment in einer physischen Infrastruktur begrenzt. Da der Aufwand vonseiten des Angreifers so gering ist, stellen solche Angriffe eine realistische Möglichkeit dar, potenziell interessante Daten in die Hände zu bekommen, bevor überhaupt klar ist, wie man von ihnen — finanziell oder auf andere Weise — profitieren kann. Außerdem wird die Trennlinie zwischen Gut und Böse noch undeutlicher: Der Angreifer kann nämlich Ihr bester Freund sein. Die Rentabilität allgemeiner Spionage und Kontrolle zum Zwecke der Marktuntersuchung und Profilerstellung ist für viele einfach zu verlockend, als dass man ihr widerstehen könnte. Die Welt der Dienstleistungen ist nicht in Schwarz und Weiß zu unterteilen, und für viele stellt eine flexible Handhabung der eigenen Grundsätze ein durchaus pragmatisches Geschäftsmodell dar. 129
9 Der verräterische Akzent Dieser Teil des Buches befasst sich mit den Gefahren, die durch die offene Struktur des Internets begründet sind, und mit der Fähigkeit anderer, viel rnehr über Sie herauszufinden, als Sie erwarten würden — und viel mehr, als sie jemals brauchen würden, um Ihnen etwa eine interessante Website, ein lustiges Netzwerkspiel oder ähnliche Dienstleistungen anbieten zu können. Im Internet ist der Feind nicht rnehr der einsame Ine von Gegenüber, der die LEDs auf Ihrern Switch durch ein hochwertiges Teleobjektiv beobachtet: Die hier beschriebenen Risiken ermöglichen in massivem Urnfang Profüerstellungen, Nachverfolgungen, Datensammlungen, Industriespionage, Netzwerkerkundungen und angriffsvorbereitende Analysen. Und sie sind viel realer als die Szenarien, die wir bis hierher kennen gelernt haben. Sie müssen die Gefahren kennen, um ein ausreichendes Niveau an Datenschutz gewährleisten oder effiziente Konüolleinrichtungen für Benutzer (und auch für völlig Fremde, die sich Ihrern Netzwerk nähern) einsetzen zu können. Ein solches Gespür ist ferner wesentlich, um in einer Welt, in der der Grat zwischen begründeter Sorge um persönliche Daten und pathologischer Paranoia sehr schmal ist, einen klaren Kopf zu behalten. Ich werde mit einer Abhandlung zu den wesentlichen Netzwerkprotokollen, die im Internet zum Einsatz kommen, und ihren datenschutztechnischen Auswirkungen beginnen. Können wir anfangen? 9.1 Die Sprache des Internets Die offizielle Sprache des Internets ist das IP-Protokoll (Internet Protocol), dessen ver- breitetster Dialekt die Version 4 ist. Das in RFC7931 spezifizierte Protokoll stellt eine Möglichkeit zur Implementierang einer standardisierten Methode bereit, um Daten über große Entfernungen und eine Vielzahl von Netzwerken mit möglichst wenig Aufwand zu übertragen. IP-Pakete bilden die dritte Schicht des bereits früher beschriebenen OSI- Modells und bestehen aus einem Header, der die zur Auslieferung eines Datensegments an den endgültigen Empfänger — den entfernten Endpunkt — erforderlichen Angaben enthält, und einem Datenteil, der die Nutzdaten (d. h. die Daten übergeordneter OSI-Schichten) enthält und direkt auf den Header folgt. Die Routing-Informationen, die der Absender im IP-Paket vor dem Versand angibt, sind die Absender- und Zieladresse sowie eine Anzahl von Parametern, die den Vorgang des Datentransfers vereinfachen oder Zuverlässigkeit und Leistung optimieren. Wenn ein System im lokalen Netzwerk mit einem entfernten Partner kommunizieren will, der nicht direkt über die physische Leitung erreichbar ist (zumindest nicht, soweit der Host dies weiß), sendet es ein IP-Paket mit der Zieladresse des endgültigen Empfängers — in einen Frame einer untergeordneten Schicht gekapselt — an einen bestimmten lokalen Computer, von dem es annimmt, dass er als Vermittler (oder Gateway) des Netzwerks agiert, in welchem Post81a 130
9.1 Die Sprache des Internets sich der Absender befindet. Das Gateway ist ein Multihome-Gerät, d. h. es ist gleichzeitig Bestandteil mehrerer Netzwerke, zwischen denen es als Verbindungsglied dient. Das Gateway sollte wissen, wie das Paket nach „draußen" geroutet werden rnuss, was mit dem Paket geschehen soll und wer die Daten als nächster bekommt, wenn weitere Stationen erforderlich sind, bevor die Daten den Empfänger erreichen können. Systeme, deren Aufgabe das Routing der Daten vom lokalen Gateway bis zum Ernpian- gemetzwerk ist, lesen die in der IP-Schicht vorhandenen Daten aus und entscheiden dann, wie die Pakete weiterzuleiten sind. Diese Entscheidungen treffen sie auf der Basis ihrer Kenntnisse zur Erreichbarkeit bestimmter Netzwerke, (fn diesem Kontext verstehen wir unter einem Netzwerk einen Pool von Netzwerkadressen, die an einem gemeinsamen Standort vorhanden sind.) 9.1.1 Routing auf naive Art In seiner einfachen Ausprägung verwendet ein Router eine feste Routing-Tabelle, mit der er zwischen einer Anzahl lokaler Netze (an die er Daten direkt ausliefern kann) und der Außenwelt, die er nicht kennt, unterscheiden kann. Aufgrund dessen muss der gesamte Datenverkehr, der nicht für das lokale Netzwerk bestimmt ist, an einen übergeordneten Router weiterleitet werden, der wahrscheinlich besser weiß, wohin die Daten geliefert werden müssen. Empfänger in Netzwerk B oder D? Dann Daten zustellen, sonst welter zum nächsten Router. Router 2 ^J^Router 3 Der Absender will ein System in Netzwerk C kontaktleren. Router 1 Ist das Default- Gateway des Absenders. Abbildung 9.1 Ein einfach konstruiertes WAN-Routing-Schema Abbildung 9.1 zeigt ein Beispiel für eine solche Routing-Struktur. Der Absender (links im Bild) versucht, ein Paket an ein System zu schicken, dessen Adresse im Netzwerk C hegt. Über dieses Netzwerk ist dem Absender nichts bekannt. Um die Zustellung zu ermöglichen, sendet der Absender die Daten an das lokale Gateway — in der Hoffnung, dass es weiß, wo es nach dem Empfänger zu suchen hat. Allerdings erreicht dieses System — Rou- Absender Empfänger In Netzwerk A? Dann Daten zustellen, sonst weiter zum nächsten Router. Router 1 Netzwerk D 131
9 Der verräterische Akzent ter 1 — nur das Netzwerk des Absenders sowie das Netzwerk A. A ist ein anderes Netzwerk, das nichts mit C zu tun hat. Weil das Ziel sich nicht im lokalen Netzwerk befindet, entscheidet der Router, dass es am besten ist, das Paket an einen übergeordneten WAN- Router (Router 2) zu schicken, den er lokal erreichen kann. Auch dieses Gerät hat keine direkte Verbindung mit Netzwerk C, sondern kann nur Hosts in den Netzwerken B und D direkt erreichen. Allerdings weiß es, dass Router 3 die Zieladresse kontaktieren kann — und deswegen bestimmt weiß, wie fortgefahren werden soll. Also wird das Paket dorthin weitergeleitet, und Router 3 kann die Daten lokal an den endgültigen Empfänger ausliefern. Alles lehnt sich zufrieden zurück und klopft sich angesichts dieses Erfolgs gegenseitig auf die Schulter. 9.1.2 Routing im wirklichen Leben In der Praxis sind Netzwerke häufig hochgradig redundant und weisen keine strikt lineare Architektur auf. Vielmehr haben sie eine komplexe, verzweigte Struktur, die die Auswahl des optimalen und wirtschaftlichsten Pfades schwierig machen würde, wäre man auf die Verwendung einer statischen Konfiguration angewiesen. (Angesichts der infrastruktuiellen Änderungen, die sich infolge des Wachstums Ihres Netzwerks ergeben, können Sie die Herausforderung, immer auf dem neuesten Stand zu bleiben, getrost vernachlässigen.) Aufgrund dessen wird eine angemessenere Routing-Strategie implementiert, sobald die übertragenen Daten einen Backbone-Router erreichen. Ein Backbone-Router wird von einem Netzbeteiber eingesetzt und ist ein dediziertes WAN-Gerät, das mehrere von einem bestimmten Anbieter kontrollierte Netzwerke zu einem komplexen Ganzen verbindet, welches man als autonomes System bezeichnet. Backbone-Router sind normalerweise mit Schnittstellenverbindungen zu anderen großen Routern ausgestattet und verwenden einen hochentwickelten Algorithmus zur Pfadsuche und ein riesiges „Telefonbuch" der Netzwerkblöcke und ihrer Parameter. Dieses durch das BGP-Protokoll (Boundary Gateway Protocol) dynamisch gesteuerte Adressverzeichnis ermöglicht das Auffinden des geeignetsten Pfades zum Zielsystem; die Aufgabe muss also nicht mehr blindlings irgendwelchen Systemen in der Hoffnung zugewiesen werden, dass sie die Daten irgendwie korrekt weiterleiten. 9.1.3 Der Adressraum Dieser Vorgang wäre allerdings ziemlich undurchführbar, wenn Zielnetzwerke einfach nur aus einer Anzahl Adressen bestünden, die den Geräten in aller Welt willkürlich zugewiesen würden. Die Definition eines autonomen Systems müsste in diesem Fall alle Adressen auflisten und würde sehr bald gigantische Ausmaße erreichen. Um dieses Problem zu lösen, werden den Backbone-Anbietem stattdessen zusammenhängende Adressblöcke zugewiesen; Endbenutzer oder kleinere Anbieter können dann jeweils eine oder mehrere Adressen leasen. Das Routing zum Providemetzwerk basiert auf dem Nachschlagen (Lookup) der Ziel-IP-Adresse innerhalb der zugewiesenen Adressbereiche und dann innerhalb des 132
9.1 Die Sprache des Internets Netzwerks basierend auf einem weiteren Lookup in detaillierteren Routing-Tabellen. Ein autonomes System kann also als Bereich von IPv4-Adressen (oder auch als Gruppe von Bereichen dieser Adressen) definiert werden. Dabei kommt eine Netzmaskenmethode zum Einsatz. Die einzelne IPv4-Adresse, die bei jeder IP-Kornmunikation zur eindeutigen Identifikation eines Endpunktsystems verwendet wird, hat eine recht einfache Struktur: Sie besteht aus 32 Bits, die aus Gründen der praktischen Handhabung in vier Bytes zu je acht Bits aufgeteilt werden. Insgesamt ergeben sich so 4.294.967.296 mögliche Adressen. Die Adresse wird traditionell in Foim von vier durch Punkte getrennten Bytewerten geschrieben, die jeweils einen Wert zwischen 0 und 255 haben. So entspricht beispielsweise 195.117.3.59 dem ganzzahligen 32-Bit-Wert 3.241.036.664. Fortlaufende IP-Adressblöcke sind die Grundlage des Paket-Routings. Sie stehen am Anfang der IPv4-Adressierung, denn sie definieren sowohl den Teil der IP-Adresse, der für alle Systeme, die zum autonomen System gehören, feststeht und konstant ist, als auch den Teil der Adresse, der seitens des Netzwerkbesitzers auf unterschiedliche Werte eingestellt werden kann, damit er seinen unterschiedlichen Computern eindeutige Kennungen zuweisen kann. Wenn ein Netzwerk definiert wird, dann wird eine Anzahl der höherwertigen Bits einer IP- Adresse — theoretisch zwischen ein und 31, in der Realität acht bis 24 Bits — als Netzadresse reserviert. Der feste Teil dieser Adresse ist allen Adressen gemein, die zum betreffenden Netzwerk gehören (und deswegen wahrscheinlich auch dorthin geroutet werden). Die verbleibenden niederwertigen Bits können behebig eingestellt werden, um Systemen innerhalb des Netzwerks Adressen zuzuweisen. Historisch betrachtet2 war die Größe eines Netzwerks oder die Anzahl der festgesetzten höherwertigen Bytes eine Funktion der Adresse und konnte aus der Netzwerkadresse selbst ermittelt werden. Basierend auf den wichtigsten Adressbits ließen sich Adressen gruppieren: Es gab Klasse-A-Netzwerke (bei denen die ersten acht Bits feststanden und die rnehr als 16 Millionen mögliche Benutzeradressen boten), Klasse-B-Netzwerke (mit 16 festen Bits und jeweils rnehr als 65.000 Hosts) und schließlich Klasse-C-Netzwerke (mit 24 festen Bits und je 256 Hostadressen). Von dieser Konstellation ausgehend können Sie, wenn die IP-Adresse Ihres Systems mit der Zahl 1 beginnt, bereits feststellen, dass es sich um ein Klasse-A-Netzwerk handelt und dass alle anderen Systeme mit diesem Präfix sich „neben" Ihrern System befinden. Seinerzeit schien eine solche Verteilung durchaus praktisch, aber der rPv4-Adressraurn schrumpfte beträchtlich, nachdem den ursprünglichen Initiatoren (d. h. den US- Streitkräften, Xerox, IBM und ein paar weiteren Global Players) in der Frühzeit des Internets eine Handvoll Klasse-A-Adressen zugewiesen worden war und diese Organisationen offenbar nicht allzu begeistert von der Idee waren, davon wieder ein paar abzugeben — auch wenn sie noch nicht einmal einen Brachteil des Adressraums verwenden, den sie für 2 RFC796 (Post81b)
9 Der verräterische Akzent die öffentliche Infrastruktur erhalten haben. Auch begannen, als das Internet kommemali- siert wurde und IP-Adressen zu einer Ressource wurden, für die Benutzer zahlen mussten, eben diese Benutzer, größere Adiessbereiche zu ordern, die ihren Anforderungen besser entsprachen. So kamen einige Leute mit vier Adressen aus, während andere einen Bestand von 8.000 fortlaufenden Adressen benötigten. Und die Benutzer fingen damit an, ihren Internetadressraum weiterzuverkaufen oder auf andere Weise zu partitionieren. Das Ergebnis ist, dass der aktuelle Adressraum auf absonderliche Art zerstückelt ist: Häufig sind winzige Bereiche des Raums ausgeschlossen und werden aus größeren, ansonsten fortlaufenden Blöcken umgeleitet, und das ursprüngliche Partitionierungsschema wird weitgehend ignoriert. Jeder Netzwerkadresse ist nun eine Netzmaskenspezifikation zugeordnet, weil es nur mit der IP-Adresse allein nicht mehr möglich ist, zu sagen, welchem Netzwerk ein System angehört. In der Netzmaske sind die Bits an den Positionen gesetzt, die in der Netzwerkadresse feststehen; die Bits der Positionen in der Adresse, die innerhalb des Netzwerks frei geändert werden können, sind in der Netzmaske jeweils 0. Wie Abbildung 9.2 zeigt, bleiben, wenn man 24 Bits der Netzwerkadresse 195.117.3.0 fixiert, acht Bits am Ende übrig, die geändert werden können. Wir können also 256 Adressen zwischen 195.117.3.0 und 195.117.3.255 erstellen, die zu diesem Netzwerk gehören. (In der Praxis bleiben 254 mögliche Hosts, weil die erste und die letzte Adresse des Bereichs für besondere Zwecke reserviert sind.) Mit dieser relativ schlichten Spezifikation eines Netzwerks mit Adressen ist es einfach, zu ermitteln, welche Adressen zu diesem Netzwerk gehören und welche an ein als Gateway agierendes System übermittelt werden sollen (und welche nicht). Netzmaske: 255.255.255.0 I 11111111 11111111 11111111 00000000 Netzwerk: 195.117. 3.0 | 11000011 01110101 00000011 00000000 1— Um als zu einem bestimmten Netzwerk gehörend betrachtet zu werden, müssen bei Adressen alle Bits, die in der Netzmaske gesetzt sind, mit einer „Prototypadresse" des Netzwerks (hier 195.117.3.0) identisch sein. Gültige Hostadresse in diesem Netzwerk: 195.117. 3.59 I 11000011 01110101 00000011 00111011 Bei einer gültigen Adresse muss dieser feste Bereich mit der Netzwerkadresse identisch sein. Ungültige Hostadresse (nicht im selben Netzwerk): 195.117. 4.59 I 11000011 01110101 00000100 00111011 Bei einer ungültigen Hostadresse stimmen einige der festen Bits nicht mit der Netzwerkadresse überein! Abbildung 9.2 Regeln für die Adressierung im Netzwerk 134
9.2 Das IP-Protokoll Dieses Adressierungsschema mag verwirrend und unnötig kompliziert erscheinen, aber es ist nichtsdestoweniger erfolgreich: Wir können ohne gioßen rechentechnischen Aufwand Adresspools mit bestimmten Systemen verknüpfen und zwischen Systemen unterscheiden. Bei all seiner Komplexität gelingt es dem Internet in der Regel ohne gioßen Aufwand, ein System innerhalb wirklich kurzer Zeit ausfindig zu machen. 9.1.4 Fingerabdrücke auf dem Umschlag Wir wissen jetzt, wie die Daten von Punkt A zu Punkt B kommen. Was aber unterwegs passiert, ist wesentlich spannender als die Bestimmung des Pfades. Wir wollen einmal genauer betrachten, was zwischen den Routem und unseren Endsystemen ausgetauscht wird. Sie mögen der Ansicht sein, dass die interessantesten Informationen doch wohl die Nutzdaten im Innern der Pakete sind, die über das Internet übertragen werden (schließlich werden in jeder Sekunden Unmengen von privaten E-Mails und spannenden Inhalten über den gesamten Globus übertragen), aber es steckt noch viel mehr dahinter. Das Format der IP-Pakete, die für das Routing der Daten verwendet werden, und die Schicht-4-Daten, die zur Kapselung der eigentlichen Anwendungsdaten benutzt werden, sind relativ akkurat und in erstaunlicher Eindeutigkeit in den RFCs definiert. Allerdings können auch bei kompetenter Implementierung des TCP-Stapels die zugrundeliegenden Informationen einen beträchtlich größeren und dauerhafteren Wert für den Empfänger haben als die eigentlichen Nutzdaten, die er empfängt. Eine Enthüllung auf dieser Ebene erfolgt unbeabsichtigt und unerwartet. Bevor wir aber mehr hierzu erfahren, müssen wir zunächst den Aufbau der zugrundehegenden Protokolle kennen lernen. 9.2 Das IP-Protokoll Zunächst ein paar Grundlagen. Das IP-Protokoll stellt eine universelle Methode zur Auslieferung von Daten über große Entfernungen in der dritten Schicht des OSI-Modells bereit. Es enthält eine Anzahl von Parametern, die von den Zwischensystemen inteipretiert und möglicherweise modifiziert werden sollen. Abbildung 9.3 zeigt den IP-Header. 9.2.1 Protokollversion Dies ist ein vier Bit langer Wert, der bei allen IPv4-Paketen fest auf 4 (binär 0100) gestellt ist. IPv4-ist das Standardprotokoll (und in vielen Fällen auch das einzige Protokoll) für Schicht 3 über das Internet. Versuche, mit IPv6 eine modernere Implementienmg durchzusetzen, waren bislang nicht besonders erfolgreich — meiner Meinung nach in erster Linie deswegen, weil das neue und erweiterte IP-Adressfonnat für Otto Normaladministrator wesentlich schwieriger zu merken ist. 135
9 Der verräterische Akzent 9.2.2 Header-Länge Dies ist ebenfalls ein vier Bit langer Wert, der die Gesamtlänge des IP-Headers angibt. Die Angabe erfolgt in Blöcken zu je vier Bytes (dies erlaubt die Darstellung von Längen zwischen 0 und 60 Byte mithilfe der 16 möglichen Werte des Feldes). Der Parameter gibt der Implementierung an, an welcher Stelle die Analyse des IP-Headers enden soll (dieser kann aufgrund zusätzlicher „Optionen", die an das Ende des Headers angehängt werden und unmittelbar vor den Inhalten übergeordneter Schichten stehen, unterschiedlich lang sein). Außerdem ermöglicht die Angabe das Überspringen eines Teils des Headers: Optionen lassen sich vernachlässigen oder gar vollständig ignorieren, und man wechselt direkt zu den eigentlichen Nutzdaten. 0 4 8 0 3 gs Version \8 12 // 16/ / 20 /24 / / Länge des Internet- Headers Kennung Time-to-Live (TTL) Protokoll / 28 32 -A- / / Gesamtlänge Flags Fragmentoffset Header-Prüfsumme Quelladresse Zieladresse Optionen Fülldaten Daten Abbildung 9.3 Aufbau des IP-Headers Da IP-Optionen normalerweise lediglich für Diagnosezwecke eingesetzt werden — sie ermöglichen etwa den Versand eines Pakets über eine bestimmte Paketroute (und sonst eigentlich nichts anderes) —, sind praktisch alle IP-Pakete, auf die man in freier Wildbahn trifft, 20 Bytes lang (d. h. dieses Feld hat den Wert 5); diese 20 Bytes entsprechen genau dem festgelegten Teil des Headers. Werte von weniger als 20 Bytes sind natürlich fehlerhaft, und eine vernünftige Implementierung wird ein solches Paket ignorieren. Allerdings ist Vernunft leider nicht immer die Regel. 136
9.2 Das IP-Protokoll 9.2.3 Diensttyp (Type of Service, TOS) Die Bedeutung dieses 8-Bit-Feldes ist vemachlässigbar. Es enthält eine Beschreibung der Routing-Priorität: Sie gibt an, dass ein redliches Handeln des Absenders vorausgesetzt wird und er festlegen kann, ob dieser Datenverkehr von besonderer Wichtigkeit ist oder auf andere Alt priorisiert werden darf. Der Wert wird gelegenthch in lokalen Installationen verwendet, in denen ein bestimmter Vertrauensgrad angewendet werden kann; im Internet allerdings wird er weitgehend ignoriert. Das Feld umfasst drei Abschnitte: ■ Die ersten drei Bits geben die Priorität an. ■ Die nächsten vier beschreiben die erwünschte Routing-Methode. Hierzu werden abstrakte Konzepte wie „hohe Zuverlässigkeit" oder „geringe Latenz" verwendet, die der Router selbst interpretieren soll. ■ Der letzte Teil — ein einzelnes Bit — ist reserviert und hat stets 0 (!) zu sein. 9.2.4 Paketlänge Dieses 16 Bit umfassende Feld gibt die Gesamtlänge des IP-Pakets einschließlich der Nutzdaten an. Zwar hegt der Maximalwert bei 65.535, aber die zulässige Größe eines Pakets wird oft auf einen wesentlich niedrigen Wert gesetzt, da das untergeordnete Protokoll dies erfordert. So hat Ethernet beispielsweise einen MTU-Wert (Maximum Transmission Unit, maximale Paketgröße) von 1.500 Bytes, d. h. ein System, das über Ethernet angebunden ist, wird keine Pakete versenden, die größer sind als dieser Wert. Meist hegt der MTU-Wert zwischen 576 und 1.500 Bytes; MTUs mit einem Wert von rnehr als 16 oder 18 Kbyte kommen praktisch nicht vor. ■ Hinweis Amüsant: Die Größenbeschränkung eines IP-Pakets in Höhe von n Bytes (die sich aus der MTU ergibt) bestimmt auch die erforderliche Bandbreitenzunahnie für IP-Datenverkehr: Pro n — 20 Bytes, die an eine übergeordnete Schicht übergeben werden, werden immer mindestens 20 Bytes Header-Daten hinzugefügt. 9.2.5 Absenderadresse Dieser 32-Bit-Wert ist eine IP-Adresse des oben beschriebenen Formats, die den ursprünglichen Ausgangspunkt des Kornmunikationsvorgangs angibt. Da das IP-Paket vom Absender zusammengestellt wird und der Anreiz, diesen Parameter beim Verlassen des Absendemetzwerks auf Richtigkeit zu prüfen, eher gering ist, ist dieser Wert für sich genommen eigentlich nicht glaubwürdig. Allerdings erlaubt er Rückschlüsse hinsichtlich der Frage, wem wir antworten können; und wenn wir annehmen, dass die Angabe glaubwürdig ist, dann können wir sie auch verwenden, um dem Absender zu antworten. Der Vorgang der bewussten Fälschung dieses Weites wird normalerweise als IP-Spoofing bezeichnet. 137
9 Der verräterische Akzent 9.2.6 Zieladresse Dieser 32-Bit-Wert gibt die Adresse des endgültigen Empfängers der Daten an. Wie alle anderen IP-Parameter kann der Absender die Adresse nach eigenem Gutdünken auswählen. Zwischensysteme verwenden sie zur korrekten Weiterleitung des Pakets. 9.2.7 Kennung des übergeordneten Protokolls Dies ist ein 8-Bit-wert, der angibt, was flu- Nutzdaten in diesem IP-Paket transportiert werden: TCP, UDP, ICMP oder eine der exotischeren Optionen, denen wir uns weiter unten widmen werden. 9.2.8 TTL TTL (Tirne-to-Live) ist ein 8-Bit-Zähler, der die Lebensdauer von IP-Daten angibt. Um das Auftreten von Endlosschleifen in dem Fall zu verhindern, dass irgendetwas mit den Routing-Tabellen so gar nicht stimmen will, wird der Zähler jedes Mal, wenn er ein Zwischensystem passiert oder sehr lange in einer Sendewarteschlange ausharren muss, um dem Wert 1 verringert. Erreicht der Zähler den Wert 0, dann wird das Paket verworfen, wovon der Absender unter Umständen freundlicherweise durch ein ICMP-Paket in Kenntnis gesetzt wird. Wie alle anderen Werte wird auch der TTL-Wert nach Maßgabe des Absenders eingestellt, kann aber angesichts seiner Bitbreite nicht größer werden als 255. Ein interessanter Nebeneffekt des TTL-Zählers besteht darin, dass er das Nachvollziehen der Route zu einem entfernten System erlaubt: Eine Nachricht mit einem TTL-Wert von 1 verfällt am ersten Router auf dem Weg zum Ziel (was der Router dem Absender über eine ICMP-Nachricht meldet); eine Nachricht mit dem TTL-Wert 2 verfallt am darauffolgenden Abschnitt usw. Durch Versenden von Paketen, deren TTL-Werte nach und nach erhöht werden, und Überwachen der entsprechenden ICMP-Antworten des Typs „TTL abgelaufen" lässt sich eine Kartographie der Router und anderer IP-fähiger Geräte auf dem Weg zum Empfänger erstellen. Diese Methode heißt traceroute und wird häufig zur Diagnose von Routing-Problemen und für angriffsvorbereitende Analysen eingesetzt. Der Nutzen für den Angreifer hegt in der Tatsache, dass sich bestimmte Wirkungen erzielen lassen, ohne das vorgesehene Opfer tatsächlich bereits anzugreifen: Wenn Sie es etwa auf www.microsofl.com abgesehen haben sollten, können Sie stattdessen den Router des Netzwerks, in dem sich dieser Server befindet, oder die Router der zugehörigen Intemet- provider in der Hoffnung ins Visier nehmen, den gesamten Datenverkehr erfassen und gefälschte Antworten zurückschicken zu können. Hierdurch würden Sie den Server selbst von der Außenwelt abschneiden und der Außenwelt durch Übernahme der Identität vorgaukeln, dass die Site www.microsoft.com sich geändert hat. Selbstverständlich ist dies nur ein Beispiel. 138
9.2 Das IP-Protokoll 9.2.9 Flags und Offsets Diese 16-Bit-Werte steuern einen interessanten — und zudem den wohl inängelbehaftetsten — Aspekt des IP-Paket-Routings. Sie werden verwendet, wenn ein großes Paket von einem Zwischensystem über eine Verbindung weitergeleitet werden muss, deren MTU geringer ist als die Paketgröße. In diesem Fall „passt" das Paket so nicht in das Medium. Hier ein willkürlich gewähltes Beispiel: Ein Absender, der via Ethernet angebunden ist, kann ein Paket mit einer Größe von bis zu 1.500 Bytes versenden (und macht das oft auch). Wenn allerdings der erste Router, auf den das Paket trifft, die Daten über ein DSL- Modem weiterleitet, dann tritt ein Problern auf: Die normale MTU einer DSL-Leitung (die für sich bereits eine eigenwillige Kombination von Kapselungen über andere Protokolle darstellt) beträgt 1.492. Da passt ein Paket mit 1.500 Bytes einfach nicht durch. Angesichts der Vielfalt von Leitungsfonnaten, die im Internet verwendet werden, stellt dies ein schwerwiegendes Problern dar. Der Lösungsansatz besteht darin, das IP-Paket (genauer gesagt, die enthaltenen Nutzdaten) in mehrere separate IP-Pakete aufzuspalten oder zu fragmentieren und Informationen hinzuzufügen, die es dem Empfänger gestatten, die Nutzdaten wieder zusammenzusetzen, bevor er sie an die übergeordneten Schichten übergibt. Das Ergebnis ist eine geänderte Anzahl von Paketen, die über die betreffende Leitung übertragen werden können. Ein Offset (Versatz), der in jedem Fragment enthalten ist, gibt an, wie die einzelnen Datenfragmente wieder zusammengesetzt werden müssen, nachdem der endgültige Empfänger sie erhalten hat. Außerdem ist in den Headern aller Fragmente mit Ausnahme des letzten ein spezielles MF-Flag („More Fragments") gesetzt. Wenn das Zielsystem ein Paket mit gesetztem MF- Flag oder eines mit gesetztem Datenblockoffset, aber ohne MF-Flag erhält (dies ist dann die letzte Teilsendung eines fragmentierten Pakets), dann weiß es, dass für die Wiederherstellung des Originalpakets ein Ternporärspeicherbereich reserviert und dann gewaltet werden muss, bis alle noch fehlenden Teile eingetroffen sind, bevor das Paket weiterverarbeitet werden kann. Abbildung 9.4 veranschauhcht den Prozess der Fragmentieiimg und Wiederherstellung, in dessen Verlauf ein übergroßes Paket zunächst in zwei Blöcke unterteilt und dann vom Empfänger wieder zusammengesetzt wird, obwohl die Blöcke in der falschen Reihenfolge eingetroffen sind. Dieser Vorgang funktioniert zwar, ist aber recht ineffizient. Es dauert seine Zeit, bis die Systeme die Daten fragmentiert bzw. wiederhergestellt haben, und die Abschlusspakete enthalten oft sehr wenig Nutzdaten (nämlich nur die paar Bytes, die nicht über eine Verbindung eines anderen Typs übermittelt werden können). Es wäre natürlich besser, wenn der Absender von vorneherein die niedrigste MTU zwischen seinem Standort und dem Ziel kennen und seine Pakete entsprechend erstellen würde. (Diesen MTU-Wert nennt man auch Pfad-MTU oder kurz PMTU.) Leider bietet IP keine flexible und anständige Möglichkeit, dies zu implementieren — was Forscher allerdings nicht daran gehindert hat, eine clevere Lösung zu finden. 139
9 Der verräterische Akzent Diesem Ansatz zufolge setzt ein System, das eine PMTU-Erkennung implementiert, ein spezielles DF-Flag („Don't Fragment") für den gesamten ausgehenden Datenverkehr. Kann der Router ein DF-Paket nicht weiterleiten, ohne es zu fragmentieren, dann soll er es stattdessen verwerfen und eine entsprechende ICMP-Meldung („Fragmentierung erforderlich, aber DF ist gesetzt") an den Absender schicken. Erhält der Absender eine solche Meldung, dann kann er seine Annahmen entsprechend korrigieren, die Ergebnisse in einem Zwischenspeicher ablegen und nachfolgend angemessenere Paketgrößen verwenden. Weiterleitung mit Fragmentierung IP-Header ; Kennung 1234 Fragment 1 IP-Header NUTZ DATEN MTU-Elnheit Fragment 2 Empfangenes Paket NUTZ IP-Header DATEN ]Kennung 1234 ]Kennung 1234 MF Offset ungleich Ö Weiterleitung mit Verknüpfung Wiederherstellung abgeschlossen: Block mit Pffset ungleich 0, aber ohne MF empfangen; keine Lücken mehr Im Wiederherstellungspuffer. Schlcht-4-Verarbeitung Abbildung 9.4 Paketfragmentierung und -Wiederherstellung Hinweis Diese in RFC1991 beschriebene Praxis setzt voraus, dass der Aufwand für das Neusenden des verworfenen Pakets weniger gravierend ist als die kontinuierlichen Leistungseinbußen durch die Fragmentierung. Allerdings wird die Methode ziemlich kontrovers diskutiert, da nicht alle Geräte korrekte ICMP-Meldungen senden und dies ursprünglich auch gar nicht gefordert wurde. Insofern kann die Aktivierung von PMTUD (PMTU Discovery, PMTU- Erkennung) dazu fuhren, dass ein Absender mit bestimmten Standorten nicht kommunizieren kann oder Übertragungen einfach abreißen (was extrem schwierig zu diagnostizieren ist). Mogu90 140
9.3 Jenseits von IP 9.2.10 IP-Kennung Die Kennung (TD) ist ein 16-Bit-Wert, der bei Auftreten einer Fragmentierung die Unterscheidung zwischen IP-Paketen gestattet. Ohne IP-Kennungen würden, wenn zwei Pakete gleichzeitig fragmentiert würden, deren Fragmente bei der Wiederherstellung hochgradig verstümmelt, vertauscht oder auf andere Weise beschädigt werden. IP-Kennungen bezeichnen mehrere Wiederherstellungspuffer für verschiedene Pakete eindeutig. Der für diesen Zweck verwendete Wert wird oft ausgewählt, indem ein Zähler mit jedem gesendeten Paket einfach hochgezählt wird. So hat das erste von einem System stammende Paket die Kennung 0, das zweite die Kennung 1 usw. ■ Hinweis Bei Systemen, an denen die PMTUD aktiviert ist, sind eindeutige IP-Kennungen nicht erforderlich, weil eine Fragmentierung theoretisch gar nicht auftritt, und der Wert wird meist auf 0 gesetzt (auch wenn man einwenden könnte, dass dies nicht besonders klug ist, weil einige — auch verbreitete — Geräte das DF-Flag ignorieren). 9.2.11 Prüfsumme Die Prüfsurnme ist eine 16-Bit-Zahl, die eine einfache Fehlererkennung ermöglicht. Sie muss an jeder Zwischenstation neu berechnet werden, weil bestimmte Parameter (z. B. TTL) sich konstant ändern. Deswegen ist hierfür ein schneller, aber nicht besonders zuverlässiger Algorithmus vorgesehen. Zwar ist der Begriff prüfsurnme" heutzutage meist nur noch dem Namen nach eine echte Prüfsumme (weil meist Algorithmen wie CRC32 oder verschlüsselungstechnisch sichere Verkiü-zungsfunktionen zum Einsatz kommen), aber die IP-Prüfsumme ist in der Tat eine Summe oder zumindest etwas Ahnliches, weil hier und dort Negationen auf Bitebene eingestreut werden4, um Gegner zu täuschen. Oder vielleicht doch eher, um sicherzustellen, dass die Prüfsurnme auch bei Auftreten üblicher Übertragungsfehler korrekt bleibt. 9.3 Jenseits von IP Eine Folge von vielen der strukturellen Entscheidungen, die bei der Entwicklung von IPv4 getroffen wurden, ist das Fehlen einer vernünftigen Zustellungsgarantie, auch wenn das Netzwerk selbst zuverlässig agiert. Zwar sollen IP-Kennungen das Risiko von Kollisionen bei der Paketwiederherstellung minimieren, aber die relativ geringe Breite von 16 Bits (die 65.536 Werte gestattet) kann gelegentlich Probleme verursachen, wenn zwei Pakete mit identischen Kennungen gleichzeitig wiederhergestellt werden sollen. Außerdem sind die Technisch gesehen (auch wenn es an dieser Stelle weniger wichtig ist) basiert die IP-Prüisumme auf dem 16-Bit-Einerkomplement einer Summe von Einerkomplementen der Daten, für die die Prüfsurnme erstellt wird. 141
9 Der verräterische Akzent Prüfsummen von IP-Headem für einen zuverlässigen Integritätsschutz schlichtweg unzureichend: Eine willkürliche Änderung im Paket könnte trotz allem zur identischen Prüf- sumrne fuhren. Femer gibt es, wenn das Netzwerk tatsächlich ausfallen sollte, keine Möglichkeit, herauszufinden, welche Daten verloren gegangen sind, auch wenn der Fehler etwas so Profanes ist wie eine kurze Überlastung einer einzelnen Netzwerkkomponente. Schließlich bietet das IP-Protokoll auch keine Möglichkeit, den Absender einer Nachricht zu verifizieren: Man ist darauf angewiesen, dass der tatsächliche Absender derjenige ist, der im IP-Header aufgeführt ist. Die Aufgabe, nach Bedarf Funktionen zur Integritäts- und Zuverlässigkeitspriifung bereitzustellen, ist übergeordneten Protokollen vorbehalten. Und dieser Bedarf ist in der Regel auch vorhanden. Insofern sind Protokolle, die IP übergeordnet sind, auch erforderlich. TCP und in geringeren! Maße auch UDP bieten nicht nur den dringend notwendigen Schutz für den Datenverkehr, sondern ermöglichen dem Benutzer auch die Angabe eines Empfängers (oder Absenders) auf eine Weise, die nicht nur auf ein bestimmtes System verweist. Während der IP-Header gerade genug Informationen enthält, um die Daten zwischen zwei Systemen zu routen, nicht jedoch, um zu entscheiden, an welche Anwendung sie ausgeliefert werden sollen, erweitern UDP und TCP den Horizont um eine weitere Dimension: Sie erschließen die Domäne der Endsysteme, denn sie sagen dem Empfänger, an welche Anwendung er die eingehenden Daten übergeben soll. 9.4 Das UDP-Protokoll Nach Definition in RFC7685 bietet UDP (User Datagram Protocol) eine minirnale Obermenge der IP-Funktionalität. UDP ergänzt eine Methode zur lokalen Auslieferung der Daten, orientiert sich aber hinsichtlich der Zuverlässigkeit (bzw. deren Nichtvorhandenseins) an der untergeordneten Schicht. Gleiches gilt jedoch auch für den gelingen Mehraufwand. Die Verwendung von UDP zur Kommunikation kann mit einem Telefondienst verglichen werden, bei dem Wörter manchmal vertauscht werden oder ganz aus Sätzen herausfallen und es auch keine zuverlässige Anruferkennung gibt; dafür aber ist der Anruf billig, und Ihre Anrufe werden zügig beantwortet. Der UDP-Header (Abbildung 9.5) bietet ein Minimum an Funktionalität und ist recht einfach gestrickt. Er bringt eine kleine Anzahl Parameter ein, die vom Zielsystem interpretiert und verwendet werden können, um ein Paket an eine bestimmte Anwendung zu übergeben oder sicherzustellen, dass es unterwegs nicht verstümmelt wurde. 5 Post80 142
9.4 Das UDP-Protokoll 1 1 1 Quellport Länge l l l Zielport Prüfsumme : Daten : Abbildung 9.5 Struktur des UDP-Headers UDP wird für einzelne Abfragen, in Situationen, in denen Zustandsangaben keine Rolle spielen, oder aber dann verwendet, wenn Leistungsfähigkeit und Aufwandsbeschränkung wichtiger sind als Zuverlässigkeit. So wird UDP etwa häufig für die DNS- Namensauflösung (Domain Name System), einfache Protokolle zum Stalten und automatischen Konfigurieren des Systernstarts (BOOTP), Sfreainingtechnologien, die gemeinsame Nutzung von Netzwerkdateisystemen usw. eingesetzt. 9.4.1 Einführung in die Portadressierung UDP bringt das Konzept von Quell- und Zielports zusätzlich zu den Absender- und Zieladressen ein. (Dieses System teilt es mit TCP, einem etwas besser entwickelten Protokoll der Schicht 4, das ich im nächsten Abschnitt behandeln werde.) Ein Port ist eine 16-Bit- Zahl, die entweder von einer Anwendung auf einem Endsystem, welche Daten senden oder empfangen will, gewählt oder aber vom Betriebssystem zugewiesen wird (in diesem Fall spricht man vom „kurzlebigen" Port). Ein Port dient als Mittel, um Daten einer bestimmten Anwendung oder einem Dienst auf einem Multitasking-System zuzuführen, sodass zwischen Programmen eine gleichzeitige Kommunikation möglich ist. So kann beispielsweise ein Namensserverprozess beschließen, auf Port 53 auf eingehende Anfragen zu lauschen, während das Logprograrnui Daten überwacht, die über Port 514 eingehen. Ports ermöglichen es Clients, gleichzeitig mit diesen Prozessen zu kommunizieren. Femer ist es, wenn die Implementierung eine ordentliche Trennung von Quellport-/Zielportpaaren unterstützt, möglich, dass zwei Clients verschiedene kurzlebige Quellports verwenden, um gleichzeitig mit dem gleichen Dienst (z. B. auf Port 514) zu kommunizieren, ohne dass es Probleme mit der Frage gibt, welche Clientanwendung welche Antwort vom entfernten Dienst erhalten soll. Damit das Zielsystem zwischen Daten, die für verschiedene Anwendungen vorgesehen sind, unterscheiden und sie wie gewünscht ausliefern kann, muss der Absender die Zielportnummer bei allen Paketen angeben. Der Absender legt für jede Clientanwendung einen anderen Quellport fest, sodass, sobald der Server antwortet, diese Antwort an die korrekte Komponente weitergeleitet wird. 143
9 Der verräterische Akzent Bei diesem Portadressierungssystern ist ein Wertequadrupel — Quellhost, Quellport, Zielhost und Zielport — erforderlich, um eine ordnungsgemäße Trennung der Datenströrne und eine einwandfreie Sitzungsverwaltung für gleichzeitige Verbindungen zu gewährleisten, die von einem bestimmten System stammen oder an ein solches gerichtet sind. Die Struktur hat zur Folge, dass zu einem gegebenen Zeitpunkt maximal 65.535 Clients0 derselben IP-Adresse Verbindungen mit der Außenwelt herstellen können und dass maximal 65.535 Dienste über eine IP-Adresse lauschen können - zumindest dann, wenn man keine cleveren Ideen entwickelt. (Allerdings ist die Wahrscheinlichkeit, dass wir in absehbarer Zukunft ganz erheblich unter dieser Einschränkung zu leiden haben werden, eher geling.) 9.4.2 Übersicht zum UDP-Header Der oben in Abbildung 9.5 gezeigte UDP-Header folgt auf den IP-Ffeader und steht vor den eigentlichen Nutzerdaten in den UDP-Paketen. Er besteht aus nur wenigen Feldern: Quell- und Zielport (je 16 Bit), Paketlänge und einer 16-Bit-Prüfsumme zum Zweck einer zusätzlichen Integritätsprüfung. Und jetzt zu etwas völlig anderem. 9.5 TCP-Pakete Zweck des in Abbildung 9.6 gezeigten TCP-Protokoll-Headers (Transmission Control Pro- tocol, definiert in RFC7937) ist die Bereitstellung einer zuverlässigen, datenstrornbasierten Methode zur Herstellung einer sinnvollen Kommunikation zwischen zwei Systemen. TCP ist besser als UDP für Anwendungen aller Art geeignet; ausgenommen sind lediglich solche Anwendungen, die rnehr als nur einfache, kurze Mitteilungen und Einzeldaten übermitteln wollen. Obwohl die technische Implementierung auf der Verwendung separater IP-Datagramme basiert, die das Netzwerk durchqueren, ähnelt der Kornmunikationsmodus einer hergestellten TCP-Verbindung (die aus Sicht der Anwendung ein virtueller Kanal ist) eher einem ganz nonnalen Telefongespräch. Anders als bei UDP-Daten können Sie beim Einsatz von TCP sicher sein, dass der Empfänger die Daten immer so bekommt, wie sie gesendet wurden (bzw. dass der Kornmunikationsvorgang vollständig abgebrochen wird, wenn eine Datenwiederherstellung im Fehlerfall nicht möglich ist). Unter normalen Bedingungen können Sie außerdem darauf bauen, dass die Identität des Teilnehmers korrekt ist, aber diese Sicherheit wird - auch und gerade in Bezug auf die Leistungsfähigkeit - teuer erkauft. Technisch gesehen sind es natürlich 65.536 Ports, aber der Port 0 darf nicht verwendet werden, selbst wenn das Betriebssystem und/oder die Anwendungen dies standardwidrig zulassen würden. Post81c 144
9.5 TCP-Pakete ■ i m I ^ I ä I —r-^— \ \ 4 \ \ _l \ 8 12 16 / 20 24 28 32 \ "^ \Qufellport \ \ \ \ Zielport Sequenznjjrjimer Datenoffset \ \ \ \ Reserviert \ Bestätig unashummer Prüfsumme Fenster Dringlichkeitszeiger Optionstyp 1 Optionslänge 1 Optionsdaten 1 Optionstyp 1 Optionslänge 1 Optionslänge 1 Fülldaten Daten Abbildung 9.6 Struktur des TCP-Headers Bei TCP bauen zwei Endpunkte zunächst eine Verbindung auf. Hierbei kommt der so genannte Drei-Schritte-Handshake zum Einsatz. Hierbei gleichen die beteiligten Paiteien durch Versand (normalerweise) leerer Pakete - also solcher, die nur Header und keine Nutzdaten enthalten - ihre Ziele ab, verifizieren die Identität des jeweils anderen und handeln Sequenz- und Bestätigungsnummern für den Beginn der Datenkornmunikation aus. Diese Nummern, die als 32-Bit-Werte dargestellt werden, gewährleisten eine zuverlässige und nahtlose Übertragung, denn sie werden im Zuge des Datenversandes hochgezählt. Dies wiederum gestattet dem Empfänger, die eingehenden Pakete in die richtige Reihenfolge zu bringen und festzustellen, ob ein Teil der Daten fehlt. 9.5.1 TCP-Handshake mit Steuer-Flags Eine TCP-Sitzung beginnt, wenn ein entferntes System den Wunsch äußert, eine Verbindung mit einem bestimmten Port auf dem Zielcomputer herzustellen. Das Remote-System sendet in diesem Fall ein leeres Paket mit einem gesetzten Synchronisierungs-Flag (dem 145
9 Der verräterische Akzent SYN-Flag) und einer ersten Sequenznurnmer im Header an den Empfänger. Nach Empfang dieses Pakets muss, was auch immer als Antwort gesendet wird, diese Sequenznurnmer enthalten, um akzeptiert zu werden. Wenn das Zielsystem die korrekte Antwort nicht innerhalb einer angemessenen Zeitspanne sendet, dann wird das Paket erneut gesendet, bis entweder die Auslieferang erfolgreich ist oder der Absender den Eindruck gewinnt, dass er es nun oft genug probiert hat, und die Verbindung schließt. Die Sequenznurnmer gewährleistet, dass die Antwort auf das Paket tatsächlich vom Empfänger und nicht von einem Dritten stammt, der weiß, dass die Kommunikation stattfindet, und sie abfangen will. Außerdem ist dank der Sequenznummer sichergestellt, dass die Antwort kein verlorengegangenes, fehlgeleitetes Paket einer vorherigen Sitzung ist, das letztendlich doch seinen Weg nach Hause gefunden hat, sondern eine Reaktion auf die betreffende Anfrage des Absenders. (Bei 32-Bit-Zahlen und 4.294.967.296 möglichen Werten ist die Wahrscheinlichkeit einer Kollision erheblich geringer als bei den IP- Kennungen mit ihren nur 16 Bits. Auf diese Weise sind sowohl versehentliche Missgeschicke als auch Erfolge knobelnder Angreifer ziernlich unwahrscheinlich.) Vom Empfänger wird erwartet, dass er auf die SYN-Anforderung mit einem ähnlichen Paket reagiert, das an den Absender und den von ihm verwendeten Quellport adressiert ist. Bei diesem Paket sollte das RST-Flag (Reset) im Header gesetzt sein; auf diese Weise gibt es an, dass es nicht bereit ist, eine Sitzung einzurichten. (Auf diesem Endpunkt läuft kein Programm, das bereit ist, Verbindungsanfragen zu beantworten.) Dieses Paket muss neben einer Antwort auch die ursprünglich übennittelte Sequenznummer benennen. Alternativ - also in dem ungewöhnlichen Fall, dass der Empfänger tatsächlich willens ist, eine Verbindung herzustellen und mit dem Fremden zu kommunizieren - sollte er mit einem ähnlich aufgebauten Antwortpaket reagieren, bei dem jedoch das SYN- und das ACK-Flag (Acknowledgment; dies ist ein Bestäü'gungs-Flag) gesetzt sind; auf diese Weise zeigt er an, dass er die Anforderung akzeptiert. Ebenso angegeben sein sollte die Sequenznummer, die er von nun an als Bestandteil aller Antworten erwartet, die zu dieser Sitzung gehören sollen. Im letzten Schritt des Handshakes sendet der Absender ein einzelnes ACK-Paket, um sicherzustellen, dass beide Systeme die zuvor ausgetauschten Sequenz- und Bestätigungs- nurnmem kennen und bezüglich der Transaktion auf derselben Seite stehen. Wenn die Kommunikation diesen Punkt erreicht, gehen die beiden beteiligten Endpunkte mit einiger Sicherheit davon aus, dass sowohl Absender als auch Empfänger der sind, der sie zu sein vorgeben. Warum dieses? Nun, jeder der beiden kann den Datenverkehr beobachten, der an seine jeweilige Adresse gesendet wird. Andernfalls hätte ein Endpunkt, der lediglich seine IP-Adresse fälschte, um eine ebenso gefälschte Verbindung im Namen eines Dritten herzustellen, keine Ahnung, welche Nummer er in seine Antwort an den Gegenüber eintragen sollte. Überdies wäre dieser Gegenüber wohl recht überrascht, festzustellen, dass jemand ihm unaufgefordert SYN+ACK- oder ACK-Pakete zu schicken versucht. Dieses Handshake-Protokoll beseitigt die Chance, dass ein Fremder die Daten einfach fälscht, behebt aber nicht das Problem, dass sich ein feindseliger, aber berechtigter Benut- 146
9.5 TCP-Pakete zer in einem zulässigen Pfad zwischen den Systemen befindet (auch wenn dieser Fall - verglichen mit dem Spoofing ins Blaue hinein - doch recht unwahrscheinlich ist). ■ Hinweis Obwohl das Problem der Verwendung von ISNs (Initial Sequence Nurnbers, Ausgangsse- quenznummem), die schwer vorauszusagen sind, nicht als solches betrachtet wurde und viele Systeme Strukturen wie etwa einfache Inkrementalgeneratoren verwendeten, wurde die Möglichkeit, das ein Außenstehender entweder aufs Geradewohl eine Sitzung durch Fälschen eines TCP-Handshakes einleitete oder Daten in bereits laufende Verbindungen einspeiste, natürlich mit der Zeit doch ein wenig problematisch. Eine sorgfältige Auswahl der anfänglichen TCP- Sequenznurnmem dergestalt, dass ein Dritter nicht prophezeien kann, wie Ihr System auf ein eingehendes Paket antworten wird, gilt heute als absolut notwendig, und es gibt bereits mehrere Ansätze, um diese Aufgabe zu erledigen. Wenn der Handshake abgeschlossen ist, können die betieffenden Parteien Daten austauschen, wobei sie sich bei jedem Vorgang gegenseitig die Sequenznummem bestätigen. Pakete, die eine abweichende Sequenznummer aufweisen (welche außerhalb des zulässigen „Fensters" liegt) werden einfach ignoriert. Diese Nurnmem werden bei jedem Vorgang konstant erhöht und spiegeln so die Menge der Daten wieder, die bis zum betieffenden Zeitpunkt gesendet wurden. Dies ermöglicht die Verarbeitung der Pakete in der korrekten Reihenfolge beim Empfänger, auch wenn sie dort nicht in dieser Reihenfolge eintreffen. Um die Zuverlässigkeit zu gewährleisten, muss ein Paket neu übertragen werden, wenn es nicht innerhalb eines bestimmten Zeitraums bestätigt wurde. Beendet wird eine Sitzung, indem ein Paket mit gesetztem iTZTV-Flag und passender Bestätigungsnummer von einem der Beteiligten empfangen wird. Wenn zu irgendeinern Zeitpunkt eines der Systeme keine Lust rnehr hat und die Sitzung sofort beenden will (etwa weil es aus seiner Sicht nichts rnehr zu bereden gibt, die Gültigkeit der Sitzung abgelaufen ist oder der Gegenüber bestimmte Regeln verletzt hat), dann wird ein RST-Paket gesendet. Auf der linken Seite von Abbildung 9.7 sehen Sie einen erfolgreich dmchgeführten, korrekt abgelaufenen TCP-Handshake, rechts ein fehlgeschlagenes IP-Spoofing, dessen Verursacher die Einrichtung einer Sitzung im Namen eines unschuldigen Systems bezweckte, das überhaupt keine Ambitionen hegt, Daten mit dem Empfänger auszutauschen. Der Angreifer kann die von dem System, in dessen Namen er agieren will, verwendete Antwort weder sehen noch vorhersagen und den Handshake aufgrund dessen nicht abschließen - von einem tatsächlichen Austausch von Daten in der TCP-Sitzung ganz zu schweigen. Kevin Mitnick, einer der berühmtesten und am wohl kontroversesten diskutierten Black Hats, griff einmal den Computer von Tsutomu Shimomura an, indem er mithilfe des TCP-Spoofings die Identität einer vertrauenswürdigen Workstation annahm — ein Vorgang, der Tsutomu ziemlich aufregte und Belichten zufolge Mitnick langfristig nicht sehr geholfen hat. 9 Bell96 147
9 Der verräterische Akzent Ordnungsgemäßer Handshake Einfaches Spoofing-Szenario Client Sendet SYN-Paket mit eindeutiger Sequenz- JSendet SYN+ACK-Paket mit eindeutiger Sequenznummer Client und erhaltener Nummer zur Bestätigung zurück Server Server Sendet ACK-Nummer zur Bestätigung der Sequenz- 'Client nummer des Servers zurück Server Beide tauschen normale ACK-Pakete mit Nutzdaten Client aus; Sequenznummern werden Jeweils erhöht, um die Menge der übertragenen Daten widerzuspiegeln (NeuObertragung erfolgt nach Bedarf) Server Beide Selten senden ein FIN-Paket, um die 'Client Sitzung zu beenden Server Client Angreifer nimmt Identität der IP-Adresse des Clients an, um ihn zu täuschen oder das Vertrauen des Servers auszunutzen Server Client Server antwortet an IP- Adresse des Clients; der Angreifer erkennt die vom Server gewählte Sequenznummer nicht und kann kein gültiges ACK-Paket Imitieren Server Abbildung 9.7 Vollständiger TCP-Handshake und typischer fehlgeschlagener Spoofing-Angrrff Wie bereits angemerkt, bietet TCP einen ordentlichen Schutz gegen Zuverlässigkeitsprobleme im Netzwerk und ist für die geordnete sitzungsbasierte Kommunikation gut geeignet. Der Preis jedoch sind erforderliche Zusatzdaten, die sowohl infolge des Handshakes als auch auf beiden Endsystemen zur Pflege der Steuerinformationen für die Verbindung anfallen. Die Aufrechterhaltung dieses Zustandes fordert einen hohen Tribut, denn für jede Verbindung müssen Sequenznurnrnern und der aktuelle Status des Datenstrorns (Handshake-, Datenaustausch- und Abschlussphasen) im Auge behalten werden; zudem muss eine Kopie aller gesendeten, aber noch nicht bestätigten Daten für den Fall einer erforderlichen Neuversendung gespeichert werden usw. Aufgrund der hohen Speicher- und Leistungsanforderungen fallen Implementierungen des TCP-Stapels häufig DoS-Angriffen (Denial of Service, Dienstverweigerung) zum Opfer. 9.5.2 Weitere Parameter des TCP-Headers Es gibt im TCP-Header noch ein paar andere Parameter, die ebenfalls wichtige Aspekte der Paketinterpretation und -ausliefening steuern. Diese kommen im weiteren Verlauf der 148
9.5 TCP-Pakete Konversation zur Geltung, wenn wir versuchen, Informationen zum Absender zu eirnitteln, indem wir einfach einen Blick auf die Paketdaten werfen. Abbildung 9.6 weiter oben in diesem Kapitel enthält eine vollständige Aufführung der TCP-Felder. ■ Absender- und Zielports. Diese 16-Bit-Werte geben die logische Herkunft und das Ziel auf Absender- und Empfängersystemen an. Sie ähneln den Quell- und Zielport- parametem von UDP, aber die Porträume für UDP und TCP werden auf der Systemebene getrennt gehalten, d. h. eine Anwendung kann auf UDP-Port 1234 horchen, während eine andere selbiges auf Port 1234 im TCP-Raum tut. Die Daten werden entsprechend den Protokollangaben im IP-Header weitergeleitet. ■ Sequenz- und Bestätigungsnummern. Diese 32-Bit-Werte sichern die Sitzungsinte- grität. Eine Sequenznurnmer ist ein Wert, von dem der Absender erwartet, dass er vom Empfänger an ihn zurückgerneldet wird. Eine Bestätigungsnummer ist der vom Empfänger an den Absender zurückgesandte Wert. Er hat nur bei gesetztem ACK-Flag Aussagekraft. ■ Datenoffset (nicht zu verwechseln mit dem Offsetparameter für IP-Fragmente). Die in diesem Feld enthaltenen Informationen geben an, wo im Paket der Header endet und die Nutzdaten beginnen. Wie bei IP-Headem kann die Länge des TCP-Headers variieren, wenn bestimmte Einstellungen variabler Länge am Ende angehängt wurden. Diese Angabe ermöglicht das einfache Springen zu den eigentlichen Daten, ohne zuvor alle Headerdaten auslesen zu müssen. ■ Flags. Diese 8-Bit-Werte definieren spezielle Eigenschaften eines Pakets. Jedes der angegebenen Bits in diesem Feld repräsentiert ein spezielles Flag, das separat gesetzt oder gelöscht werden kann. Aufgrund dessen lassen sich TCP-Flags nach Beheben kombinieren. Wie oben beschrieben, definieren Primär-Flags (SYN, ACK, RST und FIN), wie ein Paket innerhalb einer TCP-Sitzung zu interpretieren ist, während Sekun- dcir-Flags bestimmte Aspekte der Auslieferung von Nutzdaten und anderer erweiterter Funktionen wie Überlastungsmeldungen steuern; letztere werden aber nicht verwendet, um den Status der Verbindung selbst zu ändern. ■ Hinweis Zwar lassen sich die Hags willkürlich setzen und löschen, aber eine Reihe möglicher Kombinationen ist schlicht unzulässig oder falsch (z. B. SYN+RST; diese Kombination ist bedeutungsfrei und formal nicht statthaft). Nur einige Kombinationen sind für den Handshake und die normale Datenverarbeitung maßgeblich. Die einzelnen Systeme reagieren unterschiedlich auf illegale Elag-Kombinationen, weswegen das Senden gefälschter Pakete mit seltsamen Kombinationen zur Ermittlung des Betriebssystems auf der anderen Seite sehr beliebt ist. ■ Fenstergröße. Dieses 16-Bit-Feld steuert die maximale Menge der Daten, die gesendet werden können, ohne dass ein zugehöriges Bestätigungspaket empfangen wird. Ein höherer Wert gestattet das gleichzeitige Senden von mehr Daten, ohne dass eine Bestätigung abgewartet werden muss, kann sich aber negativ auf die Leistung auswirken, wenn ein Teil der Daten unterwegs verloren geht und deswegen nicht bestätigt wird; in diesem Fall müssen die entsprechenden Pakete erneut gesendet werden. 149
9 Der verräterische Akzent ■ Prüfsumme. Diese einfache 16-Bit-Prüsurnme schützt die Integrität der Schicht-4- Daten und ähnelt den entsprechenden Funktionen in UDP- und IP-Headem. ■ Dringlichkeitszeiger. Dieses Feld wird nur vom Empfänger ausgewertet, wenn das URG-Flag {Urgent, eines der Sekundär-Flags) in einem Paket gesendet wird. Ist URG nicht gesetzt, dann wird der in diesem Bereich des Headers angegebene Wert einfach ignoriert. Das Flag zeigt an, dass der Absender den Empfänger auffordert, eine bestimmte Meldung an die Anwendung, die die Daten verarbeitet, direkt weiterzuleiten. Dies lässt sich wahrscheinlich auf eine „dringliche" Situation zurückführen, sodass das Paket an einer früheren Position in den logischen Datenstrorn eingefügt wird, als es sonst der Fall wäre. Der tatsächliche Offset wird vom Wert des Dringlichkeitszeigers gesteuert. In der normalen Kommunikation kommt diese Technik nur selten zum Einsatz. 9.5.3 TCP-Optionen Der Block mit Optionen, der sich am Ende des Headers befindet, weist eine variable Länge auf und dient der Angabe zusätzlicher Einstellungen und Parameter für das Paket. In manchen Fällen ist er leer (d. h. er hat eine Länge von 0 Bytes), häufiger aber dient er dem Aufführen von Erweiterungen des Protokolls, die später hinzugefügt wurden, aber diejenigen Implementierungen nicht behindern sollen, die diese Erweiterungen nicht verstehen. Der Optionsblock ist so aufgebaut, dass Systeme, die eine bestimmte Option nicht erkennen, diese problemlos ignorieren können. Nachfolgend aufgeführt sind die wichtigsten Optionen: ■ MSS (Maximum Segment Size, maximale Segmentgröße). Dieser 16-Bit-Wert entspricht der MTU im Netzwerk des Absenders abzüglich der Größe der Header untergeordneter Schichten. So gibt er die maximale Länge der Pakete an, die wieder an den Absender zurückgeschickt werden können, ohne dass es unterwegs zu Fragmentierungen kommt. Der Absender gewährleistet rnithilfe der MSS-Einstellungen immer dann eine optimale Leistung, wenn der Empfanger große Datensegmente zurückgibt, die andernfalls fragmentiert würden, was wiederum die Bandbreite beeinträchtigen würde. Leider wird die MSS-Option vom Endsystem gemäß seinem Wissen bezüglich der Größe der Pakete eingestellt, die in seiner unmittelbaren Netzwerkumgebung verarbeitet werden können, d. h. das häufig auftretende Problem der Fragmentierung auf Zwischensystemen wild hierdurch nicht beseitigt. (Dies ist der Grund dafür, dass auf IP- Ebene die oben beschriebene PMTU-Erkennung implementiert wurde.) ■ Fensterskalierung. Dieser 8-Bit-Wert, der in RFC123210 beschiieben ist, erweitert den Bereich des in der ursprünglichen Definition des TCP-Headers bereits vorhandenen Fenstergrößenfeldes. Es hat sich nämlich herausgestellt, dass die Bestätigung von jeweils 64 Kbyte Daten (der größte mit den 16 Bits des Originalparameters darstellbare Wert) einen Leistungsengpass verursachen kann, wenn große Datenmengen wie etwa 10 Jaco92 150
9.5 TCP-Pakete Multimediadaten über Verbindungen mit großer Bandbreite, aber hoher Latenz übertragen werden. Die Fensterskalierung ist eine Methode zur Erweiterung der Fenstergröße, damit rnehr Daten gesendet werden können, ohne dass diese zwischenzeitlich bestätigt werden Hiüssten. Dies beschleunigt den Datentransfer, andererseits müssen aber, wenn ein einzelnes Paket fehlt, mehr Daten neu übertragen werden. ■ Optionen für selektive Bestätigungen. Diese Option ist in RFC201811 beschrieben. Wenn breitere Fenster verwendet werden, dann erfordert der Verlust nur- eines einzigen Paketes die Neuübertragung der gesamten unbestätigten Datengruppe, was eine erhebliche Verschwendung von Bandbreite darstellt. Um dies zu verhindern, wurde eine Methode zur selektiven Bestätigung von Datenblöcken entwickelt. Endpunkte geben durch Übermittlung der Option Selective ACKPermitted zunächst einmal an, dass sie willens und in der Lage sind, diese Funktionalität zu implementieren. Danach bestätigen sie, sofern möglich, mithilfe der eigentlichen Option Selective Acknowledgment im Header nichtfortlaufende Datenblöcke. Die Iinplementiemng dieser Technik kann die Leistung erheblich steigern, allerdings werden rnehr Speicher- und Datenverarbeitungskapazitäten benötigt. ■ Zeitstempeloption. Diese leistungssteigemde Option, die aus zwei 32-Bit-Werten besteht, ist in RFC 1232 definiert. Diese Methode zur Übennittlung und Rückmeldung von Zeitstempeln, die normalerweise auf irgendeine Weise basierend auf der Systemoder Laufzeit erstellt werden, erlaubt jedem Endpunkt eine Schätzung der Zeit, die die Daten flu- den Hin- und Rückweg zum bzw. vom Gegenüber benötigen (Rundreisezeit, engl. Round-Trip Time). Der wesentliche Vorteil dieser Option besteht darin, dass der Absender die Zeit, die ein Paket normalerweise benötigt, um sein Ziel zu erreichen, ermitteln und gegebenenfalls eine TCP-Neuübertragung einleiten kann, wenn keine Antwort eintrifft. Eine weitere Anwendung der Zeitsternpeloption besteht darin, Kollisionen von Sequenznurnmern zu verhindern, was beispielsweise passieren kann, wenn ein Paket, das schon vor Ewigkeiten abgeschickt wurde, doch noch beim Empfänger eintrifft, nachdem in der Zwischenzeit bereits wieder mehrere Gigabyte Daten ausgetauscht wurden und der Sequenznurnmernzähler einen vollständigen Umlauf durchgeführt hat. Diese Funktion heißt auch PAWS (Protection Against Wrapped Sequence). ■ EOL. Diese Option ist als Abschluss der Optionen zu interpretieren. Sie weist den Empfanger an, nachfolgende Daten nicht mehr als Teil des Headers zu verarbeiten. Da die Größe des TCP-Headers in Einheiten definiert ist, die länger sind als ein einzelnes Byte, kann, wenn alle Optionen angegeben wurden, bis zum Beginn der Nutzdaten noch ein „leerer" Datenbereich folgen, weil vor den Nutzdaten immer vollständige 4- Byte-Blöcke stehen müssen. Mit der EOL-Option kann verhindert werden, dass der Empfanger diese Fülldaten zu analysieren versucht. ■ NOP. Diese Option bedeutet „tue nichts" und wird vom Empfänger mehr' oder weniger einfach ignoriert. Der Absender kann (und sollte) NOPs in einem Paket als Fülldaten Math96
9 Der verräterische Akzent verwenden, um mehrere Multibyteoptionen anzuordnen (dies ist aufgrund von Leistungs- und Architektuibeschiänkungen bei einigen Prozessoren erforderlich12). T/TCP (Transacrional TCP). Diese etwas esoterische Erweiterung unterstützt separate virtuelle Sitzungen (Transaktionen) innerhalb einer laufenden TCP-Sitzung. Hierdurch kann man den Mehraufwand drosseln, der durch die Notwendigkeit verursacht wird, jedes Mal, wenn Sie eine bestimmte Operation mit nur einmal benötigten Diensten ausführen wollen, einen vollständigen Handshake durchzuführen. So etwas kommt häufiger vor, wenn eine Anwendung eine Anzahl separater Transaktionen mit einem Server verarbeiten will. Die Erweiterung wird nur selten eingesetzt und ist in erster Linie für bestimmte Datenbanksysteme geeignet.13 9.6 ICMP-Pakete ICMP-Pakete (Internet Control Message ProtocoL definiert in RFC79214) werden zur Übermittlung von Diagnoseinformationen und Benachrichtigungen zu anderen Protokolltypen gesendet. Auf der logischen Ebene als Teil der Schicht 3 zu betrachten, werden ICMP-Pakete als Nutzdaten in IP-Paketen übeitragen und unterscheiden sich insofern nicht von Nutzdaten der Schicht 4. ICMP übeitiägt keine neuen Benutzenaumdaten zwischen den Endpunkten, sondern stellt stattdessen eine einfache Signalisierangsmethode für IP bereit. Abbildung 9.8 zeigt die Struktur des ICMP-Headers. Typ 12 _l_ 16 Code 20 _l_ 24 _l_ 28 _l_ 32 Prüfsumme Meldungsinhalt (für Fehlermeldungen, gekapselter Teil des ursprünglichen IP-Datagramms) Abbildung 9.8 Aufbau des ICMP-Headers 12 14 „Erforderlich" bedeutet hier- „für eine korrekte Verarbeitung unumgänglich". Es gibt Prozessoren, die erhebliche Leistungseinbußen aufweisen, wenn sie auf Datenstrukturen mit mehreren Bytes zugreifen müssen, die nicht auf Längen von 32 oder 64 Bit abgeglichen sind. Andere Prozessoren erzeugen einen schweren Ausnahmefehler (eine so genannte Execution Trap) und verweigern fortan jeden weiteren Betriebsschritt. Natürlich kann ein dreister Absender gezielt Daten ungeeigneter Länge in den Puffer einspeisen — in der Hoffnung, dass das Zielsystem bei Empfang eines solchen Systems einfach in sich zusammenfällt. Intelligente Betriebssysteme fangen so etwas allerdings durch eine Prüfung ab oder versuchen zuerst, die Daten in einen Bereich korrekter Länge zu kopieren, bevor sie sie verarbeiten. Man sollte jedoch nicht allzu sehr auf die Vemunftbegabtheit von Betriebssystemen bauen Vgl. RFC1644 (Brad94). Post81c 152
9.6 ICMP-Pakete Beim Austausch von TCP- oder UDP-Daten werden die unterschiedlichsten ICMP-Daten gesendet. Sie geben gewöhnlich an, dass ein bestimmtes Paket nicht ausgeliefert werden konnte, die Gültigkeitsdauer wählend der Übertragung überschritten wurde oder es aus irgendeinem Grund abgewiesen wurde. Bestimmte ICMP-Pakettypen können auch spontan gesendet werden: Es gibt Pakete, die Router bekannt machen, Echoanforderungen (,,Ping") usw. Wie bei UDP-Paketen ist auch der ICMP-Header recht einfach strukturiert. Er enthält die folgenden Felder: ■ Nachrichtentyp. Dieses 8-Bit-Feld gibt eine allgemeine Kategorie des Ereignisses an, aufgrund dessen das Paket gesendet wurde (z. B. „Empfänger nicht erreichbar"). Das Feld kann auch eine nicht auf ein Ereignis bezogene Meldung enthalten, aber das kommt eher selten vor. ■ Nachrichtencode. Dieser 8-Bit-Wert nennt - sofern möglich - das eigentliche Problem. Er hängt vom Nachrichtentyp ab und beschreibt den auslösenden Umstand in detaillierterer Form (z. B. „Netzwerk nicht erreichbar", „Host nicht erreichbar", „Port nicht erreichbar" oder Kommunikation durch Administrator unterbunden"). Welcher Unterschied im Grad der Detailliertheit zwischen dem Nachrichtentyp und dem Nachrichtencode liegen soll, ist allerdings unklar. ■ Paketprüfsumme. Dieses Feld gewählleistet, dass das Paket nicht beschädigt wurde. Die Funktionalität entspricht dem entsprechenden Feld bei UDP und TCP. Der Header eines ICMP-Pakets ist relativ einfach strukturiert und bietet an sich gar nicht genug Informationen, um das gemeldete Problem analysieren zu können oder zu ermitteln, welcher Datenverkehr diese Meldung überhaupt erzeugt hat. Stattdessen befinden sich diese Angaben im Nutzdatenbereich des Pakets, welcher dem Header unmittelbar folgt. Zwar hängen die Nutzdaten eines ICMP-Pakets von der Nachricht ab, in der Regel enthalten sie aber den Anfang des Pakets, das die Meldung ausgelöst hat. Auf diese Weise kann der Empfänger bestimmen, welchem KoHimunikationsvorgang die Nachricht zuzuordnen ist und welche Anwendung von dem Problem in Kenntnis gesetzt werden sollte. Femer kann hiermit sichergestellt werden, dass der Absender des ICMP-Pakets tatsächlich ein System, das sich irgendwo auf der Route zwischen den beiden betreffenden Computern befindet, und kein Unbefugter ist. Andernfalls würde der Absender nicht erkennen können, welche Daten eigentlich ausgetauscht werden. (Insbesondere wäre es nicht möglich, die exakten Sequenznurnmem in den TCP-Paketen zu bestimmen.) Hierdurch wird verhindert, dass der Lauscher an der Wand gefälschte Mitteilungen sendet, die Konnektivitätsprobleme vortäuschen und einen Endpunkt dazu bringen, die Verbindung zu trennen. Zumindest in der Theorie. Natürlich kann es recht schwierig sein, die Guten von den Bösen zu unterscheiden, denn einige Systeme sind berüchtigt dafür, die Originaldaten zu verstümmeln oder falsch anzugeben. 153
9 Der verräterische Akzent 9.7 Bühne frei für passives Fingerprinting Was nun hat die Struktur dieses Protokolls mit der Privatsphäre von Benutzern zu tun? Die Antwort mag absonderlich anmuten: Obwohl der Aufbau von IP-, TCP-, UDP- und ICMP- Paketen recht strikt ist und die in diesen Headern übertragenen Daten nicht gerade besonders auskunftsfieudig sind, ermöglichen Unterschiede in der Alt und Weise, wie die verschiedenen Betriebssysteme Informationen zu diesen Paketen hinzufügen, nicht nur Aussagen zum verwendeten Betriebssystem, sondern auch zur Version, die auf einem bestimmten Computer läuft. Diese Unterschiede sind besonders auffällig beim Umgang mit Daten, die in der Spezifikation nicht eindeutig und angemessen behandelt oder von den normalen Qualitätssicherungsroutinen nicht analysiert werden (z. B. eingehende Pakete mit unzulässige Flag-Kombination wie etwa SYN+RST). Aufgrund der Ergebnisse umfangreicher Forschungen an unterschiedlichen Betriebssystemen durch Belastungstests der jeweiligen Implementiemngen kann man guten Gewissens feststellen, dass keine zwei Implementierungen der IP-Protokollsuite bei Betriebssystemen identisch sind. Mithilfe komplizierter Analysevorgänge lassen sich Unterschiede zwischen demselben Betriebssystem auf leicht unterschiedlichen Plattformen ebenso ausmachen wie zwischen leicht unterschiedlichen Versionen eines Betriebssystems. Aktive Analysetools wie dem TCP/UDP-Fingerprinter und -Portscanner NMAP von Fyodor oder dem ICMP- Fingerprinter Xprobe von Ofir Arkin nutzen Fehler oder Unzulänglichkeiten aus, die auf jedem System vorhanden sind. Sie identifizieren Typ und Version des Betriebssystems, indem sie verschiedene Alten verstümmelter und unnormaler Pakete senden und dann die ausgelösten Reaktionen messen und analysieren. 9.7.1 Schnüffeln in IP-Paketen: Die gute alte Zeit Die Methoden des System-Fingerprintings enden hier nicht. Eigentlich ist das Einprügeln auf das entfernte System durch die Übermittlung suspekter und leicht erkennbarer Daten eher alles andere als eine subtile Art, dieses Problem anzugehen. Im Frühjahr 2000 demonstrierten zwei Mitglieder der Subterrain Security Group mit den Spitznamen bind und aempirei, dass es häufig möglich ist, sich Informationen zu einer entfernten Einheit in einem Netzwerk zu verschaffen, ohne einen Kommunikationsvorgang der indiskreten Art (oder überhaupt irgendeine Art der Kommunikation) mit ihr durchzuführen. (Der Code und die Ergebnisse wurden zuerst auf der DefCON 8 präsentiert, einer etwas überbewerteten Hackermesse, die im Jahr 2000 stattfand.) Bei dieser Methode, die man heute als passives Fingerprinting bezeichnet, geht es um das passive (ach!) Beobachten unregelmäßigen Datenverkehrs, der von einem entfernten System stammt. Zwar sind die Metriken, die von dieser Methode verwendet werden, weitaus subtiler und auch beschränkter als die von Fyodor und seinen Vorgängern benutzten, aber eine gerüttelt Maß an Forschungsarbeit (zu der ich, wie ich mit Stolz sagen darf, verschiedentlich beitragen durfte) hat ausreichend viele Beobachtungen ermöglicht, um einen ziemlich beeindruckenden Präzisionsgrad zu erzielen. 154
9.7 Bühne frei für passives Fingerprinting Damit Sie besser verstehen können, was sich einem einzelnen Paket, das über das Netzwerk empfangen wurde, entnehmen lässt, wollen wir einen Bück auf die Metriken werfen, auf die wir passives Fingerprinting gründen können, und untersuchen, was sie uns über den Gegenüber sagen können. Für diese Untersuchung wollen wir den im Internet verbreitets- ten Datenverkehrstyp sezieren: ein völlig normales und zulässiges TCP-Paket in einer IP- Schale. 9.7.2 Der TTL-Startwert (IP-Schicht) Wir eiinnem uns: Das TTL-Feld legt die Anzahl der Systeme fest, die ein Paket passieren darf, bevor es als unzustellbar verworfen wird. Der TTL-Wert eines Pakets wird dabei jedes Mal dann verringert, wenn es einen Router passiert. Erreicht das Feld den Wert 0, dann wird das Paket aus dem Netzwerk entfernt. Da es keine definierten Anforderungen gibt, welchen Startwert das Feld vom Absender erhält, würfeln viele Entwickler von IP-Stapeln den Standardwert für „ihr" System quasi einfach aus. Zwar kann ein passiver Zuschauer den Staitwert des Pakets ohne zusätzliche Tests nicht exakt ermitteln (weil das Paket mit größter Wahrscheinlichkeit mehrere Router passiert hat, bevor es in Sichtweite des Zuschauers gekommen ist), aber er weiß zumindest schon einmal, dass dieser Startwert höher gewesen sein muss als der, den er dem Paket im aktuellen Zustand entnommen hat. Außerdem übersteigt die Dui-chschnittsentfemung zwischen zwei Computern im Internet einen Wert von 15 Zwischengeräten („Hops") nur selten, und ein Abstand von mehr als 30 Hops kommt eigentlich nicht vor. Aufgrund dessen kann man als Schnüffler sicher davon ausgehen, dass der Ursprungswert irgendwo zwischen der beobachteten TTL und der Summe dieser TTL plus 30 hegen muss (aber natürlich nicht höher als 256). Da wir die Startwerte verbreiteter Betiiebssysteme kennen, können wir mit einiger Sicherheit auf den Betriebssystemtyp schließen, den der Absender verwendet. (Linux-Systeme und BSD-Derivate verwenden normalerweise den Staitwert 64, Windows 128 und einige echte UNIX-Abkörnrnlinge 255.) Wenn wir einmal basierend auf diesem und anderen Faktoren das Betiiebssystem ermittelt haben, das da Paket gesendet hat, können wir unter Umständen bestimmen, wie weit der Absender von unserem Beobachtungspunkt entfernt ist, indem wir die beobachtete TTL von dem Wert abziehen, der offenbar als Staitwert verwendet wurde. Durch Abgleichen dieses Weites mit der zuvor ermittelten (oder anderweitig bekannten) Entfernung zum Absendemetzwerk können wir nachfolgend ein paar Schlussfolgerungen über die Organisation des absenderseitigen internen Netzwerks ziehen. 9.7.3 Das DF-Flag (IP-Schicht) Das DF-Flag besagt, dass, wenn ein Paket nicht über eine bestimmte Netzwerkverbindung gesendet werden kann, dieses nicht fragmentiert, sondern verworfen werden soll. Indem wir feststellen, ob dieses Flag gesetzt ist, können wir bestimmen, ob das System den oben beschriebenen PMTUD-Mechanismus verwendet, wodurch wir weitere Hinweise auf das 155
9 Der verräterische Akzent verwendete Betriebssystem erhalten. Außerdem wird hierdurch zwischen zwei großen Gruppen von Betriebssystemen unterschieden: Nur neuere IP-Implementiemngen nutzen diese Methode, während alle anderen nicht daran interessiert sind, das Flag in ausgehenden Paketen zu setzen. 9.7.4 Die IP-Kennung (IP-Schicht) Wie bereits weiter oben (im Abschnitt zu den Unzulänglichkeiten der Paketfragmentierung) erwähnt, setzen bestimmte PMTUD-fähige Betriebssysterne die IP-Kennung bei einigen (oder allen) ausgehenden Daten auf 0, weil sie der Ansicht sind, dass die Daten nicht fragmentiert werden sollen, und es sicherheitstechnische Bedenken bezüglich der Preisgabe einer IP-Kennung gibt. (Wir werden in Kapitel 13 darauf zurückkommen.) Deswegen können wir solche Systeme identifizieren, indem wir überprüfen, ob die IP-Kennungen eingehender Pakete auf 0 stehen. Die Sache hat allerdings einen Haken: Zwar setzen einige PMTUD-fähige Betriebssysterne die IP-Kennung immer auf 0, andere hingegen tun dies jedoch zu unvorhergesehenen Zeitpunkten — aus dem einfachen Grund, dass der Auswahlbereich für IP-Kennungen nicht allzu groß ist. Anders gesagt: Wenn Sie ein Paket mit einer IP-Kennung ungleich 0 sehen, dann können Sie sicher davon ausgehen, dass dies kein System ist, das Nullwerte für alle ausgehenden Daten setzt. Erkennen Sie jedoch in einem Paket einen solchen Nullweit, dann kann dies von einem besonderen Exemplar eines PMTUD-fähigen Systems, aber auch von einem „regulären" System verursacht worden sein, dass für dieses Paket zufällig den Wert 0 gewählt hat. Die Wahrscheinlichkeit, dass dies passiert, ist zwar geling, aber nicht vemachlässigbar. Sie sollten insofern IP-Kennungen mit Nullwerten entweder mit Vorbehalt betrachten (und nur Kennungen ungleich 0 verwenden, um die Menge möglicher Betriebssysteme einzugrenzen), oder denselben Absender mehrfach beobachten, um sicherzustellen, dass er konsequent Nullwerte verwendet. 9.7.5 Diensttyp (IP-Schicht) Dieses Feld sollte strukturseitig eigentlich so eingestellt sein, dass es Priorität und Typ des Datenverkehrs widerspiegelt, damit Zwischensysteme erkennen können, wie mit dem Paket zu verfahren ist. Allerdings wird eine solche Einstellung praktisch nie vorgenommen. Die meisten Betriebssysteme setzen das Feld auf einen willkürlichen Wert, da dies ohne stärkere Beeinträchtigung des TCP-Betrieb möglich ist. Je nachdem, wie wichtig der Entwickler sich nimmt, setzt er den Parameter standardmäßig auf 0 oder findet es angemessener, rnithilfe einer bestimmten Bitkombination alle Pakete, die sein System verlassen, mit Attributen wie „geringe Latenz", „hohe Zuverlässigkeit" oder ähnlichem zu versehen.15 Es gibt auch Entwickler, die das Bit „Must Be Zero" („Null erzwingen") dieses Parameters setzen (was in einer vorschriftsmäßigen Anwendung niemals geschehen dürfte), um eine eigene Note einzubringen. 156
9.7 Bühne frei für passives Fingerprinting Dies gibt uns einen Vorteil: Weil wir die Vorgabewerte bestimmter Betriebssysteme kennen, können wir deren Anzahl in Bezug auf das vom Absender verwendete System weiter eingrenzen. Die Verwirrung wird allerdings dadurch gesteigert, dass einige unhöfliche DSL-Betreiber und andere Provider dieses Feld bei ausgehendem Datenverkehr manchmal ändern. Ihre Hoffnung besteht darin, dass der eine oder andere Router auf der anderen Seite des Globus auf diesen Trick hereinfällt und wirklich glaubt, dass Pakete mit dem Attribut „hohe Priorität" tatsächlich bevorzugt behandelt und schneller als andere Datenströrne weitergeleitet werden müssen, was den Kunden des jeweiligen Providers beschleunigtes Surfen im Web ermöglicht. (Dass ist gelingt, ist allerdings zu bezweifeln.) Nicht nur die Betriebssysteme, sondern auch die Intemetprovider können den Wert des Diensttypfeldes relativ frei auswählen. (So verwendet beispielsweise ein Anbieter aus Schweden eine interessante und ziemlich einzigartige Kombination gesetzter Bits, die sich auf den Wert 3 summieren, und setzt Diensttypbits für die Einstellung „hoher Durchsatz".) Diese Praxis macht es uns aber auch relativ einfach, erkannten Daten einem bestimmten Internetprovider zuzuordnen, indem wir lediglich die Auswahl der Diensttypbits betrachten — dies erspart uns eine aktive Analyse der Quell-IP-Adresse (etwa durch Ermitteln bei einer Registrierungsstelle). 9.7.6 Felder mit erzwungenen Null- und Nichtnullwerten (IP- und TCP-Schichten) Die IP- und TCP-Spezifikationen schreiben eine Anzahl von Feldern vor, die für eine zukünftige Verwendung reserviert sind. Alle aktuellen Systeme sollten diese Felder auf 0 setzen, sodass Werten ungleich 0 an der jeweiligen Paketposition in Zukunft eine bestimmte Bedeutung zugeordnet werden kann. Natürlich gibt es einige Implementieningen, die diese Felder vor dem Versand entgegen der Spezifikation nicht auf 0 setzen. Diese Angelegenheit wird zudem auf der Qualitätssicherungsebene nicht beseitigt, weil sie keine spürbaren Probleme verursacht, und andere Systeme weisen Pakete aufgrund dieses Makels auch nicht ab — nach dem Motto „Vorsicht ist die Mutter der Porzellankiste". Insofern kann dieses Problem noch Ewigkeiten fortbestehen — vielleicht sogar so lange, bis diese Bits im Rahmen irgendeiner TCP-Erweiterung tatsächlich verwendet werden, die dann auf solchen mangelhaften Systemen mehr oder minder eindrucksvoll scheitert. Auch hier ist die Überprüfung dieser Werte eine weitvolle Infonnationsquelle, die uns recht genaue Hinweise auf das vom Absender verwendete Betriebssystem gibt. 9.7.7 Quellport (TCP-Schicht) Der Quellport gibt den Ursprung einer Verbindung auf der Absenderseite an. Jedes System verfolgt einen Ansatz zur Zuweisung so genannter kurzlebiger (Absender-)Ports für ausgehende Verbindungen; indem man also die beobachtete Portnummer überprüft, kann man häufig das Betriebssystem des Absenders ableiten. Außerdem verwenden Systeme, die das 157
9 Der verräterische Akzent Masquerading einsetzen, nonnalerweise einen recht speziellen Portbereich für diesen Zweck. Beim Masquerading, das auch als n:l-Netzadressübersetzung bezeichnet wird, werden aus einem privaten Netzwerk ausgehende Daten so umformuliert, dass sie alle vom selben System (dem Masquerading-Systern) zu stammen scheinen; Antworten, die dieses System empfängt, werden zurückübersetzt und dann innerhalb des privaten Netzwerks an den erforderlichen Empfänger ausgeliefert. Das Masquerading wird häufig gleichermaßen in Unternehmens- und Heimnetzwerken eingesetzt, um Adressen einzusparen. Das interne Netzweit kann einen großen Pool mit Adressen verwenden, die ihm technisch gesehen gar nicht zugewiesen sind. Diese Adressen werden aus dem Internet nicht in dieses Netzwerk (und auch in kein anderes) geroutet. Trotzdem können Systeme, die diese Adressen verwenden, auf das Internet zugreifen, indem sie ihre ausgehenden Daten über ein Agentensystem leiten. Dieses System verwendet seine eigene, ordnungsgemäße IP-Adresse, um entfernte Systeme im Namen des ursprünglichen Absenders zu kontaktieren. Dieser Ansatz schützt auch interne Systeme, denn ein Außenstehender kann keinesfalls unaufgefordert eine Direktverbindung mit einem internen System aufnehmen — eine Verbindung nach draußen kann nur von innen her aufgebaut werden. Indem man den Bereich der Quellports untersucht, der von den anderen Beteiligten gewählt wird, kann man auch hier Rückschlüsse auf das verwendete Betriebssystem ziehen und — wenn man den erkannten Bereich mit anderen Beobachtungen abgleicht — ermitteln, ob sich der Absender in einem privaten Netzwerk befindet, in dem die Adressübersetzung zum Einsatz kommt (in diesem Fall würden die für das Betriebssystern erwarteten Quellports höchstwahrscheinlich nicht mit den tatsächlich beobachteten Ports übereinstimmen). Wenn das Absendemetzwerk die Adressübersetzung verwendet, lassen sich außerdem bestimmte Rückschlüsse bezüglich der Art des zur Übersetzung benutzten Gerätes ziehen, da verschiedene Produkte unterschiedliche Bereiche gebrauchen. 9.7.8 Fenstergröße (TCP-Schicht) Wie wir wissen, bestimmt die Fenstergröße die Menge der Daten, die ohne Bestätigung gesendet werden können. Die jeweilige Einstellung wird häufig auf der Basis der Vorgaben gewählt, die der Entwickler von seinem indischen Guru oder anderen spirituell maßgeblichen Institutionen erhält. Die beiden meistverwendeten Ansätze besagen, dass der Wert entweder ein Vielfaches der MTU abzüglich der Protokoll-Header sein sollte — ein Wert, der auch als MSS (Maximum Segment Size) bezeichnet wird —, oder aber einfach groß genug und irgendwie „rund". Ältere Linux-Versionen (etwa 2.0) verwendeten Zweierpotenzen (z. B. 16.384). Bei Linux 2.2 wechselte man dann zum 1 lfachen oder 22fachen der MMS (warum auch immer), und neuere Linux-Versionen verwenden das Zwei- oder Vierfache des MMS-Werts. Die Sega Dreamcast — eine netzwerkfähige Spielekonsole — benutzt den Wert 4.096, und bei Windows wird häufig 64.512 verwendet. Eine Anwendung kann den vom Betriebssystem verwendeten Fenstergrößenwert zwar oft ändern, um eine Leistungssteigerang zu erzielen, aber von dieser Möglichkeit wird nur sel- 158
9.7 Bühne frei für passives Fingerprinting ten Gebrauch gemacht. (Das Vorhandensein eines Wertes, der vom für ein Betriebssystem erwarteten Standardwert abweicht, erlaubt unter Umständen einen Rückschluss auf die verwendete Anwendung. Eines der wenigen Beispiele für eine solche Anwendung ist Opera, ein leidlich bekannter Webbrowser.) 9.7.9 Dringlichkeitszeiger und Bestätigungsnummer (TCP-Schicht) Die in den Feldern für den Dringlichkeitszeiger (16 Bits) und die Bestäü'gungsnummem (32 Bits) angegebenen Werte werden nur verwendet, wenn ein passendes TCP-Flag (URG bzw. ACK) im Paket gesetzt ist. Sind diese Flags nicht gesetzt, dann sollten die Werte auf 0 gesetzt werden, was aber wiederum häufig nicht getan wird. Einige Systeme initialisieren sie einfach auf einen Wert ungleich 0, wodurch allerdings kein echtes Problem entsteht: Da die Werte ohne gesetztes Flag gar nicht ausgewertet werden, erlauben sie lediglich die Identifizierung eines bestimmten Betriebssystems. In machen Fällen allerdings werden diese Werte überhaupt nicht initialisiert, sondern einfach aus dem Puffer kopiert, der zur Herstellung des TCP-Pakets verwendet wird — egal, was dort zum jeweiligen Zeitpunkt gerade gespeichert ist. Ich habe dieses Verhalten, als ich mich mit dem passiven Fingerprinting für verschiedene Betriebssysteme beschäftigte, bei den Protokollstapeln von Windows 2000 und Windows XP beobachtet: Immer dann, wenn zwei TCP-Sitzungen gleichzeitig stattfanden, tauchten Teile der Daten einer früheren Sitzung in der aktuellen erneut auf. (Wir werden in Kapitel 11 noch darauf eingehen.) Dies sagt uns, dass die betreffende Person im Hintergrund noch etwas anderes erledigt, und enthüllt uns zudem einige Informationen, die an einen Gegenüber übermittelt wurde. Aber hallo! 9.7.10 Reihenfolge und Einstellungen von Optionen (TCP-Schicht) Die exakte Reihenfolge und Auswahl der Optionen in einem Paket sieht auf jedem Be- triebssystern anders aus. Da nicht festgelegt ist, wie Optionen in einem Paket sortiert sein müssen, gibt es einige „verräterische" Kombinationen. So verwendet beispielsweise Windows bei SYN-Paketen die charakteristische Abfolge MSS, NOP, NOP, Selective ACK Permitted, während Linux gemeinhin die Reihenfolge MSS, Selective ACK Permitted, Zeitstempel, NOP, Fensterskalierung benutzt. Natürlich ist auch dies eine hervorragende Möglichkeit, Betriebssysterne auseinander zu halten. 9.7.11 Fensterskalierung (TCP-Schicht) Der Skalierungsfaktor für die Fenstergröße ist normalerweise auf 0 gesetzt. Einige Betriebssysteme allerdings setzen hier standardmäßig einen höheren Wert oder erhöhen den Wert permanent für bestimmte Datentypen, sofern sie meinen, dass dies sinnvoll sein könnte — wenn also etwa ein Benutzer gerade einen raubkopierten Film aus einem P2P- Netzwerk heruntergeladen oder einen umfangreichen Download anderer Alt abgeschlossen hat (wobei letzteres natürlich ein bisschen weniger wahrscheinlich ist). 159
9 Der verräterische Akzent 9.7.12 MSS (Option in der TCP-Schicht) Dieses Feld, welches die maximale Segmentgröße angibt, ist bei einigen Betriebssystemen auf einen bestimmten Wert festgelegt, während es bei anderen den Typ des direkten Netzwerkanschlusses des Geräts angibt. Verschiedene Netzwerktypen arbeiten mit unterschiedlichen MTUs, d. h. man kann feststellen, ob ein Benutzer eine sehr schnelle DSL- Verbindung oder eine schnöde Modemanbindung benutzt. 9.7.13 Zeitstempeldaten (Option in der TCP-Schicht) Da dieser Wert häufig der Systernlaufzeit entspricht, kann man diese durch Überprüfung der Zeitsternpeloption oft feststellen. Außerdem kann man mehrere Systeme voneinander unterscheiden, indem man die Zeitsternpelvariationen in den eingehenden Daten überprüft: Verschiedene Systeme haben unterschiedliche Betriebszeiten (und die Wahrscheinlichkeit, dass sie zum exakt gleichen Zeitpunkt gestaltet wurden, ist ziemlich unwahrscheinlich), wogegen derselbe Computer einen kontinuierlich ansteigenden Zeitsternpelwert verwendet. Dies ist in zweierlei Situation recht praktisch. Die erste hegt vor, wenn eine Anzahl Systeme mit derselben IP-Adresse arbeitet (wie z. B. beim Masquerading). In diesem Fall kann ein neugieriger Webmaster auch dann, wenn alle Anforderungen von derselben Adresse stammen und auf den ersten Bück nicht unterscheidbar zu sein scheinen, bestimmen, wie viele eindeutige Benutzer des Unternehmens X ihre Website aufgerufen haben, und wo diese Benutzer sich aufhalten. Die zweite Anwendung ermöglicht das Zurückverfolgen eines einzelnen Benutzers, der — warum auch immer — von IP-Adresse zu IP-Adresse springt. Warum könnte das jemanden interessieren, und warum könnte die andere Seite feststellen wollen, ob der Benutzer so etwas tut? Nun, beispielsweise könnte der Benutzer zwischen verschiedenen Adressen wechseln, die zu einem Pool dynamischer IP-Adressen gehören, die einer Einwahlleitung zugewiesen sind (indem er die Verbindung trennt und dann neu herstellt). Auf diese Weise könnte er etwa vortäuschen wollen, dass es sich um bedeutungs- und zusammenhanglose Aktivitäten handelt — statt um einen wohldurchdachten, umfassenden Angriffsversuch. Auch denkbar ist, dass Interaktionsbeschränkungen etwa in einem Intemetforurn, einer On- lineumfrage oder einer Abstimmung (durch eine profane mehrfache Stimmabgabe) umgangen werden sollen. All dies gehört zum üblichen Zeitvertreib der Jugend von heute. Die Zeitmessung der Zeitstempeloption arbeitet gewöhnlich recht präzise, denn sie basiert auf einer Taktquelle mit einer Frequenz von 100 oder 1.000 Hz (obwohl einige Systeme auch 64 oder 1.024 Hz oder andere, dazwischenliegende Werte verwenden). Dieser Grad an Präzision ist ausreichend, um auch zwischen ähnlichen Systemen unterscheiden zu können, die alle — etwa nach einem Stromausfall — zum rnehr oder weniger gleichen Zeitpunkt hochgefahren wurden. Deswegen sind extrem genaue Aussagen möglich. 160
9.8 Passives Fingerprinting in der Praxis 9.7.14 Andere Schauplätze passiven Fingerprintings Wir haben in diesem Kapitel die Metriken beschrieben, die am häufigsten zur Bestimmung des Betriebssystems eines entfernten Hosts (und zur Nachverfolgung seiner Benutzer) verwendet werden, ohne dass diese Benutzer überhaupt etwas davon mitbekommen. Es gibt jedoch viele aufregende, aber weniger gut erforschte Aspekte der Kommunikation, die über diese Grundlagen hinausgehen und sich für dieselben (und andere) Zwecke einsetzen lassen. Beispielsweise werden bei einer interessanten Variante des Fingerprintings nicht die Pakete selbst untersucht, sondern es werden die Tirning- und Antwortraten bestimmter ICMP- Meldungen, TCP-Neuübertragungen und ähnlicher Vorgänge gemessen. Die Werte, die für alle Ablauf- und Neuübertragungszähler verwendet werden, ermöglichen ein präzises und eindeutiges Profiheren eines Systems. Ein CRONOS-Projekt, das auf den Forschungen von Franck Veysset, Olivier Courtay und Olivier Ffeen vom Intranode Research Team basiert, zielt darauf ab, ein Tool zum aktiven Fingerprinting dieser Metriken zu entwickeln; allerdings sind Anwendungen für passives Fingeipiinting ebenso verlockend. Ein weiterer vielversprechender Ansatz besteht dagegen darin, andere Anomalien oder ungewöhnliche Einstellungen zu kombinieren und zu messen. Hierzu könnten etwa die Verwendung bestimmter Zeitstempelwerte durch einen Absender, mit Bestätigungsnummem identische Sequenznummem, ungewöhnliche Flag-Konfigurationen, Nutzdaten in Steuerpaketen, die Verwendung der EOL-Option und vieles andere mehr gehören. Diese Eigenschaften lassen sich ebenfalls zur Unterscheidung zwischen Betriebssystemen verwenden, auch wenn sie häufig nur für eine gelinge Anzahl von Implementierungen kennzeichnend sind. (Der Algorithmus, der zur Auswahl der ersten Sequenznummer verwendet wird, ist, wie Sie im nächsten Kapitel erfahren werden, häufig ebenfalls eine weitvolle Informationsquelle.) 9.8 Passives Fingerprinting in der Praxis Diese Metriken erlauben die präzise Identifizierung von Betriebssystemen und ihren Konfigurationen sowie von Netzwerkpararnetem und die ebenso effiziente wie unauffällige Überwachung von Benutzem. Zwar mag es schwierig zu glauben sein, dass dies möglich ist, aber ein von mir geschriebenes Tool namens pOf implementiert die meisten dieser Techniken zur Ermittlung und Analyse der Informationen, die in SYN-, SYN+ACK- und RST-Paketen enthalten sind, auf eine vollständig passive Weise und mit hoher Erfolgsquote. Schauen wir uns doch einmal ein Beispiel an, um die Effizienz dieses Ansatzes nachzuweisen. Tabelle 9.1 zeigt eine Anzahl wichtiger Parameter, die aus einem echten TCP- Paket stammen, das im Netzwerk erfasst wurde. Was können uns die Werte über das Betriebssystem des Absender sagen? 161
9 Der verräterische Akzent Tabelle 9.1 Werte eines im Netzwerk abgefangenen TCP-Pakets Protokoll IPv4 TCP TCP-Optionen Parameter Absenderhost Zielhost Flags TTL Kennnummer Wert nimue (10.3.0.1) nightside (10.3.0.3) DF 57 4428 keine IP-Optionen (Paketgröße: 20) Absenderport Zielport Flags Sequenznummer Bestätigungsnummer Fenstergröße 1:MSS 2: Selective ACK Permitted 3: Zeitstempel 4: Fensterskalierung 3803 80 (HTTP) SYN 1418000073 0 32120 1460 170330930 0 Das ist schon eine ganze Menge. Wir wollen doch einmal sehen, was wir diesen Beobachtungen entnehmen können: ■ Da das DF-Flag in den IP-Headem gesetzt ist, muss das System PMTUD verwenden. Zu den Systemen, die dieses tun, gehören neuere Versionen von Linux, FreeBSD, OpenBSD, Solaris und Windows. IRK, AK, viele kommerzielle Firewalls10 und andere Systeme, die aus Zuverlässigkeitsgilinden PMTUD nicht implementieren, können wir damit ausschließen. ■ Der TTL-Wert des Pakets befragt 57. Wir wissen, dass der TTL-Ausgangswert nicht niedriger sein kann, denn er wird während der Übertragung zunehmend verringert. Außerdem ist es unwahrscheinlich, dass dieser Staitwert größer als 87 ist (dies wäre ein wirklich weit entferntes System). Wir können dies zahlreichen UNIX-Versionen zuordnen, die alle einen TTL-Staitwert von 64 aufweisen; Windows (Startwert 128), Solaris vor Version 8 (255) und verschiedene Netzwerkgeräte (32) können wir hingegen ausschließen. Eine Firewall ist eigentlich ein Router mit Filtereigenschaften, der häufig in der Lage ist, Entscheidungen auf der Basis der Eigenschaften von Daten übergeordneter Schichten zu verstehen und auch zu treffen. 162
9.9 Passives Fingerprinting in der praktischen Anwendung ■ Die IP-Kennung des Pakets ist ungleich 0. Hierdurch wird Linux 2.4 und höher ausgeschlossen, ebenso mehrere neuere Releases anderer verbreiteter Betriebssysterne. ■ Der Absenderport liegt im rneistverwendeten Bereich zwischen 1.024 und 4.095. Dies allein erlaubt uns zwar nicht das Ausschließen weiterer Betriebssysteme, aber wir können sicher davon ausgehen, dass das System vor der aktuellen mehr als 2.700 Verbindungen hergestellt hat, und dass die Verwendung des Masquerading sehr unwahrscheinlich ist. ■ Auswahl und Reihenfolge der Optionen (MSS, Selecttve ACK, Zeitstempel, Fensterskalierung) sprechend für Linux 2.2 und höher. ■ Die Fenstergröße ist ein Vielfaches des MSS-Wertes (MSS ■ 22). Das einzige System, zu dem dieser Wert passt, ist Linux 2.2. ■ Im Paket konnten keine Anomalien, Verletzungen von RFCs oder andere Auffälligkeiten festgestellt werden, was unsere Annahme bestätigt, dass wir es mit einem Linux- System zu tun haben. ■ Der MSS-Wert lässt auf eine Ethernet- oder eine modemgestützte PPP-Verbindung schließen (MTU: 1.500). ■ Die Laufzeit des Systems beträgt ca. 19 Tage, und es ist sieben Systeme entfernt. Gewiss lassen sich einzelne Metriken von Anwendungen oder durch Kniffe seitens des Benutzers ändern. (So neigen etwa viele Nutzer dazu, den TTL-Wert zu ändern oder bestimmte Einstellungen zu aktivieren oder zu deaktivieren, weil sie Leitfaden zur Netz- werkoptirnierung gelesen oder Anwendungen ausgeführt haben, die einfallsreiche Namen wie „Systemdoktor" haben.) Allerdings lassen sich basierend auf unseren Beobachtungen derart viele Rückschlüsse ziehen, dass wir eine zuverlässige Möglichkeit gefunden haben, das Betriebssystem eines Computers zu erkennen, indem wir das System ermitteln, bei dem wir in den meisten Kategorien Übereinstimmungen erzielen. In diesem Fall haben wir guten Grund anzunehmen, dass das fragliche Betriebssystern Linux 2.2 und der Absender über eine Ethernet- oder eine Einwahlverbindung mit dem Internet verbunden ist. Basierend auf dieser Annahme können wir auch schließen, dass das System sieben Hops entfernt ist (64 — 57; dabei ist 64 der TTL-Ausgangswert bei Linux- Systemen). Wenn sich mehrere Benutzer hinter dieser IP-Adresse verbergen, dann können wir sie ganz einfach zählen, indem wir ihre Sitzungen basierend auf den Systemeigenschaften und den Zeitstempeldaten (sofern verfügbar) unterscheiden. 9.9 Passives Fingerprinting in der praktischen Anwendung Datenverkehr im Netzwerk, der vom Ernplänger oder einem Außenstehenden (z. B. einem Internetprovider zwischen Absender und Empfänger) beobachtet wird, kann zahlreiche Informationen vermitteln, die über die tatsächlich ausgetauschten Daten hinausgehen. Hierzu 163
9 Der verräterische Akzent gehören unter anderem auch bestimmte Angaben zum Betriebssystem des Absenders. Wie oben bereits angemerkt, ist die Angriffsfläche beträchtlich und auch recht interessant, denn anders als bei von Anwendungen übertragenen Daten ist sie nicht offensichtlich und entzieht sich zudem oft der Kontrolle des Benutzers. Zwar können Benutzer ihre Browsereinstellungen und auch die anderer Anwendungen ändern, um Überwachung, Identifizierung und Nachverfolgung zu verhindern, aber die Sicherheitslücke, die in den unteren Schichten (TP- und TCP-Schicht) vorhanden ist, kann dieses Bemühen ganz einfach unterminieren, indem sie dem Beobachter genau so viel Informationen zum Opfer zur Verfügung stellt, wie das Opfer zu verbergen versucht. In diesen Schichten finden sich zudem Daten, die für die Sicherheit der Infrastruktur von grundsätzlicher Bedeutung sind, z. B. nützliche Hinweise zum Aufbau des Zielnetzwerks und implementierter Schutzmaßnahmen. Aber passives Fingerprinting kann nicht nur zu Datenschutzverletzungen, sondern durchaus auch für absolute legitime Aufgaben aus dem Bereich der Reconnaissance verwendet werden. Der Bereich der praktischen (und durchaus auch häufig eingesetzten) Anwendungen für passives Fingerprinting erstreckt sich über das gesamte ethische Spektrum: von der Heimtücke bis zur legitimen Verteidigung. 9.9.1 Statistikermittlung und Ereignisprotokollierung Eine der eher legitimen Anwendungen passiven Fingerprintings besteht in der Überwachung des Netzwerks zur Dmchführung objektiver, nicht für Angriffe vorgesehener Analysen zu verwendeten Plattformen und Netzwerkumgebungen. Hiermit soll sichergestellt werden, dass alle Benutzer Dienste erhalten, die für ihre Software optimiert sind. Außerdem sollte gewährleistet sein, dass keine größere Benutzergruppe auf irgendeine Weise benachteiligt wird. Auch die Eimittlung von Daten zu potenziellen Angreifern oder anderen unautorisierten Aktivitäten lässt sich mithilfe des passiven Fingerprintings erheblich erleichtem. Und in der Tat wird das passive Fingerprinting zu Forschungszwecken im Bereich von Honigtopfansätzen umfassend eingesetzt. ■ Hinweis Honigtöpfe (Honeypots) sind ein Konzept, das von Lance Spitzner von Sun Microsystems aggressiv beworben und erforscht wird. Ziel dieser Vorgehensweise ist es, dem Besitzer eines Honigtopfs möglichst viel Informationen zu Gegnern und ihren Zielen zukommen zu lassen Hierzu kommen bestimmte Geräte zum Einsatz, deren Wert in ihrer unautorisierten und illegalen Verwendung liegt und die für die Infrastruktur keine tatsächliche Bedeutung haben, obwohl sie dies vorgeben. Diese Geräte sind die eigentlichen Honigtöpfe. 9.9.2 Optimierung von Inhalten Eine aktive Anwendung für passives Fingeipiinting dient der Bereitstellung von Diensten, die für einen bestimmten Ernpiänger optimiert sind. Diese Optimierung basiert auf einer 17 Spit02 164
9.9 Passives Fingerprinting in der praktischen Anwendung unmittelbaren Analyse der Konfiguration, die für den Zugriff auf den Server benutzt wird. Ich halte es für meine Pflicht, hier ein etwas ruchloses Plug-in für eines meiner bereits erwähnten Tools zu erwähnen: pOf. pOf bietet eine Methode, mit der Parameter von unlängst von anderen Anwendungen eingegangenen Verbindungen abgefragt werden können. Dies macht die Aufgabe der Inhaltsoptimierung wesentlich einfacher: Ein Webskript muss nicht rnehr viel über TCP und IP wissen; es fragt einfach bei pOf an: „Hey, wer ist der Typ, mit dem ich rede?". Und erhält darauf eine sinnvolle Antwort. 9.9.3 Durchsetzung von Richtlinien Erkennung und mögliche Sperrung veralteter oder nichtkonformer Systeme (z. B. solcher, die eine Untemehinensrichtlinie verletzen oder ein Sicherheitsrisiko darstellen) oder eine Verseuchung mit unautorisierten Netzwerkanbindungen ist eine weitere interessante Anwendung für das passive Fingerprinting. Seit Version 3.4 bietet OpenBSD eine Methode zum Routen und Urnleiten von Daten basierend auf den Ergebnissen der Betriebssystern- erkennung, was die Durchsetzung von Richtlinien auf der Basis von Eigenschaften eines entfernten Betriebssystems durchaus realisierbar macht. Dieselbe Funktionalität ist nun als Teil des Patch-O-Matic-Codes für Netfilter unter Linux verfügbar. Beide Implementierungen basieren auf pOf oder wurden davon inspiriert. 9.9.4 Die Sicherheit des kleinen Mannes Das passive Fingeiprinting kann auch verwendet werden, um bestimmte Angriffsflächen zu rninirnieren. Zwar ist es mit gewissem Aufwand möglich, die Fingerpiinting-Methode zu hintergehen, aber das Fingeiprinting kann durchaus verwendet werden, um zu verhindern, dass bestimmte Alten von Clients (wie etwa Windows-Systeme, die häufig mit Spy- ware, Backdoors und Würmern verseucht sind und oft als Spam-Versender oder für indirekte Angriffe missbraucht werden) den einen oder anderen Basisdienst im Netzwerk benutzen, während weniger bedenkliche Einheiten daraufzugreifen dürfen. 9.9.5 Sicherheitstests und angriffsvorbereitende Beurteilung Aktives Fingerprinting wird oft bereits im Ansatz von Firewalls und anderen Lösungen gestoppt, die IP-Daten sorgfältig filtern und analysieren. Passives Fingeiprinting hingegen erlaubt die Untersuchung auch extrem aggressiv geschützter Systeme und die Kar- tographierung von Netzwerken, ohne Alarm auszulösen. Bei Sicherheitstests und -beurteilungen mithilfe des passiven Fingerprintings verwendet man einen zweifachen Ansatz. Zunächst lässt sich der eingehende Datenverkehr analysieren. Obwohl der Beobachter warten muss, bis sich das Ziel mit seinen Systemen verbunden hat, lässt sich die Verbindung nachfolgend recht leicht induzieren, ohne dass dort ein Verdacht entsteht. Tatsächlich ist es häufig ausreichend, eine bestimmte E-Mail oder einen Link auf eine Website an das Opfer zu senden, um auch die gewiefteste Paketfilterlösung zu überwinden. Zweitens kann das passive Fingeiprinting zur Analyse der Antworten auf 165
9 Der verräterische Akzent zulässige Daten an einen verfugbaren Dienst eingesetzt werden, um die Parameter des Remote-Systems zu ermitteln. Wenn ein Black-Hat zwar weiß, wie er ein internes Netzwerk erfolgieich angreift, aber rnehr zu dessen interner Struktur herausbekommen will, um das Risiko einer vorzeitigen Entdeckung zu minimieren, dann kann sich das passive Fin- gerprinting als recht nützlich erweisen. Dies gilt auch für legitime Sicherheitstests, für die man von der Organisation, die überprüft wird, bezahlt wird. 9.9.6 Erstellung von Kundenprofilen und Eindringen in die Privatsphäre Viele Unternehmen treiben ausgesprochen viel Aufwand, um wertvolle Informationen zu den Gewohnheiten, Vorheben und Verhaltensweisen von Menschen zu sammeln (und diese dann auch zu verkaufen). Zwar werden diese Angaben in der Regel für Marketingzwecke benutzt, sie können aber zumindest theoretisch auch gegen eine bestimmte Person eingesetzt werden. Die Möglichkeit, Benutzerhandlungen durch einen Abgleich der Ergebnisse von Fingerprinting-Aktionen an verschiedenen Positionen, die das Ziel besucht hat, zu verfolgen — sei es zur Kartographierung interner Netzwerke und verwendeter Software, zur Überwachung Einzelner oder zur Ermittlung anderer statistischer Daten von Wert —, kann eine Informationsquelle sein, die entweder für sich bereits einen bedeutenden Wert darstellt oder zur Steigerung der Attraktivität anderer politisch nicht ganz korrekter Angebote beitagen kann. 9.9.7 Spionage und verdeckte Aufklärung Die Möglichkeit, Zusatzinformationen zur Netzwerkarchitektur eines Mitbewerbers und zu Benutzerverhalten und -vorheben zu gewinnen, ist oftmals sehr verlockend. Obwohl das in Ihren Ohren wie ein schlechter Science-Fiction klingen mag, ist es im Grunde genommen einfach nur ein zielorientierterer Typ der oben beschriebenen Profilerstellung. 9.10 Wie man Fingerprinting verhindert Angesichts der Komplexität eines typischen IP-Stapels ist es extrern schwierig, das Fingerprinting generell zu unterbinden. Allerdings ist es möglich, bestimmte Aspekte zu behandeln und einige Typen bekannter Fingerprinting-Softwaie außer Gefecht zu setzen, indem man ermittelt, welcher Parameter für diese die größte Bedeutung hat — und diesen dann einfach ändert. So enthalten bestimmte Paketfüterlösungen wie etwa pf in OpenBSD einen Paketnorrnalisierungsdienst, der sicherstellt, dass alle ausgehenden Daten „gleich" aussehen. Hierdurch lassen sich zwar einige Aspekte des Fingerprintings bis zu einem gewissen Grad ausschalten — oder das Fingerprinting wird zumindest erschwert, indem einige behebte Programme weniger genaue Ergebnisse zurückgeben —, aber vollständig gelöst wird das Problem dadurch nicht. 166
9.11 Denkanstöße: Der verhängnisvolle Fehler bei der IP-Fragmentierung Wenn auch die sorgiältige und scheinbar umfassende manuelle oder automatisierte Modifikation bestimmter Betriebssystemeinstellungen oder TCP-Parameter die Systernidentifi- zierang erschweren kann, so sind doch bestimmte Verhaltensweisen tief im Kernel vergraben und können nicht angepasst werden. Es ist beispielsweise ziemlich schwierig, die Reihenfolge der Optionen in einem Paket zu ändern. Außerdem gehen Benutzer, die manuelle Änderungen vornehmen, das Risiko ein, dass die von ihrern System stammenden Pakete an eindeutigen Eigenschaften zu erkennen sind, was Datenschutz und Anonymität auch nicht unbedingt förderlich ist. Glücklicherweise gibt es gewisse Lösungen, die bestimmte Testformen behandeln. So ändert etwa IP Personality von Gael Roualland und Jean-Marc Saffroy den TCP-Stapel so ab, dass bestimmte Tools den Eindruck gewinnen, er stamme von einem anderen System. Mit IP Personality können Sie NMAP sogar glauben machen, dass Ihr System ein Laserdnicker von Hewlett-Packaid ist! Allerdings ergeben sich daraus ein paar Probleme. Zum einen kann man den TCP-Stapel seines Systems problemlos seiner Robustheit berauben, indem man versucht, die Identität eines Gerätes anzunehmen, das generell einen schwachen Stapel einsetzt. Wenn Sie beispielsweise, um den besonderen Kennzeichen eines Druckers zu entsprechen, für alle Verbindungen einfachste Sequenznurnmem verwenden, dann wird irgendjemand diesen Umstand früher oder später zu nutzen wissen, um Ihren Datenaustausch zu stören oder darin herurnzupfuschen. Außerdem funktionieren Softwareanwendungen wie IP Personality nur bei den verbreitetsten, bekanntesten und bestdokumentierten Programmen, während für die übrigen keine Erfolgsgarantie gewählt wird, denn die Eigenschaften variieren von Anwendung zu Anwendung, und dies gilt auch für die Alt und Weise, wie diese Eigenschaften interpretiert werden. Sie können also lediglich hoffen, die unentschlossenen und naiven „Mainstream-Angreifer" zum Narren zu halten, weil diese Tools benutzen, über die Sie Bescheid wissen. ■ Hinweis Anders als Agentengeräte für das Masquerading leiten Proxy-Firewalls und andere Proxy- Geräte Pakete nicht weiter, sondern fangen Verbindungen ab und erstellen stattdessen neue Verbindungen unter Verwendung eines eigenen IP-Stapels. Sie stellen die einzige umfassende Lösung gegen das Fingerprinting in den Schichten 3 und 4 des OSI-Modells dar, wirken sich allerdings in hohem Maße nachteilig auf die Leistung aus und sind aufgrund der enorm gesteigerten Komplexität extrem fehleranfällig. Außerdem ist ein Fingerprinting der Anwendung selbst auf einer höheren Ebene durchaus noch möglich. 9.11 Denkanstöße: Der verhängnisvolle Fehler bei der IP- Fragmentierung Bei der Beschreibung der Merkmale, die das IP-Protokoll definieren, erwähnte ich hin und wieder, dass der Vorgang der Fragmentierung und Wiederzusarnuiensetzung von Paketen einen schweren Fehler aufweist. Dieser Gedanke entstammt in erster Linie einer ziemlich 167
9 Der verräterische Akzent interessanten Beobachtung, die ich machte, während ich dieses Buch schrieb. Zwar ist das Konzept auf einen aktiven und erkennbaren Angriff bezogen, der von einer offenbar niederträchtigen Entität durchgeführt wird (auch wenn diese nicht ganz einfach geortet werden kann), aber es handelt sich um einen einmaligen und interessanten Makel, der im Aufbau des IP-Protokolls begründet hegt. Er ist nicht Folge eines klar definierten Fehlers, sondern eher eine Kollision von Paradigmen auf unterschiedlichen Strukturebenen die beide (interessanterweise) von Jon Postel, einem der Väter der IP-Protokollsuite, spezifiziert wurden. Ich habe beschlossen, diesen Fehler am Ende dieses Kapitels näher zu erläutern — als Denkanstoß für jene, die sich für die Pathologie der Cornputerfehler interessieren. Zunächst wollen wir einen Bück auf die Sachlage von heute werfen. Oder besser: auf die Sachlage von gestern, da wir eine ziemlich angestaubte Angriffstechnik, die ich bereits im Abschnitt zu TCP beschrieben habe, aus der Mottenkiste holen werden. Die fragliche Methode — das blinde Spoofing — wurde zuerst Mitte der Achtzigerjahre von Robert T. Morris beschrieben.18 Hochkonjunktur hatte sie ein Jahrzehnt später, seitdem aber hat ihre Bedeutung immer stärker abgenommen. Wir werden uns auf ein bestimmtes Beispiel des blinden Spoofings konzentrieren: das Einspeisen bestimmter Daten in eine vorhandene Sitzung, um diese zu stören und den Server davon zu überzeugen, dass sein Benutzer einen bestimmten Befehl abgesetzt hat — oder den Benutzer davon, dass er gerade eine bestimmte Antwort vom Server erhält. Diese Technik wird häufig als Connection HijacMng (Entführung einer Verbindung) bezeichnet. Unter normalen Umständen muss ein Unbefugter, der Daten in einen vorhandenen TCP- Datenstrorn einspeisen will, zunächst die Sequenznurnmem bestimmen, die von mindestens einer der beteiligten Parteien verwendet werden. Obwohl ein solcher Angriff eine hochsensible Angelegenheit ist und gegen eine bestimmte, laufende Verbindung gerichtet sein muss, kann er erfolgreich durchgeführt werden (und wird dies häufig auch), wenn die Sequenznummem vorhersehbar sind. In den späten Neunzigerjahren gab es eine ganze Menge Tools, mit denen Windows-TCP-Sitzungen mit IRC-Netzwerken (Internet Relay Chat) beheiligt wurden — sei es zum eigenen Spaß oder aus anderen Gründen. Dabei wurde der wenig robuste Windows-Algorithmus zur ISN-Bestimmung ausgenutzt: Es war ganz einfach, ab und an ein einzelnes RST-Paket einzuspeisen und den einen oder anderen Benutzer aus dem Chat zu werfen. Wh fanden das damals lustig. Heute sieht die Situation etwas anders aus. Dank der Bemühungen vieler Forscher (einschließlich der bescheidenen Beiträge des Autors dieser Zeilen) gelang es den Entwicklern in harter Arbeit, die Vorhersagbarkeit von ISNs in TCP-Verbindungen zu erschweren. Viele Versuche, die Qualität und Robustheit von Sequenznurnmerngeneratoren bei den verbreiteten Betriebssystemen zu verbessern, haben am Ende dazu geführt, dass Angriffe auf der Basis einer ISN-Vorhersage erheblich schwieriger geworden sind. Es gibt zwar ein paar Ausnahmen, aber die sind nicht der Rede wert. Systeme, die fortlaufende ISNs verwenden, sind weitgehend ausgestorben: Ein Angreifer, der die Nummern bei einem Kommunikationsvorgang mit einem Gegenüber nicht bestimmen kann, ist gezwungen, den ge- Mon-85 168
9.11 Denkanstöße: Der verhängnisvolle Fehler bei der IP-Fragmentierung samten 32-Bit-Raum mögücher Werte zu durchsuchen, um einen präzisen Dateneinfuge- angriff auszuführen. Dies sind etwa 4.294.967.296 Kombinationen. (Wenn er die Sitzung lediglich abbrechen oder wirksam verstümmeln will, dann sind es ein paar Werte weniger.) Im Zuge eines solchen Angriffs müssten etwa 80 Gbyte Daten gesendet werden, damit der Erfolg garantiert wäre. Machbai- geht anders. Allerdings hat sich, was die tatsächlichen Vorteile angeht, die sich durch eine erfolgreich ausgefühlte Dateneinspeisung erzielen lassen, nur wenig geändert. Zwar werden Kormnu- nikationsvorgänge zunehmend über Kanäle ausgeführt, die eine Verschlüsselung unterstützen, aber die Bedeutung dieser Attacken hat nicht wesenthch abgenommen: Es gibt nach wie vor eine Menge vielversprechender Angriffsszenarien. Hier ein paar Beispiele: ■ Daten lassen sich in unverschlüsselte Verbindungen zwischen Servern oder zwischen Routem einspeisen. Dies betrifft etwa den Austausch von E-Mails, DNS-Zonentransfers, die BGP-Kornmunikation usw. Ein Großteil der zwischen Servern ausgetauschten Daten lässt sich vom Angreifer erzeugen und kann trotzdem sensible oder vertrauenswürdige Daten enthalten, was gezielte und zeitlich abgestimmte Angriffe vereinfacht. ■ Daten lassen sich in unverschlüsselten Datenverkehr zwischen Client und Server einfügen. Betroffen hiervon sind FTP-Dateidownloads (File Transfer Protocol) oder HTTP- Meldungen (Hyper-Text Transfer Protocol). Mithilfe eines solchen Angriffs lassen sich gefährliche, belastende oder schädliche Inhalte an unbedarfte Besucher übermitteln, oder es lässt sich der Eindruck erwecken, dass der unschuldige Besucher einen Angriff auszuführen versucht habe. ■ Daten lassen sich in eine vorhandene Sitzung einspeisen, um eine Sicherheitslücke zu nutzen, die in einem Dienst auf einer Ebene vorhanden ist, die dem nicht authentifizierten Benutzer gar nicht zugänglich ist. Dies gilt gleichermaßen für verschlüsselten und unverschlüsselten Datenverkehr. So kann etwa ein Dienst wie das E-Mail-Zugriffs- protokoll POP3 (Point of Presence) verschiedene Befehle nur dann entgegennehmen, wenn der Benutzer sich zuvor erfolgreich angemeldet hat. Vor der Anmeldung sind die einzigen verfügbaren Befehle diejenigen, die sich direkt auf den Authentifizie- rungsprozess beziehen (nämlich die Anweisungen USER und PASS). Ohne gültiges Passwort kann der Angreifer einen Fehler in einem der später verfügbaren Befehle (wie etwa RETR, einem Befehl, mit dem eine bestimmte Nachricht aus einem Postfach abgerufen wild) nicht ausschlachten. Gelingt es dem Angreifer jedoch, eine gefälschte RETR-Anförderung in die laufende Sitzung eines authentifizierten Benutzers einzuspeisen, dann hat er gewonnen. ■ Auch ein sicherer und verschlüsselter, integritätsgeschützter Datenstrorn ist anfällig für einen DoS-Angriff wenn eine Sitzung mit nur einem einzigen, meisterhaft gefeitigten Paket erledigt wird. Insofern ist es durchaus verlockend, Daten ohne große Probleme einspeisen zu können, ohne das gesamte Spektrum möglicher Sequenznummern ausprobieren zu müssen. Und genau dies ist der Punkt, an dem sich eine Fragmentieiimg als ziemlich nützhch erweisen kann. 169
9 Der verräterische Akzent 9.11.1 Wie man TCP zertrümmert Wenn ein IP-Paket, das TCP-Nutzdaten enthält, fragmentiert wird (unbestreitbar ein bei Dateiübertragungen häufig auftretender Fall — und einer, der sich nicht immer einfach verhindern lässt, indem man das DF-Flag setzt, wie es einige Betriebssysteme tun), dann durchqueren die Daten das Netzwerk in mehreren Blöcken und werden erst nach dem Eintreffen beim Empfänger wieder zusammengesetzt. Ein gewitzter Angreifer kann — in der Vorahnung einer Fragmentierung — ein speziell erstelltes, unzulässiges IP-Fragment versenden, dass sich als vom erwarteten Absender stammendes Fragment ausgibt. Beim Empfang dieses Fragments kann es mit etwas Glück — eine Frage des präzisen Tunings — dazu kommen, dass der Empfänger dieses statt des echten Fragments zur Wiederherstellung des ursprünglichen Pakets verwendet. In diesem Angriffsszenario wird das erste Fragment (welches die vollständigen TCP- Header einschließlich exakter Angaben zu Ports, Sequenznummem usw. enthält) mit einer gefährlichen Nutzlast verknüpft, die der Angreifer gefälscht hat. Infolgedessen muss der Angreifer die Sequenznummem oder andere Sitzungsdaten gar nicht kennen, um seine Daten in den Frame einzuspeisen; auf diese Weise unterläuft er alle Bemühungen zur ISN- Erzeugung. Ist der Angriff abgeschlossen, dann besteht das letzte vom Empfänger verarbeitete Paket aus gültigen, aus einem zulässigen Fragment kopierten Header-Daten und der schädlichen Nutzlast, die vom Angreifer eingebracht wurde. ■ Hinweis Der Angreifer kann jeden Teil der Nutzdaten im ersten Segment ersetzen, indem er eine leichte Überschneidung zwischen den Fragmenten festlegt; viele Betriebssysteme reagieren auf solche Überschneidungen, indem sie die zuvor erhaltenen Daten mit einer neueren Kopie ü- berschreiben. Irn Extremfall kann er Angreifer alle Daten in einem TCP-Paket mit Ausnahme der Sequenznuinrner erfolgreich ersetzen Natürlich fehlen noch einige Teile des Puzzles. Aber neben der Notwendigkeit eines präzisen Tunings und dem Wissen, wann die Übertragung stattfindet19, gibt es nur noch zwei Hindernisse, die der Angreifer in diesem Szenario aus dem Weg schaffen muss: ■ Das Fragment muss eine korrekte IP-Kennung aufweisen, damit es einwandfrei einge- passt wird. Zum Glück ist dies auf vielen Systemen kein Problem, da IP-Kennungen sequenziell gewählt werden. Aufgrund dessen lässt sich die Nummer, die zum betreffenden Moment erwartet wird, einfach durch Aufbau einer Testverbindung ermitteln. Einige Systeme — allen voran OpenBSD, FreeBSD und Solaris — bieten zufällige IP- Kennungen, welche den Angriff erschweren, aber nicht verhindern können. Der An- Das Tuning selbst ist kein so großes Problem, wie es auf den ersten Blick scheinen mag. Der Angreifer kann das gefälschte zweite Fragment bei Bedarf zeitlich ein wenig vorziehen; in diesem Fall erstellt der Empfanger einen Wiederherstellungspuffer und wartet auf die übrigen Teile, die innerhalb eines bestimmten Zeitraums eintreffen müssen. Wenn dann das erste zulässige Fragment eintrifft, dann wird der Puffelinhalt als vollständig wiederhergestellt betrachtet, ohne dass der „echte" zweite Block noch ankommen muss. 170
9.11 Denkanstöße: Der verhängnisvolle Fehler bei der IP-Fragmentierung greifer rnuss lediglich ein paar tausend Kombinationen (statt mehrerer Milliarden) überprüfen, weil das IP-Kennungsfeld mit nur zwei Bytes relativ klein ist. ■ Der TCP-Header enthält eine Prüfsumme, die nach der Wiederherstellung überprüft wild. Die vom Angreifer geänderten Prüfsurnmendaten müssen mit denen der ursprünglichen Nutzdaten identisch sein. Da allerdings die Struktur einer TCP- Prüfsurnme recht trivial ist (es handelt sich lediglich um eine Abwandlung einer einfachen 16-Bit-Summe), lassen sich Nutzdaten fertigen, die die Prüfsurnme des Pakets nicht ändern, sofern der Originalbereich, der ersetzt werden soll, dem Angreifer bekannt ist. (Dies ist in der Regel der Fall — besonders während einer Dateiübertragung, wenn der Angreifer gefahrlichen Code oder bösartige Inhalte in einen öffentlich zugänglichen Teil der Daten einspeisen will.) Die Berechnung der Prüfsumme eines Pakets, dass aus den Header-Wörtern Hl und H2 sowie den Nutzdaten PI, P2 und P3 besteht, ist nachfolgend vereinfacht dargestellt: C = Hl + H2 ... + PI + P2 + P3 ... Hl, H2 und C sind dem Angreifer nicht bekannt. (Header enthalten Sequenznummem, und diese wirken sich auf die Prüfsurnme aus.) Der Angreifer verfügt über keine Möglichkeit, dieses Paket selbst zu untersuchen, aber er weiß, dass das Opfer eine bestimmte — vorhersagbare — Transaktion auf Anwendungsebene durchfühlt. (Solche Transaktionen können etwa das Abrufen neuer E-Mails, das Herunterladen einer Webseite, ein Chat mit Freunden oder Ahnliches sein.) Der Angreifer kann die Nutzdaten PI, P2 und P3 ableiten und will sie durch die eigenen gefälschten Wörter Nl und N2 ersetzen, wobei ein drittes Wort als RlifsurnmenkoHipensierung (CC) hinzugefügt wird, sodass die Prüfsumme weiterhin gültig ist. C = H1+H2...+N1+N2 + CC... Wenn man diese Gleichungen nach CC auflöst, kann man daraus schließen, dass die Prüfsumme mit CC = (P1+P2 + P3—Nl— N2) kompensiert werden muss. Der Angreifer kann das Paket dann so abändern, dass die Prüfsurnme dieselbe bleibt, ohne dass er das gesamte Paket kennen muss; er benötigt lediglich den ersetzten Teil. Auf dieser Basis lässt sich die Kornpensierung korrekt berechnen und die Prüf summe beibehalten. 171
10 Schäfchen zählen für Fortgeschrittene Zehntes Kapitel. In welchem wir die erhabene Kunst der Bestimmung von Netzwerkarchitektur und Computerstandort erkunden werden Reconnaissance oder Kartographierung des Netzwerks bezeichnet die Kunst, eine Anzahl von Vektoren zur Datenpreisgabe, die den wichtigsten Korninunikationsprotokollen im Internet innewohnen, zu nutzen, um Systeme und Netzwerke zu erkennen oder potenzielle Angreifer, Benutzer, Kunden oder Mitbewerber zu orten. Es handelt sich hierbei um die derzeit wohl höchstentwickelte, weitverbreitetste und bedeutendste Anwendung der passiven Datenanalyse, die zudem direkt eingesetzt werden kann. Allerdings hat sie auch einen Anteil an den Problemen, die sich sowohl auf ihre Genauigkeit als auch auf die Einsetz- barkeit in bestimmten Szenarien auswirken. Dies gilt insbesondere für bekannte und erprobte Methoden des passiven Fingerprintings bei TCP/EP. 10.1 Vor- und Nachteile des traditionellen passiven Fingerprintings Die Verwendung von Metriken des passiven Fingerprintings, die im vorigen Kapitel behandelt wurden, erlaubt Ihnen eine relativ einfache Erkennung verschiedener Eigenschaften des Betriebssystems und Netzwerks auf der Gegenseite. Zudem ermöglichen diese Methoden in manchen Fällen die Nachverfolgung einzelner Benutzer, wenn diese ihre Adresse ändern oder sie mit anderen Benutzem desselben Netzwerks gemeinsam verwenden. Sie können diese Methoden einsetzen, ohne mit dem entfernen System zu kommunizieren, solange Sie den beobachteten Mitmenschen nur dazu überreden können, mit einem bestimmten Netzwerk zu interagieren, oder die von ihm stammenden Netzwerkdaten eine bestimmte Gruppe von Systemen passieren, die von jemandem kontrolhert werden, der ausreichend 173
10 Schäfchen zählen für Fortgeschrittene neugierig ist. Insofern ermöglicht passives Fingeiprinting dem Besitzer eines Servers oder auch einem Intemetprovider unter anderem auf ganz einfache Weise die umfassende und vollständig unerkannte Sammlung von Daten. Dem entfernten Benutzer gibt das passive Fingeiprinting ein zweischneidiges Schwert an die Hand: Er kann es verwenden, um nützliche Daten zur internen Struktur eines Netzwerks zu ennitteln; auf diese Weise kann er einen Angriff leichter vorbereiten und/oder rnehr zu den verwendeten Netzwerktechnologien erfahren (und zwar auch in einer relativ komplexen Umgebung wie der in Abbildung 10.1 gezeigten). Außerdem kann er (was ethisch absolut unbedenklich ist) in seinem eigenen Netzwerk nach Verletzungen der Richtlinien (wie unzulässige Verbindungen oder Access-Points, die ein internes Netzwerk mit der Außenwelt verbinden) suchen oder Angreifer aufspüren. Interner Server! TTL = X-3 Server-OS Vertrauensw. Workstation TTL = X-3 i i Interne Firewall Externe Firewall Office- Workstationsi TTL = X-2 Telefön- leltung KW Laptop TTL = X-3 Andere MSS (VPN-Client) VPN-Fem- zugriffs Server (DFÜ) i Die so eingerahmten Elemente sind i direkt erkannte (aktive) Netzwerk- i komponenten. Das Vorhandensein der i Obrigen Systeme kann abgeleitet i werden. ATM j Router In ! Entfernung X i Internet Abbildung 10.1 Sie können passives Fingerpnnting zur Kartographiemng eines komplexen und sogar unzugänglichen Netzwerks verwenden, indem Sie einfach die von einigen seiner Knoten abgehenden Daten beobachten (von denen die wichtigsten die gemessenen Betriebssystemeigenschaften sowie die TTL- und MSS-Werte der Pakete sind) und dann das Vorhandensein anderer Komponenten ableiten, damit eine Übereinstimmung mit den beobachteten Abweichungen vorliegt. Es bleibt dem Leser überlassen, zu bestimmen, wie dieses Netzwerk sich schlüssig kartographieren lässt, indem lediglich der Datenverkehr von außen beobachtet wird. 174
10.1 Vor- und Nachteile des traditionellen passiven Fingerprintings Die datenschutzspezifischen Einbußen sind für den einzelnen Benutzer in diesem Fall vernachlässigbar, sofern die Möglichkeit, die von einem Benutzer vorgenommenen Handlungen mit weiteren Angaben zu verknüpfen, die mithilfe des Fingerprintings gewonnen wurden, oder die Fähigkeit zumNachveifolgen eines Benutzer über mehrere Domänen hinweg kein besonderes Problem darstellen. (Dies ist normalerweise nur dann der Fall, wenn das Verhalten des Benutzers ohnehin von Anfang an fragwürdig ist.) Andererseits geben die Einschränkungen der Privatsphäre für alle Benutzer in ihrer Summe durchaus Anlass zur Sorge, und die mithilfe des Fingerprintings oder verwandter Methoden gewonnenen Erkenntnisse können einen erheblichen Marktwert aufweisen. (Beispielsweise zahlen Werbeagenturen wesentlich rnehr für Ihre privaten Daten, wenn diese mit Angaben zu Ihren Vorheben und Interessen kombiniert sind.) Zudem kann eine Offenlegung der internen technischen Abläufe in einem Netzwerk für Unternehmen und andere Institutionen mit sensibler Infrastruktur durchaus unerwünscht sein. Aber es ist noch nicht aller Tage Abend. Wie ich oben bereits angemerkt habe, gibt es, wenn man mit passivem Fingerprinting akkurate Ergebnisse erzielen will, doch das eine oder andere Problem. Das Problem der Zuverlässigkeit beim traditionellen passiven Fingerprinting von Betriebssystemen ergibt sich aus der Frage, wie einfach der ungebetene Beobachter ins Bockshorn gejagt werden kann, indem einige oder gar alle Netzwerkeinstellungen, die das beobachtete System verwendet, sorgfältig optimiert werden. Auch wenn die Änderung aller Einstellungen nicht ganz einfach ist, kann eine teilweise erfolgte Modifikation bereits ausreichend sein, um bestimmte automatisierte Analyseversuche zurückzuschlagen (hurra!) oder einen Administrator fehlzuleiten, der gerade einen sicherheitsrelevanten Vorfall untersucht (oha!). Dies ist zwar kein Problem von erheblicher Bedeutung und insofern auch für statistische Analysen wenig wichtig, aber in einzelnen Fällen kann ein Zuwenig an Zuverlässigkeit schon bedenklich sein. Außerdem basieren die Funktionalitäten des Fingerprintings zur Nachverfolgung und Ermittlung von Benutzem, die wir in Kapitel 9 so eingehend erläutert haben, fast vollständig auf der Verfügbarkeit von Parametern wie den Zeitstempelinformationen in TCP/IP- Paketen. Alle anderen Eigenschaften sind entweder standardisiert oder bieten zu wenig Optionen, um — von ganz wenigen Ausnahmen abgesehen — eine eindeutige Positivbestimmung eines einzelnen Computers zu gestatten. Wenn diese Daten nicht verfügbar sind, weil die betreffende Leistungserweiterung deaktiviert ist (wie beispielsweise bei den meisten Windows-Valianten), dann ist die exakte Erkennung eines Systems nicht möghch. Dies verringert den potenziellen Wert der Daten sowohl für die Angehörigen eines emsigen Zirkels übler Verschwörer, der — wie wir alle wissen — hinter unseren wertvollsten Geheimnissen her ist, als auch für Sicherheitsprüfer oder Fachleute der Computerforensik. Ohne eine zeitsternpelbasierte Erkennungsfunktionalität kann es unmöglich sein, verschiedene identische Systeme voneinander zu unterscheiden, die hinter einem Masquerading-Gerät platziert sind, oder einen Benutzer zu ermitteln, dessen IP-Adresse sich bei jeder Neuverbindung über ein Modem ändert. Eine andere, möglicherweise interessantere, vielversprechendere und herausfordernde Methode des passiven Fingerprintings nutzt jedoch auf ganz einfache Weise die Mängel des 175
10 Schäfchen zählen für Fortgeschrittene passiven Fingerprintings selbst. Diese neue Ansatz macht es extrem schwierig, den entfernten Beobachter in die Irre zu führen, und ist praktisch uneingeschränkt geeignet, um Systeme zurückzuverfolgen. Was aber vielleicht noch interessanter ist: Diese Methode erlaubt es, zwischen verschrienen Instanzen eines absolut identischen Systems mit absolut identischer Konfiguration zu unterscheiden. Auf diese Weise wird die Masquerading- Erkennung auf ein ganz neues Niveau gehoben. Diese Technik verwendet die Eigenschaften des Mechanismus zur Sequenznummemgenerierung in TCP/EP — und malt nebenbei auch einige schöne Bilder. 10.2 Eine kurze Geschichte der Sequenznummern Aus dem vorherigen Kapitel wissen wir, dass ISNs (erste zu verwendende Sequenznum- rnem) eine Methode darstellen, mit deren Hilfe in TCP die Sitzungsintegrität geschützt und — de facto — ein grundlegendes Maß an Sicherheit implementiert werden soll. Der einzige wirklich universelle Ansatz, eine unverschlüsselte TCP/IP-Sitzung gegen Da- teninjizierang, Hijacking oder Täuschung durch einen vollkommen Unbekannten zu schützen, besteht darin, zu gewährleisten, dass die ISNs auf eine Weise ausgewählt werden, die für den Angreifer keinesfalls vorhersagbar ist. Dies verringert auch die Chancen, beim Erraten der ISN ins Blaue hinein einen Treffer zu landen (und ein Paket zu fälschen, das dann als zulässiger Teil der Sitzung des Opfers akzeptiert wird), auf ein Maß, bei dem das Risiko in der Raxis keine große Rolle mehr spielt — und zwar auch dann, wenn der Angreifer zum Sturm auf das System bläst und Tausende von Paketen in der Hoffnung sendet, dass nur ein einziges davon eine in etwa passende Sequenznurnmer enthält. In den frühen Achtzigerjahren schienen die Sicherheitsaspekte der TCP-basierten Kommunikation kein Problem darstellen, um das man sich groß Sorgen machen musste: Das Internet war eine überschaubare, in sich geschlossene und vielleicht sogar ein bisschen elitäre Umgebung, die von Wissenschaftlern und ähnlichen Zeitgenossen genutzt wurde. Aus diesem Grund definierte die RFC-Spezifikation des TCP-Protokolls keine Anforderungen bezüglich der ISN-Festlegung, und fast alle frühen (und auch nicht rnehr ganz so frühen) Implementierungen des TCP/IP-Stapels verwendeten triviale zeit- oder zählerbasierte Algorithmen, die fortlaufende Zahlen für aufeinanderfolgende Verbindungen zurückgaben. Zu jener Zeit schien die Idee, diesen Nummern Zufallswerte zuweisen zu wollen, eine völlige Verschwendung von Rechenleistung zu sein. Außerdem würde dies die Wahrscheinlichkeit von SequenznuHimernkollisionen unnötig erhöhen. (Eine Kollision ist eine Situation, in der zwei ISNs, die für aufeinanderfolgende Verbindungen zu einem Host ausgewählt wurden, einander zu ähnlich sind und hierdurch die Möglichkeit besteht, dass ältere Pakete, die verzögert beim Empfänger eintreffen, im Kontext der falschen Verbindung interpretiert werden könnten. Natürlich ist bei zufälliger Auswahl von Sequenznummem die Wahrscheinlichkeit höher, dass diese kurzfristig Kollisionen erzeugen, als bei der Auswahl fortlaufender Werte.) 176
10.3 Holen Sie mehr aus Ihren Sequenznummern Das Internet hat sich jedoch seit den Achtzigerjahren erheblich weiterentwickelt, die Verfügbarkeit ist heute wesentlich höher, und die Benutzergerneinde ändert und vergrößert sich fortlaufend. Und weil auch immer rnehr wichtige Daten über die Leitungen geschickt wurden, nahm die Bedeutung von Sicherheitsfragen zu. Leider müssen Integritäts- und Datenschutzmechanismen in punkto Verbreitung und Zuverlässigkeit noch mit dem Internet gleichziehen: Nicht alle Dienste unterstützen eine Verschlüsselung, nicht alle Benutzer wissen, wann sie diese einzusetzen haben, und die meisten Benutzer wissen auch nicht, wie sie Verschlüsselungszeitifikate, die ihre Gegenüber mitschicken, ordnungsgemäß auswerten. (Letzteres ist der wohl wichtigste Aspekt.) Im Laufe der Zeit — und insbesondere angesichts des verbreiteten praktischen, wenn auch in erster Linie auf Chat-Dienste beschränkten Missbrauchs schwacher ISN- GenerierungsHiethoden Mitte der Neunzigeijahre - wurde offenbar, dass für TCP/TP- Datenströrne ein zumindest rudimentärer Integritätsschutz erforderlich war. Das galt auch für den verschwindend gelingen Brachteil der Daten, die tatsächlich in verschlüsselter Form versendet wurden, denn eine Beschädigung der Trägerschicht durch das Einfügen von gefälschten Daten oder RST-Paketen war ebenso unerwünscht, auch wenn die Auswirkungen sich auf die Trennung der Verbindung (d. h. auf eine Dienstverweigerung) beschränkten und keine Fremddaten eingefügt wurden. Die einzige Möglichkeit, diese Probleme zu beheben, ohne jedes einzelne TCP- Kommunikationssystem, das der Menschheit bekannt war, von Grund auf neu zu konstruieren, bestand darin, dafür zu sorgen, dass das Protokoll selbst möglichst schwierig angreifbar ist. Deswegen unternahmen zahlreiche Entwickler Anstrengungen, um sich von der veralteten und gefährlichen Erzeugung einfacher fortlaufender ISNs möglichst weit zu entfernen. Obwohl diese Bemühungen in der Tat halfen, die Widerstandsfähigkeit einer Verbindung gegenüber blindem Spoofing zu verbessern, schufen sie doch gleichzeitig auch einige interessante Vektoren zur Datensarnmlung, die anspruchsvolleres Fingerprin- ting von Systemen und Netzwerken ermöglichten - sei es zur Sicherheitsprüfung oder zur Vorbereitung eines Angriffs. 10.3 Holen Sie mehr aus Ihren Sequenznummern Natürhch ist aus Gründen der Quahtätssicherung wie auch für Sicherheitsübeiprtifungen wichtig, die guten ISN-Generierungsirnplernentierungen von den schlechten unterscheiden zu können. Bis vor kurzem basierte die Vorgehensweise zur Bewertung der Qualität generierter ISNs in der Regel entweder auf einer Analyse des Quellcodes oder auf bestimmten eindimensionalen Tests des Bitstrorns aufeinanderfolgender ISNs, um einschätzen zu können, wie viel Entropie von jedem Ausgabebit übertragen wird. Ersteres ist häufig komplex und kostenaufwändig, fehleranfälhg und zudem nicht immer möglich (sofern der Quellcode eines bestimmten Systems nicht öffentlich zugänglich ist), dem letzteren hingegen fehlt die Fähigkeit, subtilere Sequenzabhängigkeiten und andere Eigenschaften eines Generators auf zuverlässige und lesbare Weise zu erfassen; stattdessen konzentriert sich die- 177
10 Schäfchen zählen für Fortgeschrittene ser Ansatz eher auf statistische Schwächen als auf den Zusammenhang zwischen Werten, die für aufeinanderfolgende Verbindungen zurückgegeben werden. Offensichtlich ist es praktisch unmöglich, die Sicherheit einer Implementierung nachzuweisen, indem man nur ihre Ausgabe beobachtet. Es ist aber einfach zu prüfen, ob bestimmte gängige Probleme vorhanden sind, und zu gewährleisten, dass der zugrundehegende Algorithmus ausreichend robust ist. Und doch waren auch diesbezüglich die eingesetzten Prüfmethoden recht schwach (um es einmal wohlwollend auszudrücken). Sowohl die ursprünglichen, unsicheren ISN-Generatorkonstruktionen als auch einige moderne Lösungen basieren auf additiven, iterativen Rechensystemen, die neue Werte basierend auf ihrer vorherigen Ausgabe errechnen. Nur die Komplexität des Neuberechnungsalgorithmus und der in den Prozess einfließende Urnfang der praktischen Unvorhersehbar- keit scheinen hierbei zu variieren. Die einzigen sicheren Ausprägungen, die nicht auf traditioneller Arithmetik fußen, sind einige neuere Varianten, die relativ langsame, aber kryp- tografisch sicherere Verküi-zungsfunktionen zur Implementierung iterativer Systeme verwenden. In allen Fällen wäre es allerdings interessant, nach einer komplexeren Beziehung zwischen aufeinanderfolgenden Ergebnissen zu suchen, die der Generator für neue Beziehungen erzeugt - weil man dann nämlich unter Umständen mögliche Fehler im Algorithmus erkennen könnte. Wenn sich eine offensichtliche Abhängigkeit zwischen der Ausgabe des ISN-Generators zu einem Zeitpunkt t und der zu einem Zeitpunkt t~hc. beobachten lässt, dann kann der Angreifer natürlich bereits vor der Verbindung, die er zu stören oder zu imitieren hofft, eine Verbindung herstellen, um die ISN-Ausgabe zum Zeitpunkt t zu ermitteln. Auf der Basis der beobachteten zurückgegebenen Sequenznurnmer kann er dann die Antwort bestimmen, die in der Zukunft (t+x) von seinem Gegenüber erzeugt werden wird. Aufgrund dessen kann der Angreifer ein gültiges Paket für die neue Verbindung fälschen, obwohl er die dort verwendete ISN nicht direkt ermitteln kann. Dies hatte ich im Sinn, als ich 2001 einige Forschungen anstellte, an deren Ende eine vereinheitlichte Methode zur Untersuchung weniger offensichtlicher zeillicher Abhängigkeiten in ISN-Folgen stehen sollte, die auf entfernten Systemen erkannt wurden. Meine Ergebnisse flössen in einen Artikel ein, in dem einige der Algorithmen zur ISN-Generierung im Detail untersucht wurden, um eine Möglichkeit zur Erkennung von Feinheiten zu finden, die über die Wahrnehmung der augenscheinlichen Muster und Fehler hinausgeht, welche wir bereits kennen. Diese Abhandlung mit dem Titel „Strange Attractors and TCP/EP Sequence Number Analysis"1 basierte auf einem Ansatz, der in der angewandten Mathematik wohlbekannt, in der Welt der Netzwerktechnologie aber ziemlich neu ist. 1 ZaleOl 178
10.4 Koordinatenverzögerung: Zeitliche Abfolgen in Bildern 10.4 Koordinatenverzögerung: Zeitliche Abfolgen in Bildern Wenn man es heute mit einem ISN-Generator in einer Blackbox - also einem der modernen Systeme mit nicht frei zugänglichem Quellcode - zu tun bekommt, dann sieht man nur die Ausgabe als Folge von in TCP/EP-Paketen übertragenen 32-Bit-Werten, nicht aber den zugrundeliegenden Algorithmus. Bei vielen Betriebssystemen ist der Code proprietär und wohlgehütet - weit jenseits der Reichweite eines gewöhnlichen Sterblichen. Und sogar bei Open-Source-Systemen können die Quellcodes raffiniert und irreführend sein, und am Ende machen Sie die gleichen Fehler wie der ursprüngliche Entwickler. Eine typische Eingabe, die wir auswerten müssten, könnte etwa so aussehen: S0 = 244782 Sx = 245581 Sa = 246380 S3 = 247175 S, = 247975 S5 = 248771 Ist die Abhängigkeit dieser Zahlen voneinander auf den ersten Bhck augenfällig? Und wenn ja: Gibt es eine relativ universelle Methode für den Computer, dieses und auch komplexere Schemata nachzuvollziehen? Eine elegante Lösung schien weit entfernt. Ich hoffte, eine Methode entwickeln zu können, mit der sich ein paar universelle Eigenschaften des zugrundeliegenden ISN-Algorithmus allein dadurch ermitteln ließen, dass man die Ausgabe analysierte. Aber bevor ich dies tat, hielt ich es - auch im Sinne einer vereinfachten Analyse - für wünschenswert und praktischer, von der Annahme auszugehen, dass es, weil viele Implementierungen auf der Wiederholung bestimmter Rechenoperationen basieren, besser wäre, anstelle der absoluten Werte die Änderungen zwischen aufeinanderfolgenden Ergebnissen zu beobachten. Die Beobachtung von Differenzen kann bei solchen Algorithmen von Vorteil sein, und weitere Rückschlüsse bezüglich der verwendeten Generatoren würden auch nicht negativ beein- flusst. Zu diesem Zweck müssen wir eine diskrete Ableitung der Eingabefolge berechnen: die rnkrernente zwischen den Elementen von S. Die sich hieraus ergebende Differenzfolge D, die natürlich bei t = 1 beginnt, ergibt sich aus der folgenden Gleichung: Dt = St-Su In diesem Beispiel ergibt sich als Differenzfolge: Dx = 799 Da = 795 D3 = 799 D4 = 795 D5 = 799 Wenn man also die eigentlichen Werte ignoriert und nur auf die Dynamik der ISNs eingeht, wird die zugrundeliegende Abhängigkeit offenbar. Dies gilt generell für alle Implementierungen, die diesen Berechnungstyp verwenden. (Bei Systemen, die nicht auf einfachen iterativen Berechnungen basieren, hat dies allerdings praktisch keinerlei Relevanz 179
10 Schäfchen zählen für Fortgeschrittene und wirkt sich im Sinne dieser Analyse auch nicht nennenswert auf die Qualität der Daten aus.) ■ Hinweis Ein besonders pedantischer Forscher würde auch versuchen, zeitliche Unregelmäßigkeiten während der Probenerfassung auszugleichen Wir hingegen gehen diesbezüglich von einem festen zeitlichen Abstand (Zeitbasis 1) zwischen den einzelnen Erfassungsvorgängen aus. Allerdings können sich bei der Hochgeschwindigkeitserfassung Faktoren wie beispielsweise die Netzwerkleistung erheblich auf das Timing auswirken. Um sicherzustellen, dass diese Timing- unterschiede Algorithmen, bei denen der Taktgeber als Parameter zur ISN-Erzeugung zum Einsatz kommt, nicht beeinflussen, ist es unter Umständen sicherer, stattdessen die Gleichung D, = (S, — S,-i) -T- T, zu verwenden (hierbei drückt T, die Verzögerung zwischen der Erfassung von Si_j und S, aus). Der Vorteil dieses Ansatzes bei der Anwendung auf Systeme mit iterativer Berechnung ist augenfällig. Abgesehen von ganz einfachen Fällen ist die Methode allein kaum ausreichend: Wir bewegen uns von einer profanen, schwierig zu analysierenden Datenfolge zur nächsten. Mein nächster Schritt bestand nun darin, die Differenzfolge in eine Form zu konvertieren, die sich von einem Menschen oder einer Maschine leicht auf das Vorhandensein weniger offensichtlicher Zusammenhänge untersuchen ließe als die im obigen Beispiel beschriebene. Hierfür gibt es zumindest für die erstgenannten Adressaten nichts besseres als ein dreidimensionales Modell der Systemdynamik. Leider haben wir bei ISNs lediglich genug Informationen, um Bilder in einer Dimension - auf eine Achse - zu zeichnen. Wie also können wir unsere Daten in eine ansprechende dreidimensionale Form bringen? Die Lösung besteht darin, die Datenmenge zu erweitern, indem wir eine Strategie zur Ko- ordmatenrekonstruktion anwenden: zeitverzögerte Koordinaten. Wir verwenden eine Methode, die jede Probe erweitert, indem virtuelle Koordinaten basierend auf den vorherigen Proben in der Folge konstruiert werden. Wenn die vorhandene Probe dem Koordinatenwert x zugeordnet ist, können wir diese Technik zur Zuordnung der Werte y und z für jede vorhandene Probe verwenden und so eine Dreiergruppe (Tripel) mit den Koordinaten x, y und z erstellen, welche ausreicht, um jede Probe genau einem Punkt (in diesem Fall einem Pixel) im dreidimensionalen Raum zuzuordnen. (Die Technik ist im Übrigen nicht auf drei Dimensionen beschränkt. Allerdings erschien es für die Zwecke der Veranschaulichung und Datenanalyse nicht praktikabel, einen höheren Wert zu wählen. Die meisten Menschen jedenfalls kommen mit mehr als drei Dimensionen ohnehin nicht besonders gut zurecht. Zumindest nicht, wenn sie nüchtern sind.) Zeitverzögerte Koordinaten werden so berechnet, dass die zweite Koordinate mithilfe des zum Zeitpunkt t—1 erfassten Wertes gebildet wird, die dritte entspricht dem zum Zeitpunkt t — 2 beobachteten Wert usw. In dieser speziellen Anwendung werden die Koordinaten für den Zeitpunkt t mithilfe der folgenden Gleichungen ermittelt: 180
10.4 Koordinatenverzögerung: Zeitliche Abfolgen in Bildern xt = Dt = St— St_j yt= -Df-i= St-i ~ $t-2 Zt = Dt-2 = St-2 — St-3 Wenn man eine Folge neu gebildeter Tripel (x,y,z) für ein System annimmt, das auf zeitliche Abhängigkeiten getestet wird, dann ist es möglich, das Verhalten eines Systems zur ISN-Generierung im dreidimensionalen Raum darzustellen. Da die Position eines Pixels, der eine bestimmte Probe repräsentiert, sowohl vom aktuellen Wert als auch von einer Anzahl vorheriger Ergebnisse abhängt, führen viele auch sehr komplexe Abhängigkeiten zu abstrakten, aber erkennbaren Mustern unregelmäßiger Dichte im Phasenraum, wodurch ein eindeutiges „Portrait" des zugrundeliegenden Algorithmus entsteht. (In Bezug auf solche Portraits bezeichnet der Begriff Attraktor eine Form, die die Dynamik eines Systems grafisch darstellt. Die Fonn stellt eine „Spur" von Zuständen dar, die das System zyklisch durchläuft oder entfaltet, wenn es sich selbst überlassen bleibt.) Abbildung 10.2 ist die Wiedergabe einer Datemnenge, die ursprünglich wie folgt aussah: 4293832719 3994503850 429438S178 134819 42947S8138 191541 4294445483 4294608504 4288751770 88040492 Abbildung 10.2 Dreidimensionale Wiedergabe der im Text beschriebenen Datenmenge 181
10 Schäfchen zählen für Fortgeschrittene Die Abbildungen 10.3 bis 10.5 veranschaulichen ein paar andere gängige, doch nicht unbedingt deutliche Abhängjgkeitsrnuster. Abbildung 10.3 Dreidimensionale Wiedergabe einer Datenmenge, die mithitfe einer komplexen, aber unsicheren Funktion zur Zufallszahlengenerierung gewonnen wurde 10.5 Schöne Bilder: Die Galerie des TCP/IP-Stapels Die Visualisierungsrnethode funktionierte hervorragend: Sie erzeugte für viele ImpleHien- tierungen, von denen man angenommen hatte, dass sie ausreichend sicher seien, Muster von einzigartiger und oft instinktiv beklemmender Schönheit. Weitere Bilder finden Sie auf den nächsten Seiten dieses Kapitels. Aber haben diese Bilder ein größeres Potenzial, als uns ledighch schwer quantifizierbare Parameter und Eigenschaften eines Generators optisch zu veranschaulichen? Könnte ein Angreifer diese mysteriösen dreidimensionalen Formen auf sinnvolle Weise einsetzen? Oder könnte ein Computer sie auf irgendeine Weise untersuchen, um uns eindeutig zu sagen, was falsch und was richtig ist? Ist ein sonnen- blumenfönniger Generator einfacher zu knacken als einer, dessen Bild eine Ziegelmauer zeigt? 182
10.5 Schöne Bilder: Die Galerie des TCP/IP-Stapels Abbildung 10.4 Wiedergabe eines PRNG ohne offenbare Zusammenhänge, aber mit erkennbaren systematischen Fehlem Abbildung 10.5 Verbreitetes Zeitabhängigkeitsmuster, beobachtet unter fehlerhaften Bedingungen 183
10 Schäfchen zählen für Fortgeschrittene Bevor wir diese Frage beantworten, gestatten Sie mir, mich selbst zu unterbrechen und eine kleine Galerie rnehr oder minder interessanter Ergebnisse zu präsentieren, die ich während der Abfassung der ursprünglichen Abhandlung erstellen konnte. Auf diese Weise lässt sich die Vielzahl und Anmut einiger der beobachteten Muster demonstrieren - getreu dem Motto „Eine 3-D-Ansicht sagt rnehr als tausend Worte". Die Abbildungen 10.6 bis 10.14 portraitieren die PRNGs verschiedener Betriebssysteme. Nicht alle Darstellungen haben denselben Maßstab; einige Formen sind wesentlich kleiner als andere. Der Maßstab und andere Parameter lassen sich der obersten Zeile der einzelnen Graphen entnehmen (vgl. Abbildung 10.6). AktualteX-PosWon AktuelsY-PosItion Sichtbarer Bereich Zoomfaktor BItgrOße der Darstellung Drehfaktor der Darstellung Aktuel sichtbare Punkte (%) Anzahl sichtbarer Punkte und Gesamtanzahl Abbildung 10.6 Windows 98. Die hier gezeigte Menge hat einen Durchmesser von ca. 128, was bedeutet, dass aufeinanderfolgende ISNs um eine Zahl erhöht werden, die etwa sieben Bits „Zufälligkeit" transportiert. Innerhalb der Menge gibt es ein auffälliges Frequenzmuster, welches dem im vorherigen Abschnitt beschriebenen stark ähnelt und möglicherweise auf eine einfache zeitliche Abhängigkeit in allen Ergebnissen schließen lässt. Die Größe des Attraktors ist erschreckend gering. 184
10.5 Schöne Bilder: Die Galerie des TCP/IP-Stapels Abbildung 10.7 FreeBSD4.2. Ein 16 Bit breiter, gleichmäßiger Würfel kleiner, aber wirklich zufälliger Inkremente pro Schritt. wahrscheinlich ein Anzeichen Abbildung 10.8 HP/UX 11. Eine merkwürdige X-Flügelstruktur mit einer Breite von 18 Bits, aber offensichtlich unregelmäßig - wohl ein Anzeichen für starke Zusammenhangsebenen eines fehlertiaften PRNG. 185
10 Schäfchen zählen für Fortgeschrittene Abbildung 10.9 Mac OS 9. Eine ähnliche, aber etwas andere 17-B"it-Struktur. Abbildung 10.10 Windows NT 4.0 SP3. Auch hier finden wir ein auffälliges Attraktionsmuster und einen winzigen Attraktor mit einer Breite von 8 Bits vor. 186
10.5 Schöne Bilder: Die Galerie des TCP/IP-Stapels Abbildung 10.11 IRIX 6.5. Eine 16 bis 18 Bits breite, hochgradig unregelmäßige Wolke. Wahrscheinlich ein fehlerhafter Algorithmus. Abbildung 10.12 NetWare 6. Ein scheinbar zufälliges System mit einer 32-Bit-Attraktorwolke. Diese besteht jedoch aus einer großen Zahl hochdichter Punkte und ist nicht regelmäßig. 187
10 Schäfchen zählen für Fortgeschrittene Abbildung 10.13 UNICOS 10.0.0.8. Eine seltsame, 17 Bits breite Wolke mit unregelmäßigen Dehnungen, die auf höhere Trefferwahrscheinlichkeiten schließen lassen. Abbildung 10.14 OpenVMS 7.2 (TCP/lP-Standardstapel). Eine 32 Bit breite Struktur nur geringer Zufälligkeit. Sie zeigt auffällige, aber recht ungewöhnliche Zusammenhangsmuster, die auf einen schadhaften PRNG-Aufbau verweisen. 188
10.6 Angreifen mit Attraktoren 10.6 Angreifen mit Attraktoren Nun aber zurück zur Frage mit den Sonnenblumen und den Ziegelsteinen. In der Tat haben diese schönen Bilder für den echten Cornputerfreak eine weitaus größere Bedeutung, als nur das Auge zu erfreuen. Wie sich zeigt, eizeugen die für die einzelnen Betriebssysteme erfassten Attraktorstrukturen eine Matrix möglicher ISN-Verhaltensmuster, deren Dichten den Wahrscheinlichkeiten eines bestimmten Typs einer zeitlichen Abhängigkeit oder eines statistischen Musters entsprechen, das sich durch den zeitlichen Verlauf ergibt. Regionen höherer Dichte innerhalb des Attraktors entsprechen Zusammenhängen, die aufgetreten sind und deren Auftreten auch in Zukunft wahrscheinlicher ist, während weniger stark gefüllte Bereiche mit geringerer Wahrscheinlichkeit verwendet werden. Aufgrund dessen kann, wenn der Attraktor eines bestimmten Betriebssystems grafisch dargestellt ist, der Angreifer zukünftige Ergebnisse einfacher erraten. Wie aber lassen sich diese Fonnen nun wiederum exakten ISN-Werten zuordnen? Der Schlüssel zur erfolgreichen Attacke besteht darin, zu erkennen, dass die Koordinate x jedes Punkts im Attraktor vom Wert Dt abhängt, d. h. von den Sequenznummem, die zu den Zeitpunkten t und t — 1 beobachtet werden (denn es gilt: Dt = St— St_j). Die Koordinate y hingegen hängt von Dt_j (ISNs bei t — 1 und t — 2) und die Koordinate z von Dt_3 (ISNs bei t — 2 und t — 3) ab. Nehmen wir nun an, unser Angreifer habe drei „Sonden" (engl. Probes) an ein Remote- System geschickt, für das der Attraktor des Betriebssystems bekannt ist. Diese Probes entsprechen den Zeitpunkten t — 3, t — 2 und t — 1 und sind — natürlich — ausreichend, um die Koordinaten y und z für den Zeitpunkt zu rekonstruieren, der das Verhalten des Systems zu exakt diesem Zeitpunkt in der Ateaktorstruktur bezeichnet. Mithilfe dieser Informationen kann der Angreifer ausgehend von Unregelmäßigkeiten in der Attraktorstruktur, die er bislang beobachtet hat, den Wert x für bekannte y und z ableiten, die wahrscheinlich häufig auftreten werden als andere. Die Koordinaten y und z entsprechen einer einzelnen Geraden im AttraktorrauHi, die senkrecht zur x-Ebene steht (vgl. Abbildung 10.15): der Menge der Punkte mit allen möglichen x-Werten, bei denen jedoch die weiteren Koordinaten bekannt sind. Diejenigen Punkte, bei denen die Gerade Attrak- torbereiche großer Dichte schneidet oder sich diesen annähert, bilden die Menge der Werte für die Koordinate x, die eine sehr hohe Wahrscheinlichkeit aufweisen. Die Bereiche mit der geringsten Dichte hingegen weisen offenbar die geringste Wahrscheinlichkeit auf, den korrekten Wert für x zu stellen, denn schließlich erschienen dort bei vorherigen Messungen überhaupt keine Attraktorpunkte. Die Möglichkeit, eine Menge von Kandidaten für den Wert x für bekannte y und z zu konstruieren, ist ein wesentlicher Schritt auf dem Weg zur erfolgreichen Attacke: Wenn der Angreifer St_j kennt (und diesen Wert hat er sich ja, wie Sie sich erinnern werden, schon zuvor besorgt), dann kann er problemlos St für jeden in Frage kommenden Wert x (Df) wie folgt berechnen: 189
10 Schäfchen zählen für Fortgeschrittene Wenn er drei vorhergehende Sequenznummern St_3, St_2 und S^ enmttelt hat, kann er auf diese Weise eine Menge in Frage kommender Werte für die nächste Sequenznummer St berechnen, die das angegriffene System mit hoher Wahrscheinlichkeit für die nächste Verbindung verwenden wird — ein Verbindung, die der Angreifer zwar nicht hergestellt hat, in die er aber eindringen zu können hofft. Der Angreifer kann dann eine Attacke ausführen, indem er TCP/EP-Pakete mit den passenden Sequenznummem sendet; er muss dabei nicht von Anfang an richtig hegen, denn alle falschen Werte werden von der entfernten Implementierung schlicht ignoriert. Sobald aber der Wert eines der gefälschten Pakete mit der innerhalb eines Zeitfensters erwarteten Nummer übereinstimmt, werden die Daten akzeptiert, wodurch der Schutz der Sitzungsintegrität, den TCP/EP bietet, aufgehoben ist. Abbildung 10.15 ,flngriffsgerade", die den Attraktor schneidet Diese Angriffsform hat natürlich auch ein paar Nachteile: ■ Die beobachtete Dynamik ist unter Urnständen spezifisch für die Beobachtungsbedingungen oder die Quelle selbst. Allerdings ist dies angesichts der beim Einsatz dieser Technik gegen verbreitete Implementierungen erzielten Erfolgsrate eher unwahrscheinlich. ■ Wenn die Menge der in Frage kommenden Werte besonders groß ist (wie es etwa bei Algorithmen der Fall ist, die gleichförmige Attraktorwolken ohne eindeutige Unregelmäßigkeiten erzeugen), dann ist dieser Ansatz nicht rnehr praktikabel, da zu viele Versuche erforderlich sind, um einen korrekten Wert zu erraten. 190
10.6 Angreifen mit Attraktoren ■ Da es häufig nicht möglich ist, die gesamte von der ISN-Implementierung eines Betriebssystems erzeugte Wertefolge zu erfassen (weil einige Systeme lange oder sogar unbeschränkte Zyklen aufweisen), lässt sich kein vollständiger Attraktor bilden. Aufgrund dessen müssen Sie einen Näherangsansatz verfolgen: Ein Wert kommt in Frage, wenn ein Punkt innerhalb eines gegebenen Radius um einen bestimmten Punkt auf der Geraden (y,z) vorhanden ist. Hierdurch wird die Tatsache kompensiert, dass auch relativ dichte Bereiche des Attraktors Lücken aufweisen können. Um die Ergebnisse vergleichbar zu halten und eine Methode zur vergleichenden Bewertung der Qualität eines ISN-Generators aufzustellen, beschloss ich, die Erfolgsrate mit einer eingeschränkten Anzahl von Versuchen empirisch zu bewerten. Insbesondere wollte ich errnitteln, wie hoch die Wahrscheinlichkeit ist, dass man bei 5.000 Versuchen die korrekte Zahl findet. Dabei ging ich von der Voraussetzung aus, dass ein Angreifer, der eine Netzwerkverbindung geringer bis moderater Geschwindigkeit verwendet, innerhalb einer kurzen Zeitspanne maximal 5.000 Pakete versenden kann.2 Um die Gültigkeit dieses Ansatzes zu verifizieren, entschied ich femer, die Erfolgswahrscheinlichkeit zu testen, indem ich die von den Remote-Systemen erhaltenen Eingabedaten in zwei Teile aufspaltete: einen Teil zur Bildung des Attraktors und einen zweiten zur I^irchführung der eigentlichen Tests. Beim Test wurden vier aufeinanderfolgende Se- quenznummem auf einmal eingelesen, von denen dann drei einer Implementierung zugeführt wurden, deren Aufgabe darin bestand, basierend auf den Attraktordaten eine Menge von 5.000 Werten zu erzeugen. Die Ausgabe wurde dann mit der vierten aus der Testdatenmenge ermittelten Zahl verglichen. Dieser Test wurde für jeden Attraktor mehrere hundert Mal für fortlaufende ISN-Quadnipel wiederholt, um einen annähernden Trefferanteil zu bestimmen, der in der Praxis angibt, wie groß die Wahrscheinlichkeit ist, dass er Angreifer mit seinem Ansatz Erfolg hat. Tabelle 10.1 zeigt einige der Ergebnisse für die Systeme in der Attraktorengalerie. Tabelle 10.1 Betriebssystemspezifische Erfolgsraten für attraktorbasierte Angriffe Betriebssystem IRIX 6.5.15 OpenVMS 7.2 Windows NT 4.0 SP3 Windows 98 FreeBSD 4.2 HP/UX 11 Mac OS 9 Angriffserfolgsrate 25% (25 von 100 Versuchen) 15,00% 97,00% 100,00% 1% 100,00% 89,00% Das kleinste SYN-Paket hat 40 Bytes, d. h. 5.000 SYN-Pakete benötigen eine Bandbreite von mindestens 200 Kbyte. Diese Datennienge lässt sich über eine Modeinverbindung mit der V42.bis-Kompri- mierung innerhalb von 10 bis 20 Sekunden erfolgreich versenden. Die Auswahl dieses Schwellwerts ist zwar willkürlich, scheint aber angemessen. 191
10 Schäfchen zählen für Fortgeschrittene Dieser Ansatz erwies sich als relativ effektiv3, woraufhin viele Anbieter ihre Algorithmen eilends umgestalteten oder Angaben zur deren Sicherheit revidierten. Thema einer Folgestudie, die ich im Jahr darauf (2002) veröffentlichte, war übrigens die Überprüfung einiger dieser Änderungen, die nicht durchgehend zufriedenstellend waren. Die wirkhch wichtige Frage aber ist: Was hat das alles mit passivem Fingerprinting von Betriebssystemen zu tun? 10.7 Zurück zum Fingerprinting Tatsächlich ergeben sich einige wahrhaft faszinierende Konsequenzen aus der Möglichkeit, die Dynamik des Sequenznummerngenerators eines bestimmten Systems entschlüsseln zu können, und der Tatsache, dass die meisten Implementierungen bestimmte, mehr oder minder eindeutige Phasenraumrnuster aufweisen. Der ersichtlichste Trick ist die Anwendung der ISN-Erfassung auf das gute alte Betiiebssystem-Fingerprinting. Indem man ein paar Sequenznummem beobachtet, die man sich von einem entfernten System besorgt hat (etwa zu dem Zeitpunkt, an dem ein Beteiligter versucht, mehrere Verbindungen mit einem Server herzustellen), kann man versuchen, einen Attraktor zu finden, der mit den Daten eine größtmögliche Übereinstimmung aufweist, indem man die beobachteten Daten mit einer Bibliothek bekannter Atteaktoren vergleicht. (Die Nummern müssen nicht unbedingt mithilfe der beschriebenen Angriffsrnethode vorhersagbar sein, es muss sich lediglich der Attraktor eines Systems unterscheiden lassen.) Im Vergleich zum traditionellen passiven Fingerpiinting gibt uns diese Methode zwar einen weniger detaillierten Einblick in die Konfiguration des Systems, aber dafür ist sie praktisch idiotensicher. Um einen solchen Angriff abzuwehien, müssten Sie die Alt und Weise der Sequenznummemgenerierung ändern; es ist aber praktisch unmöglich, die Einstellungen zur ISN-Generierung aus dem Benutzerraum heraus abzuwandeln, und eine Modifikation des Kernels ohne Beeinträchtigung der Sicherheit erfordert in der Regel eine Menge Kenntnisse und Erfahrung (vom Zugriff auf den Quellcode ganz zu schweigen). So, war das jetzt alles? Natürlich nicht! Diese Ergebnisse gelten für Szenarien, in denen eine präzise Dateneinspeisung oder -fälschung notwendig ist. Ist weniger Genauigkeit erforderlich oder besteht das einzige Ziel des Angreifers darin, eine Störung auszulösen, dann wird das entfernte System nicht nur Pakete mit exakter Sequenznummer, sondern auch solche akzeptieren, die sich in die Fenstergröße einpassen, wie sie in den TCP/IP- Paiametem angegeben ist (siehe Kapitel 9). Mit anderen Wollen werden DoS-Angriffe noch erfolgreicher werden. 192
10.7 Zurück zum Fingerprinting 10.7.1 ISNProber: Theorie in Aktion Doch nun genug jetzt von Bildern und grauer Theorie! Wir wollen doch einmal sehen, wie die ISN-Erfassung in der Praxis funktioniert und wie sie dabei hilfreich sein kann, die Konfiguration eines entfernten Systems zu bewerten oder seine Instanzen zu identifizieren. Zum Glück (für mich) gibt es ein Programm, das an dieser Stelle keinesfalls unerwähnt bleiben sollte. Nachdem er meine Abhandlung zur TCP/IP-ISN-Analyse gelesen hatte, entwickelte Toni Vandepoel ein tolles Tool namens ISNProber. ISNProber unterscheidet durch Verwendung der Sequenznurnmemanalyse mehrere Instanzen desselben Betriebssystems. Dabei macht das Tool sich die Tatsache zunutze, dass zwei verschiedene Systeme mit hoher Wahrscheinlichkeit in unterschiedlichen Bereichen des Attraktors angeordnet sind. Das Mindeste, was ISNProber uns anhand des Erscheinungsbildes der beobachteten ISNs mitteilen kann, ist, dass zwei Systeme sich hinter einer gemeinsamen Adresse verbergen. Aus Giiinden der Verständhchkeit wollen wir einmal annehmen, dass das System Y eine ISN-Generatorstruktur verwendet, die immer um den Wert 1 hochzählt. Wir fassen also eine IP-Adresse der Website Mnviv.beispiel.com ins Auge und wollen ermitteln, wie viele Systeme dort vorhanden sind. Zunächst identifizieren wir www.beispiel.com als System Y, stellen mehrere aufeinanderfolgende Verbindungen her und beobachten die folgenden ISNs: 10, 11,534,13,540, 19. Es sollte klar sein, dass die kleineren Zahlen (10, 11, 13, 19) eine Sequenz bilden, die von einem Computer stammt, der entweder weniger Daten sendet und empfängt oder eine kürzere Laufzeit hat, während die höheren Werte einem anderen System zuzuordnen sind. Aufgrund dessen „bedienen" zwei Computer dieselbe öffentliche IP-Adresse gemeinsam — vielleicht hinter einem Lastausgleichssystem. Außerdem können wir durch Variation der Erfassungsintervalle den Typ des Lastausgleichssystems, seinen Ansatz zur Verteilung von Anfragen und den von ihm empfangenen Datenverkehr überprüfen. Dieser Ansatz erlaubt nicht nur eine Unterscheidung von Systemen, die sich hinter einer gemeinsamen Adresse verbergen, sondern auch das Aufspüren von Benutzern des Systems Y, wenn diese von einer IP-Adresse zur nächsten wechseln, solange sie ihre Computer nicht neu stalten (und dadurch den ISN-Zähler zurücksetzen). Bei Systemen, die komplexere Ansätze für ISN-Generatoren bieten als der in unserem Beispiel beschriebene, kann die Unterscheidung noch schwieriger sein, sie ist aber sicherlich möglich, solange die ISNs nicht über alle 32 Bits hinweg zufallig sind. (Und wenn sie das sind, dann treten sicher sehr bald Probleme in Bezug auf Kollisionen auf.) Die hier verwendete Vorgehensweise erfordert lediglich, dass im Algorithmus zur ISN- Erzeugung ein Mindestmaß an Vorhersehbarkeit vorhanden sein muss. Insofern scheint die Analyse von TCP/IP-ISNs eine vielversprechende Alternative oder Ergänzung zum passiven Fingerprinting zu sein und kann, was recht bedauerlich ist, auch als nützliches Werkzeug zur Verletzung des Datenschutzes und zum Nachverfolgen von Benutzem dienen. 193
10 Schäfchen zählen für Fortgeschrittene 10.8 Wie man die passive Analyse verhindert Eine Abwehr der Vorhersage von Sequenznummem ist relativ einfach, und gute Lösungen wie etwa die Spezifikation von RFC19484 stehen bereits seit langer Zeit zur Veifügung. Im Gegensatz dazu ist das Verhindern der passiven ISN-Analyse recht schwierig, weil das Problem nicht nur auf den Schwächen der Algorithmen basiert, sondern auch auf ihrer Verschiedenartigkeit, weswegen nur wenige Systeme dieselben ISN-Charakteristika aufweisen. Auch bei Systemen, die RFC 1948 implementieren oder andere kryptografisch sichere, externe und entropiebasierte Generatoren verwenden, können sich die Verhaltensmuster erheblich unterscheiden — abhängig von den Feinheiten des Algorithmus und den Annahmen des Implementierers bezüglich der Frage, welche Werte ausreichend sind, um einen Angriff abzuwehren. Ein Mindestmaß an Sicherheit lässt sich erzielen, indem man eine SPI-Firewall (Stateful Packet Inspection) einsetzt, die alle Sequenznummem in ausgehenden Paketen neu schreibt.5 Auf diese Weise erscheinen alle innerhalb eines geschützten Netzwerks vorhandenen Systeme rnehr oder minder identisch. Leider bieten nur einige Systeme diese Funktionalität, und nur einige können sie auch nutzen. 10.9 Denkanstöße Die Technik der Phasenraumanaryse ist in Bereichen nützlich, die weit über die Erzeugung von Sequenznurnmern hinausgehen. Andere Parameter, die pseudozufällig oder gemäß einem internen Schema gewählt werden — beispielsweise die Kennungsfelder von IP- Paketen, Kennungen von DNS-Anfragen (siehe Abbildung 10.16), anwendungserzeugte „Geheim-Cookies", die Benutzersitzungen kennzeichnen usw. —, lassen sich erfolgreich analysieren, um entweder Mängel in einem Aufbau zu finden oder eine Implementierung zu identifizieren und weitere Analysen zu vereinfachen oder einen Angriff zu ermöglichen. 4 Bell96 5 Solar Designer weist darauf hin, dass dies sich auch als cleverer Ansatz zum Rindringen in eine Nicht- SPI-FirewaU verwenden lässt. Die Firewall verknüpft möglicherweise (beispielsweise über ein XOR) die ursprüngliche Sequenznummer mit dem sicheren Hash eines Geheimschlüssels kombiniert mit einem Quadrupel aus Adressen und Ports, die eine Verbindung eindeutig identifizieren. Bei der Rückgabe der Pakete könnte dieser Hash dann (durch eine weitere XOR-Verknüpfung) entfernt worden sein. In dieser Foim passt das Paket zu der Vorstellung, die der interne Host von der Verbindung bei der Auslieferung hat; außerhalb der Firewall besteht es aber nur aus einer unvorhersehbaren, völlig zufälligen 32-Bit-Folge. Dies könnte für alle ISN-Implementierungen mit Ausnahme derer funktionieren, die schwerstbeschädigt (d. h. sich häufig wiederholend und kollisionsanfällig) sind. 194
10.9 Denkanstöße Abbildung 10.16 Interessantes Attraktormuster für die Implementierung der Namensauflösung bei Linux Einiges an Arbeit ist in dieser Richtung bereits erfolgt, weiteres wird in Kürze dazukommen. In einer Abhandlung, die sich teilweise auf meine ursprüngliche Untersuchung bezieht, gewährt Joe Steward Einblicke in einige Probleme des DNS-Systems, die sich aus Boom der Vorhersagernethoden für Sequenznummem ergeben. Er stellt fest, dass ein UDP-basiertes DNS-Protokoll Methoden zur Anfi-ageübeipi1ifung umfasst, die auch den billigsten Spoofing-Angriffen nicht den geringsten Widerstand entgegenzusetzen haben. Zudem weicht die gelinge Qualität der eindeutigen Anfragekennungen, die von verschiedenen Implementierungen erzeugt werden, das Schema zusätzlich auf und macht es extrem anfällig für die Einspeisung bösartiger Daten. Angesichts der Tatsache, dass DNS einer der Kerndienste des Internets und die Aussicht, eine DNS-Antwort für eine behebte Website so zu falschen, dass alle Benutzer eines bestimmten Netzwerks auf eine andere Seite umgeleitet werden, alles andere als unattraktiv ist, steht das Fälschen von DNS-Paketen ganz oben auf meiner Liste bagatellisierter Gefahren im Internet. Dan Kaminsky zeigt unter http://w\v\v.doxpara.com/pics/index.php?album=phent}',opy einige interessante, fortgeschrittene Visualisiemngen scheinbar zufälliger Daten. Wirklich sehenswert.
11 Anomalien erkennen und nutzen Elftes Kapitel. In dem wir erfahren, was man kleinen Mängeln im Netzwerkverkehr so alles entnehmen kann In den vorherigen Kapiteln habe ich detailliert eine Anzahl von Möglichkeiten beschrieben und analysiert, potenziell oder Hiutrnaßlich wertvolle Datenblöcke von scheinbar irrelevanten, „technischen" Parametern zu trennen, die mit jeder Nachricht mitgeschickt werden, die ein Verdächtiger über das Netzwerk sendet. Wie Sie — wie ich hoffe — gesehen haben, erhalten wir eine beträchtliche Menge von Daten zum Absender, von deren Übermittlung dieser nichts ahnt (oder deren Übermittlung er zumindest nicht deaktivieren kann, worüber er eher unglücklich sein dürfte). In einer perfekten und frohgemuten Welt könnten wir mithilfe einer Vielzahl von Tricks zur Paket- und Datenstromanalyse viele Eigenschaften der anderen Seite messen und ihr Verhalten der Signatur eines bestimmten Systems oder einer Netzwerkkonfiguration zuordnen. Die Wirklichkeit sieht allerdings ein bisschen anders aus: Einige der beobachteten Parameter weichen zumindest geringfügig von den Wertemengen ab, die normalerweise von einem bestimmten, vom Benutzer eingesetzten Gerät oder einer Netzwerkkonfiguration erwarten werden. Sie können diese scheinbar sinnlosen und zufalligen Diskrepanzen zwar einfach ignorieren und das Herkunftssystem trotzdem erfolgreich erkennen oder seine Benutzer ausfindig machen, aber dies zu tun ist nicht unbedingt weise. Wir lernen zwar von Kindesbeinen an, scheinbar bedeutungslose Plagegeister wie diese zu vernachlässigen, aber nichts in der Welt der Computer geschieht ohne guten Grund (sofern man den Begriff „gut" einigermaßen weit fasst), und wenn man die Mechanismen hinter diesen offenbar zufälligen Anomalien und Minderheitsmustern erforscht, statt sie beiseite zu lassen, dann kann man viele wichtige, zuvor verborgene Charakteristika der Netzwerkkonfiguiation in Erfahrung bringen. Ich möchte in diesem Kapitel einen genaueren Bück auf einige der Prozesse werfen, die sich auf die beobachteten Eigenschaften eines Systems auswirken können. Ich werde die 197
11 Anomalien erkennen und nutzen tieferen Ursachen des von diesen Technologien bedingten Verhaltens, den Zweck der Technologien (oder sein Fehlen) und die sich daraus ergebenden Folgen erläutern. Selbstredend stammen die meisten der reproduzierbaren Änderungen an IP-Paketen, die hier beschrieben werden, von modernen Typen IP-fähiger Zwischengeräte. Aus diesem Grund werde ich mit einer Abhandlung zu zwei Themen beginnen, die wir allzu lang vernachlässigt haben: Firewalls im Allgemeinen und NAT im Besonderen. Firewalls werden als heimliche Bollwerke konstruiert, und je weniger darüber bekannt ist, was die andere Seite verwendet, um so besser für sie. Doch trotz unerbittlicher Firewall- Richtlinien und -Einstellungen sind diese Geräte, weil sie immer komplexer werden und immer besser geeignet sind, aktuellen Herausfordeningen entgegenzutreten, auch immer einfacher mithilfe indirekter oder passiver Sondierungsrnethoden zu untersuchen. 11.1 Grundlagen zu Paket-Firewalls Verbreitete Firewalls1 sind im Grunde genommen eine Klasse von Routing-Zwischengeräten, die so aufgebaut sind, dass sie der grundsätzlichen Aufgabe eines Routing-Zwischengeräts entgegenarbeiten. Im Gegensatz zu,gichtigen" Routem — Systemen, die auf der Basis von Daten, die in die dritte OSI-Schicht einkodiert sind, unterscheidungslose Routing- Entscheidungen treffen— sollen Firewalls Daten übergeordneter Schichten (wie z. B. TCP- oder sogar HTTP-Daten) interpretieren, verarbeiten oder sogar modifizieren. Obwohl die Firewall-Technologie noch relativ neu ist, ist sie bereits wohlbekannt und etabliert und findet sich in Heim- und Unternehmensnetzen gleichermaßen. Firewalls sind so aufgebaut, dass sie bestimmte Datentypen, die an bestimmte Dienste gerichtet sind, abweisen, zulassen oder umleiten, und werden (was keine Überraschung ist) verwendet, um den Zugriff auf bestimmte Funktionen und Ressourcen für den gesamten Datenverkehr zu beschränken, der ein solches Gerät passiert. Aus diesem Grund stellen sie eine zugegebenermaßen leistungsfähige Sicherheits- und Netzmanagementlösung dar, die aber manchmal überschätzt und überbewertet wird. Der Schlüssel zum Erfolg von Firewalls in allen Netzwerkumgebungen besteht darin, dass sie eine Gruppe komplexer Systeme mithilfe einer einzelnen, vergleichsweise robusten Komponente schützen und eine ausfallsichere Sicherheitsmaßnahme bereitstellen, wenn ein Konfigurationsprobleni einen ungeschützten Dienst oder eine anfällige Funktion auf einem geschützten Server verfugbar macht. (In extremen Fällen werden Firewalls einfach verwendet, um Konfigurationsfehler und Warrungsrnängel bei einem geschützten System zu verdecken. Die Folgen sind in der Regel katastrophal.) ZwicOO 198
11.1 Grundlagen zu Paket-Firewalls 11.1.1 Zustandslose Filterung und Fragmentierung Einfache Firewalls sind zustandslose Paketfilter. Sie überprüfen lediglich bestimmte Eigenschaften aller Pakete, z. B. den Zielport, der in TCP-SYN-Paketen zur Verbindungsherstellung enthalten ist. Allein auf den erkannten Eigenschaften basierend entscheiden sie, ob das Paket passieren darf oder nicht. Die zustandslose Ausführung ist exteem schlicht, zuverlässig und Speicher- und ressourcenschonend. So kann eine zustandslose Firewall bei einem Mailserver eingehende Verbindungen auf solche beschränken, die an Port 25 (SMTP) gerichtet sind, indem sie alle SYN-Pakete mit Ausnahme der an diesen Port adressierten verwirft. Da ohne ein erstes SYN-Paket aber keine Verbindung aufgebaut werden kann, kann ein Angreifer über andere Ports nicht sinnvoll mit Anwendungen kommunizieren. Um ihren Zweck zu erfüllen, muss die Firewall nicht annähernd so schnell oder komplex wie der Mailserver selbst sein, denn sie muss über laufende Verbindungen und die jeweiligen Zustände nicht Buch führen. Das Problem dieses vollständig transparenten Schutzes besteht darin, dass die Firewall und der endgültige Empfänger einige Parameter unterschiedlich auffassen könnten. Nehmen wir beispielsweise an, ein Angreifer überzeugt die Firewall davon, dass er eine Verbindung mit einem zulässigen Port herstellt, maßschneidert seine Daten aber so, dass der Empfänger sie anders versteht und eine Verbindung über einen Port herstellt, der von der Firewall eigentlich geschützt werden soll. Auf diese Weise könnte ein Angreifer auf einen anfälligen Dienst oder eine Administationsoberfläche zugreifen. Und schon gibt es ein Problem. Zwar klingt es recht unwahrscheinlich, dass ein solches Missverständnis auftreten könnte, aber erstaunlicherweise lässt es sich ganz einfach einrichten - mithilfe unseres alten Freundes, der Paketfragmentierung und unter Verwendung einer Vorgehensweise, die man gemeinhin als Oveiiapping-Fragment Attack2 (Angriff mit überschneidenden Paketen) bezeichnet und die zuallererst 1995 in RFC1858 beschrieben wurde. In dieser Situation sendet der Angreifer ein Startpaket, welches den Anfang der SYN-Anforderung gemäß TCP enthält, an einen Port, der von der Firewall des Opfers freigegeben ist (z. B. den bereits erwähnten Port 25). Diesem Paket fehlt nur ein winziger Teil am Ende, und das MF-Flag („More Fragments") ist im IP-Header gesetzt. Aber warum sollte sich die Firewall schon um die abschließenden Daten eines Pakets scheren? Die Firewall untersucht das Paket nun, und weil es sich um ein SYN-Paket handelt, wird der Zielport geprüft und für annehmbar befunden. Das Paket wird durchgewunken, aber der Empfänger interpretiert es nicht sofort. (Sie erinnern sich? Wir haben den Wiederher- stellungsprozess in Kapitel 9 beschrieben.) Stattdessen wird das Paket aufbewahrt und harrt der erfolgreichen Defragmentierung, die aber erst stattfinden wird, wenn der abschließende Block des Pakets ankommt. Nun sendet der Angreifer ein zweites Paketfragment. Dieses zweite Paket wird so erstellt, dass es sich mit dem Ursprungspaket gerade soweit überschneidet, dass es an der entsprechenden Stelle im Wiederherstellungspuffer den im TCP-Header gespeicherten Zielport Ziem95
11 Anomalien erkennen und nutzen überschreibt. Das Fragment wird so formuliert, dass es bei einem Offset ungleich null beginnt; in ihm fehlt praktisch der gesamte TCP-Header - bis auf den zu überschreibenden Teü. Aus diesem Grund (und weil Angaben fehlen, die erforderlich sind, um die Flags eines TCP-Pakets oder andere wesentliche Parameter zu überprüfen, anhand derer die Firewall bestimmen könnte, ob die Daten zugelassen oder blockiert werden sollen) wird das zweite Fragment von einer zustandslosen Firewall normalerweise unbehelligt weitergeleitet. Wenn nun dieses zweite Paket vom Empfänger mit dem ersten kombiniert wird, überschreibt es den ursprünglichen Zielport mit einem heiklen, vom Angreifer gewählten Wert und öffnet so eine Verbindung mit einem Port, der eigentlich von der Firewall geschützt werden sollte. Oha! ■ Hinweis Um sicheren Schutz gegen diesen Angriff zu bieten, fuhrt eine sorgfältig durchkonstruierte zu- standslose Firewall zunächst eine Defragmentierung durch, bevor sie die Paket analysiert. Hierdurch aber wird sie ein bisschen weniger „zustandslos" und auch weniger transparent. 11.1.2 Zustandslose Filterung und unsynchrone Daten Ein weiteres Problem mit zustandslosen Paketfiltern besteht darin, dass sie eigentlich gar nicht so gut zupacken, wie wir es uns erhoffen. Eine Filterung kann nur dann durchgeführt werden, wenn ein Paket auch alle Informationen enthält, die notwendig sind, damit der Filter eine begründete Entscheidung über die weitere Verfahrensweise treffen kann. Da auf den einleitenden Handshake folgend eine TCP-Verbindung weitgehend symmetrisch ist - d. h. die beiden Beteiligten haben gleiche Rechte und verwenden zum Austausch von Daten denselben Datentyp (ACK-Pakete) -, ist es nicht einfach, Filter sinnvoll auf andere als die Staitdaten einer Verbindung anzuwenden. Es gibt keine Möglichkeit zu bestimmen, wer (wenn überhaupt) die Verbindung hergestellt hat, über die Pakete ausgetauscht werden, wenn Verbindungen nicht nachverfolgt und aufgezeichnet werden. Insofern ist es ein bisschen schwierig, die Filterrichtlinie, mit deren Hilfe die Firewall ACK- und andere ,,mittlere" Daten wie FEST- und RST-Pakete überprüfen soll, sinnvoll zu definieren. Normalerweise stellt das Unvermögen, Daten jenseits der SYN-Pakete zu filtern, kein Problem dar. Schließlich kann ein Angreifer, der die einleitenden SYN-Pakete nicht anliefern kann, auch keine Verbindung herstellen. Aber die Sache hat einen Haken: Wie Systeme Nicht-SYN-Daten an einen bestimmten Port handhaben, hängt davon ab, ob ein Port geschlossen ist oder das System auf diesem Port horcht. So antworten einige Betriebssys- teme mit einem RST auf umherirrende FIN-Pakete, erzeugen aber keine Antwort bei Ports, die offen (also horchend) sind.3 Einige Aspekte dieses Verhaltens (die Neigung, auf herrenlose und unerwartete Pakete an geschlossene Ports mit RST zu antworten und dieselben Daten nicht zu berücksichtigen, wenn sie an Ports adressiert sind, auf denen ein Dienst auf Verbindungen horcht) werden durch RFC793 diktiert, andere stellen lediglich gängige Praxis einer bestimmten Gruppe von Implementierern dar. 200
11.1 Grundlagen zu Paket-Firewalls Ansätze wie FEST- oder ACK-Scans (die erstmals von Uriel Maiinon im Phrack Magazine beschrieben wurden4) oder NHL- und Xmas-Scans (Scans mit unzulässigen Paketen, in denen keine bzw. alle Flags gesetzt sind) können auf diese Weise gegen zustandslose Pa- ketfilter eingesetzt werden, um angriffsvorbereitende Angaben dazu zu sammeln, welche Ports auf einem Remote-System offen sind, oder festzuhalten, welche Daten von der Firewall abgewiesen werden. Die Tatsache, dass jemand erfahren kann, dass ein bestimmter Port offen ist, stellt an sich noch keine Gefahr dar, wenn keine Möglichkeit vorhanden ist, eine passende Verbindung mit ihm herzustellen. Allerdings enthüllt ein Scan dieser Alt häufig extrern wertvolle Informationen zu Netzwerkinterna - beispielsweise zum verwendeten Betriebssystem oder zu laufenden Diensten -, die eingesetzt werden können, um einen Angriff einfacher oder effizienter oder seine Entdeckung schwieriger zu gestalten, sobald die erste Verteidigungslinie durchbrochen oder unterlaufen wurde. Aus diesem Grund gilt dieser Ansatz als potenzielle Schwäche einer zustandslosen Firewall. Eine wahrscheinlich gefahrlichere Bedrohung hegt in Verbindung mit dem Mechanismus der SYN-Cookies vor, wenn diese mit zustandslosen Filtern verknüpft werden. SYN- Cookies dienen dem Schutz von Betriebssysternen vor Resource Starvation-Angn&en, bei denen der Angreifer eine sehr große Zahl gefälschter Verbindungsanfragen an den Host sendet (was an sich keine schwere Aufgabe darstellt). Aufgrund dessen niuss der Empfänger SYN+ACK-Antworten zurückschicken und zusätzlich Speicher und andere Ressourcen reservieren, wenn er diese scheinbar bald beginnenden Verbindungen zu seinen TCP- Statustabellen hinzufügt. Die meisten Systeme, die einem solchen Angriff ausgesetzt sind, verbrauchen entweder übermäßig viel Ressourcen und werden unerträglich langsam, oder sie verweigern allen Clients ab einem gewissen Zeitpunkt den Dienst, bis diese falschen Verbindungen ungültig werden. Um dieses potenzielle Problem zu beheben, verwenden SYN-Cookies im ISN-Feld aller SYN+ACK-Antworten eine kryptografische Signatur (die eigentlich eine Verkürzung ist und die Verbindung eindeutig identifiziert) und streichen die Verbindung dann vollständig aus ihrern Gedächtnis. Erst wenn die ACK-Antwort vom Host eintrifft - und nur dann, wenn die Bestätigungsnurnmer den Kryptografietest erfolgreich übersteht -, wird die Verbindung zur Statustabelle hinzugefügt. Das Problem bei SYN-Cookies besteht allerdings darin, dass bei einer solchen Konstruktion die Möglichkeit besteht, dass das SYN-Paket (ebenso wie die SYN+ACK-Antwort) überhaupt nicht gesendet worden ist. Wenn der Angreifer ein ISN-Cookie erstellen kann, welches den SYN-Cookie-Algorithmus des Hosts übersteht (weil der Angreifer unter Umständen über ausreichend Bandbreite verfügt oder der Algorithmus schwach ist), dann kann er ein ACK-Paket senden, das beim Remote-Host das Hinzufügen einer neuen Verbindung zur Statustabelle bewirken würde - trotz der Tatsache, dass zuvor weder ein SYN- Paket gesendet noch ein SYN+ACK-Paket empfangen wurde. Eine zustandslose Firewall 4 Maim96
11 Anomalien erkennen und nutzen könnte in diesem Fall nicht wissen, dass gerade eine Verbindung hergestellt wurde, denn die einleitende Anfrage hat sie ja niemals erhalten! Da aber kein eröffnendes SYN-Paket vorhanden war, konnte die Firewall weder die ZP-Adiesse noch den Port überprüfen und genehmigen oder abweisen. Und doch ist aus heiterem Himmel eine Verbindung vorhanden. Das ist ganz schlimm. 11.1.3 Zustandsbehaftete Paketfilter Um das Problem zustandsloser Filter zu beseitigen, müssen wir einen Teil der Informationen zum vorherigen Datenverkehr und zum Zustand der laufenden Verbindungen in der Firewall speichern. Dies ist die einzige Möglichkeit, das Ergebnis der Defragmentierung transparent vorauszusagen oder den Kontext für Pakete aus (scheinbar) laufenden Verbindungen zu ermitteln und so festzustellen, ob diese unzulässig sind und verworfen werden sollen, oder ob sie vom Empfänger erwartet werden und weiterzuleiten sind. Dank der Tatsache, dass leistungsstarke Cornputersysterne bezahlbar geworden sind, konnten Firewalls entwickelt werden, die weitaus komplexer und fortschrittlicher sind, als wir uns dies je vorstellen konnten. Deswegen lag der nächste Schritt nahe: die „zustandsbehaftete" Verfolgung von Verbindungen - eine Situation, in der die Firewall nicht nur einzelne Pakete überprüft, sondern sich auch an den Kontext einer Verbindung erinnert und jedes Paket mit den ihr bekannten Daten abgleicht. Auf diese Weise kann die Firewall das Netzwerk fest versiegeln und unerwünschte oder unerwartete Daten verwerfen, ohne sich darauf verlassen zu müssen, dass der Empfänger immer in der Lage ist, guten von schlechtem Datenverkehr unterscheiden zu können. Statusbehaftete Paketfilter versuchen, Verbindungen zu überwachen und nur Daten zuzulassen, die einer aktiven Sitzung angehören. Aufgrund dessen bieten sie bessere Schutz- und Protokollierangsfunktionalitäten. Die Aufgabe des zustandsbehafteten Filterns stellt natürlich eine größere Herausforderung dar als das zustandslose Filtern und verbraucht erheblich rnehr Ressourcen. Dies gilt insbesondere, wenn das von einem solchen Gerät zu bewachende Netzwerk sehr groß ist. Wenn sie ein umfangreiches Netzwerk schützt, dann erfordert eine Firewall plötzlich sehr viel Speicher und einen schnellen Prozessor, um Daten zu den laufenden Vorgängen speichern und aufrufen zu können. Auch ist bei der zustandsbehafteten Analyse die Wahrscheinlichkeit höher, dass Probleme oder ein Durcheinander entstehen. Schwierigkeiten treten auf, sobald Firewall und Endpunkte unterschiedlicher Ansicht bezüghch des Zustands einer gegebenen TCP/IP-Sitzung sind - eine Situation, die angesichts der Mehrdeutigkeit von Spezifikationen und der Vielzahl verwendeter Stapel nicht so abwegig ist. Beispielsweise könnte eine Firewall, die eine Sequenznuininemübeipilifung weniger stringent durchführt als der endgültige Empfänger, aus dem Empfang eines RST-Pakets, dessen Sequenznurnmem sich nicht innerhalb der vom Empfänger akzeptierten Grenzen befindet, schließen, dass die Verbindung beendet wurde, während der Empfänger die Sitzung nach wie vor für geöffnet und in der Lage hält, 202
11.1 Grundlagen zu Paket-Firewalls weiterhin zugehörige Daten zu übertragen. Oder umgekehrt. Letztendlich hat die zustands- behaftete Filterung ihren Preis. 11.1.4 Neuschreiben von Paketen und NAT Die Lösung zur Verbesserung der Paketinterpretation und zur Gewährleistung eines besseren Schutzes gegen Angriffe, die etwa mithilfe der Paketfragmentierung Firewall- Richtlinien umgehen, besteht darin, Firewalls die Daten nicht einfach nur weiterleiten zu lassen, sondern ihnen auch das Neuschreiben von Teilen der Daten zu gestatten. So versucht etwa ein Ansatz, die Mehrdeutigkeit zu beseitigen, indem er eine Paketdefragmentie- rung (d. h. eine Rekonstmktion im wörtlichen Sinne) erzwingt, bevor das Paket mit den vom Netzwerkadrninistrator konfigurierten Zugriffsregeln verglichen wird. Mit der Entwicklung ansprachsvoUerer Lösungen wurde offenbar, dass das Neuschreiben der Pakete nicht nur dem Netzwerk zugute kornint, sondern für die Netzwerksicherheit und -funktionalität geradezu einen Quantensprung darstellt - durch den Einsatz nützlicher Techniken wie NAT (Network Address Translation, Netzadressübersetzung). Hierunter versteht man die Verknüpfung bestimmter IP-Adressen mit anderen IP-Adressen vor deren Weiterleitung und die Entwirrung der Antworten vor der Rücksendung durch ein geschütztes System. Neben anderen Anwendungen kann ein zustandsbehafteter NAT-Mechanismus verwendet werden, um fehlertolerante Konfigurationen zu implementieren, in denen genau eine öffentlich zugängliche IP-Adresse von mehreren internen Servern bedient wird. Wenn Adressraum eingespart oder die Sicherheit verbessert werden soll, dann kann NAT außerdem implementiert werden, um dem internen Netzwerk die Verwendung eines Pools privater, nicht öffentlich zugänglicher Adressen zu ermöglichen und den Hosts im Netzwerk gleichzeitig eine Kommunikation mit dem Internet zu gestatten, wobei das Netzwerk durch nur einen Computer mit öffentlich zugänglicher IP-Adresse „maskiert" wird. Im ersten Szenario schreibt NAT die Zieladressen in den eingehenden Paketen so um, dass mehrere private Systeme hinter der Firewall bedient werden. Hierdurch entsteht eine Konfiguration mit fehlertolerantem Lastausgleich, in der aufeinanderfolgende Anforderungen an eine behebte Website (z. B. http.VAvww.microsofi.com) oder einen anderen kritischen Dienst auf mehrere Systeme verteilt werden können; fallt eines dieser Systeme aus, dann können die anderen übernehmen. Diese Aufgabe wird manchmal auch mit dedizierten Geräten gelöst (die deswegen auch Lastausgleichssysteme heißen), die wiederum häufig auch von NAT-fahigen Firewalls unterstützt werden. Das zweite Szenario, das häufig auch als Masquerading bezeichnet wird, basiert auf dem Neuschreiben der Absenderadressen ausgehender Pakete. Dies erlaubt die Anbindung einer Anzahl privater und geschützter Systeme (die unter Umständen private Adressen verwenden, auf die aus dem Internet nicht über dieses Netzwerk geroutet wird, also etwa 10.0.0.0) an die Außenwelt, wozu die Firewall die ausgehenden Verbindungen überprüft und die Adressen neu schreibt. Die Systeme sind hinter der Firewall verborgen, und ihre Handlungen präsentieren sich dem Empfänger außerhalb des NAT-geschützten Netzwerks als von der Firewall stammend. Die Verbindung wird mit einer bestimmten öffentlichen IP- 203
11 Anomalien erkennen und nutzen Adresse und einem bestimmten Port verknüpft, und dann werden die Daten weitergeleitet. Der gesamte Datenverkehr, der vom Empfänger an diese IP-Adresse und diesen Port zurückgeschickt wild, wild dann wieder so umgeschrieben, dass er an das private System gerichtet ist, welches die Verbindung aufgebaut hat, und dann in das interne Netzwerk weitergeleitet. Auf diese Weise bleibt das gesamte private Netzwerk mit Workstations, die nicht für die Bereitstellung von Diensten im Internet vorgesehen sind, von außen zumindest auf direktem Wege unerreichbar. Dies erhöht die Sicherheit im Netzwerk erheblich, verbirgt einen Teil seiner Struktur und spart zudem teuren öffentlichen IP-Adressraum ein, der andernfalls hätte erworben werden müssen, um alle Systeme im internen Netzwerk zu versorgen. Mithilfe dieses Systems kann eine Organisation, auf die im Internet nur eine einzige IP-Adresse verweist, trotzdem ein Netzwerk mit Hunderten oder Tausenden von Computern aufbauen und diese an das Internet anbinden. 11.1.5 Lost in Translation Auch die Adressübersetzung ist komplexer, als es den Anschein hat: Einige höhere Protokolle wählen nicht den schlichten Weg, eine Verbindung mit einem entfernten System herzustellen und dann einfach ein paar Befehle zu senden. Das ebenso alte wie populäre FTP- Protokoll (File Transfer Protocol)5 basiert in seinem grundlegendsten und meistunterstützten Betriebsrnodus auf der Herstellung einer Zweitverbindung vom Server zum Client (also in Gegenrichtung), um die erforderlichen Daten zu senden; die ursprüngliche, vom Client aufgebaute Verbindung wird lediglich zum Übermitteln von Befehlen benutzt. Viele andere Protokolle - insbesondere einige Protokolle für Chat-Programme, P2P- und Filesharing-Tools, Multimediadienste usw. - setzen ebenfalls merkwürdige oder ungewöhnliche Strukturen ein, die Rückverbindungen oder Portwechsel erfordern oder bestimmten sitzungsübergreifenden Datenverkehr wie etwa UDP-Pakete (User Datagram Protocol) zurück zur Workstation gestatten. Um diesen Herausforderungen zu begegnen, muss, wenn derartige Protokolle unterstützt werden sollen, jede Masquerading-Irnplernentierung mit einer Anzahl entsprechender protokollspezifischer Hilfsprogramme (engl. Helpers) ausgestattet sein. Diese Protokolle untersuchen die über eine Verbindung ausgetauschten Anwendungsdaten, schreiben sie zum Teil um und bohren vorübergehend Löcher in die Firewall, um den Datenverkehr in Gegenrichtung zu gestatten. Hier stoßen wir auf ein weiteres Problem, das vor einigen Jahren zuallererst von Mikael Olsson im FTP-Helperö und in der Folge im Zuge entsprechender Nachforschungen auch in weiteren Helpem erkannt wurde (unter anderem auch vom Autor dieser Zeilen).7 Das Problem besteht darin, dass diese Helper basierend auf den Angaben, die von einer Workstation übeitragen wurden, entscheiden, wann und wie für ein bestimmtes Protokoll und 5 Post85 6 OlssOO 7 ZaleOla 204
11.1 Grundlagen zu Paket-Firewalls eine bestimmte Zieladresse Löcher in der Firewall geöffnet werden. Sie setzen dabei voraus, dass der vom System erzeugte Datenverkehr im Auftrag des Benutzers und mit seinem Wissen gesendet wird. Es ist aber klar, dass sich einige Programme wie etwa Webbrowser so beeinflussen lassen, dass sie bestimmte Netzwerkdaten senden - z. B. Daten, die „aussehen" wie ein Protokoll, welches das Programm nicht nativ unterstützt. Mehr noch: Diese Programme können sogar dazu überredet werden, dies automatisch zu tun, indem man einfach bestimmte gefährliche Inhalte bastelt und diese an die Anwendung sendet. Ein solcher nachgemachter Datenverkehr kann ein Helper-Programm so in die Irre führen, dass es ein Loch in der Firewall einrichtet. Das klassische Beispiel eines solchen Angriffs ist der Missbrauch eines universellen Webbrowsers: Indem über einen nicht standardkonformen HTTP-Port (der jedoch für FTP- Daten sehr wohl standardkonfomi ist) ein Verweis auf eine Website oder ein Webelement ergänzt wird, die bzw. das im Zweifelsfall auf dem System eines Angreifers vorhanden ist, kann der Client gezwungen werden, eine Verbindung mit dieser Ressource herzustellen und zu versuchen, eine HTTP-Anforderung abzusetzen. Da der Port, mit dem die Verbindung hergestellt wird, normalerweise von FTP benutzt wird, horcht der FTP-Helper der Firewall auf und macht sich zur Mithilfe bereit, sollte diese notwendig sein. Die folgende Beispieladresse etwa würde dafür sorgen, dass der HTTP-Client eine Verbindung mit dem FTP-Port herstellt und dann etwas absetzt, was für den Firewall-Helper wie der FTP-Befehl port aussieht: HTTP://SERVER:21/FOO<RETURN>PORT MY_IP,122,105<RETURN> Die vom Client abgesetzte Anforderung würde von einem echten FTP-Dienst am anderen Ende lediglich als leeres Gewäsch aufgefasst, und seine Antwort wäre für den Webclient, der die Anforderung abgesetzt hat, wiederum völlig unverständlich. Aber darum geht es hier gar nicht. Worum es wirklich geht, ist, dass der Angreifer einen Teil der Anfrage steuern kann: den Dateinamen, den der Client vom Server abruft. Dieser fiktive, vom Schraken gewählte Dateiname kann alle von ihm gewünschten Daten enthalten. Indem man in den Dateinamen Teilstrings einfügt, die normalerweise mit FTP-Anforderungen verknüpft würden, kann der Angreifer einen FTP-Helper austricksen, der die Verbindung nach einem bestimmten Textbefehl (port) durchsucht; der Helper glaubt dann, dass der Benutzer versucht, eine bestimmte Datei herunterzuladen. Also darf der Remote-Server vorübergehend eine Verbindung mit dem Opfer herstellen - in diesem Fall über den Port mit der abwegig klingenden Nummer 31.337 (122 ■ 256 + 105). Und so lassen wir den Angreifer ein, ohne dass das Opfer etwas davon mitbekommt. Nun, das ist ja schon wieder mehr, als wir erwartet haben. 205
11 Anomalien erkennen und nutzen 11.2 Der Mummenschanz und seine Folgen Alle bislang beschriebenen Szenarien beziehen sich auf den Missbrauch des Masquera- dings, aber bereits das reine Vorhandensein dieser Funktionalität kann uns eine Menge über unseren Gegenüber erzählen. Wie bereits angemerkt, geht das Masquerading keineswegs unaufdringlich zu Werke. Das Betriebsprinzip besteht im Wesentlichen darin, Teile des ausgehenden Datenverkehrs neu zu schreiben. Dabei beschränkt es sich nicht auf das Anpassen der Adresse. Insofern kann der aufmerksame Beobachter nicht nur erschließen, dass das Masquerading eingesetzt wird, sondern er kann auch das jeweilig verwendete Firewall-Systern ermitteln. Beim Einsatz des Masqueradings finden wir die folgenden Änderungen vor: ■ Es tritt eine offensichtliche Diskrepanz zwischen der TTL eingehender Pakete und der erwarteten oder gemessenen Entfernung zum Zielnetzwerk auf. Datenverkehr, der von jenseits eines Masquerading-Systerns stammt, ist mindestens einen Hop „älter" als ein Paket, das von einem System kommt, welches seine IP-Adresse für ausgehende Verbindungen direkt von einem geschützten Netzwerk erhält. ■ In den meisten Fällen lassen sich im Ursprungsnetzwerk verschiedene Systeme oder leicht unterschiedliche Beüiebssystemkonfigurationen (oder Laufzeiten) ausmachen. Diese Systeme weisen leicht unterschiedliche TCP/IP-Eigenschaften auf (siehe auch Kapitel 9 und 10). Wenn wir verschiedene „TCP/IP-Handschriften" in Verbindungen beobachten, die scheinbar von derselben IP-Adresse stammen, können wir deutliche Hinweise darauf erhalten, ob NAT auf einem bestimmten Computer mit einem nachgeschalteten internen Netzwerk vorhanden ist. ■ Schließlich wird der entfernte Beobachter wahrscheinlich auch eine Verschiebung der Quellports feststellen. Dies ist ein ansonsten sehr ungewöhnlicher Vorfall, der auftritt, weil Verbindungen, die aus dem Netzwerk stammen, kurzlebige Quellports verwenden, die sich nicht in dem vom betreffenden Betriebssystem normalerweise verwendeten Bereich befinden. Jedes Betriebssystem reserviert einen bestimmten Bereich von Quellports, um lokale End- punktkennungen für alle ausgehenden Verbindungen zuzuweisen. Allerdings verwendet eine Firewall häufig einen anderen Portbereich zur Kennzeichnung maskierter Verbindungen. Dieser Bereich ist spezifisch für das Betriebssystem des NAT-Geräts. In diesem Fall ist es, wenn der beobachtete Bereich sich von demjenigen unterscheidet, den wir für das erkannte Betriebssystem erwarten würden, möglich, das Vorhandensein der Adressübersetzung zu erschließen und manchmal sogar den Typ der verwendeten Firewall zu bestimmen. Dies kann beispielsweise der Fall sein, wenn Linux, welches normalerweise im Portbereich zwischen 1.024 und 4.999 operiert, außergewöhnlich hohe Poitnummern verwendet. Diese Techniken werden häufig eingesetzt und bilden die Basis für die Masquerading- Erkennung und die Erkundung maskierter Netzwerke. Aber es gibt noch ein paar weitere Hilfsmittel zur Erkennung umgeschriebener Pakete. 206
11.3 Roulette spielen mit der Segmentgröße 11.3 Roulette spielen mit der Segmentgröße Einer der weniger offensichtlichen und insofern auch weniger bekannten Wege, Geräte zu erkennen, die Pakete umschreiben, und mehr über die Netzwerkkonfiguration zu erfahren, besteht in der Analyse der MSS-Felder (Maximum Segment Size) eingehender Pakete. Da die IP-Paketfragmentierung das Datenaufkornmen merklich erhöht, gilt sie aus Sicht der Systernleistung häufig als Alptraum, weswegen zahlreiche Implementierer sie tunlichst zu umgehen versuchen. Auf der anderen Seite ist die Fragmentierung, wie wir bereits gesehen haben, nur schwer zu beseitigen, denn es ist praktisch unmöglich, die MTU eines Pfades vor Beginn des eigentlichen Kornmunikationsvorgangs exakt, schnell und zuverlässig zu bestimmen. Auch die beste verfügbare Methode, die PMTU-Erkennung, ist weit davon entfernt, perfekt zu sein, und wirkt sich, sobald sie ausgelöst wurde, sofort auf die Übertragungsleistung aus. Damit die korrekte MTU-Einstellung im Trial-and-Error- Verfahren ermittelt werden kann, müssen einige Pakete, die nicht passen, unter Umständen verworfen und neu gesendet werden. Um die Auswirkungen der PMTU-Erkennung auf Leistung und Zuverlässigkeit zu beseitigen und den Mehraufwand der Fragmentierung zu verringern, ändern viele NAT-Firewalls, die bestimmte Parameter des ausgehenden Datenverkehrs umschreiben, bei Verbindungen, die aus dem privaten Netzwerk stammen, auch den im TCP-Header angegebenen MSS- Parameter auf einen für die aus dem Netzwerk herausführende externe Leitung geeigneteren Wert. Diese neue Einstellung ist im Zweifelsfall etwas „schmaler" (d. h. sie hat eine niedrigere MTU) als die des LANs. Diese Änderung stellt sicher, dass der Empfänger nicht versucht, Daten zu senden, die nicht unfragrnentiert über die Leitung geschickt werden können (sofern diese den Teil der Infrastruktur mit der niedrigsten MTU darstellt). Auf diese Weise wird die Wahischeinlichkeit des Auftretens einer Fragmentierung verringert. Dies setzt voraus, dass, sollte es zu einer MTU-Inkompatibihtät kommen, diese in der Nähe des Absender- oder Empfangersystems — auf der so genannten„letzten Meile" — auftritt; dort kommen häufig unterschiedliche Typen von Verbindungen mit geringen MTUs zum Einsatz, z. B. DSL-Verbindungen oder Funkstecken, und Pakete müssen, um über diese Verbindungen übertragen werden zu können, „verkleinert" werden. Allein diese MSS-Verringerung ist nicht ganz einfach zu erkennen. Tatsächlich ist es unmöglich zu sagen, ob die MSS den erkannten Wert vom Absender erhielt oder dieser unterwegs geändert wurde. Das heißt, vielleicht mit einer kleinen Ausnahme. Wir wissen aus Kapitel 9, dass der Algorithmus zur Bestimmung der Fenstergröße auf vielen modernen Systemen eine Besonderheit aufweist: Wie wir wissen, bestimmt die Fenstergröße die Menge der Daten, die ohne Bestätigung gesendet werden können. Die jeweilige Einstellung wird häufig auf der Basis der Vorgaben gewählt, die der Entwickler von seinem indischen Ouru oder anderen spirituell maßgeblichen Institutionen erhält. Die beiden meistverwendeten Ansätze besagen, dass der Wert entweder ein Vielfaches der MTU abzüglich der Protokoll- Header sein sollte — ein Wert, der auch als MSS (Maximum Segment Size) bezeichnet 207
11 Anomalien erkennen und nutzen wird —, oder aber einfach groß genug und irgendwie „rund". Ältere Linux-Versionen (etwa 2.0) verwendeten Zweierpotenzen (z. B. 16.384). Bei Linux 2.2 wechselte man dann zum 1 Ifachen oder 22fachen der MMS (warum auch immer), und neuere Linux- Versionen verwenden das Zwei- oder Vierfache des MMS-Werts. Die Sega Dreamcast — eine netzwerkfähige Spielekonsole — benutzt den Wert 4.096, und bei Windows wird häufig 64.512 verwendet. Eine immer größer werdende Anzahl modemer Systeme (einschließlich neuerer Versionen von Linux und Solaris, bestimmter Windows-Versionen und SCO UnixWare) verwendet eine Fenstergrößeneinstellung, die ein Vielfaches des MSS-Wertes ist. Aufgrund dessen ist es einfach festzustellen, ob an der MSS-Einstellung in einem Paket hemmgepfuscht wurde, denn die Fenstergröße des bearbeiteten Pakets wird dann kein bestimmtes Vielfaches des MSS mehr sein. Vielmehr ist es sogar wahrscheinlich, dass sie sich überhaupt nicht mehr durch die MSS teilen lässt. Indem man die MSS mit der Fenstergröße vergleicht, kann man das Vorhandensein einer Gruppe von Firewalls, die das MSS-Clamping (d. h. die Anpassung des Wertes an die nachfolgende Verbindung) auf einer Vielzahl von Systemen unterstützen, zweifelsfrei nachweisen. Zwar ist das Clamping unter Linux und FreeBSD optional, auf Firewalls und intelligenten DSL-Routern für Heimnetze wird es jedoch häufig automatisch durchgeführt. Insofern zeigt eine anomale MSS-Einstellung nicht nur das Vorhandensein eines paketrno- difizierenden Geräts an, sondern lässt auch auf NAT-Funktionalität schließen, was wiederum weitere Rückschlüsse auf die Netzwerkverbindung des Absenders zulässt. 11.4 Zustandsbehaftete Nachverfolgung und unerwartete Antworten Eine weitere wichtige Konsequenz aus der Nachverfolgung zustandsbezogener Verbindungen und der Paketmodifikation besteht darin, dass einige von RFCs vorgesehene Antworten von der Firewall und nicht vom Absender erzeugt werden. Dies erlaubt es dem Angreifer, ein solches Gerät mit hoher Effizienz zu erkennen und zu sondieren. Wenn eine Verbindung aus der NAT-Zustandstabelle gelöscht wird — sei es, weil sie ungültig geworden ist oder von einem der Endpunkte mit einem RST-Paket beendet wurde, das die Gegenseite nicht erreichte —, dann wird weiterer Datenverkehr der betreffenden Sitzung anders als bei zustandslosen Paketfiltem nicht an den Empfänger weitergeleitet, sondern direkt von der Firewall verarbeitet. Die TCP/IP-Spezifikation schreibt vor, dass ein Empfanger auf alle unerwarteten ACK- Pakete mit einem RST-Paket antworten soll, damit der Absender weiß, dass die Sitzung, die er fortsetzen will, nicht oder nicht niehr vom Empfanger unterstützt wird. Einige Firewalls verweigern im Widerspruch zu den RFCs eine Beantwortung dieser Daten vollständig: Pakete, die keine vorhandenen Sitzung anzugehören schienen, werden einfach verworfen. (Dies ist nicht immer klug, denn es kann zu unnötigen Verzögerungen führen, wenn eine zulässige Verbindung aufgrund von Problemen mit Zwischengeräten abgebaut wird.) 208
11.4Zustandsbehaftete Nachverfolgung und unerwartete Antworten Viele Geräte jedoch antworten mit dem zulässigen und erwarteten RST-Paket. Hierdurch wird eine weitere Möglichkeit eröffnet, das Firewall-Gerät zu erkennen und sorgfältig zu profilieren. Da das Paket von der Firewall von Grund auf neu erstellt wird, beziehen sich seine Parameter auf die Firewall und nicht auf das, was die Firewall zu schützen versucht. Dies gibt uns die Möglichkeit, die Firewall mithilfe traditioneller Fingeiprinting-Methoden zu identifizieren, wie wir sie in Kapitel 9 kennen gelernt haben (Übeipräfung von DF- Flags, TTL, Fenstergröße, Optionstypen, -werten und -reihenfolge usw.). Es gibt aber auch noch eine andere Möghchkeit, die uns RFC11228 eröffnet: 4.2.2.12 RST-Segment: RFC-793 Abschnitt 3.4 TCP SOLLTE gestatten, dass ein empfangenes RST-Segrnent Daten enthält. ERÖRTERUNG: Es wurde darauf hingewiesen, dass ein RST-Segment auch ASCII- Text enthalten kann, der den Grund für das RST-Paket angibt. Für derartige Daten wurde noch kein Standard verabschiedet. Und in der Tat gibt es Systeme, die, obwohl dafür noch kein Standard vorhanden ist, auf ein verirrtes ACK-Paket mit einer ausführlichen (wenn auch oft kryptischen) RST- Meldung antworten — in der Hoffnung, dass die Gegenseite Trost darin findet, über die Ursache Bescheid zu erhalten. Häufig enthalten diese Antworten interne Schlüsselwörter oder Ansätze schlagen, betriebssysternspezifischen Humors. Hier ein paar Beispiele: B Mac OS: no tcp, reset; tcp_close, during connect B HP/UX: tcp_fin_wait_2_timeout, No TCP B SunOS: new data when detached, tcp_lift_anchor, can't wait Immer, wenn wir ein auskunftsfreudiges RST-Paket erkennen, das als Reaktion auf Netzwerkprobleme oder unerwartet erhaltene Daten an den Host gesendet wird, und außerdem wissen, dass das Remote-System, von dem es stammt, diese ausführlichen Nachrichten nicht verwendet, wissen wir Bescheid. Wir können den Schluss ziehen, dass zwischen uns und dem Empfänger ein Gerät — wahrscheinlich eine statusbehaftete Firewall — vorhanden ist, und wir können sein Betriebssystern ermitteln, indem wir die Antwort aus der Liste der bekannten Nachlichten gängiger und weniger gängiger Betriebssysteme heraussuchen. Diese beiden Fingeipiinting-Methoden erweisen sich, wann immer die Daten im Netzwerk bei kurzzeitigen Netzwerkproblemen beobachtet werden können, als für die Erkennung vorhandener statusbehafteter Paketfilter extrem effizient. Sie lassen sich auch für aktives Fingerprinting einsetzen, ohne das Firewall-Gerät selbst ins Visier zu nehmen, indem man ein herrenloses ACK-Paket an ein Ziel sendet, um zwischen statuslosen und statusbehafteten Filtern unterscheiden zu können. Ausgehend von der Antwort des Paketempfangers kann der Angreifer dann eine geeignete Methode entwickeln, um die Firewall anzugehen (oder Kenntnisse einsetzen, die er auf andere Weise erworben hat). 8 Brad89
11 Anomalien erkennen und nutzen 11.5 Zuverlässigkeit oder Leistung: Der Streit ums DF-Bit Die PMTU-Erkennung ist ein Fmgeiprinting-Szenario, das eng mit dem der Vermeidung der IP-Fragmentierung verknüpft ist, wie wir sie in Kapitel 9 kennen gelernt haben. Aktuelle Versionen des Linux-Kernels (2.2, 2.4, 2.6) und von Windows (2000 und XP) implementieren und aktivieren die PMTU-Erkennung standardrnäßig. Insofern ist, sofern diese Einstellung nicht geändert wurde, bei allen Datenpaketen, die von solchen Betriebs- systemen stammen, das DF-Bit („Don't Fragment") gesetzt. Auch hier neigt der Pfader- kennungsalgorithmus dazu, Probleme in Situationen zu verursachen, die zwar selten, aber nicht völlig unbekannt sind. 11.5.1 Ausfallszenarien für die PMTU-Erkennung Das Problem bei der PMTUD besteht darin, dass sie von der Fähigkeit des Absenders eines Pakets abhängt, die ICMP-Fehlermeldung „Fragmentierung erforderlich, aber DF ist gesetzt" empfangen und die optimalen Einstellungen für eine Verbindung bestimmen zu können. Das Paket, welches die Meldung ausgelöst hat, wird verworfen, bevor es das Ziel erreicht, d. h. es rnuss in seiner Größe angepasst und dann neu gesendet werden. Wenn der Absender diese Meldung nicht empfingt, weiß er nicht, dass sein Paket nicht durchgekommen ist. Dieses fühlt zumindest zu einer Verzögerung, und schlimmstenfalls wird die Verbindung sogar beendet, denn auch bei einer Neuübertragung werden die Daten mit hoher Wahrscheinlichkeit nicht über eine Verbindung gesendet werden, deren maximale Paketgröße geringer ist als das, was der Absender lundurchzuquetschen versucht. Für die ICMP-Meldung, die erstellt wird, wenn ein Paket zu groß für eine Verbindung ist, wird jedoch nicht garantiert, dass sie den Absender erreicht. In manchen Netzwerken werden infolge eines falsch verstandenen Versuchs, die Sicherheit zu erhöhen, alle ICMP- Meldungen einfach gelöscht. Also wird ein solches Paket selbst dann nicht unbedingt ausgeliefert, wenn es von einem Gerät gesendet wird. Aber warum sollten ICMP-Meldungen denn überhaupt gelöscht werden? Nun, in der Geschichte der Netzwerktechnik gelten viele derartige Meldungen als Urheber von Sicherheitsproblemen: Bestimmte tibergroße oder fragmentierte ICMP-Pakete beschädigten den Kernel-Speicher vieler Systeme. (Man kennt diese Angriffsform unter der Bezeichnung „Ping of Death"). ICMP-Meldungen, die an Broadcast-Adressen gesendet wurden, wurden auch verwendet, um einen Sturm von Antworten an eine gefälschte Quelladresse zu entfachen („Srnurf-Angriff') oder DoS-Attacken auszuführen. Außerdem interpretierten fehlerhaft konfigurierte Systeme eine bestimmte Alt von ICMP-Broadcasts — eine Nachricht zur Bekanntmachung von Routem9 — oft fälschlicherweise als Befehl zur Änderung ihrer Router-Bekanntmachungen („Advertisenients") sollen die automatische Konfiguration von Netzwerk- hosts ermöglichen, ohne dass der Administrator manuell Hilfestellung leisten muss. Der Router sendet dann regelmäßig — oder auf Anforderung — eine Broadcast-Meldung, die besagt „Hier bin ich. Benutze mich". Einige Betriebssysteine akzeptieren nicht angeforderte Bekanntmachungen ohne Zögern. Eine ziemlich schlechte Idee. 210
11.5 Zuverlässigkeit oder Leistung: Der Streit ums DF-Bit Netzwerkeinstellungen. Da sie diese Nachricht unabhängig vom Grad ihrer Vertrauenswürdigkeit akzeptierten, eröffnete sich hier eine weitere interessante Möglichkeit zum Angriff. Aus diesem Grund wird ICMP von vielen gefürchtet. Und blockiert. ■ Hinweis Den Vorschlag, den gesamten ICMP-Datenverkehr abzuweisen, finden Sie häufig in kritikfreien Sicherheitsleitfäden, und allzu viele Administratoren beherzigen ihn auch. Ich habe ihn sogar in einer Empfehlung eines professionellen renommierten Prüfers für einen Penetrationstest gefunden. Den Namen der betreffenden Person darf ich an dieser Stelle bedauerlicherweise nicht verlautbaren. Ein weiteres Problern, das die PMTUD unzuverlässig machen kann, hegt vor, wenn einige empfangene Fehlermeldungen von Geräten stammen, die den privaten Adressraum verwenden. Manchmal werden, um Adressen im eingeschränkten (und deswegen kostspieligen) öffentlichen IP-Adressraum einzusparen, Schnittstellen an dem Kabel, mit dem der Router und die Firewall eines entfernten Netzwerks angebunden sind, nicht mit den Adressen konfiguriert, über die das Netzwerk von außen erreichbar ist; stattdessen werden Adressen aus einem Adresspool zugewiesen, der für den privaten oder lokalen Einsatz reserviert ist. Leider setzt der Einsatz des privaten Adressraums die PMTUD außer Gefecht. Warum dieses? Weil, wenn ein Paket, das von außen kommt, zu groß ist, um von der Firewall des Empfängers an das Ziel weitergeleitet zu werden, die Firewall eine ICMP-Fehlermeldung mit ihrer eigenen Absenderadresse zurückschickt. Und diese gehört in diesem Fall zum Pool privater Adressen. Die Firewall des Absenders des Ursprungspakets kann dann ein solches Antwortpaket abweisen, denn es kommt zwar von außen, weist aber eine IP- Adresse aus einem privaten Pool auf (möghcherweise sogar aus einem Bereich, der auch im privaten LAN des Absenders verwendet wird). Die Firewall lehnt die Annahme dieser Daten ab, weil solche Faktoren gewöhnlich Anzeichen eines Fälschungsversuchs mit dem Ziel sind, die Identität eines vertrauenswürdigen internen Hosts vorzugeben. In diesem Fall allerdings durchbricht diese Entscheidung einen relativ aktuellen PMTUD-Mechanismus, und am Ende weiß der ursprüngliche Absender nicht, dass sein Paket nicht angekommen ist. Und es kommt noch schlimmer: Auch wenn alle Bedingungen erfüllt sind und das Paket sein Ziel erreicht, kann dies folgenlos bleiben, denn viele moderne Geräte schlanken die ICMP-Antwortraten ein und senden nur eine begrenzte Anzahl von Meldungen während eines bestimmten Zeitraums. Auch dies wurde als Sicherheitsmaßnahme implementiert. Da ICMP-Meldungen lediglich informativen Charakter haben und vor der Einführung von PMTUD-Algorithmen nicht kritisch für die Kornmunikation waren, schien die Beschränkung der Antwortete eine vernünftige Möglichkeit zur Abwehr bestimmter Arten von DoS- oder Bandwidth Stan'aöow-Angriffen zu sein. 211
11 Anomalien erkennen und nutzen 11.5.2 Der Kampf gegen PMTUD und seine Nebenprodukte Im Lichte dieser Ausführungen besehen scheint die PMTU-Erkennung ein ziemlich schlechtes Konstmkt zu sein. Sie bietet leistungstechnisch gewisse Verbesserungen, jedoch um den Reis selten auftretender, aber hartnäckiger und gewöhnlich schwer diagnostizierbarer Probleme, die Benutzem den Zugriff auf bestimmte Server verweigern oder ihre Verbindungen unvorhergesehen beenden können. Zwar wurden viele Algorithmen zur Erkennung so genannter „schwarzer Löcher" entwickelt, die Hosts oder Netzwerke erkennen sollen, in denen die PMTUD abgeschaltet werden sollte (diese Algorithmen arbeiten mit unterschiedlichen! Erfolg), aber hierdurch wird das Problem nicht vollständig gelöst, und es werden zudem weitere Verzögerangen verursacht — und zwar meist dann, wenn diese am wenigsten gebraucht werden können. Um diese Probleme zu beseitigen und Beschwerden zu vermeiden, konfigurieren einige Anbieter kommerzieller Firewalls ihre Lösungen so, dass diese einen ziemlich miesen Trick verwenden: Sie löschen das DF-Flag im gesamten ausgehenden Datenverkehr. Dies ist eine subtile und ziemlich behebige Modifikation, aber sie ist auch hervorragend geeignet, das Vorhandensein eines Paketfilters zu verraten, der Daten umschreibt. Wenn die Eigenschaften PMTUD-fähiger Systeme unter eine bestimmten Adresse oder in einem gegebenen Netzwerk beobachtet werden, in den eingehenden Paketen aber die erwarteten DF- Flags fehlen, dann kann der aufmerksame Beobachter das Vorhandensein und den Typ einer Firewall erschließen und erhält so ein weiteres winziges Puzzlestück, ohne mit dem Opfer interagjeren zu müssen. 11.6 Denkanstöße Hier endet meine kleine Geschichte darüber, wie die Verbesserung und Leistungssteigerung von Firewalls in punkto Verhinderung von Infiltrierung und direkter Reconnaissance auch dazu gefühlt hat, dass eben diese Firewalls mittlerweile unter Verwendung einer indirekten Beurteilung leichter zu untersuchen sind. Doch gestatten Sie mir noch ein kurzes Abschweifen. Meine wahrscheinlich bizarrste und interessantes Entdeckung machte ich irgendwann im Jahr 1999. Sie hat zwar nicht direkt etwas mit dem Aufbau von Firewalls zu tun, bietet aber dennoch genug Denkanstöße für jene, die am Problem des passiven Fingerprintings von Zwischensystemen interessiert sind. Jacek P. Szymanski, mit dem ich damals für kurze Zeit zusammenarbeitete und mit dem gewisse ungewöhnliche und verdächtige Muster in Netzwerkdaten zu diskutieren ich später noch das Vergnügen haben sollte10, bemerkte irgendwann einen plötzlichen Anstieg Eine Kooperation, die in gewissem Sinne zur Bildung einer lose zusammenhängenden Gruppe polnischer Forscher führte, die in den Jahren 1999 und 2000 damit beschäftigt waren, absonderliche Allen unerwarteter Datenverkehrsmuster im Netzwerk abzugleichen, nachzuverfolgen und soweit wie möglich zu erläutern. 212
11.6 Denkanstöße erheblich beschädigter TCP/IP-Pakete, die über Port 21.536 (und in geringerern Urnfang auch über andere Ports wie 18.477 und 19.535) eingingen. Die ramponierten Pakete stammten immer von Ports wie 18.245, 21.331 oder 17.736 und kamen von einer großen Anzahl von Systemen im Einwahladressraum der nationalen Telefongesellschaft Teleko- rnunikacja Polska. Nachdem ein paar dieser Pakete erfasst werden konnten, wurde festgestellt, dass die Daten ganz erheblich und auf sehr merkwürdige Weise verstümmelt waren. Die Pakete trafen mit konekt aufgebauten IP-Headern ein (wobei als RotokoUtyp TCP angegeben war), aber auf diese Header folgten unmittelbar die TCP-Nutzdaten: Die TCP-Header waren schlicht und einfach verschwunden. Die beobachteten Portkombinationen entstammten der Interpretation der ersten vier Nutzbytes als Zahlenpaar: Wäre ein TCP-Header vorhanden gewesen, dann hätten hier die Angaben zu Quell- und Zielport gestanden. Das Paar 18.245 und 21.536 war nichts anderes als eine Darstellung des Textstrings „GET " - vier Zeichen, mit denen fast alle HTTP-Anfragen beginnen, die über das Netzwerk übertragen werden. Ähnlich standen 18.477 und 21.331 für „SSH-", die eröffnende Phrase jeder SSH-Sitzung. 19.535 und 17.736 schließlich ließen sich in „EHLO" übersetzen, einen Befehl, mit dem alle ESMTP-Sitzungen (Extended SMTP) beginnen. Warum aber diese Art von Datenverkehr so plötzlich auftauchte, blieb uns zunächst schleierhaft. Und warum kamen die Daten nur aus diesem einen Netzwerk? Warum schließlich führte diese Form der Paketverstümmelung nicht zu Konnektivitätsproblemen oder anderen Unannehmlichkeiten für den Benutzer, sofern irgendein Netzwerkgerät sie tatsächlich erzeugt hatte? Die Antwort sollte bald folgen. Wie sich herausstellte, stammte der gesamte beobachtete Datenverkehr von Nortel CVX-Geräten. Dieses Modemzugangssystem hatte der Netzbetreiber unlängst in Betrieb genommen. Das Problern trat nur sporadisch auf, wenn die Systembelastung sehr hoch war. Infolgedessen wurde nur ein kleiner Anteil unvollständiger Pakete gesendet, und nur diese kleine Zahl erreichte auch die Empfönger (zu deren äußerster Überraschung). Wahrscheinlichste Ursache war eine untaugliche Warteschlangen- sperrung oder Pufferverwaltung - ein Roblern, welches nur auffiel, wenn zahlreiche Sitzungen annähernd gleichzeitig verarbeitet wurden. In solchen Fällen schienen bestimmte Pakete zu früh - während sie noch zusammengesetzt wurden - gesendet worden zu sein, oder die Implementiemng hatte sie auf andere Weise verstümmelt. Die Telekornunikacja Polska korrigierte ihre TCP/IP-Implementiemng sehr bald nach der Inbetriebnahme in Polen, und alle lebten glücklich und zufrieden bis an ihr Ende. Aber wie Sie sich vorstellen können, waren dies weder die ersten noch die letzten, die versehentlich einen eindeutigen Fingerabdruck ihrer Systeme in den versandten Paketen hinterließen. Die Moral der Geschichte besteht darin, dass es immer wieder naiv ist, außer Acht zu lassen, was wir normalerweise ignorieren. In der Welt der modernen Netzwerktechnik sind subtile Andeutungen und ungewöhnliche oder unerwartete und unerklärliche Beobachtungen von größtem Wert. Sie sind leicht zu finden, aber schwierig zu analysieren. 213
11 Anomalien erkennen und nutzen Vielleicht sind die verschiedenen Methoden, die zur Abwehr des Betriebssystern- Fingeipiintings eingesetzt werden, Denkanstoß genug und ein Feld für weitere Forschungen. Verschiedene Anbieter von Firewalls haben versucht, Maßnahmen gegen das Fin- gerprinting zu implementieren, die ein paar Paketeigenschaften durch Umgestalten diverser TCP/IP-Parameter (wie etwa IP-Kennungen, TCP-Sequenznummem usw.) verändern. Selbstverständlich hilft eine solche Lösung in erster Linie dem Angieifer, denn sie erzeugt ein Ergebnis, das in etwa das Gegenteil von dem ist, wofür sie gedacht war: Sofern nicht alle Eigenschaften, die für das Fingerprinting anfällig sind (einschließlich Sequenznum- rnem, Neuübertragungsintervalle, Zeitstempelwert usw.), geändert und homogenisiert werden, ist es nicht nur möglich, das zugrundehegende Betriebssystem zu erkennen, sondern auch die Firewall, die für den Schutz des Netzwerks vorgesehen ist. C'est la vie. 214
12 Löcher im Datenstapel Zwölftes Kapitel. In welchem wir uns eine weitere kleine Geschichte zu der Frage zu Gemüte führen, wo man findet, was eigentlich überhaupt nicht verschickt werden sollte Manchmal braucht man, um subtile, aber faszinierende und nützliche Anhaltspunkte zu seinen vernetzten Mitbürgern und ihren Standorten zu finden, lediglich ein bisschen Glück Zumindest war dies der Fall bei einem ziemlich interessanten und extrem schwierig zu fassenden Datenenthüllungsvektor, den ich im Jahre 2003 - nach einer mehrere Wochen dauernden, entmutigenden Jagd - doch noch entdeckte. 12.1 Kristjans Server Doch der Reihe nach. Vor mehieren Jahren bat ich einen Freund von mir namens Kristjan darum, rnir ein wenig Festplattenspeicher auf einem seiner Computer zur Verfügung zu stellen, um eine Anzahl von Projekten auf einem zuverlässigen und schnellen System ablegen zu können. Er kam meiner Bitte nach, und bald darauf begann ich, nach und nach fast alle meine Programme und Arbeiten in ihr neues Heim zu verschieben. Unter den Projekten, die ich übertrug, war auch eine neue Version von pOf, meinem bereits in Kapitel 9 erwähnten Tool für das passive Fingerprinting von Betriebssystemen. Dieses bescheidene Werkzeug implementierte einige interessante passive Analysetechniken; um aber wirklich leistungsfähig zu sein, musste es mit einer umfassenden und aktuellen Datenbank mit Be- triebssystemsignaturen ausgeliefert werden. Die Pflege dieser Datenbank gestaltete sich schwierig, und schon bald hatte ich keine obskuren Systeme rnehr zur Verfügung, deren Signaturen ich hätte hinzufügen können. Während aber das Sammeln von Signaturen für eine Software, die aktives Fingerprinting ermöglicht, häufig eine zumindest bedenkliche Interaktion mit dem Zielsystem erfordert (die auch Streitigkeiten schulen, die Netzwerkanbindung belasten und manchmal sogar 215
12 Löcher im Datenstapel schlecht implementierte TCP/EP-Stapel zum Absturz bringen kann), braucht das passive Fingerprinting keine derartige Vorgehensweise: Es konnte problemlos bei allen Betriebssystemen durchgeführt werden, die Verbindungen mit Kristjans Anlage herstellten, um meine Seite zu lesen. Um Benutzer anzuspornen, mir ihre Angaben zu übermitteln, richtete ich eine Unterseite ein, auf der jeder Benutzer sofort sein Fingeipiinting-Profil betrachten, die Angaben zu seinem System korrigieren oder eine neue Signatur hinzufügen konnte. Diese Seite erwies sich als hervorragende Möglichkeit zur Sammlung von Signaturen und zur Optimierung der Software. Aber die Geschichte geht noch weiter. In einer merkwürdigen Wendung der Dinge beschloss Kristjan, sein System als Host für eine andere, kommerzielle Site zu vermieten, damit es sich selbst finanziell tagen würde. Edle Aktivitäten wie der Gartenbau oder die Optimierung der Netzwerksicherheit waren, wie Sie sich sicher vorstellen können, nicht Gegenstand dieser Site. Nein, es ging vielmehr um die weniger renommierten, vielleicht aber zugkräftigeren Aspekte unseres Lebens: Sex, Nacktheit und alles, so dazugehört. Ich war hocherfreut, wie es wohl jeder Neid mit ein bisschen Selbstachtung gewesen wäre - selbstverständlich nicht wegen der angebotenen Inhalte, sondern weil innerhalb weniger Stunden Millionen von Verbindungssignaturen wie Manna vom Himmel fielen, die von der von mir entwickelten Software analysiert werden wollten. Halleluja! 12.2 Erstaunliche Erkenntnisse Vorsicht ist die Mutter der Porzellankiste: Als ich neuen Code für pOf entwarf, beschloss ich, eine Anzahl von Plausibüitätspilifungen zu implementieren, um auch die absonderlichsten, unwahrscheinlichsten oder haarsträubendesten Muster im eingehenden Datenverkehr zu erkennen. Diese Checks deckten alle möglichen illegalen oder sinnlosen Kombinationen von TCP/IP-Einstellungen ab. Zwar legte der gesunde Menschenverstand nahe, dass ich auf keinerlei Pakete stoßen sollte, bei denen die Parameter auf ungewöhnliche Weise verdreht waren (zumindest nicht bei der Kommunikation mit verbreiteten und insofern gut erprobten Systemen), aber die Implementierung dieser Funktionalität schien doch unproblematisch zu sein. Zudem böte, wenn ein System tatsächlich Pakete schickte, die eine besondere Form der Anornalität an den Tag legten, die Fähigkeit zu ihrer Erkennung eine ausgezeichnete Möglichkeit, dieses Betriebssystem von ähnlich aussehenden Implementierungen zu unterscheiden, die den betreffenden Fehler nicht aufwiesen. Während dieser schönen Monate des gepriesenen Signaturansturrns sah ich die merkwürdigsten Dinge. Am Ende gelang es mir, das eine oder andere davon zu erklären und für pOf zu dokumentieren; andere blieben jedoch ein Geheimnis. Die meisten Anornaliepilifungen, die ich zuvor implementiert hatte, trafen ins Schwarze: Ich stieß geradewegs auf Systeme, deren TCP/IP-Implementierungen in der Tat eine ganze Reihe ungewöhnlicher Eigenarten aufwiesen. Eine Sache aber war besonders verstörend und nur schwer zu glauben, weswegen ich mich entschloss, ihr mehr Beachtung zu schenken. 216
12.2 Erstaunliche Erkenntnisse Zwei der Tests - einer bezüglich des im TCP/IP-Header angegebenen ACK-Wertes bei nicht gesetztem ACK-Flag (eine eher vergebliche Aktion) und ein weiterer, der den URG- Wert bei nicht gesetztem URG-Flag kontrollierte - schienen anfangs relativ bedeutungslos, denn sie fühlten niemals zu interessanten Ergebnissen. Bis ich etwas sehr Seltsames feststellte. Ich fand nämlich heraus, dass einige der Windows 2000- und Windows XP- Systeme, die mit Kristjans Server eine Verbindung herstellten, von Zeit zu Zeit URG- oder ACK-Werte ungleich null in Paketen aufwiesen, bei denen keines der entsprechenden Flags gesetzt war (in erster Linie handelte es sich um SYN-Pakete zum Eröffnen einer neuen Verbindung). Streng genommen sind vorhandene URG- oder ACK-Werte bei nicht gesetztem Flag kein Problem Nach RFC793 verlieren die Werte in diesem Fall lediglich ihre Bedeutung: Dringlichkeitszeiger: 16 Bits Dieses Feld beschreibt den aktuellen Wert des Dringlichkeitszeigers als positiven Offset der Sequenznummer in diesem Segment. Der Dringlichkeitszeiger verweist auf die Sequenznummer des Oktetts, welches den dringenden Daten folgt Dieses Feld wird nur bei Segmenten interpretiert, bei denen das URG-Steuerbit gesetzt ist. Auf seine sehr eigene Alt sagt uns RFC793, dass diese Anomalie mit hoher Wahrscheinlichkeit keine Probleme im Netzwerk verursachen und insofern einfach flu- immer unbemerkt bleiben wird. Ich allerdings bemerkte sie - schlichtweg deswegen, weil sie ein bisschen ungewöhnlich war. Ursprünglich nahm ich an, dass irgendein bestimmtes Netzwerkgerät der Schuldige war - ähnlich wie bei den meisten in Kapitel 11 beschriebenen Roblemen. Aber dies war nicht der Fall. Die Treffer stammten von einzelnen Systemen, nicht von ganzen Netzwerken, und sie waren nicht von Dauer: Sie erschienen lediglich in ein paar Paketen (mit feststehenden oder sich zufällig ändernden Weiten) und verschwanden dann wieder, um bei nachfolgenden Verbindungen niemals rnehr aufzutauchen. Außerdem schien sich das Problem auf Windows zu beschränken: In der Gruppe, die dieses Verhalten an den Tag legte, waren überhaupt keine Minderheitenbetriebs Systeme vertreten. Wochenlang versuchte ich, die Ursache dieses Problems aufzuspulen. Im Zuge meiner Jagd nahm ich einige andere Installationen in kontiolherteren Umgebungen in Betrieb, und zu meinem großen Erstaunen zeigte sich dieses Problem auch hier - sogar in lokalen Netzwerken und von absolut aktuellen Systemen stammend, und auch hier wieder nur kurzzeitig. Auf mein Nachfragen konnten sich die Benutzer nicht erinnern, irgendetwas besonderes gemacht zu haben, als diese Daten auftraten. Ebenso wenig konnte ich irgendeinen speziellen Kommunikationstyp oder Handlungsablauf ermitteln, der sie ausgelöst haben könnte. Es schien einfach kein Muster vorhanden zu sein. Ich war hochgradig verwirrt. 217
12 Löcher im Datenstapel 12.3 Die Offenbarung: Reproduktion eines Phänomens Ich war nahe daran, aufzugeben. Ich sandte meine Beobachtungen an verschiedene öffentliche Mailinglisten (in erster Linie VULN-DEV, eine behebte Security Focus- Diskussionsliste zum Bereich Sicherheitslücken) und bat dort um weitergehende Analyse und Feedback anderer Forscher. Es kam keine Antwort. Und dann - nur durch reines Glück - erwischte ich eine meiner eigenen Teststationen dabei, wie sie bei der Arbeit an einem ganz anderen Problem genau dieses Verhaltensmuster an den Tag legte. Im Hintergrund hatte ich einen Sniffer laufen. (Tun wir doch alle, oder?) Bald hatte ich eine Diagnose: Das Problem trat auf, als die Workstation im Hintergrund eine Datenübertragung oder eine andere Netzwerkoperation duichführte, während sie gleichzeitig versuchte, eine weitere Verbindung herzustellen. Bei fast jedem Betriebssystem wild das Paket, das über die Leitung verschickt werden soll, zunächst im Hauptspeicher des Systems zusammengesetzt. Hierbei kommt entweder ein statischer Puffer - ein fester Speicherbereich, der ausschließlich für diesen Zweck verwendet wird - oder ein dynamischer Puffer zum Einsatz, der nach Bedarf im Speicher reserviert wird und möglicherweise zuvor für einen ganz anderen Zweck eingesetzt wurde. In diesem speziellen Szenario, wenn zwei Verbindungen rnehr oder minder gleichzeitig auftraten, schien der Puffer, der zur Bildung ausgehender Pakete vor ihrer Übergabe an die Netzwerkkalte benutzt wurde, vor der Verwendung nicht ordnungsgemäß initialisiert worden zu sein, d. h. mögliche Rückstände von Inhalten, die von einer vorherigen Verwendung für einen anderen Zweck stammten, wurden nicht bereinigt. Der IrnpleHientierungscode setzt voraus, dass alle Inhalte im Puffer null sind, und kümmert sich deswegen nicht darum Die Inhalte werden mithin nicht auf bestimmte Werte eingestellt, wie es dagegen bei ACK- und URG- Werten der Fall ist, wenn die betreffenden Flags nicht gesetzt sind. Also werden einige „Inhaltsieste" verschickt. Natüihch wuiden alle anderen IP- und TCP-Felder ordnungsgemäß initialisiert; nur URG und ACK wuiden ausgelassen, da sie im betreffenden Kontext keine Bedeutung haben. Diese Auslassung aber hatte zur Folge, dass ein kleiner Teil der Daten, die zu einer anderen Verbindung (oder einem anderen Aspekt des Computerbetriebs) gehörten, an die Gegenseite übermittelt wuiden. Das Problem äußerte sich nur, wenn mehiere Sitzungen liefen (was beim Intemetsurfen, bei Downloads im Hintergrund und ähnlichen Szenarien durchaus normal ist), nicht aber, wenn das System untätig ist. Die Bedeutung der in dieser Situation preisgegebenen Information ist zweifach: ■ Man kann von einem traditionellen Datenoffenlegungsszenario sprechen. Zwar ist der Umfang der Daten, die in jedem Paket ohne ordnungsgemäß initialisierte URG- und ACK-Werte offenbar werden, ziemlich geling, und sie müssen auch nicht aussagekräftig sein (sofern der Puffer nicht zuvor etwas Interessantes enthalten hat), können aber in bestimmten Szenarien von Wert sein. Dies gilt insbesondere, wenn die gleichzeitig laufende Verbindung, die unter Umständen sensible Daten enthält, oder der Bug selbst von einer externen Position induziert werden können. 218
12.4 Denkanstöße ■ Die Sicherheitslücke kann außerdem als praktische Fingeiprinting-Metiik betrachtet werden, die weitere Informationen zum Betriebssystem und den Zustand preisgibt, in dem es sich befindet. Dies stellt eine einfach Möglichkeit dar, zwischen Systemen, die das Netzwerk umfassend nutzen, und solchen zu unterscheiden, die inaktiv sind. Das war es schon. Und auch wenn die Bedeutung dieser Entdeckung möglicherweise leicht überschätzt werden kann, wollte ich sie an dieser Stelle erwähnen, um Sie zu erheitern und Ihnen zu zeigen, wie einfach es sein kann, auch kompliziertere Daten von einer entfernten Gegenstelle zu erhalten, ohne danach zu fragen. 12.4 Denkanstöße Wir würden es uns einfach machen, würden wir die gesamte Schuld hierfür den Entwicklern zuweisen. Zwar sind diese natürlich dafür verantwortlich, dass der Speicher nicht ordnungsgemäß initialisiert wurde, aber die Idee der Implementierung eines „Einschalten" für ein Header-Feld ist vielleicht eher ein struktureller Fehler im TCP-Protokoll selbst und kann zu diesem Problemtyp beitragen. Ahnliche Feinheiten suchen viele Protokollspezifikationen heim. Wir haben das bereits in Kapitel 7 gesehen, in dem eine ähnliche Sicherheitslücke dadurch verursacht wurde, dass zu nah an der Spezifikation gearbeitet wurde, ohne potenzielle Nebeneffekte zu beachten. 219
13 Schall und Rauch Dreizehntes Kapitel. In dem wir lesen, wie man sich schicklich verbirgt Viele der Datenenthüllungsszenarien, die wir bislang kennen gelernt haben, erfordern eine sorgfältige Analyse der Daten, die ein entferntes System übermittelt, denn nur so kann man gewisse Fakten zum Absender erschließen oder weitere Daten abfangen, über deren Versand sich der Absender überhaupt nicht im Klaren war. In einigen Fällen jedoch lassen sich nur Indizien für das Vorhandensein von Aktivitäten finden. Wie wir in den Kapiteln 1 und 2 erfahren haben, kann man durch präzise Interpretation dieser Indizien die wahlscheinlichen Umstände eines Benutzers oder einer Anwendung, die sensible Daten verarbeitet, bestimmen und auf diese Weise die Geheimnisse des Opfercornputers enttarnen, ohne direkten Zugriff auf die Daten selbst zu benötigen. Einige Merkmale des IP-Protokolls machen viele seiner Implementierungen anfällig für Sicherheitslücken, die Daten aufgrund von Indizien preisgeben. Dies ähnelt in hohem Maße dem, was wir bereits von bestimmten PRNG-Typen oder Datenverarbeitungsalgorith- men variabler Komplexität her kennen. Das sorgfältige Beobachten und nachfolgende Entschlüsseln dieser Informationen kann von Vorteil sein, denn es gewährt uns zumindest den erforderlichen Einblick in die allgemeinen Gewohnheiten unseres Gegenübers oder auch in eine bestimmte Handlung, an der er beteiligt ist. Bislang haben wir uns in diesem Teil des Buchs auf Angriffe in der IP-Schicht konzentriert, die eine direkte Beobachtung des vom Absender kommenden Datenverkehrs erfordern, obwohl andererseits eine direkte Interaktion mit dem Opfer nicht notwendig ist. In diesem Kapitel jedoch werden wir eine überraschend aktive, aber indirekte IP-basierte Attacke behandeln, bei der der Angreifer ein Profil seines Opfers erstellt, indem er eine begründete Annahme zu Faktoren trifft, die ihm verborgen sind. Dies tut er, indem er mit einem unschuldigen Außenstehenden interagiert, der nicht der eigentliche Gegenstand der Überprüfung ist und dieser auch nicht zugestimmt hat; er weiß noch nicht einmal etwas davon. Auf diese Weise erfahrt der Angreifer, was er mit dem eigentlichen Opfer alles machen kann. 221
13 Schall und Rauch Daten auf eine solche Weise zu ermitteln, klingt nicht ganz einfach. Aber warum sollen wir im Geiste der Freaktums nicht den wohl etwas längeren, aber sicher auch ansprechenderen Weg nehmen und uns diesen etwas genauer ansehen? 13.1 Der Missbrauch von IP, oder: Port-Scanning für Fortgeschrittene Schurkische Internetbenutzer verwenden das Port-Scanning häufig für angriffsvorbereitende Reconnaissance und Betriebssystern-Fingerprinting. Beim Port-Scanning versucht der Angreifer in spe, eine kurze Verbindung zu jedem Port eines Systems herzustellen und daraus alle Programme zu ermitteln, die auf Datenverkehr im Netzwerk horchen. Auf diese Weise kann er bestimmen, an welcher Stelle er angreifen kann, denn er findet so jeden anfälligen oder auf andere Weise interessanten Netzwerkdienst im System. Außerdem kann er in vielen Fällen ermitteln, welches Betriebssystem das Opfer verwendet, denn Standarddienste sind häufig betriebssystemspezifisch. Das erste Problem beim traditionellen Scanning besteht darin, dass man dabei eine ganze Menge Lärm veranstaltet: Das Opfer wird einen Anstunn oder sogar einen konstanten Strorn von Verbindungsversuchen mit ungewöhnlichen Ports feststellen. Sich zu verbergen, ist aber auch nicht einfach: Der Angreifer niuss schließlich in der Lage sein, die Antworten auf seine SYN-Pakete zu verarbeiten, denn nur so kann er ermitteln, ob ein Port offen oder zu ist. Offene Ports antworten mit SYN+ACK-Paketen, geschlossene mit RST- Paketen, und Ports, die von einer Firewall ausgefiltert wurden, erzeugen entweder gar keine oder aber eine ICMP-Meldung. Aus diesem Grund kann der Angreifer nicht einfach eine Absenderadresse in allen ausgehenden Paketen iälschen; er rnuss seine Identität durch Angabe der Absenderadresse preisgeben, welche dann in das Netzwerk zurückverweist, in dem er auf eingehende Daten lauscht. 13.1.1 Eins, zwei, drei, vier, Eckstein ... Unabhängig davon, ob die Gegenseite nur aus Neugier Scans durchführt (um beispielsweise zu ermitteln, mit welchem Betiiebssystem ein Mitbewerber arbeitet) oder dem Scan einen Angriffsversuch folgen lässt, wird sie immer versuchen, möglichst wenig Spuren zu hinterlassen und das Opfer nicht aufzuscheuchen. Netzwerkadministratoren und bestimmte Behörden haben gegenüber Host- und Netzwerk-Scans eine ziemlich negative Einstellung. Obwohl die Diskussion darüber, ob diese Scans als kriminell einzustufen sind oder nicht, noch nicht abgeschlossen ist, kommt es, wenn ein verärgerter Systeinadiiiinistrator Anzeige erstattet oder Ihr Mitbewerber feststellt, dass einer Ihrer Mitarbeiter versucht, das Konkurrentennetzwerk zu sondieren, fast immer zu einer Verurteilung - unabhängig von den wählen Absichten und den weiteren Plänen des wissbegierigen Zeitgenossen. Eine gängige Alt und Weise, Port-Scans zu tarnen, besteht in der Verwendung von Täusch-Scans, bei denen der Angreifer SYN-Pakete von einer Anzahl gefälschter Adressen 222
13.1 Der Missbrauch von IP, oder: Port-Scanning für Fortgeschrittene sowie von seiner eigenen IP-Adresse an die einzelnen Ports schickt. Das Opfer verfahrt mit diesen gemischten Paketen ebenso wie mit den echten, nur werden die Antworten auf ers- tere natürlich in die Leere hinausgeschickt. Insofern hat das Opfer es wesentlich schwerer, zu ermitteln, wer wirkhch hinter dem Scan steckt, denn es müssen - mithilfe sorgfältiger Analyse oder über ein simples Trial-and-Enor-Verfahren - alle Täuschsysteme aus der Liste der Paketquellen entfernt werden. Und tiotzdem ist es mit einiger Entschlossenheit möglich, den Absender ohne Hilfe der Behörden zu ermitteln, auch wenn der Angreifer hofft, das Opfer dadurch zu entmutigen, dass der Aufwand, einen solchen unbedeutenden Vorfell vollständig zu klären, einfach zu hoch ist. 13.1.2 Idle-Scanning Die ultimative Verteidigungsmaßnahme gegen eine Enthüllung kam - wie so oft - von einem Typen, der zuviel Zeit hatte und diese damit verschwendete, Protokollspezifikationen zu lesen, statt etwas Produktives zu leisten. Und so entstand eine neue Technik namens Idle-Scanning. Ursprünglich entwickelt von Salvatore Sanfilippo (alias „antirez") im Jahr 19981, wurde das Idle-Scanning sehr schnell flächendeckend eingesetzt und in Hackerkreisen (den neugierigen wie auch den üblen) ziemlich schnell sehr populär. Das Idle-Scanning basiert auf einer bedeutenden Beobachtung. Wh wollen an dieser Stelle RFC793 zitieren: Reset-Pakete (RST) müssen generell immer dann gesendet werden, wenn ein Segment empfangen wird, dass offensichtlich nicht für die aktuelle Verbindung vorgesehen ist. Nicht gesendet werden darfein Reset, wenn nicht ganz klar ist, ob dies der Fall ist. TCP-konforme RST-Pakete werden verwendet, um eine Verbindung vorbehaltlos zu beenden und dem Absender mitzuteilen, dass er von weiteren Kornmunikationsversuchen Abstand nehmen möge. Das System sendet im Sinne von RFC793 ohne Zögern ein RST- Paket, wenn unerwartete Daten empfangen werden. (Natürlich werden RST-Pakete selbst dann, wenn sie unerwartet kommen, nicht beantwortet; andernfalls würde bei der leichtesten Verstimmung sofort ein endloser Stiom von RST-Paketen in beide Richtungen durch das Netzwerk rauschen.) Das Idle-Scanning basiert auf der Tatsache (und missbraucht diese auf clevere Art und Weise), dass ein Außenstehender, ein Zeugenhost, mit allen unerwarteten Paketen auf diese Weise verfehlt Die Attacke ermöglicht feindlich gesonnenen Netizens das Scannen eines Opfers, mit dem sie nicht direkt kormnunizieren wollen. Beim Idle-Scanning verwendet der Angreifer ein argloses und willkürlich ausgewähltes System im Internet, um ein drittes System - das eigentliche Opfer - zu scannen, ohne dass seine Identität jemals enthüllt würde. Idle-Scanning funktioniert wie folgt: Der Angreifer fälscht ein SYN-Paket an einen Port, den er auf dem System des Opfers überprüfen will. Dieses Paket ist an den Host des Op- Sanfi>8 223
13 Schall und Rauch fers adressiert, die Absenderadresse ist jedoch nicht die des Angreifers, sondern die des Zeugenhosts. Das mag nicht unbedingt so klingen, als ob man auf diese Weise irgendetwas bewerkstelligen könnte. Aber warten Sie noch einen Moment ab. Was als nächstes passiert, hängt davon ab, ob der Port offen ist: ■ Wenn der sondierte Port des Opfers ein RST-Paket an den Zeugenhost zurückschickt, erhält dieser es und nimmt es still zur Kenntnis, ohne eine Antwort an das Opfer zurückzuschicken. ■ Ist der Port offen, dann antwortet das Opfer mit SYN+ACK. Der Zeuge stellt zu seinem größten Erstaunen fest, dass er niemals ein SYN-Paket an das Opfer geschickt hat. Insofern übermittelt er dem Opfer ein RST-Paket, mit dem er ihm freundlicherweise mitteilt, dass er auf dem falschen Dampfer sei und sie die Kommunikation nun wohl besser' beenden sollten. Kleinlaut nimmt das Opfer die Antwort entgegen und löscht alle Einträge für die Verbindung, die es anzunehmen können hoffte. Auf den ersten Blick ist der Unterschied schwer zu erfassen. Aber wenn wir noch einmal in Kapitel 9 nachblättern, dann finden wir dort die folgenden Angaben zu einem der Felder im IP-Header: Die Kemnmg (ID) ist ein 16-Bit-Wert, der bei Auftreten einer Fragmentierung die Unterscheidung zwischen IP-Paketen gestattet Ohne IP-Kennungen würden, wenn zwei Pakete gleichzeitig fragmentiert würden, deren Fragmente bei der Wiederherstellung hochgradig verstümmelt, vertauscht oder auf andere Weise beschädigt werden. IP-Kennungen identifizieren mehrere Wiederherstellungspuffer für verschiedene Pakete eindeutig. Der für diesen Zweck verwendete Wert wird oft ausgewählt, indem ein Zähler mit jedem gesendeten Paket einfach hochgezählt wird. So hat das erste von einem System stammende Paket die Kennung 0, das zweite die Kennung 1 usw. Weil der Angreifer einen Zeugenhost gewählt hat, der tatsächlich dieses Schema zur Auswahl der IP-Kennung verwendet (und es gibt viele hierfür' in Frage kommende Schemata), kann er nun problemlos bestimmen, ob der Zeugenhost ein IP-Paket innerhalb eines bestimmten Zeitraums gesendet hat oder nicht. Hierzu sendet er einfach vor und nach der eigentlichen Sondierung ein paar' bedeutungslose Daten an das Zeugensystem und vergleicht die IP-Kennungswerte in den erhaltenen Antworten. Wenn die beiden Kennungen sich nur' um den Wert 1 unterscheiden, dann hat das Zeugensystem zwischenzeitlich keine Pakete versendet. Ist der Unterschied aber größer als 1, dann wurden tatsächlich ein paar' Pakete ausgetauscht (auch wenn wir nicht genau wissen, mit wem). Der Angreifer kann auch jeweils unmittelbar vor dem Versand eines gefälschten Paketes und direkt danach eine Robe an das Opfer senden. Auf diese Weise kann er basierend auf den Antworten des Zeugenhosts ermitteln, ob ein Port geöffnet oder geschlossen ist. Wurde die IP-Kennung des Zeugen erhöht, dann hat er höchstwahrscheinüch ein RST-Paket an das Opfer gesendet, d. h. das Opfer selbst muss zuvor ein SYN+ACK-Paket als Reaktion auf das gefälschte Paket geschickt haben. Daraus kann der Angreifer schließen, dass der Port offen ist. Wenn andererseits der Zeuge die nächste erwartete IP-Kennung erzeugt, 224
13.2 Idle-Scanning abwehren dann hat er keine Daten vorn Opfer erhalten oder aber entschieden, die erhaltenen RST- Pakete zu ignorieren. Es gibt natürlich einige praktische Gesichtspunkte. Als wichtigste hiervon sind zu nennen, dass der Zeuge während des Scans relativ untätig sein sollte, und dass der Test mehrfach durchgeführt werden rnuss, um falsche Positivwerte zu vermeiden, denn andernfalls könnten wir die Kornmunikation des Zeugen mit einem Dritten als Hinweis darauf interpretieren, dass ein bestimmter Port auf dem System des Opfers geöffnet ist. ■ Hinweis Keines dieser Probleme hat sich jedoch als schwerwiegend erwiesen, und viele fortgeschrittene Tools — beginnend mit idlescan im Jahr 1999 bis hin zum genialen NMAP — implementieren das Idle-Scanning und machen ihre Sache gut. Die Bedeutung des Idle-Scannings besteht darin, dass es den Ursprung eines Scans nicht einfach dadurch zu verschleiern versucht, das Opfer zu entmutigen, sondern dadurch, die gesamte identifizierbare Kornmunikation mit dem Angreifer zu unterbinden. Dies erschwert die Ortung des Angreifers ohne die Hilfe des Besitzers eines Zeugensystems (dessen IP-Kennungen der Angreifer im Zuge zulässigen Datenaustauschs wie beispielsweise einer HTTP-Sitzung völlig legitim feststellen kann, weswegen schwierig festzustellen ist, ob es als Werkzeug missbraucht wurde) oder externer Institutionen (Behörden, Intemet- provider) erheblich. Da die Behörden normal normalerweise erst eingreifen, wenn das System bereits geknackt (und nicht nur sondiert) wurde - der neugierige Konkurrent kann also ruhig schlafen -, und das Opfer erst einmal zugeben muss, dass ein Eindringen stattgefunden hat (was gerade für große Unternehmen nicht sehr angenehm ist), kann sich der Angreifer ziemlich sicher fühlen. ■ Hinweis Zwar scheint sich das Idle-Scanning hinsichtlich der erzielbaren Ergebnisse nicht deutlich von einem regulären SYN-Scan zu unterscheiden, es bietet aber eine recht einmalige Scanning- Perspektive. Die Verwendung eines Zeugen erlaubt es dem Angreifer, das Ziel aus der Sicht des Zeugen zu betrachten. Hat der Zeuge beispielsweise umfassendere Zugriffsberechtigungen für das System des Opfers (z. B. ein System innerhalb eines geschützten Netzwerks hinter einer Firewall, ein Computer, für den aus Gründen des praktischeren Zugriffs im Finnennerz- werk nachlässigere IP-Filterregeln konfiguriert sind usw.), dann können Sie mithilfe des Idle- Scannings die inneren Abläufe des geschützten Netzwerks ermitteln. 13.2 Idle-Scanning abwehren Gegenwältig gibt es keine direkte Möglichkeit zur Abwehr eines Idle-Scans und auch keine einfache Möglichkeit, ihn von einem regulären SYN-Scan zu unterscheiden. Allerdings kann man sich recht einfach gegen einen Zeugenhost wehren, indem man zufallige oder konstante IP-Kennungen verwendet (siehe Kapitel 9). Zwar verhindert das keine Angriffe 225
13 Schall und Rauch gegen Sie - oder Angriffe generell-, denn viele Systeme arbeiten mit fortlaufenden Kennungen; immerhin aber kann Ihr Netzwerk dann nicht rnehr für diesen Zweck missbraucht werden. Um das Umgehen der Firewall durch Übernahme der Perspektive des Zeugenhosts zu vermeiden, verwenden Sie beim Planen von Zugangskanälen für externe Systeme Ihren gesunden Menschenverstand und setzen angemessene Filter für eingehende Daten bei Gateway-Systemen ein: Alle Pakete, die aus dem Internet kommen und eine Absenderadresse aufweisen, die zu einem geschützten Netzwerk gehört, sollten sofort gelöscht werden. Zwar werden hierdurch wie bereits erwähnt die Mechanismen der PMTU-Erkennung ausgehebelt, aber letztendlich werden so mehr Probleme beseitigt als verursacht. 13.3 Denkanstöße Es ist zwar nicht mehr so einfach, aber nach wie vor möglich, IP-Kennungen für die Erstellung von iP-Aktivitätsprofilen zu verwenden. Tatsächlich können, wenn das Opfer eine interaktive Sitzung mit einem Remote-System herstellt, IP-Kennungen sogar verwendet werden, um Tastaturaktivitäten und ähnliche Handlungen zeitbezogen zu registrieren. Aufgrund dessen wird diese Methode zu einem der bereits beschriebenen Szenarien für Ab- laufinusterangriffe. Zudem können Sie Ihr Folterarsenal erweitern, indem Sie die Anzahl der Pakete messen, die von einem Host zwischen zwei aufeinanderfolgenden Besuchen im überwachten Netzwerk gesendet wurden. Sie können auf bestimmten Systemen abhängig von der Struktur des verwendeten ISN- Generators dieselbe Funktionalität auch mithilfe von TCP-Sequenznummem als IP- Kennungsanalyse erzielen. Ich möchte Sie ermutigen, diese Idee im Detail zu erforschen. Weitere Infonnationen zur Jagd auf den Urheber eines Idle-Scans (und anderer gefälschter Angriffe) finden Sie in Kapitel 17. 226
14 Clientidentifikation: Die Ausweise, bitte! Vierzehntes Kapitel. In dem wir erfahren, dass es in vielen Situationen ungemein praktisch sein kann, durch einen dünnen Schleier zu schauen Die echte Identität einer Software und ihre Rechtmäßigkeit zu bestimmen, ist im lokalen Netzwerk keine große Herausfordenmg: Man kontrolliert einfach den Computer, auf dem die Software ausgefühlt wird. Über das Netzwerk ist diese Aufgabe allerdings nicht mehr so einfach zu lösen. Systernadrninisrratoren und Anwendungsentwickler versuchen häufig, zu bestimmen, welche Software am anderen Ende einer netzwerkbasierten Sitzung eingesetzt wird. Die Erfolgsquote variiert Wir versuchen aus verschiedenen Giiinden, Softwareanwendungen zu identifizieren. Im World Wide Web (WWW) besteht das Ziel normalerweise darin, die Inhalte, die einem Client übermittelt werden, basierend auf der von ihm verwendeten Dar- stellungs-Engjne zu optimieren. Dabei spielt es keine Rolle, ob die Inhalte zulässig oder bösartig sind. Das Ziel bei der Clienterkennung besteht in vielen anderen Kornmunika- tionsSystemen - Instant-Messengers, Mailclients usw. - darin, die Richtlinienkonforrnität zu gewährleisten und Daten zu erkennen, die von möglicherweise gefährlichen oder anderweitig unzulässigen Anwendungen stammen. Nicht zuletzt versuchen die Programmierer selbst, Software zu identifizieren, um zu verhindern, dass unzulässige oder unlizenzier- te Programme einen bestimmten Netzwerkdienst verwenden (weil dies ihr Einkommen schmälern würde), oder derartige Fälle zu ermitteln und entsprechende Maßnahmen durch- zirführen. Die einfachste und rneistverwendete Möghchkeit, den Gegenüber zu identifizieren, besteht in der Überprüfung von Angaben, die das entfernte System freiwillig offenbart. Hierzu kann die Kenntnisnahme einer vom Server übennittelten Willkonimensmeldung ebenso gehören wie ein Blick auf die von einem Client gesendeten Protokoll-Header (z. B. X- Maüer in E-Mails, User-Agent bei WWW-Sitzungen usw.) oder die Analyse textbasierter 227
14 Clientidentifikation: Die Ausweise, bitte! Status- und Fehlermeldungen, die vom Dienst als Reaktion auf bestimmte empfangene Datenarten gesendet werden.1 Unglücklicherweise ist die erste Methode extrem unzuverlässig und lässt sich von Benutzern, die etwas zu verbergen haben, leicht unterlaufen; die zweite Methode hingegen ist aufdringlich und bei Clients recht schwierig einzusetzen, ohne Probleme zu verursachen. (Die meisten Clientanwendungen brechen beim Auftreten der ersten Fehlerbedingung ab und beschweren sich; Benutzer, die infolge eines Versuchs, ihre Software zu ermitteln, eine Fehlenneldung erhalten und trotz Genehmigung nicht auf einen Dienst zugreifen können, werden alles andere als begeistert sein.) 14.1 Die Kunst der Tarnung Die Untersuchung textbasierter Bekanntmachungen, die vom Chent erstellt wuiden, ist nicht nur deswegen unzuverlässig, weil Benutzer ihre Intemetsoftware (Webbrowser, Mailclients usw.) verschleiern können, sodass die Antworten der meisten verbreiteten Clients nachgebildet werden, sondern weil sie häufig guten Grund haben, dies zu tun - entweder, um in der Menge zu verschwinden, oder um Server übers Ohr zu hauen, die dazu neigen, besser zu wissen, welche Version eines Programms der Besucher verwenden sollte. Dies ist einfach zu bewerkstelligen, indem man die im Chent implementierte entsprechende Funktionalität verwendet oder Quellcode bzw. Binärdateien mithilfe einer Vielzahl frei verfügbarer Tools modifiziert. Femer haben, weil in vielen Untemehmensumgebungen zwecks Aussperrung unerwünschter Inhalte damit begonnen wurde, rigorosere Inhaltsfilter zu implementieren, einige Programmierer, die sich mit eher fragwürdigen Anwendungen beschäftigen, ihrerseits damit begonnen, diese als harmlose Software zu tarnen. Vor nicht allzu langer Zeit tauchten die ersten P2P-basierten Musiktauschbörsen, trojanischen Pferde und Spywareanwendungen auf, deren ausgehende Daten vorgaben, vom marktbeherrschenden Webbrowser - dem Microsoft Internet Explorer - zu stammen. Gleiches galt für viele Adressen sammelnde Webcrawler, die von arglistigen Werbeagenturen in aller Welt eingesetzt werden. Auch andere Protokolle werden von Nachahmern geplagt. So ist es keine Überraschung, dass die vielgeschmähten, Massen-E-Mails sendenden Anwendungen, die von Sparnrnern und Bauernfängern eingesetzt werden, sich mehrheitlich als Microsoft Outlook, PINE, Mutt, Eudora, The Bat! oder Netscape Mail ausweisen. Zweck der Verschleierung ist es, sich ungesehen an Administratoren vorbeizuschleichen, die, wenn sie auf das Vorhandensein der Software aufmerksam würden, sehr schnell eine Möglichkeit fänden, sie zu blockieren. Kein Spammer, der halbwegs bei Verstand wäre, würde seine E-Mails als von Uncle Bernie's Notorious Mass-Maüer, Extreme Edition stammend ankündigen, denn dann wäre es zu einfach für einen Benutzer oder einen Spamfilter, sich ihrer zu entledigen. Ein beliebtes Tool, das mithilfe des Fingerprintings Antworten analysiert, ist AMAP von THC. Weitere Informationen finden Sie unter http://www.thc.org/releases.php. NMAP von Fyodor identifiziert Dienste durch die Analyse von Willkommensmeldungen 228
14.1 Die Kunst der Tarnung 14.1.1 Wie man das Problem angeht Da es ziemlich einfach ist, die von einem Programm zurückgegebenen Textantworten und WillkoHimensbanner zu modifizieren, müssen wir eine bessere Möglichkeit als den Vergleich von Antworten finden, um eine Clientsoftware mit ausreichender Genauigkeit zu identifizieren und Betragsversuche zu enttarnen. Lösungen, die einfach nach weniger offensichtlichen Parametern oder Antworten suchen, müssen früher oder später scheitern: Zwar ist es in fast allen Fällen möglich, eine Überprüfung zur Erkennung eines bestimmten Typs unerwünschter Software zu entwickeln, aber wo man einen Kopf abschlägt, wachsen drei neue nach. Sehr schnell wird es deswegen unmöglich, jede einzelne Inkarnation bösartiger Software zu erledigen. In manchen Fällen lässt sich eine allgemeine Erkennung bösartiger Clients realisieren, indem man einfach nach Mustern sucht, die den Missbrauchstyp, den wir abzuwenden versuchen, eindeutig verraten: Der Unterschied zwischen einem ganz normalen Mailclient und der Software eines Spammers besteht darin, dass ersterer wohl kaum versuchen wird, zehn Millionen Mails auf einmal abzusetzen. Allerdings ist dieser Ansatz eingeschränkt: Bei einigen Protokollen und ein paar klar definierten Angriffen kann dies einwandfrei funktionieren; Datenverkehr im WWW ist eine andere Geschichte, und es ist schwierig, ins Schwarze zu treffen, ohne am Ende mit einer gigantischen Anzahl von Fehlalarmen einerseits und zahlreichen entgangenen Programmen andererseits dazustehen. Da das WWW als Kern aller für Endbenutzer verfügbaren Intemetdienste wahrgenommen wird, ist es eines der wenigen Protokolle, die einfach allen offen stehen müssen. Insofern wird Webdatenverkehr von impertinenten Anwendungen am häufigsten zur Maskierung ihres Verhaltens in einem System und der Daten verwendet, die sie an einen Remote-Host übeitragen. Es ist nicht ungewöhnlich, wenn Webbrowser Massen von Verbindungen zu verschiedenen Standorten herzustellen versuchen oder mehrere tausend Anfragen pro Stunde absetzen. Gleichzeitig ist es aber auch nicht unmöglich, sensible Daten an einen Remote-Host im Rahmen einer einzigen, kurzen Verbindung zu übennitteln. An dieser Stelle kommen wir mit der Erstellung von Datenverkehrsprofilen nicht weiter. 14.1.2 Wie die Lösung aussehen könnte Angesichts all dieser Aspekte könnte man den Eindruck gewinnen, es sei extrem schwierig, eine Spyware oder ein trojanisches Pferd von einer legitimen Anwendung zu unterscheiden. Allerdings gibt es, wie sich herausstellt, eine Reihe guter Tools, mit denen sich genau diese Alten von Software identifizieren lassen. Dem Interessierten eröffnen sich so Möglichkeiten, Clientanwendungen präzise erkennen zu können. Der vielversprechendste und universellste Ansatz ist die Verhaltensanalyse (eine etwas übertriebene Bezeichnung für alte und verstaubte „Ablaufhiuster"). statt den Datenaustausch im Rahmen einer einzelnen Abfrage zu überprüfen oder die Menge der Verbindungen über die Zeit zu kontrollieren, analysiert sie subtile interne Abhängigkeiten zwischen aufeinanderfolgenden Datenabschnitten. Da diese Abhängigkeiten eng mit internen Algorithmen und der Leistung eines Programms verknüpft sind, sind sie wesentlich schwieriger zu fiüschen als die lrieis- 229
14 Clientidentifikation: Die Ausweise, bitte! ten anderen Metriken, die wir in Betracht ziehen könnten. Ich werde diesen Ansatz in diesem Kapitel behandeln und eine Analysegrundausrüstung vorschlagen, mit deren Hilfe sich ein ausreichendes Maß an Genauigkeit und Detailtreue erzielen lässt. Dabei soll uns der Datenverkehr im WWW als geeignetes Beispiel dienen. Bevor wir uns aber den Einzelheiten zuwenden, benötigen wir ein paar Hintergnmdinfor- rnationen. Wir werden also einen kurzen Blick auf die Geschichte des World Wide Web, den Aufbau von Webclients und die Protokolle werfen, die diese Clients zur Kommunikation mit Servern verwenden. Alles begann viel früher, als Sie vielleicht annehmen ... 14.2 Eine (ganz) kurze Geschichte des Web Das Konzept des World Wide Web ist gar nicht so schwer zu begreifen: Die Idee dahinter ist die, Benutzem direkten Zugriff auf eine Anzahl von Dokumenten zu gewähren, die gegenseitig aufeinander und auf andere Dokumente verweisen - „verlinkt" sind - und verschiedene Alten von Informationen enthalten. Einfacher geht es kaum. Das Web, wie wir es heute kennen, besteht in erster Linie aus Text mit Metadaten (z. B. Verknüpfungen mit anderen Dateien, Formatierungen, Kommentaren, dynamischen oder interaktiven Elementen). Diese werden häufig durch alle möglichen Alten von Multimediaelementen - Filmen, Musik und verschiedene Anwendungen - ergänzt. Dieser Aufbau entspricht dem Wesen unserer Zeit und stellt ganz neue Methoden zur Kommunikation und Inforrnationssuche bereit. Die Idee des Web ist aber nicht neu. Geboren wurde sie viele Jahre vor der Technologie, die elektronische Dokumente dieser Art erst möglich machte - vielleicht sogar schon lange, bevor man die Möglichkeit solcher elektronischen Dokumente überhaupt ernsthaft in Betracht zog. Laut einer Zeittafel, die das W3C (World Wide Web Consoitium) veröffentlicht hat2, wurde das Konzept von Hyperlinks 1945 erstmals von Vannevar Bush in der Zeitschrift Atlantic Monthly beschrieben.3 Bush war während und nach dem zweiten Weltkrieg Leiter des Office of Scientific Research and Development. Bush schlug einen Apparat namens Memex vor - ein elektromechanisches Benutzergerät, das man tatsächlich als nlihen Vorläufer unserer PDAs betrachten kann. Memex (Memoiy Extender, „Gedächtniserweiterung") bot Speicher für die Dokumente und persönlichen Dateien eines Benutzers und zielte darauf ab, intuitive Mechanismen für den Datenzugriff zu verrnitteln. Ein Merkmal von Memex bestand in seiner Fähigkeit, Verknüpfungen zwischen auf Mikrofilm gespeicherten Dokumenten zu erstellen und diesen auch zu folgen. Aus irgendeinem Grund aber sorgte die Idee eines irrsinnig komplexen mechanischen Geräts auf Mikrofilmbasis seinerzeit nicht für Begeisterung. 2 W3CoA 3 Bush45 230
14.2 Eine (ganz) kurze Geschichte des Web Das Hypertextkonzept tauchte in den nachfolgenden Jahren immer mal wieder auf, und die ersten cornputerbasierten Implementierungen erblickten in den Sechzigern das Licht der Welt. Allerdings waren diese Versuche nicht besonders erfolgreich. Das lag in erster Linie daran, dass die Rechenleistung, die diese Technologie für Benutzer interessant machen konnte, erst viele Jahre später verfügbar sein sollte. Der richtige Zeitpunkt kam dann in den Achtzigern. Nach dem Mikrocornputerboorn und kurz vor dem Frontalangriff der PC-Plattform machte eine Reihe bescheidener Vorschläge beim CERN (Conseil Europeen pour la Recherche Nucleaire, Europäischer Rat für Kernforschung) die Runde. Tim Bemers-Lee, Forscher beim CERN, ist allem Anschein nach offiziell verantwortlich für die Keirnlegung von HTML (HyperText Markup Language). HTML ist ein Satz von Steuerelementen zur Einbettung von Metadaten, Verknüpfungen und Medienressourcen in Textdokumente.4 Der erste Webbrowser ließ nicht lange auf sich waiten. Er lief auf einer damals sehr innovativen und fortgeschrittenen, heute jedoch praktisch unbekannten Cornputerplattform namens NeXT. Der Browser trug den universellen Namen „World Wide Web". Jetzt, wo das Kind einen Namen hatte, war die Revolution nicht mehr aufzuhalten. 1992 reichte Bemers-Lee einen ersten Spezifikationsentwurf für HTTP (HyperText Transfer Protocol) ein.5 HTTP war als Tool zur Kapselung von HTML-Daten und anderen Ressourcen für die Kommunikation zwischen Server und Client vorgesehen. 1993 waren die ersten Webbrowser-Engines verfügbar, und eine Handvoll Webserver boten ihre Inhalte bereits neugierigen Besuchern feil. Natürlich machte HTTP gerade einmal imposante 0,01 Prozent des gesamten Backbone-Datenverkehrs aus, aber der Anteil sollte bald zunehmen! Der erste populäre Webbrowser namens Mosaic wurde am National Center for Supercomputer Applications der University of Illinois entwickelt. Er machte Anleihen bei Bemers- Lees Code, ergänzte aber Unterstützung für nichttextbasierte Inhalte und führte Formulare und viele andere Funktionalitäten ein, die für uns heute völlig normal sind. Der Code von Mosaic wurde später zu Mozilla, woraus dann noch später der Kerncode für den Netscape Navigator werden sollte. (Noch ein bisschen später verzweigte die Entwicklung zum Open-Source-Projekt Mozilla, dessen Codebasis nachfolgend als Grundlage für Folgegenerationen von Netscape Navigator verwendet wurde. Ist doch ganz einfach, oder?) Gleichzeitig verwendete, um die Benutzer noch weiter zu verwirren, ein Unternehmen namens Spyglass Mosaic als Kern eines Browsers, aus dem bald der wichtigste Konkurrent von Netscape werden sollte: der Microsoft Internet Explorer. 1994 wurde dann das W3C eingerichtet. Zweck dieser Institution war es, die weitere Entwicklung des Webs zu beaufsichtigen. Die erste offizielle, stark verbesserte und erweiterte Version des Protokolls wurde 1996 von Bemers-Lee, Roy T. Fielding und Henrik Frystyk vorgestellt. Kurz darauf folgten die Spezifikationen für HTML 3.2. In den folgenden Jah- Uin ehrlich zu sein, ist HTML — der Kern des Webs, vre wir es heute kennen — eigentlich überhaupt keine Neuentwicklung, sondern hat sich eine ganze Menge Anregungen bei SGML (Standard Genera- lized Markup Language, ISO-Standard 8879, 1986) geborgt Bern92 231
14 Clientidentifikation: Die Ausweise, bitte! ren traten immer neuere und umfassendere Versionen von HTTP und HTML auf den Plan, die nun vom W3C verwaltet wurden. Jetzt kennen Sie das Ende der Geschichte. Oder ist es nur ihr Anfang? 14.3 Eine Einführung in HTTP HTTP5 ist ein außerordentlich klar strukturiertes, textbasiertes Protokoll auf der Basis von TCP/EP. Ein Client für dieses Protokoll stellt eine Verbindung mit einem HTTP-fahigen Dienst auf einem entfernten Server her und sendet eine Anfrage, über die er eine bestimmte Ressource beim Server anfordert. Eine HTTP-Anfrage enthält die folgenden Parameter in der ersten Anfragezeile: ■ Methode für den Ressourcenzugriff. Meistens ruft der Chent einfach eine Datei ab. Hierzu verwendet er eine GET-Anfrage. (Es gibt allerdings auch andere Methoden für Aufgaben wie das Versenden von Formulardaten, die Durchführung von Diagnosearbeiten, das Speichern von Daten auf einem Server oder die Ausführung bestimmter Erweiterungen.) ■ TJRI (Universal Resource Identifler, universelle Ressourcenkennung). Dies ist ein Pfad zu einer statischen Datei oder einer dynamischen ausführbaren Datei, die Gegenstand der Anfrage ist. Handelt es sich um eine dynamische ausführbare Datei, dann werden in der URI unter Umständen auch weitere, entsprechend kodierte Parameter an dieses Programm übergeben. ■ Protokollversion. Dies ist die Version des Protokolls, die der Chent unterstützt und verwenden möchte. Der Server kann, wenn er die vom Chent angegebene Version nicht unterstützt, in einer niedrigeren Protokollversion antworten. (Fehlt diese Angabe, dann wird angenommen, dass der Chent HTTP/0.9 verwendet. Dies ist eine frühe und veraltete Version des Protokolls, die wir hier nicht weiter behandeln werden.) Eine HTTP-Anfrage kann etwa so aussehen: GET /show_jplush_toys.cgi?paraml=value&param2=this+is+a+test HTTP/1.1 Host: www.plush-penguins.com User-Agent: Joe's Own Web Client (UnixWare) Accept: text/html, text/piain, audio/wav Accept-Language: pl, en Connection: close Diese Anfrage fordert eine Ressource namens /show_plushJoys.cgi von -www.plush- penguins.com an. Der Erweiterung cgi der Datei entnehmen wir, dass es sich um ein dynamisch ausgeführtes Programm handelt, das mit zwei Parametern (paraml und paraml) aufgerufen wird, die auf das Fragezeichen folgend aufgeführt sind. 6 Fiel99 232
14.3 Eine Einführung in HTTP Der Clientanforderung kann eine Anzahl textbasierter Header folgen, die -jeweils in einer Zeile - zusätzliche Parameter angeben. (In obigem Beispiel ist dies der Fall.) Dies können alle möglichen Angaben sein: vom Feld User-Agent (siehe oben) über die bevorzugte Sprache für die Inhalte - hier Polnisch und Englisch - bis hin zur Angabe eines virtuellen Servers, den der Client referenziert. (Wenn mehrere Domänennamen auf dieselbe IP- Adresse verweisen, kann der Server anhand dieser Angabe bestimmen, ob der Benutzer nach www.squeaky-ducks.com oder nach www.plush-penguins.com sucht, die beide auf demselben System hegen könnten.) Das Protokoll schreibt einige dieser Header verbindlich vor. Welche dies sind, hängt von der Protokollversion ab, aber die meisten Server sind diesbezüglich ohnehin ziemlich schlampig und machen kein Aufhebens dämm, wenn der eine oder andere Header fehlt. Abgesehen davon spezifizieren einige Header Merkmale, die über die eigentliche Protokollspezifikation hinausgehen. Jede Anfrage muss mit einer Leerzeile enden, die das Ende der Client-Header angibt. An dieser Stelle wird bei den meisten Anfragetypen erwartet, dass der Server die Anfrage verarbeitet und eine Antwort erzeugt. Der Server antwortet meistens mit einer Meldung, deren Struktur der Anfrage ähnelt. Die Meldung beginnt mit einem HTTP-Antwortcode und einer Textbeschreibung in der Alt der folgenden: HTTP/1.0 4 04 Not Found Content-Type: text/piain Server: Uncle Mary's Cookie Recipe Server (Linux and proud of it!) Date: Mon, 09 Feb 2004 19:45:55 GMT The document you are looking for is nowhere to be found. Der Rückgabecode oder die Meldung können verschiedene Umstände beschreiben, z. B. die erfolgreiche Bearbeitung der Anfrage, eine Anweisung an den Browser, doch bitte woanders zu suchen, oder eine Fehlermeldung wie „File Not Found" (Datei kann nicht gefunden werden) oder „Perrnission Denied" (Zugriff mangels Berechtigung verweigert). Diesen Angaben folgen mehrere Header, deren Format dem der Anfrage-Header ähnelt. Sie beschreiben verschiedene Parameter wie die Version der Serversoftware, die Position, an der der Browser fortfahren soll, eine Spezifizierung des rnhaltstyps der zurückgegebenen Datei, eine Angabe zur Unterscheidung von Bildern von Klartext oder von HTML- Dokumenten von Binärdateien usw. Sofern vorhanden, folgen darauf die eigentlichen Inhalte. Wie Sie sehen, ist HTTP eigentlich recht einfach gestrickt. Zwar bietet es einige erweiterte Funktionalitäten, aber die meisten davon sind recht sonderbar oder werden schlichtweg selten eingesetzt. (Ich nehme beispielsweise an, dass Sie nicht täglich über die Fehlermeldung „402 Payment Required" stolpern.) Allerdings wäre es trotzdem naiv, wenn man annähme, dass dieses einfache Protokoll die Bedürfnisse und Erwartungen heutiger Benutzer erfüllen könnte. 233
14 Clientidentifikation: Die Ausweise, bitte! 14.4 Wie HTTP besser wird Die Tage, als eine nonnale Website aus mehreren Kilobyte statischen Texts und einigen kleinen Grafikelementen (wenn überhaupt) bestanden, sind lange gezählt. Als Computer leistungsfähiger wurden und man ein 300-Bit/s-Modem nicht mehr in jedem Haushalt, sondern nur noch im Museum fand, begann im Web die Zeit, in der die äußere Form den Inhalt dominierte. Hunderte Kbyte Bilder und Unterseiten, Frames und clientseitige Skripten werden heute eingesetzt, um Sites attraktiver und professioneller wirken zu lassen (was nicht immer gelingt). Bei vielen Sites sind Multimediainhalte inzwischen der wichtigste angebotene Datentyp: HTML stellt nur mehr Platzhalter für Bilder, Filme, eingebettete Java-Programme oder Spiele bereit. Das Web ist heute nicht länger nur eine Möglichkeit, anderen von den eigenen Projekten und Interessen zu erzählen: Die treibende Kraft dahinter ist vielmehr die Möglichkeit, Produkte und Dienstleistungen billiger und schneller als je zuvor zu bewerben und zu verkaufen. Und Werbung verlangt eine auffallende Präsentation von Produkten und Dienstleistungen. Webbrowser, Webserver und HTTP selbst mussten an diese sich ändernde Wirklichkeit angepasst werden, um neue Technologien einsetzen und neuen Trends folgen zu können. Das Praktische dabei ist, dass viele der neuen Technologien für den Normalsterblichen interessante sicherheitstechnische Auswirkungen haben und uns auch dabei helfen können, den Client am anderen Ende der Leitung auf transparente Weise zu identifizieren. Insofern müssen wir uns die optionalen Funktionen und Erweiterungen näher ansehen, die seit dem Tag eingeführt wurden, an dem das Web geboren wurde. 14.4.1 Latenzverringerung per Notnagel Das Problem beim Web und bei einigen anderen aktuellen Protokollen besteht darin, dass die Inhalte, die einem Benutzer auf einer Multimediasite präsentiert werden, bei verschiedenen Quellen (möglicherweise sogar unterschiedlichen Domänen) eingesammelt und dann zusammengesetzt werden müssen. Webseiten trennen die Text- und Forrnatierungs- angaben von den eigentlichen Bildern und anderen größeren Girnmicks. (Dieser Gesichtspunkt wird vor allem von jenen geschätzt, die nur über beschränkte Bandbreite verfügen und schnell auf den Punkt kommen wollen.) Diese Situation macht es für Clients erforderlich, mehrere Anfragen abzusetzen, um aus den Antworten eine Webseite zusammenzubauen. Die naivste Möglichkeit, dies zu erreichen, bestünde darin, jedes einzelne Element separat und nacheinander abzurufen. Allerdings ist dies in der Praxis nicht tunlich, denn so können Engpässe entstehen: Warurn sollte man auf das Laden einer Seite warten müssen, weil der Werbeserver so langsam läuft? Aus diesem Grund setzt der Browser viele Annagen gleichzeitig ab, um das Einsammeln der Inhalte zu beschleunigen. Und genau hierin hegt der erste Nachteil von HTTP: Es bietet keine native Möglichkeit, mehrere gleichzeitige Anfragen zu bearbeiten; diese müssen immer sequenziell abgesetzt werden. 234
14.4 Wie HTTP besser wird Dieses Modell des sequentiellen (oder auch seriellen) Datenabrufs fühlt zu einer beträchtlichen Leistungseinbuße, wann immer eines der Webseitenelemente von einem langsamen Server oder über eine schlechte Leitung geladen werden muss oder der Server eine Zeit lang braucht, um ein bestimmtes Element vorzubereiten und dann auszuliefern. Wäre der sequenzielle Abruf die einzige Option, dann würde eine solche langsame Anfrage das Absetzen und Bearbeiten nachfolgender Anfragen so lange verzögern, bis die Bearbeitung dieser langsamen Anfrage abgeschlossen ist. Da neuere Versionen von HTTP diese Situation nicht verbessert haben, behelfen sich die meisten Softwaieclients mit einem Notnagel: Der Webbrowser eröfmet einfach mehrere gleichzeitige, aber separate TCP/EP-Sitzungen mit einem oder mehreren Servern und versucht, viele Anfragen parallel abzusetzen. Eine solche Lösung ist eigentlich ziemlich vernünftig, wenn die Seite Ressourcen von mehreren gesonderten Quellen abruft. Allerdings ist sie ungeeignet, wenn die abgerufenen Ressourcen sich auf demselben System befinden, denn dann könnten alle Anfragen in derselben Sitzung gestellt und vom Server vernünftig verarbeitet werden, denn: ■ Der Server hat keine Möglichkeit, die optimale Reihenfolge für die Verarbeitung der Anfragen zu ermitteln. (Könnte er dies, dann ließen sich die zeitaufwendigsten, umfangreichsten oder schlicht unbedeutendsten Objekte ans Ende der Ressourcenübertragung setzen.) Er ist einfach gezwungen, alle Anfragen möglichst zeitnah zu erledigen, was aber immer noch dazu führen kann, dass die wichtigsten Daten aufgrund erhöhter CPU-Belastung unnötig verzögert werden. ■ Werden mehrere größere Ressourcen gleichzeitig versandt und schaltet das Steuerpro- grarnm des Betriebssystems zwischen den Sitzungen hin und her, dann kann es zu erheblichen Leistungseinbußen kommen, da das Festplattenlaufwerk beim Abrufen zweier physisch weit voneinander entfernter Dateien ständig und mit hoher Frequenz zwischen diesen wechseln muss. ■ Neue TCP/EP-Handshakes erhöhen das Datenaufkornmen beträchtlich; das Absetzen aller Anfragen innerhalb derselben Sitzung ist effizienter. Allerdings bieten neuere HTTP-Versionen so genannte ÄJeepa/h'e-Funktionen, mit denen diese Auswirkungen gemildert werden. ■ Das Öffnen einer neuen Sitzung und die Einrichtung eines neuen Prozesses zur Bearbeitung der Anfragen erhöht das Datenaufkornmen auf Betriebssystemebene und belastet Geräte wie statusbezogene Firewalls zusätzlich. Zwar versuchen moderne Webserver, dieses Problem zu minimieren, indem sie Pemianentprozesse ersatzweise vorhalten, um Anfragen gleich bei ihrer Ankunft zu bearbeiten, aber das Problem lässt sich nur selten vollständig beseitigen. Bei Nutzung nur einer Sitzung wird ein unnötiges Mehraufkornmen an Daten vermieden, und der Server kann dann nur diejenigen Ressourcen reservieren, die erforderlich sind, um die gewählten Anfragen asynchron zu bearbeiten. 235
14 Clientidentifikation: Die Ausweise, bitte! ■ Nicht zuletzt kann es, wenn nicht der Server, sondern das Netzwerk den Engpass darstellt, zu Leistungseinbußen kommen, wenn Pakete verworfen werden, weil die Leitung mit Daten verstopft ist, die gleichzeitig von mehreren Quellen ankommen. Doch ob gut oder schlecht, wir müssen derzeit mit dieser Architektur leben, und sie ist immer noch besser als der serielle Abruf. Wir sollten ihr Vorhandensein also akzeptieren und lernen, sie zu unserem Vorteil zu nutzen. Wie können uns diese Eigenschaften nun dabei helfen, die Software zu identifizieren, die der Client verwendet? Ganz einfach. Die Bedeutung des parallelen Dateiabrufs zum Zweck des Browser-Fingerprintings sollte eigentlich offensichtlich sein: Keine zwei Abrufalgorithmen sind vollständig identisch, und dies lässt sich auch gut messen. Bevor wir uns aber dem parallelen Abruf von Daten zuwenden, müssen wir uns noch zwei andere wichtige Faktoren der Sicherheits- und Datenschutzgleichung für das Web ansehen: Caches und die Identitätsverwaltung. Sie scheinen zwar nichts miteinander zu tun zu haben, bilden aber am Ende das logische Ganze. Wir schalten um. 14.4.2 Caching von Inhalten Die Verwendung lokaler Caches mit Dokumenten, die vom Server empfangen wurden, ist eines der wichtigeren Merkmale des Web während seiner Expansion in den vergangenen Jahren.7 Ohne dieses Caching wären die Betriebskosten erheblich höher gewesen. Das Problem einer an Urnfang und Komplexität zunehmenden Website besteht darin, dass sie immer mehr Bandbreite benötigt (was sie für ein Unternehmen relativ teuer macht) und auch bessere Server erforderlich sind, um die Daten mit annehmbarer Geschwindigkeit bereitzustellen. Wenn sich nicht Bandbreitenengpässe auf die Leistungsfihigkeit auswirken, dann sind es Lösungen wie die oben beschriebenen gleichzeitigen Sitzungen, die die Provider stark beanspruchen. Die Ursache mag für manchen überraschend sein: Wenn eine Person über eine relativ langsame Verbindung (z. B. ein Modem) vier aufeinanderfolgende Sitzungen eröffnet, um eine vergleichsweise einfache Seite herunterzuladen, dann müssen auf dem Server vier Verbindungen und vier Prozesse oder Threads am Laufen gehalten werden, die schnelleren Verbindungen die Ressourcen wegnehmen. Schließlich stehen, um die Lage noch zu verschlimmern, voluminöse und komplexe Websites nicht immer in Einklang mit den Erwartungen der Benutzer. Vergleichsweise lange Ladezeiten für Seiten galten zwar einst als völlig normal, werden aber mittlerweile als Ärgernis betrachtet und veitreiben Besucher. Und Forschungen8 belegen tatsächlich, dass der WWW-Durchschnittsbenutzer maximal zehn Sekunden auf den Download einer Seite zu Allerdings nimmt seine Bedeutung heute langsam ab: Weil immer mehr Webseiten dynamisch generiert werden und der Intemet-Backbone zunehmend ausgereifter und funktioneller wird, wird das Caching früher oder später bedeutungslos sein. Verschiedene Quellen, zitiert auf http://usability.gov/guidelines/sofihard.html: BoucOO, Mart86, Mel96, Niel97a, Niel97b, Mel99 236
14.4 Wie HTTP besser wird waiten bereit ist, bevor er weiterzieht. Folge ist, dass Unternehmen und Dienstleister mehr Ressourcen und bessere Anbindungen benötigen, um die eingehenden Anfragen bearbeiten zu können. In der Tat hätte, wären die Dinge so gebheben, wie sie ursprünglich vorgesehen waren, die Nachfrage nach serverseitigen Ressourcen das Angebot an Kapazitäten wahrscheinlich bereits vor einiger Zeit erschöpft. In diesem Zusammenhang hat sich als hilfreich erwiesen, dass Inhalte, die Websurfern übermittelt werden, statisch sind oder sich selten ändern - zumindest in Relation zu der Häufigkeit, mit der eine Ressource von Benutzem abgerufen wird. (Dies gilt insbesondere für große Dateien, z. B. Grafiken, Videos, Dokumente, ausfuhibare Dateien usw.) Indem die Daten in größerer Nähe zum Endbenutzer zwischengespeichert werden - sei es beim Internetprovider oder im Browser des Endsystems selbst -, lässt sich der Bandbreitenbedarf für nachfolgende Besuche von Benutzern, die die gleiche Cache-Engjne verwenden, erheblich senken. Zudem können die Server den Datenverkehr wesentlich einfacher verwalten. Auch der Provider profitiert von einem geringeren Bandbreitenverbrauch, denn er kann nun rnehr Kunden bedienen, ohne in neue Geräte und Verbindungen investieren zu müssen. Was HTTP jedoch braucht, ist ein Mechanismus, um den Cache fehlerfrei und aktuell zu halten. Der Autor einer Seite - sei er Mensch oder Maschine - niuss in der Lage sein, der Cache-Engine sagen zu können, wann eine neuere Version eines Dokuments abgerufen werden muss. HTTP bietet standardmäßig zwei Funktionen, um das Caching von Dokumenten zu implementieren: ■ eine Methode, um mit minimalem Aufwand sagen zu können, ob ein Teil der Daten geändert wurde, seit die aktuell im Cache vorhandene Version (also die Version, die beim letzten Besuch gültig war) abgerufen wurde ■ eine Methode zur Bestimmung, welcher Teil der Daten nicht im Cache zwischengespeichert werden darf - ob aus Sicherheitsgründen, oder weil die Daten bei jedem Abrufdynamisch neu erstellt werden Diese Funktionalität wird in der Praxis recht einfach umgesetzt: Der Server gibt alle zwischenspeicherbaren Dokumente in der regulären HTTP-Sitzung zurück, fügt aber auf Protokollebene einen Header namens Last-Modified (,»Letzte Änderung") hinzu. Natürlich ist damit die Ansicht des Servers bezüglich der Frage gemeint, wann das Dokument zuletzt geändert wurde. Demgegenüber werden Dokumente, die nicht im Cache abgelegt werden dürfen, vom Server mit dem Vermerk Pragma: no-cache (bzw. Cache-Control: no-cache in HTTP/1.1) versehen. Der Clientbrowser (oder eine zwischengeschaltete, vom Intemetprovider betriebene Cache-Engjne) soll eine Kopie aller nach Maßgabe eines geeigneten Headers zwischenspeicherbaren Seiten sowie die zugehörigen Angaben zur letzten Änderung im Cache ablegen. Die zwischengespeicherte Seite soll so lange wie möglich aufbewahrt werden - entweder, bis der benutzerdefinierte Grenzwert für den Cache überschritten wird oder der Benutzer den Cache manuell löscht -, sofern kein Expires-He&der vorhanden ist, der Angaben zum Ablaufdatum der Seite enthält. 237
14 Clientidentifikation: Die Ausweise, bitte! Wird die Seite später neu besucht, dann erkennt der Client, dass eine ältere Instanz der Seite im Cache auf der Festplatte vorhanden ist. Der Zugriff erfolgt dann auf eine etwas andere Weise: Solange das Dokument im Cache vorhanden ist, versucht der Client, die Datei jedes Mal abzurufen, wenn der Benutzer eine Site erneut besucht, übergibt aber in jeder Anfrage einen If-Modified-Since-Headei, der den Zeitpunkt angibt, der beim letzten Besuch der Seite im Last-Modißed-Headei erkannt wurde. Der Server vergleicht nun den Wert von If-Modified-Since mit seinen Kenntnissen bezüglich der letzten Änderung der betreffenden Ressource. Wurde die Ressource seitdem nicht verändert, dann wird statt der angeforderten Daten die HTTP-Fehlermeldung „304 Not Modified" zurückgegeben. Die eigentliche Dateiübertragung wird also nicht durchgeführt, was Bandbreite einspart (weil nur ein paar hundert Bytes während dieses Vorgangs ausgetauscht werden). Der Client (oder die zwischengeschaltete Cache-Engine) soll in diesem Fall eine zuvor zwischengespeicherte Kopie der Ressource verwenden, statt sie erneut herunterzuladen. ■ Hinweis Ein aktuellerer Ansatz — die ETag- und If-None-Match-Hcader, die einen Teil der Tagging- Funktionalität von HTTP/1.1 ausmachen — funktioniert auf ähnliche Weise, sein Ziel ist aber die Auflösung von Mehrdeutigkeiten in Verbindung mit der Interpretation von Zeitpunkten der Dateimodifikation, d. h. Problemen in Verbindung mit Dateien, die innerhalb kurzer Zeit (unterhalb der Auflösung von Last-Modified-ßingabsn) mehrfach geändert oder aus einer Sicherungskopie wiederhergestellt wurden (weswegen der Andemngszeitpunkt zeitlich vor dem der letzten zwischengespeicherten Kopie liegt) usw. 14.4.3 Sitzungen mit Cookies verwalten Eine weitere wichtige und in diesem Zusammenhang scheinbar irrelevante Anforderung von FfTTP bestand darin, zwischen Sitzungen unterscheiden, diese auch verbindungsüber- greifend erkennen und Sitzungseinstellungen wie auch Identitätsangaben speichern zu können. Einige Websites profitieren beispielsweise in erheblichern Maße davon, dass der Benutzer die persönlichen Einstellungen anpassen kann und die Seiten dann bei jedem Neuaufruf in dem von ihm gewählten Aussehen wiederhergestellt werden. Natürlich ließe sich die Identität des Benutzers auch ermitteln, indem man bei jedem Besuch der Seite einen Anmeldenamen und ein Passwort abfragt und bei korrekter Eingabe die persönlichen Einstellungen lädt. Allerdings verringert dieser eigentlich zu vernachlässigende Mehraufwand die Anzahl potenzieller Besucher einer Seite erheblich. Es wurde also eine transparente und stabile Möglichkeit zum Speichern und Abrufen von Daten vom Computer des Clients benötigt, um nahtlosen und personalisierten Zugriff auf Webforen, Mailboxen, Chats und viele andere Funktionalitäten zu ermöglichen, die für viele Benutzer einen Großteil des Browsens ausmachen. Auf der anderen Seite bedeutete die Fähigkeit von Websei^eradHiinistratoren, zurückkehrende Besucher erkennen und identifizieren zu können, indem man sie eindeutig mit einem Tag kennzeichnete, das später wieder abgerufen werden konnte, auch die Preisgabe der Anonymität im Austausch gegen ein bisschen Bequemlichkeit. Solche Methoden würden Unternehmen mit geling ausge- 238
14.4 Wie HTTP besser wird prägter Ethik ein hervorragendes Werkzeug an die Hand geben, um Benutzer zu kontrollieren und Profile zu erstellen, ihre Einkaufs- und Surfgewohnheiten aufzuzeichnen, ihre Interessen zu bestimmen usw. Suchmaschinen könnten Anfragen desselben Benutzers einander zuordnen, und Anbieter, die Ressourcen wie etwa Werbebanner vertreiben, könnten Benutzer mithilfe dieser Daten auch ohne deren Erlaubnis und ohne Wissen der Sitebetreiber überwachen.9 Trotz dieser Einwände schien es aber keine bessere, ausreichend universelle Alternative zu einem solchen Mechanismus zu geben. Dies war die Gebuitsstunde der Cookies. Nach Definition in RFC210910 sind Cookies kleine Textdateien, die von einem Server ausgestellt werden, wenn der Client eine Verbindung zu ihm herstellt. Der Server fügt in seiner Antwort an den Besucher einen Set-Coo/äe-Header ein. Diese Textdatei ist aufgrund der zusätzlichen Parameter auf eine bestimmte Domäne, einen Server oder eine Ressource beschränkt und hat eine endliche Gültigkeitsdauer. Cookies werden von Clientanwendun- gen, die sie unterstützen, in einer speziellen Containerdatei oder einem Ordner gespeichert und - mit einem Coofo'e-Header versehen - immer dann automatisch an den Server zurückgeschickt, wenn erneut eine Verbindung mit der betreffenden Ressouice hergestellt wird. Server können Benutzereinstellungen nach Bedarf in Set-Coo/äe-He&dem ablegen, die sie dann bei späteren Besuchen auslesen. In einer heilen Welt würde die Cookie-Funktionahtät hier enden. Leider gibt es für Computer keine Möghchkeit, zu ermitteln, was in einem Cookie gespeichert ist. Ein Server kann beispielsweise eine eindeutige Clientkennung in den Set-Cookie-He&dei schreiben und diese dann später wieder einlesen, um aktuelle mit vorherigen Aktivitäten des Benutzers auf dem System zu verknüpfen. Diese Methode hat nach landläufiger Meinung schwerwiegende datenschutztechnische Auswirkungen. Einige Aktivisten geben unumwunden zu, Cookies zu hassen, aber die Opposition gegen diese Technologie macht ihrem Herzen mittlerweile zunehmend seltener Luft. Mit deaktivierten Cookies durch das Internet zu surfen, wird immer schwieriger, und es gibt sogar Sites, die Anfragen von Clients, die eine Cookie-Prüfung nicht bestehen, ganz einfach abweisen. Zum Glück bieten viele Browser umfassende Einstellungen zum Annehmen, Beschränken oder Abweisen von Cookies und können sogar die Annahme jedes einzelnen Cookies bestätigen (obwohl letzteres nicht besonders praktikabel ist). Auf diese Weise lässt sich die Privatsphäre einigermaßen gut schützen, indem man definiert, wer die „Guten" sind und wem man vertrauen möchte. Aber hegt unsere Privatsphäre dann in ihren Händen? Wenn ein Werbebanner oder ein anderes Element einer Website auf einem gemeinsam verwendeten Server wie http://banners.evilcompany.com abgelegt wird, kann der Betreiber von evilcompany.com Cookies versenden und immer dann abrufen, wenn eine Person eine Website besucht, auf der Banner von evilcompany.com angezeigt werden. Selbstredend versenden die meisten Banneranbieter Cookies und überwachen Benutzer — wenn auch in erster Linie zu Zwecken der Marktforschung. 10 Kris97 239
14 Clientidentifikation: Die Ausweise, bitte! 14.4.4 Cache und Cookies: Die Mischung macht's Schon lange ist die Privatsphäre beim Webbrowsing ein ganz heißes Eisen, und dies nicht ohne Grund. Viele Benutzer wollen nicht, dass andere in ihren Einstellungen und Vorlieben schnüffeln, auch wenn die Umstände keineswegs fragwürdig sind. Warum dieses? Nun, manchmal möchte man einfach nicht, dass irgendeine nervige Marketingfirma herauskriegt, dass Sie Informationen zu bestimmten medizinischen Problemen sammeln, und dieses Wissen dann mit einem bestimmten Konto verknüpft, welches Sie bei einer bestimmten Mailanbieter haben, denn Sie können keinesfalls wissen, wo diese Informationen einmal enden werden. Die Cookie-Steuerung macht das Websurfen für Sie ausreichend komfortabel, während die bösen Jungs draußen bleiben müssen. Aber auch dann, wenn Sie Cookies abschalten, können Sie nicht verhindern, dass Daten auf Ihrem System gespeichert werden, die später an den Server zurückgeschickt werden. Die Funktionalität, die zum Speichern und Abrufen von Daten auf dem Computer eines Opfers erforderlich ist, ist bei allen Browsern schon seit langer Zeit vorhanden - ungeachtet der von Ihnen definierten Cookie-Richtlinien. Die beiden erforderlichen Technologien arbeiten auf ähnliche Weise und unterscheiden sich nur hinsichtlich ihres vorgesehenen Verwendungszwecks: Cookies und Caching. Irgendwann im Jahr 2000 schickte Martin Pool einen kurzen, aber recht aufschlussreichen Beitrag11 an die Bugtraq-Mailingliste und berichtete über eine interessante Beobachtung, die er mit aktuellen Codebeispielen untermauerte. Er zog den Schluss, dass es - zumindest, was Systeme angehe, die keine zentralisierten Proxy-Caches verwenden und Kopien bereits abgerufener Dokumente lokal auf Festplatte speichern (wie die meisten von uns dies tun) - keinen wesentlichen Unterschied zwischen den Funktionalitäten von Set-Cookie und Cookie im Vergleich mit Last-Modified und If-Modified-Since gebe. Ein böswilliger Web- siteadrninistrator kann im Last-Modified-He&dei; der für eine Seite zurückgegeben wird, die von einem Opfer besucht wird, praktisch jede behebige Meldung speichern. (Selbst wenn der Header auf Plausibilität geprüft wird, kann er zumindest ein behebiges, eindeutiges Datum angeben, um den Besucher eindeutig zu identifizieren.) Der Client würde dann If-Modified-Since mit einer exakten Kopie der eindeutigen Kennung senden, die von einem arglistigen Betreiber immer dann auf seinem Computer gespeichert wird, wenn er eine Seite erneut besucht. Und mit der Antwort „304 Not Modified" könnte sichergestellt werden, dass dieses „Cookie" nicht verworfen wird. 14.4.5 Wie man die Cache-Cookie-Attacke verhindert Seinen Browser zu verwenden, um die Last-Modified-Daten ein bisschen zu „korrigieren", scheint auf den ersten Blick eine nette Möglichkeit, diese Sicherheitslücke zu schließen (wenn auch auf Kosten kleiner Ungenauigkeiten im Cache). Dies ist aber leider nicht der Fall. Eine andere Variante dieses Angriffstyps basiert auf dem Speichern von Daten in PoolOO 240
14.5 Verrat! Verrat! zwischengespeicherten Dokumenten (anstelle der direkten Verwendung von Tags): Ein hinterlistiger Betreiber kann eine spezielle Seite für ein Opfer präparieren, das eine Website zum ersten Mal besucht. Diese Seite enthält einen Verweis auf einen eindeutigen Dateinamen, der als eingebettete Ressource ausgewiesen ist (z. B. ein Bild). Besucht der Client die Seite dann erneut, so bemerkt der Server den Jf-Modified-Since-Headei und antwortet mit der Fehlermeldung 304, d. h. er fordert zur Verwendung der vorhandenen Kopie der Seite auf. Die alte Seite enthält eine eindeutige Dateireferenz, die dann beim Server abgerufen wird. Auf diese Weise lässt sich die IP-Adresse des Clients mit einer vorherigen Sitzung verknüpfen, bei der dieser Dateiname bereits übermittelt wurde. Oha. Natürlich ist die Lebensdauer von „Cookies" im Cache durch die Cachegröße und die Ablaufeinstellungen zwischengespeicherter Dokumente begrenzt, die vom Benutzer konfiguriert wird. Allerdings sind diese Werte in der Regel recht großzügig bemessen, und Informationen, die in den Metadaten einer Ressource gespeichert sind, die nur alle paar Wochen neu besucht wird, können jahrelang im Cache verbleiben, bis dieser manuell geleert wird. Für Unternehmen, die Komponenten bereitstellen, die auf Hunderttausenden von Sites enthalten sind, stellt dies ohnehin kein Problem dar (auch hier sind Banner ein gutes Beispiel). Der wesentliche Unterschied zwischen diesen Cache-Cookies im Vergleich zu „richtigen" Cookies ist keine Frage der gebotenen Funktionalität, sondern eher die Leichtigkeit, mit der sich die oben beschriebene Angriffsfläche nutzen lässt. (Cache-Daten werden auch für andere Zwecke eingesetzt und können nicht einfach ohne erhebliche Leistungseinbußen beschränkt werden, die damit verbunden sind, dass die Zwischenspeicherung teilweise oder vollständig deaktiviert wird.) Angesichts dieser eigenartigen Wendung können Sie sehen, wie zwei Aspekte des Web miteinander kollidieren und die Sicherheitsmaßnahmen, die um einen dieser Aspekte herum aufgebaut sind, einfach außer Kraft gesetzt werden. Die Praxis zeigt, dass guter Wille nicht immer ausreicht, weil Ganoven nicht immer bereit sind, nach den Regeln zu spielen und die Technologie so einzusetzen, wie wir es wünschen. Vielleicht macht das Abschalten von Cookies am Ende doch nicht den Unterschied aus. Jetzt aber ist es an der Zeit, dass wir uns wieder dem Hauptthema dieses Kapitels zuwenden. 14.5 Verrat! Verrat! Nämlich dem Thema der Erkennung von Betrugsversuchen und dem korrekten Fingerprin- ting von Clientanwendungen. Ich habe bislang erwähnt, dass die Aufgabe, trügerische Clients zu erkennen, recht komplex, aber nicht unmöglich zu lösen ist, und dass die Verhaltensanalyse - eine sorgfältige Überwachung der Abfolge von Ereignissen, die von den fraglichen Browsern erzeugt werden - einen Weg darstellt, den zu gehen sich durchaus lohnen kann. 241
14 Clientidentifikation: Die Ausweise, bitte! HTTP ist ein sehr großzügiges Studienobjekt, denn wie wir gesehen haben, finden viele Aktivitäten mehr oder minder parallel statt, und die Algorithmen zur Warteschlangenbil- dung und Datenverarbeitung sind recht subtil und für jeden Client spezifisch. Durch Ermittlung der Anzahl gleichzeitig henintergeladener Dateien, der Abstände zwischen den Anfragen, der Reihenfolge der Anfragen und anderer kleinster Details einer Sitzung ist es möglich, die eindeutigen Charakteristika eines Systems auf einer Ebene zu messen, die zu kontrollieren für den Benutzer wesentlich schwerer ist. So können Sie problemlos gesetzestreue Bürger von Schwindlern unterscheiden. Um auf einfachste Weise ein Praxisbeispiel dieses Ansatzes zu vermitteln und dabei so nah an den echten Anwendungen wie möglich zu bleiben, beschloss ich zu überprüfen, wie viel sich aus den vorhandenen, relativ beschränkten Datenproben gewinnen lässt, die auch den meisten von Ihnen zur Verfügung stehen dürften. Deshalb legte ich die Standardlogdateien einer relativ behebten Website zugrunde, die kaum mehr als eine Million Anfragen enthielten. Die für die Analyse verwendeten Daten fand ich in einer ganz normalen Zugriffslogdatei eines Apache-Webservers. Die Datei enthielt Angaben zur Bearbeitungsdauer von Anfragen, den angeforderten URIs, den über den User-Agent-He&dei bekannt gemachten Browserdaten und andere ähnlich grundlegende Datentypen. Die Seite, auf die sich diese Logdatei bezog, besteht aus einigen recht kleinen Bildern vergleichbaier Größe und einem HTML-Dokument, das diese Bilddateien aufruft. 14.5.1 Verhaltensanalyse: Eine einfache Fallstudie Die Gewohnheit des Apache-Servers, Anfragen erst dann zu protokollieren, wenn sie abgeschlossen sind (und nicht bereits, wenn sie bearbeitet werden), könnte man als Problem auffassen. Tatsächlich aber ist sie recht hilfreich, wenn man voraussetzt, dass die Gruppe der angeforderten Dateien relativ homogen ist. Die Initiierungsreihenfolge der Anfragen wild eher durch die Abfolge beeinflusst, in der Ressourcen auf der Hauptseite referenziert werden, wohingegen die Duichfühnmgsdauer auf einem ganz anderen Blatt steht. Wahrscheinlichkeiten in Bezug auf die Fertigstellungsreihenfolge hängen von der Anzahl der Anfragen, den zeitlichen Abständen zwischen ihnen sowie anderen Parametern ab, die sich in geringem Maße von Browser zu Browser unterscheiden - nur subtil, aber durchaus spürbar. Insbesondere Browser, die immer eine Verbindung geöffnet halten, arbeiten Anfragen generell in einer bekannten Reihenfolge ab, z. B. A-B-C-D. Browser, die drei Verbindungen gleichzeitig öffnen und Anfragen in schneller Reihenfolge verarbeiten, können genau so gut B-A-C-D, C-B-A-D, C-A-B-D usw. erzeugen. Und in diesen Fällen spielen die Einreihung der Anfragen in die Warteschlange und die Sitzungsverwaltung die wichtigste Rolle. Natürhch dürfen wir nicht vergessen, dass zufällige Faktoren wie etwa die Latenz oder Zuverlässigkeit des Netzwerks sich ebenfalls erheblich auf die beobachtete Abfolge auswirken können. Trotzdem ist es vernünftig, davon auszugehen, dass sich bei einer derart großen Menge von Beispielen Auswirkungen, die nicht browserspezifischer Natur sind, einpendeln oder die Daten für alle Clients auf ähnliche Weise beeinflussen. Und wenn das 242
14.5 Verrat! Verrat! passiert, dann werden wir hoffentlich feinste Unterschiede zwischen Browsern erkennen, die unter eine benutzerfreundlichen Bedienoberfläche im Stillen wirken. Abbildung 14.1 zeigt die statistische Verteilung beim Versuch von vier verbreiteten Webclients, die oben beschriebene, zehn Elemente umfassende Webseite zu laden. Jede Kurve ist in zehn Hauptsegmente unterteilt. Die erste entspricht der HTML-Datei, die direkt angefordert wird und natürlich das erste Element der Seite bildet. Die übrigen neun Segmente entsprechen den neun Bildern, die von der HTML-Seite referenziert werden, in der Reihenfolge, in der sie im HTML-Code aufgeführt sind. Abbildung 14.1 Unterschiede In Vertialtensmustem beliebter Webclients Jedes der Segmente wird seinerseits in zehn diskrete Abschnitte auf der X-Achse unterteilt. (Diese sind in der Abbildung nicht angegeben, damit die Kennlinien erkennbar bleiben.) Die Kurvenhöhe im w-ten Abschnitt innerhalb eines Segments stellt die Wahischeinlichkeit dar, mit der diese Datei als w-te Datei in der Abfolge geladen wird. 243
14 Clientidentifikation: Die Ausweise, bitte! Um die Leserlichkeit zu verbessern, sind die Verteilungswahrscheirüichkeiten als Prozentwerte zwischen 1 und 100 angegeben (wobei diese den prozentualen Ergebnissen entsprechen und alle Werte unter 1 aufgerundet wurden). Diskrete Punkte wurden durch Linien verbunden. Die Kurven wurden dann auf einer logarithmischen Skala (loglO, mit Hauptteilungen bei 1, 10 und 100) dargestellt, um feine Details zu betonen und den optischen Vergleich zu vereinfachen. In einer perfekten Welt mit vollständig sequenziell arbeitenden, vorhersagbaren Browsern würde das erste Segment nur einen Spitzenwert an der ersten diskreten Position (ganz links) enthalten, das zweite Segment einen Spitzenwert an der zweiten Position usw. In der Praxis jedoch setzen viele Browser Abfragen gleichzeitig ab, weswegen die Reihenfolge sehr schnell durcheinandergebracht ist: Die dritte referenzierte Datei kann am Ende vor der zweiten oder nach der vierten geladen werden. Je weniger ausgeprägt eine Spitze in einem Segment ist, desto aggressiver scheint der Abrafalgorithmus des Browsers zu sein - denn umso höher ist die Wahrscheinlichkeit, dass diese Datei außerhalb der Reihenfolge geladen wird. Die Unterschiede sollten offensichtlich sein - auch bei Browsern wie Mozilla und dem Internet Explorer, die historisch beteachtet auf derselben Engine basieren. Alle Clients scheinen die Reihenfolge zu beachten, in der die Dateien im Hauptdokument referenziert werden, d. h. die nachfolgenden Spitzenwerte bewegen sich von Segment zu Segment immer weiter von links nach rechts. Doch wie Sie sehen, ist Mozilla generell weniger ungeduldig als der Internet Explorer und beendet den Download der Dateien häufig in der Reihenfolge, in der sie angefordert wurden. Opera dagegen - als schnellster Browser der Welt beworben - nimmt es mit der Reihenfolge alles andere als genau: Viele Dateien weisen zwei oder drei beinahe identische Spitzenwerte aus, was darauf schließen lässt, dass eine Anzahl von Anforderungen derart schnell abgesetzt wird, dass die Reihenfolge der Fertigstellung fast beliebig ist und erheblich vom Jitter im Netzwerk beeinflusst wird. Wget schließlich - ein beliebtes Open-Source-Programm zum Herunterladen von Dateien - habe ich zu Ver- gleichszwecken hinzugefügt. Es weist ein makellos sequenzielles Muster auf (wie es für automatisierte Crawler typisch ist), verwendet nur eine Verbindung und lädt alle Dateien in derselben Reihenfolge. 14.5.2 Was uns der Künstler mit seinem Bild sagen will Bilder und Kurven sind nett, haben aber wenig bis gar keinen Wert für die automatisierte Durchsetzung von Richtlinien oder die Missbrauchserkennung. Um die beobachteten Muster irgendwie quantifizieren zu können und das Fingerprinting ein bisschen realitätsnäher zu gestalten, ersann ich eine einfache Metrik, die einem Segment eine bessere Wertung (zwischen 1 und 10) zuordnet, wenn nur ein einzelner Spitzenwert vorhanden ist; je willkürlicher die Verteilung ist, desto niedriger ist die Weitung. Auf diese Weise ließe sich eine einfache Signatur mit zehn Weiten für eine bestimmte Software erstellen; mit dieser könnten dann Beobachtungen verglichen werden, um die entsprechenden Schlüsse zu ziehen. 244
14.5 Verrat! Verrat! Um eine Metrik zu konstruieren, die eine relative Qualität (Linearität) Q des beobachteten Verhaltens im Hauptsegment s ausdrückt, verwendete ich die folgende Formel (bei dieser bezeichnet/ die Wahrscheinlichkeit, dass die Datei in der Abrufsequenz an der Position n erscheint, ausgedrückt als prozentualer Wert, damit es bequemer ist und die Puristen sich ein bisschen auflegen können): ( HE A 1,42 10 v J Diese Gleichung, wiewohl auf den ersten Blick furchteinflößend, ist eigentlich ziemlich klar strukturiert. Ich wollte, dass die Formel der Situation, wenn die betreffende Datei am häufigsten an einer festen Position in einer Abfolge geladen wurde (d. h. ein ./-Wert nahe bei 100 Prozent und die verbleibenden Wahrscheinlichkeiten nahe bei 0 Prozent liegen), Vorrang gegenüber solchen Situationen einräumt, in denen alle Position mit gleicher Wahrscheinlichkeit auftreten werden (d. h. alle/-Werte bei 10 Prozent liegen). Da die Summe aller Elemente von/feststeht (100 Prozent), besteht die einfachste Möglichkeit, dies zu erreichen, in der Verwendung einer Summe von Quadraten für jede Folge von Zahlen ungleich null: Die Summe von Quadraten dieser Zahlen ist immer kleiner als das Quadrat der Summe. Die größten und kleinsten Ergebnisse sehen wie folgt aus: 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 + 102 = 1.000 1002 + 02 + 02 + 02 + 02 + 02 + 02 + 02 + 02 + 02 = 10.000 Die verbleibenden Berechnungen (neben der Surnmierung) dienen lediglich dazu, die Ergebnisse nach der Rundung sinnvoll auf einer Skala von 0 bis 10 zu verteilen. Die Ergebnisse der Berechnung dieser Metiik des beobachteten Datenverkehrs der einzelnen Browser sind als numerischer Wert für jedes Segment in Abbildung 14.1 eingetragen. Wie erwartet, holt Wget in jedem Segment die volle Punktzahl. Die Weitungen der anderen Browser bestätigen die vorherigen optischen Beobachtungen und machen sie greifbarer. Zwar scheinen die Engines von Internet Explorer und Mozilla/Netscape im Grroßen und Ganzen ähnliche Kennlinien aufzuweisen, aber es lassen sich deutliche Unterschiede bei den Segmenten 4 bis 6 und in geringerem Maße über die gesamte Abrufsequenz feststellen. Opera sticht deutlich aus der Gruppe heraus: Die Weitungen sind für jedes Segment durchgehend niedriger. Am Ende haben wir, indem wir ein ganz schlichtes Analysewerkzeug eingesetzt haben, einen Rahmen zur Entwicklung einer praktischen Methode vorgegeben, mit der sich Browser identifizieren und Betrügereien in einem statistisch signifikanten Muster des HTTP- Datenverkehrs aufdecken lassen. Sie können dieses Modell erweitern, indem Sie andere automatisch ladende Elemente wie Skripten, HTML-Stylesheets, Irnage-Maps, Frames und andere Dateien untersuchen, die noch größere browserspezifische Varianzen aufweisen. 245
14 Clientidentifikation: Die Ausweise, bitte! Vielleicht hat es der Weihnachtsmann in diesem Jahr leichter, die Liste mit den unartigen Kindern zu schreiben. 14.5.3 Gentlemen, start your engines! Ich hoffe lediglich, darlegen zu können, wie einfach es ist, verborgene Eigenschaften einer unbekannten Anwendung zu erkennen, indem man ihr Verhalten beobachtet, ohne von bestimmten Annahmen auszugehen oder die Interna eines solchen Programms auseinander zu nehmen. Die oben angegebenen exakten Zahlen sind wahrscheinlich nicht direkt auf beliebige andere Websites als die von mir verwendete anwendbar. Insofern stelle ich Ihnen als Hausaufgabe, eine potenzielle Einsatzmöglichkeit für diese Methode zu finden. Wenn Sie für eine oder mehrere Sites Profile erstellt haben, können Sie mithilfe der Daten Systeme basierend auf ihren zeitbezogenen Aktivitätsmustern ermitteln. Selbstverständlich ist die hier beschriebene Methode ein (vielleicht übermäßig) vereinfachender Ansatz der Verhaltensanalyse und basiert auf dem womöglich trivialsten aller möglichen Szenarien. Ich möchte Sie aber anspornen und dazu verleiten, weiterzusuchen. In weitergehenden Fällen könnten Sie beispielsweise das Umsetzen von Inhalten in Frames, Tabellen und anderen optischen Containern oder das Umsetzen bestimmter Dateitypen überprüfen, um zu bestimmen, welcher Browser verwendet wird - auch ohne Durchführung statistischer Erhebungen: Bei verschienen hochspezifischen Aspekten der Browseraktivitäten werden die Unterschiede noch erheblich offensichtlicher. Auch eine clevere Anwendung der unterschiedlichen zeitlichen Abläufe mag vielversprechend sein. Berücksichtigen Sie auch folgendes: Sie können elaborierte Formen der Verhaltensanalyse einen Schritt weiter bringen und sie verwenden, um nicht nur eine Seitenbeschreibungs- Engjne von einer andere zu unterscheiden, sondern auch Maschinen und Menschen auseinander zu halten oder sogar einzelne Benutzer zu identifizieren. Wie in Kapitel 8 bereits dargelegt, sind die Tastaturverwendungsrnuster häufig derart charakteristisch für eine Person, dass man sie sogar für biometrische Zwecke einsetzen könnte. Ahnlich legen Forschungen nahe, dass wir anhand der Alt und Weise, wie ein Benutzer Verknüpfungen an- klickt, eine Auswahl trifft, Informationen liest usw., angeben können, wer oder was hinter einer Serie von Anfragen steckt.12 Dies liegt zwar näher an wissenschaftlicher Spekulation als an Tatsachen, aber es ist eine wunderbare Spielwiese, auf der man sich richtig austoben kann. 14.5.4 Was sonst noch hinter dem Horizont lauert Anwendungen zu Browseraktivitäten und Verhaltensanalyse gehen über die Erkennung der Browsersoftware hinaus, und tatsächlich übertreten einige sogar die Grenze von Datenschutz und Anonymität. Moba99 246
14.5 Verrat! Verrat! Eine interessante Forschungsarbeit13, die im Jahr 2000 von Edward Feiten und Michael Schneider veröffentlicht wurde, leistet einen faszinierenden Beitrag zu den Anwendungs- rnöglichkeiten dieser Technik: eine Fähigkeit, die eng mit den in modernen Engines vorhandenen Caching-Mechanisrnen verwandt ist und uns an den Punkt bringt, an dem alle bislang beschriebenen Elemente zusammenkommen. Der Grundgedanke ihrer Arbeit ist, dass es durch Einfügen eines Verweises auf eine Datei auf einer bestimmten Site und nachfolgendes Messen der Verzögerung, auf die der Browser beim Herunterladen trifft, möglich ist, zu sagen, ob der Benutzer eine bestimmte Site in den vergangenen Tagen besucht hat. Nichts einfacher als das. Ich erspare Ihnen einen umfangreichen Exkurs in die Welt von Theorien, Vorhersagen und Spekulationen (aber nur diesmal) und zeige Ihnen stattdessen ein Beispiel, das beinahe praxisnah ist. Angenommen, ich betieibe die Domäne Mnvw.rogue-servers.com. Nun habe ich beschlossen, dass meine Hauptseite aus irgendeinern Grund ein Bild (z. B. eine Ein- gangsgrafik) referenziert, das von der Site mvw.Mnky-Mttens.com stammt. Das Bildelement modifiziere ich so, dass es schwer zu finden ist, oder skaliere es so weit herunter, dass es nicht mehr sichtbar ist, aber es wird vom Browser trotzdern geladen. Nun besucht ein ahnungsloser Besucher meine Site. War er noch niemals zuvor auf T>vww.Mnfcy-Mttens.com, dann dauert es eine Weile, bis er das von mir referenzierte Bild heruntergeladen hat. Ist er jedoch regelmäßiger Gast auf meiner Site, dann ist das Bild bereits in seinem Cache vorhanden und wird praktisch sofort aufgerufen. Da dem Verweis auf die Ressource von www.Mnky-Mttens.com Anfragen zu anderen Bildelementen sowohl vorangehen als auch nachfolgen, ist es durch Einsatz einer ausgefuchsten Ablaufheuristik möglich, zuverlässig zu messen, ob das Logo übertragen wurde oder bereits im Cache vorhanden war. All dies reicht aus, um zu bestimmen, ob ein Neuankömmling auf meiner Site eine bestimmte andere Website (oder einen bestimmten Bereich dieser Website) häufig besucht - und stellt natürlich auch eine drastische Verletzung seiner Privatsphäre dar. Zwar wird dieses Szenario wohl kaum für routinemäßiges Ausspionieren im großen Stil verwendet werden (und zwar deswegen, weil man klare Indizien zurücklässt und vom Betreiber des Servers bemerkt werden könnte, dessen Benutzer man ausschnüffeln will), aber gezielte Angriffe können ziemlich erfolgreich sein. Am Ende passen alle Teile des Puzzles zusammen - vielleicht nur lose, aber sie passen zusammen. Benutzer, Programme und Gewohnheiten können nur allzu leicht durch den gewissenhaften Missbrauch moderner Funktionalitäten eines verbreiteten rnternetprotokolls erkannt werden. Dies zu wissen, wird die geschätzten Benutzer von T>vww.Mnky-Mttens.com in nächster Zeit wohl kaum ruhig schlafen lassen. 13 FeltOO 247
14 Clientidentifikation: Die Ausweise, bitte! 14.6 Vorbeugung Das eigene Surfen im Web vollständig anonymisieren zu wollen, scheint eine Schlacht zu sein, die bereits verloren ist. Zwar sind einige Praktiken zur Optimierung von Datenschutz und Anonymität von Webbenutzem gängig, aber eine Website kann diese einfach umgehen, wenn genug kriminelle Energie vorhanden ist. Das Problern ist leider zu schwerwiegend, um es einfach zu ignorieren. Es ist eine Sache, wenn eine Institution, der wir vertrauen (z. B. der Internetprovider), Ihre Aktivitäten kontrollieren kann, aber wenn Leute, mit denen Sie nicht unbedingt regelmäßigen Kontakt pflegen wollen, routinemäßig Profile mit sensiblen Daten erstellen und diese gemäß ihrem Geschäftsmodell ebenso routinemäßig an Dritte weiterveräußem, dann ist das eine ganz andere Angelegenheit. Dies sollte sogar denjenigen unter uns Sorgen bereiten, die gewohnheitsmäßig weder eine Stanniolmütze aus noch Unterwäsche aus Alufolie tragen. Andererseits ist die relative Schwierigkeit, vollständig anonym zu bleiben oder vollständig harmlos zu erscheinen, in Umgebungen, in denen HTTP-Datenverkehr erlaubt sein muss und die Benutzer trotzdem geschützt und kontrolliert werden sollen, ohne ihre Privatsphäie über das notwendig Maß hinaus zu verletzen, von großer Bedeutung. In Firmennetzen ist die Möglichkeit, nicht-richtlinienkonforme Systeme zu ermitteln, ohne Daten manuell überprüfen zu müssen, wahrhaftig von unschätzbarem Wert und wird von Benutzern und Systernadrninisti'atoren gleichermaßen geschätzt. 14.7 Denkanstöße Nicht eine einzige Komponente von HTTP ist schlecht konzipiert, fehlerhaft oder ungerechtfertigt. Doch wenn wir alles zusammen betachten, dann scheinen viele Sicherheitsund Datenschutzfunktionen aufgehoben zu werden, und der Benutzer ist der zunehmenden Anzahl von Lauschern mehr oder minder hilflos ausgeliefert. Traurigerweise können wir wenig tun, wenn wir nicht bei null anfangen wollen, und es gibt keine Garantie, dass die Ergebnisse gut funktionieren oder überhaupt so viel Datenschutz gewährleisten würden, wie es HTTP, HTML und WWW-Clients derzeit tun. 248
15 Das Opfer als Nutznießer Fünfzehntes Kapitel. In welchem wir feststellen, dass eine optimistische Lebensauffassung bei der Jagd auf den Angreifer durchaus hilfreich sein kann Ich habe bislang eine Vielzahl von Problemen beschrieben, die in ihrer Summe erhebliche Auswirkungen auf die tägliche Kornmunikation haben können - ein Risiko, welches uns nicht immer gut schlafen lässt. Sie haben gesehen, wie andere das Netzwerk ausnutzen, um Daten zu stehlen oder rnehr zu bekommen, als Sie es erwarten oder ihnen gestatten würden, und wie man mithilfe dieser Methoden rnehr Informationen zu Ihrem Untemehmens- oder Heimnetzwerk, aber auch zu den Angreifern ermittelt, die es darauf abgesehen haben. Ich hoffe, dass ich Ihnen sowohl einen nützlich Einblick in den Ursprang dieser Probleme als auch in ihre Vermeidung gewähren konnte, sofern eine solche möglich ist. Ich habe zu zeigen versucht, dass sich praktisch alle Aktivitäten auf die Sicherheit und die Privatsphäre auswirken und dass diese Auswirkungen nicht einfach beseitigt werden können, indem man die richtigen strukturellen Entscheidungen trifft, die richtige Software installiert oder angemessene Richtlinien implementiert und durchsetzt. Die Preisgabe von Daten kann schlichtweg nicht vollständig unterdrückt werden, und unsere einzige Hoffnung besteht darin, dass wir über genug Informationen und Erkenntnisse zu potenziellen Angriffsszenarien oder Datenlecks verfügen, um die schliminsten davon zu lindem, soweit dies in einer bestimmten Anwendung möglich ist. Dieser dritte Teil des Buches behandelte in erster Linie WAN-Technologien und die Bedrohungen, die dort lauem. Obwohl dies der längste Teil ist und er erst jetzt zum Ende kommt, ist er weit davon entfernt, einen vollständigen Abriss aller Probleme darzustellen, die in einem offenen Netzwerk auftreten können. Es wäre eigentlich sogar ziemlich schwierig (und auch weitgehend sinnlos), alle Varianten eines Problems zu erläutern, weswegen ich mich entschieden habe, nur die komplexesten, bedrohlichsten oder faszinierendsten Aspekte der Kornmunikation zwischen Hosts zu behandeln. Ich habe mich, statt nur Konzepte und Angnffsvektoren aufzuzählen, die lediglich alte Gnmdgedanken neu veipacken und keine neuen Aspekte beitragen, darauf konzentriert, Angriffsszenarien in 249
15 Das Opfer als Nutznießer verschiedenen Protokollschichten und auf unterschiedlichen Abstraktionsniveaus zu beschreiben. Ich hoffe, dass die bislang vermittelten Informationen Ihnen dabei helfen und Sie dazu ermutigen, weitere Inkarnationen dieser Probleme in anderen Bereichen der Netzwerk- und Rechentechnik - und vielleicht sogar darüber hinaus - zu suchen. Im nächsten Teil des Buches erfolgt eine erhebliche Paradigmenverschiebung, denn dort werden wir erforschen, wie es uns die sorgfältige Beobachtung des Netzwerks als Ganzes (statt einzelner Systeme) ermöglicht, uns zu verteidigen oder andere anzugreifen. Bevor wir dieses jedoch tun, wollen wir einen Blick auf ein paar andere Möglichkeiten in einem der ungewöhnlichsten Bereiche der Netzüberwachung werfen: passive Spionageabwehr, d. h. die Kunst, rnehr über den Angreifer oder seine Ziele zu erfahren, indem man seine Handlungen analysiert. Die auf diese Weise gesammelten Daten können uns eine enorme Anzahl von Anhaltspunkten vermitteln, die das Erkennen der Absichten eines Angreifers, der verwendeten Tools oder sogar des Angreifers selbst ermöglichen. Ein Profil des Angreifers zu erstellen, seine Gedanken zu lesen und vielleicht sogar ein Täuschungsmanöver auszuführen, ist oft bereits an und für sich ein spannendes Erlebnis. 15.1 Angriffsmetriken definieren Erwartungsgemäß können Sie eine Menge Informationen zu einem rabiaten Angreifer gewinnen, indem Sie ledighch einige der bereits beschriebenen gängigen TCP/EP-Metriken auf den beobachteten Datenverkehr anwenden, z. B. passives Betriebssystern-Fingerprin- ting. Sie können beispielsweise das Tool identifizieren, mit dem ein Port-Scan durchgeführt wurde. Auf ähnliche Weise können wir auch das Prinzip der Verhaltensanalyse verwenden, um Eigenschaften des Angreifers zu erschließen - z. B. durch Beobachtung von Merkmalen wie den Abständen zwischen Anfragen oder der Reihenfolge dieser Anfragen (konkret also beispielsweise durch Beantwortung der Frage, wie schnell und in welcher Reihenfolge die Ports gescannt wurden). Mithilfe der Verhaltensanalyse können wir mit einigem Erfolg Programme aufspüren oder bei manuell durchgeführten Einbruchs- oder unzulässigen Beurteilungsversuchen die spezifischen Merkmale eines Angreifers erkennen (beispielsweise, wie viel Ahnung er von Computern hat). Eine besonders interessante Methode zur Erschließung des Tools, mit dem der Angreifer unser Netzwerk scannt, ist die praktische Anwendung einer in Kapitel 9 beschriebenen Technik- dem Fingerprinting der Port-Abfolge - auf eine völlig neue Aufgabe. Sie basiert auf der Beobachtung, dass eine große Anzahl heutzutage verwendeter Scanner Netzwerke und Systeme entweder sequenziell - beginnend beim niedrigsten Port bzw. der niedrigsten Adresse - scannt oder aber in zufälliger Reihenfolge auf Ressourcen zugreift. Der letztgenannte Ansatz wird häufiger verwendet und gilt als vorteilhafter, weil hier ein Lastausgleich stattfinden kann und die Erkennung des Scans zudem etwas erschwert wird. In einer überraschenden Wendung aber kann der Einsatz der Zufälligkeit sich auch gegen den Angreifer selbst richten- auf eine durchaus absonderliche Weise. 250
15.1 Angriffsmetriken definieren Das Problern entsteht, weil die Programmierer von Tools zum Scannen von Netzwerken untemehmenskritische Anwendungen mit hohen Sicherheitsanfordemngen nicht berücksichtigen. Die häufigste (und einfachste) Möglichkeit, einen PRNG in Prograrnrne zu implementieren, die keine kryptografisch sichere Ausgabe erfordern, besteht im Aufruf der entsprechenden Funktionen des Betriebssystems oder der verwendeten Programmiersprache. Der ISO-Standard1 für die verbreitetste Programmiersprache der Welt - C - sieht vor, dass zur Implementierung eines PRNG in einer C-Standardbibliothek ein einfacher linearer Kongnienzalgorithmus zum Einsatz kommt (vgl. Kapitel 1). Zur Erstellung und Verwendung des Generators beschreibt der Standard folgenden Ansatz: 1. Der Generator sollte einen 32-Bit-Ausgangswert (S0) erhalten, indem eine Standardbib- liotheksfunktion srand() aufgerufen wird. Erhält der Generator keinen solchen Ausgangswert (Keim), dann beginnt er mit einem festen Standardwert, d. h. in allen Fällen werden identische Ergebnisfolgen erzeugt. 2. Bei jedem Aufruf von rand() - der Hauptfunktion, die wiederholt aufgerufen wird, um fortlaufend Pseudozufallszahlen zur Verwendung in Benutzeranwendungen zu erzeugen - wird der Keim S wie folgt neu berechnet: St+1 = St ■ 1.103.515.245 + 12.345. Das Ergebnis wird auf 32 Bits gekürzt (Modulo 4.294.967.296) 3. Der Rückgabewert für jeden rand () -Aufruf ist das höherwertige Wort von St+1 mod 32.768. In einer 32-Bit-Variante - einem der auf modernen Computern häufiger eingesetzten Algorithmen - wird die in diesem und im vorherigen Schritt beschriebene Vorgehensweise mehrfach wiederholt, um aufeinanderfolgende Bitbereiche des Ergebniswertes zu berechnen. Alle linearen Kongruenzgeneratoren einschließlich des hier beschriebenen sind für die allgemeine Kryptoanalysemethodologie anfällig, die in den Neunziger jähren von Ff. Kraw- czyk vorgestellt wurde (siehe Kapitel 1). Basierend auf der Beobachtung ein paar fortlaufender (oder anders sortierter) Ausgaben ist es möglich, den internen Zustand des Generators zu rekonstruieren und auf diese Weise alle vorherigen und zukünftigen Ausgaben vorherzusagen. Natürhch ist die unmittelbare Folge dieser Möglichkeit - dass nämlich das Opfer basierend auf vorherigen Angriffsversuchen bestimmen kann, in welcher Reihenfolge ein Angreifer versuchen wird, andere Ressourcen auf dem Computer oder im Netzwerk ins Visier zu nehmen - für sich genommen noch nicht besonders spannend oder wertvoll. Allerdings hat diese Fähigkeit im Kontext von Netzwerksondierungsversuchen zwei wichtige Auswirkungen: ■ Wh können unter Umständen S0 bestimmen. Wenn wir wissen oder abschätzen können, wann der Generator seine Arbeit aufgenommen hat (oder alternativ, welche allgemeinen Eigenschaften der Ausgangswert aufweisen sollte), dann ist es möglich, den Wert zu rekonstruieren, mit dem der Generator initialisiert wurde. Da S0 der einzige Eingabewert des Algorithmus ist, müssen auf identische Keimwerte auch identische Verhal- 1 IS099
15 Das Opfer als Nutznießer tensweisen folgen, d. h. wir können den Keim ermitteln, indem wir die PRNG-Ausgabe beobachten. ■ Wir können unter Umständen t rnkrernente bestimmen. Wenn wir den Generatorstatus erst einmal kennen, ist es möglich, zu ermitteln, wie viele Zufallswerte vom Scanner durch den Aufruf von rand() zwischen zwei Aufrufen angefordert wurden, mit denen der Scanner Werte (Poitnummem und Hostadressen) für Pakete verlangt hat, die der Beobachter abgefangen hat. Die Bedeutung der ersten Folge dieses Ablaufs - die Fähigkeit, den Initialisierungswert des Generators zu rekonstruieren - ist vielleicht nicht auf den ersten Blick ersichtlich. Aber wir müssen noch ein anderes Puzzlestück berücksichtigen: Eine zur Initialisierung eines Zufallszahlengenerators häufig verwendete Möglichkeit besteht in der Verwendung eines handlichen 32-Bit-Wertes, der sich oft genug ändert, um zu gewählleisten, dass der PRNG sich nicht mehrfach identisch verhält. Für diesen Zweck wird häufig der Systernzeitzähler in Verbindung mit einer anderen kleinen Zahl wie etwa der aktuellen PID (Process ID, Prozesskennung) eingesetzt, um die Wahrscheinlichkeit zu verringern, dass zwei Programme, die innerhalb eines sehr kurzen Zeitraums ausgeführt werden, ähnliche Ergebnisse erzeugen. Wenn wir dieses Wissen auf den berechneten Wert S0 anwenden, dann kann das Sondierungsopfer die Systemzeit des Angreifers erkennen. (Ob dies die GMT- oder die lokale Zeit ist, hängt von den Einstellungen des Betriebssystems und dem Scanneltyp ab.) Und wenn wir die lokale Zeit des Systems kennen, können wir darauf auf einfachste Weise auf Herkunft und Identität des Angreifers schließen. Sollte der Angreifer versuchen, uns durch das Fälschen von Paketen aus verschiedenen Quellen zu verwirren, dann können wir diejenigen erkannten Quellen ausschließen, bei denen S0 auf eine Zeitzone hinweist, die nicht zur geografischen Region passt, der die Quelladresse zuzuordnen ist. Vergleichen wir beispielsweise die geschätzte Systemzeit des Angreifers mit der GMT-Zeit und erkennen, dass seine Zeitzone um fünf Stunden hinter GMT zurückliegt, dann können wir daraus schließen, dass der Angreifer mit hoher Wahrscheinlichkeit an der amerikanischen Ostküste sitzt und nicht in China. Vergleichen wird nun unsere erschlossene Zeitzone mit den Aufzeichnungen verschiedener IP-Adressblöcke, dann können wir guten Gewissens mutmaßen, dass die wahre Identität sich eher hinter Paketen eines Internetproviders aus Boston verbirgt als hinter denen eines Pekinger Providers. Außerdem können wir den Angreifer, wenn wir seine lokale Zeit kennen, aufspüren, indem wir den Unterschied zwischen seiner Systeniuhrzeit und der Echtzeit (und die langfristigen Abweichungen) enmtteln. Da Cornputeruhren in der Regel nicht besonders genau aibeiten und, sofern sie nicht regehnäßig zu einer externen Quelle synchronisiert werden, relativ stark - mitunter sogar um mehrere Minuten täglich - abweichen, kann dies ein nützlicher Ansatz sein, Angriffe abzugleichen, die von derselben Person ausgefühlt wurden. Unterschiedliche Computer gehen mit hoher Wahrscheinlichkeit systematisch um einen bestimmten Zeitbetrag vor oder nach, der sich zudem in charakteristischer Weise ändert. Schließlich kann, wenn die PID neben der Systemzeit als Teil des Mtialisierangskeirns verwendet wird und bekannt ist, dass die Systemzeit des Angreifers sich in einem be- 252
15.1 Angriffsmetriken definieren stimmten Bereich bewegt, rnithilfe der PID die Systernlaufzeit oder die Anzahl der Tasks, die zwischen zwei Scans ausgefühlt werden, näherungsweise bestimmt werden. Da jeder neue Prozess auf einem Computer einen höheren PID-Wert zugewiesen erhält, ist diese Abhängigkeit relativ offensichtlich.2 Durch Rekonstruktion des PRNG-Status können wir auch ermitteln, wie viele Zufallszahlen zwischen der Erzeugung zweier Pakete, die der Empfänger erhalten hat, erzeugt winden. Wird nur ein System gescannt, dann sollten möglichst keine Lücken, maximal aber nur marginale Unterschiede aufgnmd von Netzwerkproblemen vorhanden sein. Werden jedoch mehrere Systeme gescannt, dann lassen sich diese Lücken, die von Paketen, die an verschiedene Ziele gesendet werden, erzeugt werden, ganz einfach erkennen. Durch diese Erkennung können wir ermitteln, wie viele Systeme gleichzeitig überprüft werden. Außerdem ist es, wenn die Scannersoftware zu Täuschungszwecken gefälschte Pakete erzeugt, die von anderen, zufälligen Hosts zu kommen scheinen, möglich, gefälschte Adressen - also solche, die mithilfe des PRNG erstellt wurden - auszuschließen (und so die PRNG-Ausgabe möglicherweise sogar zu verifizieren). Außerdem kann man feststellen, welche Adresse nicht zur erkannten PRNG-Ausgabe passt; dies muss dann die richtige Adresse sein, die letztendlich auf den wirklichen Verursacher des Angriffs verweist. Nehmen wir beispielsweise einmal an, unsere rekonstruierten PRNG-Daten stammten von den folgenden Adressen: ■ 198.187.190.55 (Dezimaldaistellung: 3334192695) ■ 195.117.3.59 (Dezimaldaistellung: 3279225659) ■ 207.46.245.214 (Dezimaldaistellung: 3475961302) Daraus können wir nun bestimmen, dass sowohl 3.334.192.695 als auch 3.475.961.302 zu den ersten Ausgabewerten eines Generators mit dem Keim S0 gehören, während 3.279.225.659 zu keiner der Ausgaben eines rekonstruierten PRNG passt und insofern wahrscheinlich eine echte Adresse ist. Mithilfe all dieser Informationen können wir die Absichten eines Angreifers und die von ihm verwendete Software ermitteln. Mehr noch, wir können sogar das System aufspüren, auf dem er arbeitet, es mit anderen Daten in einen Zusammenhang bringen, um die wahre Identität und die geografische Region zu ermitteln, in der er sich befindet, und manchmal sogar bestimmen, wie er seinen Computer verwendet, während er Scan abläuft. ■ Hinweis Infolge der beschriebenen Probleme mit der Offenbarung von Laufzeit und Scanverlauf versucht NMAP mittlerweile, sichere Betriebssystemfunktionen zur Zufallszahlerzeugung (wie etwa das in Kapitel 1 erwähnte /dev/random) zu verwenden, statt sich auf die Tools der C- Standardbibliotheken zu verlassen. Allerdings steht diese Methode auf vielen Betriebssystemen (einschließlich Windows) nicht zur Verfügung. Bei anderen Scannern wurden keine derartigen Schritte unternommen, um den Angreifer zu schützen Allerdings bieten einige Betriebssysteme optional die Erzeugung zufälliger PID-Werte, um bestimmte andere lokale Angriffe schwieliger zu gestalten 253
15 Das Opfer als Nutznießer 15.2 Den Beobachter beobachten In den letzten zehn Jahren ist das Internet zu einem gigantischen Schlachtfeld geworden. Computer, die neu angeschlossen werden, werden praktisch sofort von automatisierten Angriffs-Probes, Würmern und anderen Datentypen überflutet, die sicherheitstechnisch problematisch sind. Die traditionelle und derzeit ziemlich angesagte Tendenz zur Erkennung und Verhinderung von Einbrüchen zielt darauf ab, Angriffe zu erkennen und zu stoppen, indem der Administrator gewarnt wird, sobald von speziell gefeitigten Tools zur Datenverkehrsanalyse angriffsvorbereitende Sondierungen erkannt werden. In heterogenen Umgebungen oder solchen, die einfach nur komplex genug sind, erzeugen solche Programme allerdings rnehr Fehlalarme, als man verarbeiten kann. In manchen Fällen hingegen stellt die Chance, Angriffe und die von ihnen hervorgerufenen Reaktionen beobachten zu können, für den Administrator eine fantastische Möglichkeit dar, Wissenswertes zu Netzwerkproblemen und Angriffen zu erfahren (auch wenn diese Vorfälle für sich genommen normalerweise nicht der Rede wert sind.) Zum Einen sind in manchen Netzwerken aktive Erkennung und Daten-Scans zur Durchsetzung von Richtli- nienkonfonnität und Systemkonfiguration schwierig in Angriff zu nehmen oder in der Dui-chführung zu aufwändig - sei es aufgrund von Richtlinienbeschiänkungen, langen Reaktionszeiten, zu kurzen Wartungsfenstem im Netzwerkbetrieb oder Ahnlichem. In einer solchen Umgebung kann die Möglichkeit, einen Blick auf die Schraken zu erhaschen oder sie zu ermitteln, einen unschätzbaren Ersatz für die lokal dui-chgeführte aktive Reconnais- sance darstellen. Zum Zweiten ist die regelmäßig durchgeführte aktive Erkennung unter Umständen nicht geeignet, schnell genug auf bestimmte Bedrohungen zu reagieren. Aufgrund dessen kann die Aussicht, dadurch, dass man einfach die Ergebnisse beobachtet, die andere erhalten, zu erfahren, wenn irgendetwas daneben geht, ziemlich weitvoll sein. Natürlich ist dies ein zweischneidiges Schwert: Ein Hacker, der ein Netzwerk angegriffen hat oder dies beabsichtigt, aber nicht auffallen will und seine Schritte im Voraus plant, kann seinerseits Daten, die durch andere Erkennungsversuche erzeugt wurden, beobachten und so eigene Erkenntnisse über ein bestimmtes System sammeln. Die Aufgabe, Erkenntnisse zu stibitzen, die ein Angreifer gewonnen hat, erscheint nur in der Theorie einfach: Die Herausforderung, Ergebnisse abzugleichen und zu verarbeiten, ist alles andere als simpel - insbesondere, wenn man umfangreiche Umgebungen analysiert oder die Erkenntnisse auf separaten Angriffsversuchen an verschiedenen Standorten basieren. Am Horizont tauchen aber allmählich Tools auf, die das Kartographieren von Netzwerken und Systemen mithilfe des „passiven Scannings" ermöglichen sollen. DISCO von Preston Wood ist ein herausragendes Beispiel.3 DISCO ist erhältlich unter http://www.altmode.com/disco. 254
15.3 Denkanstöße 15.3 Denkanstöße Ich finde es merkwürdig, dass die in diesem Kapitel beschriebenen Techniken nur- sehr' selten Gegenstand umfassender Forschungen, veröffenthchter Untersuchungen oder rasch verfügbarer Tools sind. Angesichts des Angriffserkennungstrends, den die Honigtopfuntersuchungen von Lance Spitzner losgetreten hat und der von Produkten wie Intrusion- Detection-Systemen noch angeheizt wurde, sollte man eigentlich erwarten, nicht besonders viele Versuche zur Erkennung von Angriffen zu sehen (die gewöhnlich ohnehin nicht besonders spannend sind und normalerweise gut dokumentierte Vektoren und Mängel ausnutzen), sondern mehr' Anstrengungen, Herkunft und Absicht einer Attacke zu bestimmen und Ereignisse abzugleichen, die für- sich genommen bedeutungslos sind, aber in Kombination auf ein Problem hinweisen können. Ich habe nur ein wenig Licht auf die Spitze des Eisbergs werfen können; selbstverständlich ist dies einer der Bereiche sein, in denen Forschungen und Beiträge wirklich spannend werden könnten. Und jetzt zu etwas völlig anderem ... 255
Das große Ganze (Von der Verwendung der Aussage „Das Netzwerk ist der Computer" hat uns unsere Rechtsabteilung an dieser Stelle abgeraten.)
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Sechzehntes Kapitel. In dem sich die alte Wahrheit einmal mehr bestätigt, dass man, statt einen Job selbst zu machen, besser seine Lakaien vorschickt Ich hoffe, Ihnen hat die Fahrt bis jetzt Spaß gemacht. Wir haben ein paar illustre Probleme in Zusammenhang mit dem Weg von Daten und ihrem Schutz behandelt - ausgehend von der Eingabe über die Tastatur bis hin zum endgültigen Zielort, der Hunderte oder Tausende von Kilometern entfernt sein kann. Aber es ist noch viel zu früh für uns, eine Party zu schmeißen: Es fehlt noch etwas in unserem Bild. Etwas, das viel größer ist als alles, was wir bislang kennen gelernt haben. Die dunkle Materie. Bislang ist das Roblem unserer Geschichte ganz einfach: Kommunikation findet nicht im luftleeren Raum statt. Zwar beschränkt sich der Vorgang des Datenaustauschs in der Regel auf zwei Systeme und etwa ein Dutzend Zwischensysteme, aber der große Kontext aller Ereignisse darf einfach nicht ignoriert werden: Die Eigenschaften der Umgebung können die Wirklichkeit eines kleinen Plausches zwischen zwei Endpunkten gehörig beeinflussen. Wir dürfen weder die Bedeutung der Systeme, die nicht direkt in die Kommunikation eingebunden sind, noch das Gewicht all der kleinen, scheinbar isolierten und trivialen Ereignisse vernachlässigen, die den Daten auf ihrem Weg zustoßen können. Sich nur auf das zu konzentrieren, was für eine bestimmte Anwendung oder einen speziellen Fall relevant zu sein scheint, kann fatal sein; ich hoffe, dies in den bisherigen Kapiteln bereits unterstlichen zu haben. Statt also blind in diese Falle zu tappen, habe ich beschlossen, mich dem großen System der Dinge in all seiner Herrlichkeit bereitwillig zu stellen. Also wird sich in diesem vierten und letzten Teil des Buches alles um die Sicherheit der Netzwerktechnik als Ganzes drehen: Wir werden das Internet nicht mehr als Ansammlung von Systemen, die bestimmte 259
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Aufgaben erledigen, sondern als Ökosystem beteachten. Dabei zollen wir der scheinbar trägen Masse Tribut, die die Welt zusammenhält. Dieser Teil des Buches beginnt mit der Analyse eines Konzepts, welches für diesen Übergang wohl am geeignetsten ist. Für viele Cornputerfreaks hat dieses Konzept - das so genannte Parasitic Computing (parasitäre Datenverarbeitung) - unsere Sicht des Internets entscheidend revolutioniert. 16.1 Knabbern an der CPU Um ein Haar wäre eine kurze Forschungsarbeit, die von Albert-Laszlo Barabasz, Vincent W. Freeh, Ffawoong Jeong und Jay B. Brochman im Jahr 2001 in Form von Briefen an das Magazin Nature veröffentlicht wurde1, unbeachtet gebheben. Auf den ersten Bhck schien der Beitrag auch nicht besonders viel Beachtung verdient zu haben, denn er beinhaltete eine scheinbar geradezu lachhafte Idee: Die Autoren waren der Ansicht, dass sich im Rahmen etablierter Netzwerkprotokolle wie TCP/IP Daten erstellen ließen, die (als Datennachrichten) einem entfernten Computer eine einfache Rechenaufgabe - also ein zu lösendes Problem - stellten. Das Remote-System würde dieses Problem unbewusst lösen, während es die Nachricht analysierte und eine Antwort vorbereitete. Aber warum sollte jemand seine Zeit damit verschwenden, einer empfindungslosen Maschine Rätsel zu stellen? Was könnte man damit gewinnen? Wäre es nicht ähnlich amüsant, dieses Rätsel selbst zu lösen? Natürlich ist die Antwort recht interessant. Zunächst einmal ist das Lösen von Rätseln mit einem Computer eine Angelegenheit für sich: Ein Großteil der modernen Kryptografie basiert auf der relativen Schwierigkeit, eine Anzahl so genannter nichtpolynomischer Probleme (NP-Probleme)2 zu lösen. NP- vollständige Probleme haben die schlechte Angewohnheit, die Party jedes Codeknackers zum absolut ungünstigsten Zeitpunkt zu sprengen. Die Möglichkeit, sie effizient zu lösen - wahlweise mithilfe enormer Rechenleistung, cleverer Algorithmen oder beidem - würde einen glücklichen Erfinder einen Schritt näher an die Weltherrschaft bringen. Der Anreiz ist also vorhanden, aber wie könnte man das bewerkstelligen? 1 BaraOl In der Kornplexitätstheorie lassen sich polynomische Probleme mit einer Turing-Maschine in einem Zeitraum lösen, der polynomisch proportional zur Eingabelänge (Anzahl oder Größe von Variablen, für die eine Antwort gefunden werden muss) ist Das bedeutet, dass die Zeit, die zur Lösung eines polynomischen Problems erforderlich ist, direkt der Eingabelänge potenziert zu einem konstanten Exponenten entspricht, der auch 0 sein kann (in diesem Fall hängt die Zeit keineswegs von der Eingabelänge ab, wie es etwa bei der Paritätsprüfung der Fall ist). Für nichtpolynomische Probleme gibt es keine bekannten derartigen Lösungen, weswegen ihre Lösung erheblich mehr Zeit erfordern kann, wenn die Eingabelänge sich erhöht (was wiederum beispielsweise eine exponentielle Abhängigkeit anzeigt). Für eine Teilmenge der NP-Probleme — die so genannten NP-vollständigen Probleme — gibt es nachweislich keine Lösungen mit polynomischer Zeit NP-Probleme gelten allgemein als „schwierig" bei nichttrivialen Eingaben, wohingegen P-Probleme weniger aufwändig zu lösen sind 260
16.1 Knabbern an der CPU Die in der genannten Forschungsarbeit vorgestellte Methode ist relativ neuartig. Sie stellt zunächst fest, dass sich viele NP-Probleme in der Mathematik leicht in Forrn boolescher Erfüllbarkeitsgleichungen (SAT-Gleichungen, vom Engl. Satisfiability) darstellen lassen. SAT-Gleichungen stellen diese Probleme als boolesche Logikoperationen dar und konstruieren im Endeffekt eine Folge von Parametern und Variablen (also eine boolesche Formel). Ein klassisches Beispiel einer SAT-Gleichung sieht so aus: P = (x2 XOR x2) AND (~x2 AND x3) In dieser Formel ist P die Formel (also das Problem) selbst, und Xj bis x3 sind binäre Eingaben oder Parameter. Zwar gibt es für die Werte von.rj^ und x3 23 mögliche Kombinationen, aber nur bei einer dieser Kombinationen wird P wahr: x2= 1, x2 = 0, x3 = 1. Aus diesem Grund sprechen wir davon, dass nur dieses Tripel eine Lösung von P ist. Das Suchen von Lösungen für SAT- Gleichungen lässt sich auf die Bestimmung einer Menge von Werten für alle Variablen in der Gleichung reduzieren, für die die gesamte Formel, die diese Variablen enthält, den logischen Wert Wahr hat. Zwar sind einfache Erfüllbarkeitsprobleme wie das oben gezeigte auch ohne Verwendung anderer als des Trial-and-Error-Verfahrens ohne Schwierigkeiten zu lösen, aber komplexere Fälle mit mehreren Variablen sind tatsächlich NP-vollständig; insofern lassen sich andere NP-Probleme auf ErfüllbarkeitsprobleHie in polynomischer (sprich: vernünftiger) Zeit reduzieren. Und hier hegt das Problem. Wir können ein schwieriges NP-Problerne in Form einer SAT- Gleichung formulieren, aber davon haben wir nicht viel Wenn es um komplexe Gleichungen geht, sind selbst die zum Zeitpunkt der Abfassung dieses Textes besten bekannten Lösungsalgorithmen für SAT-Gleichungen nicht effektiver als eine Brute-Force-Suche, bei der alle Möglichkeiten ausprobiert werden und der Wert der Formel für jede Möglichkeit ausgewertet wird. Das bedeutet, dass, wenn wir ein SAT-Problem lösen müssen und genügend Rechenleistung vorhanden ist, um das Angehen dieses Problems auch nur ansatzweise in Beteacht zu ziehen, eine Lösung mithilfe von Brate-Force-Methoden nicht einmal so unvernünftig wäre und wir mit einem komplexeren Ansatz wohl auch nicht viel weiter kämen. Wir könnten es jedenfalls ausprobieren - was haben wir schon zu verlieren? Und hier folgt die Lösung, die die Verbindung zwischen SAT-Problemen und der TCP/EP- basierten Netzwerktechnik birgt. Die gnmdlegende Beobachtung der Forscher ist ziemlich offensichtlich (zumindest für Leute mit einem Wissensstand wie dem typischen Abonnenten von Nahire): Der Prüfsummenalgorithmus von TCP (oder IP), wie wir ihn in Kapitel 9 beschrieben haben, ist - obwohl prinzipiell für einen ganz anderen Zweck entwickelt als zur Lösung von Gleichungen - nichts anderes als eine Anzahl boolescher Operationen, die aufeinanderfolgend an Teilen der eingehenden Nachricht vorgenommen werden. Schließlich lässt sich der Algorithmus auf unterster Ebene auf pure boolesche Logik reduzieren, die an den Wörtern im übertragenen Paket vorgenommen wird. Sie schließen daraus, dass, indem man spezielle Inhalte im Paket - der „Eingabe" - ablegt, das entfernte System dazu bringen kann, eine Reihe von Rechenoperationen durchzuführen und ihre Richtigkeit zu übeipnifen: die Übereinstimmung mit der Priifsuimne, wie sie im TCP- oder IP-Header angegeben ist. 261
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Zwar ist die Operation, die vom Remote-System während der Prüfsummenverifizierung durchgeführt wird, jedes Mal identisch, aber ihre Funktionalität reicht aus, um als universelles Logikgatter verwendet werden zu können (wir kennen diesen Mechanismus aus Kapitel 2). Durch Verschachtelung der tatsächlichen geprüften Eingabe mit sorgfältig gewählten „Steuerwörtem", die die bis dahin berechnete Teilprüfsumme invertieren oder anderweitig abändern, ist es möglich, jede beliebige boolesche Operation auszuführen. Dies wiederum hat zur Folge, dass die SAT-Logik ganz einfach mithilfe einer speziellen Abfolgesteuemng und bestimmter „Eingabebits" in einem Paket rekonstruiert werden kann, sobald die Daten einem Prüfsummenalgorithmus offenbart werden. Auf die eine oder andere Weise gewählte Gleichungsvariablen werden mit festen Wörtern verschachtelt, die benutzt werden, um den aktuellen Prüfsummenwert auf wundersame Weise so zu verwandeln, dass das Ergebnis der nachfolgenden Operation ein bestimmter boolescher Operator ist. Das Endergebnis - der Wert, auf den sich ein Paket aufsummiert - bezeichnet das letztendliche Resultat: den logischen Wert einer Formel, die ausgewertet werden soll. Aus diesem Grund wird der Erfüllbarkeitstest ganz zufällig genau dann vom entfernten Empfänger ausgeführt, wenn der beim Empfang gerade versucht, die Prüfsumme zu verifizieren. Hat die Prüfsurnme den Wert 1 (oder einen anderen Wert, der in unserem SAT- Berechnungssystem einer SAT-Anweisung entspricht, die wahr ist), dann besteht sie den Erfüllbarkeitstest für die Variablenwerte, die für dieses spezielle Paket gewählt wurden, und die Daten werden an die höheren Schichten übergeben und dort weiterverarbeitet. Schlägt die RiifsuHimenverifizierung fehl, dann war die Fonnel nicht erfüllt, und das Paket wild stillschweigend verworfen. Mit anderen Worten: Wenn unsere Eingabebits eine bestimmte Hypothese bezeichnen, dann hat der Empfänger sie entweder verifiziert, oder sie hat sich als falsch erwiesen; je nach Ergebnis werden dann unterschiedliche Folgeaktionen durchgeführt. Femer kann eine Partei, die ein SAT-Problem schnell lösen will, eine Menge aller möglichen Kombinationen von Variablenwerten (Eingaben) für eine gegebene Fonnel vorbereiten, diese mit Daten verschachteln, welche eine Kombination der Eingabewerte mit anderen Werten in wünschenswerter Weise bewirkt, diese Daten in TCP-Pakete verpacken und dann (fast parallel) an eine große Zahl von Hosts in aller Welt versenden. Die Prüfsurnme für ein Paket würde dann manuell auf einen Wert gesetzt, von dem wir wissen, dass die „Hypothese" ihn erzeugen würde, wenn sie wahr wäre, statt ihn tatsächlich zu berechnen. Nur Hosts, die Pakete mit Variablenwerten erhalten, für die die Fonnel den gewünschten Wert zum Ergebnis hätte, würden auf die Daten antworten, während die übrigen Systeme diese Daten aufgrund des Prüfsummenfehlers als beschädigt erachten würden. Auf diese Weise kann der Absender die korrekte Lösung bestimmen, ohne umfangreiche Berechnungen durchfuhren zu müssen, und dann einfach die Menge der Werte vermerken, die in Paketen verwendet worden waren, welche an Hosts gesendet wurden, die auf eine Anfrage antworteten. Die Forschungsarbeit fährt dann fort und berichtet von einem erfolgreichen Versuch, ein NP-Problem mithilfe echter Hosts überall auf der Welt zu lösen; insofern bietet sie nicht 262
16.2 Praktische Aspekte nur den theoretischen Hintergrund, sondern auch den tatsächlichen Nachweis für die Durchführbarkeit des Ansatzes. Die Auswirkungen dieser Technik sind zwar subtil, doch auch wichtig: Es stellt sich nämlich heraus, dass es möglich ist, Berechnungen effektiv auf ahnungslose und unwillentliche Remote-Systeme im Netzwerk „auszulagern". Dies betrifft auch Operationen, die erforderlich sind, um praxisbezogene Cornputerproblerne zu lösen. Dabei werden diese Systeme nicht im eigentlich Sinne angegriffen, übernommen oder mit bösartiger Software infiziert; auch eine anderweitige Beeinträchtigung rechtmäßiger Aufgaben findet nicht statt. Eine Person kann auf diese Weise mit großer Effizienz eine bestimmte Berechnung auf eine sehr große Anzahl von Systemen verteilen. Zwar werden bei diesem Vorgang nur winzige und vemachlässigbare Bruchteile der Rechenleistung eines Systems verwendet, aber nichtsdestoweniger können sich Millionen solcher Systeme, die ein Problem gemeinsam bearbeiten, schnell zur Leistungsfähigkeit eines echten Supercomputers aufaddieren. Steht die Weltherrschaft vor der Tür? Nun, so weit ist es noch nicht. 16.2 Praktische Aspekte Zumindest noch nicht ganz. Der in der bereits erwähnten Arbeit beschriebene Ansatz ist revolutionär und interessant, stellt aber nicht unbedingt eine besonders praktische Möglichkeit dar, nach dem Motto „Stehle von den Reichen" einen Supercomputer zu bauen. Das Ausmaß der Bandbreite, die für die Aufrechterhaltung einer ordentlichen Rechengeschwindigkeit erforderlich ist, und die Anzahl der Berechnungen, die notwendig sind, damit die anderen Systeme etwas zu lösen haben, sind ziemlich hoch. Infolgedessen ist dieser Ansatz nicht effizient genug, um die Lösung komplexer mathematischer Probleme einem globalen Supercluster willenloser Opfer zu übertragen. Im bereits erwähnten Ansatz wird die Erfordernis exponentieller Rechenleistung gegen die Anforderung exponentieller Bandbreite ausgetauscht. Das muss kein besonders vorteilhafter Handel sein, zumal - wenn man die Beschränkungen bei den Paketgrößen in den meisten Netzwerken berücksichtigt - nur relativ einfache Tests hinausgeschickt werden können. (Sie alle ließen sich wahrscheinlich auch in der Zeit lösen, die benötigt wird, um die entsprechenden Daten über Ethernet zu versenden.) Diese Methode beweist, dass ein solcher Angriff möglich ist, und schildert ein wahrhaft universelles Szenario, um ihn zu ermöglichen; wenn man aber speziellere Angriffsszenarien verwendet, könnte man zu weitaus nützlicheren Ergebnissen gelangen. Andere Möglichkeiten, Rechenleistung in für einzelne Systeme vemachlässigbarem Ausmaß zu stehlen, sind wahrscheinlich interessanter und stellen Gelegenheiten dar, billig an Rechenleistung in beeindruckendern Umfang zu gelangen. So lassen sich beispielsweise bestimmte Alten von Clientprogrammen (z. B. Webbrowser) ganz einfach verwenden, um sogar ziemlich komplexe Algorithmen auf recht einfache Weise auszuführen. Ein solches 263
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Beispiel - das in RFC36073 beschriebene Rechenscherna einer „chinesischen Lotterie" - wird von einem kleinen Java-Applet verwendet, dessen Einsatz auf Webseiten Webmastern auf der Website md5crk.com von Jean-Luc Cooke an Herz gelegt wird. Sobald dieses Applet auf einer Site vorhanden ist, kann jeder Besucher der Site es auf seinem System ausführen und so eine vernachlässigbare Menge CPU-Zyklen verleihen, die dann als Beitrag zu einem Projekt dienen, dessen Sinn die Ennittlung von Kollisionen bei MD5- Verkürzimgsfunktionen ist. (Kollisionen sind zwei verschiedene Meldungen, die dieselbe Verkürzung erzeugen. Sie sind schwer fassbare und anekdotische, aber definitiv mögliche Kreaturen4, die es uns gestatten, die Schwächen von Verkürzungsfunktionen besser zu verstehen, und könnten empirisch nachweisen und veranschaulichen, dass MD5 zu schwach ist, um gegen moderne Computer bestehen zu können.) Java-Applets sind kleine, nicht plattformspezifische Programme, die von Webbrowsern standardmäßig in speziellen, eingeschränkten Umgebungen - so genannten Sandboxen - ausgeführt werden. Sie haben keinen Zugriff auf die lokalen Festplatten und können (zumindest in der Theorie) keinen Schaden anrichten, auch wenn sie eingeschränkte Netzwerkkonnektivität zur Durchfuhrung von Berechnungen und zum Hinzufügen bestimmter optischer Elemente zu einer Webseite nutzen können. Ihr Zweck ist normalerweise die Erweiterung der Websitefunktionalität beispielsweise mit interaktiven Spielen, optischen Effekten usw. Jean-Luc verwendete diese Applets aber zu einem ganz anderen Zweck: Er wollte potenzielle Kandidaten für Kollisionen suchen und hierzu die vereinte Leistung Hunderter oder Tausender von Systemen in aller Welt gleichzeitig einzusetzen. Das Prinzip, auf dem der Betrieb des Applets basierte, war simpel: Es wurde auf Clientsystemen weltweit ausgeführt, sobald eine entsprechende Website besucht wurde. Einmal gestartet, versuchte das Applet, MD5-Verkürzungen für verschiedene, willkürlich ausgewählte Nachrichten zu erstellen. Dies tat es, bis eine Verkürzung gefunden wurde, die einem bestimmten, behebig ausgewähltem und feststehenden Maskenmuster entsprach. Ein solches Muster könnte etwa die Form ,jede Verkürzung, bei der die letzten vier Bytes null sind" oder etwas Ahnliches haben. Das Muster wurde so gewählt, dass es nicht zu lang dauerte, nach dem Trial-and-Error-Prinzip eine passende Verkürzung zu finden (damit der Besucher die Website nicht verlassen und so die Ausführung vorzeitig beenden würde), und dass auch nur ein kleiner Teil aller möglichen Verkürzungen der Regel entspräche. Leec03 Während die Drucklegung dieses Buches vorbereitet wurde, berichtete ein Teain chinesischer Forscher der Universität Shandong (bestehend aus den Mitgliedern Xiaoyun Wang, Dengguo Feng, Xuejia Lai und Hongbo Yu) von einer Methode zur Ermittlung von Kollisionen der Algorithmen MD4, MD5, HAVAL-128 und RTPEMD-128 und brachte auch entsprechende Beispiele. Dies ist eine der wichtigsten Neuigkeiten in der modernen Kryptografie. Sie bestätigt, dass diese Funktionen für einige sicherheitsspezifische Anwendungen ungeeignet sind. Zwar wurde das Projekt md5crk.com mittlerweile eingestellt, aber sein Beitrag zur Erforschung des Parasitic Computing bleibt bedeutend. 264
16.3 Parasitic Storage - früher Wurde eine passende Nachricht gefunden, dann meldete das Programm den Kandidaten „nach Hause" zurück. Der Autor konnte die übermittelten Ergebnisse dann untersuchen. Das Applet hatte bereits eine Anzahl von Kollisionskandidaten untersucht und aussortiert und nur diejenigen gemeldet, die einer vordefinierten Bedingung entsprachen (diese waren zumindest teilweise identisch). Aufgrund der wesentlich geringeren Abweichung bei derartig ermittelten Angaben ist die Wahrscheinlichkeit einer Kollision in einer Gruppe von n Einträgen beträchtlich höher als bei vollkommen wahllos ausgesuchten Daten. Analog könnte man sagen: Die Wahrscheinlichkeit, in einem Obsthaufen, den wir innerhalb eines Tages durchwühlen können, zwei optisch völlig ununterscheidbare Äpfel zu finden, ist deutlich höher, wenn wir statt einer Ladung wahllos zusammengewürfelter Früchte lediglich Äpfel annähernd gleicher Größe und Farbe bestellen. Zwar funktionierte dieser geniale Ansatz, der bei md5crk.com erstmals eingesetzt wurde, in der Grauzone der Cyberethik zunächst recht gut und veranschaulichte, wie effektiv und auch unauffällig Parasitic Computing sein kann. Es hat den Anschein, dass die Möglichkeit, Prozessorzyklen zu stehlen, die ursprünglich für „rechtmäßige" Zwecke vorgesehen waren, durchaus, realistisch ist - und möglicherweise häufiger eingesetzt wird, als wir es wollen. Und diese Möglichkeit wird uns noch eine Zeit lang erhalten bleiben. Doch kann, so entgegnet uns der Skeptiker ungeduldig, Parasitic Computing denn mehr, als nur ein paar wenige Prozessorzyklen abknabbern, um Verschlüsselungssysteme zu knacken? Schließlich ist dies eine Aufgabe, an der die überwiegende Mehrheit von uns nicht unbedingt interessiert ist. 16.3 Parasitic Storage - früher Wenn Sie einen Schrei ausstoßen, bewegen sich Schallwellen durch die Luft, die nach und nach ihre Energie verlieren und in alle Richtungen verstreut werden. Treffen sie jedoch bei der Ausbreitung auf ein festes Hindernis, dann werden sie zurückgeworfen - und zwar, wenn der Winkel stimmt, genau in Ihre Richtung. Hörbare Folge ist, dass Sie einen Sekundenbrachteil nach Ihrem Schrei das Echo Ihrer Stimme hören. Was aber passiert, wenn ein Prograrnrnierfreak oben auf einem Berg steht, volltönend seinen Code rezitiert und seine Stimme dabei in Richtung eines Felsentals erhebt? Ich dachte schon, Sie würden nie fragen. In diesem Fall wird er nicht um eine kluge Beobachtung umhin kommen: Wenn er schnell rezitiert und das Rezitierte dann sofort vergisst (da er just in diesem Moment mit anderen Angelegenheiten beschäftigt ist), kann es trotzdem wiedergewinnen, indem er dem Echo lauscht, welches aus dem Tal zu ihm heraufdringt. Sieh mal einer an: eine wirklich praktische Datenspeicherrnethode. Klingt absurd? Vielleicht sind wir auch einfach nur zu jung. Frühe Cornputerspeichermo- dule verwendeten eine ähnliche akustische Methode, die dem Prozessor die „Offlinespei- chemng" von Daten und ihre spätere Wiederherstellung gestattete. Statt Luft zu verwenden, über die sich die Wellen ein bisschen zu schnell ausbreiten, um vernünftige Speicher- 265
16 Parasitic Computing, oder: Kleinvieh macht auch Mist kapazitäten ohne Konstruktion extrem großer Speichereinheiten erzielen zu können, verwendete man eine Umgebung, in der sich Schallwellen wesentlich langsamer ausbreiten: eine mit Quecksilber gefüllte Trommel. Das Rinzip war jedoch dasselbe (und verlieh dem Begriff Speicherleck eine ganz interessante zusätzliche Dimension). Ein solches Gerät - das Mercury Delay-Line Memory (quecksilberbasierter Laufzeitkettenspeicher) - wurde beispielsweise im berühmten UNTVACI eingesetzt.5 Natürlich wurde dieser langsame, klobige, gefährliche und unpraktische Speichertyp fallengelassen, sobald andere technische Lösungen ausgereift waren. Die Erfindung selbst wies allerdings einen gewissen Charme auf und sollte nicht so leicht in Vergessenheit geraten. Eine kurze Präsentation von Saqib A. Khan bei der DefCON-Konferenz in Las Vegas im Jahr 2002 belebte sie neu und gab uns erste Hinweise auf die Frage, wie man die Eigenschaften eines umfangreichen Netzwerks zur Bildung ähnlicher Formen von Kurz- zeitspeichem rnithilfe des Internets als Medium ausnutzen kann. Diesmal allerdings klang die Beschreibung eines akustischen Speichers in den Ohren all der Hacker und Freaks, die der Präsentation beiwohnten, nicht lächerlich und primitiv, sondern eher unglaublich cool. Der akustische Speicher feierte fröhliche Urständ. Weil die RTT (Round-Trip Time, Rundreisezeit, also die Zeit, die vergeht, bis ein Paket bei einem Remote-System eintrifft und der Absender die zugehörige Antwort erhält) ungleich null ist, lässt sich eine bestimmte Datemnenge immer „in der Leitung" halten, indem man Teile davon fortlaufend sendet, empfangt und auf Echos wartet. Saqib Khan verwendete zur Erzielung dieses Effekts ICMP-Echoanforderangspakete (Ping-Pakete); die meisten Systeme im Internet reagieren auf diese Pakete mit Echoantworten, die auch die ursprünglich gesendeten Nutzdaten enthalten. Dies war offenbar ein wirklich cooler Trick. Allerdings schien er auch weit davon entfernt, für irgendeine Anwendung vernünftig einsetzbar zu sein, denn er erforderte die häufige Neuübeitragung von Datenblöcken. Da die ICMP-Echoantwort praktisch unmittelbar nach dem Empfang der Echoanfördemng zurückgeschickt wird, lässt sich nur eine gelinge Menge Daten hinausschicken, bevor sie zurückgesendet wird und aus der Übertragung wiederhergestellt werden muss. Infolgedessen ist die auf diese Weise „speicherbare" Datemnenge nicht größer als die Menge, die der Benutzer innerhalb von maximal wenigen Sekunden versenden kann (wobei ein Wert von weniger als einer Zehntelsekunde wohl realistischer ist). Doch: Auch Parasitic Storage lässt sich optimieren. Man sollte vielleicht erwähnen, dass ein analoger Laufzeitkettenspeicher geringer Kapazität auch in fiühen Implementierungen von SECAM-TV-Einpfangem verwendet wurde. Anders als bei den TV- Systemen NTSC oder PAL verwendet das SECAM-Signal eine verringerte Farbauflösung: Die Chro- minanzkomponenten für Rot und Blau werden nicht gleichzeitig, sondern abwechselnd übertragen. Die andere Komponente muss dann der vorangehenden Kette entnommen werden, um bestimmen zu können, wie ein bestimmter Bildpunkt aussehen muss. Aus diesem Grund musste eine Speichermöglichkeit implementiert werden. 266
16.4 Parasitic Storage - heute 16.4 Parasitic Storage - heute Im Jahr 2003 verfassten Wojciech Purczynski und ich gemeinsam einen Artikel namens „Juggling with Packets: Parasitic Data Storage". Wir fühlten das Konzept des Parasitic Storage ein wenig fort und untersuchten eine Reihe von Methoden, mit denen sich die Speicherkapazität des Internets erheblich erweitem ließ, während gleichzeitig die zur Aufrechterhaltung der Daten erforderliche Bandbreite verringert wurde. Bei unseren Untersuchungen konzentrierten wir uns auf andere Möglichkeiten der Datenspeicherung auf entfernten Systemen und kategoiisierten diese basierend auf wichtigen Eigenschaften des Speicherrnediurns: Sichtbarkeit, Flüchtigkeit und Zuverlässigkeit. Außerdem fügten wir eine detaillierte Beschreibung der hypothetischen Speicherkapazitäten für jede der Methoden an. Der Artikel war recht kurz und - wie ich glaube - erfrischend und humorvoll. Deswegen möchte ich ihn an dieser Stelle aufnehmen. Mit Paketen jonglieren: Parasitic Storage "Euer Kerker ist auf einem Abhang gebaut. Und die Monster können nicht gut mit Murmeln spielen!" Wojciech Purczynski <cliph@isec.pl> Michal Zalewski <lcamtuf@coredump.cx> 1) Jonglieren mit Orangen! Die meisten Leute - darunter auch die Autoren dieses Artikels - haben bereits einmal versucht, mit drei oder mehr Äpfeln, Orangen oder anderen zerbrechlichen Objekten ballistischer Art zu jonglieren. Die Folgen sind in der Regel recht peinlich, aber der beflissene Jonglieradept wird früher oder später gelernt haben, wie es funktioniert, ohne umfassende Kollateralschäden in Kauf nehmen zu müssen. Ein besonders heller Jungjongleur wird vielleicht sogar bemerken, dass, solange er eine einfache Vorgehensweise befolgt, immer mindestens eines der Objekte in der Luft ist und er maximal zwei Objekte gleichzeitig festhalten muss. Doch ab und an rutscht ihm doch immer wieder ein Apfel durch die Finger, und dieses Verhalten lässt sich sogar bewusst steuern. Nachdem er ein wenig Spaß beim Jonglieren gehabt hat, gelangt er unter Umständen irgendwann zu der Einsicht, dass das Ganze doch ziemlich langweilig ist, und wendet sich wieder seinem Computer zu. Wenn er dann seine E-Mails abruft, wird der geübte Jongleur feststellen, dass eine normaler Netzwerkdienst genau eine Aufgabe hat: Daten, die von einem entfernten System stammen, anzunehmen und zu verarbeiten und alle Schritte durchzuführen, die seiner Ansicht nach basierend auf der Interpretation der Daten erforderlich sind. Viele solcher Dienste geben ihr Bestes in Sachen Robustheit, Fehlertoleranz und der Bereitstellung nützlicher Rückmeldungen zu den Transaktionen. In vielen Fällen kann die schlichte Tatsache, dass ein Dienst versucht, die Daten zu verarbeiten und protokollkonform zu beantworten, auf eine Weise genutzt werden, von denen die Entwickler seinerzeit niemals zu träumen gewagt hätten. Eines der spektakulärsten Beispiele, mit dem auch unser junger Gaukler vertraut sein könnte, ist eine Untersuchung an der Universität Notre Dame, die als "Parasitic Computing" bezeichnet wird und in Briefform im Magazin "Nature" veröffentlicht wurde. 267
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Nichtsdestoweniger nimmt unser Held an, dass solche Versuche im wirklichen Leben ziemlich impraktikabel sind. Die Kosten für Vorbereitung und Übermittlung zu lösender Rätsel übersteigen den Nutzen bei weitem, denn der Absender muss bereits Operationen vergleichbarer Rechenkomplexität durchführen, um nur die Anfrage absetzen zu können. "Die Rechenleistung eines solchen Geräts ist erbärmlich!", sagt er sich. Ein echter Geschicklichkeitskünstler würde sich nun einer anderen Art ausgelagerter Datenverarbeitung zuwenden - einer, die seinen Kenntnissen wesentlich mehr entspricht. Warum etwa sollte man nicht einfach einen verteilten, obstbasierten Datenspeicher implementieren? "Angenommen, ich schriebe einen einzelnen Buchstaben auf jede Orange und fange dann an, zu jonglieren. Dann könnte ich mehr Orangenbytes speichern, als es meine physische Kapazität zuließe (vulgo-. mehr Orangen aufnehmen, als ich mit meinen Händen halten könnte)!" Brillant. Aber würde das auch ohne Orangen klappen? 2) Das Gleiche noch mal. Jetzt ohne Orangen Dieser Artikel fußt auf der Beobachtung, dass es in der gesamten Netzwerkkommunikation immer eine Latenz zwischen dem Versand von Daten und dem Erhalt einer Antwort gibt. Diese Latenz ist stets ungleich null (und häufig sogar beträchtlich) - eine Folge der physischen Beschränkungen des Mediums und der Zeit, die die beteiligten Computersysteme benötigen, um die Daten zu verarbeiten. Wie eine Orange mit einer darauf geschriebenen Nachricht benötigt auch ein Paket, in dem Daten gespeichert sind, eine gewisse Zeit, bevor es zum Absender zurückkommt. Und für genau diese Zeit können wir diesen Paketinhalt getrost vergessen, ohne dass er uns verloren ginge. Insofern hat das Internet die Kapazität eines Kurzzeitspeichers-. Es ist möglich, ein Datenelement hinauszuschicken - woraufhin es im Endeffekt gespeichert ist -, bis wir es in Form einer Antwort zurückerhalten. Indem man eine Methode zur zyklischen Übertragung von Datenblöcken an und ihrer Inempfangnahme bei Remote-Hosts entwickelte, könnte man eine beliebige Menge von Daten konstant "in der Leitung" halten und auf diese Weise ein flüchtiges Medium hoher Kapazität erstellen. Dieses Medium kann für speicheraufwändige Operationen wahlweise als regulärer Speicher dienen oder für bestimmte Arten sensibler Daten verwendet werden, die keine physischen Spuren auf Festplatten oder anderen nichtflüchtigen Medien hinterlassen sollten. Da es nicht als schlechte Programmierpraxis gilt, so viele relevante Daten an den Absender zurückzuschicken, wie dieser an den Dienst gesendet hat, und viele Dienste oder Stapel ein hohes Maß an Ausführlichkeit an den Tag legen, sagt uns unsere Jongliererfahrung, dass es nicht nur möglich, sondern auch durchaus machbar ist, einen solchen Speicher einzurichten - und zwar auch über eine langsame Netzwerkanbindung. Anders als herkömmliche Methoden des Parasitic Storage (wie dem Missbrauch von P2P- Technologien, offenen FTP-Servern, binären Usenet-Postings usw.) kann diese spezielle Methode eine Datenspur hinterlassen oder auch nicht; dies hängt von der Art und Weise der Implementierung ab. Außerdem ist die Belastung der einzelnen Systeme nicht spürbar. Aus diesem Grund ist die Gefahr, dass eine solche Methode als Missbrauch bewertet oder überhaupt entdeckt wird, wesentlich geringer als bei traditionellen Ansätzen. Insofern ist auch die Möglichkeit, dass die Daten abgehört oder gezielt gelöscht werden, wesentlich geringer. 3) Klasse-A-Datenspeicherung: Speicherpuffer Klasse-A-Datenspeicher nutzen die Kapazität, die Laufzeiten innewohnt, welche aufgrund der Übertragung oder Verarbeitung von Daten bei der Kommunikation zwischen zwei Endpunkten über Netzwerke auftreten. Die in ihnen abgelegten Daten bleiben im Speicher eines Remote-Gerätes gespeichert und werden mit hoher Wahrscheinlichkeit nicht auf eine Festplatte ausgelagert . 268
16.4 Parasitic Storage - heute Beispiele für Klasse-A-Speicher sind eine Vielzahl von Konstruktionen, die auf das Versenden einer Nachricht setzen, von der bekannt ist, dass sie als Echo teilweise oder vollständig zurückgeschickt wird. Hierzu gehören die folgenden Paketarten: - SYN+ACK-Pakete, RST+ACK-Antworten auf SYN-Pakete und ähnliche Rückmeldungen - ICMP-Echoantworten - DNS-Lookup-Antworten und -Cachedaten. Es ist möglich, ein paar Daten in einer Lookup-Anfrage zu speichern, die dann mit einer NXDomain- Antwort zurückgesendet wird, oder Daten in einem DNS-Cache abzulegen. - Serverübergreifendes Message-Relaying in Chatnetzwerken. Das Relaying von Textmeldungen über IRC-Server o. ä. kann eine beträchtliche Latenz an den Tag legen. - Fehler- oder Statusantworten von HTTP, FTP, Web-Proxy oder SMTP Die wichtigsten Eigenschaften von Klasse-A-Speicher sind: - niedrige Latenz (zwischen Millisekunden und einigen Minuten), was die Nützlichkeit für Quasi-RÄM-Anwendungen erhöht - niedrigere Kapazität je System (gewöhnlich im Kbyte-Bereich), weswegen er für massive Speicheranforderungen weniger geeignet ist - nur eine Gelegenheit zum Empfang oder wenige Neuübertragungen, wodurch im Falle eines Netzwerkfehlers die Zuverlässigkeit beeinträchtigt wird - geringere Wahrscheinlichkeit einer permanenten Aufzeichnung (die Daten werden wohl nicht auf einem nichtflüchtigen Medium gespeichert oder ausgelagert; dies verbessert den Datenschutz und AbStreitbarkeit) Insbesondere bei der Verwendung von Protokollen höherer Ebenen treten weitere Merkmale auf, die einige der Probleme in Verbindung mit der geringen Kapazität und den kurzen Wiederherstellungsfenstern lösen könnten, die verschiedenen Klasse-A-Speichern gemein sind. So ist es beispielsweise möglich, eine Verbindung mit SMTP, FTP, HTTP oder irgendeinem anderen textbasierten Dienst herzustellen und einen Befehl zu senden, von dem bekannt ist, dass er zu einer Bestätigung oder Fehlermeldung führt, die neben einem Teil der Ursprungsdaten zurückgemeldet werden. Allerdings senden wir keine vollständige formatierte Nachricht, sondern lassen einige erforderliche Zeichen ungesendet. In den meisten Fällen wird ein EOL- Zeichen (Zeilenende) benötigt, um den Befehl abzuschließen. In diesem Zustand sind unsere Daten bereits beim entfernten Dienst gespeichert, der auf den Abschluss des Befehls oder eine Zeitüberschreitung der Verbindung wartet. Um Zeitüberschreitungen auf der TCP- oder der Anwendungsebene zu verhindern, müssen regelmäßig operationsfreie Pakete (no-op-Pakete) gesendet werden. Das Zeichen \0 wird als Leerstring interpretiert, der bei vielen Diensten keine Wirkung hervorruft, aber ausreicht, die Timer von TCP und Dienst zurückzusetzen. Ein bekanntes Beispiel für eine Anwendung, die hierfür anfällig ist, ist Microsoft Exchange. Der Angreifer kann die Verbindung beliebig lange aufrechterhalten - am anderen Ende der Leitung wird für den gesamten Zeitraum ein Datenelement gespeichert. Um die Daten abzurufen, muss der Befehl nur mit dem fehlenden Abschlusszeichen \r\n beendet werden. Die Antwort wird dann an den Client gesendet. Ein gutes Beispiel ist der SMTP-Befehl VRFY: 220 inet-imc-01.redmond.corp.microsoft.com Microsoft.com ESMTP Server Thu, 2 Oct 2003 15:13:22 -0700 VRFY AAAA. . . 252 2.1.5 Cannot VRFY user, but will take message for <AAAA...Omicrosoft.com> 269
16 Parasitic Computing, oder: Kleinvieh macht auch Mist Es lassen sich auf diese Weise etwas mehr als 300 Bytes (einschließlich nichtdruckbarer Zeichen) speichern - und praktisch sofort wieder abrufen. Abhängig von der Serversoftware lassen sich mehr Daten speichern, wenn die HTTP-Methode TRACE in Verbindung mit Daten verwendet wird, die in beliebigen HTTP-Headern übergeben werden. Aufrechterhaltene Verbindungen bieten uns beliebig viel Latenz, wodurch eine erhebliche Speicherkapazität entsteht. Diese Speicherungsform ist natürlich besser für datenschutzkritische Anwendungen oder eine latenzarme Speicherung geringer bis mittlerer Kapazität geeignet (direkte RAM-erweiternde Speicherung für Daten, die keine sichtbaren Spuren hinterlassen sollen). Sie ist hingegen für kritische Daten, die keinesfalls verloren gehen dürfen, äußerst ungeeignet, weil genau dies bei einem Ausfall des Netzwerks passieren könnte. 4) Klasse-B-Datenspeicherung: Festplatten-Warteschlangen Klasse-B-Datenspeicher verwenden "untätige" Datenwarteschlangen, die Daten für längere Zeit speichern (wobei die Speicherung durchaus auf der Festplatte erfolgen kann). MTA-Systeme beispielsweise können E-Mail- Nachrichten bis zu sieben Tage lang speichern (konfigurationsabhängig auch noch länger). Diese Funktionalität bietet uns eine lange Verzögerung zwischen dem Versand der zu speichernden Daten auf dem Remote-Host und ihrem Abruf. Da ein SMTP-Server die Weiterleitung von E-Mail an den sendenden Client selbst in der Regel unterbindet, lassen sich Mailrücksendungen verwenden, um die gespeicherten Daten erst nach längerer Zeit zu empfangen. Betrachten Sie etwa folgendes potenzielle Angriffsszenario-. 1. Der Benutzer erstellt eine Liste der SMTP-Server (und zwar möglichst solcher, die nach menschlichem Ermessen außerhalb der Reichweite des Feindes liegen). 2. Der Benutzer sperrt (mit "block/drop", nicht mit "reject") alle eingehenden Verbindungen auf seinem Port 25. 3. Für jeden Server muss der Angreifer die Zeitüberschreitungen für die Datenübermittlung und die IP-Adresse kontrollieren, mit der er eine Rückverbindung herstellen will, solange er versucht, die Daten zurückzuschicken. Dies kann mithilfe einer passenden Probe an eine lokale Adresse auf dem Server (oder der Anforderung einer DNS- Benachrichtigung für eine gültige Adresse) geschehen; danach überprüft man, wie lange der Server eine Rückverbindung herzustellen versucht, bevor er aufgibt. Der Server selbst muss kein offener Weiterleitungsserver sein. 4. Nach der Kontrolle der Ziele beginnt der Angreifer mit dem Versand von Daten. Die Versandgeschwindigkeit ist dabei so gewählt, dass der Vorgang sich gleichmäßig über den Zeitraum einer Woche verteilt. Die Daten sollten so unterteilt werden, dass jeder Server einen Datenblock erhält. Jeder Block wird an einen separaten Server gesendet, um sofort eine Rückantwort an den Absender zu erzeugen. 5. Der Vorgang der Datenpflege lässt sich auf die Annahme einer eingehenden Verbindung und den Empfang der Rückantwort maximal eine Woche nach dem ursprünglichen Versand reduzieren - just zu dem Zeitpunkt, bevor der Eintrag aus der Warteschlange entfernt wird. Dies wird gemacht, indem dem betreffenden Server gestattet wird, die Firewall zu überwinden. Unmittelbar nach dem Empfang des Datenblocks wird dieser wieder zurückgeleitet. 6. Um auf Datenelemente zugreifen zu können, überprüft der Angreifer, welcher MTA den betreffenden Block enthält, und gestattet dieser IP dann, eine Verbindung herzustellen und die Rückantwort auszuliefern. Dabei sind drei Szenarien möglich: 270
16.4 Parasitic Storage - heute - Wenn der entfernte MTA den Befehl ETRN unterstützt, dann kann die Auslieferung sofort durchgeführt werden. - Befand sich der entfernte MTA-Server innerhalb eines Drei-Minuten- Zyklus beim Versuch, eine Verbindung zu einem lokalen System herzustellen (was er immer wieder probiert, da seine SYN-Pakete verworfen werden, statt mit RST+ACK abgewiesen zu werden), kann die Verbindung innerhalb von Sekunden hergestellt werden. - Andernfalls ist es erforderlich, je nach Warteschlangeneinstellungen zwischen fünf Minuten und einer Stunde zu warten. Dieses Schema lässt sich durch Verwendung von DNS-Namen anstelle von IP- Adressen für Benutzer erweitern, die mit dynamischen IP-Adressen arbeiten, oder kann zusätzlichen Schutz bieten (wenn es etwa notwendig ist, die Kette sofort zu durchtrennen). Die wichtigsten Eigenschaften von Klasse-B-Speicher sind: - hohe Kapazität (mehrere Mbyte) pro System, was ihn zur perfekten Lösung für die Speicherung großer Dateien usw. macht - höhere Zugriffslatenz (Minuten bis Stunden), weswegen eher eine Ähnlichkeit mit einem Bandgerät als mit RAM vorliegt (ausgenommen sind SMTP-Hosts, die den Befehl ETRN akzeptieren, mit dem eine sofortige Neuauslieferung versucht wird) - sehr lange Lebensdauer, zunehmende Kapazität pro Benutzer und mehr Zuverlässigkeit - viele Zustellungsversuche, was die Wiederherstellung der Daten auch nach vorübergehenden Netzwerk- oder Hardwareproblemen einfach gestaltet - hohe Wahrscheinlichkeit hinterlassener Spuren auf Speichergeräten, deswegen als Lösung für vollständig abstreitbare Speicherung weniger geeignet (obwohl hierfür eine große Zahl fremder Systeme überprüft werden müsste, was nicht unbedingt realisierbar sein muss) Klasse-B-Speicher ist geeignet zur Ablage regulärer Dateiarchive, großer Puffer, an die Daten lediglich angehängt werden, verschlüsselter Ressourcen (bei geeigneter Auswahl der Hosts bleibt die Speicherung praktisch abstreitbar) usw. 5) Diskrete Klasse-A-Speicherung In bestimmten Situationen kann es notwendig sein, eine Lösung für die diskrete Datenspeicherung zu finden, die nicht auf dem lokalen System selbst erfolgt und es so ermöglicht, die Existenz der Daten an irgendeinem Ort abzustreiten. Die Grundanforderung besteht darin, dass die Daten - erst zurückgesendet werden, wenn eine bestimmte Schlüsselfolge gesendet wird, - permanent verworfen wird, ohne Spuren auf nichtflüchtigen Speichermedien zu lassen, wenn Keepalive-Anfragen ausbleiben. Diese Funktionalität lässt sich mit Klasse-A-Speicher implementieren. Hierzu wird die weiter oben beschriebene Methode zur Aufrechterhaltung verwendet. Um die Daten freizugeben, ist die passende TCP-Sequenznummer erforderlich, und erst, wenn diese Nummer übermittelt wird, werden die Daten zurückgegeben oder einem Absender offenbart. Geht der Clientknoten offline, dann werden die Daten verworfen und mit hoher Wahrscheinlichkeit überschrieben. Insofern ist die Sequenznummer der Schlüssel zu den gespeicherten Daten. Wenn die Lebensdauer der Daten eher kurz ist, nachdem die Keepalives (\0) ausbleiben, dann ist dies oft bereits ein ausreichender Schutz. 271
16 Parasitic Computing, oder: Kleinvieh macht auch Mist 6) Kapazität im Benutzerzugriff In diesem Abschnitt werden wir versuchen, die Speicherkapazität abzuschätzen, die einem einzelnen Benutzer verfügbar ist. Um fortlaufend eine konstante Menge Daten in das Netzwerk "auszulagern", müssen wir sie mit schöner Regelmäßigkeit empfangen und wieder zurücksenden können. Der Zeitraum, für den die Daten entfernt gespeichert werden können, ist durch die maximale Lebensdauer Tmax eines einzelnen Pakets begrenzt (dies beinhaltet auch das Einreihen des Pakets in die Warteschlange und Verarbeitungsverzögerungen) . Die maximale Menge von Daten, die sich senden lassen, ist durch die maximal verfügbare Netzwerkbandbreite L beschränkt. Die maximale Kapazität lässt sich mithin wie folgt definieren-. Cmax [Byte] = L [Byte/s] • Tmax [s] ^- Pg • Dg Hierbei gilt: Dg ist die zur Speicherung des ersten Teils eines Datenblocks auf einem Remote-Host erforderliche Paketgröße. Pg ist die zur Aufrechterhaltung der auf dem Remote-Host gespeicherten Daten erforderliche Paketgröße. Pg und Dg sind gleich und können immer dann weggelassen werden, wenn der gesamte Datenblock hin- und hergesendet wird; sie unterscheiden sich nur für Szenarien mit Aufrechterhaltungsbefehlen. Das kleinste TCP/IP-Paket, mit dem sich dies erzielen lässt, hat 41 Bytes. Die maximale Datenmenge, die sich mithilfe HTTP-Headern aufrechterhalten lässt, liegt bei etwa 4.096 Bytes. Hieraus ergibt sich die folgende Auflistung-. Bandbreite I Klasse A I Klasse B 28,8 Kbit/s 255 Kbit/s 2 Mbit/s 100 Mbit/s 105 Mbyte 935 Mbyte 7,3 Gbyte 355 Gbyte 2 Gbyte 18 Gbyte 14 7 Gbyte 7 Tbyte Das Internet als Ganzes In diesem Abschnitt schließlich wollen wir versuchen, die theoretische Kurzzeitkapazität des gesamten Internets zu berechnen. Klasse A-. Um die gesamte theoretischen Kapazität von Klasse-A-Speichern im Internet bewerten zu können, gehen wir von folgenden Voraussetzungen aus-. - ICMP-Meldungen bieten die beste Balance zwischen Speicherkapazität und Erhalt der Ressourcen eines Remote-Systems. - Ein Betriebssystem hat durchschnittlich eine Paketeingangs- Warteschlange, die mindestens 54 Pakete aufnehmen kann. - Die Standard-PMTU liegt bei etwa 1.500 (dies ist die häufigste MTU). Zur Schätzung der Anzahl von Hosts im Internet verwendeten wir als Grundlage ein Gutachten des ISC für das Jahr 2003, welches 171.538.297 Systeme mit Reverse-DNS-Einträgen aufweist (wobei nicht alle IP-Adressen mit Reverse-DNS funktionsfähig sein müssen). Um dies zu berücksichtigen, benutzten wir das ICMP-Echoantwortverhältnis, welches auf Grundlage des letzten Gutachtens berechnet wurde, für das ein solcher Text durchgeführt wurde (das war 1999) . Damals legten die Angaben nahe, dass ca. 2 0 Prozent der sichtbaren Systeme auch in Betrieb waren, woraus man schließen kann, dass die Anzahl der Systeme, die in der Lage sind, auf ICMP-Anfragen zu reagieren, bei etwa 34.000.000 liegt. 272
16.5 Anwendungen, soziale Gesichtspunkte und Abwehr Multiplizieren wir nun die Anzahl der Systeme, die auf ICMP-Echoanfragen antworten, mit der durchschnittlichen Paketcachegröße und der maximalen Paketgröße (abzüglich der Header), dann kommen wir auf eine theoretische Gesamtkurzzeitkapazität für ICMP-basierten Klasse-A-Speicher von etwa 3 Tbyte. Klasse B: Um die theoretische Klasse-B-Speicherkapazität zu ermitteln, verwenden wir das Beispiel der MTA-Software. Es gibt keine Obergrenze für die Menge von Daten, die wir einem einzelnen Host zuführen können. Zwar können wir sicher davon ausgehen, dass nur Nachrichten mit einer Größe von knapp unter 1 Mbyte keine nennenswerte Systemlast und andere unerwünschte Effekte erzielen werden, aber wir nehmen trotzdem eine durchschnittliche maximale Warteschlangenlänge von 500 Mbyte an. Unsere eigenen Forschungen legen nahe, dass bei etwa 15 Prozent der Systeme, die auf Ping-Anfragen antworten, der Port 25 offen ist. Insofern schätzen wir die Population der SMTP-Server auf 3 Prozent (15 Prozent von 20 Prozent) der Gesamtzahl aller Hosts; dies sind etwas über 5.000.000 Hosts. Wir erhalten also am Ende eine Speicherkapazität von 2.500 Tbyte. 16.5 Anwendungen, soziale Gesichtspunkte und Abwehr Und weiter? Welchen praktischen Nutzen bieten Parasitic Computing und Parasitic Sto- rage, wenn die Vorteile nicht annähernd gut genug sind, um diese Entwürfe zu einer attraktiven Alternative zum Kauf zusätzlicher Hardware zu machen? Trotz der Fortschritte in der praktischen Nutzung des Parasitic Computing erscheinen Anwendungen, die auf die Erweitenmg der reinen Computerleistung oder Speicherkapazität eines herkömmlichen Systems abzielen, recht sinnlos angesichts des Übermaßes an billigem Speicher und der Existenz von Gigahertz-Prozessoren. Das verborgene Potenzial dieser Technologie liegt aber vielleicht in einem völlig anderen Anwendungsbereich: der flüchtigen Datenverarbeitung. Die Aussicht, einsetzbare verteilte Computer zu konstruieren, die beliebig verstreut sind und weder physische Spuren hinterlassen noch an irgendeiner Stelle sinnvolle Daten speichern, kann sich als mächtiges Datenschutzwerkzeug erweisen und stellt Forensik und Polizeiarbeit vor ganz neue Herausforderungen. Einen flüchtigen Speicher verwenden zu können, der sich kurz, nachdem man einen einzelnen Knoten offline genommen hat, quasi selbst zerstört, aber keine häufige Neuübertragung von Daten verlangt, bietet Kriminellen (oder auch Unterdrückten) eine Menge Möglichkeiten, Sachverhalte zu leugnen, und erfordert drastische Änderungen bei konventionellen Methoden der Beweisermittlung. Stellen Sie sich außerdem flüchtige Systeme vor, die sich, wenn sie einmal gestartet und initialisiert worden sind, für längere Zeit selbst aufrecht erhalten: Sie existierten nur im Internet - es gäbe kein lokales physisches Dasein. Es gibt zwei mögliche Entwürfe für flüchtige verteilte Computersysteme, und keiner der beiden ist völlig abwegig: ■ Systeme können so aufgebaut werden, dass sie eine komplexe Aufgabe erledigen, indem sie parallel eine Lösung suchen. (Dies wurde bereits durch das oben beschriebene 273
16 Parasitic Computing, oder: Kleinvieh macht auch Mist SAT-Computing realisiert.) Der Nachteil solcher Systeme besteht darin, dass der Abruf des Berechnungsergebnisses und das Auslösen der nächsten Verarbeitungsschleife manuell initiiert werden müssen, indem man das Gesamtsystem dann und wann von ir- gendeinem Standort aus neu einstartet. In diese Kategorie fallen am ehesten Lösungen, die auf den maschinennahen Eigenschaften von Protokollen wie TCP basieren. ■ Systeme können so konstruiert sein, dass sie aufeinanderfolgende Iterationen einer verteilten Datenverarbeitung selbst ausführen. Alle Formen des Missbrauchs komplexerer Merkmale (z. B. eingebettete Algorithmen zur Dokumenterstellung) und einiger Netzwerkdienste können eingesetzt werden, um solche Aktivitäten zu ermöglichen. In jedem Fall können die Folgen recht tiefgreifend sein. Wie beispielsweise nimmt man eine redundante, sich selbst reparierende Maschine offline, die nicht auf einem einzelnen System basiert, sondern für Sekundenbrachteile winzige Mengen Speicher und Prozessorleistung bei anderen borgt - und zu diesem Zweck weder Sicherheitslücken noch eindeutig erkennbaren Datenverkehr verwendet, der sich ausfiltern ließe? Und ist nicht auch das Gefühl recht befremdlich, dass wir keine direkte Möglichkeit hätten, die Ziele eines solchen verteilten Computers zu erkennen? Ich bekunde den Meistern des düsteren Science-Fiction meinen Respekt: Meiner Meinung nach steht die Herrschaft der Computer kurz bevor, und ich möchte unsere neuen Gebieter demütigst willkommen heißen. 16.6 Denkanstöße Ein Schutz gegen Parasitic Computing ist im Allgemeinen extreni schwer zu realisieren. Die Möglichkeit, Daten zu speichern oder auf anderen Systemen gewisse einfache Berechnungen auszuführen, ist oft an die Grundfunktionalität von Netzwerkprotokollen gebunden. Dies ist eine Eigenschaft, die zu entfernen wir nicht in Beteacht ziehen können, ohne das gesamte Internet, wie wir es kennen, auszulöschen und uns damit eine Menge neuer Probleme einzuhandeln, die wesentlich schwerwiegender sind als das, welches wir auf diese Weise behoben haben. Es ist auch ziemlich schwierig, ein einzelnes System davor zu schützen, ein Knoten für Parasitic Computing zu werden, denn der Umfang der entwendeten Ressourcen ist meist ein vemachlässigbarer Anteil an untätiger Prozessorzeit und Speicher und bleibt insofern oft unbemerkt. Dass das Parasitic Computing sein volles Potenzial erst noch an den Tag legen und die Bedrohung - irrelevant oder nicht existent für einzelne Systeme, aber beträchtlich für das Internet als Ganzes - sich noch eine ganze Zeit lang halten wird, ist sehr wahrscheinlich. 274
17 Die Topologie des Netzwerks Siebzehntes Kapitel. Welches beschreibt, wie das Wissen der Welt, die uns umgibt, uns dabei helfen kann, Freund und Feind aufzuspüren Welche Form hat das Internet? Es gibt kein Komitee, welches darüber wacht oder entscheidet, wo, wie und warum es sich ausbreiten darf oder wie neue und vorhandene Systeme zu organisieren oder zu verwalten sind. Das Internet wächst in alle Richtungen - auf eine Weise, die gleichermaßen von Bedarf, Wirtschaft, Politik, Technologie und blindem Vertrauen beeinflusst wird. Doch das Internet ist kein foniüoses Etwas: Es gibt geplante, lokal geregelte Hierarchien autonomer Systeme mit Core-Routem, die von untergeordneten Knoten umgeben sind und deren Verknüpfungen entweder von automatischen Mechanismen konfiguriert oder von Menschen sorgfältig entwickelt werden. Das Internet ist ein beeindruckendes Geflecht: ein komplexes und zerbrechliches Spinnennetz, das sämtliche Industrie- und Entwicklungsländer verflicht. Die Aufgabe, diese sich fortwährend ändernde Topologie zu erfassen, stellt eine echte Herausforderung dar, die große Anziehungskraft ausübt - insbesondere, wenn man erst einmal festgestellt hat, wie man die gesammelten Inforrnationen nutzen kann. In diesem Kapitel werde ich zunächst zwei bemerkenswerte Versuche beschreiben, die Topologie des Internets zu kartographieren. Danach werde ich einmal mehr über die potenziellen Einsatzmöglichkeiten der Informationen moralisieren, die sich auf diese Weise ermitteln lassen, um Dinge zu tun, von denen unsere Vorfahren noch nicht einmal zu träumen gewagt hätten. 17.1 Momentaufnahmen Der umfassendste Versuch, das Internet zu kartographieren, wurde von der CAIDA (Co- operative Association for Internet Data Analysis) durchgefühlt, einer Organisation, die un- 275
17 Die Topologie des Netzwerks ter anderem von staatlichen amerikanischen Forschungseinrichtungen (NSF, DHS, DAR- PA) und der Industrie (Cisco, Sun) gesponsert wird. Die Organisation wurde gegründet, um Datenverkehrs- und Infrastndctuianalysen und Tools zu entwickeln, die der allgemeinen rntemet-Cornmunity zugute kommen sollten - in der Hoffnung, das Internet besser, zuverlässiger, flexibler und robuster zu machen. Seit dem Jahr 2000 ist eines der öffentlichen Hauptprojekte - das Flaggschiff- die Erstellung und Pflege einer „Landkarte" mit den Kemnetzwerken der autonomen Systemen, die auf den Namen „Skitter" hört. Zum Zeitpunkt der Veröffentlichung dieses Buches sind bereits Daten für 12.517 größere autonome Systeme erfasst, was 1.134.643 IP-Adressen und 2.434.073 Verknüpfungen (logischen Pfaden) zwischen diesen entspricht. Zwar wirkt das Projekt geheimnisvoll, aber die Intemetkarte der CAIDA wurde ausschließlich unter Verwendung öffentlich zugänglicher BGP-Konfigurationsdaten von Routern, Ergebnissen empirischer Netzwerktests {traceroute) und WHOIS-Datensätzen für Netzwerkblöcke erstellt. Die Karte arbeitet mit Polaikoordinaten: Punkte, die die einzelnen Systeme darstellen, sind in einem Winkel angeordnet, der dem physischen Standort des offiziellen Zentralstandortes eines Netzwerks und dem Radius entspricht, welcher zur ,,Peering-Relevanz" des betreffenden autonomen Systems passt. Letztgenannter Parameter wird abgeleitet, indem die Anzahl anderer autonomer Systeme berechnet wird, die laut Beobachtungen Daten von dem betreffenden Knoten annehmen. Insofern befinden sich massive Core-Systeme im Zentrum der Karte, während Systeme, die mit nur wenigen anderen Knoten direkten Kontakt haben, eher am Rande zu finden sind. Linien im Diagramm geben lediglich die Peering-Beziehungen zwischen Routern wieder. ■ Hinweis Bedauerlicherweise wurde es uns nicht gestattet, eine grafische Darstellung der Skitter- Grafiken kostenlos in diesem Buch abzudrucken. Ich möchte Sie aber ermutigen, sich dieses erstaunliche Bild online unter http://www.caida.org/analysis/topology/as_core_network/pics/ ascoreApr2003.gif anzusehen (es steht dort gebührenfrei zur Ansicht zur Verfügung). Ein weiterer bemerkenswerter Versuch, das Netzwerk zu kartographieren, nutzte einen Ansatz, der auf der Analyse der Entfernungen von verschiedenen Netzwerken aus der Sicht eines bestimmten Standorts (in diesem Fall Bell Laboratories) basierte und eine baumartige Struktur zum Ergebnis hatte, die ganz anders aussah als das komplexe Gewebe, das von der CAIDA erstellt worden war. Das Ergebnis dieser Analyse, die von Bill Cheswick im Jahr 20001 durchgeführt wurde, sehen Sie in Abbildung 17.1. Diese Struktur parametrisiert das Diagramm nicht abhängig vom physischen oder adininistrativen Standort eines Systems; die relative Entfernung von der Mitte entspricht vielmehr der Anzahl der Hops zwischen dem betreffenden Knoten und Bell Laboratories. ChesOO 276
17.1 Momentaufnahmen The Interner SIE1 ^:WkÄ^' Abbildung 17.1 Bill Cheswicks Intemetkarte felLOMgES Obwohl die beiden Ansätze den Eindruck machen, auf massiver Datensainrnlung und -analyse zu basieren, ist es auch für einen Arnateur nicht übermäßig schwierig, das Netzwerk zu kartographieren — selbst über eine Verbindung mit relativ geringer Bandbreite. Die Sondierung aller öffentlich ansprechbaren Subnetze mit einem einzigen Paket erzeugt maximal ein paar Gbyte Datenverkehr, was sich mit einer gewöhnlichen DSL-Anbindung innerhalb weniger Stunden, maximal aber eines Tages bewerksteUigen lässt. Die einzigen Risiken bestehen darin, dass man einige Systenradniinistratoren auf den Plan ruft, aber angesichts der Verbreitung von CoHiputerwürmem und automatisierten Angriffen dürfte die Empfindlichkeitsschwelle nur bei den allerwenigsten so niedrig liegen. Die Kartographie- 277
17 Die Topologie des Netzwerks rang der beobachteten Strukturen des Internets ist möglich (und oft auch lohnend), weil sie uns viel darüber erzählen kann, wie das internationale Netzwerk organisiert ist. Wie sich aber herausstellt, können die von CAIDA, Bill Cheswick oder anderen erfahrenen Benutzern des Internets gewonnen Informationen auch erfolgreich eingesetzt werden, um das Wesen mysteriöser Daten, über die wir eines Tages stolpern könnten, besser ergründen und ihre Herkunft schneller ermitteln zu können. 17.2 Herkunftsnachweis mit Topologiedaten Spoofing ist eines der gegenwältig größten Problerne des Internets - zumindest aber eines der ärgerlicheren. Blindlings gefälschte Pakete mit nachgemachten oder speziell ausgewählten, aber vorgetäuschten Absenderadressen können für den Missbrauch von Vertrauensbeziehungen zwischen Computern oder zur Einspeisung bedenklicher Inhalte (wie etwa unerwünschter Massen-E-Mails) eingesetzt werden, ohne verräterische Spuren oder verlässliche Herkunftsangaben zu hinterlassen. Das blinde Spoofing kann auch benutzt werden, um die Identität eines Angreifers zu verschleiern, der Systemsondierungen durchführt (vgl. auch das in Kapitel 13 beschriebene Konzept der „Täusch-Scans"). Die schlimmste Plage allerdings ist das Spoofing mit dem Ziel, DoS-Angriffe auszuführen. Bei einer normalen DoS-Attacke hat der Administrator die Chance, die Herkunft von Angriffsdaten zu erkennen, die gegen einen seiner Dienste gerichtet sind (und deren Zweck im Zweifelsfall darin besteht, diesen Dienst zum Ausfall zu bringen und dem Betreiber Unannehmlichkeiten oder Verluste zu bescheren). Es ist jedoch möglich, nichtkonforme Pakete willkürlich zu falschen; in solchen Fällen hat der Administrator keine Handhabe, denn er kann die vom Angreifer stammenden Daten nicht ausfiltem, ohne andere Benutzer auszusperren. Seine einzige Hoffnung besteht darin, gemeinsam mit seinem Provider die tatsächliche Herkunft der Daten in der Sicherungsschicht zu ermitteln und diese Angaben dem Provider des Angreifers zukommen zu lassen. Aber das dauert lange. Sehr lange. Außerdem müssen alle Beteiligten auch ohne gerichtlichen Beschluss davon überzeugt werden, dass dieser Fall aus finanzieller und zeitlicher Hinsicht durchaus eine Untersuchung wert ist. In Situationen wie diesen ist es für den Systemadrninistrator besonders wichtig, Tools und Methoden zur Verfugung zu haben, mit denen er zwischen gefälschtem und legitimen Datenverkehr unterscheiden kann. Als ich noch in den Vereinigten Staaten wohnte und arbeitete (heute lebe ich in Polen), be- schloss mein Kollege Mark Loveless, eine Idee zu implementieren, die ursprünglich von Donald McLachlan vorgeschlagen wurde: Er wollte die TTL des Datenverkehrs zwischen sich und dem vorgeblichen Absender eines Pakets messen, um automatisch ermitteln zu können, ob ein eingehendes Paket gefälscht worden war. Die Herausforderung der Her- kunftsbestimmung eines Netzwerkpakets ist in einer Welt, in der Informationen nicht zu trauen ist, sehr wichtig, und von der Chance, dies auch zu tun (wenn auch nur in bestimmten Fällen), könnte man aus erwähnten Gründen in analytischer und administrativer Hinsicht erheblich profitieren. 278
17.2 Herkunftsnachweis mit Topologiedaten Um die Idee von Donald und Mark besser verstehen zu können, nehmen wir einmal an, dass das Remote-System, von dem wir Daten erhalten, sich in einer bestimmten logischen Entfernung von uns befindet - getrennt durch eine gegebene Anzahl von Netzwerkgeräten. Insofem weisen alle Pakete, die zulässigerweise von diesem System gesendet wuiden, bei der Ankunft eine bestimmte TTL auf, die der auf dem betreffenden System standardmäßig konfigurierten TTL abzüglich der Anzahl der Zwischensysteme entspricht, die das Paket passiert hat (siehe Kapitel 9). Gefälschter Datenverkehr hingegen stammt mutmaßhch aus einem ganz anderen Netzwerk, weswegen Entfernung und TTL sich höchstwahrscheinlich von den erwähnten Beobachtungen unterscheiden. Marks Tool despoof2 vergleicht die TTLs, die in bestimmten induzierten und zuvor empfangenen Daten erkannt wuiden, um zwischen zulässigem und gefälschtem Datenverkehr zu unterscheiden. Allerdings weist diese Methode, obwohl sie in einzelnen Fällen durchaus zufriedenstellend arbeitet, wenn sie gegen arglose Angreifer eingesetzt wird, mindestens zwei Probleme auf: ■ Ein übervorsichtiger Angreifer könnte die Entfernungen vor der Attacke abmessen und eine TTL wählen, die dem erwarteten Wert entspricht. Allerdings ist dieser Trick zwar möglich, aber doch etwas schwierig zu implementieren. Zum Einen ist der Angreifer unter Umständen physisch nicht in der Lage, eine ausreichend hohe TTL einzustellen, um einen bestimmten Wert zu erzielen, der dem erwarteten Wert eines echten Pakets entsprechen würde, wenn das gefälschte Paket beim Empfänger eintrifft. Dieser Plan des Angreifers könnte vereitelt werden, wenn das System, das er imitieren will, eine Standard-TTL von 255 (dem Maximalwert) oder knapp darunter verwendet und er weiter vom Ziel entfernt ist als das imitierte System, In diesem Fall wäre es für ihn unmöglich, ein Paket zu versehen, das bei der Ankunft am Ziel die gewünschte TTL aufweist. Natürlich verwenden nur die wenigsten Systeme die höchstmögliche TTL. Außerdem wird ein Angreifer nur in seltenen Fällen die Identität eines bestimmten Systems vorgeben wollen. Die zweite Herausforderung des Angreifers besteht darin, dass er die Distanz zwischen seinem Opfer und dem imitierten System nicht genau ermitteln kann, sofern er sich nicht in der Nähe eines dieser Systeme befindet und die Routing-Verhältnisse zwischen ihnen nicht kennt. Verwendet das Opfer jedoch despoof zur dynamischen Implementierung von Filterregeln, mit denen gefahrliche Pakete ausgeschlossen werden, dann kann der Angreifer einfach verschiedene TTLs unterschiedlicher Quellen ausprobieren, bis er erkennt, dass das Opfer nicht mehr in der Lage ist, eine Entscheidung zu treffen. (Dies wäre offensichtlich: Das System des Opfers würde anfangen, typische Effekte einer erfolgreichen Attacke - z. B. Leistungseinbrüche - an den Tag zu legen.) ■ Jedes Mal, wenn ein verdächtiges Paket empfangen wird, muss der Empfanger eine Überprüfung stalten und warten, bis die Ergebnisse bereitstehen. Insofem ist despoof als Grundlage einer automatischen Abwehr insbesondere von DoS-Angriffen ungeeig- Erhältlich unter http://razor.bindview.com/tooIs/desc/despoof_readme.htmL 279
17 Die Topologie des Netzwerks net. Allerdings kann diese Methode immer noch recht nützlich sein, wenn man die tatsächliche Herkunft eines Täusch-Scans ermitteln will. Ohne Kenntnisse zur Topologie eines bestimmten Netzwerks ist es schwierig, etwas Besseres als despoof zu finden: Die von diesem Tool implementierte Analysemethode ist gut genug, um viele häufig auftretende Probes und Einzelangriffe zu stoppen. Aber was kommt danach? Nun: Kombinieren Sie Marks Programm mit Echtzeitdaten zur Netzwerkstruktur und ermitteln Sie unter Verwendung des passiven Fingerprintings die Start-TTL eines Systems, das bestimmte Anfragen sendet. Voilä: Schon ist diese Methode um ein ganzes Stück leistungsfähiger. Diese Zusatzdaten gestatten es uns, eine erste passive Bewertung des eingehenden Datenverkehrs durchzuführen, indem wir die beobachteten TTLs und die bekannten Start-TTLs mit der Entfernung vergleichen, die in der Netzwerkkalte angegeben sind.3 Weil die Entfernung, die wir sehen sollten, sich bestimmen lässt, ohne eine aktive Sondierung der Netzwerktopologiedaten durchzuführen, können wir sofort und ohne gioßen Aufwand zwischen zulässigem und ungutem Datenverkehr unterscheiden. Dies wiederum ermöglicht es, auf massive Vorfalle relativ zuverlässig reagieren und einzelne unauffällige Probes erkennen zu können, ohne den Angreifer davon in Kenntnis zu setzen, dass ein Spoofing-Erkennungssystern implementiert ist. Offenbar kann man dadurch, dass man bei der Betrachtung von Punkt-zu-Punkt- Beziehungen die Struktur eines Netzwerks berücksichtigt, eine ganze Menge gewinnen. Aber die Spoofing-Erkennung ist nur der Anfang. 17.3 Netzwerktriangulation mit Topologiedaten Eine wesentlich interessantere Anwendung von Vennaschungsdaten zur Netzwerktopolo- gje mit dem Ziel der Datenverkehrsanalyse ist die Netzwerktriangulation. Wir können mit- hilfe der Netzwerktriangulation die Position eines Angreifers, der gefälschte Pakete sendet, ohne Unterstützung der Instanzen ermitteln, die den dazwischenliegenden Routing- Backbone betreiben - er muss nur mehrere Ziele gleichzeitig oder aufeinanderfolgend angreifen. Dies ist dann tatsächlich Glück im Unglück. Wenn man es ganz genau nimmt, funktioniert die Triangulation zwar am besten, wenn der Angreifer mehrere Ziele auswählt, aber in bestimmten Szenarien gelingt sie auch beim Angriff auf nur einen Dienst. So können wir insbesondere in der Lage sein, dieselbe Attacke von verschiedenen Standpunkten aus wahrzunehmen, wenn das angegriffene Objekt mehrere IP-Adressen aufweist und der Dienst über mehrere physische Standorte bereitgestellt wird — etwa zum Zweck des Lastausgleichs, oder um die gesamte Struktur fehlertole- Bei eitlem solchen Ansatz inuss der Vergleich der TTLs mit einem gewissen Fehlerspielraurn durchgeführt werden, weil innerhalb interner Netzwerke mehrere zusätzliche Hops auftreten können. Außerdem sind manche Routen asymmetrisch, und ihre Länge kann je nach Richtung, in der die Daten ausgetauscht werden, leicht variieren. 280
17.3 Netzwerktriangulation mit Topologiedaten rant zu machen (was bei Webdiensten durchaus üblich ist). In allen anderen Szenarien kommen wir an eine größere Menge Daten, wenn Systernadministiatoren feststellen, dass mehrere Systeme Ziel eines Angreifers sind und ihre Angaben darüber austauschen. Unabhängig vom vorhegenden Fall können wir aber triangulieren, sobald Daten, von denen man annehmen könnte, dass sie von derselben Quelle stammen, an mehieren Zielen auftauchen. Für jedes Ziel, an dem die Daten auftauchen, befindet sich nur eine bestimmte Anzahl von Netzwerken in einer Entfernung, die sich durch Beobachtung des Abstandes ermitteln lässt, den das fragliche Paket zurückgelegt hat (auch dies finden wir durch Untersuchung der TTL heraus4). Eine Schnittmenge, die für alle an allen Beobachtungspunkten beobachteten Mengen gebildet wird, würde wesentlich kleiner sein und unter Umständen vielleicht nur ein einziges Netzwerk enthalten — das Netzwerk, aus dem der Angriff stammen könnte (Abbildung 17.2). Beobachtungssystem 3 Abstand zum Angreifer: 3 Abbildung 17.2 Einfache Netzwerktriangulation: Nur ein Absender ist in allen Beobachtungen vorhanden. Der Angreifer kann Quelladressen fälschen, aber die Opfer nicht täuschen. Die Möglichkeit, selbst auf die Suche gehen zu können, befreit uns von der bedingungslosen Abhängigkeit von Internetprovidern und hilft uns, präzise zu ermitteln, wer unser Netzwerk angreift oder sondiert — und vielleicht auch, herauszufinden, warum er dies tut. Auch dann, wenn das Tool ZufaUs-TTLs verwendet, ist es möglich, die Entfernung anhand der beobachteten Maxknal-TTL zu bestimmen, wenn an jedem Ziel eine bestimmte Anzahl von Paketen erkannt wird (und dies ist fast immer der Fall). Wenn das Scan-Tool beispielsweise die Stail-TTLs willkürlich im Bereich zwischen 32 und 255 zuweist, aber mehrere tausend Pakete vom Ziel empfangen werden, bei denen keine TTL erkannt wird, die größer als 247 ist, dann ist der Host mit hoher Wahrscheinlichkeit 255 — 247 = 8 Systeme entfernt. 281
17 Die Topologie des Netzwerks Zwar ist dieser Ansatz weitaus schwieriger abzuwehien als der traditionelle Einsatz von despoof, aber ein kluger Angreifer kann einen Beobachter immer noch hinters Licht führen, indem er für jedes Ziel eine andere, zufällig zugewiesene TTL (oder einen TTL- Bereich) verwendet. Zwar sind derzeit keine Tools bekannt, die dies ermöglichen, aber was nicht ist, kann ja noch werden. Ist die Schlacht verloren? Nein. Es gibt eine Möglichkeit, zu verhindern, dass Übeltäter uns auf diese Weise hereinlegen. 17.4 Stresstest im Netzwerk Die Lösung, die auf den Namen „Netzbelastungsanalyse" hört, wird in Form einer Forschungsarbeit5 dargereicht, die Hai Brunch und Bill Cheswick im Jahr 2000 auf der LISA- Konferenz vorstellten. Brunch und Cheswick schlugen eine interessante Einsatzmöglichkeit für Netzwerktopologiedaten in Baumform (ähnlich Abbildung 17.1) vor, die für einen bestimmten Standort ermittelt worden waren. Sie legten eine Möglichkeit dar, rnithilfe der Daten die Herkunft eines bestimmten Typs gefälschten Datenverkehrs — nämlich DoS — zu erkennen. Der Ansatz selbst ist vergleichsweise simpel und basiert auf der Annahme, dass ein solcher Angriff nicht nur das System belasten würde, gegen das er gerichtet ist, sondern auch zwischengeschaltete Router, und dass diese Belastung sich vom Opfer extern messen und dazu verwenden ließe, den Angreifer ausfindig zu machen. Die Aufgabe, Netzwerkverbindungen einer Belastungsanalyse zu unterziehen, besteht darin, zunächst ein Baumdiagramm mit den Leitungen von Ihrern Standort zu allen Netzwerken im Internet zu erstellen (oder sich dieses zu besorgen) und die einzelnen Verzweigungen dieser BauHistruktur nach und nach durchzugehen, sobald ein Angriff erfolgt. Für jeden Zweig (der in Wirklichkeit eine Verbindung mit einem übergeordneten Router darstellt) können wir die Netzwerklast des Knotens iterativ messen, indem wir Testdaten an oder über den Router senden, der mit ihm verknüpft ist. (Im erwähnten Forschungsprojekt wurde eine Ladung UDP-Daten verwendet, aber ICMP-Anfragen oder beliebige andere Nachrichtentypen könnten ebenfalls eingesetzt werden.) Wir wählen dann einen stärker belasteten Knoten als potenziellen Kandidaten für die eingehenden Daten aus. Nachfolgend vermerken und überprüfen wir alle Verzweigungen, die von diesem Knoten ausgehen, bis wir den Datenverkehr zum Urheber zurückverfolgt haben. Abbildung 17.3 veranschaulicht ein einfaches Nachverfolgungsszenario. In der ersten Phase versucht das angegriffene System, die Leistung der drei nächstgelegenen Intemetrouter zu messen, wenn der Angriff beginnt, und stellt fest, dass er erste (oberste) Router der derzeit rneistbeanspruchteste ist. Bi-unOO 282
17.4 Stresstest im Netzwerk Netzwerk X Router mit hoher Last Opfer (erkennt die Daten als von Netzwerk A kommend) Schritt 1: Das Opfer bestimmt welcher der Router zweiter Ebene eine höhere Belastung aufweist. Schritt N: Das Opfer bestimmt, ■ welcher der Router n-ter Ebene, die mit dem hochbelasteten Router (n-1)-ter Ebene kommunizieren, eine höhere Belastung aufweist. Angreifer (fälscht Pakete mit Absenderadresse in Netzwerk A) Step X (letzter Schritt): Der im Schritt X-1 erkannte belastete Router ist mit nur einem Netzwerk verbunden. Dort ist der Schuldige zu finden. System, als das sich der Angreifer ausgibt (argloser Außenstehender) Abbildung 17.3 analyse Rekursive Angriffsnachverfolgung mit Netzwerktopologiedaten und Belastungs- Basierend auf diesen Angaben beschließt das Opfer, nur diejenigen Router zu testen, die direkt an jenes Gerät angeschlossen (d. h. Peers dieses Gerätes) sind. In diesem speziellen Fall werden nur drei Geräte getestet (die übrigen sechs werden nicht überprüft, weil sie nicht Peer des betreffenden Gerätes sind). Es stellt sich heraus, das erneut das erste die höchste Belastung aufweist. Der Prozess wird fortgesetzt, bis ein Router, der direkt an ein bestimmtes Netzwerk angeschlossen ist, dessen Standort und Besitzer sich über öffentliche Datenbanken ermitteln lassen, als finaler Endpunkt erkannt wird. 283
17 Die Topologie des Netzwerks Hierbei tritt allerdings ein potenzielles Problem auf: Einige Geräte weisen unter Umständen aus anderen Gründen als der Verarbeitung von DoS-Daten eine hohe Belastung aus, andere hingegen mögen viele fieie Rozessorzyklen zur Verfügung haben und lassen sich von der Weiterleitung gefährlicher Daten nicht besonders aus der Ruhe bringen. Um dieses Problem zu beheben, schlägt die Arbeit vor, eine künstliche Kurzzeitbelastung des Routers (durch Erzeugung zusätzlichen Datenverkehrs) zu verursachen und dann zu beobachten, wie dieser Test sich auf Bandbreite und Latenz der DoS-Anfragen auswirkt: Ist das betreffende Geräte tatsächlich in die Weiterleitung bösartiger Pakete einbezogen, dann müsste, solange wir eine Mehrbelastung des Geräts verursachen, die Angriffsrate sinken (und zwar auch in diesem Fall mit hoher Wahrscheinlichkeit durch die Erzeugung weiterer gefälschter TCP-, UDP- und ICMP-Annagen, die eher die Prozessorleistung eines Geräts verbrauchen, als die Schnittstellen zu verstopfen). Aus diesem Grund sollte ein Abgleich nur bei denjenigen Zweigen erfolgen, die an der Bereitstellung bösartigen Datenverkehrs beteiligt sind. Dieses brillante und einfache System wurde in Testumgebungen erfolgreich eingesetzt. Allerdings kommen verschiedene ethische Aspekte ins Spiel, wenn wir einen Einsatz in Produktionsumgebungen in Betracht ziehen, denn es bezieht auch die Interaktion mit Routem mit ein und erlegt ihnen eine zusätzliche Belastung auf. 17.5 Denkanstöße Die Hauptschwierigkeit bei der Verwendung der in diesem Kapitel beschriebenen Methoden zum Aufspulen von Angreifern besteht darin, dass wir Netzwerkübersichten für jeden Standort erstellen und pflegen müssen. Es ist nicht auf den ersten Blick offensichtlich, wie oft diese Übersichten aktualisiert werden müssen und welche Methoden hierzu am zuverlässigsten wie auch am wenigsten zudringlich sind. Ein weiteres potenzielles Problem besteht darin, dass ein Großteil der Kernstruktur des Internets redundant ist. Einige alternative Routen können möglicherweise nur gewählt werden, wenn die primäre Route ausfällt oder ausgelastet ist, auch wenn der Wechsel in manchen Fällen im Zuge eines Lastausgleichs erfolgt. Auf diese Weise können einige auf empirischer Basis erstellte Übersichten innerhalb von Stunden oder gar Minuten veraltet sein (auch wenn dieser Fall wohl nicht allzu häufig vorkommt). Letztendlich gibt es - auch wenn sich private, individuelle Anwendungen verschiedener Abwehrmethoden gegen das Spoofing als sehr erfolgreich erweisen - eine ganze Reihe offener Fragen, die beantwortet werden müssen, bevor wir solche Techniken im großen Stil einsetzen können. Und einige dieser Fragen sind noch nicht einmal technischer Natur. 284
18 Der Blick in die Leere Achtzehntes Kapitel. In dem wir in den Abgrund sehen und feststellen: Was uns nicht tötet, macht uns nur hart Wir haben nunmehr eine Reihe von Möglichkeiten kennen gelernt, Daten zu entdecken und abzufangen, indem wir die Kommunikation zwischen zwei Systemen beobachten oder einen Blick auf die Nebeneffekte dieser Kommunikationsvorgänge werfen. Allerdings ist die Geschichte hier noch nicht zu Ende. Manchmal können wir noch niehr erkennen, wenn wir die Augen von dem Ziel abwenden, welches wir sondieren wollen. Eine große Anzahl von Methoden, die gemeinhin als Black-Hole-Monitoring (Beobachten schwarzer Löcher) bezeichnet werden, widmet sich der Inspektion und Analyse unerwünschten oder unangeforderten Datenverkehrs, der zufällig, aufgrund einer Fehlers oder in verstümmelter Form bei einem Ziel eintrifft. Zu diesen Methoden gehört in aller Regel das Ausführen eines einfachen Paketspeicher-Utilitys und die nachfolgende gewissenhafte Analyse und Theoriebildung zu jeder einzelnen Beobachtung. In einer perfekten Welt dürften wir eigenthch keinen Nutzen daiaus ziehen können, dort nach Daten zu suchen, wo wir keine finden sollten. In der Wirklichkeit jedoch können wir mithilfe dieser Methoden verirrte Datenbits und unschätzbar wertvolle Hinweise zum Zustand des Netzwerks als Ganzes sammeln. Zwar sind diese Daten vorzugsweise behebig, und wir können uns auch nicht aussuchen, wem wir zuhören, aber trotzdem können wir davon profitieren. 18.1 Taktische Ansätze der direkten Beobachtung Eine Anwendung des Black-Ffole-Monitorings hegt in der Erkennung und Analyse globaler Angriffstendenzen. Viele Black-Hats, die im Besitz neuer Angriffsmethoden sind, scannen häufig einfach große Netzadressblöcke, um anfallige Ziele zu finden, diese anzugreifen und sie schließlich für gesetzeswidrige Aktivitäten zu nutzen. (Dies kann etwa 285
18 Der Blick in die Leere die Sammlung von Skip-Hosts1 oder der Aufbau von Dronennetzen für automatisierte Angriffe sein.) Wh' können das Black-Hole-Monitoring verwenden, um uns auf neue Sicher- heitslücken aufmerksam machen zu lassen, die bereits ausgenutzt werden, indem wir einfach warten, bis wir eine Zunahme standaidmäßiger Scanaktivitäten von verschiedenen Quellen bemerken. Viele Netzwerkadnunistratoren setzen das Black-Hole-Monitoring ein. Manchmal erfolgt die Verwendung in Verbindung mit Honigtöpfen, d. h. ein gefölschtes „Ködersystern" wird im Netzwerk ausgesetzt, um Angreifer anzuziehen, ihre Tools abzufangen und ihre Techniken zu erkennen2. Auf diese Weise entsteht ein Warnsystem, welches es dem Administrator gestattet, zu den ersten zu gehören, die von bevorstehenden Ausbrüchen von Würmern und anderer Malware Kenntnis erlangen. (Sie können mit Black-Hole-Datenverkehr auch „Rauschpegel" kalibrieren und gezielte Angriffe gegen Ihre Server effizienter erkennen, ohne auf automatisierte, unterscheidungslose und zweifelhafte Handlungen zurückgreifen zu müssen.) Forscher wie Dug Song und Jose Nazario - letzterer unlängst in seinem Buch „Defense and Detection Strategjes against Internet Worms"3 - versuchen, Black-Hole-Aktivitäten während massiver Wurmepidemien zu analysieren. Ihr Ziel besteht darin, die Dynamik der Verteilung (d. h. der Erstausbreitung und Neuinfektion) im Netzwerk besser verstehen und nachbilden zu können und die Effizienz und Beharrlichkeit der Infektions algorithmen von Würmern zu prüfen. Ihre Forschungsarbeiten werden uns zukünftig dabei helfen, Verteidigungsmaßnahmen gegen massive verteilte Bedrohungen zu entwickeln, bieten aber auch beachtliche Einsichten in den aktuellen Zustand der Netzwerktechnologie. Einige Beispiele für ihre Erkenntnisse können Sie den Abbildungen 18.1 bis 18.4 entnehmen. Abbildung 18.1 zeigt, wie ein Wurm sich beim Ausbrach der Epidemie verbreitet. Die Daten basieren auf der Anzahl der beobachteten Angriffsversuche auf TCP-Port 137, eine Komponente der NetBIOS-Irnplementierung von Windows, die standardmäßig auf allen Windows-Computern installiert wird und Ziel zahlreichender sich selbst verbreitender Malware ist. Beachten Sie in der Abbildung, wie nach einer ersten Woche der Verbreitung - als die Anzahl sowohl der infizierten Standorte (Quellen) als auch der angegriffenen Systeme im beobachteten Black-Hole-Netzwerk konstant und rapide anstieg - plötzlich eine Stabilisierungsperiode eintrat, die sich über mehr als einen Monat erstreckte und drastische Spitzenwerte und Täler aufwies. Eine solche Verbreitungscharakteristik ist für einen Wurm und den Zustand des Netzwerks, in dem er operiert, eindeutig und reflektiert auch die Feinheiten der Zielauswahl- und rnfektionsalgorithmen, die der Autor eingesetzt hat. Ein Skip-Host ist ein System, das als Zwischengerät zur Ausführung weiterer Angriffe oder anderer illegaler Aktivitäten (wie dem Versand von Spam-Mails) verwendet wird. Diese Methode erschwert die Ennittlung des ursprünglichen Versenders, denn dessen Herkunft kann nicht direkt ersehen werden, und es müssen zu seiner Ermittlung mehrere Administratoren oder Gerichtsbarkeiten zusammenarbeiten 2 Spit02 3 Naza03 286
18.1 Taktische Ansätze der direkten Beobachtung Date <Month/Day5 Abbildung 18.1 Ausbreitungseigenschaften eines Windows-Wurms First IP address outet Abbildung 18.2 Zielauswahlalgonthmus des SQLSnake-Wurms (beachten Sie die ungleichförmige, aber relativ vollständige Abdeckung des Adressraums) 287
18 Der Blick in die Leere Abbildung 18.2 zeigt einen anderen Aspekt des Verbreitungsalgorithmus des Wurms: Sie stellt die Eigenschaften des Zielauswahlalgorithmus dar. In diesem Fall scheint ein verbreiteter Wurm, dessen Ziel Microsoft SQL-Server waren, eine ziemlich durchgängige Verbreitung im Adressraum gefunden zu haben, auch wenn Adressen mit Oktetten zwischen 200 und 225 erheblich öfter ausgewählt wurden, während Werte oberhalb von 225 vollständig übersprangen wurden. Abbildung 18.3 zeigt dieselben Parameter für einen anderen Netzwerkwurm namens Slapper. Dieser Wurm hatte sich Linux-Systeme als Opfer auserkoren, auf denen er einen Fehler in einer behebten OpenSSL-Verschlüsselungsbibhothek ausnutzte. Der Algorithmus scheint erheblich gleichförmiger zu arbeiten, aber die Erfassung ist weitaus weniger durchgehend: In bestimmten Wertebereichen klaffen große Löcher. ine ise First IP address octet Abbildung 18.3 Histogramm des Zielauswahlalgorithmus beim Slapper-Wurm. Es zeigt eine wesentlich gleichförmigere Verteilung, aber die Erfassung ist nicht durchgängig. Die Lücken lassen darauf schließen, dass die niederwertigen Bits aller .Zufallsadressen" konstant sind. Möglicherweise ein Programmierfehler. Abbildung 18.4 schließhch zeigt das Beharrlichkeitsrnuster eines Wurms im zeitlichen Kontext. Einige Würmer scheinen zu sterben, weil Systeme mit Patches versehen und desinfiziert werden, während andere Algorithmen verwenden, die plötzliche und sich wiederholende Anstiegs- und Abfallmuster erzeugen. (Personen, die mit Bevölkerungs- oder Epi- 288
18.2 Die Abfallprodukte einer Attacke demiologjemodellen, die auf natürlichen Phänomenen basieren, experimentiert haben, werden mit diesen Mustern vertraut sein.) 700 600 500 o | 400 g 300 200 100 t \ l J h ^ \ -( A A \ p« ■Hl m //' -aaaa V Sfr^A 1 1 1 b-h Code Red e=a / ^7 Nimda (und Varianten) A s*H%r®4 AftABaA-B k—H \ B 18.09. 28.09. 08.10. 18.10. 28.10. 07.11. Datum Abbildung 18.4 Beharrlichkeit eines Wurms im zeitlichen Verlauf. Beachten Sie, dass hier keine einfachen Berg-Tal-Muster für CodeRed vorhanden sind und dass das Modell sich wie ein biologisches Bevölkerungsmodell verhält. Wie Jose und seine Kollegen zu veranschaulichen beabsichtigen, ist das Black-Hole- Monitoring unter Umständen nicht nur eine routinemäßige und möglicherweise vollkommen nutzlose Aktivität, sondern eine tolle Möghchkeit, das geheime Leben aller bösen Dinge zu entdecken. Aber das ist nicht das Ende vom Lied. Wenn wir närnlich nur den Verkehl- betrachten, von dem wir annehmen, dass er an uns gerichtet ist, veipassen wir die interessantesten Datenelemente. 18.2 Die Abfallprodukte einer Attacke Die zweite Anwendungsrnöglichkeit des Black-Hole-Monitoring basiert auf der Beobachtung von Daten, die ursprünglich gar nicht für uns gedacht waren, sondern nur ein Abfallprodukt anderer Aktivitäten darstellen. Hier können wir sehen, wie eine Reihe bekannter Reconnaissance- und Angriffsschernata mithilfe des Adress-Spoofings die Identität des Angreifers zu enthüllen helfen. Wir setzen voraus, dass ein Administrator Probleme haben wird, die von gefälschten Adressen stammenden Täuschdaten von den eigentlichen Probes des Angreifers zu unterscheiden. Zwar 289
18 Der Blick in die Leere habe ich schon in vorherigen Kapiteln gezeigt, dass dieser Ansatz dem Angreifer keine vollständige Anonymität gewährt; um den gefälschten Datenverkehr erfolgreich zu enttarnen, muss der Administrator zum Zeitpunkt des Angriffs umfassende Protokollierangsund Zusatzmaßnahmen implementieren. Da dies aber nicht immer geschieht, können Angreifer ihre Attacken häufig effizient kaschieren und selbst aus dem Rampenlicht bleiben. Unabhängig davon, ob Pakete gefälscht sind oder nicht, wird das angegriffene System in gutem Glauben auf alle Anfragen antworten - und damit auch auf diejenigen, die scheinbar von fiktiven Adressen stammen. Allerdings landen nur die Antworten auf Pakete mit korrekter Quelladresse wieder beim Absender; alle anderen Probes erzeugen Antworten, die im gesamtem Internet verstreut werden. Und diese können wir oft abfangen. Zwar mag es unwahrscheinlich erscheinen, dass wir ein solches fehlgeleitetes Paket empfangen, aber erinnern Sie sich: Eine beträchtliche Anzahl von SYN+ACK-, RST+ACK- und RST-Paketen wird als Reaktion auf Täusch-Scans oder Angriffe mit SYN-Flutung erzeugt. Der Adressraum im Internet erscheint riesig: Normalerweise sind bei solchen Angriffen Millionen von Paketen im Spiel, aber mit der Zeit steigt die Wahrscheinlichkeit, dass jeder einzelne Netzwerkblock erreicht werden wird. Zwar beträgt die Wahrscheinlichkeit, dass ein einzelnes, zufällig erzeugtes gefälschtes Paket an eine bestimmte Adresse zuräckgeleitet wird, nur 1:4.294.967.296 (= 1:232); wenn man aber davon ausgeht, dass ein normales kleines Subnetz, das einer kleinen Firma oder Organisation gehört, üblicherweise 256 Adressen umfasst (Klasse-C-Netzwerk oder gleichwertiges), dann erhöht sich die Wahrscheinlichkeit auf 1:16.777.216 (1:224). Eine weitere Erhöhung ist möglich, indem man Adressbereiche ignoriert, die bekanntermaßen für Sonderzwecke reserviert oder aber auf andere Weise uninteressant sind und deswegen bei bestimmten Angriffstypen ausgeschlossen werden. Weil ein einzelnes SYN-Paket ca. 40 Bytes aufweist (und sich in Massen gut komprimieren lässt) und eine nonnale Netzwerkanbindung, wie sie einem Gelegenheitshacker zur Verfugung steht, einen Durchsatz von ca. 10 bis 150 Kbyte pro IP-Schicht pro Sekunde hat (dies entspricht langsamen DSL-Verbindungen einerseits und Tl andererseits), kann er 250 bis knapp 3.000 Pakete in diesem Zeitrahnien hinausschicken. Dies entspricht einer Rate von 900.000 bis etwa 10.000.000 Paketen pro Stunde.4 Damit eine typische DoS-Attacke spürbare Ergebnisse erzeugen und dem Opfer größere Unannehmlichkeiten bereiten kann, muss sie normalerweise mehrere Stunden oder Tage lang ausgeführt werden. (Der Angreifer will ja, dass die Störung für das Opfer möglichst lang dauert.) Aufgrund dessen werden Dutzende bis Hunderte Millionen Pakete gesendet, die eine ähnliche Anzahl von SYN+ACK- oder RST+ACK-Antworten erzeugen. Angesichts dieser gigantischen Menge Daten ist es ziemlich logisch, davon auszugehen, dass auch eine relativ kleine Entität die Nebenprodukte einer kleinen SYN-Flut bemerken kann, auch wenn der Empfängerhost viele Angriffspakete einfach verwirft. Außerdem Beachten Sie, dass der entschlossene und gewiefte Angreifer, der über viel Erfahrung in Sachen DoS- Angriffe verfügt, oft über Dutzende oder Hunderte „Zombieknoten" verfügt, die auf seinen Befehl hören und mit denen er die angegebenen Werte deutlich erhöhen kann. 290
18.3 Wie man verstümmelte oder fehlgeleitete Daten erkennt würden auch Administratoren, die Klasse-B-Netzwerke (mit 65.536 Adressen, meist im Besitz größerer Unternehmen, Internetprovider, Forschungseinrichtungen usw.) überwachen können, relativ schnell viele kleinere Ereignisse erkennen. Weil all diese „Restantworten" einer DoS-Attacke auf Spoofmg-Basis bestimmte Details der Nachrichten enthalten, die der Angreifer ursprünglich erstellt hat, um diese Antworten auszulösen (z. B. Port- und Sequenznummem, Zeitangaben usw.), können wir ihnen wichtige Informationen zu Typ und Ausmaß des Angriffs entnehmen. Anhand der Antworten können wir bestimmen, ob ein bestimmter Dienst das Ziel war, wie viele Systeme ins Visier genommen worden waren, wie viel Bandbreite dem Angreifer zur Verfügung steht und mit welchem Tool er die Attacke durchgeführt hat. (Hierzu überprüfen wir die Auswahl der Quellports, die ausgesuchten Sequenznummem und die „zufälligen" IP-Muster.5) Schließlich bemerken wir bei der Analyse der Absender dieser „Querschläger" unter Umständen, dass ein bestimmtes Netzwerksegment aufs Kom genommen wird, oder können eventuell globale „Feindseligkeitstendenzen" erkennen, welche uns eine bessere Vorbereitung ermöglichen könnten, wenn ein bestimmter Markt oder ein bestimmtes Unternehmen das Ziel sind. Außerdem können wir mithilfe dieser Informationen mehr zu Angriffen erfahren, die vom Opfer aufgedeckt wurden, oder falsche Angriffsbehauptungen erkennen. (Dies sind Behauptungen von Cybertenoristen, die angeben, dass bestimmte Ziele gerade angegriffen werden; es handelt sich dabei meist um einen PR-Trick, um finanzielle Verluste zu rechtfertigen oder eine bestimmte politische Forderung auf die Tagesordnung zu setzen.0) 18.3 Wie man verstümmelte oder fehlgeleitete Daten erkennt Diese Anwendung des Black-Hole-Momtorings basiert auf der Überwachung von Daten, die vermeintlich sinnlos sind, aber trotzdem einen bestimmten Empfänger zu erreichen scheinen. Um das Problem besser veranschaulichen zu können, lassen Sie mich kurz abschweifen. Im Jahr 1999 stalteten ein paar Freunde von mir, Kollegen in Polen und ich ein kleines Feierabendprojekt. Ziel war es, eine schwer zu definierende Menge von RST+ACK- Paketen zurückzuverfolgen, die wir in Netzwerken, die von uns administriert wurden, bemerkt hatten, und ganz allgemein ungewöhnliche und unangeforderte Datenmuster zu beobachten, die in ungenutzten Netzwerksegmenten eintrafen. Es machte einen Riesenspaß Beispielsweise falschen einige Tools aufgrund von Programmierfehlem nur Pakete mit gerad- oder ungeradzahligen IP-Adressen. Analysen wie die von Jose Nazario und anderen durchgeführten sind irn Erkennen von Angriffstools meist ebenso gut wie im Identifizieren von Würmern. Kürzlich erst beschuldigten einige Fachleute SCO, ihre Server offline zu nehmen und so zu tun, als wären sie einer koordinierten DoS-Attacke zum Opfer gefallen; Grund für dieses Verhalten sei eine Diskreditierung der Linux-Community. 291
18 Der Blick in die Leere und fühlte, wie Sie sich vielleicht vorstellen können, zu einem gerüttelt Maß an Spekulationen, als wir versuchten, einige der befremdlichsten Fälle zu klären. Unsere Forschungen erlaubten es uns auch, niehr über die Welt um uns herum zu erfahren, weil wir auf einige überaus absonderliche und scheinbar unerklärliche Daten trafen, die uns - nachdem wir sie anständig analysiert hatten - mehr Einsicht in die gigantischen Verschwörungen unserer verdrahteten Welt gewährten. Zwar wurde das Rojekt formal eingestellt, es endete aber trotzdern in meinem privaten „Museum der zerbrochenen Pakete"7, eine halb scherzhaft gemeinten Webseite, die sich dem Aufspüren, Dokumentieren und Erläutern von Paketen widmet, die niemals ihren Empfänger hätten erreichen oder aber niemals so aussehen dürfen, wie sie es taten. Ich habe das Museum wie folgt beschrieben: Zweck dieses Museums ist es, eigenartigen, unwillkommenen und missgestalteten Paketen - verirrte und verwunschene Launen der Natur —, die wir armen Sterblichen auf den verzweigten Pfaden unserer großen Reise (Leben genannt) antreffen, Schutz zu gewähren. Unsere Exponate - Sie dürfen sie auch Bewohner nennen - sind häufig nur mehr ein Schatten dessen, was sie waren, bevor sie auf einen feindlich gesonnenen, kaputten Router trafen. Einige von ihnen wurden bereits als Freaks in den Tiefen einer defekten Implementierung des IP-Stapels geboren. Andere waren einst normale Pakete - so normal wie ihre Freunde (also Sie oder ich) —, gingen aber auf der Suche nach der elementaren Bedeutung ihrer Existenz verloren und gelangten dorthin, wo niemals ein Auge sie hätte schauen dürfen. In jedem Fall versuchen wir, die einzigartige Lebensgeschichte all dieser Pakete zu enträtseln, und wollen Ihnen helfen, zu verstehen, wie schwer es sein kann, ein einsamer Bote im feindlichen Universum der Bits und Bytes zu sein. Und genau das ist es, worauf sich der letzte Typ des Black-Hole-Monitorings reduzieren lässt. Zwar mag die Aufgabe anfangs sinnlos erscheinen, aber genau dies zu glauben ist absolut töricht. Das Museum ermöglichte es, auf passive Weise dunkle Geheimnisse proprietärer Geräte und gut geschützter Netzwerke zu lösen. Und wenn man ein solches Experiment an anderer Stelle ausfühlte, würde es zweifelsohne zur selben oder noch größerer Vollendung gelingen. Einige der Exponate in meinem Museum sind wahre Wunder. So etwa die folgenden: ■ Pakete, die aus Netzwerken stammen, in denen bestimmte Formen von Webbeschleu- nigern, Routern oder Firewalls eingesetzt werden. Solche Geräte hängen einige Daten einfach an, löschen andere oder verstümmeln sie auf irgendeine andere Weise. Ein gutes Beispiel ist ein Fehler in bestimmten Nortel CVX-Geräten, der dafür verantwortlich ist, dass TCP-Header gelegentlich aus Paketen entfernt werden (davon war in Kapitel 11 bereits die Rede). Die Einmaligkeit eines solchen Fehlere gestattet es uns, eine Menge über eine Anzahl entfernter Netzwerke zu erfahren, ohne dass wir sie erst sondieren rnüssten. Museuin of Brokea Packets, http://lcamtuf.corediimp.cx/mobp. 292
18.4 Denkanstöße ■ Einige aus Leitungsrauschen bestehende Exponate, die Pakete offenbaren, welche entweder völligen Datenmüll oder aber Daten enthalten, die gewiss nicht zu einer bestimmten Verbindung gehörten. Eines der außergewöhnlichsten Ausstellungsstücke ist unangeforderter Datenverkehr, der einen Dump des Inhalts der DNS-Zone .de darstellt (eine Auflistung aller Domänen in Deutschland). Die Daten konnten nicht von irgendwoher stammen, weil gewöhnliche Sterbliche nicht das Recht haben, eine solche Liste zu besitzen. Sie muss also von irgendeiner befugten Stelle kommen, die in der Position sein muss, solche Daten zu besitzen und zu übertragen. Die Verstümmelung muss entweder beim Absender oder bei einem Gerät irgendwo im Pfad erfolgt sein. Obwohl alle Fälle nur wenig Licht auf das Wesen von Pannen im Netzwerk werfen, beglücken derartige Fälle den Beobachter häufig mit unerwarteten - und oft weitvollen - Erkenntnissen. Weitere bemerkenswerte Exponate sind Fälle offensichtlicher Spionage, die als regulärer Datenverkehr getarnt waren, und viele andere kleinere Prograrnrnier- oder Netzwerkprobleme. Doch genug der Angeberei - wenn Sie sich veranlasst sehen, rnehr herauszufinden, besuchen Sie http://lcamtuf.coredump.cx/mobp/. 18.4 Denkanstöße Viele betrachten Black-Hole-Monitoring nur als weitere (und im Übrigen - angesichts der Ressourcenknappheit im öffentlichen IP-Adressraum - recht teure) Möglichkeit, Angriffe gegen ihre Systeme aufzudecken. Der wahre Wert dieser Methode besteht jedoch darin, dass sie nicht nur die Erkennung bekannter Angriffe ermöglicht - etwas, das man auch genauso gut an vielen anderen Standorten machen kann, ohne IP-Raum zu verschwenden -, sondern auch die Identifikation und Analyse subtiler Muster gestattet, die andernfalls in einem umfassend genutzten Netzwerk unterhalb der „Rauschschwelle" verschwinden würden. Natürlich ist diese Art des Black-Hole-Monitorings nicht ganz einfach dmchzuführen und zudem recht kostspielig. Es dauert seine Zeit, zu erlernen, wie man diese Nadel im Heuhaufen der normalen Wurm- und Black-Hat-Aktivitäten findet, die in einem ausreichend großen Netzwerk normalerweise keine andere als nur statistische Bedeutung haben. Doch der Spaß, diese Nadel schließlich zu finden, ist oft genug einen Versuch wert. 293
Literatur [Arki03] O. Arkin, J. Anderson: EtherLeak: Ethernet Frame Padding Information Leaks. @Stake, 2003. http://www. atstake. com/research/advisones/2003/atstake_etherleak_ repoti.pdf [Bakh95] S. Bakhtiari, R. Safavi-Naini, J. Pieprzyk: Cryptographic Hash Functions: A Survey. Centre for Computer Security Research, Department of Computer Science, Univer- sityof Wollongong (Australien), 1995. [Bank03] N. N.: PSYLock: A typing behaviour based psychometrical authentication method. Institut für Barikinnovation GmbH, 2003. http://pc50461.uni-regensburg.deäbi/de/ leistungen/research/projekte/einzelprojekte/psylockenglish.htm [BaraOl] A.-L. Barabasz, V. W. Freeh, H Jeong, J. B. Brochman: Parasitic Computing. Leserbeitrag in Nature Nr. 412, 2001. [Bell96] S. Bellovin: RFC 1948: Defending Against Sequence Number Attacks. NetworkWor- king Group, 1996. http://www.ietf.org/ifc/rfcl948.txt [Bem92] T. Bemers-Lee: Basic HTTP. 1992. http://www.w3c.org/Protocols/HTTP/ HTTP2.html [Biha96] E. Biham, A. Shamir: Differential Fault Analysis: Identifying the Structure of Unknown Ciphers Sealed in Tamper-Proof Devices. 1996. [Bing88] J. A.C. Bingham: The Theory and Practice of Modem Design. Wiley-Interscience, 1988. [BoiiOl] N. Borisov, I. Goldberg, D. Wagner: Intercepting Mobile Communications: The Insecurityof 802.11. 2001. [BoucOO] A. Bouch, A. Kuchinsky, N. Bhatti: Quality Is in the Eye of the Beholder: Meeting Users' Requirements for Internet Quality of Service. CHI, 2000. [Brad89] R. Braden (Hrsg.): RFC 1122: Requirements for Internet Hosts: Communication Lay- ers. Network Working Group, 1989. [Brad94] B. Braden: RFC 1644: T/TCP - TCP Extensions for Transactions - Functional Specification. Network Working Group, 1994. [brunOO] H Bninch, B. Cheswick: Tracing Anonymous Packets to Their Approximate Source. 2000. http://www. usenix. org/publications/library/proceedingsäisa2000/burch/ burch.html [Bush45] V. Bush: As We May Think. Atlantic Monthly 176, Nr. 1, 1945. S. lOlff.
[Case90] J. Case, M. Fedor, M. Schoffstall, J. Davin: RFC 1157: A Simple Network Management Protocol. Network Working Group, 1990. [ChesOO] B. Cheswick H. Burch, S. Branigan: Mapping and Visualizing the Internet. 2000. http://mvw.cheswick.com/ches/papers/mapping.ps.gz [Cryp03] N. N.: Evaluation of VIA C3 Nehemiah RandomNumber Generator. Cryptography Research Inc., 2003. [Eck85] W. van Eck: Electromagnetic Radiation from Video Display Units: An Eavesdropping Risk? PTT Laboratories, Niederlande, 1985. [EIA91 ] N.N.: Interface Between Data Terminal Equipment and Data Circiüt-Terrninating Equipment Employing Serial Binary Data Interchange. Electronic Industries Association, Engineering Department, 1991. [FeltOO] E. Feiten, M. Schneider: Timing Attacks on Web Privacy. ACM Conference on Computing and Communications Security, 2000. [Fiel99] R. Fielding, J. Gettys, J. Mogul, H. Frystyk L. Masinter, P. Leach, T. Berners- Lee: RFC 2616: HyperText Transfer Protocol - HTTP/1.1. Network Working Group, 1999. [HogyOl] M. A. Hogye, C. T. Hughes, J. M. Sarfaty, J. D. Wolf: Analysis of Feasibility of Keystroke Timing Attacks Over SSH Connections. CS588 Research Project, School of Engineering and Applied Science, University of Virginia, 2001. [Inte86] Intel 80386 Programmer's Reference Manual, Abschnitt 7.2, IMUL. Intel Corporation, 1986. [IS099] ISO/IEC-Standard 9899: Programming Language - C. 1999. http://plg.uwaterloo.ca/ ~cforalUN843.ps [Jaco92] V. Jacobson, B. Braden: RFC 1232: TCP Extensions for High Perfonnance. Network Working Group, 1992. [Jun99] B. Jun, P. Kocher: The Intel Random Number Generator. Cryptography Research Inc., 1999. [Knut97] Donald E. Knuth: The Art of Computer Programming, Volume 2: Seminumerical Algorithrns. 3. Auflage, Addison-Wesley, 1997. [KochOO] P. Kocher, J. Joffe, B. Jun: Differential Power Analysis. Cryptography Research, Inc., 2000. [Koch99] P. Kocher: Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems. Cryptography Research Inc., 1999. [Kraw92] H. Krawczyk: How to Predict Congruential Generators. Journal of Algorithrns 13, Nr. 4, 1992. [Kris97] D. Kristol, L. Montulli: RFC 2109: HTTP State Management Mechanism. Network Working Group, 1997. [Leec03] M. Leech: RFC 3607: Chinese Lottery Cryptoanalysis Revisited. Network Working Group, 2003. [Lugh02] J. Lughry, D. A. Umphress: Information Leakage from Optical Emanations. In: ACM Trans. Info. Sys. Security 5, Nr. 3, 2002. [Mairn96] U. Maimon: TCP Port Stealth Scanning. Phrack Magazine Nr. 49,1996.
[Mart86] G. Martin, K Corl: System Response Tirne Effects on User Productivity. Behaviour and Infoimation Technology, Vol. 5, Nr. 1,1986. S. 3ff [Math96] M. Mathis, J. Mahdavi, S. Floyd, A. Romanow: RFC 2018: TCP Selective Acknow- ledgment Options. Network Working Group, 1996. [Maur94] Ueli M. Maurer: Fast Generation of Prime Numbers and Secure Public-Key Cryp- tographic Parameters. Institute for Theoretical Computer Science, ETH Züiich, 1994. [Merk93] R. C. Merkle: Two Types of Mechanical Reversible Logic. In: Nanotechnology 4, 1993. [Mile02] M. Milenkovic, A. Milenkovic, J. Kulick: Demystifying Intel Branch Predictors. Electrical and Computer Engineering Department, University of Alabama in Hunts- ville, 2002. [Moba99] B .Mobasher, R. Cooley, J. Srivastava: Automatic Personalization Based on Web Usage Mining. ACM Communications Vol. 43, Nr. 8,1999. S. 142ff [Mogu90] J. Mogul, S. Dearing: RFC 1191: Path MTU Discovery. Network Working Group, 1990. [Morr85] R. Monis: A Weakness in the 4.2BSD UNIX TCP/IP Software. AT&T Bell Laboratories, 1985. [Murp97] I. A. Murphy: Who's Listening? IAM/Secure Data Systems, 1988/97. [Naza03] J. Nazario: Defense and Detection Strategies against Intemet Worms. Artech House, 2003. [Niel96] J. Nielsen: Top Ten Mistakes in Web Design. 1996. http://www.useit.com/aleribox/ 9605.html [Niel97a] J. Nielsen: TheNeed for Speed. 1997. http://www.useit.com/alertbox/9703a.html [Niel97b] J. Nielsen: Changes in Web Usability Since 1994. 1997. http://vAvw.useit.com/ alertbox/9712a. html [Niel99] J. Nielsen: The Top Ten New Mistakes of Web Design. 1999. http://www.useit.com/ alertbox/990530. html [OlssOO] M. Olsson: Extending the FTP ALG Vulnerability to any FTP client. VULN-DEV- Mailingliste, 2000. http:/Avww.securityfocus.com/archive/82/50226 [Plum82] D. C. Plummer: RFC 826: An Ethernet Address Resolution Protocol. Network Working Group, 1982. [PoolOO] M. Pool: Privacy Problems with HTTP Cache-Control. Bugtraq, 2000. http:// ceri.uni-stuttgart.de/archive/bugtraq/2000/03/msg00365.html [Post80] J. Postel: RFC 768: User Datagram Protocol. Network Working Group, 1981. [Post81a] J. Postel: RFC 791: Internet Protocol. Network Working Group, 1981. [Post81b] J. Postel: RFC 796: Address Mappings. Network Working Group, 1981. [Post81 c] J. Postel: RFC 793: Transmission Control Protocol. Network Working Group, 1981. [Post81d] J. Postel: RFC 792: Internet Control Message Protocol. Network Working Group, 1981. [Post85] J. Postel, J. Reynolds: RFC 959: File Transfer Protocol. Network Working Group, 1985.
[Post88] J. Postel, J. Reynolds: RFC 1042: A Standard for the Transit of Internet Protocol Datagrams Over IEEE 802 Networks. Network Working Group, 1988. http:// ■www. ietf.oig/ifc/ifcl 042. txt [Raym96] E. S. Raymond: The New Hacker's Dictionary. 3. Auflage. MIT Press, 1996. [Rive78] R. L. Rivest, A. Shamir, L. Adleman: A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Massachusetts Institute of Technology, 1978. [Rogo98] J. Rogozhin: A Universal Turing Machine with 22 States and 2 Symbols. In: Rornanian Journal of Information Science and Technology 1 Nr. 3,1998. [Sanf98] S. Sanfilippo: New TCP Scan Method. Bugtraq, 1998. http://seclists.org/bugtraq/ 1998/Dec/0082.html [Schw96] W. Schwartau: Information Warfare. 2. Auflage, Thunder's Mouth Press, New York, 1996. [Sene02] L. Senecal: Layer 2 Attacks and Their Mitigation. Cisco, 2002. [Sham04] A. Shamir, E. Tromer: Acoustic Cryptanalysis: On Nosy People and Noisy Machines. 2004. (Vorabpräsentation zum Zeitpunkt der Abfassung dieses Buches verfügbar unter http:/Avww. msdom. weizmann. ac. il/~t)-omer/acoustic/). [Shan50] C. E. Shannon: Prediction and Entropy of Printed English. Bell Systems Technical Journal 3,1950. [SolaOl] Solar Designer, D. Song: Passive Analysis of SSH (Secure Shell) Traffic. Openwall Project, 2001. http:/Avww.openwa!.Lcom/advisories/OW-003-ssh-trqffic-analysis [SongOl] D. X Song, D. Wagner, X Tian: Timing Analysis of Keystrokes and Timing Attacks on SSH University of California, Berkeley, 2001. [Spit02] L. Spitzner: Honeypots: Tracking Hackers. Addison-Wesley Publishing Company, 2002. [SpurOO] C E. Spurgeon: Ethernet: The Definitive Guide. O'Reilly & Associates, 2000. [Stew02] J. Steward: DNS Cache Poisoning: the Next Generation. 2002. http:// ivww. lurhq.com/dnscache.pdf [Turi36] A. Turing: On Computable Numbers, with an Application to the Entscheidungsproblem. Proceedings of the London Mathematical Society, 1936. [W3CoA] World Wide Web Consortmin, o. A. http://www.Mi3c.org/History.html [ZaleOl] M. Zalewsiä: Strange Attractors and TCP/IP Sequence Number Analysis. Bindview Corporation, 2001. http://www.bindview.com/Support/RAZOR/Papers/2001/ [ZaleOla] M. Zalewsiä: Linux Kernel IP Masquerading Vulnerability. Bindview Corporation, 2001. http://razor.bindview.conifyublish/advisories/adv_LkIPniasq.htnil [Ziem95] G. Ziemba, D. Reed, P. Traina: RFC 1858: Security Considerations for IP Fragment Filtering. Network Working Group, 1995. [ZwicOO] E. D. Zmcky, S. Cooper, D. Brent Chapman: Building Internet Firewalls. O'Reilly & Associates, 2000.
Nachwort Mit dem dieses Buch schließt Hier endet dieses Buch, aber ich hoffe, dass Ihre Reise hier erst anfangt. Stolz habe ich Ihnen die Welt komplexer und ungewöhnlicher Sicherheitsprobleme präsentiert, an denen ich selbst am meisten Spaß habe, und ich wünsche mir, Sie mit meiner Leidenschaft angesteckt zu haben. Es spielt keine Rolle, ob Sie ein pfiffiger Sicherheitsexperte sind - vielleicht einer mit rnehr Erfahrung und Beschlagenheit als ich - oder einfach ein Enthusiast, der ein neues Betätigungsfeld für sich entdeckt: Ich hoffe, dass ich Ihnen eine neue Perspektive zum Sicherheitsbereich vermitteln konnte - als Herausforderung, aber auch als Kunst an und für sich und nicht nur als eine Anzahl von Hindernissen, die beseitigt oder umgangen werden müssen. Wenn man die subtilen Beziehungen zwischen scheinbar beziehungslosen Komponenten und Prozessen versteht, kann man die meisten gefährlichen und tückischen Sicherheitsprobleme effizient beheben und die täglichen Risiken effektiver bewerten und mindern. Sicherheitsprobleme sollten - egal, wie trivial oder beschränkt sie auch sein mögen - als Funktion einer Lösung für praktisch alle Herausfordeningen in der Welt der IT und nicht als widrige Umstände betrachtet werden, die gute Geschäfte beeinträchtigen. Nur dann, wenn man den Zauber und Channe erkennt, der diesen einander ergänzenden Universen und ihrer subtilen Interaktion innewohnt, kann man Routine vermeiden und wirklich Spaß bei der Arbeit gewinnen oder sein Hobby genießen. Aber jetzt ist es weder der richtig Ort noch die passende Zeit für großes Pathos. Danke fürs Mitmachen. 295
Register A Address Resolution Protocol siehe ARP 110 Angreifer identifizieren 249 Angriffe analysieren 249 Anzeigegeräte 61 Berechnungskomplexität 29 Emission 61 Ethernet 114 Funkfrequenzen 61 Metriken 250 Netzwerkgeräte 75 webbasierte 67 Webcrawler 67 Anzeigegeräte 61 TEMPEST 62 ARP (Address Resolution Protocol) 110 Assoziativspeicher siehe CAM 111 Attraktor 181 verwenden 189 Athibutierung 64 Autonegotiation 115 Autonome Systeme 132 Autorensysteme 64 B Backbone-Router 132 Berechnungskomplexität 29 BGP (Boundary Gateway Protocol) 132 Black-Hole-Monitoring 285 Anwendungen 285 Blinding 59 Blinkehlichten 75 Boolesche Logik 29 Umsetzung 34 Bots 67 Boundary Gateway Protocol siehe BGP 132 Browser identifizieren 227 Bündelung siehe Trunking 112 c Cache 236 CAIDA (Cooperative Association for Internet Data Analysis) 275 CAM (Content Addressable Memory) 111 Überlauf 114 Carrier Sense Multiple Access with Collision Detection siehe CSMA/CD 86 Clamping siehe MSS 208 Clients identifizieren 227 Computer mechanischer 34 Prograrnmierbarkeit 44 Speicher 48 Connection Hij acking 168 Content Addressable Memory siehe CAM 111 Cookies 238 Cooperative Association for Internet Data Analysis siehe CAIDA 275 CSMA/CD (Carrier Sense Multiple Access with Collision Detection) 86 D Daten Herkunft ermitteln 278 Datenübertragung analoge 78 Dibits 81 DSL 84 Ethernet 86,103 FSK 79 Geschichte 79 Grundlagen 75 Hubs 89 Kollisionen 86 Manchester-Kodierung 77
Modems 78 NRZ 76 QAM 83 Routing 131 RS-232 85 Switches 89 USB 85 DeMorgans Gesetz 30 Anwendung 31 Denial of Service siehe DoS 278 despoof 279 DF-Flag (Don't Fragment) 155,210 Dibits 81 Diensttyp 137,156 Differential Phase Shift Keying siehe DPSK 80 Differentielle Phasen- umtastung siehe DPSK 80 Digital Subsciiber Line siehe DSL 78 Dokumente Metadaten 64 DoS (Denial of Service) 278 DPSK (Differential Phase Shift Keying) 80 DRAM (Dynamic RAM) 48 Drei-Schiitte-Handshake 145 DSL (Digital Subscriber Line) 78,84 DTP (Dynamic Trunking Protocol) 112 Autonegotiation 115 E Early-Out-Optirnierung 55 Emission 61 Entropie 11,13 erzeugen 15 Pool 15 Puffer 24 Erfüllbarkeitsgleichungen siehe SAT-Gleichungen 261 Ethernet 103 Adressierung 104 CSMA/CD 86 Fülldaten 106 Grundlagen 110 Hubs 89 Kollisionen 86 Mängel 119 Sicherheit 109 Switches 89 Tags 112 Trunking 112 F File Transfer Protocol siehe FTP 204 Fingerprinting passives 154,173,250, Firewalls 197 Grundlagen 198 zustandsbehaftete 202 zustandslose 199 Flipflop 40 Fragmentierung 139,199 Frequency Shift Keying siehe FSK 79 Frequenzumtastung siehe FSK 79 FSK (Frequency Shift Keying) 79 FTP (File Transfer Protocol) 204 Fülldaten 106 Funkfrequenzen 61 Funknetze WEP 124 Wi-Fi 123 G GUTD (Globally Unique Identifier) 64 H Handshake Drei- Schritte-Handshake 145 Hashing-Funktionen 16 Hidden Markov Model siehe Verborgenes Markow- Modell 22 HMM (Hidden Markov Model) 22 HTML (HyperText Markup Language) 231 HTTP (HyperText Transfer Protocol) 231 Cookies 238 Erweiterungen 234 Grundlagen 232 Header 233,237 sequenzieller Datenabruf 235 Hubs 89 HyperText Markup Language siehe HTML 231 HyperText Transfer Protocol siehe HTTP 231 I ICMP (Internet Control Message Protocol) Grundlagen 152 Header 153 Idle-Scanning 221,223 Abwehr 225 Impulsdehnung 97 Inhaltsadressierbarer Speicher siehe CAM 111 Initial Sequence Number siehe ISN 176
Register Internet Adressierung 132,143 kartographieren 275 Protokolle 130 Routing 130 Topologie 275 WWW 227 Internet Control Message Protocol siehe ICMP 152 Internet Protocol siehe IP 105 Interrupt 13 IP (Internet Protocol) 105 Adressen 110 Adressraum 132 Aufbau 135 Flags 139,155,210 Fragmentierung 139, 199 Grundlagen 135 Header 135 Kennung 141,221,224 Netzmasken 134 Offsets 139 Schwächen 141 TTL 138,155,278 IRQ (Interrupt Request) siehe Interrupt 13 ISN (Initial Sequence Number) ermitteln 177 Überblick 176 ISNProber 193 L LAN (Local Area Network) Funknetze 123 Risiken 119 Sicherheit 109,119 virtuelles 112 Lastausgleichssysteme 203 LED-Anzeigen 75,90 Leitungsbündelung siehe Trunking 112 Logik Boolesche 29,34 Gatter 36 Tmingmaschine 42 Wahrheitstabellen 31 Logikgatter 36 M MAC-Adresse (Media Access Control) 104 Manchester-Kodierung 77 Masquerading 158,203 Risiken 206 Maximum Segment Size siehe MSS 150 Maximum Transmission Unit siehe MTU 137 Media Access Control siehe MAC-Adresse 104 Message-Digest-Rinktionen 16 Metadaten 64 Microsoft Word 64, 65 Modems 78 interne vs. externe 85 MSS (Maximum Segment Size) 150,160,207 Clamping 208 MTU (Maximum Transmission Unit) 137 N NAT (Network Address Translation) 197,203 Netzadressübersetzung siehe NAT 197 Netzbelastungsaiialyse 282 Netzmasken 134 Netzwerke Adressauflösung 110 Anomalien 197 Architektur 114 Belastungsanalyse 282 Black- Hole-Monitoring 285 Ethernet 109 LANs 109 Masquerading 158,203 Switching 110 Topologie 275 Triangulation 280 VLAN 112 Netzwerkgeräte 75 Non-Return-to-Zero siehe NRZ 76 NP-Problem (nicht- polynomisches Problem) 260 NRZ (Non-Return to Zero) 76 K Kollisionen 86 Kryptografie 9 mit öffentlichen Schlüsseln 9 Pseudoprimzahlen 11 RSA 9 unidirektionale 16 o Oföceprograrnme 64 Open Systems Interconnection siehe OSI Modell 104 Operatoren AND 30 NAND 32 NOR 32 NOT 30 OR 30 XOR 37
OSI-Modell (Open Systems Ihterconnection) 104 Overlapping Fragment Attack 199 P pOf 161,215 Padding siehe Fülldaten 106 Paketfilter zustandsbehaftete 202 zustandslose 199 Parasitic Computing 259 Abwehr 273 Anwendung 273 Praxis 263 Parasitic Storage 259,265 Passives Fingeiprinting 250 Abwehr 166,194 Attraktoren 192 Geschichte 154 Grundlagen 154 Metriken 155 Praxis 161 Vor-/Nachteile 173 Vorbeugung 166, 194 Path Maximum Transmission Unit siehe PMTU 139,207, 210 Pipelining 49 Probleme 50 Verzweigungsprognose 51 PMTU (Path Maximum Transmission Unit) 139, 207,210 Portadressierung 143 Port-Scanning 250 Idle-Scanning 222 PRNG (Pseudo Random Number Generator) 12 Prozessor Register 41 Prüfsurnme 141 Pseudo Random Number Generator siehe PRNG 12 Pseudoprhnzahlen 11 Pseudozufallszahlen- generatoren siehe PRNG 12 Q QAM (Quadrature Amphtude Modulation) 83 R Reconnaissance 173 Register 41 Return-to-Zero siehe RZ 100 Röhrenmonitore 61 TEMPEST 62 Routing Advertisements 210 Backbone-Router 132 Grundlagen 131 IP-Adressen 132 Praxis 132 RS-232 85 RSA-Algorithiuus 9 RZ (Return-to-Zero) 100 s SAT-Gleichungen (Satisfiability) 261 Schlüssel öffentliche und geheime 9 Schnittstellen RS-232 85 Sequenznummern 176 Server Message Block siehe SMB 123 Sicherheit Tastaturaktivitäten 7 Simple Network Management Protocol siehe SNMP 121 Skitter 276 SMB (Server Message Block) 123 SNMP (Simple Network Management Protocol) 121 Spanning Tree Protocol siehe STP 113 Speicher 48 DRAM 48 SRAM 48 Speicherlecks 66 Spoofmg 275 erkennen 278 SRAM (Statte RAM) 48 Staging 47 STP (Spanning Tree Protocol) 113,115 Switches 89,110 SYN-Cookies 201 T Tags 64 Tastatur abhören 23 Bediencharakteristika 21 Funktionsweise 14 überwachen 7 Tastaturaktivitäten 7 TCP (Transmission Control Protocol) Dringlichkeitszeiger 150 Flags 145, 149 Grundlagen 144 Handshake 145 Header 144,215 ISNs 176 MSS 150,160,207 Optionen 150,159
Register TEMPEST (Transient Electromagnetic Pulse Emanation Standard) 62 Textverarbeitungs- progranime 64 Speicherlecks 66 Time-to-Live siehe TTL 138 Tirning-Angriffe Rechenkomplexität 53 tastaturbasierte 7 Topologie 275 Triangulation 280 TOS (Type of Service) siehe Diensttyp 137 traceroute 138 Transient Electromagnetic Pulse Emanation Standard siehe TEMPEST 62 Transmission Control Protocol siehe TCP 144 Triangulation 280 TRNG (True Random Number Generator) 25 Trunking 112 TTL (Time-to-Live) 138, 155,278 Turingmaschine 42 universelle 44 Type of Service siehe Diensttyp 137 u UDP (User Datagram Protocol) Grundlagen 142 Header 144 Ports 143 Universal Serial Bus siehe USB 85 Universelle Turmgmaschine 44 USB (Universal Serial Bus) 85 User Datagram Protocol siehe UDP 142 UTM siehe Universelle Tiirmgmaschine 44 V Verborgenes Markow -Modell 22 Verhaltensanalyse 227,250 Anwendungsvorschläge 246 Definition 229 Praxis 242 Verkürzung siehe Hash- Funktionen 17 Verschlüsselung siehe Kryptografie 9 Verzweigungsprognosen 51 Virtual LAN siehe VLAN 112 Virtual Private Network siehe VPN 120 Viterbi-Algorithmus 22 VLAN (Virtual LAN) 112 Trunking 112 VPN (Virtual Private Network) 120 w Wahrheitstabellen 31 Webcrawler 67 WEP (Wired Equivalent Privacy) 124 Wi-Fi (Wireless Fidelity) 123 World Wide Web siehe WWW 227 Cache 236 Geschichte 230 z Zeitverzögerte Koordinaten 179 Zufälligkeit siehe Entropie 11 Zufallszahlen 8 erzeugen 11,25 Generatoren 12,25 Hardwaregeneratoren 25 PRNGs 12 Sicherheit 7 Zwischenspeicher siehe Cache 236 305
WISSEN, WIE HACKER TICKEN // ■ Zeigt als bislang einziges Buch wenig beachtete Schwachstellen der Datenkommunikation auf ■ Deckt alle Phasen und Verfahren heutiger Datenkommunikation in Netzwenken ab ■ Dokumentiert das „Hacker'-Denken sowie nicht alltägliche und deshalb besonders gefährliche Bedrohungen \ STILLE IM NETZ // Wer sich mit Fragen der Sicherheit von Netzwerken und der Datenkommunikation beschäftigt, findet Unmengen an Büchern, die sich entweder mit den bekannten Hackingszenarien beschäftigen oder sich auf Viren, Trojaner und Würmer beschränken. „Stille im Netz" ist anders. Hacker suchen oft nach dem Weg des geringsten Widerstandes oder nicht alltäglichen Angriffsszenarien. Diese finden sie genau dort, wo das Wissen um mögliche Gefahren fehlt Deshalb liefert das Buch keine fertigen Lösungen für konkrete Gefahren und wiegt den Leser nicht in absoluter Sicherheit denn die ist illusorisch. Es erklärt vielmehr, wie Hacker denken, wo und wie sie nach Lücken in Systemen suchen, welche Gefahrentypen es gibt und weshalb sie gefährlich werden können. Ziel ist es, den Leser dafür zu sensibilisieren, Bedrohungen zu erkennen und adäquat darauf zu reagieren. Denn nur wer sich in die Logik des Hackers hineinversetzt so Zalewskis Überzeugung, kann Angriffe wirklich effektiv abwehren. Ein hochinformatives Buch, das für manchen Aha-Effekt sorgt und zeigt wie man sich winksam schützt // Excellentl This is one that I would dub a must-read for anyone working directly with network security // Tom Bradley, netsecurity.aboutcom michal ZALEWSKI, der sich seit seiner Jugend mit nahezu allen Aspekten der Computersicherheit beschäftigt hat als Sicherheitsfachmann für verschiedene Unternehmen in den USA und seiner Heimat Polen gearbeitet. Er ist anerkannter Fachmann auf dem Gebiet der Rechner- und Netzwerksicherheit und Autor zahlreicher Fachartikel. f-\/\ [\S\}A\ www.hanser.de/computer ISBN-10: 3-446-40800-2 ISBN-13: 978-3-446-40800-5 IT-Sicherheitsbeauftragte, Teammitglieder in Securityprojekten sowie System- und Netzwerkadministratoren ?63Mm="mjß005"