
Una herramienta de espacio de usuario de Windows para enumerar y clasificar puertos ALPC, incluidos los procesos protegidos por PPL.
Una herramienta userland de Windows para enumerar y clasificar puertos de Advanced Local Procedure Call (ALPC), incluyendo aquellos propiedad de procesos PPL (Protected Process Light) donde la duplicación estándar de handles falla.
Las herramientas de enumeración estándar a menudo omiten por completo los puertos protegidos o con acceso denegado, creando puntos ciegos. Esta herramienta resuelve dinámicamente el índice del tipo de objeto ALPC Port y recurre a NtQueryInformationProcess para clasificar con precisión los puertos que rechazan las solicitudes estándar de duplicación.
Esta herramienta elimina los puntos ciegos en la enumeración estándar de IPC de Windows para dos audiencias principales:
PROCESS_DUP_HANDLE para ocultar su actividad. Las herramientas estándar descartan silenciosamente estos puertos. Esta herramienta detecta el fallo y consulta en su lugar la estructura PS_PROTECTION. Si un proceso deniega el acceso pero devuelve un Type y Signer de 0 (None), no se trata de un proceso PPL legítimo de Windows; esto es altamente anómalo y debe marcarse para investigación inmediata.Durante las pruebas en un sistema Windows en vivo, la herramienta recorrió 58,916 handles abiertos y aisló 2,618 puertos ALPC:
Salida Cruda: La salida completa y sin filtrar de esta ejecución está disponible en
alpc_enumerator_output.txt.
Nota sobre Puertos Anónimos: La impresión en consola de los puertos anónimos está deshabilitada por defecto en
main.cpppara evitar saturar la salida del terminal con miles de entradas. Si necesitas salida en tiempo real para los puertos anónimos, descomentacheckEntriesVectorForPrint(anonEntries, "Anonymous");en la línea ~451 antes de compilar.
Para demostrar que la enumeración userland es precisa, la salida de la herramienta se ha verificado manualmente contra el depurador del kernel de Windows (WinDbg). Las direcciones de los objetos y los niveles de signer PPL coinciden exactamente con la verdad del kernel.
main.cpp en Visual Studio o compílalo con MSVC.Release (x64).SeDebugPrivilege).En lugar de hardcodear el índice del tipo de objeto ALPC (lo cual se rompe entre compilaciones de Windows), la herramienta crea un puerto ALPC desechable y consulta su tipo dinámicamente para aislar el índice correcto para el sistema anfitrión (por ejemplo, Índice 46). Cuando la duplicación estándar de handles falla, decodifica PS_PROTECTION para extraer el Type y Signer exactos necesarios para clasificar puertos sin depender de los derechos de acceso.
Para un desglose técnico completo, aquí está el enlace al artículo en Medium: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
Esta herramienta es parte de mi investigación en curso sobre ALPC/RPC y los internals de Windows. Publicaré más hallazgos y lanzaré herramientas complementarias en un futuro cercano. Si te resultó útil, considera seguirme en GitHub o en mis redes sociales a continuación para recibir notificaciones de futuros lanzamientos.