Esecuzione di Codice Nascosta
Hunt & Hackett presenta un insieme di strumenti e documenti tecnici che descrivono tecniche di attacco basate sull'occultamento dell'esecuzione di codice su Windows. Qui troverai spiegazioni su come funzionano queste tecniche, consigli per il rilevamento e codice sorgente di esempio per testare la tua copertura di rilevamento.
Contenuto
Questo repository copre due classi di tecniche di attacco che utilizzano estesamente i meccanismi interni di Windows e fornisce suggerimenti e strumenti per rilevarli:
- Process Tampering - un insieme di tecniche che nascondono il codice a livello dell'intero processo.
- Code Injection - una raccolta di trucchi che consentono di eseguire codice come parte di altri processi senza interferire con la loro funzionalità.
- Detection - una raccolta di raccomandazioni per difendersi da varie tecniche di occultamento dell'esecuzione di codice.
I valori fondamentali del progetto:
- L'approccio sistematico. Questo repository include più di una semplice raccolta di strumenti o collegamenti a risorse esterne. Ogni argomento riceve una spiegazione dettagliata dei concetti sottostanti; ogni caso specifico viene classificato in categorie generiche.
- Strumentazione proof-of-concept. I documenti sono accompagnati da progetti di esempio in C che dimostrano l'uso delle funzionalità descritte nella pratica.
- Da principiante a professionista. Non è necessario essere un esperto di cybersecurity per comprendere i concetti che descriviamo. Tuttavia, anche i professionisti del settore dovrebbero trovare il contenuto prezioso e formativo grazie all'attenzione ai dettagli e alle insidie.
Implementazione
Una caratteristica distintiva finale di questo progetto è l'uso estensivo di Native API in tutti gli esempi. Ecco la motivazione di questa scelta:
- Funzionalità. Alcune operazioni necessarie per le tecniche più avanzate (come il Process Tampering) non sono esposte tramite altre API.
- Controllo. Essendo il livello più basso di interazione con il sistema operativo, fornisce il massimo controllo sul suo comportamento. L'API Win32 è implementata sopra Native API, quindi tutto ciò che è possibile ottenere con la prima è possibile anche con la seconda.
- Disponibilità. Essendo esposta da ntdll.dll, Native API è disponibile in tutti i processi, inclusi quelli di sistema.
- Coerenza. Le interfacce esposte da questa API sono notevolmente coerenti. Dopo aver appreso le scelte di progettazione fondamentali, diventa possibile prevedere correttamente la maggior parte dei prototipi di funzione solo dal nome dell'API.
- Resistenza all'hooking. È sostanzialmente più semplice rimuovere o bypassare gli hook in modalità utente utilizzando Native API, accecando parzialmente il software di sicurezza. Non ci sono librerie di livello inferiore che potrebbero essere patchate, quindi l'unhooking diventa semplice come caricare una seconda istanza di ntdll.dll e reindirizzare le chiamate lì.
Note sulla compilazione
Il codice di esempio utilizza gli header Native API forniti dal progetto PHNT. Assicurati di clonare il repository usando il comando git clone --recurse-submodules per ottenere questa dipendenza. In alternativa, puoi usare git submodule update --init dopo aver clonato il repository.
Per compilare i progetti inclusi nel repository, avrai bisogno di una versione recente di Windows SDK. Se usi Visual Studio, consulta l'installazione SDK integrata. In alternativa, puoi anche utilizzare l'ambiente di compilazione standalone di EWDK. Per compilare tutti gli strumenti in una volta, usa MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64.