
Linux-Sicherheits- und Überwachungsskripte
Dies ist eine Sammlung von Sicherheits- und Überwachungsskripten, mit denen Sie Ihre Linux-Installation auf sicherheitsrelevante Ereignisse überwachen oder für eine Untersuchung nutzen können. Jedes Skript funktioniert eigenständig und ist unabhängig von den anderen Skripten. Die Skripte können so eingerichtet werden, dass sie entweder ihre Ergebnisse ausgeben, sie per E-Mail an Sie senden oder AlertR als Benachrichtigungskanal verwenden.
Die Skripte befinden sich im Verzeichnis scripts/.
Jedes Skript enthält eine kurze Zusammenfassung im Header der Datei mit einer Beschreibung dessen, was es tun soll,
wie das Erkennungsergebnis zu interpretieren ist (falls nicht eindeutig) und bekannte Probleme.
Falls Abhängigkeiten installiert werden müssen, sind diese ebenfalls aufgeführt, ebenso wie Verweise darauf, woher die Idee für
dieses Skript stammt (sofern vorhanden).
Jedes Skript hat eine Konfigurationsdatei im Verzeichnis scripts/config/, um es zu konfigurieren.
Wird die Konfigurationsdatei während der Ausführung des Skripts nicht gefunden,
greift das Skript auf Standardeinstellungen zurück und gibt die Ergebnisse aus.
Daher ist es nicht zwingend erforderlich, eine Konfigurationsdatei bereitzustellen.
Das Verzeichnis scripts/lib/ enthält Code, der von verschiedenen Skripten gemeinsam genutzt wird.
Skripte mit dem Präfix monitor_ halten einen Zustand und sind nur für Überwachungszwecke nützlich.
Eine einmalige Verwendung für eine Untersuchung führt lediglich dazu, dass der aktuelle Zustand des
Linux-Systems angezeigt wird, nicht aber Änderungen, die für die Systemsicherheit relevant sein könnten. Wenn Sie
den aktuellen Zustand Ihres Systems für diese Skripte als unbedenklich festlegen möchten, können Sie das Argument --init angeben.
Skripte mit dem Präfix search_ suchen nach Anzeichen einer Kompromittierung. Diese können für Untersuchungszwecke
verwendet werden. Wenn Sie sie zu Überwachungszwecken nutzen möchten, können Sie das Argument --monitoring
angeben, um einen Zustand zu halten und nur neue Erkenntnisse auszugeben.
Sehen Sie sich den Header des Skripts an, das Sie ausführen möchten. Er enthält eine kurze Beschreibung, was dieses Skript tun soll und welche Anforderungen erforderlich sind (falls überhaupt welche). Falls Anforderungen erforderlich sind, installieren Sie diese, bevor Sie das Skript ausführen.
Die gemeinsame Konfigurationsdatei scripts/config/config.py enthält Einstellungen, die von allen Skripten verwendet werden.
Darüber hinaus kann jedes Skript mit der entsprechenden Konfigurationsdatei im Verzeichnis scripts/config/
konfiguriert werden. Wenn keine Konfigurationsdatei gefunden wurde, wird eine Standardeinstellung verwendet und die Ergebnisse werden ausgegeben.
Schließlich können Sie alle konfigurierten Skripte durch Ausführen von start_search.py (das sich im Hauptverzeichnis befindet)
oder durch manuelles Ausführen jedes Skripts starten. Ein Python3-Interpreter ist erforderlich, um die Skripte auszuführen.
Wenn Sie die Skripte ständig zur Überwachung Ihres Linux-Systems verwenden möchten, müssen Sie die folgenden Schritte durchführen:
Richten Sie einen Benachrichtigungskanal ein, der von den Skripten unterstützt wird (derzeit Ausgabe auf der Konsole, E-Mail, oder AlertR).
Konfigurieren Sie die Skripte, die Sie ausführen möchten, mit den Konfigurationsdateien im Verzeichnis scripts/config/.
Führen Sie start_search.py mit dem Argument --init aus, um die Skripte mit dem Präfix monitor_ zu initialisieren und einen Zustand Ihres Systems zu erstellen. Dies setzt jedoch voraus, dass Ihr System derzeit nicht kompromittiert ist.
Wenn Sie sich darüber nicht sicher sind, sollten Sie seinen aktuellen Zustand überprüfen.
Richten Sie einen Cron-Job als root-Benutzer ein, der start_search.py --monitoring ausführt
(z. B. 0 * * * * root /opt/LSMS/start_search.py --monitoring, um die Suche stündlich zu starten).
Das Argument --monitoring sorgt dafür, dass die Skripte nur neue Erkenntnisse melden und somit verhindern, dass sie ständig dasselbe Problem melden.
| Name | Skript |
|---|
| Überwachung von Cron-Dateien | monitor_cron.py |
| Überwachung der /etc/hosts-Datei | monitor_hosts_file.py |
| Überwachung der /etc/ld.so.preload-Datei | monitor_ld_preload.py |
| Überwachung der /etc/passwd-Datei | monitor_passwd.py |
| Überwachung von Modulen | monitor_modules.py |
| Überwachung von SSH authorized_keys-Dateien | monitor_ssh_authorized_keys.py |
| Überwachung von systemd-Unit-Dateien | monitor_systemd_units.py |
| Suche nach laufenden gelöschten Programmen | search_deleted_exe.py |
| Suche nach ausführbaren Dateien in /dev/shm | search_dev_shm.py |
| Suche nach versteckten ELF-Dateien | search_hidden_exe.py |
| Suche nach unveränderlichen Dateien | search_immutable_files.py |
| Suche nach lastlog-Einträgen, die in utmp-Logs fehlen | search_lastlog_in_utmp.py |
| Suche nach dateilosen Programmen (memfd_create) | search_memfd_create.py |
| Suche nach Kernel-Thread-Identitätsanmaßungen | search_non_kthreads.py |
| Suche nach Prozessen, die von einer inzwischen getrennten SSH-Sitzung gestartet wurden | search_ssh_leftover_processes.py |
| Suche nach Kernel-Modul-Taint-Flags für verdächtige Kombinationen | search_tainted_modules.py |
| Suche nach Anzeichen für Manipulation der utmp-Logs | search_utmp_tampering.py |
| Testskript zur Überprüfung, ob die Alarmierung funktioniert | test_alert.py |
| Überprüfung der Integrität installierter .deb-Pakete | verify_deb_packages.py |