
IOC- und YARA-basierter Scanner zur Erkennung von Indikatoren für Kompromittierung mittels Dateinamen-Regex, YARA-Signaturen, Hash-Abgleich und C2-Rückverbindungsprüfungen auf Endpunkten.
Ich habe einen neuen Open Source YARA-Scanner namens LOKI RS (Rust) geschrieben. LOKI (Python) ist jetzt offiziell veraltet.
Dieses Projekt befindet sich jetzt im inaktiven Wartungsmodus. Das bedeutet, dass ich zwar Pull-Requests für Fehlerbehebungen und einfache Probleme zusammenführe, aber derzeit keine Zeit habe, neue Funktionen hinzuzufügen oder bestehende zu erweitern. Seit Jahren konzentriere ich mich auf die Entwicklung eines fortschrittlicheren Scanners, THOR, der eine Reihe von Verbesserungen gegenüber diesem Projekt bietet. Eine kostenlose Version, THOR Lite, ist verfügbar; sie ist schneller, stabiler und in unseren CI-Umgebungen gründlich getestet – einfach eine bessere Lösung. Einen Vergleich der Open-Source-, kostenlosen und kommerziellen Scanner finden Sie hier.
Ich habe auch mit der Arbeit an einer Rust-basierten Version von LOKI namens LOKI 2 begonnen. Ich bin mir jedoch nicht sicher, wann sie die Funktionsparität mit der aktuellen LOKI-Version erreichen wird. Außerdem habe ich ein Flussdiagramm erstellt, das Ihnen bei der Entscheidung hilft, welcher Scanner Ihren Anforderungen am besten entspricht.

Scanner für einfache Indikatoren einer Kompromittierung
Die Erkennung basiert auf vier Erkennungsmethoden:
1. Dateiname-IOC
Regex-Übereinstimmung auf vollständigem Dateipfad/-namen
2. Yara-Regelprüfung
Yara-Signaturübereinstimmung auf Dateidaten und Prozessspeicher
3. Hash-Prüfung
Vergleicht bekannte bösartige Hashes (MD5, SHA1, SHA256) mit gescannten Dateien
4. C2-Back-Connect-Prüfung
Vergleicht Prozessverbindungsendpunkte mit C2-IOCs (neu seit Version v.10)
Zusätzliche Prüfungen:
1. Regin-Dateisystemprüfung (via --reginfs)
2. Prozessanomalieprüfung (basierend auf [Sysforensics](http://goo.gl/P99QZQ))
3. SWF-dekomprimierter Scan (neu seit Version v0.8)
4. SAM-Dump-Prüfung
Das Windows-Binärprogramm wurde mit PyInstaller kompiliert und sollte als x86-Anwendung sowohl auf x86- als auch auf x64-basierten Systemen laufen.
Keine Voraussetzungen, wenn Sie die kompilierte EXE verwenden.
Wenn Sie es selbst bauen möchten:
usage: loki.py [-h] [-p path] [-s kilobyte] [-l log-file] [-r remote-loghost]
[-t remote-syslog-port] [-a alert-level] [-w warning-level]
[-n notice-level] [--allhds] [--alldrives] [--printall]
[--allreasons] [--noprocscan] [--nofilescan] [--vulnchecks]
[--nolevcheck] [--scriptanalysis] [--rootkit] [--noindicator]
[--dontwait] [--intense] [--csv] [--onlyrelevant] [--nolog]
[--update] [--debug] [--maxworkingset MAXWORKINGSET]
[--syslogtcp] [--logfolder log-folder] [--nopesieve]
[--pesieveshellc] [--nolisten]
[--excludeprocess EXCLUDEPROCESS] [--force]
Loki - Einfacher IOC-Scanner
optionale Argumente:
-h, --help Zeigt diese Hilfemeldung an und beendet das Programm
-p path Zu scannender Pfad
-s kilobyte Maximale Dateigröße in KB für die Überprüfung (Standard 5000 KB)
-l log-file Logdatei
-r remote-loghost Remote-Syslog-System
-t remote-syslog-port
Remote-Syslog-Port
-a alert-level Alarmstufe
-w warning-level Warnstufe
-n notice-level Hinweisstufe
--allhds Alle lokalen Festplatten scannen (nur Windows)
--alldrives Alle Laufwerke scannen (einschließlich Netzwerklaufwerke und
Wechselmedien)
--printall Alle gescannten Dateien ausgeben
--allreasons Alle Gründe ausgeben, die zur Bewertung geführt haben
--noprocscan Prozessscan überspringen
--nofilescan Dateiscan überspringen
--vulnchecks Schwachstellenprüfungen ausführen
--nolevcheck Levenshtein-Distanz-Prüfung überspringen
--scriptanalysis Statistische Analyse für Skripte zur Erkennung von obfuskiertem
Code (Beta)
--rootkit Rootkit-Prüfung überspringen
--noindicator Keine Fortschrittsanzeige anzeigen
--dontwait Nicht auf Beenden warten
--intense Intensiver Scan-Modus (auch unbekannte Dateitypen und
alle Erweiterungen scannen)
--csv CSV-Logformat nach STDOUT ausgeben (Maschinenverarbeitung)
--onlyrelevant Nur Warnungen oder Alarme ausgeben
--nolog Keine lokale Logdatei schreiben
--update Signaturen aus dem Unterrepository "signature-base" aktualisieren
--debug Debug-Ausgabe
--maxworkingset MAXWORKINGSET
Maximale Arbeitsspeichergröße von zu scannenden Prozessen (in MB,
Standard 100 MB)
--syslogtcp TCP anstelle von UDP für Syslog-Logging verwenden
--logfolder log-folder
Ordner für das Logging, wenn keine Logdatei angegeben ist
--nopesieve Keine pe-sieve-Scans durchführen
--pesieveshellc pe-sieve-Shellcode-Scan durchführen
--nolisten Keine lauschenden Verbindungen anzeigen
--excludeprocess EXCLUDEPROCESS
Namen einer ausführbaren Datei angeben, die von Scans ausgeschlossen werden soll,
kann mehrfach verwendet werden
--force Scan auf einem bestimmten Ordner erzwingen (auch wenn er mit einem
harten Ausschluss im LOKI-Code ausgeschlossen ist)
Seit Version 0.15 befinden sich die Yara-Signaturen im Unterrepository signature-base. Sie erhalten das Unterrepository nicht, wenn Sie LOKI als ZIP-Datei herunterladen. Es wird enthalten sein, wenn Sie das Repository klonen.
Die IOC-Dateien für Hashes und Dateinamen werden im Ordner './signature-base/iocs' gespeichert. Alle '.yar'-Dateien, die im Ordner './signature-base/yara' abgelegt werden, werden zusammen mit dem bereits enthaltenen Regelsatz initialisiert. Verwenden Sie den 'score'-Wert, um die Nachrichtenebene bei einer Signaturübereinstimmung zu definieren.
Sie können Hash-, C2- und Dateinamen-IOCs hinzufügen, indem Sie Dateien im Unterordner './signature-base/iocs' ablegen. Alle Hash-IOC- und Dateinamen-IOC-Dateien müssen im von LOKI verwendeten Format vorliegen (siehe die Standarddateien). Die Dateien müssen die Zeichenfolgen "hash", "filename" oder "c2" in ihrem Namen enthalten, um während der Initialisierung geladen zu werden.
Für Hash-IOCs (durch Zeilenumbruch getrennt; Hash-Typ wird automatisch erkannt)
Hash;Description [Reference]
Für Dateinamen-IOCs (durch Zeilenumbruch getrennt)
# (optional) Description [Reference]
Filename as Regex[;Score as integer[;False-positive as Regex]]
Seit Version v0.16.2 unterstützt LOKI die Definition von benutzerdefinierten Ausschlüssen über "excludes.cfg" im neuen Ordner "./config". Jede Zeile repräsentiert einen regulären Ausdruck, der während des Verzeichnisdurchlaufs auf den vollständigen Dateipfad angewendet wird. Auf diese Weise können Sie bestimmte Verzeichnisse unabhängig von ihrem Laufwerksbuchstaben, Dateierweiterungen in bestimmten Ordnern sowie alle Dateien und Verzeichnisse ausschließen, die zu einem Produkt gehören, das empfindlich auf Antiviren-Scans reagiert.
Die '''exclude.cfg''' sieht wie folgt aus:
# Ausgeschlossene Verzeichnisse
#
# - Fügen Sie Verzeichnisse hinzu, die Sie vom Scan ausschließen möchten
# - Doppelte Escape-Backslashes
# - Werte sind case-insensitive
# - Denken Sie daran, unter Windows Backslashes und unter Linux / Unix / OSX Slashes zu verwenden
# - Jede Zeile enthält einen Regex, der irgendwo im vollständigen Pfad übereinstimmt (case insensitive)
# z.B.:
# Regex: \\System32\\
# Entspricht C:\Windows\System32\cmd.exe
#
# Regex: /var/log/[^/]+\.log
# Entspricht: /var/log/test.log
# Entspricht nicht: /var/log/test.gz
#
# Nützliche Beispiele
\\Ntfrs\\
\\Ntds\\
\\EDB[^\.]+\.log
Sysvol\\Staging\\Nntfrs_cmp
\\System Volume Information\\DFSR
Loki-Scan

Regin-Übereinstimmungen

Regin-False Positives

Hash-basierte IOCs

Dateinamen-basierte IOCs

Generierte Logdatei

LOKI-Scanner auf unserer Firmenhomepage https://www.nextron-systems.com/loki/
Twitter @cyb3rOps @thor_scanner
Wenn Sie an einer Unternehmenslösung für APT-Scans interessiert sind, schauen Sie sich Lokis großen Bruder THOR an.
Laden Sie PyInstaller herunter, wechseln Sie in das PyInstaller-Programmverzeichnis und führen Sie Folgendes aus:
python ./pyinstaller.py -F C:\path\to\loki.py
Dadurch wird eine loki.exe im Unterordner ./loki/dist erstellt.
Um die msvcr100.dll einzubinden und die Zielbetriebssystem-Kompatibilität zu verbessern, ändern Sie die Zeile in der Datei ./loki/loki.spec, die a.binaries, enthält, wie folgt:
a.binaries + [('msvcr100.dll', 'C:\Windows\System32\msvcr100.dll', 'BINARY')],
venv vorhanden ist, und führen Sie dann python -m venv path/to/venv aus, wobei path/to/venv der Pfad zu Ihrer virtuellen Umgebung ist. Testen Sie Ihre virtuelle Umgebung, indem Sie path/to/venv/bin/python --version ausführen.
Aktualisieren Sie die Module Ihrer virtuellen Umgebung für pip, setuptools und wheel, indem Sie path/to/venv/bin/python -m pip install --upgrade pip setuptools wheel ausführen.path/to/venv/bin/python -m pip install colorama yara-python psutil rfc5424-logging-handler netaddr.path/to/venv/bin/python path/to/loki/loki-upgrader.py, wobei path/to/loki der Pfad zum Loki-Repository ist.Laden Sie Yara-Quellen von hier herunter.
Der kompilierte Scanner kann von Antiviren-Engines erkannt werden. Dies wird dadurch verursacht, dass der Scanner ein kompiliertes Python-Skript ist, das einige Dateisystem- und Prozessscan-Funktionen implementiert, die auch in kompiliertem Malware-Code verwendet werden.
Wenn Sie der kompilierten ausführbaren Datei nicht vertrauen, kompilieren Sie sie bitte selbst.
Loki - Simple IOC Scanner Copyright (c) 2015 Florian Roth
Dieses Programm ist freie Software: Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, entweder Version 3 der Lizenz oder (nach Ihrer Wahl) jeder späteren Version weiterverteilen und/oder modifizieren.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich sein wird, jedoch OHNE JEDE GEWÄHRLEISTUNG; sogar ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die GNU General Public License für weitere Details.
Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Wenn nicht, siehe http://www.gnu.org/licenses/.
sudo path/to/venv/bin/python loki.py.