SSHD verbraucht 100% der CPU (Hunderte von Prozessen) - Wird nicht sterben

7

Kürzlich habe ich festgestellt, dass SSHd auf einigen von mir verwalteten Systemen unaufhaltsame Prozesse erzeugt, die sehr viel CPU verbrauchen.

Der Syscall zeigt, dass die Prozesse alle "laufen" und keine Zombies sind oder darauf warten, dass ihre Eltern sie töten (zumindest nicht so weit ich das beurteilen kann).

Bildbeschreibung hier eingeben

Ich habe alles versucht, um diese Prozesse zu beenden. Die einzige zuverlässige Methode, die ich bisher gefunden habe, ist, den gesamten Server neu zu starten (was nicht ideal ist). Ich habe versucht, openssh-server auf dropbear umzustellen, aber es verhält sich nicht so, wie ich es für meine Anwendungen benötige.

Ich habe es versucht:

killall -9 sshd

Töte jeden SSHD durch seine ID. Einige andere Dinge (htop + sigterm, etc ...)

Ich würde gerne einige Ideen haben, um diese Prozesse zu beenden oder die Ursachen dafür zu lösen.

Bravo Delta
quelle
3
Es scheint, als ob Sie angegriffen werden und jemand mit Ihrer Sicherheitsimplementierung spielt. Sind diese sshd die neuesten gepatchten Versionen?
Eugen Rieck
2
Versuchen Sie, sie vom Standardport 22 / TCP auf einen beliebigen hohen Port zu verschieben, um die meisten automatisierten Skriptscanner zu entfernen. Dies ist KEINE Sicherheitsmaßnahme, sondern sorgt dafür, dass Ihre Protokolle intakt bleiben. Überprüfen Sie Ihre Sicherheit dreimal und überlegen Sie, ob Sie fail2ban bereitstellen möchten.
MacLemon
Und während Sie dabei sind, chkrootkit und rkhunter auch. Man weiß nie ...
MariusMatutiae
Während es sich auf Port 22 befindet, hat es Fail2Ban mit niedrigen Limits und hohen Sperrzeiten. Ich habe mir netstat usw. angeschaut. Sehr wenige SSH-Verbindungen, die nicht erwartet werden.
Bravo Delta
Update: Server ist nur auf Schlüssel eingestellt, Fail2Ban ist aktiviert, nicht viele eingehende Verbindungen.
Bravo Delta

Antworten:

2

Wenn es sich tatsächlich um OpenSSH-SSHDs handelt, würde ich vermuten, dass ein Skript sie irgendwo in einer unterbrochenen Schleife ausführt und einer ihrer untergeordneten Prozesse die gesamte CPU auslastet.

Wie Marki555 vorgeschlagen hat, stracewürde Ihnen helfen, aber Sie sollten verwenden, strace -fdamit Strace den untergeordneten Prozessen folgt. Von man strace:

   -f          Trace child processes as they are  created  by  cur-
               rently  traced  processes as a result of the fork(2)
               system call.

Da strace so viele Daten generiert, ist es möglicherweise auch eine gute Idee, das Argument -e zu verwenden (um beispielsweise nur open () -Aufrufe anzuzeigen):

   -e expr     A qualifying expression which modifies which  events
               to  trace  or  how to trace them.  The format of the
               expression is:
                         [qualifier=][!]value1[,value2]...

Ein weiterer Befehl, den Sie versuchen können, ist ps xafoder pstree -aeine leicht verständliche Strukturansicht der Prozesse und ihrer untergeordneten Prozesse zu erhalten, damit Sie bestimmen können, welcher Prozess diese sshds gestartet hat. lsofVielleicht hilft Ihnen auch, es wird Ihnen sagen, welche Dateien ein Prozess geöffnet hat.

Und stellen Sie sicher, dass Sie das neueste OpenSSH verwenden. Ich denke, Rsync + große Dateien + ssh auf einem alten OpenSSH 3.4p1 wäre problematisch.

Wenn dies NICHT wirklich sshd-Prozesse sind, wird möglicherweise eine MD5-Prüfsumme der Binärdatei korrekt angezeigt, es wird jedoch möglicherweise nicht das eigentliche sshd-Programm ausgeführt. Der md5sumBefehl selbst kann auch eine Backdoor-Version sein, die geändert wurde, um die korrekte Prüfsumme für bestimmte Dateien (wie z. B. sshd) zu melden.

Sie sollten sich / proc / [sshd pid] / exe ansehen und sicherstellen, dass es sich um einen Symlink zu / usr / sbin / sshd (oder wo immer sich Ihr sshd befindet) handelt, sowie / proc / [sshd pid] / environ, um dies zu sehen Welche Umgebungsvariablen es verwendet, und / proc / [sshd pid] / cmdline, um zu sehen, mit welchem ​​Befehl es tatsächlich gestartet wurde.

Ein Angreifer hätte das Schadprogramm in "sshd" umbenennen und es dann ausführen können, damit es sshd zu sein scheint. Hätte sogar / usr / sbin / sshd nach / tmp / sshd verschieben können und dann das böswillige sshd nach / usr / sbin / sshd verschoben, um zu versuchen, es vor dieser Art von / proc-Analyse zu verbergen, aber wenn / tmp / sshd zurück verschoben wird / usr / sbin / sshd Der Symlink / proc / [sshd pid] / exe wird angezeigt lsals:

   lrwxrwxrwx 1 root root 0 May 19 06:47 /proc/[sshd pid]/exe ->  (deleted)/usr/sbin/sshd

Auch wenn diese sshd die etwas tun , aktiv in den normalen Prozessanalyse verhindern, könnten Sie versuchen , kill -STOPstatt kill -9auf „Pause“ wird der Prozess (Anwendung , kill -CONTum es wieder auf . Siehe http://en.wikipedia.org/wiki/Job_control_%28Unix%29 #Implementierung ).

Wenn ein Angreifer jedoch über Root-Rechte verfügt, kann ein Rootkit installiert werden, das sich vor / proc, netstat, ls usw. versteckt. Wenn Sie wirklich gefährdet sind, sollten Sie das System offline schalten und seine Partitionen auf einer anderen Partition bereitstellen ( Reinigen Sie das System und führen Sie dann die Forensik durch (oder verwenden Sie eine dieser Live-Linux-CDs für die Forensik).

Dee Eff
quelle