Windows Event Forwarding para estratégia de alertas e detecções

O Windows Event Forwarding (WEF) é uma solução de encaminhamento de logs integrada nas versões modernas do Microsoft Windows que permite centralizar os LOGs filtrados através de canais e assinaturas. Isso permite uma estratégia de monitoramento com base em alertas e detecções como como acesso incomum à conta de serviço, acesso a locais de registro ou sistema de arquivos confidenciais ou instalação de persistência por Malware, etc.

O Windows Event Forwarding (WEF) permite que os logs de eventos sejam enviados, por meio de um mecanismo push ou pull, para um ou mais servidores centralizados do Windows Event Collector (WEC)

Para realizar essa funcionalidade, há duas assinaturas diferentes que podem ser publicadas para os dispositivos, a assinatura Baseline e a assinatura suspeita.

  • A assinatura Baseline inscreve todos os dispositivos em sua organização, e uma assinatura Suspeita inclui apenas dispositivos que foram adicionados por você.
  • A assinatura Suspeita coleta mais eventos para ajudar a criar contexto para a atividade do sistema e pode ser atualizada rapidamente para acomodar novos eventos e/ou cenários.

O WEF é livre de agentes e conta com componentes nativos integrados ao sistema operacional. O WEF é compatível com estações de trabalho e servidor do Windows e depende do Winrm.

O WEF usa XML que ajuda a controlar quais IDs de eventos são enviados, suprimir eventos ruidosos, agrupar eventos em lote e enviar eventos com a rapidez ou a lentidão desejadas.

Ordem de implementação:

  1. Criar GPOs de auditoria e de configuração
  2. Criar canais de evento específicos nos servidores
  3. Criar ou importar subscrições
  4. Auditoria com Powershell
  5. Coletar dados e caçar evidencias de possíveis ameaças.

Requisitos: Ter habilitado no ambiente o windows remote management (ws-management)

Winrm qc

GPO de configuração que aponta para o servidor de coleta

Esta política permite configurar os clientes para se conectarem a um servidor WEF para gerenciamento de assinaturas e eventos.

Computer>Policies>Admin Templates>Windows Components>Event Forwarding>Configure target subscription manager

Server=http://nomedoservidor:5985/wsman/SubscriptionManager/WEC,Refresh=60

Abaixo temos um exemplo de como fica a estrutura.

O que auditar ?

Para fins de “hunting” é interessante coletar diversos eventos que nos ajude a correlacionar e criar “artefatos” que possam nos ajudar a identificar possíveis ameaças.

Você pode consultar o Windows Logging Cheat Sheet e o Microsoft Windows Event Forwarding to help with intrusion detection, e um dos melhores repositório com recomendações de GPO para configurar a auditoria, habilitar a coleta/encaminhamento de eventos do Windows etc. https://github.com/palantir/windows-event-forwarding/blob/master/group-policy-objects com várias informações de coleta de log.

Windows Event Channels

Aprendemos nos treinamentos Microsoft que podemos encaminhar eventos de outros servidores e estações para a “pasta” que já existe no event viewer chamada “subscriptions” e que é super importante pois se você clicar nela, uma mensagem aparece para que você habilite o serviço:

Você pode clicar em Yes ou criar uma GPO que permita que o serviço Wecsvc “Windows Event Collector” inicie automaticamente.

Porém para embientes de produção você não precisa encaminhar todos os eventos, é possível criar logs separados para as assinaturas. E melhor ainda, você pode criar mais canais (pastas) de eventos que oferece benefícios como:

  • Ter um tamanho máximo independente e uma estratégia de rotação.
  • Um identificador exclusivo para marcar dados para ingestão em um SIEM.
  • Discos diferentes ou dispositivos de armazenamento para melhorar a E/S do disco.

Para isso você terá que criar um manifesto (Event Channel manifest) compilar uma DLL, ele será carregado nos servidores onde você irá configurar o WEF.

O passo a passo você encontra aqui: Create Custom Event DLL and Manifest

Na imagem abaixo eu criei apenas 3 canais, mas podemos ter até 8 para cada sessão.

ecmangen.exe

Eu baixei o Windows 8.1 SDK https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/ e rodei no Windows 10. O ecmangen.exe fica na pasta Program Files (x86)\Windows Kits\8.1\bin

Copiei o arquivo e executei os comandos de compilação diretamente na pasta Windows\Microsoft.NET\Framework64\v4.0.30319

  • mc.exe ADS.man
  • mc.exe -css ADS.DummyEvent ADS.man
  • rc.exe ADS.rc
  • csc.exe /win32res:ADS.res /unsafe /target:library /out:ADS.dll C:ADS.cs

Depois de compilado basta copiar os arquivos .dll e .man para a pasta Windows\System32 para cada servidor WEF

net stop wecsvc – Desabilitar o Serviço Coletor de Eventos do Windows.
wevtutil im C:\windows\system32\ADS.man – Importar os canais.
net start wecsvc
Abra o Event viewer para confirmar

WEF-Subscriptions

O Encaminhamento de Eventos do Windows ou WEF é baseado em assinatura para enviar eventos para um Coletor de Eventos do Windows o Windows Event Collector (WEC). As assinaturas podem ser iniciadas pela fonte (push) ou iniciadas pelo coletor (pull).

Você pode criar uma subscrição manualmente, abaixo eu deixo detalhes de como eu fiz a configuração em meu ambiente.
Note que o “Destination Log” é um canal criado manualmente e especificamente para um proposito único.

Defina qual o evento especifico deseja. Nesse exemplo eu coloquei o evento de segurança com o Event ID 4740 – A user account was locked out

Você pode importar subscrições usando a linha de comando pois ela usa o formato xml.

wecutil cs exemplo.xml

Para remover use o comando:

wecutil ds exemplo

Abaixo um modelo retirado do repositório do https://github.com/palantir/windows-event-forwarding para receber logs do Kerberos.

<Subscription xmlns="http://schemas.microsoft.com/2006/03/windows/events/subscription">
  <SubscriptionId>Kerberos</SubscriptionId>
  <SubscriptionType>SourceInitiated</SubscriptionType>
  <Description>Kerberos related events.</Description>
  <Enabled>true</Enabled>
  <Uri>http://schemas.microsoft.com/wbem/wsman/1/windows/EventLog</Uri>
  <ConfigurationMode>Custom</ConfigurationMode>
  <Delivery Mode="Push">
    <Batching>
      <MaxItems>5</MaxItems>
      <MaxLatencyTime>300000</MaxLatencyTime>
    </Batching>
    <PushSettings>
      <Heartbeat Interval="1800000"/>
    </PushSettings>
  </Delivery>
  <Query><![CDATA[
    <QueryList>
      <!-- Inspired by Microsoft Documentation and/or IADGOV -->
      <Query Id="0" Path="Security">
        <!-- 4768 - A Kerberos authentication ticket (TGT) was requested -->
        <!-- 4769 - A Kerberos service ticket was requested -->
        <!-- 4770 - A Kerberos service ticket was renewed -->
        <!-- 4771 - A Kerberos pre-authentication failed. -->
        <!-- 4772 - A Kerberos authentication ticket request failed. -->
        <!-- 4773 - A Kerberos service ticket request failed. -->
        <Select Path="Security">*[System[(EventID=4768 or EventID=4769 or EventID=4770 or EventID=4771 or EventID=4772 or EventID=4773)]]</Select>
      </Query>
    </QueryList>]]></Query>
  <ReadExistingEvents>true</ReadExistingEvents>
  <TransportName>http</TransportName>
  <ContentFormat>RenderedText</ContentFormat>
  <Locale Language="en-US"/>
  <LogFile>CANAL CRIADO</LogFile>
  <AllowedSourceNonDomainComputers/>
  <AllowedSourceDomainComputers>O:NSG:NSD:(A;;GA;;;DC)(A;;GA;;;NS)(A;;GA;;;DD)</AllowedSourceDomainComputers>
</Subscription>

Windows Event Forwarding Guidance da Palantir Technologies https://github.com/palantir/windows-event-forwarding possui dezenas de subscrições prontas.

Auditoria com Powershell

O Guido Oliveira do site https://guidooliveira.com/ deu a ideia de eu falar sobre a auditoria nativa do Powershell. E sabemos que PoSH é essencial tanto na administração como em rodar alguns comandos maliciosos.

Uma das técnicas de log do PowerShell mais simples são as transcrições. As transcrições são uma ótima maneira de ter um resumo do que está acontecendo em uma sessão do PowerShell como se você estivesse olhando por cima do ombro da pessoa que está digitando. (Termo usado no artigo https://devblogs.microsoft.com/powershell/powershell-the-blue-team/)

É possível configurar seu servidor WEC para funcionar como um destino de log de transcrição do powershell (PowerShell Transcription) e criar um subscrição para essa coleta https://github.com/palantir/windows-event-forwarding/blob/master/wef-subscriptions/Powershell.xml

Script Block Logging: Quando você habilita o log de bloco de script, o PowerShell registra o conteúdo de todos os blocos de script que ele processa. Uma vez habilitada, qualquer sessão do PowerShell nova registra essas informações.. Pense em toda vez que um adversário executa um script ou comando codificado do PowerShell, o log de bloco de script fornece esses dados em sua forma bruta.

Habilitar PowerShell Transcription

Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Windows PowerShell

  • Turn on PowerShell Transcription: Enabled
  • Transcript output directory: \\SERVERNAME\pslogs
  • Include invocation headers: Enabled

Habilitar o Script Block Logging

Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell

  • Turn on Module Logging: Enabled
  • Module Names: *
  • Turn on Powershell Script Block Logging: Enabled
  • Log script block invocation start / stop events: Disabled

Referências :

Referencias Powershell

Anúncio

Sobre Daniel Donda 538 Artigos
Olá, meu nome é Daniel Donda e sou especialista em cibersegurança, autor de livros, professor e palestrante. Saiba mais

Seja o primeiro a comentar

Faça um comentário

Seu e-mail não será divulgado.


*