
Uno strumento userland di Windows per enumerare e classificare le porte ALPC, inclusi i processi protetti da PPL.
Uno strumento userland per Windows che enumera e classifica le porte Advanced Local Procedure Call (ALPC), incluse quelle possedute da processi PPL (Protected Process Light) dove la duplicazione standard degli handle fallisce.
Gli strumenti di enumerazione standard spesso saltano completamente le porte protette o con accesso negato, creando angoli ciechi. Questo strumento risolve dinamicamente l'indice del tipo di oggetto ALPC Port e ripiega su NtQueryInformationProcess per classificare con precisione le porte che rifiutano le richieste standard di duplicazione.
Questo strumento elimina gli angoli ciechi nell'enumerazione IPC standard di Windows per due tipologie principali di utenti:
PROCESS_DUP_HANDLE per nascondere la propria attività. Gli strumenti standard eliminano silenziosamente queste porte. Questo strumento intercetta il fallimento e interroga invece la struttura PS_PROTECTION. Se un processo nega l'accesso ma restituisce un Type e un Signer pari a 0 (None), non è un processo PPL legittimo di Windows; questo è altamente anomalo e dovrebbe essere segnalato per un'indagine immediata.Durante i test su un sistema Windows reale, lo strumento ha esaminato 58.916 handle aperti e isolato 2.618 porte ALPC:
Output Grezzo: L'output completo e non filtrato di questa esecuzione è disponibile in
alpc_enumerator_output.txt.
Nota sulle Porte Anonime: La stampa su console delle porte anonime è disabilitata per impostazione predefinita in
main.cppper evitare di appesantire l'output del terminale con migliaia di voci. Se hai bisogno dell'output in tempo reale per le porte anonime, rimuovi il commento dacheckEntriesVectorForPrint(anonEntries, "Anonymous");circa alla riga 451 prima di compilare.
Per dimostrare che l'enumerazione userland è accurata, l'output dello strumento è stato verificato manualmente contro il debugger del kernel di Windows (WinDbg). Gli indirizzi degli oggetti e i livelli del signer PPL corrispondono esattamente alla verità del kernel.
main.cpp in Visual Studio o compila tramite MSVC.Release (x64).SeDebugPrivilege).Invece di codificare rigidamente l'indice del tipo di oggetto ALPC (che si rompe tra le diverse build di Windows), lo strumento crea una porta ALPC usa-e-getta e ne interroga il tipo dinamicamente per isolare l'indice corretto per il sistema host (ad esempio, Indice 46). Quando la duplicazione standard degli handle fallisce, decodifica PS_PROTECTION per estrarre il Type e il Signer esatti necessari a classificare le porte senza dipendere dai diritti di accesso.
Per una descrizione tecnica completa, ecco il link all'articolo su Medium: https://medium.com/@sphinx_321/userland-alpc-enumeration-dynamic-ppl-aware-approach-283541194102
Questo strumento fa parte della mia ricerca in corso su ALPC/RPC e gli internals di Windows. Pubblicherò ulteriori scoperte e rilascerò strumenti companion nel prossimo futuro. Se lo hai trovato utile, considera di seguirmi su GitHub o sui miei social qui sotto per essere notificato dei prossimi rilascio.