Metodi per iniettare DLL dannose per eseguire il file exe ed eseguirlo

3

Sto cercando di trovare tutte le vulnerabilità nel mio sistema.

Supponiamo che un utente malintenzionato abbia il file eseguibile ( .exe file) della mia applicazione .NET (C #) e una DLL dannosa da lui creata. La DLL può essere iniettata nel mio eseguibile per eseguire il codice contenuto nella DLL?

    
posta Mr. Question 15.05.2014 - 07:45
fonte

2 risposte

2

L' articolo di Wikipedia riguardante l'iniezione di Dll ha ben fatto il riassunto di diverse tecniche.

Per riassumere:

  • Puoi elencare una dll sotto HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs e verrà caricata in ogni (nuovo) processo che si collega a user32.dll (praticamente ogni processo in modalità utente)
  • Sfruttare un punto debole in una funzione che carica erroneamente una libreria per percorso (in genere, posizionando una DLL caricata dal processo di destinazione più in alto nel percorso di ricerca) o semplicemente sostituendo una libreria esistente da sola.
  • Tramite CreateRemoteThread o CreateRemoteThreadEx . Questo è un po 'più complesso (e interessante) ma consente di farlo per i processi esistenti.
  • Tramite SetWindowsHookEx . Questo è il modo più semplice per farlo con un processo in esecuzione IMNSHO.
  • Sospendere un thread e cambiarne il contesto con il tuo codice.
  • Scrivere un shim .
risposta data 15.05.2014 - 11:58
fonte
1

Sì, ci sono diverse possibilità per farlo e una parte molto ampia degli attacchi si basa sull'aggancio della DLL.

E questa è anche la causa, perché le versioni di windows più recenti e più recenti contengono politiche più rigide e più severe sulla gestione delle DLL.

L'obiettivo principale è creare una falso dll, che avvolge solo alcune delle chiamate API nella sua DLL originale, e fa anche qualche altra cosa. L'obiettivo dell'aggressore è in questi casi di caricare la versione contraffatta dell'applicazione da crackare, rispetto alla versione originale.

L'alternativa a questa soluzione è, quando la DLL originale ottiene un qualche tipo di hack binario. È più difficile.

Il funzionamento interno della dll collegata è il seguente:

  • aperto: apre anche la dll originale, non modificata con una chiamata dllopen() , e trova anche l'indirizzo delle chiamate api
  • contiene anche la versione falsa delle chiamate api con hook

Come si può iniettare la dll collegata nell'app?

La soluzione più comune è solo quella di metterlo nella stessa directory dove vive l'exe da agganciare. All'avvio di un eseguibile, windows cerca sempre le sue DLL sempre nella stessa directory. Questo è ciò che viene fatto dalla maggior parte delle crepe di protezione / attivazione della copia del software.

Una seconda possibilità è quella di mettere il wrapper dll da qualche parte nel PERCORSO, ma ancora prima di C:\windows\... . Le DLL vengono cercate nel PATH, come pure gli eseguibili.

Una terza possibilità è quella di usare un debugger, o l'API di Windows originariamente pensata per il debug. Con esso è possibile manipolare il codice di apertura DLL dell'esecuzione corrente. È anche difficile, anche se è anche molto utile.

    
risposta data 15.05.2014 - 11:28
fonte

Leggi altre domande sui tag