
🐍 Scanner de alto desempenho e multithread para YARA e IOC

Uma reescrita do Loki em Rust. Scanner YARA e IOC de alto desempenho e multi-thread num único binário.
Estado: Beta. Funciona, mas ainda em desenvolvimento ativo.
A digitalização da memória de processos no macOS é de melhor esforço e geralmente requer permissões de depuração ou privilégios elevados. Sem esses, o Loki-RS ainda irá digitalizar ficheiros mas não conseguirá ler a maior parte da memória de processos. Use --no-procs para saltar a digitalização de processos se necessário.
No Linux, o Loki-RS ignora mapeamentos de processos suportados por dispositivos e especiais do kernel antes de ler /proc/<pid>/mem. Isto evita instabilidade conhecida com algumas VMAs geridas por drivers, preservando a digitalização normal de memória anónima, heap/stack e ficheiros regulares. Se ainda encontrar problemas específicos do ambiente, use --no-procs para desativar a digitalização de processos.
Descarregue o binário pré-compilado para a sua plataforma a partir da Página de Versões.
# Extrair
tar -xzvf loki-linux-*.tar.gz
cd loki-linux-*
# Atualizar assinaturas (recomendado)
./loki-util update
# Executar
sudo ./loki --help
As assinaturas vêm com a versão mas ficam desatualizadas rapidamente. Execute loki-util update para obter as regras mais recentes do YARA-Forge Core.
O Loki-RS usa YARA Forge como sua fonte de assinaturas padrão. O Loki-RS é distribuído e atualizado com o conjunto de regras Core (alta precisão, baixos falsos positivos, otimizado para desempenho). Se precisar de uma cobertura mais ampla, pode trocar para os conjuntos Extended ou Full do YARA Forge.
Os ficheiros IOC em signatures/iocs/ continuam suportados como conteúdo local/personalizado opcional.
# Digitalização básica (TUI ativada por defeito)
sudo ./loki
# Digitalizar pasta específica
sudo ./loki --folder /tmp
# Desativar TUI, usar saída padrão da linha de comandos
sudo ./loki --no-tui
# Digitalizar uma imagem montada (saltar digitalização de processos, usar todos os núcleos)
sudo ./loki --no-procs --folder ~/image1 --threads 0
# Digitalização lenta e cautelosa (limite de CPU mais baixo, única thread)
sudo ./loki --cpu-limit 60 --threads 1
# Digitalizar e enviar registos para syslog remoto
sudo ./loki --remote syslog-host.internal:514 --remote-proto udp


| Opção | Predefinição | Descrição |
|---|---|---|
-f, --folder <PATH> | / | Pasta a digitalizar. Cite caminhos com espaços, ex. -f "J:\SteamLibrary\steamapps\common\SpaceCraft beta" |
O Loki-RS fornece vários mecanismos para excluir ficheiros e pastas das digitalizações.
Por defeito, o Loki-RS exclui automaticamente:
Diretórios de sistema (Linux/macOS):
/proc, /dev, /sys/kernel/debug, /sys/kernel/slab, /sys/kernel/tracing, /sys/devices/run, /var/runDiretórios de armazenamento na nuvem (a menos que --scan-all-drives seja usado):
Unidades de rede e montadas (a menos que --scan-all-drives seja usado):
/media, /volumesDiretório do programa:
Pode excluir ficheiros conhecidos como bons pelo seu hash. Isto é útil para colocar na lista de permissões ficheiros legítimos que geram falsos positivos.
Configuração:
Crie um ficheiro em signatures/iocs/ com tanto hash como falsepositive no nome
Exemplo: hash-falsepositive-custom.txt
Adicione hashes (MD5, SHA1 ou SHA256) com descrições opcionais:
# Formato: HASH;descrição
d41d8cd98f00b204e9800998ecf8427e;Ficheiro vazio - conhecido como bom
a7f5f35426b927411fc9231b56382173;Utilitário de sistema legítimo
Ficheiros que correspondam a estes hashes serão ignorados silenciosamente durante a digitalização.
Ao adicionar IOCs de nome de ficheiro a signatures/iocs/filename-iocs.txt, pode especificar uma regex de exclusão de falso positivo na terceira coluna:
# Formato: REGEX;SCORE;REGEX_FALSO_POSITIVO
#
# Isto corresponde a todos os ficheiros .ps1, mas exclui aqueles em diretórios SysInternals
(?i)\\procdump(64)?\.(exe|zip);50;(?i)(SysInternals\\)
Se um ficheiro corresponder tanto ao padrão principal como à regex de falso positivo, não será reportado.
O ficheiro config/excludes.cfg suporta exclusões de caminho baseadas em regex:
# Excluir diretórios de sistema
^/proc/.*
^/dev/.*
^/sys/.*
# Excluir ficheiros temporários
.*\.tmp$
.*\.temp$
.*\.swp$
# Excluir diretórios específicos
.*node_modules.*
.*/\.git/.*
Nota: Os padrões de exclusão de caminho são correspondidos ao caminho completo do ficheiro usando expressões regulares. Linhas que começam com # são comentários.
# Digitalizar mas incluir todas as unidades (rede, nuvem, montadas)
sudo ./loki --scan-all-drives
# Digitalizar todos os tipos de ficheiro, não apenas executáveis e scripts
sudo ./loki --scan-all-files
# Digitalizar apenas ficheiros pequenos (abaixo de 10MB)
sudo ./loki --max-file-size 10000000
# Saltar digitalização de processos (útil para imagens montadas)
sudo ./loki --no-procs --folder /mnt/image
A interface de terminal está ativada por defeito e fornece monitorização em tempo real durante as digitalizações.
sudo ./loki --folder /caminho/para/digitalizar


O Loki-RS gera automaticamente um relatório HTML estilizado após cada digitalização. O relatório é criado juntamente com o ficheiro de registo JSONL e fornece um resumo visual de todas as descobertas.
O relatório inclui:

O relatório HTML partilha o mesmo nome base que a saída JSONL (ex: loki_hostname_2025-01-08.html). Para desativar a geração do relatório, use --no-html.
Pode gerar relatórios HTML a partir de ficheiros JSONL existentes usando loki-util:
# Gerar relatório HTML a partir de um único ficheiro JSONL
./loki-util html --input scan_results.jsonl --output report.html
# Gerar relatório HTML combinado a partir de múltiplos ficheiros JSONL
./loki-util html --input "*.jsonl" --combine --output combined_report.html
# Usar padrões glob para corresponder a múltiplos ficheiros
./loki-util html --input "/caminho/para/digitalizacoes/*.jsonl" --combine --output combined.html
Opções:
--input <ficheiro|glob> - Ficheiro JSONL de entrada ou padrão glob (obrigatório)--output <ficheiro.html> - Ficheiro HTML de saída (opcional, predefinição é o nome do ficheiro de entrada com extensão .html)--combine - Combinar múltiplos ficheiros JSONL num único relatório (agrupa descobertas por nome de anfitrião)--title <str> - Substituir título do relatório--host <str> - Substituir nome de anfitrião no relatórioO modo de relatório combinado é útil para agregar resultados de digitalização de múltiplos anfitriões ou períodos de tempo numa única visualização, com descobertas agrupadas por nome de anfitrião de origem.
git clone https://github.com/Neo23x0/Loki-RS.git
cd Loki-RS
cargo build --release
./target/release/loki-util update
sudo ./target/release/loki
Requer o toolchain Rust. Consulte docs/BUILD.md para compilação cruzada.
O Loki RS é um projeto paralelo. É um scanner rápido e de binário único, construído para triagem prática e experimentação, e pode mudar rapidamente à medida que ideias são testadas e removidas.
O suporte é baseado na comunidade e de melhor esforço - sem SLA, sem tempos de resposta garantidos e sem promessa de que cada caso extremo seja tratado perfeitamente. Se o executar em produção, faça-o com isso em mente.
Para ambientes corporativos e trabalho de resposta a incidentes com suporte previsível e um conjunto de funcionalidades mais amplo e bem testado, a Nextron Systems mantém o THOR (e o THOR Lite). O THOR é o scanner profissional com cobertura extensa de artefactos, mais módulos e formatos e suporte do fornecedor. O THOR Lite é a versão gratuita de entrada com um âmbito reduzido.
GNU General Public License v3.0. Consulte LICENSE.
Copyright (c) 2025 Florian Roth
| Opção | Predefinição | Descrição |
|---|
--no-procs | false | Saltar digitalização de memória de processos |
--no-fs | false | Saltar digitalização do sistema de ficheiros |
--no-archive | false | Saltar digitalização dentro de arquivos (ZIP) |
--scan-all-drives | false | Digitalizar todas as unidades incluindo montadas/rede/nuvem |
--scan-all-files | false | Digitalizar todos os ficheiros independentemente da extensão/tipo |
| Opção | Predefinição | Descrição |
|---|
-l, --log <FILE> | auto | Ficheiro de registo de texto simples |
--no-log | false | Desativar saída de registo em texto simples |
-j, --jsonl <FILE> | auto | Ficheiro de saída JSONL |
--no-jsonl | false | Desativar saída JSONL |
--no-html | false | Desativar geração de relatório HTML |
--no-tui | false | Desativar TUI, usar saída padrão da linha de comandos |
-r, --remote <HOST:PORT> | nenhum | Destino syslog remoto |
-p, --remote-proto <PROTO> | udp | Protocolo remoto (udp/tcp) |
--remote-format <FMT> | syslog | Formato remoto (syslog/json) |
| Opção | Predefinição | Descrição |
|---|
--alert-level <SCORE> | 80 | Limiar de pontuação para ALERTA |
--warning-level <SCORE> | 60 | Limiar de pontuação para AVISO |
--notice-level <SCORE> | 40 | Limiar de pontuação para NOTA |
--max-reasons <NUM> | 2 | Número máximo de razões de correspondência a exibir por descoberta |
-m, --max-file-size <BYTES> | 64000000 | Tamanho máximo de ficheiro a digitalizar (64MB) |
--yara-timeout <SEGUNDOS> | 10 | Tempo máximo de digitalização YARA para cada ficheiro ou buffer de memória de processo (mínimo: 1 segundo) |
-c, --cpu-limit <PERCENT> | 100 | Limite de utilização da CPU (1-100) |
--threads <NUM> | -2 | Número de threads (0=todas, -1=todas-1, -2=todas-2) |
| Opção | Predefinição | Descrição |
|---|
--version | - | Mostrar versão e sair |
-d, --debug | false | Mostrar saída de depuração |
--trace | false | Mostrar saída de rastreio detalhada |
--show-access-errors | false | Mostrar erros de acesso a ficheiros/processos |
| Opção | Descrição |
|---|
--scan-all-drives | Incluir unidades montadas, unidades de rede e armazenamento na nuvem |
--scan-all-files | Digitalizar todos os ficheiros independentemente do tipo/extensão (por defeito, apenas tipos de ficheiro relevantes são digitalizados) |
-m, --max-file-size <BYTES> | Ignorar ficheiros maiores que este tamanho (predefinição: 64MB) |
--no-procs | Ignorar completamente a digitalização de memória de processos |
--no-fs | Ignorar completamente a digitalização do sistema de ficheiros |
--no-archive | Ignorar digitalização dentro de ficheiros de arquivo (ZIP) |
| Tecla | Ação |
|---|
q | Sair |
p | Pausar/Retomar |
s | Saltar itens atuais |
t | Alternar sobreposição de threads |
+ / - | Ajustar limite de CPU |
| Setas | Deslocar registos |