
Ferramenta userland para Windows que enumera e classifica portas ALPC, incluindo processos protegidos por PPL.
Uma ferramenta userland do Windows para enumerar e classificar portas de Chamada de Procedimento Local Avançada (ALPC), incluindo aquelas de propriedade de processos PPL (Protected Process Light) em que a duplicação padrão de handles falha.
Ferramentas de enumeração padrão geralmente ignoram completamente portas protegidas ou com acesso negado, criando pontos cegos. Esta ferramenta resolve dinamicamente o índice do tipo de objeto da porta ALPC e recorre a NtQueryInformationProcess para classificar com precisão portas que rejeitam solicitações padrão de duplicação.
Esta ferramenta elimina pontos cegos na enumeração de IPC do Windows para dois públicos principais:
PROCESS_DUP_HANDLE para ocultar sua atividade. Ferramentas padrão ignoram essas portas silenciosamente. Esta ferramenta captura a falha e, em vez disso, consulta a estrutura PS_PROTECTION. Se um processo negar o acesso, mas retornar um Type e um Signer de 0 (None), ele não é um processo PPL legítimo do Windows; isso é altamente anômalo e deve ser sinalizado para investigação imediata.Durante os testes em um sistema Windows real, a ferramenta percorreu 58.916 handles abertos e isolou 2.618 portas ALPC:
Saída Bruta: A saída completa e sem filtro desta execução está disponível em
alpc_enumerator_output.txt.
Observação sobre Portas Anônimas: A impressão no console de portas anônimas está desabilitada por padrão em
main.cpppara evitar poluir a saída do terminal com milhares de entradas. Se você precisar de saída em tempo real para portas anônimas, descomentecheckEntriesVectorForPrint(anonEntries, "Anonymous");na linha ~451 antes de compilar.
Para provar que a enumeração no userland é precisa, a saída da ferramenta foi verificada manualmente contra o depurador de kernel do Windows (WinDbg). Os endereços de objetos e os níveis de signatário PPL correspondem exatamente aos valores reais do kernel.
main.cpp no Visual Studio ou compile via MSVC.Release (x64).SeDebugPrivilege).Em vez de fixar o índice do tipo de objeto ALPC no código (o que quebra entre builds do Windows), a ferramenta cria uma porta ALPC descartável e consulta seu tipo dinamicamente para isolar o índice correto para o sistema host (por exemplo, índice 46). Quando a duplicação padrão de handles falha, ela decodifica PS_PROTECTION para extrair exatamente o Type e o Signer necessários para classificar portas sem depender de direitos de acesso.
Para uma análise técnica completa, aqui está o link do artigo no Medium: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
Esta ferramenta faz parte da minha pesquisa contínua sobre ALPC/RPC e o funcionamento interno do Windows. Publicarei mais descobertas e lançarei ferramentas complementares em um futuro próximo. Se você achar útil, considere me seguir no GitHub ou nas minhas redes sociais abaixo para ser notificado sobre futuros lançamentos.