Dragando Windows por Persistência
O que é?
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
- Documentação de Análise e Orientação de Remediação (https://github.com/joeavanzato/Trawler/wiki/Analysis-and-Remediation-Guidance)
- Atribuição Dinâmica de Risco para cada detecçã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:
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/joeavanzato/Trawler/main/trawler.ps1'))
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
-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
- '.\trawler.ps1' -loadsnapshot "path\to\snapshot.csv"
É 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:
.\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
TODO
Técnicas MITRE Avaliadas
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
Referências
Esta ferramenta não existiria sem a incrível comunidade de segurança da informação - as referências mais notáveis que usei são fornecidas abaixo.
Mais Referências