Dieser Artikel listet die verfügbaren Tools zum Durchführen einer Analyse eines kompromittierten Servers auf. (Das Säubern des kompromittierten Servers liegt außerhalb seines Bereichs.) Mithilfe dieser Tools können Sie die folgenden Informationen ermitteln:
- Der Einstiegspunkt
- Der Ursprung des Angriffs
- Welche Dateien sind kompromittiert
- Die Zugriffsebene, die der Angreifer erhalten hat
- Der Prüfpfad der Spuren des Angreifers
Viele verschiedene Arten von Kompromittierungen können einen Unix®-Server ausnutzen. Angreifer könnten einen Brute-Force-Angriff starten, ein schwaches Passwort erraten oder versuchen, bekannte Software-Schwachstellen auszunutzen, in der Hoffnung, dass der Server keinen regelmäßigen Patch-Zeitplan hat. Es ist wichtig zu verstehen, wie der Computer kompromittiert wurde, um das Ausmaß des Schadens an Ihrem Server und anderen Hosts zu bestimmen, auf die der kompromittierte Computer zugreifen kann.
Bei den meisten Kompromissen auf Root-Ebene besteht der einfachste Wiederherstellungsansatz darin, eine Neuinstallation des Servers durchzuführen und alle kritischen Daten aus Sicherungen wiederherzustellen. Bis Sie jedoch den Einstiegspunkt der Kompromittierung kennen, reicht dieser Schritt möglicherweise nicht aus, da Sie die Kompromittierung verstehen müssen, damit Sie die Sicherheitslücke ordnungsgemäß schließen können.
Dokumentieren Sie den Angriff
Wenn Sie benachrichtigt werden, dass ein System unter Ihrer Kontrolle möglicherweise kompromittiert ist, stellen Sie sicher, dass Sie so viele Informationen wie möglich vom Melder erhalten, einschließlich der folgenden Punkte:
- Wie das anfängliche Problem gefunden wurde
- Der geschätzte Zeitpunkt, zu dem die Kompromittierung aufgetreten ist
- Ob der Server geändert wurde, nachdem die Kompromittierung erkannt wurde
- Alles andere, was der Reporter sagt, das wichtig ist
Wichtig :Wenn Sie beabsichtigen, die Strafverfolgungsbehörden einzubeziehen, dürfen Sie auf keinen Fall weitere Maßnahmen auf dem Server ergreifen. Der Server muss zu Beweiszwecken in seinem aktuellen Zustand bleiben.
Wenn Sie mit der Untersuchung fortfahren möchten, dokumentieren Sie alles, was Sie auf dem Server finden. Dieser Schritt kann so einfach sein wie das Kopieren und Einfügen eines Befehls und seiner Ergebnisse.
Ermittlungstools
Bei manchen Kompromittierungen gelingt es dem Angreifer, alle wichtigen Protokolldateien zu löschen, um seine Spuren zu verwischen. Dies geschieht jedoch nicht immer. Infolgedessen enthalten die Logfiles wertvolle Hinweise darauf, was der Angreifer mit dem Server gemacht hat. Die Protokolldateien können Ihnen auch dabei helfen festzustellen, ob es sich bei dem Angriff um einen einfachen Web-Hack oder eine Kompromittierung auf Root-Ebene handelte. Verwenden Sie die Befehle in diesem Abschnitt, um Hinweise zu finden, die Ihnen dabei helfen, das Ausmaß der Kompromittierung aufzudecken.
letzter Befehl
Der last
Der Befehl listet die Sitzungen von Benutzern auf, die sich kürzlich beim System angemeldet haben. Die Ausgabe enthält die Zeitstempel und Hostnamen und gibt an, ob der Benutzer noch angemeldet ist. Wenn in der Ausgabe eine ungerade IP-Adresse (Internet Protocol) angezeigt wird, können Sie sie mit einem Brute-Force-Secure-Shell-Angriff (SSH) im abgleichen /var/log/messages oder /var/log/secure Verzeichnis. Dieser Schritt kann Aufschluss darüber geben, wie der Angreifer Zugang erlangt hat, welchen Benutzernamen er verwendet hat, um sich Zugang zu verschaffen, und ob er in der Lage war, seine Berechtigungen auf root
auszudehnen .
ls-lart-Befehl
Der ls -lart
Der Befehl gibt eine nach Zeit geordnete Liste von Dateien und Verzeichnissen aus, mit denen Sie korrelieren können, wann die Kompromittierung aufgetreten ist. Diese Ausgabe kann Ihnen dabei helfen festzustellen, was durch den Angriff zum System hinzugefügt oder entfernt wurde.
netstat -na-Befehl
Die netstat -na
Der Befehl zeigt die aktuellen lauschenden Sockets auf der Maschine an. Wenn Sie diesen Befehl ausführen, werden möglicherweise lauschende Hintertüren oder fehlerhafte Dienste angezeigt, die ausgeführt werden.
ps -wauxef-Befehl
Dieser Befehl hilft Ihnen, alle fehlerhaften Prozesse aufzuspüren, die lauschen, und zeigt andere seltsame Prozesse an (z. B. der Benutzer www
Ausführen eines Bash-Prozesses). Sie können auch den Befehl lsof |grep <pid>
ausführen um weitere Informationen zu geöffneten Dateien zu finden, die ein Prozess verwendet. Gleichzeitig wird cat /proc/<pid>/cmdline
ausgeführt könnte Ihnen auch sagen, wo die Datei existiert, die einen Prozess steuert.
bash_history-Befehl
Die Verlaufsdatei ist oft der Rosetta-Stein, um nachzuverfolgen, was zu einem Kompromiss geführt hat. Verwenden der bash_history
Befehl, um die .bash_history
des Benutzers zu durchsuchen Datei zeigt oft genau, welche Befehle sie ausgeführt haben, welche schädlichen Programme sie heruntergeladen haben und auf welche Verzeichnisse sie sich konzentriert haben.
oberster Befehl
Schädliche Prozesse verursachen häufig Konfliktprobleme mit der Zentraleinheit (CPU) innerhalb der Umgebung und erscheinen daher ganz oben in der Liste der Prozesse. Verwenden Sie die top
Befehl, um diese Liste anzuzeigen. Betrachten Sie beim Aufspüren einer Kompromittierung alle Prozesse, die CPU-Konfliktprobleme verursachen, als verdächtig.
strace-Befehl
Wenn Sie strace -p pid
ausführen Befehl auf einen verdächtigen Prozess, den strace
Der Befehl kann wichtige Einblicke in die Vorgänge des Prozesses geben.
Andere Tools
Die vorhergehenden Befehle liefern möglicherweise nicht viele Hinweise darauf, was während des Angriffs passiert ist. In diesem Fall können Sie spezialisiertere Tools verwenden.
Wichtig Hinweis:Bevor Sie die Tools in diesem Abschnitt verwenden, sollten Sie sich vergewissern, dass die Binärdateien, die Sie zur Untersuchung verwenden, keine Trojaner-Versionen sind. Trojaner-Versionen können Aufgaben im Namen des Angreifers ausführen, wie z.
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob Sie über einen gut funktionierenden Satz von Tools verfügen:
rpm -Va
Beim Verifizieren eines Pakets werden Informationen zu den installierten Dateien des Pakets mit den Metadaten für das Paket verglichen, die in der Datenbank des RPM-Paket-Managers (RPM) gespeichert sind. Die Überprüfung vergleicht Informationen zu Größe, MD5-Summe, Berechtigungen, Typ, Eigentümer und Gruppe, die jeder Datei zugeordnet sind. Die Ausgabe zeigt alle Abweichungen an.
Wichtig :Gekennzeichnete Pakete in den folgenden Verzeichnissen können darauf hindeuten, dass Sie eine Trojaner-Version der Binärdatei verwenden und daher der Ausgabe nicht vertrauen können:
/bin
/sbin
/usr/bin
/usr/sbin
Das folgende Beispiel zeigt eine Trojaner-Datei:
S.5….T /bin/login
rpm -qa-Befehl
Sie können den Befehl rpm -qa
verwenden um kürzlich installierte Pakete in chronologischer Reihenfolge anzuzeigen. Im Falle einer Root-Kompromittierung kann jedoch auch die RPM-Datenbank kompromittiert werden.
lsattr-Befehl
Wenn der Angreifer Root-Zugriff erhält und Trojaner bestimmte Binärdateien verwenden, können sie diese Binärdateien unveränderlich machen, sodass Sie keine sauberen Versionen davon neu installieren können. Überprüfen Sie die folgenden Verzeichnisse:
/bin
/sbin
/usr/bin
/usr/sbin
Das folgende Beispiel zeigt eine Datei, die ein Angreifer unveränderlich gemacht hat:
-------i----- /bin/ps
Under normal circumstances in these directories, the rules should all look similar to:
------------- /bin/ps
Suchbefehl
find
ist ein Unix-Tool, das bei der Suche nach kürzlich geänderten Dateien entscheidend sein kann. Beispielsweise können Sie Dateien finden, die in den letzten fünf Tagen geändert wurden, indem Sie den folgenden Befehl ausführen:
find / -mtime 5
Gemeinsame Verzeichnisse für Web-Exploits
Überprüfen Sie die folgenden weltweit beschreibbaren Verzeichnisse, in die Apache® üblicherweise temporäre Dateien schreibt:
ls -al /tmp
ls -al /var/tmp
ls -al /dev/shm
Suchen Sie nach Dateien, die Sie nicht kennen oder die verdächtig aussehen. Achten Sie auf versteckte Dateien und Dateien mit Ausführungsberechtigungen.
Wenn Sie die Berechtigungen für Verzeichnisse auf Ihrer Website auf 777 gesetzt haben, überprüfen Sie diese ebenfalls.
Finde den Einstiegspunkt
Wenn Sie mithilfe der Tools in den vorherigen Abschnitten hilfreiche Informationen finden, haben Sie möglicherweise auch einen Zeitstempel dafür, wann der Hacker die bösartige(n) Datei(en) auf dem Server installiert hat.
Sie können diesen Zeitstempel verwenden, um die Zugriffsprotokolle Ihrer Website auf verdächtige Einträge zu überprüfen, die während dieses Zeitraums hinzugefügt wurden. Wenn Sie etwas Verdächtiges finden, können Sie es mit dem Speicherort der schädlichen Dateien abgleichen, um den Eintrittspunkt einzugrenzen.
Während die meisten Kompromittierungen von ausnutzbarem Code auf Ihrer Website stammen, können Sie andere Einstiegspunkte nicht ausschließen. Stellen Sie sicher, dass Sie /var/log/* überprüfen für alles, was während des gemeldeten Zeitraums verdächtig erscheint.
Beispieluntersuchung
Die Beispieluntersuchung in diesem Abschnitt zeigt den Prozess, den Sie verwenden sollten, wenn Sie eine vermutete Kompromittierung auf Stammebene untersuchen.
Identifizieren Sie die Art des Angriffs
Überprüfen Sie, ob es sich um einen einfachen Web-Hack handelte oder ob der Angreifer wirklich Root-Rechte erlangt hat. In den meisten Fällen handelt es sich bei dem Angriff um einen einfachen Web-Hack, den Sie bedenkenlos entfernen können.
-
Führen Sie die folgenden Befehle aus, um festzustellen, ob der Angreifer Root-Rechte erlangt hat:
lsattr /usr/sbin | weniger
lsattr /usr/bin | weniger
lsattr /bin | weniger
lsattr /sbin | weniger
-
Suchen Sie nach geänderten Attributen, z. B. Binärdateien, die auf unveränderlich gesetzt wurden.
Ausgabe:
s---ia------- /sbin/shs
Wenn Sie die
strings
verwenden Befehl für diese Datei, sehen Sie, dass es sich um eine Backdoorshell handelt.
Überprüfen Sie, ob der Angreifer seine Spuren gereinigt hat
In vielen Fällen sind Angreifer unerfahren oder schlampig und haben ihre Spuren nicht verwischt. Verwenden Sie die folgenden Schritte, um zu überprüfen, ob der Angreifer Hinweise hinterlassen hat:
-
Stellen Sie sicher, dass alle Benutzerkonten in
/etc/passwd
haben Sie eine gültige Shell, indem Sie den folgenden Befehl ausführen:cat /home/$USER/.bash_history
-
Rufen Sie den Verlauf des Root-Benutzers ab, indem Sie die folgenden Befehle ausführen:
Geschichte
cat /root/.bash_history
In diesem Beispiel die Ausgabe von /root/.bash_history
Der Befehl zeigt, dass der Angreifer die folgenden Aktionen auf dem Server ausgeführt hat:
- Heruntergeladene bösartige Tools zur Bereitstellung über Apache® in /var/www/html/* .
- Installierte Internet Relay Chat (IRC)-Tools und andere Tools in /var/tmp/.ICE-unix .
- Das Root-Crontab wurde geändert, um die schädlichen Tools erneut herunterzuladen, wenn sie jemand vom Server entfernt (
* * * * * /var/tmp/.ICE-unix/update >/dev/null 2>&1
).
Nach grundlegenden Web-Hacks suchen
Bis zu diesem Punkt haben wir festgestellt, dass es sich bei dem Angriff wahrscheinlich um einen einfachen Web-Hack handelt, den Sie leicht säubern können, ohne den Server zu formatieren.
In diesem Beispiel wissen wir jedoch, dass der Angreifer Root-Rechte erlangt hat. Sie könnten auch phpMyAdmin
ausgenutzt haben . Nachdem die Hintertür-PHP-Shell geladen war, konnte der Angreifer einen lokalen Root-Exploit ausführen, um seine Privilegien zu eskalieren.
-
Führen Sie die folgenden Befehle aus, um versteckte Dateien und Verzeichnisse in den allgemein lesbaren Verzeichnissen zu finden, in die Apache normalerweise
tmp
schreibt Dateien:ls -al /var/tmp |weniger
ls -al /tmp
ls -al /dev/shm
-
In diesem Beispiel geben die Befehle die folgende Ausgabe zurück:
drwx—— 3 70 70 4096 Nov 19 02:00 /var/tmp/.ICE-unix
-
Wenn Sie hier Elemente finden, müssen Sie versuchen, den Einstiegspunkt ausfindig zu machen, damit Sie die Site herunterfahren, den Site-Code aktualisieren oder den ausnutzbaren Code auf andere Weise reparieren können. Schritt 5 bietet eine schnelle Möglichkeit, diese Aufgabe zu erledigen. Wenn jedoch die Ausgabe von
ps -waux
zeigt, dass IRC-Bots laufen, dann können Sie versuchen herauszufinden, woher der Prozess läuft, indem Sielsof
verwenden Befehl oderps -wauxxef |grep <pid>
.
Suchen Sie nach Prozesskennungen, die auf eingehende Verbindungen warten
- Führen Sie die folgenden Befehle aus, um nach Prozesskennungen (PIDs) zu suchen, die auf eingehende Verbindungen warten:
-
netstat -natp
:Sucht nach verdächtigen Verbindungen, die auf Oddports laufen -
ps -wauxxef
:Sucht nach verdächtigen Dateien wiebash
läuft unter einemwww
Kontext -
lsof <pid>
:Hilft festzustellen, von wo aus die PID ausgeführt wirdDie Ausgabe ähnelt dem folgenden Beispiel:
tcp 0 0 0.0.0.0:1144 0.0.0.0:* LISTEN 1008/bash tcp 0 1 172.16.23.13:60968 22.22.22.22:7000 SYN_SENT 6860/sshd
In diesem Beispiel laufen auch mehrere andere SSH-Verbindungen von High-Level-Ports, wie im folgenden Beispiel gezeigt:
[root@www tmp]# netstat -natp |grep sshd |awk '{print $4,$5,$6,$7}' 0.0.0.0:22 0.0.0.0:* LISTEN 1046/sshd 172.16.23.13:60986 22.22.22.22:6667 SYN_SENT 6860/sshd 123.123.123.123:22 22.22.22.22:59361 ESTABLISHED 22795/sshd 123.123.123.123:22 22.22.22.22:57434 ESTABLISHED 22796/sshd 123.123.123.123:57139 143.143.143.143:6667 ESTABLISHED 6860/sshd 123.123.123.123:57402 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:22 143.143.143.143:49238 ESTABLISHED 8860/sshd 123.123.123.123:57134 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:56845 22.22.22.22:6667 ESTABLISHED 6860/sshd 123.123.123.123:57127 143.143.143.143:6667 ESTABLISHED 6860/sshd
Diese Ausgabe zeigt an, dass die Angreifer immer noch mit diesem Computer verbunden sind. Sie können sie jedoch nicht sehen, da sie wahrscheinlich die Binärdateien modifiziert haben, um sich zu verstecken.
Bestimme den Eintrittspunkt für den ursprünglichen Kompromiß
Verwenden Sie die folgenden Schritte, um den Einstiegspunkt für die ursprüngliche Kompromittierung zu bestimmen:
-
Überprüfen Sie
/var/log/[messages|secure]
für Brute-Force-SSH-Versuche. -
Überprüfen Sie die Apache-Zugriffsprotokolle und Fehlerprotokolle. Dieser Schritt kann dabei helfen, festzustellen, welche Website angreifbar ist.
Sie sollten auch IPs mit den Protokollen vergleichen, wenn Sie glauben, dass die Möglichkeit besteht, dass sie von dort stammen. Dies ist eine schnelle und unkomplizierte Möglichkeit, den Ursprungsort zu ermitteln.
Sie können Server mit einer großen Anzahl von Webprotokollen schnell überprüfen, indem Sie die folgenden Befehle verwenden:
cd /var/log/httpd for i in `ls * |grep access`; do echo $i && grep wget $i; done for i in `ls * |grep access`; do echo $i && grep curl $i; done
Hinweis :Dieses Beispiel sucht nach
wget
weilwget
befand sich in der Verlaufsdatei von root unter dem, was möglicherweise Teil des Einstiegspunkts war.
Ergebnis
In diesem Beispiel hat unsere Untersuchung ergeben, dass ein Angreifer phpMyAdmin
ausgenutzt hat Installation im Verzeichnis /var/www/html
Verzeichnis, höchstwahrscheinlich wegen der Version vonphpMyAdmin
auf dem Server installiert war stark veraltet. Patchen von phpMyAdmin
Ein regelmäßiger Zeitplan verhindert, dass diese Situation auftritt.