
Ein Windows-Userland-Tool zum Aufzählen und Klassifizieren von ALPC-Ports, einschließlich PPL-geschützter Prozesse.
Ein Windows-Userland-Tool zum Aufzählen und Klassifizieren von Advanced Local Procedure Call (ALPC)-Ports, einschließlich solcher, die PPL (Protected Process Light)-Prozessen gehören, bei denen die standardmäßige Handle-Duplizierung fehlschlägt.
Standard-Enumerationstools überspringen geschützte oder zugriffsverweigerte Ports oft vollständig, was blinde Flecken erzeugt. Dieses Tool ermittelt dynamisch den Objekttyp-Index des ALPC-Ports und greift auf NtQueryInformationProcess zurück, um Ports, die standardmäßige Duplizierungsanforderungen ablehnen, präzise zu klassifizieren.
Dieses Tool beseitigt blinde Flecken in der standardmäßigen Windows-IPC-Enumeration für zwei hauptsächliche Zielgruppen:
PROCESS_DUP_HANDLE-Zugriff hooken oder verweigern, um ihre Aktivität zu verbergen. Standardtools verwerfen diese Ports stillschweigend. Dieses Tool erkennt den Fehlschlag und fragt stattdessen die PS_PROTECTION-Struktur ab. Wenn ein Prozess den Zugriff verweigert, aber einen Typ und Signer von 0 (None) zurückgibt, handelt es sich nicht um einen legitimen Windows-PPL-Prozess; das ist äußerst ungewöhnlich und sollte zur sofortigen Untersuchung gekennzeichnet werden.Während Tests auf einem laufenden Windows-System durchlief das Tool 58,916 offene Handles und isolierte 2,618 ALPC-Ports:
Rohausgabe: Die vollständige, ungefilterte Ausgabe dieses Laufs ist in
alpc_enumerator_output.txtverfügbar.
Hinweis zu anonymen Ports: Die Konsolenausgabe für anonyme Ports ist in
main.cppstandardmäßig deaktiviert, um zu verhindern, dass die Terminalausgabe mit Tausenden von Einträgen aufgebläht wird. Wenn Sie eine Echtzeitausgabe für anonyme Ports benötigen, entfernen Sie vor dem Kompilieren die Kommentarzeichen vorcheckEntriesVectorForPrint(anonEntries, "Anonymous");in Zeile ~451.
Um zu beweisen, dass die Userland-Enumeration korrekt ist, wurde die Ausgabe des Tools manuell gegen den Windows-Kernel-Debugger (WinDbg) verifiziert. Objektadressen und PPL-Signer-Stufen stimmen exakt mit den Kernel-Gegebenheiten überein.
main.cpp in Visual Studio oder kompilieren Sie es über MSVC.Release-Modus (x64).SeDebugPrivilege).Anstatt den ALPC-Objekttyp-Index fest zu codieren (was über Windows-Builds hinweg bricht), erstellt das Tool einen temporären ALPC-Port und fragt dessen Typ dynamisch ab, um den korrekten Index für das Hostsystem zu isolieren (z. B. Index 46). Wenn die standardmäßige Handle-Duplizierung fehlschlägt, dekodiert es PS_PROTECTION, um den genauen Typ und Signer zu extrahieren, die zur Klassifizierung von Ports erforderlich sind, ohne sich auf Zugriffsrechte zu verlassen.
Eine ausführliche technische Analyse finden Sie im Medium-Artikel: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
Dieses Tool ist Teil meiner laufenden Forschung zu ALPC/RPC und Windows-Internals. Ich werde in naher Zukunft weitere Erkenntnisse veröffentlichen und Begleittools bereitstellen. Wenn Sie dies nützlich fanden, folgen Sie mir gerne auf GitHub oder meinen unten aufgeführten Social-Media-Kanälen, um über zukünftige Veröffentlichungen benachrichtigt zu werden.