Táticas da equipe vermelha: técnicas avançadas de monitoramento de processos em operações ofensivas

Olá de novo. Na véspera do Pentest. Prática de teste de penetração ” traduziu outro material interessante para você.




Neste artigo, entenderemos os recursos dos conhecidos utilitários de monitoramento de processos e demonstraremos como usar a tecnologia subjacente a essas ferramentas nas operações ofensivas da Red Team.

Um bom entendimento técnico do sistema em que confiamos é um critério-chave para tomar decisões sobre qual será o próximo passo da operação. A coleta e análise de dados sobre processos em execução em sistemas comprometidos nos fornece uma riqueza de informações e nos ajuda a entender como a infraestrutura de TI da organização de destino funciona. Além disso, os dados do processo solicitados periodicamente nos ajudam a responder às mudanças ambientais e a receber sinais de gatilho quando uma investigação começa.

Para poder coletar dados detalhados sobre processos em terminais comprometidos, criamos um conjunto de ferramentas que reuniam o poder de utilitários de processos avançados e estruturas C2 (como o Cobalt Strike).

Ferramentas (e seu código fonte) podem ser encontradas aqui .

Utilitários de sistema interno do Windows


Para começar, descobriremos quais utilitários podem ser usados ​​para coletar informações sobre os processos do computador no Windows. Em seguida, aprendemos como esses utilitários coletam informações para que possam ser usadas posteriormente nos kits de ferramentas do Red Team.

O sistema operacional Windows está equipado com muitos utilitários prontos para administrar o sistema. Embora a maioria das ferramentas fornecidas seja adequada para fins básicos de administração do sistema, algumas delas não possuem as funções necessárias para solução de problemas e monitoramento avançados. Por exemplo, o gerenciador de tarefas do Windows fornece informações básicas sobre todos os processos em execução no sistema, mas e se precisarmos de informações mais detalhadas, como descritores de objetos, conexões de rede ou módulos carregados como parte de um processo específico?

Para coletar essas informações, existe uma ferramenta mais avançada. Por exemplo, utilitários de sistema do pacote Sysinternals. Como membro da equipe vermelha, com vasta experiência em administração de redes e sistemas, sempre fui um grande fã da Sysinternals.

Ao solucionar problemas de um sistema de servidor de execução lenta ou de um computador cliente infectado, geralmente comecei a solucionar problemas usando ferramentas como Process Explorer ou Procmon.
Do ponto de vista da ciência forense digital, essas ferramentas também parecem ser muito úteis para realizar análises dinâmicas básicas de amostras de malware e procurar artefatos em sistemas infectados. Então, por que essas ferramentas são tão populares entre os administradores de sistema e profissionais de segurança? Vamos descobrir isso, investigando algumas informações do processo que podemos obter usando a ferramenta Process Explorer.

Usando o Process Explorer


A primeira coisa que vemos ao iniciar o Process Explorer é uma lista / árvore de todos os processos em execução do sistema. Isso nos fornece informações sobre os nomes dos processos, seus identificadores, o contexto do usuário e o nível de integridade das informações do processo e da versão. Informações adicionais também podem ser refletidas ajustando as colunas de acordo.



Se usarmos o painel inferior, podemos visualizar todos os módulos carregados por um processo específico ou alternar para exibir descritores para familiarizar-nos com todos os objetos descritores nomeados que são usados ​​pelo processo:



A navegação nos módulos pode ser útil ao procurar bibliotecas maliciosas carregadas no processo ou, para o Red Team, é um produto de segurança ativo (por exemplo, EDR) que implementou um módulo de conexão API no modo de usuário.



A mudança para a exibição de descritores permite que você se familiarize com o tipo e o nome de todos os objetos nomeados usados ​​no processo. Isso pode ser útil para descobrir quais arquivos e chaves do registro estão abertos, quais pipes nomeados são usados ​​para comunicação entre processos.
Se você clicar duas vezes no nome do processo, uma janela com informações mais detalhadas será exibida. Vejamos algumas guias para aprender sobre as propriedades adicionais do objeto:



Guia Imagemexibe informações sobre o caminho binário, diretório de trabalho e opções de linha de comando. Além disso, exibe informações sobre o contexto do usuário, o processo pai, o tipo de imagem (x86 ou x64) e muito mais.



A guia Threads contém informações sobre a execução de threads no processo. Quando você seleciona um fluxo e clica nele, o botão de pilha reflete a pilha de chamadas para esse fluxo específico. Para visualizar os threads / chamadas iniciados no modo kernel, o Process Explorer usa o driver do kernel, instalado quando se trabalha no modo elevado.

Do ponto de vista do DFIR, as informações do encadeamento são úteis para detectar injeções na memória, por exemplo, quando há uma ameaça de vírus sem arquivos. Assim, os fluxos que não são apoiados por arquivos no disco podem sinalizar comportamento suspeito. Para obter mais informações sobre threads e memória, recomendo prestar atenção à ferramenta Process Hacker .



Outra guia interessante no Process Explorer é a guia TCP / IP. Nele, você verá todas as conexões de rede associadas a esse processo. Do ponto de vista do ataque, isso pode ser útil para entender quando uma conexão é feita a partir de um sistema comprometido. Uma sessão remota do PowerShell ou uma sessão RDP de entrada pode sinalizar que uma investigação já foi iniciada.

Usando os métodos discutidos para ataque


Agora que aprendemos algumas coisas interessantes sobre processos e sobre as informações que podemos coletar sobre eles usando o Process Explorer, você pode se perguntar como acessar essas informações em nossas estruturas C2 favoritas. Obviamente, poderíamos usar o PowerShell, pois isso nos daria a oportunidade de usar uma linguagem de script poderosa e a API do Windows. No entanto, hoje o PowerShell está sob a supervisão constante do serviço de segurança, por isso tentamos evitar esse método.

No Cobalt Strike, podemos usar o comando ps no contexto de beacons. Este comando exibe informações básicas sobre o processo com base em todos os processos em execução no sistema. Em combinação com um script @r3dQu1nn ProcessColor, é provável que este método seja o melhor para obter dados do processo.

A saída do comando ps é útil para classificar rapidamente os processos em execução, mas eles não contêm informações detalhadas que ajudarão você a entender melhor o sistema. Para coletar informações mais detalhadas, criamos nossos próprios utilitários para obter informações sobre processos. Com a ajuda deles, podemos coletar e enriquecer informações obtidas de sistemas comprometidos.

Ps Tools


Não é fácil replicar a funcionalidade e as informações fornecidas por uma ferramenta como o Process Explorer. Primeiro, precisamos descobrir como essas ferramentas funcionam sob o capô (e no modo de usuário); depois, precisamos entender como refletir melhor essas informações no console, e não na interface gráfica.

Após analisar o código-fonte, ficou claro que muitas ferramentas de baixo nível para fornecer informações do sistema se baseiam amplamente na API NtQuerySystemInformation nativa . Embora a API e suas estruturas associadas não estejam totalmente documentadas, essa API permite coletar muitas informações sobre o sistema Windows. Então, usando NtQuerySystemInformationcomo ponto de partida para coletar informações sobre os processos em execução no sistema, usaremos o PEB de processos individuais para coletar informações detalhadas sobre cada um deles. Usando a API NtQueryInformationProcess, podemos ler a estrutura PROCESS_BASIC_INFORMATIONusando o descritor de processo e localizá-la PebBaseAddress. Em seguida, usamos a NtReadVirtualMemoryAPI para ler a estrutura RTL_USER_PROCESS_PARAMETERS, o que nos permitirá descobrir os parâmetros ImagePathNamee o CommandLineprocesso.

Usando essas APIs como base do nosso código, escrevemos as seguintes ferramentas para obter informações sobre processos:

  • Psx : mostra uma lista detalhada de todos os processos em execução no sistema.
  • Psk : exibe informações do kernel, incluindo drivers carregados.
  • Psc: TCP-.
  • Psm: ( , ).
  • Psh: (, , ).
  • Psw: .

Todas essas ferramentas são escritas em C como DLLs reflexivas e podem ser incorporadas reflexivamente a um processo gerado usando uma estrutura C2 como o Cobalt Strike (ou qualquer outra estrutura que suporte injeções reflexivas de DLL). Para o Cobalt Strike, adicionamos um script agressor que pode ser usado para carregar ferramentas usando o gerenciador de scripts do Cobalt Strike.

Vejamos cada ferramenta específica lançada no Cobalt Strike para demonstrar a funcionalidade e mostrar quais informações podem ser coletadas usando-a:

Psx


Essa ferramenta mostra uma lista detalhada de todos os processos em execução no sistema. A saída pode ser comparada com as informações na tela principal do Process Explorer. Psx exibe o nome do processo, sua identificação, PID pai, horário de criação e informações relacionadas aos arquivos binários do processo (arquitetura, nome da empresa, versão etc.). Como você pode ver, ele também exibe algumas informações interessantes sobre o kernel ativo do sistema, por exemplo, o endereço base do kernel, que é útil ao operar o kernel (por exemplo, para calcular as compensações dos dispositivos ROP). Todas essas informações podem ser coletadas de um contexto normal do usuário (sem elevação de privilégios).



Se tivermos permissões suficientes para abrir o descritor de processo, você poderá ler informações adicionais, como o contexto do usuário e o nível de integridade de seu token. A enumeração de PEB e estruturas relacionadas permite obter informações sobre o caminho da imagem e os parâmetros da linha de comando:



Como você deve ter notado, lemos e exibimos informações de versão de imagens de processos binários, por exemplo, nome e descrição da empresa. Conhecendo o nome da empresa, você pode listar facilmente todos os produtos de segurança ativos no sistema. Usando esta ferramenta, comparamos os nomes das empresas de todos os processos ativos com uma lista de fornecedores conhecidos de produtos de segurança e exibimos os resultados:



Psk


Essa ferramenta reflete informações sobre o kernel em execução, incluindo todos os módulos de driver carregados. Como a ferramenta Psx, ela também fornece um resumo de todos os módulos do kernel carregados de produtos de segurança conhecidos.



Psc


Essa ferramenta usa os mesmos métodos para exibir informações sobre processos ativos que o Psx , exceto que exibe apenas processos com uma conexão de rede ativa (IPv4, IPv6 TCP, RDP, ICA):



Psm


Você pode usar esta ferramenta para obter informações detalhadas sobre um processo específico. Ele exibirá uma lista de todos os módulos (DLLs) usados ​​pelo processo e pela conexão de rede:



Psh


O mesmo que Psm , mas em vez de módulos carregados, ele mostra uma lista de descritores de processo:



Psw


A última, mas não menos importante, ferramenta de Psw . Essa ferramenta mostra uma lista de processos com identificadores de janela ativos, aqueles que são abertos na área de trabalho do usuário, incluindo títulos de janela. Isso é útil para determinar qual aplicativo gráfico faz a interface que o usuário abre sem ter que tirar capturas de tela da área de trabalho:



Casos de uso


Você pode se perguntar: "E como tudo isso nos ajuda em operações ofensivas?" Depois de obter acesso a um ativo comprometido, geralmente usamos essas informações para os seguintes fins:

  • Detecte ferramentas de segurança em um ativo comprometido. Não apenas pelas informações do processo, mas também pelos módulos carregados.
  • Detectando mecanismos de gancho personalizados.
  • Procure oportunidades de manobras (através de sessões de rede) e escalada de privilégios.

Após o primeiro compromisso, você pode solicitar periodicamente informações semelhantes sobre os processos e começar a criar acionadores. Por exemplo, inserimos automaticamente essas informações no RedELK . Em seguida, você pode criar alertas sobre alterações suspeitas nas informações do processo, como:

  • Inicie uma ferramenta de auditoria de segurança ou instale um novo produto de segurança de terminal.
  • Conexões de rede de entrada do departamento de segurança por meio de uma sessão RDP ou do PowerShell remoto.
  • Abrir um identificador por outro processo em um de nossos artefatos maliciosos (por exemplo, um arquivo usado para preservar a presença).

Conclusão


Neste artigo, mostramos como ferramentas como o Sysinternals Process Explorer podem ser usadas para obter informações detalhadas sobre os processos em execução no sistema e como essas informações podem ajudar administradores e profissionais de segurança a solucionar problemas e verificar o sistema quanto a problemas de segurança ou desempenho.

A mesma informação também é relevante e útil para o Red Team, que tem acesso a sistemas comprometidos durante a operação. Isso ajuda a entender melhor o sistema e a infraestrutura de TI de seu objetivo, e a pesquisa periódica de um sistema desse tipo permite que a Equipe Vermelha responda a possíveis alterações no ambiente (por exemplo, um gatilho de investigação).

Replicamos algumas das funcionalidades fornecidas por ferramentas como o Process Explorer, para que possamos usar as mesmas informações em operações ofensivas. Para isso, foram criadas várias ferramentas de monitoramento de processo que podem ser usadas como parte da estrutura C2, por exemplo, Cobalt Strike. Mostramos como usar essas ferramentas e quais informações você pode usar para coletá-las.

Essas ferramentas estão disponíveis na nossa página do GitHub e estão prontas para serem usadas como parte do Cobalt Strike.



Saiba mais sobre o curso.



All Articles