
Módulo PowerShell para forense em VMWare vSphere

O módulo PowerShell DFIR4vSphere coleta logs e artefatos de forense tanto em hosts ESXi quanto no console do vCenter.
O módulo possui duas funções principais:
O DFIR4vSphere foi apresentado pela primeira vez no CoRI&IN 2022 (Conférence sur la réponse aux incidents et l’investigation numérique). Os slides da apresentação, em francês, estão disponíveis . Também foi apresentado no SANS DFIR Summit 2022; uma gravação da apresentação está .
O DFIR4vSphere usa o módulo VMware PowerCLI; instale-o antes de usar o módulo:
Install-Module VMware.PowerCLI -Scope CurrentUser
Depois de instalado, localize o caminho dos módulos do PowerShell com o seguinte comando:
PS> $env:PSModulePath
Copie a pasta DFIR4vSphere para um dos caminhos de módulos, por exemplo:
%USERPROFILE%\Documents\WindowsPowerShell\Modules
%ProgramFiles%\WindowsPowerShell\Modules
%SYSTEMROOT%\system32\WindowsPowerShell\v1.0\Modules
O módulo DFIR4vSphere está instalado; reinicie o console do PowerShell e carregue o módulo:
PS> Import-module DFIR4vSphere
Você deve então conectar-se ao vCenter que está investigando antes de iniciar a coleta de dados:
PS> Connect-VIServer %VC_Name%
Use o docker-compose para criar a imagem, executar o contêiner e montar um volume para recuperar os logs:
sudo docker-compose run dfir4vsphere
O módulo está pronto para uso.
Coletar eventos VI do vCenter dos últimos 30 dias:
$enddate = get-date
$startdate = $enddate.adddays(-30)
Start-VC_Investigation -StartDate $startdate -Enddate $enddate
Execute a mesma coleta com o support bundle do vCenter; faça isso caso suspeite de comprometimento no próprio appliance do vCenter. Nesse caso, você também deve realizar uma investigação forense clássica de Linux no host do vCenter:
$enddate = get-date
$startdate = $enddate.adddays(-30)
Start-VC_Investigation -StartDate $startdate -Enddate $enddate -VCBundle
O parâmetro LightVIEvents coletará apenas os tipos de eventos considerados de interesse. Use esta opção se a infraestrutura investigada for grande e a coleta normal for lenta demais.
$enddate = get-date
$startdate = $enddate.adddays(-30)
Start-VC_Investigation -StartDate $startdate -Enddate $enddate -LightVIEvents
Com o LightVIEventTypesId, você pode filtrar quais tipos específicos de eventos deseja coletar. Uma lista completa dos IDs de tipos de eventos está disponível aqui. Por exemplo, para recuperar apenas eventos de autenticação no vCenter, você pode executar o seguinte comando:
$enddate = get-date
$startdate = $enddate.adddays(-30)
Start-VC_Investigation -StartDate $startdate -Enddate $enddate -LightVIEvents -LightVIEventTypesId "com.vmware.sso.LoginSuccess","com.vmware.sso.LoginFailure"
A retenção padrão de logs de eventos VI é de 30 dias, mas você pode tentar recuperar eventos mais antigos. Às vezes, os logs são recuperados além da estratégia de retenção configurada.
Este comando recebe como entrada um host ESXi pelo seu nome ou recuperado com o cmdlet Get-VMHost do PowerCLI. Por exemplo, para realizar uma coleta básica em todos os hosts ESXi conectados ao vCenter:
Get-VMHost | Start-ESXi_Investigation
O comando acima gerará vários arquivos CSV descrevendo processos em execução, conexões abertas, contas locais e recuperará várias definições de configuração...
Se você também precisar recuperar os logs locais do ESXi (como shell.log ou auth.log), será necessário gerar um support bundle.
O comando abaixo recupera todos os ESXi de um determinado cluster e gera um support bundle para cada hipervisor.
Get-VMHost -Location %ClusterName% | Start-ESXi_Investigation -ESXBundle
Você também pode direcionar um host ESXi específico e gerar seu support bundle informando o nome dele.
Start-ESXi_Investigation -Name %ESXi% -ESXBundle
Gerar support bundles para todos os ESXi conectados a um vCenter pode levar algum tempo em ambientes grandes.
Os arquivos gerados por cada função são:
Executar as várias funções gerará uma estrutura de diretórios semelhante:
DFIR4vSphere_Collection
│ Start-ESXi_Investigation.log
│ Start-VC_Investigation.log
│ VC_ConnectionInfo_%VC_Name%.csv
| VC_ESXiInventory_%VC_Name%.csv
│ VC_Permissions_%VC_Name%.csv
│ VC_Users_%VC_Name%.csv
└───%ESX_Name1%
│ │ ESXi_%ESX_Name1%_DomJoin.csv
│ │ ESXi_%ESX_Name1%_General.csv
│ │ ESXi_%ESX_Name1%_Hostd.log
│ │ ESXi_%ESX_Name1%_Network_ARPCache.csv
│ │ ESXi_%ESX_Name1%_Network_DNS.csv
│ │ ESXi_%ESX_Name1%_Network_IPv4.csv
│ │ ESXi_%ESX_Name1%_Network_IPv4routes.csv
│ │ ESXi_%ESX_Name1%_Network_Netstat.csv
│ │ ESXi_%ESX_Name1%_Network_VMs.csv
│ │ ESXi_%ESX_Name1%_Network_vSwitchs.csv
│ │ ESXi_%ESX_Name1%_Services.csv
│ │ ESXi_%ESX_Name1%_Software_BaseImage.csv
│ │ ESXi_%ESX_Name1%_Software_Profile.csv
│ │ ESXi_%ESX_Name1%_Software_VIB.csv
│ │ ESXi_%ESX_Name1%_Software_VIBSigCheck.csv
│ │ ESXi_%ESX_Name1%_Storage_FileSystem.csv
│ │ ESXi_%ESX_Name1%_Storage_IOFilter.csv
│ │ ESXi_%ESX_Name1%_System_Accounts.csv
│ │ ESXi_%ESX_Name1%_System_Advanced-delta.csv
│ │ ESXi_%ESX_Name1%_System_Certstore.csv
│ │ ESXi_%ESX_Name1%_System_ExecPolicy.csv
│ │ ESXi_%ESX_Name1%_System_GuestRepo.csv
│ │ ESXi_%ESX_Name1%_System_modules.csv
│ │ ESXi_%ESX_Name1%_System_Kernel-Delta.csv
│ │ ESXi_%ESX_Name1%_System_permissions.csv
│ │ ESXi_%ESX_Name1%_System_process.csv
│ │ ESXi_%ESX_Name1%_System_version.csv
└───%ESX_Name2%
│ │ ESXi_%ESX_Name2%_DomJoin.csv
│ │ ESXi_%ESX_Name2%_General.csv
│ │ ...
└───Support_Bundles
│ │ esx-%ESX_Name1%-YYY-MM-DD.tgz
│ │ esx-%ESX_Name2%-YYY-MM-DD.tgz
│ │ vcsupport-%GUID%.tgz
└───VI_Events_%VC_Name%
│ │ VIEvents_%EventTypeId1%.json
│ │ VIEvents_%EventTypeId2%.json
│ │ ...
│ └───YYYY-MM-DD
│ | │ VIEvents_YYYY-MM-DD_HH-00-00.json
│ | │ ...
│ └───YYYY-MM-DD
│ │ │ VIEvents_YYYY-MM-DD_HH-00-00.json
│ │ │ ...
│ └───...
Após a coleta ser concluída com ambas as funções, você obterá logs de:
Em alguns casos de ransomware, o agente de ameaças interrompe o VC e pode, adicionalmente, redefinir as contas locais de root do ESXi. Nesse caso, sua única chance é restaurar o vCenter a partir do backup; os ESXi comprometidos serão então reanexados automaticamente ao vCenter e você poderá executar o DFIR4vSphere. Para acessar novamente os ESXi comprometidos com contas locais, você pode realizar uma redefinição de senha por meio de chamadas de API do vCenter (aqui está um script para executar a ação: https://www.hypervisor.fr/?p=5655)