C'è spazio per inserire codice tra un'applicazione e le sue librerie esterne. Farlo non è intrinsecamente negativo, ma è un ottimo modo per fare del male.

Quando gli sviluppatori devono estendere la funzionalità di un programma di cui non dispongono del codice sorgente, spesso si rivolgono all'hooking DLL. Questo è un modo non ortodosso di far fare a un programma qualcosa che non dovrebbe fare.

Il fatto è che gli hacker usano questa tecnica anche per tutte le ragioni sbagliate, come armare applicazioni innocue o crackare software. Quindi cos'è l'hooking DLL e come funziona effettivamente?

Che cos'è una DLL?

Ogni applicazione dipende da alcuni file al di fuori del suo codice di base per essere eseguita. Questi file esterni contengono codice e dati di cui un programma ha bisogno per funzionare correttamente. Quando uno di questi file esterni scompare, il programma potrebbe avere problemi di stabilità o rifiutarsi completamente di essere eseguito.

Nel sistema operativo Windows, questi file esterni sono chiamati DLL o librerie a collegamento dinamico. Le librerie a collegamento dinamico sono componenti essenziali del sistema operativo Windows e forniscono codice riutilizzabile e risorse che possono essere condivise tra più applicazioni.

instagram viewer

I file esterni su Windows sono noti come librerie. Esistono due tipi di librerie: dinamica e statica. Le librerie dinamiche vengono caricate in fase di esecuzione e le librerie statiche vengono caricate in fase di compilazione. DLL è una libreria dinamica.

Cos'è l'aggancio DLL?

L'hooking DLL è una tecnica che include l'intercettazione e l'alterazione delle chiamate di funzione che i programmi o i processi apportano a una DLL. Essenzialmente una configurazione Man-in-The-Middle viene stabilito dove un hook si trova tra un programma e le DLL che chiama. Tutte le chiamate di funzione o mirate vengono quindi tracciate e modificate.

Ecco un esempio di un flusso di lavoro di attacco hooking DLL:

  1. L'aggressore analizza le chiamate di funzione effettuate dal programma ei file DLL da cui dipende.
  2. L'attaccante crea un hook utilizzando una delle tante tecniche di implementazione come IAT hooking, inline hooking, COM hooking, ecc.
  3. Si verifica l'esecuzione di codice arbitrario.
  4. L'esecuzione della chiamata di funzione originale può avvenire o meno.
  5. L'aggressore copre le proprie tracce cancellando il gancio e ripristinando tutte le modifiche apportate.

L'hooking DLL è una tecnica sofisticata che può essere utilizzata sia per il bene (come l'estensione della funzionalità del programma, il debug e logging) o male (come aggirare le misure di sicurezza, rubare dati sensibili, eseguire codice arbitrario e scrivere videogiochi trucchi).

Come funziona l'hooking DLL?

Prima di immergersi nell'implementazione dell'hooking DLL, è importante chiarire le basi. Facciamo un passo indietro e capiamo cosa succede quando un programma effettua una chiamata di funzione a una DLL.

Quando un programma chiama una funzione in una DLL, il sistema operativo prima cerca il nome della funzione in la tabella degli indirizzi di importazione del programma e ottiene l'indirizzo della funzione dall'indirizzo di esportazione della DLL Tavolo.

Una volta risolto l'indirizzo della funzione, il programma può saltare all'indirizzo della funzione per accedervi ed eseguirla. L'hooking DLL ruota attorno all'intercettazione di questo processo e al reindirizzamento della chiamata di funzione a una funzione diversa. Esistono diversi modi per implementare l'hook DLL. Diamo un'occhiata alle tecniche più comunemente utilizzate per implementarlo.

Questo può diventare piuttosto tecnico, quindi potrebbe essere d'aiuto se tu sei un utente esperto di Windows o altrimenti avere una forte conoscenza degli interni di Windows.

Agganciamento IAT

L'hooking IAT è una tecnica efficace ampiamente utilizzata dagli autori di malware per aggirare le misure di sicurezza ed eludere il rilevamento. La tabella degli indirizzi di importazione (IAT) è una struttura dati che viene caricata in memoria ogni volta che viene creato un nuovo processo. IAT contiene i nomi di tutte le chiamate di funzione importate e i loro indirizzi di memoria.

Quando un programma chiama una funzione nella DLL, il nome della funzione viene prima cercato nello IAT e se il file l'indirizzo di memoria della suddetta funzione non viene trovato nello IAT, quindi viene stabilito dall'indirizzo di esportazione della DLL Tavolo.

È una struttura dati in cui tutte le funzioni esportate dalla DLL sono mappate ai loro indirizzi di memoria. Nell'hooking IAT, un avversario può modificare l'IAT di un processo e sostituire le mappature di funzioni legittime con quelli dannosi, interrompendo così l'operazione prevista e rendendo arbitraria l'esecuzione del programma codice.

Ecco come appare il flusso di attacco generale nell'aggancio IAT:

  1. Un programma effettua una chiamata di funzione.
  2. L'indirizzo della funzione si trova nello IAT.
  3. Dal momento che lo IAT è stato agganciato; l'indirizzo della funzione è stato modificato e viene caricata la posizione di memoria di una funzione dannosa.
  4. Il programma passa alla posizione della funzione dannosa e viene eseguito codice arbitrario.
  5. Infine, viene eseguita la chiamata alla funzione originale.

Aggancio in linea

L'hooking inline è una tecnica di hooking DLL che prevede l'alterazione del codice sorgente di una funzione di destinazione per indirizzarne l'esecuzione a una funzione speciale. L'inline hooking, al contrario dell'hooking IAT, altera direttamente il codice della funzione target, dando all'aggressore un controllo più preciso sul comportamento della funzione target.

Nel diagramma sopra, osserva come la funzione legittima è stata manomessa per puntare a una funzione dannosa. Una volta eseguite tutte le istruzioni nella funzione dannosa, viene eseguita un'istruzione di salto per tornare alla funzione legittima affinché termini l'esecuzione.

Gli avversari utilizzano l'hooking in linea per apportare modifiche durature a un programma, ad esempio modificando i parametri o il valore di ritorno di una funzione.

Deviazioni Microsoft

Microsoft Research ha sviluppato un pacchetto di hook DLL interno, Detours. Consente ai programmatori di tenere traccia e modificare le chiamate di funzione effettuate da un programma. Le deviazioni possono essere utilizzate per una varietà di attività, incluse ma non limitate a: strumentazione, test e correzione di bug.

Gli avversari utilizzano Detours per eseguire attacchi DLL injection e hooking e gli sviluppatori lo utilizzano spesso per estendere la funzionalità delle loro app. Puoi saperne di più sul pacchetto Detours su repository GitHub ufficiale.

Ora sai come funziona l'hooking DLL

L'hooking DLL è una tecnica sofisticata che, se utilizzata per i giusti motivi, può aumentare le capacità della tua applicazione o aiutarti a eseguire il debug e ottimizzare il software. Sfortunatamente, l'aggancio è più comunemente visto in uso come una tecnica avversaria piuttosto che di sviluppo. Pertanto, è importante adottare e rispettare le best practice di sicurezza per garantire che le applicazioni siano sicure e prive di attacchi come hooking e injection.