Wie erkenne ich einen versteckten Prozess unter Linux?

10

Wir haben eine Box, von der wir vermuten, dass sie bei der Arbeit verwurzelt ist. Die Frage ist, wie finden wir es? Ich bin kein Systemadministrator, aber ich wurde in das Team aufgenommen, um die Situation zu lösen, und ich bin gespannt, wo sich gute Orte befinden, an denen ich nach Problemen suchen kann.

Der Grund, warum wir dies vermuten, ist, dass wir eine höhere als die normale Netzwerkauslastung auf dem Computer von hohen (scheinbar zufälligen) Ports festgestellt haben.

Was können wir tun, um das Sorgenkind zu lokalisieren? Was können wir tun, um uns in Zukunft davor zu schützen? Gibt es eine Überwachung, die wir durchführen können, um uns in Zukunft darauf aufmerksam zu machen? (Abgesehen von der Netzwerküberwachung, an der wir bereits arbeiten, um sie genauer zu beobachten.)

Vielen Dank im Voraus und ich kann bei Bedarf weitere Details bereitstellen. Schätzen Sie Ihre Zeit.

Chris
quelle
2
Garantierter Fix: Nuke es aus dem Orbit und stelle es aus dem Backup wieder her.
Chris S
Dies scheint diese aktuelle Frage zu duplizieren .
Steven Montag,
1
"Ich bin kein Systemadministrator, aber ich wurde ins Team geholt, um die Situation zu lösen" - das ist von unschätzbarem Wert. Um die Dinge zu klären: Ihre Frage ist vollkommen in Ordnung. Ihre reale Situation ist nicht. Wer sich entschieden hat, Sie einzubeziehen, liegt falsch.
Halp
@ Chris S: Dies ist eine Lernfrage, nicht so sehr der schnellste Weg, um die Problemfrage zu lösen.
Chris
halp: Ich bin nicht dafür verantwortlich, dies zu lösen, aber ich bin Teil davon, daraus zu lernen. Ich bin ein Absolvent der Cse, der gerade meine Füße bei der Arbeit nass macht.
Chris

Antworten:

6

Sie können keinem Systemwerkzeug vertrauen, das Sie auf dem Computer haben. Rootkits ersetzen ps, netstat, ls und mehr, um ihre Anwesenheit zu verbergen. Sie sollten den Computer offline schalten, die Festplatte herausnehmen, eine forensische Kopie erstellen (denken Sie an dd) und dann auf einem separaten Computer daran arbeiten, nach dem Rootkit zu suchen.

Wenn Sie darauf bestehen, an der Live-Maschine zu arbeiten (was normalerweise zwecklos ist), können Sie versuchen, eine Rettungsdistribution auf CD herunterzuladen (es ist sehr wichtig, dass die Kopie schreibgeschützt ist) und ihre Kopien von ps, lsmod usw. verwenden.

Selbst dies kann fehlschlagen, da ein Rootkit Kernelmodule installieren kann, um Einträge in / proc zu verbergen, auf denen Tools wie ps normalerweise ausgeführt werden.

Viel Glück!

bot403
quelle
Wenn er eine RPM-basierte Distribution hat, kann er ausführen rpm -V -f /bin/ps, um zu überprüfen, ob diese geändert wurde, wenn nicht. Dies funktioniert natürlich nur, wenn der Angreifer nicht auch rpmdie RPM-Datenbank geändert hat . Obwohl er einige seiner rpmDateien ändern könnte, führen Sie sie aus rpm -V rpmund prüfen Sie, ob sie lügen oder nicht.
Cristian Ciupitu
5

Das Problem mit gut konstruierten Rootkits ist, dass sie den Befehl Ihres Systems ändern. wie ps und top, um die Prozesse des Rootkits nicht anzuzeigen, und ls, um keine Dateien des Rootkits anzuzeigen.

Sie müssen diesen Befehl also möglicherweise von der Quelle oder in Binairies-Form abrufen. (Achten Sie darauf, gut unterschrieben zu sein). Aber der Trick eines Root-Kits (ich habe es gesehen) ist, dass sie möglicherweise auch Ihren Compiler beschädigt haben. Wenn der Compiler weiß, dass er ls oder ps oder einen Befehl kompiliert, infiziert er sie ebenfalls.

Als ich dieses Problem sah, sagte ich, dass fein gcc neu kompilieren kann, aber nein, was ich brauche, um gcc zu kompilieren ... das infizierte gcc ... also wenn er weiß, dass er sich selbst kompiliert, infiziert er es, damit es den Befehl infizieren kann.

Sie werden sagen, dass dies groß und schwer zu erkennen ist, ja, aber selten sind die Root-Kits, die so kugelsicher sind, dass ich Ihnen nur den schlimmsten Fall gegeben habe.

Im Ernst, wenn Sie sicher sind, dass sich auf Ihrem Server ein Root-Kit befindet, installieren Sie es erneut!

Gopoi
quelle
Schätzen Sie die Antwort und ja, eine Neuinstallation ist die Lösung für den Moment. Die Sache ist jedoch, dass ich etwas darüber lernen möchte, damit ich es später erkennen und wiederherstellen kann, ohne den gesamten Server neu erstellen zu müssen. Unsere Führungskräfte mögen keine Ausfallzeiten mehr als die nächsten Führungskräfte.
Chris
@ Chris, Prävention ist Ihre einzige Heilung. Finden Sie heraus, wie es passiert ist, damit wir Ihnen bei der Beantwortung helfen können. "Wie", um zu verhindern, dass es wieder passiert
Arenstar
Wirst du einen guten Antwortenden auf die Frage wählen?
Gopoi
5

Der beste Weg, um festzustellen, ob Ihr Server "gerootet" wurde, besteht darin, ein hostbasiertes Intrusion Detection System (HIDS) auszuführen. Wenn Sie jetzt kein HIDS ausführen, ist es leider zu spät, eines zu installieren. Der richtige Zeitpunkt für die Installation eines HIDS ist, wenn der Server zum ersten Mal installiert wird und bevor er in ein Netzwerk gestellt wird.

Kurz gesagt, die meisten HIDS arbeiten mit der Berechnung kryptografischer Hashes aller Systembinärdateien und dem Speichern dieser Hashes (zusammen mit zahlreichen anderen Dateistatistiken) in einer Datenbank, der Basisdatenbank. Anschließend scannt das HIDS Ihr System regelmäßig neu und vergleicht alle Dateien in seiner Basisdatenbank mit den tatsächlichen Systemdateien.

Ja, natürlich kann ein Rootkit Ihre Basisdatenbank ändern. Aus diesem Grund müssen Sie eine Kopie dieser Datenbank erstellen und separat vom Server speichern, bevor Sie den Server online stellen. Wenn Sie dann den Verdacht haben, dass Sie "verwurzelt" sind (und Sie vermuten, dass Ihre Basisdatenbank ebenfalls manipuliert wurde), können Sie Ihr System vom Installationsmedium starten, die bekanntermaßen funktionsfähige Datenbank aus Ihrer Sicherung wiederherstellen und anschließend einen Scan für das ausführen bekannt-gut. Es ist jedoch viel wahrscheinlicher, dass ein Rootkit nicht damit rechnet, Ihre speziellen HIDS besiegen zu müssen. Daher erhalten Sie von den HIDS eine Benachrichtigung, dass sich die Systemdateien geändert haben, was auf einen wahrscheinlichen Systemeinbruch hinweist.

Da Sie kein HIDS ausgeführt haben, können Sie nicht schnell feststellen, ob Sie gerootet wurden oder welche Systemdateien geändert wurden. Sie könnten viel Zeit damit verbringen, Ihre Systemdateien mit bekannten Dateien zu vergleichen, die von bekannten Installationsmedien abgerufen wurden. Diese Zeit wird jedoch höchstwahrscheinlich besser für die Neuinstallation Ihres Systems von diesen Medien aufgewendet. Wenn Sie untersuchen möchten, wie Sie nachträglich verwurzelt wurden, sollten Sie am besten ein Image Ihres Systems erstellen, bevor Sie es löschen und neu installieren.

Steven Montag
quelle
Samhain ist ein Versteck.
Pefu
4

Bitte beziehen Sie sich auf einen früheren Beitrag

Schmerzen beim Entfernen eines Perl-Rootkits

Es ist wirklich wichtig, dass Sie dies lesen.

Um Ihre Fragen zu beantworten ..

Normalerweise führe ich ein IDS / IPS (Intrusion Detection / Protection System) wie Snort aus. Es macht einen großartigen Job gegen Foulspiel und ich habe gesehen, dass es einen großartigen Job in Aktion macht.

Ich verwende auch Syslog-Server, um Protokollnachrichten von Produktionsservern fernzuhalten, damit Sie Probleme und Änderungen / Rootkits zurückverfolgen können

Ich benutze auch oft Management-Tools wie Kakteen, die CPU, Speicher, Festplatte, Netzwerknutzung grafisch darstellen und melden, wenn etwas ungewöhnlich ist.

Rootkit zu sein ist ein ernstes Problem. Versuchen Sie auf jeden Fall, die Ursache herauszufinden.

Hoffe das hilft ..: D.

Arenstar
quelle
3

Die zufälligen High-Ports sind die kurzlebigen Ports, was darauf hinweist, dass Sie wahrscheinlich eine oder mehrere Programmverbindungen von diesem System nach außen haben.

Wenn es nicht gerootet ist, erhalten Sie netstat -np | grep -v ^unixmöglicherweise einen Hinweis darauf, welche Programme den Datenverkehr generieren.

Möglicherweise können Sie auch den Datenverkehr von einem nahe gelegenen System mithilfe von tcpdump scannen, um Pakete zu sichern, die von dem System stammen, von dem Sie glauben, dass es verwurzelt ist. Wenn das Problemprogramm nicht als Root ausgeführt wird, können Sie dies vom infizierten System aus tun.

Es gibt verschiedene Möglichkeiten, um Verwurzelungen zu vermeiden:

  • Halten Sie Ihr System gepatcht, insbesondere den Kernel. Überwachen Sie die Gründe für die Kernelfreigabe, um die Angriffsvektoren zu bestimmen.
  • Installieren und verwenden Sie nur die erforderlichen Programme. Führen Sie eine möglichst minimale Installation durch.
  • Führen Sie so wenig wie möglich als root aus. Viele Programme werden nach Abschluss des Setups, für das Root-Rechte erforderlich sind, in nicht privilegierte Benutzer-IDs geändert.

BEARBEITEN: Wenn Sie verwurzelt sind, kann die Verwendung statisch verknüpfter ps- und ls-Programme einen Unterschied zwischen den laufenden Programmen anzeigen, die die beiden Tools finden. Unterschiede in der Liste können auch auftreten, wenn kurzlebige Programme absterben.

BillThor
quelle
1

Die eigentliche Lösung für ein System, das möglicherweise gerootet ist, besteht darin, es aus sicheren Quellen neu zu installieren. Wie die Installations-CDs. Stellen Sie dann Ihre Daten nur aus dem Backup wieder her. Alle Binärdateien oder Skripte in Ihrem Backup wurden möglicherweise kompromittiert und in Ihrem Backup gespeichert.

Um das Root-Kit auf einem laufenden System zu finden, besteht eine Möglichkeit darin, ein Kernelmodul zu kompilieren, das zur Erkennung von Rootkits entwickelt wurde. Kompilieren Sie es auf einem anderen Computer, auf dem dieselbe Betriebssystemversion ausgeführt wird. Dann kopiere es und modifiziere es.

Ein Rootkit-Detektor verfügt über Tools, die in das Kernelmodul integriert sind, um die laufende Prozesstabelle zu sichern, die Syscall-Tabelle zu überprüfen (um nach Syscall-Abschnitten zu suchen) und andere Funktionen. Es kann Skripte enthalten, die die Ausgabe des Moduls übernehmen und diese mit der Ausgabe von ps, netstat, ls usw. vergleichen. Oder es kann den Speicher im Kernelraum nach bekannten Rootkit-Signaturen und Berichten durchsuchen.

Zan Lynx
quelle
1

Das ist wie bei Mäusen: Wenn Sie eine sehen, leben dort hundert Menschen. Wenn Sie Anzeichen eines Kompromisses sehen, müssen Sie davon ausgehen, dass das gesamte System kompromittiert ist. Aus diesem Grund schlagen alle vor, das System neu zu installieren, anstatt viel Zeit damit zu verbringen, nachzuschauen. Ich bin auf mehrere Situationen gestoßen, in denen eine Maschine kompromittiert wurde und Systemadministratoren dachten, sie hätten das Chaos beseitigt, um es später zu bereuen.

Rootkits ersetzen häufig System-Binärdateien wie ps, top, netstat. Und es ist auch üblich, Trojaner ssh. Das Suchen nach Prüfsummen-Kuriositäten in diesen Dateien ist daher ein erstklassiger Ansatz. Wenn Sie auf einem RPM-basierten System arbeiten, ist RPM-V normalerweise ein gutes Tool oder eine dpkg-Überprüfung unter Debian / Ubuntu. Oder Sie können die Prüfsummen direkt überprüfen (aber achten Sie auf den Prelink, der die Binärdateien aus Geschwindigkeitsgründen im laufenden Betrieb ändert). Dies ist nicht zuverlässig, aber viele Script-Kiddie-Angriffe decken diese Spuren nicht ab. (Mit anderen Worten, wenn Sie etwas finden, gut. Wenn Sie etwas nicht finden, beweist dies nicht, dass Sie sauber sind.)

Andere Dinge, nach denen Sie suchen sollten: Von außen geöffnete Ports, nmapdie netstatauf dem Computer nicht offen angezeigt werden, und Pids, in /procdenen nicht angezeigt wird ps. Wenn Sie Remote-Syslog aktiviert haben, suchen Sie nach SSH-Anmeldungen, die keine Datensätze im Lastlog enthalten.

mattdm
quelle
0

Besorgen Sie sich eine Kopie von RKhunter und chkrootkit. Sie sind normalerweise ziemlich anständig darin, Dinge zu finden, die nicht da sein sollten.

Es ist immer gut, mod_security zusammen mit einer Firewall auch auf Ihrer Apache-Ebene auszuführen. Normalerweise finden sie eine veraltete Webanwendung oder ein veraltetes Skript und verbessern den Zugriff von dort aus mit Perl-Shell-Skripten und anderen lustigen Dingen.

ps auxfww ist normalerweise großartig, um Prozesse zu finden, die nicht dazu gehören.

Außerdem: netstat -anp, um zu sehen, was an bestimmten Ports empfangsbereit ist.

Auch diese sind gut, wenn Sie nicht verwurzelt, sondern nur kompromittiert wurden.

Steven Leggett
quelle