Guia de análise de ameaças Sysmon, parte 2. Usando dados de eventos Sysmon para identificar ameaças





Este artigo é o primeiro de uma série sobre análise de ameaças Sysmon. Todas as outras partes da série:

Parte 1. Apresentando a análise de log do Sysmon

Parte 2. Usando dados de eventos do Sysmon para detectar ameaças (estamos aqui)

Parte 3. Análise aprofundada das ameaças do Sysmon usando gráficos



Nesta seção, vamos aprofundar e começar a usar informações detalhadas fornecido por Sysmon. Aqui estão três pontos principais nos quais trabalharemos:



  1. Usando o PowerShell para acessar diretamente informações granulares sobre processos;
  2. Construir e visualizar uma hierarquia de processos é o primeiro passo importante para encontrar ameaças;
  3. Use os metadados Sysmon para gerar métricas importantes e úteis em investigações avançadas de ameaças, como calcular a frequência com que processos específicos são iniciados.


Usando Get-Sysmonlogs



Vamos agora dar uma olhada no meu maravilhoso comando que converte eventos Sysmon em objetos do PowerShell. Estou um pouco orgulhoso por não precisar escrever manualmente linhas de código separadas para cada um dos campos. E aqui está, de fato, a grande divulgação do código:



$events = Get-WinEvent  -LogName "Microsoft-Windows-Sysmon/Operational" | where { $_.id -eq 1 }
 
foreach ($event in $events)  {
    $ev = $event.Message -split "`r`n"
    $jsons="{ "
    foreach ($line in $ev) {
        $line=$line -replace "\\","\\" `
               -replace "\{"," " `
               -replace "\}"," " `
               -replace '"','\"' `
               -replace "`n"," " 
        $line=$line -replace '(\s*[\w\s]+):\s*(.*)', '"$1":"$2",'
        $jsons = $jsons + $line } 

        $jsons =$jsons + '"blah" : "blah" }' 
        ConvertFrom-Json -InputObject $jsons 
    }
}


Todo o código está agora disponível no GitHub e você pode baixá-lo e importá-lo como um módulo Sysmon para seu próprio projeto. A única instabilidade está relacionada à remoção de alguns caracteres desagradáveis ​​- colchetes, barras invertidas, caracteres de fim de linha, aspas - para tornar a saída mais próxima do JSON.

Portanto, o sinal clássico de um invasor que atravessa o sistema é o uso do comando "whoami", e geralmente segue o nome do "host". Um hacker (ou talvez um insider) que se apodera da conta de alguém quer garantir que a impersonalização funcione; portanto, ele geralmente digita os comandos acima assim que está no servidor da vítima. De resto, "whoami" e "hostname" não são as palavras que digitariam no console de seu próprio sistema, mesmo que usem a linha de comando.



Com o meu comando puro que dá acesso a todas as entradas de log do Sysmon, podemos inventar facilmente uma cadeia de filtragem de nomes de processos (como fizemos na primeira parte ). Ao mesmo tempo, com o Sysmon, podemos abordar o problema ainda mais detalhadamente, olhando paraa linha de comando do processo pai .



Normalmente, quando um hacker penetra na rede e obtém acesso à linha de comando, é um cmd desatualizado - a propósito, é exatamente isso que acontece no caso de um hack com psexec ou smbexec . Usando a saída de get-symonlogs, é possível capturar os processos whoami gerados por esses shells herdados, e isso seria uma boa prova de uma ameaça.



Atenção: Whoami foi lançado através do shell cmd desatualizado



Atenção: O Whoami foi iniciado por meio do shell cmd desatualizado.De





um ponto de vista prático, a pesquisa nos logs "brutos" do log de eventos do Windows e nos processos correspondentes é simplesmente impossível. Como acabamos de ver, as gravações do Sysmon abrem muitas possibilidades para a análise de ameaças. Então, vamos continuar nossa exploração mapeando os dados do Sysmom em estruturas mais complexas.



Noções básicas de estruturas de dados: listas e gráficos



Os logs do Sysmon não apenas nos fornecem a linha de comando do processo pai, mas também o ID do processo!



Eu acho que você já adivinhou o que isso significa. Mas ainda assim: agora podemos conectar processos juntos em uma hierarquia e, não tenho medo de dizer, redes. Lembrando os conceitos básicos de ciência da computação, você pode encontrar estruturas de dados naturais para obter essas listas e gráficos vinculados a informações são os primeiros a vir à mente.



No começo, pensei que teria que tirar o pó da minha cópia de As estruturas de dados para poetas e chefes de cozinha, mas depois a Internet me ajudou. Eu me deparei com a maravilhosa coleção de algoritmos básicos de Doug Finke no Gihub, escrita no PowerShell. Obrigado Doug!

Depois de passar por alguma curva de aprendizado, pude usar seus algoritmos para estruturar meus eventos Sysmon. Criei as estruturas de dados como uma lista e gráfico e, em seguida, usando a API, escrevi uma função do PowerShell para encontrar um comando e exibir a hierarquia do processo. Legal.



Chamei-o de show-ameaças-caminho . Ele procura em profundidade a hierarquia do processo e exibe os nomes dos aplicativos e comandos associados para o aplicativo raiz especificado como um parâmetro de entrada. Para o meu primeiro teste, procurei "whoami.exe". E é isso que eu vi:



Hierarquia de processos: O processo 2452 parece suspeito!



Hierarquia de processos: O processo 2452 parece suspeito!





Um bônus adicional para aqueles que notaram na saída acima que o whoami associado ao processo 2452 foi chamado através do shell cmd desatualizado, que por sua vez foi iniciado por um arquivo exe com um nome estranho na pasta Windows.



Hummm. Se você está familiarizado com a mecânica das chamadas remotas psexec descritas aqui , então já deve estar tocando os sinos. Mas vou lhe contar um pequeno segredo: desempenhando o papel de hacker, eu anteriormente lancei esse whoami de um servidor Linux remoto usando os scripts python Impacket.



O objetivo é demonstrar que, com a ajuda dos logs ricos em Sysmon e uma pequena parte do PowerShell, você pode preparar um utilitário completamente prático para identificar vulnerabilidades, como fiz recentemente comshow-ameaça-caminho .



Caça ameaças com gráficos direcionados



É hora de fazer coisas mais estranhas. Com todas essas informações de processo provenientes do Sysmon, você pode observar os relacionamentos de maneira mais geral. Em outras palavras, desejo exibir os aplicativos em execução - PowerShell.exe, Explorer.exe etc. - como os vértices do gráfico e associá-los ao aplicativo que, por sua vez, os lançou. O resultado é um diagrama que mostra como os aplicativos interagem entre si (em vez de criar um vértice separado para cada instância do processo).



Do ponto de vista técnico, estamos falando de um gráfico direcionado no qual um caminho, por assim dizer, é um caminho unidirecional do aplicativo para o processo pai.



Nesse momento, seria bom dar uma olhada na visualização do que estou falando. Felizmente, existe um ótimo utilitário de visualização de gráficos do PowerShell chamado GraphViz , que possui wrappers extremamente simples disponíveis no PSQuickGraph . Depois, com um pequeno pedaço de código ...



#Let's graph it!!!
$gv = New-Graph -Type BiDirectionalGraph # PSQuickGraph
foreach ($e in $g.getAllEdges() )  { $g from Doug Fink's functions
    $vs= $e.startvertex
   $ve= $e.endvertex
    PSQuickGraph\Add-Edge -From $vs.value.Key -To $ve.value.Key -Graph $gv |Out-Null
}
Show-GraphLayout -Graph $gv


... você pode visualizar interações complexas entre aplicativos através da interface GraphViz:



GraphViz: biblioteca do PowerShell para visualizar hierarquias de processos



GraphViz: Uma biblioteca do PowerShell para visualizar hierarquias de processos





O que faz? Em essência, é uma maneira gráfica de identificar ameaças. Em vez de procurar uma assinatura específica do texto, como fizemos anteriormente com o comando show-ameaça-caminho, agora podemos tentar encontrar anomalias no gráfico.



A idéia é entender o que é uma imagem normal da vizinhança de gráficos e subgráficos - eles geralmente se parecem com estruturas conectadas na visualização - e tentar detectar vértices que parecem mais desanexados. E, de fato, nossos olhos estão bem adaptados para esta tarefa. Felizmente, também existem alguns algoritmos simples de detecção de vizinhança e detecção de ameaças disponíveis. E uma vez, seu humilde servo até escreveu um post sobre o uso da técnica de detecção de bairros em uma rede social associada ao ... o famoso herói da revolução nos Estados Unidos .



A vantagem dessa abordagem para encontrar invasores é que os hackers podem mudar suas técnicas e ofuscar seus ataques, mas é difícil para eles ocultar seus padrões gráficos.



Na terceira parte de nossa análise, aprofundaremos a análise e a aplicação de algoritmos e métodos para encontrar vulnerabilidades. Fique conosco!



All Articles