
🐍 Scanneur YARA et IOC haute performance, multi-thread

Une réécriture de Loki en Rust. Scanner YARA et IOC hautes performances, multi-threadé, en un seul binaire.
Statut : Bêta. Fonctionne, mais toujours en développement actif.
L'analyse de la mémoire des processus sur macOS est au mieux et nécessite généralement des droits de débogage ou des privilèges élevés. Sans ceux-ci, Loki-RS analysera toujours les fichiers mais ne pourra pas lire la plupart de la mémoire des processus. Utilisez --no-procs pour ignorer l'analyse des processus si nécessaire.
Sous Linux, Loki-RS ignore les mappages de processus adossés à des périphériques et spéciaux du noyau avant de lire /proc/<pid>/mem. Cela évite l'instabilité connue avec certaines VMA gérées par des pilotes tout en préservant l'analyse normale de la mémoire anonyme, du tas/pile et des fichiers classiques. Si vous rencontrez toujours des problèmes spécifiques à l'environnement, utilisez --no-procs pour désactiver l'analyse des processus.
Téléchargez le binaire précompilé pour votre plateforme depuis la Page des versions.
# Extraction
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Mise à jour des signatures (recommandé)
./loki-util update
# Exécution
sudo ./loki --help
Les signatures sont livrées avec la version mais deviennent rapidement obsolètes. Exécutez loki-util update pour récupérer les dernières règles YARA-Forge Core.
Loki-RS utilise YARA Forge comme source de signatures par défaut. Loki-RS est livré et mis à jour avec l'ensemble de règles Core (haute précision, faible taux de faux positifs, optimisé pour les performances). Si vous avez besoin d'une couverture plus large, vous pouvez échanger avec les ensembles Extended ou Full de YARA Forge.
Les fichiers IOC dans signatures/iocs/ restent pris en charge en tant que contenu local/personnalisé optionnel.
# Analyse de base (TUI activée par défaut)
sudo ./loki
# Analyser un dossier spécifique
sudo ./loki --folder /tmp
# Désactiver la TUI, utiliser la sortie standard en ligne de commande
sudo ./loki --no-tui
# Analyser une image montée (ignorer l'analyse des processus, utiliser tous les cœurs)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Analyse lente et prudente (limite CPU basse, un seul thread)
sudo ./loki --cpu-limit 60 --threads 1
# Analyser et envoyer les journaux à un syslog distant
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Option | Défaut | Description |
|---|---|---|
-f, --folder <CHEMIN> | / | Dossier à analyser. Mettez entre guillemets les chemins contenant des espaces, ex. -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
Loki-RS fournit plusieurs mécanismes pour exclure des fichiers et dossiers des analyses.
Par défaut, Loki-RS exclut automatiquement :
Répertoires système (Linux/macOS) :
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runRépertoires de stockage cloud (sauf si --scan-all-drives est utilisé) :
Lecteurs réseau et montés (sauf si --scan-all-drives est utilisé) :
/media, /volumesRépertoire du programme :
Vous pouvez exclure des fichiers connus comme fiables par leur hachage. Ceci est utile pour mettre sur liste blanche des fichiers légitimes qui déclenchent des faux positifs.
Configuration :
Créez un fichier dans signatures/iocs/ avec à la fois hash et falsepositive dans le nom du fichier
Exemple : hash-falsepositive-custom.txt
Ajoutez des hachages (MD5, SHA1 ou SHA256) avec des descriptions optionnelles :
# Format: HACHAGE;description
d41d8cd98f00b204e9800998ecf8427e;Fichier vide - connu comme fiable
a7f5f35426b927411fc9231b56382173;Utilitaire système légitime
Les fichiers correspondant à ces hachages seront silencieusement ignorés lors de l'analyse.
Lorsque vous ajoutez des IOC de noms de fichiers à signatures/iocs/filename-iocs.txt, vous pouvez spécifier une expression régulière d'exclusion de faux positif dans la troisième colonne :
# Format: REGEX;SCORE;REGEX_FAUX_POSITIF
#
# Ceci correspond à tous les fichiers .ps1, mais exclut ceux des répertoires SysInternals
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
Si un fichier correspond à la fois au motif principal ET à l'expression régulière de faux positif, il ne sera pas signalé.
Le fichier config/excludes.cfg prend en charge les exclusions de chemin basées sur des expressions régulières :
# Exclure les répertoires système
^/proc/.*
^/dev/.*
^/sys/.*
# Exclure les fichiers temporaires
.*\.tmp$
.*\.temp$
.*\.swp$
# Exclure des répertoires spécifiques
.*node_modules.*
.*/\.git/.*
Remarque : Les motifs d'exclusion de chemin sont mis en correspondance avec le chemin complet du fichier à l'aide d'expressions régulières. Les lignes commençant par # sont des commentaires.
# Analyser mais inclure tous les lecteurs (réseau, cloud, montés)
sudo ./loki --scan-all-drives
# Analyser tous les types de fichiers, pas seulement les exécutables et scripts
sudo ./loki --scan-all-files
# Analyser uniquement les petits fichiers (moins de 10 Mo)
sudo ./loki --max-file-size 10000000
# Ignorer l'analyse des processus (utile pour les images montées)
sudo ./loki --no-procs --folder /mnt/image
L'interface terminal est activée par défaut et fournit une surveillance en temps réel pendant les analyses.
sudo ./loki --folder /chemin/vers/analyse


Loki-RS génère automatiquement un rapport HTML stylisé après chaque analyse. Le rapport est créé en même temps que le fichier journal JSONL et fournit un résumé visuel de tous les résultats.
Le rapport comprend :

Le rapport HTML partage le même nom de fichier de base que la sortie JSONL (par ex., loki_hostname_2025-01-08.html). Pour désactiver la génération de rapport, utilisez --no-html.
Vous pouvez générer des rapports HTML à partir de fichiers JSONL existants en utilisant loki-util :
# Générer un rapport HTML à partir d'un seul fichier JSONL
./loki-util html --input scan_results.jsonl --output report.html
# Générer un rapport HTML combiné à partir de plusieurs fichiers JSONL
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Utiliser des motifs glob pour correspondre à plusieurs fichiers
./loki-util html --input "/chemin/vers/analyses/*.jsonl" --combine --output combined.html
Options :
--input <fichier|glob> - Fichier JSONL d'entrée ou motif glob (obligatoire)--output <fichier.html> - Fichier HTML de sortie (optionnel, par défaut le nom du fichier d'entrée avec extension .html)--combine - Combiner plusieurs fichiers JSONL en un seul rapport (regroupe les résultats par nom d'hôte)--title <chaîne> - Remplacer le titre du rapport--host <chaîne> - Remplacer le nom d'hôte dans le rapportLe mode de rapport combiné est utile pour agréger les résultats d'analyse de plusieurs hôtes ou périodes en une seule vue, avec les résultats regroupés par nom d'hôte source.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Nécessite la chaîne d'outils Rust. Voir docs/BUILD.md pour la compilation croisée.
Loki RS est un projet secondaire. C'est un scanner rapide, en un seul binaire, conçu pour le tri pratique et l'expérimentation, et il peut changer rapidement au fur et à mesure que des idées sont testées et supprimées.
Le support est basé sur la communauté et au mieux - pas de SLA, pas de temps de réponse garantis, et aucune promesse que chaque cas particulier est parfaitement géré. Si vous l'utilisez en production, faites-le avec cela à l'esprit.
Pour les environnements d'entreprise et le travail de réponse aux incidents avec un support prévisible et un ensemble de fonctionnalités plus large et bien testé, Nextron Systems maintient THOR (et THOR Lite). THOR est le scanner professionnel avec une couverture étendue des artefacts, plus de modules et de formats, et un support fournisseur. THOR Lite est la version d'entrée gratuite avec un périmètre réduit.
Licence publique générale GNU v3.0. Voir LICENSE.
Copyright (c) 2025 Florian Roth
| Option | Défaut | Description |
|---|
--no-procs | false | Ignorer l'analyse de la mémoire des processus |
--no-fs | false | Ignorer l'analyse du système de fichiers |
--no-archive | false | Ignorer l'analyse dans les archives (ZIP) |
--scan-all-drives | false | Analyser tous les lecteurs y compris montés/réseau/cloud |
--scan-all-files | false | Analyser tous les fichiers indépendamment de l'extension/type |
| Option | Défaut | Description |
|---|
-l, --log <FICHIER> | auto | Fichier journal en texte brut |
--no-log | false | Désactiver la sortie journal en texte brut |
-j, --jsonl <FICHIER> | auto | Fichier de sortie JSONL |
--no-jsonl | false | Désactiver la sortie JSONL |
--no-html | false | Désactiver la génération de rapport HTML |
--no-tui | false | Désactiver la TUI, utiliser la sortie standard en ligne de commande |
-r, --remote <HÔTE:PORT> | none | Destination syslog distante |
-p, --remote-proto <PROTO> | udp | Protocole distant (udp/tcp) |
--remote-format <FORMAT> | syslog | Format distant (syslog/json) |
| Option | Défaut | Description |
|---|
--alert-level <SCORE> | 80 | Seuil de score pour ALERTE |
--warning-level <SCORE> | 60 | Seuil de score pour AVERTISSEMENT |
--notice-level <SCORE> | 40 | Seuil de score pour AVIS |
--max-reasons <N> | 2 | Nombre max de raisons de correspondance à afficher par résultat |
-m, --max-file-size <OCTETS> | 64000000 | Taille de fichier maximale à analyser (64 Mo) |
--yara-timeout <SECONDES> | 10 | Temps d'analyse YARA maximum pour chaque fichier ou tampon mémoire de processus (minimum : 1 seconde) |
-c, --cpu-limit <POURCENT> | 100 | Limite d'utilisation CPU (1-100) |
--threads <N> | -2 | Nombre de threads (0=tous, -1=tous-1, -2=tous-2) |
| Option | Défaut | Description |
|---|
--version | - | Afficher la version et quitter |
-d, --debug | false | Afficher les sorties de débogage |
--trace | false | Afficher les sorties de trace détaillées |
--show-access-errors | false | Afficher les erreurs d'accès aux fichiers/processus |
| Option | Description |
|---|
--scan-all-drives | Inclure les lecteurs montés, les lecteurs réseau et le stockage cloud |
--scan-all-files | Analyser tous les fichiers indépendamment du type/extension (par défaut, seuls les types de fichiers pertinents sont analysés) |
-m, --max-file-size <OCTETS> | Ignorer les fichiers plus grands que cette taille (par défaut : 64 Mo) |
--no-procs | Ignorer complètement l'analyse de la mémoire des processus |
--no-fs | Ignorer complètement l'analyse du système de fichiers |
--no-archive | Ignorer l'analyse dans les fichiers archives (ZIP) |
| Touche | Action |
|---|
q | Quitter |
p | Pause/Reprendre |
s | Ignorer les éléments en cours |
t | Activer/désactiver la superposition des threads |
+ / - | Ajuster la limite CPU |
| Touches fléchées | Faire défiler les journaux |