
Un outil Windows en espace utilisateur pour énumérer et classifier les ports ALPC, y compris les processus protégés par PPL.
Un outil Windows en espace utilisateur pour énumérer et classer les ports Advanced Local Procedure Call (ALPC), y compris ceux appartenant à des processus PPL (Protected Process Light) lorsque la duplication standard de handles échoue.
Les outils d'énumération standard ignorent souvent entièrement les ports protégés ou dont l'accès est refusé, créant ainsi des angles morts. Cet outil résout dynamiquement l'index du type d'objet Port ALPC et se rabat sur NtQueryInformationProcess pour classer avec précision les ports qui rejettent les demandes de duplication standard.
Cet outil élimine les angles morts de l'énumération IPC Windows standard pour deux publics principaux :
PROCESS_DUP_HANDLE pour masquer leur activité. Les outils standard ignorent silencieusement ces ports. Cet outil détecte l'échec et interroge à la place la structure PS_PROTECTION. Si un processus refuse l'accès mais renvoie un Type et un Signer de 0 (None), ce n'est pas un processus PPL Windows légitime ; c'est hautement anormal et doit être signalé pour une investigation immédiate.Lors des tests sur un système Windows en fonctionnement, l'outil a parcouru 58 916 handles ouverts et isolé 2 618 ports ALPC :
Sortie brute : La sortie complète et non filtrée de cette exécution est disponible dans
alpc_enumerator_output.txt.
Note sur les ports anonymes : L'impression console des ports anonymes est désactivée par défaut dans
main.cpppour éviter de surcharger la sortie du terminal avec des milliers d'entrées. Si vous avez besoin d'une sortie en temps réel pour les ports anonymes, décommentezcheckEntriesVectorForPrint(anonEntries, "Anonymous");vers la ligne ~451 avant de compiler.
Pour prouver l'exactitude de l'énumération en espace utilisateur, la sortie de l'outil a été vérifiée manuellement avec le débogueur noyau Windows (WinDbg). Les adresses d'objets et les niveaux de signer PPL correspondent exactement à la réalité du noyau.
main.cpp dans Visual Studio ou compilez via MSVC.Release (x64).SeDebugPrivilege).Au lieu de coder en dur l'index du type d'objet ALPC (qui casse selon les versions de Windows), l'outil crée un port ALPC jetable et interroge dynamiquement son type pour isoler le bon index du système hôte (par exemple, Index 46). Lorsque la duplication standard de handles échoue, il décode PS_PROTECTION pour extraire le Type et le Signer exacts nécessaires à la classification des ports sans dépendre des droits d'accès.
Pour une analyse technique complète, voici le lien de l'article Medium : https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
Cet outil fait partie de mes recherches en cours sur ALPC/RPC et les internals Windows. Je publierai d'autres découvertes et sortirai des outils complémentaires dans un avenir proche. Si vous avez trouvé cela utile, pensez à me suivre sur GitHub ou sur mes réseaux sociaux ci-dessous pour être informé des prochaines publications.