| Home Profil Fun |
#76 Linux 25.06.2009
Untersuchung gehackter Linux-ServerHier finden sich einige Tipps und Kommandos, die man im Falle eines gehackten Servers oder bei Verdacht darauf anwenden kann. Sie sollen dazu dienen, sich ein klareres Bild von der Situation zu verschaffen und strukturiert vorzugehen. 1. Langsam, überlegt und ruhig vorgehen 2. Alles, was man durchführt genau dokumentieren 3. Falls man in einer Firma ist, macht es Sinn das Management zu informieren 4. Entscheiden ob man a) den Server live untersucht oder b) den Server sofort ausschaltet (Stromkabel direkt ziehen, nicht herunterfahren) und ihn anschließend in Ruhe untersucht Beides hat vor und Nachteile. Im zweiten Fall gehen Informationen aus dem RAM wie Prozesstabelle, Sockets etc. verloren. Im ersten Fall läuft man Gefahr, dass der Angreifer erfährt, dass man ihn bemerkt hat und er sofort anfängt Spuren zu löschen, zu verschwinden oder gar Daten zu löschen. Allerdings ist es extrem unwahrscheinlich einem realen Angreifer direkt gegenüberzusitzen, meist handelt es sich um Programme. Daher tendiere ich zu a). Letztlich ist es Abwägungssache. Möglichkeiten den Speicherinhalt (RAM) zu sichern: Bei laufendem System mit /dev/mem und netcat: Loghost: netcat -v -l -p 9000 | dd of=ram.ddBetroffender Host: dd if=/dev/mem | netcat IP_LOG_HOST 9000 Jedoch ist /dev/mem weniger aussagekräftig, da es manipuliert sein kann. Eine Möglichkeit für nicht-virtualisierte Systeme ist msramdumper. Dies muss allerdings schon vorher auf einem USB-Stick vorbereitet worden sein und lässt sich nur verwenden, wenn man das System per USB booten kann. Ist das System virtualisiert gibt es eine dritte Möglichkeit: Den RAM vom übergeordneten Host aus zu sichern. Bei XEN sähe das z.B. so aus: xm save VM1 VM1.chk a) Live-Untersuchung Hier versucht man den Zustand des Systems hinsichtlich verschiedener Parameter in Erfahrung zu bringen. Dies beinhaltet u.a. Festplattenplatz, Uptime, CPU-Auslastung, Speicherverbrauch, Netzwerklast, Mailaufkommen, usw. Es ist sinnvoll sich die Ausgaben aller folgenden Kommandos zu sichern. Überblick über den Festplattenlatz. df -h Wie ist der Zustand und die Konfiguration der Netzwerkinterfaces? ip a Wie sieht die Routing-Tabelle aus? route -n Was ist gemountet? mount Welche Kernelmodule sind geladen? lsmod Welche Prozesse laufen? ps gauxwwwManchmal werden Prozesse z.B. mit eckigen Klammern versehen, um sie zu tarnen, so könnte man sie auf den ersten Blick übersehen und sie für Kernelprozesse halten. Besonderes Augenmerk gelten allen ungewöhnlichen Prozessen, die mit dem Benutzer des Webservers laufen. Auch sollte man prüfen, ob wichtige Prozesse wie der System-Loggingdienst NICHT laufen. Ausführbares Binary zu einer Prozess-ID (PID) lokalisieren. cat /proc/PID/cmdline Die Memory-Map eines Prozesses im Extended-Format ausgeben. pmap -x PID...und im Device-Format pmap -d PID Überblick über Sockets und Ports. netstat -patuneEin typisches Beispiel hier wäre der Port eines IRC-Clients: 6667. Es ist auch sinnvoll sein System von außen z.B. mit nmap zu scannen, um zu sehen welche Ports tatsächlich offen sind. Die Systemaufrufe ansehen, die ein laufender Prozess auslöst. strace -p PID Offene Filehandles eines Prozesses anzeigen. lsof -p PID Schauen, wer auf eine verdächtige Datei oder Partition zugreift. fuser -v DATEI fuser -m GEMOUNTETE_PARTITION Prüfen, ob ein Netzwerkinterface in den Promiscuous-Mode gesestzt wurde. Dies kann dazu dienen, den Netzwerkverkehr abzuhören. dmesgIn der Ausgabe nach "device entered promiscuous mode" suchen. Den Netzwerkverkehr selbst abhören. tcpdump -i ethX Mit rkhunter das System auf Rootkits, manipulierte Systemdateien und anderes untersuchen. Wichtig ist hierbei vor dem Ausführen die aktuellsten Daten herunterzuladen. rkhunter --update rkhunter --checkall Möchte man den Zugriff einer einzelnen IP von außen sperren reicht ein einfaches iptables-Kommando. iptables -A INPUT -s IPADRESSE -j DROP Zuletzt geänderte Dateien in einem Ordner anzeigen. Zum Beispiel alle Dateien, die innerhalb der letzten 3 Stunden geändert wurden: find /srv/www -type f -mmin -180 | xargs -r ls -l b) Spätere Festplattenuntersuchung Die Partitionen der Festplatte des kompromitierten Systems sollten nur read-only gemountet werden und dann eine Kopie davon erstellt werden. Anschließend nur noch mit der Kopie arbeiten. mount -o ro [-t ext3] /dev/xyz /mnt/xyz Die letzten Zugriffe auf Dateien anzeigen. stat DATEI Nach Zugangsdaten oder sonstigen Informationen in verdächtigen Binaries suchen. strings -a BINÄRDATEI Generell sind alle verfügbaren Logs von Fireall, mod_security, Webserver, Mailserver, IDS usw. mit grep auf verdächtige Einträge zu untersuchen. Leider muss man dies auch bis zu einigen Monaten früher durchführen, da ein Angreifer oft längere Zeit nach dem Einbruch wartet bevor er das System tatsächlich für seine Zwecke missbraucht. Wiederum besonders detaillierte Untersuchungen sind bei den Webserver-Logdateien angeraten. Strings wie "wget", "fetch", "shell", "=http://" und ähnliche Konstrukte stellen in der Regel Angriffsversuche dar. Auch der Absturz oder Hänger von Anwendungen kann ein Kennzeichen für Angriffe sein, was sich in den entsprechenden Logs zeigen kann. Entspricht der freie Festplattenplatz tatsächlich den Erwartungen? Skripte von Hackern werden oft in /tmp oder /var/tmp abgelegt. Diese Ordner sollte man nach Skript-Code durchsuchen. Manchmal enthalten diese Dateien Source-Code in einer absichtlich unleserlichen Form. Man sieht zwar Source-Code aber Variablennamen, Funktionsnamen etc. haben lange und verwirrende Zeichenfolgen oder bestehen einfach nur aus Ziffern, Einrückungen und Zeilenumbrüche werden entfernt. Weiterhin sind alle hochgeladenen Bilder und Dateien zu untersuchen ob sie Source-Code enthalten. Manche Hacker laden Bilder hoch, die jedoch in Wirklichkeit Skriptdateien sind. Auch alle Dateien mit seltsamen Dateinnamen bzw. versteckte Dateien sollte man sich genauer ansehen. Alle Dateien unterhalb des Webserververzeichnisses sollten auf typischen Phishing-Inhalt durchgesehen werden. Zum Beispiel lässt sich ein grep nach "Paypal", "ebay" und Ähnlichem durchführen. Optimalerweise hat man Tools wie Aide vorher verwendet. In diesem Fall kann man nun das System dahingehend prüfen ob wichtige Binärdateien des Systems wie ps oder top manipuliert wurden. Die Dateien /etc/passwd, /etc/shadow und /etc/group sollten keine ungewöhlichen, neuen oder fehlenden Einträge haben. Hat man ein schadhaftes Binary gefunden geht es daran herauszufinden, was es macht bzw. gemacht hat. Als letzte Möglichkeit dazu kann man mit nm(Binutils) die Symboltabellen auslesen und mit objdump den Code disassemblieren. Dies befindet sich jedoch weit jenseits der Praxisrealität, da tiefgehendes Know-how und viel Zeit dafür notwendig wären. Härtung von Apache-Webservern |