Produto

Protegendo processos protegidos do Windows

Este blog rápido é o primeiro de uma série de duas partes que discute um exploit de Windows em userland inicialmente divulgado por James Forshaw e Alex Ionescu. O exploit permite que invasores realizem ações altamente privilegiadas que normalmente exigiriam um driver de kernel.

Protected process light

O Windows 8.1 introduziu o conceito de Protected Process Light (PPL), que permite que programas com assinatura especial sejam executados de forma que fiquem imunes a adulteração e encerramento, mesmo por usuários administrativos. O objetivo é evitar que malwares executem livremente — adulterando processos de sistema crítico e encerrando aplicativos antimalware. Existe uma hierarquia de "níveis" de PPL, com os de privilégio mais alto imunes a adulteração por parte dos de privilégio mais baixo, mas não o contrário. 

Para obter mais informações sobre os processos de PPL, consulte os seguintes recursos:

O exploit

Em um nível alto, o exploit é um ataque de envenenamento de cache onde um invasor pode adicionar uma DLL ao cache KnownDlls — uma lista confiável de DLLs do Windows. O KnownDlls só pode ser gravado por processos WinTcb, que é a forma mais alta de PPL... mas um bug na implementação da API DefineDosDevice permite que invasores enganem o CSRSS, um processo WinTcb, para criar uma entrada de cache em seu nome. O KnownDlls é confiável para o carregador do Windows, portanto, nenhuma verificação de segurança adicional é realizada à medida que as DLLs do KnownDlls são carregadas, mesmo dentro de processos PPL. Após envenenar o cache, o invasor executa um processo protegido que acaba carregando sua DLL e executando sua carga útil.

Como esse exploit permite que invasores injetem uma DLL de sua escolha em um processo PPL, eles podem realizar qualquer ação com privilégios WinTcb. A Microsoft indicou que não tem interesse em corrigir essa vulnerabilidade. Está confirmado que funciona no Windows 10 21H1 versão 10.0.19043.985.

Open source

O primeiro POC de exploit público do qual temos conhecimento é o PPLDump, lançado recentemente, uma ferramenta que pode despejar qualquer processo PPL, como o LSASS no modo RunAsPPL. Algumas semanas após o lançamento do PPLDump, o Sealighter-TI foi lançado, reutilizando o código de exploit do PPLDump para conceder acesso ao feed de Threat-Intelligence ETW, que normalmente é restrito a empresas de AntiMalware sob NDA. A rápida reviravolta do Sealighter-TI demonstra como é fácil reaproveitar o código de exploit para executar um novo payload.

Com o código de exploração público, esperamos que as ferramentas ofensivas tirem proveito dele rapidamente, executando payloads como WinTcb PPL. Isso permitirá que elas:

  • Despejar credenciais corporativas, mesmo quando o LSASS está protegido para executar como PPL.
  • Encerrar ou desabilitar silenciosamente processos PPL, como produtos de segurança.
  • Executar implantes inteiros como processos WinTcb PPL. Esses implantes não podem ser inspecionados ou encerrados por produtos de segurança em modo de usuário. A Microsoft restringe produtos de segurança ao AntiMalware PPL, que tem menos privilégios que o WinTcb.
  • Injete código em processos PPL existentes. Imagine executar a carga útil do beacon do Cobalt Strike dentro do Windows Defender.

Fechando a brecha

Ao ver essa vulnerabilidade sem mitigação pública, estamos lançando uma ferramenta chamada PPLGuard para fechá-la. O PPLGuard, que é baseado na base de código do PPLDump com permissão, usa o exploit para primeiro elevar ao WinTcb PPL e, em seguida, aplica uma DACL tornando o diretório de objetos KnownDlls somente leitura. Isso bloqueia o exploit ao evitar que o CSRSS adicione uma nova entrada — um passo crítico na cadeia de exploração. Essa DACL existe apenas na memória, portanto, é apagada após a reinicialização. 

GENERIC_WRITE DENY ACE adicionado a KnownDlls pelo PPLGuard

Como o PPLGuard fecha a vulnerabilidade da qual o exploit depende, as execuções subsequentes falharão.

C:\git\PPLGuard>x64\Release\PPLGuard.exe
[+] Endurecimento de KnownDlls bem-sucedido! :)
C:\git\PPLGuard>x64\Release\PPLGuard.exe
[-] DefineDosDevice falhou com o código de erro 5 - Acesso negado.

A ferramenta de prova de conceito PPLGuard pode ser encontrada aqui.

Conclusão

Neste blog, abordamos uma exploração de escalonamento de privilégios no Windows e fornecemos uma ferramenta open source que mitiga a vulnerabilidade explorada. Na parte 2 deste blog, abordaremos como caçar esses tipos de ataques usando o Elastic Security. Fique ligado.

Enquanto isso, experimente a nossa versão mais recente do Serviço Elasticsearch no Elastic Cloud. Não deixe também de aproveitar o nosso treinamento Quick Start para se preparar para o sucesso.

Atualização 03/06/2021: Após a redação deste blog, alguém portou o exploit PPLDump para .NET para executar o beacon do Cobalt Strike como WinTCB PPL.