
🐍 Hochleistungs-, multithreaded YARA & IOC Scanner

Eine Neufassung von Loki in Rust. Hochleistungsfähiger, multithread-fähiger YARA- & IOC-Scanner in einer einzigen Binärdatei.
Status: Beta. Funktioniert, aber noch in aktiver Entwicklung.
Das Scannen des Prozessspeichers unter macOS erfolgt nach bestem Wissen und erfordert in der Regel Debugging-Berechtigungen oder erhöhte Privilegien. Ohne diese scannt Loki-RS weiterhin Dateien, kann aber die meisten Prozessspeicher nicht auslesen. Verwenden Sie --no-procs, um das Prozessscannen bei Bedarf zu überspringen.
Unter Linux überspringt Loki-RS gerätegestützte und kernel-spezifische Prozesszuordnungen, bevor es /proc/<pid>/mem liest. Dies vermeidet bekannte Instabilitäten mit einigen treiberverwalteten VMAs, während normales anonymes, Heap/Stack- und reguläres dateigestütztes Speicherscannen erhalten bleibt. Sollten dennoch umgebungsspezifische Probleme auftreten, verwenden Sie --no-procs, um das Prozessscannen zu deaktivieren.
Laden Sie die vorkompilierte Binärdatei für Ihre Plattform von der Releases-Seite herunter.
# Entpacken
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Signaturen aktualisieren (empfohlen)
./loki-util update
# Ausführen
sudo ./loki --help
Signaturen werden mit der Veröffentlichung mitgeliefert, veralten aber schnell. Führen Sie loki-util update aus, um die neuesten YARA-Forge-Kernregeln abzurufen.
Loki-RS verwendet YARA Forge als Standard-Signaturquelle. Loki-RS wird mit dem Core-Regelsatz ausgeliefert und aktualisiert diesen (hohe Genauigkeit, niedrige Fehlalarmrate, für Leistung optimiert). Wenn Sie eine breitere Abdeckung benötigen, können Sie die erweiterten oder vollständigen Sätze von YARA Forge einwechseln.
IOC-Dateien in signatures/iocs/ werden weiterhin als optionale lokale/benutzerdefinierte Inhalte unterstützt.
# Grundlegendes Scannen (TUI standardmäßig aktiviert)
sudo ./loki
# Bestimmten Ordner scannen
sudo ./loki --folder /tmp
# TUI deaktivieren, standardmäßige Befehlszeilenausgabe verwenden
sudo ./loki --no-tui
# Ein gemountetes Image scannen (Prozessscannen überspringen, alle Kerne nutzen)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Langsames und vorsichtiges Scannen (niedrigeres CPU-Limit, einzelner Thread)
sudo ./loki --cpu-limit 60 --threads 1
# Scannen und Logs an entfernten Syslog senden
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Option | Standard | Beschreibung |
|---|---|---|
-f, --folder <PFAD> | / | Zu scannender Ordner. Pfade mit Leerzeichen in Anführungszeichen setzen, z.B. -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
Loki-RS bietet mehrere Mechanismen zum Ausschließen von Dateien und Ordnern aus Scans.
Standardmäßig schließt Loki-RS automatisch Folgendes aus:
Systemverzeichnisse (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runCloud-Speicherverzeichnisse (sofern nicht --scan-all-drives verwendet wird):
Netzwerk- und gemountete Laufwerke (sofern nicht --scan-all-drives verwendet wird):
/media, /volumesProgrammverzeichnis:
Sie können bekannte gute Dateien anhand ihres Hashs ausschließen. Dies ist nützlich, um legitime Dateien auf eine Whitelist zu setzen, die Fehlalarme auslösen.
Einrichtung:
Erstellen Sie eine Datei in signatures/iocs/, die sowohl hash als auch falsepositive im Dateinamen enthält.
Beispiel: hash-falsepositive-custom.txt
Fügen Sie Hashes (MD5, SHA1 oder SHA256) mit optionalen Beschreibungen hinzu:
# Format: HASH;Beschreibung
d41d8cd98f00b204e9800998ecf8427e;Leere Datei - bekannte gute Datei
a7f5f35426b927411fc9231b56382173;Legitimes Systemprogramm
Dateien, die diesen Hashes entsprechen, werden beim Scannen stillschweigend übersprungen.
Wenn Sie Dateinamen-IOCs zu signatures/iocs/filename-iocs.txt hinzufügen, können Sie einen regulären Ausdruck für Fehlalarme in der dritten Spalte angeben:
# Format: REGEX;SCORE;FALSE_POSITIVE_REGEX
#
# Dies trifft auf alle .ps1-Dateien zu, schließt aber diejenigen in SysInternals-Verzeichnissen aus
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
Wenn eine Datei sowohl dem Hauptmuster als auch dem Fehlalarm-Regex entspricht, wird sie nicht gemeldet.
Die Datei config/excludes.cfg unterstützt regex-basierte Pfadausschlüsse:
# Systemverzeichnisse ausschließen
^/proc/.*
^/dev/.*
^/sys/.*
# Temporäre Dateien ausschließen
.*\.tmp$
.*\.temp$
.*\.swp$
# Bestimmte Verzeichnisse ausschließen
.*node_modules.*
.*/\.git/.*
Hinweis: Pfadausschlussmuster werden mit regulären Ausdrücken gegen den vollständigen Dateipfad abgeglichen. Zeilen, die mit # beginnen, sind Kommentare.
# Scannen, aber alle Laufwerke einbeziehen (Netzwerk, Cloud, gemountet)
sudo ./loki --scan-all-drives
# Alle Dateitypen scannen, nicht nur ausführbare Dateien und Skripte
sudo ./loki --scan-all-files
# Nur kleine Dateien scannen (unter 10 MB)
sudo ./loki --max-file-size 10000000
# Prozessscannen überspringen (nützlich für gemountete Images)
sudo ./loki --no-procs --folder /mnt/image
Das Terminal-Interface ist standardmäßig aktiviert und bietet Echtzeitüberwachung während der Scans.
sudo ./loki --folder /pfad/zum/scan


Loki-RS erstellt nach jedem Scan automatisch einen gestalteten HTML-Bericht. Der Bericht wird zusammen mit der JSONL-Logdatei erstellt und bietet eine visuelle Zusammenfassung aller Funde.
Der Bericht enthält:

Der HTML-Bericht teilt denselben Basisdateinamen wie die JSONL-Ausgabe (z.B. loki_hostname_2025-01-08.html). Um die Berichterstellung zu deaktivieren, verwenden Sie --no-html.
Sie können mit loki-util HTML-Berichte aus vorhandenen JSONL-Dateien erstellen:
# HTML-Bericht aus einer einzelnen JSONL-Datei erstellen
./loki-util html --input scan_results.jsonl --output report.html
# Kombinierten HTML-Bericht aus mehreren JSONL-Dateien erstellen
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Glob-Muster verwenden, um mehrere Dateien abzugleichen
./loki-util html --input "/pfad/zu/scans/*.jsonl" --combine --output combined.html
Optionen:
--input <Datei|Glob> - Eingabe-JSONL-Datei oder Glob-Muster (erforderlich)--output <Datei.html> - Ausgabe-HTML-Datei (optional, standardmäßig Eingabe-Dateiname mit .html-Erweiterung)--combine - Mehrere JSONL-Dateien in einem Bericht zusammenführen (gruppiert Funde nach Hostname)--title <str> - Berichtstitel überschreiben--host <str> - Hostname im Bericht überschreibenDer kombinierte Berichtsmodus ist nützlich, um Scan-Ergebnisse von mehreren Hosts oder Zeiträumen in einer einzigen Ansicht zusammenzufassen, wobei die Funde nach Quell-Hostname gruppiert werden.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Erfordert Rust-Toolchain. Siehe docs/BUILD.md für Cross-Kompilierung.
Loki RS ist ein Nebenprojekt. Es ist ein schneller Scanner mit einer einzigen Binärdatei, der für praktische Triage und Experimente entwickelt wurde, und kann sich schnell ändern, wenn Ideen ausprobiert und wieder entfernt werden.
Der Support erfolgt community-basiert und nach bestem Bemühen - keine SLA, keine garantierten Antwortzeiten und keine Zusage, dass jeder Grenzfall perfekt behandelt wird. Wenn Sie es in der Produktion einsetzen, tun Sie dies im Bewusstsein dieser Einschränkungen.
Für Unternehmensumgebungen und Incident-Response-Arbeiten mit vorhersehbarem Support und einem breiteren, gut getesteten Funktionsumfang unterhält Nextron Systems THOR (und THOR Lite). THOR ist der professionelle Scanner mit umfangreicher Artefaktabdeckung, mehr Modulen und Formaten sowie Herstellersupport. THOR Lite ist die kostenlose Einstiegsversion mit reduziertem Umfang.
GNU General Public License v3.0. Siehe LICENSE.
Copyright (c) 2025 Florian Roth
| Option | Standard | Beschreibung |
|---|
--no-procs | false | Prozessspeicher-Scannen überspringen |
--no-fs | false | Dateisystem-Scannen überspringen |
--no-archive | false | Scannen in Archiven (ZIP) überspringen |
--scan-all-drives | false | Alle Laufwerke scannen, einschließlich gemounteter/Netzwerk-/Cloud-Laufwerke |
--scan-all-files | false | Alle Dateien unabhängig von Erweiterung/Typ scannen |
| Option | Standard | Beschreibung |
|---|
-l, --log <DATEI> | auto | Logdatei im Klartext |
--no-log | false | Klartext-Logausgabe deaktivieren |
-j, --jsonl <DATEI> | auto | JSONL-Ausgabedatei |
--no-jsonl | false | JSONL-Ausgabe deaktivieren |
--no-html | false | HTML-Berichtserstellung deaktivieren |
--no-tui | false | TUI deaktivieren, standardmäßige Befehlszeilenausgabe verwenden |
-r, --remote <HOST:PORT> | keine | Remote-Syslog-Ziel |
-p, --remote-proto <PROTO> | udp | Remote-Protokoll (udp/tcp) |
--remote-format <FMT> | syslog | Remote-Format (syslog/json) |
| Option | Standard | Beschreibung |
|---|
--alert-level <SCORE> | 80 | Bewertungsschwellenwert für ALARM |
--warning-level <SCORE> | 60 | Bewertungsschwellenwert für WARNUNG |
--notice-level <SCORE> | 40 | Bewertungsschwellenwert für HINWEIS |
--max-reasons <NUM> | 2 | Maximale Anzahl an Übereinstimmungsgründen pro Fund |
-m, --max-file-size <BYTES> | 64000000 | Maximale Dateigröße zum Scannen (64 MB) |
--yara-timeout <SEKUNDEN> | 10 | Maximale YARA-Scanzeit pro Datei oder Prozessspeicherpuffer (Minimum: 1 Sekunde) |
-c, --cpu-limit <PROZENT> | 100 | CPU-Auslastungsgrenze (1-100) |
--threads <ANZAHL> | -2 | Anzahl der Threads (0=alle, -1=alle-1, -2=alle-2) |
| Option | Standard | Beschreibung |
|---|
--version | - | Version anzeigen und beenden |
-d, --debug | false | Debug-Ausgabe anzeigen |
--trace | false | Ausführliche Trace-Ausgabe anzeigen |
--show-access-errors | false | Datei-/Prozesszugriffsfehler anzeigen |
| Option | Beschreibung |
|---|
--scan-all-drives | Gemountete Laufwerke, Netzwerklaufwerke und Cloud-Speicher einbeziehen |
--scan-all-files | Alle Dateien unabhängig von Dateityp/-erweiterung scannen (standardmäßig werden nur relevante Dateitypen gescannt) |
-m, --max-file-size <BYTES> | Dateien überspringen, die größer als diese Größe sind (Standard: 64 MB) |
--no-procs | Prozessspeicher-Scannen vollständig überspringen |
--no-fs | Dateisystem-Scannen vollständig überspringen |
--no-archive | Scannen in Archivdateien (ZIP) überspringen |
| Taste | Aktion |
|---|
q | Beenden |
p | Pause/Fortsetzen |
s | Aktuelle Elemente überspringen |
t | Thread-Overlay umschalten |
+ / - | CPU-Limit anpassen |
| Pfeiltasten | Logs scrollen |