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:
- Criar GPOs de auditoria e de configuração
- Criar canais de evento específicos nos servidores
- Criar ou importar subscrições
- Auditoria com Powershell
- 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.
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 :
- Palantir Medium: Windows Event Forwarding for Network Defense
- Microsoft Windows Event Forwarding to help with intrusion detection
- Monitoring What Matters
- Spotting the Adversary
- Creating Custom Windows Event Forwarding Logs
- Windows Logging Cheat Sheet
- Event Forwarding Guidance
- Windows Event Log Reference:
- Windows Event Log Consuming Events
- Advanced XML Filtering
- XPath Documentation
- Exploit Guard Event Views
Referencias Powershell
- https://github.com/inodee/threathunting-spl/blob/master/hunt-queries/powershell_qualifiers.md
- https://docs.splunk.com/Documentation/UBA/5.0.4.1/GetDataIn/AddPowerShell
- https://github.com/marcurdy/dfir-toolset/blob/master/Powershell%20Blueteam.txt
- https://devblogs.microsoft.com/powershell/powershell-the-blue-team/
- https://www.fireeye.com/blog/threat-research/2016/02/greater_visibilityt.html
- https://hurricanelabs.com/splunk-tutorials/how-to-use-powershell-transcription-logs-in-splunk/
Seja o primeiro a comentar