
🐍 Escáner YARA & IOC de alto rendimiento y multi-hilo

Una reescritura de Loki en Rust. Escáner YARA e IOC de alto rendimiento y múltiples hilos en un único binario.
Estado: Beta. Funciona, pero aún en desarrollo activo.
El escaneo de memoria de procesos en macOS se realiza con el mejor esfuerzo y normalmente requiere capacidades de depuración o privilegios elevados. Sin ellos, Loki-RS seguirá escaneando archivos pero no podrá leer la mayoría de la memoria de procesos. Use --no-procs para omitir el escaneo de procesos si es necesario.
En Linux, Loki-RS omite los mapeos de procesos respaldados por dispositivos y los especiales del kernel antes de leer /proc/<pid>/mem. Esto evita la inestabilidad conocida con algunas VMA gestionadas por controladores, mientras preserva el escaneo normal de memoria anónima, heap/stack y archivos regulares respaldados. Si aún encuentra problemas específicos del entorno, use --no-procs para deshabilitar el escaneo de procesos.
Descargue el binario precompilado para su plataforma desde la Página de Lanzamientos.
# Extraer
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Actualizar firmas (recomendado)
./loki-util update
# Ejecutar
sudo ./loki --help
Las firmas se incluyen con el lanzamiento pero quedan obsoletas rápidamente. Ejecute loki-util update para obtener las últimas reglas YARA-Forge Core.
Loki-RS utiliza YARA Forge como fuente de firmas predeterminada. Loki-RS incluye y actualiza el conjunto de reglas Core (alta precisión, bajos falsos positivos, optimizado para rendimiento). Si necesita una cobertura más amplia, puede reemplazarlo por los conjuntos Extended o Full de YARA Forge.
Los archivos IOC en signatures/iocs/ siguen siendo compatibles como contenido local/personalizado opcional.
# Escaneo básico (TUI habilitada por defecto)
sudo ./loki
# Escanear carpeta específica
sudo ./loki --folder /tmp
# Deshabilitar TUI, usar salida estándar de línea de comandos
sudo ./loki --no-tui
# Escanear una imagen montada (omitir escaneo de procesos, usar todos los núcleos)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Escaneo lento y cauteloso (límite de CPU bajo, un solo hilo)
sudo ./loki --cpu-limit 60 --threads 1
# Escanear y enviar logs a syslog remoto
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Opción | Predeterminado | Descripción |
|---|---|---|
-f, --folder <RUTA> | / | Carpeta a escanear. Use comillas en rutas con espacios, p.ej. -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
Loki-RS proporciona múltiples mecanismos para excluir archivos y carpetas de los escaneos.
Por defecto, Loki-RS excluye automáticamente:
Directorios del sistema (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runDirectorios de almacenamiento en la nube (a menos que se use --scan-all-drives):
Unidades de red y montadas (a menos que se use --scan-all-drives):
/media, /volumesDirectorio del programa:
Puede excluir archivos conocidos como buenos mediante su hash. Esto es útil para blanquear archivos legítimos que generan falsos positivos.
Configuración:
Cree un archivo en signatures/iocs/ que contenga tanto hash como falsepositive en el nombre de archivo
Ejemplo: hash-falsepositive-custom.txt
Agregue hashes (MD5, SHA1 o SHA256) con descripciones opcionales:
# Formato: HASH;descripción
d41d8cd98f00b204e9800998ecf8427e;Archivo vacío - conocido como bueno
a7f5f35426b927411fc9231b56382173;Utilidad de sistema legítima
Los archivos que coincidan con estos hashes serán omitidos silenciosamente durante el escaneo.
Al agregar IOC de nombre de archivo en signatures/iocs/filename-iocs.txt, puede especificar una expresión regular de exclusión de falso positivo en la tercera columna:
# Formato: REGEX;PUNTUACIÓN;REGEX_FALSO_POSITIVO
#
# Esto coincide con todos los archivos .ps1, pero excluye aquellos en directorios de SysInternals
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
Si un archivo coincide tanto con el patrón principal como con la expresión regular de falso positivo, no se informará.
El archivo config/excludes.cfg admite exclusiones de ruta basadas en expresiones regulares:
# Excluir directorios del sistema
^/proc/.*
^/dev/.*
^/sys/.*
# Excluir archivos temporales
.*\.tmp$
.*\.temp$
.*\.swp$
# Excluir directorios específicos
.*node_modules.*
.*/\.git/.*
Nota: Los patrones de exclusión de ruta se comparan con la ruta completa del archivo usando expresiones regulares. Las líneas que comienzan con # son comentarios.
# Escanear pero incluir todas las unidades (red, nube, montadas)
sudo ./loki --scan-all-drives
# Escanear todos los tipos de archivo, no solo ejecutables y scripts
sudo ./loki --scan-all-files
# Escanear solo archivos pequeños (menos de 10MB)
sudo ./loki --max-file-size 10000000
# Omitir escaneo de procesos (útil para imágenes montadas)
sudo ./loki --no-procs --folder /mnt/image
La interfaz de terminal está habilitada por defecto y proporciona monitoreo en tiempo real durante los escaneos.
sudo ./loki --folder /path/to/scan


Loki-RS genera automáticamente un informe HTML con estilo después de cada escaneo. El informe se crea junto al archivo de log JSONL y proporciona un resumen visual de todos los hallazgos.
El informe incluye:

El informe HTML comparte el mismo nombre base que la salida JSONL (p.ej., loki_hostname_2025-01-08.html). Para deshabilitar la generación de informes, use --no-html.
Puede generar informes HTML desde archivos JSONL existentes usando loki-util:
# Generar informe HTML desde un único archivo JSONL
./loki-util html --input scan_results.jsonl --output report.html
# Generar informe HTML combinado desde múltiples archivos JSONL
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Usar patrones glob para coincidir múltiples archivos
./loki-util html --input "/path/to/scans/*.jsonl" --combine --output combined.html
Opciones:
--input <archivo|glob> - Archivo JSONL de entrada o patrón glob (obligatorio)--output <archivo.html> - Archivo HTML de salida (opcional, por defecto nombre de archivo de entrada con extensión .html)--combine - Combinar múltiples archivos JSONL en un solo informe (agrupa hallazgos por nombre de host)--title <str> - Sobrescribir el título del informe--host <str> - Sobrescribir el nombre de host en el informeEl modo de informe combinado es útil para agregar resultados de escaneo de múltiples hosts o períodos de tiempo en una sola vista, con hallazgos agrupados por nombre de host de origen.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Requiere el toolchain de Rust. Consulte docs/BUILD.md para compilación cruzada.
Loki RS es un proyecto secundario. Es un escáner rápido, de un solo binario, construido para triaje práctico y experimentación, y puede cambiar rápidamente a medida que se prueban y eliminan ideas.
El soporte es comunitario y de mejor esfuerzo: sin SLA, sin tiempos de respuesta garantizados y sin promesa de que todos los casos límite se manejen perfectamente. Si lo ejecuta en producción, hágalo teniendo esto en cuenta.
Para entornos corporativos y trabajo de respuesta a incidentes con soporte predecible y un conjunto de características más amplio y probado, Nextron Systems mantiene THOR (y THOR Lite). THOR es el escáner profesional con cobertura extensa de artefactos, más módulos y formatos, y soporte del proveedor. THOR Lite es la versión de entrada gratuita con un alcance reducido.
GNU General Public License v3.0. Consulte LICENSE.
Copyright (c) 2025 Florian Roth
| Opción | Predeterminado | Descripción |
|---|
--no-procs | false | Omitir escaneo de memoria de procesos |
--no-fs | false | Omitir escaneo del sistema de archivos |
--no-archive | false | Omitir escaneo dentro de archivos comprimidos (ZIP) |
--scan-all-drives | false | Escanear todas las unidades, incluyendo montadas/red/nube |
--scan-all-files | false | Escanear todos los archivos independientemente de extensión/tipo |
| Opción | Predeterminado | Descripción |
|---|
-l, --log <ARCHIVO> | auto | Archivo de log en texto plano |
--no-log | false | Deshabilitar salida de log en texto plano |
-j, --jsonl <ARCHIVO> | auto | Archivo de salida JSONL |
--no-jsonl | false | Deshabilitar salida JSONL |
--no-html | false | Deshabilitar generación de informe HTML |
--no-tui | false | Deshabilitar TUI, usar salida estándar de línea de comandos |
-r, --remote <HOST:PUERTO> | none | Destino syslog remoto |
-p, --remote-proto <PROTO> | udp | Protocolo remoto (udp/tcp) |
--remote-format <FORMATO> | syslog | Formato remoto (syslog/json) |
| Opción | Predeterminado | Descripción |
|---|
--alert-level <PUNTUACIÓN> | 80 | Umbral de puntuación para ALERTA |
--warning-level <PUNTUACIÓN> | 60 | Umbral de puntuación para ADVERTENCIA |
--notice-level <PUNTUACIÓN> | 40 | Umbral de puntuación para AVISO |
--max-reasons <NÚM> | 2 | Máximo de razones de coincidencia a mostrar por hallazgo |
-m, --max-file-size <BYTES> | 64000000 | Tamaño máximo de archivo a escanear (64MB) |
--yara-timeout <SEGUNDOS> | 10 | Tiempo máximo de escaneo YARA para cada archivo o búfer de memoria de proceso (mínimo: 1 segundo) |
-c, --cpu-limit <PORCENTAJE> | 100 | Límite de uso de CPU (1-100) |
--threads <NÚM> | -2 | Número de hilos (0=todos, -1=todos-1, -2=todos-2) |
| Opción | Predeterminado | Descripción |
|---|
--version | - | Mostrar versión y salir |
-d, --debug | false | Mostrar salida de depuración |
--trace | false | Mostrar salida detallada de traza |
--show-access-errors | false | Mostrar errores de acceso a archivos/procesos |
| Opción | Descripción |
|---|
--scan-all-drives | Incluir unidades montadas, de red y almacenamiento en la nube |
--scan-all-files | Escanear todos los archivos independientemente de tipo/extensión (por defecto, solo se escanean tipos de archivo relevantes) |
-m, --max-file-size <BYTES> | Omitir archivos más grandes que este tamaño (por defecto: 64MB) |
--no-procs | Omitir escaneo de memoria de procesos por completo |
--no-fs | Omitir escaneo del sistema de archivos por completo |
--no-archive | Omitir escaneo dentro de archivos comprimidos (ZIP) |
| Tecla | Acción |
|---|
q | Salir |
p | Pausar/Reanudar |
s | Saltar elementos actuales |
t | Alternar superposición de hilos |
+ / - | Ajustar límite de CPU |
| Teclas de flecha | Desplazar logs |