Execução de Código Oculto
Hunt & Hackett apresenta um conjunto de ferramentas e artigos técnicos que descrevem técnicas de ataque baseadas na ocultação da execução de código no Windows. Aqui você encontrará explicações sobre como essas técnicas funcionam, receberá conselhos sobre detecção e obterá códigos-fonte de exemplo para testar sua cobertura de detecção.
Conteúdo
Este repositório cobre duas classes de técnicas de ataque que utilizam extensivamente mecanismos internos do Windows, além de fornecer sugestões e ferramentas para detectá-las:
- Manipulação de Processos - um conjunto de técnicas que ocultam o código na escala de um processo inteiro.
- Injeção de Código - uma coleção de truques que permitem executar código como parte de outros processos sem interferir em sua funcionalidade.
- Detecção - uma compilação de recomendações para se defender contra várias técnicas de ocultação de execução de código.
Os valores fundamentais do projeto:
- A abordagem sistemática. Este repositório inclui mais do que apenas uma coleção de ferramentas ou links para recursos externos. Cada assunto recebe uma explicação detalhada dos conceitos subjacentes; cada caso específico é classificado em categorias genéricas.
- Ferramentas de prova de conceito. Os artigos são acompanhados por projetos de exemplo em C que demonstram o uso dos recursos descritos na prática.
- Do iniciante ao profissional. Você não precisa ser um especialista em cibersegurança para entender os conceitos que descrevemos. No entanto, até mesmo profissionais da área correspondente devem achar o conteúdo valioso e educativo devido à atenção aos detalhes e às armadilhas.
Implementação
Uma característica distintiva final deste projeto é o uso extensivo de Native API em todos os exemplos. Aqui está a motivação para essa escolha:
- Funcionalidade. Algumas operações necessárias para as técnicas mais avançadas (como a Manipulação de Processos) não são expostas por outras APIs.
- Controle. Sendo o nível mais baixo de interação com o sistema operacional, fornece o maior controle sobre seu comportamento. A Win32 API é implementada sobre a Native API, portanto, tudo que é possível alcançar com a primeira também é possível com a última.
- Disponibilidade. Sendo exposta pela ntdll.dll, a Native API está disponível em todos os processos, incluindo os do sistema.
- Consistência. As interfaces expostas por esta API são notavelmente consistentes. Após aprender as escolhas fundamentais de design, torna-se possível prever corretamente a maioria dos protótipos de funções apenas pelo nome da API.
- Resistência a hooking. É substancialmente mais fácil remover ou contornar hooks em modo de usuário ao usar a Native API, cegando parcialmente os softwares de segurança. Não há bibliotecas de nível inferior que possam ser corrigidas, então remover os hooks torna-se tão simples quanto carregar uma segunda instância da ntdll.dll e redirecionar as chamadas para lá.
Observações de Compilação
O código de exemplo usa os cabeçalhos da Native API fornecidos pelo projeto PHNT. Certifique-se de clonar o repositório usando o comando git clone --recurse-submodules para buscar essa dependência. Alternativamente, você pode usar git submodule update --init após clonar o repositório.
Para compilar os projetos incluídos no repositório, você precisará de uma versão recente do Windows SDK. Se você usa o Visual Studio, consulte a instalação integrada do SDK. Alternativamente, você também pode usar o ambiente de compilação independente do EWDK. Para compilar todas as ferramentas de uma vez, use MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64.