O Trawler é um script PowerShell projetado para ajudar Respondentes de Incidentes a descobrir potenciais indicadores de comprometimento em hosts Windows, focado principalmente em mecanismos de persistência, incluindo Tarefas Agendadas, Serviços, Modificações no Registro, Itens de Inicialização, Modificações Binárias e mais.
Atualmente, o trawler pode detectar a maioria das técnicas de persistência especificamente mencionadas pela MITRE e Atomic Red Team, com mais detecções sendo adicionadas regularmente.
Principais Recursos
Varredura do sistema operacional Windows para uma variedade de técnicas de persistência (listadas abaixo)
Saída CSV com Técnica MITRE e Metadados de Início de Investigação
Listas de Permissão Integradas para configurações comuns do Windows abrangendo Windows 10/Server 2012|2016|2019|2022 para reduzir ruído
Capturar metadados de persistência de uma imagem empresarial 'dourada' (snapshot) para uso como lista de permissão dinâmica em tempo de execução
Analisar imagens de disco montadas via redirecionamento de unidade
Como usar?
Basta baixar e executar o trawler.ps1 a partir de um prompt PowerShell/cmd Administrativo - quaisquer detecções serão exibidas no console e também gravadas em um CSV ('detections.csv') no diretório de trabalho atual. O CSV gerado conterá Nome da Detecção, Fonte, Risco, Metadados e a Técnica MITRE relevante.
Ou use este one-liner a partir de um terminal PowerShell Administrativo:
Certas detecções possuem listas de permissão integradas para ajudar a remover ruído das configurações padrão do Windows (10/2016/2019/2022) - Tarefas Agendadas, Serviços, etc. esperados. Claro, é sempre possível que atacantes sequestrem diretamente esses itens e se masqueradem com grande detalhe como um processo padrão do SO - tenha cuidado ao usar múltiplas formas de análise e detecção ao lidar com adversários habilidosos.
Se você tiver exemplos ou ideias para detecções adicionais, sinta-se à vontade para enviar uma Issue ou PR com detalhes técnicos/referências relevantes - a base de código está um pouco bagunçada agora e será limpa com o tempo.
Além disso, se você identificar falsos positivos óbvios, por favor me avise abrindo uma issue ou PR no GitHub! Os culpados óbvios para isso serão COMs, Serviços ou Tarefas não padrão.
Parâmetros da CLI
root@kitploit:~
-scanoptions : Navegue pelas possíveis detecções usando Tab e selecione um subconjunto usando termos delimitados por vírgula (ex.: .\trawler.ps1 -scanoptions Services,Processes) ou pule para fazer todas as detecções
-quiet : Suprime a saída de Detecção no console
-snapshot : Caminho para uma saída JSON anterior do trawler para usar como lista de permissão.
-outpath : Define um caminho de arquivo personalizado para salvar a saída de detecção (padrão é "$PSScriptRoot\detections.csv")
-drivetarget : Define a variável para uma unidade alvo montada (ex.: .\trawler.ps1 -targetdrive "D:") - (padrão é o sistema local)
-daysago : Define quantos 'dias atrás' queremos considerar para detecções baseadas em tempo (padrão é 45)
-hashmode : Define qual algoritmo de hash queremos usar para as detecções suportadas - suporta sha1, md5 ou sha256 (padrão é sha1)
-evtx : Habilita a criação de uma Fonte de Log de Eventos e Gravação de Detecções no log de eventos do Aplicativo sob Source=trawler com EID=9001 (padrão desabilitado)
O que diferencia isso do PersistenceSniper?
PersistenceSniper é uma ferramenta incrível - já usei bastante no passado - mas há alguns pontos-chave que diferenciam essas utilidades
trawler é (atualmente) uma utilidade local - embora seja bastante simples envolvê-lo em um loop e usar sessões WinRM/PowerShell para executá-lo em hosts remotos
trawler implementa listas de permissão para muitas detecções 'ruidosas' para ajudar a remover detecções esperadas das configurações padrão do Windows (10/2016/2019/2022) e estas são constantemente atualizadas (PS também faz isso)
PersistenceSniper (na maior parte) não contém nenhum tipo de lista de permissão - portanto, mais ruído é gerado ao considerar itens como Serviços, Tarefas Agendadas, varredura geral de DLL COM, etc.
a saída do trawler é simplificada - Nome, Risco, Fonte, Técnica MITRE e Metadados são os únicos itens fornecidos para cada detecção para ajudar analistas a iniciar rapidamente seus esforços de caça à persistência - isso é uma faca de dois gumes.
Regex é usado em muitas verificações para ajudar a detectar palavras-chave ou padrões 'suspeitos' em várias áreas críticas, incluindo conteúdos de arquivos escaneados, valores de registro, etc. Isso fornece um pouco mais de flexibilidade, mas também uma taxa de falsos positivos potencialmente maior.
trawler suporta 'redirecionamento de unidade' para verificar máquinas paradas montadas em uma máquina de análise.
No geral, essas ferramentas são extremamente semelhantes, mas abordam o problema de ângulos ligeiramente diferentes - PersistenceSniper fornece todas as informações de volta ao analista para revisão, enquanto Trawler tenta limitar o que é retornado apenas a resultados que provavelmente são potenciais mecanismos de persistência do adversário. Como tal, existe a possibilidade de falsos negativos com trawler se um adversário imitar completamente um item da lista de permissão.
Como exemplo - PersistenceSniper retornará todos os Serviços Windows 'não seguros', enquanto trawler retornará apenas aqueles que correspondem a uma regra de detecção específica, etc.
Ajustando ao seu ambiente
Trawler suporta carregar uma lista de permissão a partir de um 'snapshot' - para fazer isso são necessários dois passos.
Execute '.\trawler.ps1 -snapshot' em uma "Golden Image" representando os servidores do seu ambiente - uma vez concluído, além do 'detections.csv' padrão, um arquivo chamado 'snapshots.csv' será gerado
Este arquivo pode então ser usado como entrada para o trawler ao executar em outros hosts e os dados serão carregados dinamicamente como uma lista de permissão para cada detecção apropriada
É isso - todas as detecções relevantes usarão então o arquivo de snapshot como uma lista de permissão para reduzir ruído e identificar quaisquer mudanças potenciais na imagem base que possam ter ocorrido.
(A lista de permissão é implementada para a maioria das verificações, mas não todas - ainda está sendo implementada ativamente)
Redirecionamento de Unidade
Frequentemente durante uma investigação, analistas podem acabar montando uma nova unidade que representa um dispositivo Windows imageado - Trawler agora suporta parcialmente a varredura dessas unidades montadas através do uso do parâmetro '-drivetarget'.
Em tempo de execução, Trawler redirecionará variáveis temporárias de nível de script para uso na verificação de artefatos baseados em arquivo e também tentará carregar Hives de Registro relevantes (HKLM\SOFTWARE, HKLM\SYSTEM, NTUSER.DATs, USRCLASS.DATs) abaixo de HKLM/HKU e prefixados por 'ANALYSIS_'. Trawler também tentará descarregar esses hives temporariamente carregados ao finalizar o script.
Como exemplo, se você tiver uma imagem montada em um local como 'F:\Test' que contém o sistema de arquivos NTFS ('F:\Test\Windows', 'F:\Test\User', etc), então você pode invocar o trawler assim:
root@kitploit:~
.\trawler.ps1 -drivetarget "F:\Test"
Observe que, como o trawler tenta carregar os arquivos de hive de registro da unidade em questão, mapear um caminho UNC para um dispositivo remoto ativo NÃO funcionará, pois esses arquivos não estarão acessíveis devido a bloqueios do sistema. Estou trabalhando em uma abordagem que lidará com dispositivos remotos ativos, fique atento.
O que não é inspecionado durante o redirecionamento de unidade?
Processos em execução
Conexões de Rede
DLLs 'Fantasma'
Consumidores WMI (Em desenvolvimento)
Trabalhos BITS (Em desenvolvimento)
Análise de Certificados (Em desenvolvimento)
A maioria das outras verificações funcionará bem porque são baseadas inteiramente na leitura de hives de registro ou artefatos baseados em arquivo (ou podem ser convertidas para isso, como ler diretamente o XML da Tarefa em vez de usar cmdlets integrados.)
Quaisquer limitações nas verificações ao fazer redirecionamento de unidade serão discutidas mais detalhadamente no Wiki do GitHub.
Imagens de Exemplo
O que é inspecionado?
Tarefas Agendadas
Usuários
Serviços
Processos em Execução
Conexões de Rede
Consumidores de Eventos WMI (Linha de Comando/Script)
Descoberta de Itens de Inicialização
Descoberta de Trabalhos BITS
Modificações em Recursos de Acessibilidade do Windows
Existência de Perfil PowerShell
Documentos Confiáveis do Office
Add-ins do Office de Locais Confiáveis
Monitoramento de SilentProcessExit
Sequestro de DLL Auxiliar do Winlogon
Sequestro de Opções de Execução de Arquivo de Imagem
Sombra RDP
Configuração de UAC para Sessões Remotas
DLLs de Monitor de Impressão
Sequestro de Pacotes de Segurança e Autenticação LSA
DLLs de Provedor de Tempo
DLLs de Processador de Impressão
Configuração Ativa de Inicialização/Logon
Sequestro de Script de Logon de Inicialização do Usuário
Sequestro de Executável de Protetor de Tela
DLLs Netsh
DLLs AppCert
DLLs AppInit
Shimming de Aplicativos
Sequestro de Objeto COM
Sequestro de Notificação LSA
Uso de 'Office test'
Uso de GlobalDotName do Office
Sequestro de DLL de Serviços de Terminal
Sequestro de DLL Autodial
Abuso do Processador AutoRun de Comando
Sequestro de OTM do Outlook
Sequestro de Provedor de Confiança
Varredura de Destino LNK (Termos Suspeitos, Múltiplas Extensões, Múltiplos EXEs)
Nomes de DLLs Windows 'Fantasma' carregadas em processos em execução (ex.: WptsExtensions.dll não assinada)
Varredura de Diretórios Críticos do SO por EXEs/DLLs não assinados
Sequestro de Caminho de Serviço sem Aspas
Sequestro Binário de PATH
Sequestros Comuns de Associação de Arquivos e Palavras-chave Suspeitas
Caça a Certificados Suspeitos
Descoberta/Varredura de Scripts GPO
Substituições de DLLs de Plataforma de Desenvolvimento NLP
Substituições de Depuração AeDebug/.NET/Script/Process/WER
Explorer 'Load'
Sequestros de startOnUserLogin do Windows Terminal
Incompatibilidades de Caminho de Aplicativo
Incompatibilidades de DLL/ImagePath de Serviço
DLLs de Extensão GPO
Potenciais Sequestros COM
Extensões LSA Não Padrão
Presença de DNSServerLevelPluginDll
Sequestro da Utilidade Explorer\MyComputer
Verificação de InitialProgram dos Serviços de Terminal
Programas de Inicialização RDP
Comandos de Telemetria da Microsoft
Provedores AMSI Não Padrão
DLL de Erro LUI de Configurações da Internet
DLL PeerDist\Extension
Verificações ErrorHandler.CMD
DLL de Diagnóstico Integrada
DLLs Auxiliares de MiniDump
DLLs de Depurador Gerenciado Conhecido
DLLs da Camada de Compatibilidade WOW64
Sequestro de MSC do Visualizador de Eventos
Varredura de Strings de Desinstalação
DLLs PolicyManager
DLL da Carteira SEMgr
Manipuladores de Exceção em Tempo de Execução do WER
Ajuda HTML (.CHM)
Artefatos de Ferramentas de Acesso Remoto (Arquivos, Diretórios, Chaves de Registro)
Verificações de DLL ContextMenuHandler
Presença do Office AI.exe
Plugins do Notepad++
Sequestros de Registro MSDTC
Sequestro de DLL do Narrador (MSTTSLocEnUS.DLL)
Verificações de Localização Suspeita de Arquivos
Verificação de Programa de Verificação de Inicialização
Verificações de DiskCleanupHandler
Verificações de Isolamento de Baixa Integridade
Software Instalado com Nome Suspeito
Status do Modo de Restauração de Serviços de Diretório
Modificações no Descritor de Segurança do Gerenciador de Controle de Serviços
VMs do Subsistema Windows para Linux
Análise de Extensão de Navegador
TODO
Adicionar Orientação de Análise/Remediação a cada detecção no Wiki do GitHub (Em Andamento)
Por favor, esteja ciente que algumas destas são (claro) mais detectadas do que outras - por exemplo, não estamos detectando todas as modificações possíveis no registro, mas sim inspecionando certas chaves para mudanças óbvias e usando a técnica MITRE genérica "Modify Registry" onde nenhuma outra técnica é aplicável. Para outros itens, como o sequestro de COM, estamos inspecionando todas as entradas na seção relevante do registro, verificando padrões 'conhecidos como bons' e promovendo valores desconhecidos ou incompatíveis, resultando em uma superfície de detecção muito mais completa para aquela técnica específica.
T1037: Scripts de Inicialização de Inicialização ou Logon
T1037.001: Scripts de Inicialização de Inicialização ou Logon: Script de Logon (Windows)
T1037.005: Scripts de Inicialização de Inicialização ou Logon: Itens de Inicialização
T1055.001: Injeção de Processo: Injeção de Biblioteca de Ligação Dinâmica
T1059: Interpretador de Comandos e Scripts
T1071: Protocolo de Camada de Aplicação
T1098: Manipulação de Conta
T1112: Modificar Registro
T1053: Tarefa/Trabalho Agendado
T1136: Criar Conta
T1137.001: Macros de Modelo de Aplicativo Office
T1137.002: Inicialização de Aplicativo Office: Office Test
T1137.006: Inicialização de Aplicativo Office: Add-ins
T1176: Extensões de Navegador
T1197: Trabalhos BITS
T1505.005: Componente de Software de Servidor: DLL de Serviços de Terminal
T1543.003: Criar ou Modificar Processo do Sistema: Serviço Windows
T1546: Execução Acionada por Evento
T1546.001: Execução Acionada por Evento: Alterar Associação de Arquivo Padrão
T1546.002: Execução Acionada por Evento: Protetor de Tela
T1546.003: Execução Acionada por Evento: Assinatura de Evento do Windows Management Instrumentation
T1546.007: Execução Acionada por Evento: DLL Auxiliar Netsh
T1546.008: Execução Acionada por Evento: Recursos de Acessibilidade
T1546.009: Execução Acionada por Evento: DLLs AppCert
T1546.010: Execução Acionada por Evento: DLLs AppInit
T1546.011: Execução Acionada por Evento: Shimming de Aplicativos
T1546.012: Execução Acionada por Evento: Injeção de Opções de Execução de Arquivo de Imagem
T1546.013: Execução Acionada por Evento: Perfil PowerShell
T1546.015: Execução Acionada por Evento: Sequestro de Modelo de Objeto Componente
T1547.002: Execução de Inicialização Automática de Inicialização ou Logon: Pacotes de Autenticação
T1547.003: Execução de Inicialização Automática de Inicialização ou Logon: Provedores de Tempo
T1547.004: Execução de Inicialização Automática de Inicialização ou Logon: DLL Auxiliar Winlogon
T1547.005: Execução de Inicialização Automática de Inicialização ou Logon: Provedor de Suporte de Segurança
T1547.009: Execução de Inicialização Automática de Inicialização ou Logon: Modificação de Atalho
T1547.012: Execução de Inicialização Automática de Inicialização ou Logon: Processadores de Impressão
T1547.014: Execução de Inicialização Automática de Inicialização ou Logon: Configuração Ativa
T1553: Subverter Controles de Confiança
T1553.004: Subverter Controles de Confiança: Instalar Certificado Raiz
T1556.002: Modificar Processo de Autenticação: DLL de Filtro de Senha