Pular para o conteúdo principal

Lab 10.2: Exploração de Serviços IPC

Objetivos de Aprendizagem​

Ao final deste laboratório, você será capaz de:

  • Compreender as vulnerabilidades relacionadas ao IPC do Windows
  • Identificar serviços IPC mal configurados
  • Entender os ataques do tipo "Potato"
  • Analisar os riscos de impersonation de token
  • Implementar defesas apropriadas

Duração Estimada​

50 minutos

Pré-requisitos​

  • Lab 10.1 concluído
  • VM Windows 10/11
  • Direitos de administrador
  • Conhecimentos básicos sobre tokens do Windows

Contexto Profissional​

As vulnerabilidades de IPC são exploradas em:

  • 70% das escaladas de privilégio no Windows
  • Ataques do tipo Potato (JuicyPotato, PrintSpoofer, etc.)
  • Lateral movement em ambientes Active Directory
  • Malwares avançados e APT

Este lab é estritamente educacional.

As técnicas apresentadas são utilizadas por:

  • Pentesters em testes autorizados
  • Red Teams para simulações de ataque
  • Equipes de segurança para entender ameaças

PROIBIDO sem autorização explícita:

  • Em sistemas de produção
  • Em máquinas que não lhe pertencem
  • Para fins maliciosos

Parte 1: Compreendendo os Tokens do Windows​

Etapa 1.1: Tipos de tokens​

O Windows utiliza tokens para gerenciar identidade e privilégios:

TipoDescriçãoUtilização
Primary TokenToken principal do processoIdentidade do processo
Impersonation TokenToken temporárioAgir em nome de outro usuário

Níveis de impersonation:

  • SecurityAnonymous: Nenhuma informação sobre o cliente
  • SecurityIdentification: Pode identificar, mas não agir
  • SecurityImpersonation: Pode agir localmente
  • SecurityDelegation: Pode agir na rede

Etapa 1.2: Veja seu token atual​

# Informações sobre o token atual
whoami /all

# Privilégios do token
whoami /priv

Perguntas:

  1. Quais privilégios você possui?
  2. O privilégio SeImpersonatePrivilege está presente?

Etapa 1.3: Quem possui SeImpersonatePrivilege?​

Por padrão, esse privilégio é concedido a:

  • LOCAL SERVICE
  • NETWORK SERVICE
  • Administrators
  • Serviços do Windows
# Verificar se você possui o privilégio
(whoami /priv) | Select-String "SeImpersonate"

Parte 2: Vulnerabilidade de Impersonation via Pipes​

Etapa 2.1: O conceito do ataque​

1. Atacante cria um named pipe com permissões fracas
2. Um processo privilegiado (SYSTEM) conecta-se ao pipe
3. O atacante "impersona" o token SYSTEM
4. O atacante executa código como SYSTEM

Etapa 2.2: Condições necessárias​

Para explorar essa vulnerabilidade:

  • Ter SeImpersonatePrivilege ou SeAssignPrimaryTokenPrivilege
  • Poder criar um named pipe
  • Conseguir forçar um processo privilegiado a se conectar nele

Etapa 2.3: Serviços vulneráveis históricos​

ServiçoVulnerabilidadeCVE
Print SpoolerSpoolFool, PrintNightmareCVE-2021-1675
BITSToken impersonationMúltiplos
WMIDCOM activationMúltiplos
MSDTCToken impersonationMúltiplos

Parte 3: Família de Ataques "Potato"​

Etapa 3.1: Visão geral​

Os ataques "Potato" exploram IPC para escalada de privilégios:

NomeAnoMétodo
Hot Potato2016NBNS + WPAD spoofing
Rotten Potato2016DCOM + NTLM relay
Juicy Potato2018Abuso de DCOM CLSID
Rogue Potato2020Fake OXID resolver
Sweet Potato2020Combinação de técnicas
PrintSpoofer2020Pipe do Print Spooler
GodPotato2022Nova técnica DCOM

Etapa 3.2: Funcionamento geral​

[Serviço com SeImpersonate]
|
v
[Cria um pipe ou listener]
|
v
[Força SYSTEM a se conectar via DCOM/Spooler/etc.]
|
v
[Captura o token SYSTEM]
|
v
[Executa comando como SYSTEM]

Etapa 3.3: PrintSpoofer - Exemplo conceitual​

PrintSpoofer explora o serviço Print Spooler:

  1. O spooler possui uma funcionalidade que se conecta a pipes
  2. Cria-se um pipe com um nome específico
  3. Dispara-se a conexão do spooler
  4. Impersona-se o token SYSTEM do spooler

Nota: Não executaremos o exploit, apenas entenderemos o mecanismo.


Parte 4: Detecção de Ataques IPC​

Etapa 4.1: Indicadores de comprometimento (IOC)​

Pipes suspeitos:

# Procurar pipes com nomes incomuns
Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -match "(spoof|potato|pipe[0-9]|test)"
}

Processos suspeitos:

# Processos com SeImpersonatePrivilege que não deveriam ter
Get-Process | ForEach-Object {
$proc = $_
try {
$token = [System.Security.Principal.WindowsIdentity]::GetCurrent()
# Análise dos privilégios...
} catch {}
}

Etapa 4.2: Eventos Sysmon​

# Event ID 17: Pipe Created
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Sysmon/Operational'
ID = 17
} -MaxEvents 50 | Where-Object {
$_.Message -match "(spoof|potato)"
} | Format-Table TimeCreated, Message -Wrap

# Event ID 18: Pipe Connected
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Sysmon/Operational'
ID = 18
} -MaxEvents 50 | Format-Table TimeCreated, Message -Wrap

Etapa 4.3: Eventos Security Log​

# Event ID 4688: Process Creation com impersonation
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4688
} -MaxEvents 100 | Where-Object {
$_.Message -match "Impersonation"
}

Perguntas: 3. Quais eventos você encontrou? 4. Como você detectaria um ataque Potato?


Parte 5: Defesas e Hardening​

Etapa 5.1: Reduzir a superfície de ataque​

Desativar serviços desnecessários:

# Verificar o estado do Print Spooler
Get-Service Spooler

# Desativar se não for necessário (ATENÇÃO em produção!)
# Stop-Service Spooler
# Set-Service Spooler -StartupType Disabled

Etapa 5.2: Restringir SeImpersonatePrivilege​

Via Local Security Policy:

  1. secpol.msc
  2. Local Policies > User Rights Assignment
  3. "Impersonate a client after authentication"
  4. Remover grupos desnecessários

Etapa 5.3: Ativar proteções​

Windows Defender Credential Guard:

# Verificar se o Credential Guard está ativo
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

LSA Protection:

# Verificar LSA Protection
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL"

Etapa 5.4: Script de verificação de segurança​

# Script de verificação da configuração IPC
Write-Host "=== VERIFICAÇÃO DE SEGURANÇA IPC ===" -ForegroundColor Cyan

# 1. Print Spooler
$spooler = Get-Service Spooler -ErrorAction SilentlyContinue
if ($spooler.Status -eq "Running") {
Write-Host "[!] Print Spooler está ativo" -ForegroundColor Yellow
} else {
Write-Host "[OK] Print Spooler está inativo" -ForegroundColor Green
}

# 2. Pipes incomuns
$suspectPipes = Get-ChildItem \\.\pipe\ | Where-Object {
$_.Name -match "(spoof|potato|test[0-9])"
}
if ($suspectPipes) {
Write-Host "[!] Pipes suspeitos detectados:" -ForegroundColor Red
$suspectPipes | ForEach-Object { Write-Host " $_" }
} else {
Write-Host "[OK] Nenhum pipe suspeito" -ForegroundColor Green
}

# 3. SeImpersonatePrivilege
if ((whoami /priv) -match "SeImpersonate.*Enabled") {
Write-Host "[INFO] SeImpersonatePrivilege está ativo" -ForegroundColor Yellow
}

Write-Host "`n=== FIM DA VERIFICAÇÃO ===" -ForegroundColor Cyan

Perguntas: 5. Seu sistema é vulnerável a ataques Potato? 6. Quais medidas você implementaria?


Parte 6: Exercício Prático​

Etapa 6.1: Auditoria completa​

Realize uma auditoria na sua VM:

  1. Liste todos os serviços com SeImpersonatePrivilege
  2. Identifique os pipes ativos e seus proprietários
  3. Verifique o estado dos serviços de risco (Spooler, BITS, etc.)
  4. Analise os logs para conexões suspeitas de pipe

Etapa 6.2: Relatório de auditoria​

Crie um relatório incluindo:

  • Estado atual da segurança IPC
  • Riscos identificados
  • Recomendações de remediação

Entregáveis​

  1. Relatório de auditoria (2-3 páginas):

    • Inventário dos serviços de risco
    • Análise de privilégios
    • Recomendações
  2. Capturas de tela:

    • whoami /priv
    • Lista de pipes
    • Script de verificação executado
  3. Respostas às 6 perguntas


Critérios de Avaliação​

CritérioPontos
Compreensão dos tokens20%
Análise dos ataques Potato25%
Detecção implementada25%
Recomendações de segurança30%

Comandos de Referência​

# Privilégios
whoami /priv
whoami /all

# Serviços
Get-Service Spooler, BITS, WMI

# Pipes
Get-ChildItem \\.\pipe\

# Eventos
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4688}
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-Sysmon/Operational';ID=17,18}

# Configuração
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"

Recursos Adicionais​


Lab desenvolvido no âmbito do curso Sistemas Operacionais - MÓDULO 10