Malware-Indikatoren unter Linux identifizieren

CompTIABeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie grundlegende Techniken zur Identifizierung potenzieller Malware-Indikatoren auf einem Linux-System. Durch eine Reihe von praktischen Übungen werden Sie Standard-Befehlszeilen-Utilities verwenden, um gängige Anzeichen eines Kompromisses zu untersuchen und praktische Fähigkeiten in der Systemüberwachung und grundlegenden forensischen Analyse zu erwerben.

Sie beginnen mit der Beobachtung verdächtiger Prozessaktivitäten und lernen, wie Sie ungewöhnliche CPU- und Speicher-Spitzen erkennen, die auf einen bösartigen Prozess hindeuten können. Als Nächstes konzentrieren Sie sich auf das Dateisystem, um unerwartete Dateierstellungen und -änderungen zu erkennen, ein Schlüsselindikator für unbefugte Aktivitäten. Abschließend üben Sie die Analyse von Systemprotokollen, um anomale Einträge zu finden, die auf eine Sicherheitsverletzung hindeuten könnten.

Verdächtige Prozessaktivitäten auf CPU- und Speicher-Spitzen beobachten

In diesem Schritt lernen Sie, wie Sie Standard-Linux-Utilities verwenden, um Systemprozesse auf ungewöhnliche Spitzen bei der CPU- und Speichernutzung zu überwachen. Ein plötzlicher, hoher Ressourcenverbrauch ist ein häufiger Indikator für bösartige Software (Malware), einen kompromittierten Prozess oder eine fehlerhafte Anwendung. Wir verwenden den Befehl top zur Echtzeitüberwachung und das Tool stress, um sicher ein Szenario mit hoher Auslastung zu simulieren. Alle Befehle werden von Ihrem Verzeichnis ~/project aus ausgeführt.

Zuerst müssen Sie das stress-Utility installieren, da es nicht im Basissystem enthalten ist. Wir verwenden den Paketmanager apt-get. Der erste Befehl aktualisiert Ihre Paketliste, und der zweite installiert stress.

sudo apt-get update
sudo apt-get install stress -y

Nach Abschluss der Installation legen wir eine Basislinie fest, indem wir die aktuellen Prozesse auf dem System anzeigen. Der Befehl top bietet eine Echtzeit- und dynamische Ansicht des laufenden Systems.

top

Sie sehen eine Vollbildoberfläche, die sich kontinuierlich aktualisiert. Achten Sie auf die Spalten %CPU (CPU-Auslastung) und %MEM (Speicherauslastung). Unter normalen Bedingungen sollten diese Werte für die meisten Prozesse relativ niedrig sein. Drücken Sie die Taste q, um top zu beenden und zu Ihrer Eingabeaufforderung zurückzukehren.

top - 16:20:42 up 10 min,  1 user,  load average: 0.00, 0.01, 0.00
Tasks: 100 total,   1 running,  99 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1987.2 total,    845.5 free,    450.1 used,    691.6 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   1355.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169404  13120   8484 S   0.0   0.6   0:01.55 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
...

Nun simulieren wir einen verdächtigen Prozess, der eine hohe CPU-Auslastung verursacht. Wir verwenden stress, um einen Worker zu starten, der 60 Sekunden lang CPU-intensive Berechnungen durchführt. Das & am Ende führt den Befehl im Hintergrund aus, sodass Sie das Terminal weiter verwenden können.

stress --cpu 1 --timeout 60 &

Sie sehen eine Prozess-ID (PID) für den Hintergrundjob. Führen Sie nun schnell erneut top aus, um die Auswirkung zu beobachten.

top

Dieses Mal sollten Sie den stress-Prozess an oder nahe der Spitze der Liste sehen, wobei sein %CPU-Wert nahe 100.0 liegt. Genau das würden Sie suchen, wenn Sie nach einem Prozess fahnden, der die CPU überlastet. Nach 60 Sekunden wird der stress-Prozess automatisch beendet. Drücken Sie q, um top zu beenden.

Als Nächstes simulieren wir einen Prozess, der eine große Menge Speicher verbraucht. Dieser Befehl startet einen Worker, der 256 Megabyte Speicher zuweist und diesen 60 Sekunden lang belegt.

stress --vm 1 --vm-bytes 256M --timeout 60 &

Führen Sie erneut sofort top aus, um die Auswirkung zu sehen.

top

Suchen Sie in der top-Ausgabe den stress-Prozess. Dieses Mal wird seine %CPU niedrig sein, aber sein %MEM-Wert wird deutlich höher sein als bei anderen Prozessen, was auf ein Speicherleck oder einen speicherintensiven Angriff hindeutet. Diese Technik hilft Ihnen, anomale Ressourcenverbräuche zu identifizieren, die weitere Untersuchungen erfordern. Drücken Sie q, um zu beenden.

Unerwartete Dateierstellungen und -änderungen erkennen

In diesem Schritt lernen Sie, wie Sie verdächtige Aktivitäten im Dateisystem erkennen, wie z. B. die unerwartete Erstellung oder Änderung von Dateien. Angreifer erstellen oder ändern oft Dateien, um Persistenz zu erlangen, bösartige Payloads zu speichern oder Systemkonfigurationen zu manipulieren. Wir werden zwei leistungsstarke Befehlszeilen-Tools verwenden: find, um Dateien anhand ihrer Änderungszeiten zu suchen, und inotifywait, um Verzeichnisereignisse in Echtzeit zu überwachen. Alle Operationen finden in Ihrem Verzeichnis ~/project statt.

Zuerst verwenden wir den Befehl find, um kürzlich geänderte Dateien zu lokalisieren. Dies ist nützlich für regelmäßige Sicherheitsaudits. Erstellen wir eine Beispielkonfigurationsdatei zur Überwachung.

echo "SERVER_IP=192.168.1.1" > ~/project/app.conf

Der Befehl find kann Dateien anhand verschiedener Kriterien suchen. Wir verwenden das Flag -mmin, das für "modified minutes ago" (vor Minuten geändert) steht. Der folgende Befehl findet alle Dateien im aktuellen Verzeichnis (.), die in den letzten 5 Minuten geändert wurden.

find . -mmin -5

Die Ausgabe listet die gerade erstellte Datei auf.

./app.conf

Nun simulieren wir, wie ein Angreifer diese Konfigurationsdatei ändert.

echo "MALICIOUS_PAYLOAD=..." >> ~/project/app.conf

Wenn Sie den Befehl find erneut ausführen, wird app.conf wieder angezeigt, da ihre Änderungszeit aktualisiert wurde. Dies ist eine einfache Methode, um kürzliche Änderungen zu erkennen. Simulieren wir nun, wie ein Angreifer eine neue Datei ablegt, eine gängige Taktik.

touch ~/project/hidden_script.sh

Führen Sie den Befehl find noch einmal aus.

find . -mmin -5

Nun listet er sowohl die geänderte als auch die neu erstellte Datei auf und zeigt, wie Sie kürzliche Aktivitäten im Dateisystem schnell identifizieren können.

./app.conf
./hidden_script.sh

Während find für Audits nützlich ist, bietet es keine Echtzeitwarnungen. Dafür können wir inotify-tools verwenden. Zuerst müssen Sie das Paket installieren.

sudo apt-get update
sudo apt-get install -y inotify-tools

Der Kernbefehl ist inotifywait, der eine Datei oder ein Verzeichnis auf bestimmte Ereignisse überwachen kann. Führen wir ihn im Überwachungsmodus (-m) auf unserem Verzeichnis ~/project aus. Das & führt ihn als Hintergrundprozess aus, sodass Sie Ihr Terminal weiter verwenden können.

inotifywait -m ~/project &

Der Befehl überwacht nun stillschweigend auf Änderungen. Führen wir ein paar Aktionen aus, um ihn auszulösen. Erstellen Sie zuerst eine Datei.

echo "new file" > ~/project/new_file.txt

Sie sehen sofort eine Ausgabe von inotifywait, die das CREATE-Ereignis meldet.

/home/labex/project/ CREATE new_file.txt

Ändern Sie nun die Datei.

echo "modified" >> ~/project/new_file.txt

Das Tool meldet ein MODIFY-Ereignis.

/home/labex/project/ MODIFY new_file.txt

Löschen Sie schließlich die Datei.

rm ~/project/new_file.txt

Sie sehen ein DELETE-Ereignis. Dieses Echtzeit-Feedback ist für ein Security Operations Center (SOC) oder ein automatisiertes Einbruchserkennungssystem von unschätzbarem Wert.

/home/labex/project/ DELETE new_file.txt

Um den Hintergrundüberwachungsprozess zu stoppen, können Sie den Befehl pkill verwenden.

pkill inotifywait

Sie haben erfolgreich sowohl find als auch inotifywait zur Erkennung von Dateisystemänderungen verwendet.

Systemprotokolle auf anomale Einträge analysieren

In diesem Schritt lernen Sie, wie Sie Systemprotokolle analysieren, um Beweise für verdächtige Aktivitäten zu finden. Systemprotokolle sind Aufzeichnungen von Ereignissen, die auf dem System auftreten, und sie sind eine kritische Informationsquelle für die Sicherheitsüberwachung und forensische Analyse. Wir konzentrieren uns auf Authentifizierungsprotokolle, die Benutzeranmeldungen und Berechtigungserweiterungen verfolgen, und verwenden Standard-Linux-Tools wie grep, tail und journalctl, um anomale Einträge zu finden.

Die meisten Systemprotokolle auf einem Linux-System werden im Verzeichnis /var/log gespeichert. Eines der wichtigsten für die Sicherheit ist /var/log/auth.log, das ereignisbezogene Authentifizierungsereignisse aufzeichnet, einschließlich SSH-Anmeldungen und der Verwendung des sudo-Befehls. Beginnen wir damit, die letzten Zeilen dieser Datei mit dem Befehl tail anzuzeigen. Sie benötigen sudo, da diese Datei geschützt ist.

sudo tail /var/log/auth.log

Sie sehen eine Reihe von Einträgen mit Zeitstempeln. Das Format umfasst typischerweise das Datum, die Uhrzeit, den Hostnamen, den Prozess, der das Protokoll generiert hat, und die Ereignismeldung.

Jul 22 10:30:01 labex-vm sudo:    labex : TTY=pts/0 ; PWD=/home/labex/project ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=1000)
Jul 22 10:30:01 labex-vm sudo: pam_unix(sudo:session): session closed for user root

Nun simulieren wir ein häufiges verdächtiges Ereignis: einen fehlgeschlagenen Anmeldeversuch. Angreifer versuchen oft, Passwörter für gültige oder gängige Benutzernamen zu erraten. Wir können dies simulieren, indem wir versuchen, uns mit einem nicht existierenden Benutzernamen wie baduser bei unserer eigenen Maschine (localhost) per SSH anzumelden.

ssh baduser@localhost

Das System fordert Sie zur Eingabe eines Passworts auf (Sie können labex als Passwort verwenden). Da der Benutzer nicht existiert, schlägt jedes Passwort fehl. Drücken Sie einfach Strg+C, um die Passwortabfrage abzubrechen und zum Terminal zurückzukehren. Der Verbindungsversuch schlägt fehl, wird aber protokolliert.

Nun jagen wir nach den Beweisen. Wir können den Befehl grep verwenden, um die Datei auth.log nach Zeilen zu filtern, die das Wort "Failed" enthalten. Dies isoliert schnell erfolglose Ereignisse.

sudo grep "Failed" /var/log/auth.log

Die Ausgabe zeigt nun deutlich den Protokolleintrag für unseren fehlgeschlagenen SSH-Anmeldeversuch, was ein starker Hinweis auf einen potenziellen Eindringversuch ist.

Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2

Moderne Linux-Systeme, die systemd verwenden, verfügen auch über ein zentralisiertes Protokollsystem, das von journald verwaltet wird. Der Befehl journalctl ist ein leistungsstarkes Werkzeug zum Abfragen dieser Protokolle. Verwenden wir ihn, um denselben fehlgeschlagenen Anmeldeereignis zu finden, indem wir nach Nachrichten vom sshd-Prozess suchen. Beachten Sie, dass Sie sudo verwenden müssen, um systemweite Protokolle anzuzeigen.

sudo journalctl | grep sshd

Scrollen Sie durch die Ausgabe (mit den Pfeiltasten, und drücken Sie q zum Beenden) und Sie finden denselben "Failed password"-Eintrag. Um es noch einfacher zu machen, können Sie nach der Priorität der Nachrichten filtern. Bitten wir journalctl, nur Einträge mit der Priorität "error" (err) oder höher für den Dienst sshd anzuzeigen.

sudo journalctl -p err | grep sshd

Dieser Befehl liefert Ihnen eine viel prägnantere Ansicht nur der Fehlerbedingungen, was ihn für die Erkennung von Problemen sehr effizient macht.

-- Logs begin at ... --
Jul 22 10:35:15 labex-vm sshd[12345]: Failed password for invalid user baduser from 127.0.0.1 port 54321 ssh2
-- End of logs --

Schließlich können Sie auch manuell Nachrichten in die Protokolle einfügen, indem Sie den Befehl logger verwenden. Dies ist nützlich für benutzerdefinierte Skripte, um Sicherheitsereignisse zu melden. Erstellen wir eine benutzerdefinierte Warnung.

logger "SECURITY-ALERT: Unauthorized file access detected in /etc"

Suchen Sie nun nach dieser spezifischen Warnung in den Systemprotokollen.

sudo grep "SECURITY-ALERT" /var/log/syslog

Sie sehen Ihre benutzerdefinierte Nachricht, die zeigt, wie Sie Ihre eigene Überwachung mit der Protokollierungsfunktion des Systems integrieren können.

Jul 22 10:40:00 labex-vm labex: SECURITY-ALERT: Unauthorized file access detected in /etc

Sie haben nun die Grundlagen der Navigation in Systemprotokollen gelernt, um Beweise für anomale und potenziell bösartige Aktivitäten zu finden.

Zusammenfassung

In diesem Labor haben Sie wesentliche Techniken zur Identifizierung von Malware-Indikatoren auf einem Linux-System erlernt. Sie haben geübt, wie Sie verdächtige Prozessaktivitäten beobachten, indem Sie den Befehl top verwendet haben, um ungewöhnliche CPU- und Speicher-Spitzen zu überwachen. Um zu verstehen, wie dies in einem realen Szenario aussieht, haben Sie das Dienstprogramm stress verwendet, um einen Prozess mit hoher Auslastung zu simulieren und seinen Ressourcenverbrauch mit einer normalen Systembasis zu vergleichen.

Das Labor behandelte auch, wie unerwartete Dateierstellungen und -änderungen erkannt werden können, die häufige Anzeichen eines kompromittierten Systems sind. Schließlich haben Sie gelernt, Systemprotokolle auf anomale Einträge zu analysieren, eine entscheidende Fähigkeit, um Beweise für unbefugten Zugriff, Fehlkonfigurationen oder andere sicherheitsrelevante Ereignisse zu finden.