SelfLinux Sicherheit Grundlagen Sicherheit Abschnitt 12 | SelfLinux-0.13.0

| Grundlagen Sicherheit | Autoren Formatierung GFDL

#### 12 Notfallplan im Falle einer Systemkompromittierung

#### 12.1 Grundsätzliches

Wenn man einen erfolgreichen Einbruch entdeckt, ist es äußerst wichtig, die Spuren zu sichern, damit man den Tathergang nachvollziehen kann. Dies ist die Voraussetzung, um wirksame Gegenmaßnahmen bestimmen und durchführen zu können. Mit dieser Thematik beschäftigt sich die "Digitale Forensik", die an dieser Stelle nicht detailliert vorgestellt werden kann. Wir versuchen in dieser kurzen Einleitung lediglich, einige wichtige Grundaussagen mit praktischen Tipps zu verbinden.

Nach der Entdeckung eines Einbruchs ist es besonders wichtig, Ruhe zu bewahren und möglichst keinerlei hastige Eingriffe zu tätigen, da bereits beim Eingeben von Kommandos wichtige Informationen zur Rekonstruktion des Angriffes verloren gehen können.

#### 12.2 Protokollierung des Einbruches und der Gegenmaßnahmen

Es sollten einige grundsätzliche Informationen unbedingt schriftlich festgehalten werden, damit man später auch vor Gericht Beweise vorlegen kann:

- Wann wurde der Einbruch festgestellt (Datum, Uhrzeit)?
- Welche Systeme sind / waren betroffen?
- Wer bemerkte den Einbruch?
- Welche Maßnahmen wurden durch wen eingeleitet?
- ......

Die Protokollierung sollte für jeden einzelnen Schritt der Angriffsrekonstruktion mit genauer Angabe von Datum und Uhrzeit beibehalten werden.

#### 12.3 Isolation des Rechners / Subnetzes

Bei besonders sensiblen Daten ist es unter Umständen das Wichtigste, das kompromittierte System vom Netz zu trennen, indem man einfach das Netzwerkkabel entfernt. Auf das Herunterfahren des Rechners sollte unbedingt verzichtet werden, da ansonsten vom Angreifer manuell gestartete Prozesse (oder eingebundene Kernelmodule) nach einem Neustart nicht mehr aktiv sind.

#### 12.4 Backup und Rekonstruktion

Die Sicherung eines kompromittierten Systems ist die Grundlage für das Nachvollziehen eines Angriffes. Äußerst wichtig ist es, dass alle Textein- und Ausgaben aufgezeichnet werden. Graphische Ausgaben sollten per Screenshots gesichert werden (z.B. mit xwd oder gimp).

Man sollte einen aktuellen Schnappschuss (Snapshot) des Systems auf einem Backup-Medium erzeugen. Die Sicherung der Daten sollte in Reihenfolge ihrer Vergänglichkeit erfolgen:

- Cache, Hauptspeicher
- Netzwerkverbindungen
- Prozesse
- Festplattendaten
- Daten auf Disketten, CD-RW, Streamer, ...
- Daten auf CD-R, Notizen, Post-It-Notes, ...

Die "Spurensicherung" und Analyse wird durch verschiedene Softwaresammlungen unterstützt. Zu diesen gehören unter anderem TCT, TCTUtils, und cryptcat. Auf keinen Fall sollten die möglicherweise kompromittierten Programme des Opferrechners zum Einsatz kommen, viele Root-Kits tauschen Systemprogramme wie ps und lsmod einfach aus. Die sichere Alternative besteht darin, eine "saubere" Rettungsdistribution von Diskette oder CD-Rom zu mounten und deren Systemprogramme zu verwenden. (Nicht Booten sondern nur Mounten!!!) Zu empfehlen sind hier neben Knoppix auch sogenannte "Business Cards", also Rettungs-CDs in Scheckkartengröße. Zwei Vertreter können als ISO-Image unter http://www.lnx-bbc.org/ bzw. http://www.inside-security.de/INSERT.html heruntergeladen werden.

Folgende Maßnahmen sind bei den meisten Einbrüchen sinnvoll:

Aufzeichnung aller Sicherungsaktionen auf einen anderen Rechner
mkfifo named_pipe
script -f named_pipe
cat named_pipe | nc LogHost LogPort

Datensammlung auf anderen Rechner mittels nc (netcat)

- kompromittierter Rechner:
  [Daten] | nc -w 2 [LogHost-IP] 6666
- LogHost:
  nc -l -p 6666 | gzip >> datei.gz

Bei nicht vertrauenswürdigen Netzen sollte die Kommunikation verschlüsselt werden:

- kompromittierter Rechner:
  [Daten] | des -e -c -k [Schlüssel] | nc -w 2 [LogHost-IP] 6666
- LogHost:
  nc -l -p 6666 | des -d -c -k [Schlüssel] >> Datei

z.B. Hauptspeicher:

- kompromittierter Rechner:
  dd if=/dev/mem | nc -w 2 192.168.1.5 6666
- LogHost:
  nc -l -p 6666 > mem.img
- Prozesse:
  ps enf -Aelf --cols 1000 ls -lR /proc/[0-9]*

Konfiguration der Netzwerkkarten
ifconfig -a
netstat -iea
ip addr show (iproute2-Utilities)

Routingtabellen
netstat -rn
iproute2-Utilities

- ip route show table main
- ip rule show (iproute2-Utilities)

Paketfilterregeln
iptables -L -vn --line-numbers

geöffnete Dateien
lsof
aktuelle Netzwerkverbindungen
lsof -i
Sockets
lsof -U
Gelöschte aber noch offene Dateien
lsof +L1

Einbrecher können ein Programm auch nach dessen Start löschen. Man kann bei installiertem proc- Filesystem gerade ablaufende Programme wieder in eine Datei sichern:
cat /proc/[PID]/exe > programm.bin

weiterhin:

- last (letzter eingeloggter Benutzer)
- who (aktuelle Benutzer)
- w (welcher Benutzer führt was aus?)
- arp
- fdisk
- ......

Partition übers Netz sichern:

- kompromittierter Rechner: dd if=/dev/hda1 | nc -w 2 [LogHost-IP] 6666
- LogHost: nc -l -p 6666 | gzip >> hda1.img.gz

#### 12.5 Analyse des Angriffs

Nun hat man alle wichtigen Informationen gesichert und kann selbst versuchen, den Einbruch nachzuvollziehen. Dadurch schafft man die Grundlage, um einem erneuten Eindringen vorzubeugen. Alternativ dazu kann man mit speziellen Überwachungsfunktionen einen wiederholten Einbruch automatisch und damit sehr schnell aufdecken. (honeypot / Honigtopf).

Folgende Informationen müssen nun ausgewertet werden:

- veränderte Konfigurationsdateien
- veränderte Systemprogramme
- eingeschleuste Programme (meistens in versteckten Ordnern)
- Sniffer
- Logfiles
- Speicherinhalt / offene Netzwerkverbindungen

In die Auswertung müssen natürlich alle vom Opfersystem erreichbaren Rechner einbezogen werden. Dies beinhaltet sowohl Netzwerkrechner als auch Systeme mit einem Remote-Zugang (z.B. Laptops).

Zu den konkreten Maßnahmen, die durchzuführen sind, gehören unter anderem:

- Auflisten aller Dateien / Verzeichnisse mit s-Bit (Finden von root-Shells)
  find / -type f \(perm -04000 -o -perm -02000\) \exec ls -lg {}\;
- Herausfinden von Dateien / Verzeichnissen mit ungewöhnlichen Namen
  find / -name ".." -print find / -name "..." -print find / -name ".mail" -print
- Herausfinden von Remote-Zugriffen des Superusers
  grep "uid=0" /var/log/*
- Herausfinden aller ssh-Verbindungen von unbekannten Rechnern (Prinzipiell sollte der Remote Zugriff nur von bekannten Rechnern ausgehen)
  grep "Connection" /var/log/*
- Herausfinden einer gezielten Manipulation der Logfiles (abruptes Enden von Logfiles deutet auf Manipulation)
  head /var/log/messages head /var/log/secure
- Kontrolle von passwd, hosts.allow, hosts.deny, inetd.conf, xinetd.conf auf mögliche Veränderungen (Systembenutzer wie z.B. www-run, news, sync dürfen keine Login-Shell besitzen)
- Feststellen eines Sniffers (Netzwerkschnittstelle im Promiscuous Modus) ifconfig
  eth0 Linkverkapselung: Ethernet Hwaddr 08:FF:TF:i6:88:51:B9
  inet addr 192.168.1.112 Bcast:192.168.1.255 Mask 255.255.255.0
  UP BROADCAST RUNNING PROMISC
  Multicast MTU:1500 Metric:1
  Empfangene ...
- Überprüfung von cron und at Jobs
- Verdächtige Binaries mit "strings" ansehen
- Manche Angreifer sind ziemlich "blöd"
  cat .bash_history

Beim Überprüfen dieser und anderer Einbruchsspuren hilft auch das TCT (The Coroner's Toolkit), welches skriptbasiert sämtliche Aufzeichnungen sammelt. Die gesammelten Informationen muss man allerdings noch manuell auswerten. Eine weitere interessante englischsprachige Quelle ist: http://www.securityfocus.com/infocus/1503

#### 12.6 Meldung des Angriffs

Wen sollte man informieren?

- den Systemadministrator, von dessen Rechner der Angriff ausging (Email an root@ip-Adresse oder root@systemdomain.de)
- alle möglicherweise betroffenen Systemadministratoren
- möglicherweise den ISP (z.B. AOL / T-Online)
- möglicherweise den CERT

Was soll wie gemeldet werden?

Auf den Internetseiten des CERT findet man einen englischsprachigen Vordruck, deshalb sollen hier nur die wichtigsten Angaben aufgeführt werden:

- eigene Email-Adresse
- Firmenanschrift, Tel. und Fax
- eigene IP-Adresse, Hostname und Domain
- Liste aller am Angriff beteiligten Rechner (IP-Adressen)
- genauer Zeitpunkt der Attacke
- detaillierte Beschreibung des Angriffs
- Angaben über Angriffserkennung
- wichtige Logfile-Einträge
- Auflistung der Forderungen (z.B. Bitte, die Angriffe zu unterlassen oder Erklärung, wie es dazu kommen konnte)