
Scanner baseado em IOC e YARA para detecção de indicadores de compromisso por meio de regex em nomes de arquivos, assinaturas YARA, correspondência de hashes e verificações de conexão reversa C2 em endpoints.
Escrevi um novo scanner YARA Open Source chamado LOKI RS (Rust). O LOKI (Python) está agora oficialmente obsoleto.
Este projeto está agora em modo de manutenção inativa. Isso significa que, embora aceite pull requests para correções de bugs e problemas simples, atualmente não tenho tempo para adicionar novas funcionalidades ou expandir as existentes. Durante anos, meu foco foi desenvolver um scanner mais avançado, o THOR, que oferece uma série de melhorias em relação a este projeto. Uma versão gratuita, THOR Lite, está disponível; é mais rápida, mais estável e rigorosamente testada em nossos ambientes de CI — simplesmente uma solução melhor. Você pode encontrar uma comparação dos scanners open-source, gratuitos e comerciais aqui.
Também comecei a trabalhar em uma versão baseada em Rust do LOKI chamada LOKI 2. No entanto, não sei ao certo quando ela atingirá paridade de funcionalidades com a versão atual do LOKI. Além disso, criei um fluxograma para ajudá-lo a decidir qual scanner melhor atende às suas necessidades.

Scanner para Indicadores Simples de Comprometimento
A detecção é baseada em quatro métodos de detecção:
1. IOC de Nome de Arquivo
Correspondência Regex no caminho/nome completo do arquivo
2. Verificação de Regra Yara
Correspondência de assinatura Yara nos dados do arquivo e memória do processo
3. Verificação de Hash
Compara hashes maliciosos conhecidos (MD5, SHA1, SHA256) com os arquivos escaneados
4. Verificação de Conexão de Retorno C2
Compara endpoints de conexão de processos com IOCs de C2 (novo desde a versão v.10)
Verificações Adicionais:
1. Verificação de sistema de arquivos Regin (via --reginfs)
2. Verificação de anomalia de processo (baseada em [Sysforensics](http://goo.gl/P99QZQ))
3. Varredura SWF descomprimida (nova desde a versão v0.8)
4. Verificação de despejo SAM
O binário para Windows é compilado com PyInstaller e deve funcionar como aplicação x86 tanto em sistemas x86 quanto x64.
Nenhum requisito se você usar o EXE compilado.
Se você quiser compilar você mesmo:
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 - Simple IOC Scanner
optional arguments:
-h, --help show this help message and exit
-p path Path to scan
-s kilobyte Maximum file size to check in KB (default 5000 KB)
-l log-file Log file
-r remote-loghost Remote syslog system
-t remote-syslog-port
Remote syslog port
-a alert-level Alert score
-w warning-level Warning score
-n notice-level Notice score
--allhds Scan all local hard drives (Windows only)
--alldrives Scan all drives (including network drives and
removable media)
--printall Print all files that are scanned
--allreasons Print all reasons that caused the score
--noprocscan Skip the process scan
--nofilescan Skip the file scan
--vulnchecks Run the vulnerability checks
--nolevcheck Skip the Levenshtein distance check
--scriptanalysis Statistical analysis for scripts to detect obfuscated
code (beta)
--rootkit Skip the rootkit check
--noindicator Do not show a progress indicator
--dontwait Do not wait on exit
--intense Intense scan mode (also scan unknown file types and
all extensions)
--csv Write CSV log format to STDOUT (machine processing)
--onlyrelevant Only print warnings or alerts
--nolog Don't write a local log file
--update Update the signatures from the "signature-base" sub
repository
--debug Debug output
--maxworkingset MAXWORKINGSET
Maximum working set size of processes to scan (in MB,
default 100 MB)
--syslogtcp Use TCP instead of UDP for syslog logging
--logfolder log-folder
Folder to use for logging when log file is not
specified
--nopesieve Do not perform pe-sieve scans
--pesieveshellc Perform pe-sieve shellcode scan
--nolisten Dot not show listening connections
--excludeprocess EXCLUDEPROCESS
Specify an executable name to exclude from scans, can
be used multiple times
--force Force the scan on a certain folder (even if excluded
with hard exclude in LOKI's code
Desde a versão 0.15, as assinaturas Yara residem no sub-repositório signature-base. Você não obterá o sub-repositório baixando o LOKI como arquivo ZIP. Ele será incluído quando você clonar o repositório.
Os arquivos IOC para hashes e nomes de arquivos são armazenados na pasta './signature-base/iocs'. Todos os arquivos '.yar' colocados na pasta './signature-base/yara' serão inicializados juntamente com o conjunto de regras já incluído. Use o valor 'score' para definir o nível da mensagem em caso de correspondência de assinatura.
Você pode adicionar IOCs de hash, c2 e nome de arquivo adicionando arquivos à subpasta './signature-base/iocs'. Todos os IOCs de hash e IOCs de nome de arquivo devem estar no formato usado pelo LOKI (veja os arquivos padrão). Os arquivos devem conter as strings "hash", "filename" ou "c2" em seu nome para serem puxados durante a inicialização.
Para IOCs de Hash (divididos por nova linha; o tipo de hash é detectado automaticamente)
Hash;Descrição [Referência]
Para IOCs de Nome de Arquivo (divididos por nova linha)
# (opcional) Descrição [Referência]
Nome do arquivo como Regex[;Score como inteiro[;Falso-positivo como Regex]]
Desde a versão v0.16.2, o LOKI suporta a definição de exclusões definidas pelo usuário via "excludes.cfg" na nova pasta "./config". Cada linha representa uma expressão regular aplicada ao caminho completo do arquivo durante a varredura de diretório. Desta forma, você pode excluir certos diretórios independentemente do nome da unidade, extensões de arquivo em determinadas pastas e todos os arquivos e diretórios que pertencem a um produto sensível à varredura de antivírus.
O '''exclude.cfg''' se parece com isto:
# Diretórios excluídos
#
# - adicione diretórios que você deseja excluir da varredura
# - escape duplo de barras invertidas
# - valores não diferenciam maiúsculas de minúsculas
# - lembre-se de usar barras invertidas no Windows e barras normais no Linux / Unix / OSX
# - cada linha contém uma regex que corresponde em algum lugar do caminho completo (sem distinção entre maiúsculas e minúsculas)
# ex.:
# Regex: \\System32\\
# Corresponde a C:\Windows\System32\cmd.exe
#
# Regex: /var/log/[^/]+\.log
# Corresponde a: /var/log/test.log
# Não corresponde a: /var/log/test.gz
#
# Exemplos úteis
\\Ntfrs\\
\\Ntds\\
\\EDB[^\.]+\.log
Sysvol\\Staging\\Nntfrs_cmp
\\System Volume Information\\DFSR
Varredura Loki

Correspondências Regin

Falsos Positivos Regin

IOCs baseados em Hash

IOCs baseados em Nome de Arquivo

Arquivo de log gerado

Scanner LOKI na página inicial da nossa empresa https://www.nextron-systems.com/loki/
Twitter @cyb3rOps @thor_scanner
Se você está interessado em uma solução corporativa para varredura APT, confira o irmão mais velho do Loki, THOR.
Baixe o PyInstaller, vá para o diretório do programa pyinstaller e execute:
python ./pyinstaller.py -F C:\path\to\loki.py
Isso criará um loki.exe na subpasta ./loki/dist.
Para incluir o msvcr100.dll e melhorar a compatibilidade com o sistema operacional alvo, altere a linha no arquivo ./loki/loki.spec que contém a.binaries, para o seguinte:
a.binaries + [('msvcr100.dll', 'C:\Windows\System32\msvcr100.dll', 'BINARY')],
venv e execute python -m venv caminho/para/venv onde caminho/para/venv é o caminho para o seu ambiente virtual. Teste seu ambiente virtual executando caminho/para/venv/bin/python --version.
Atualize os módulos do seu ambiente virtual para pip, setuptools e wheel executando caminho/para/venv/bin/python -m pip install --upgrade pip setuptools wheel.caminho/para/venv/bin/python -m pip install colorama yara-python psutil rfc5424-logging-handler netaddrcaminho/para/venv/bin/python caminho/para/loki/loki-upgrader.py onde caminho/para/loki é o caminho do repositório Loki.Baixe as fontes Yara aqui
O scanner compilado pode ser detectado por mecanismos antivírus. Isso é causado pelo fato de que o scanner é um script Python compilado que implementa alguns recursos de varredura de sistema de arquivos e processos que também são usados em código malicioso compilado.
Se você não confia no executável compilado, compile-o você mesmo.
Loki - Scanner Simples de IOC Copyright (c) 2015 Florian Roth
Este programa é software livre: você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU, conforme publicada pela Free Software Foundation, versão 3 da Licença, ou (a seu critério) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a Licença Pública Geral GNU para mais detalhes.
Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Caso contrário, veja http://www.gnu.org/licenses/.
sudo caminho/para/venv/bin/python loki.py