Există loc pentru a injecta cod între o aplicație și bibliotecile sale externe. A face acest lucru nu este în mod inerent rău, dar este o modalitate excelentă de a face rău.
Când dezvoltatorii trebuie să extindă funcționalitatea unui program pentru care nu au codul sursă, deseori apelează la conectarea DLL. Acesta este un mod neortodox de a face un program să facă ceva ce nu este destinat să facă.
Ideea este că hackerii folosesc această tehnică și din toate motivele greșite, cum ar fi armarea aplicațiilor inofensive sau spargerea software-ului. Deci, ce este conectarea DLL și cum funcționează de fapt?
Ce este un DLL?
Fiecare aplicație depinde de unele fișiere din afara codului său de bază pentru a rula. Aceste fișiere externe conțin cod și date de care un program are nevoie pentru a funcționa corect. Când oricare dintre aceste fișiere externe dispare, programul poate avea probleme de stabilitate sau poate refuza definitiv să ruleze.
În sistemul de operare Windows, aceste fișiere externe se numesc DLL sau biblioteci de link-uri dinamice. Bibliotecile de legături dinamice sunt componente esențiale ale sistemului de operare Windows, oferind cod și resurse reutilizabile care pot fi partajate în mai multe aplicații.
Fișierele externe pe Windows sunt cunoscute ca biblioteci. Există două tipuri de biblioteci: dinamice și statice. Bibliotecile dinamice sunt încărcate în timpul rulării, iar bibliotecile statice sunt încărcate în timpul compilării. DLL este o bibliotecă dinamică.
Ce este DLL Hooking?
Conectarea DLL este o tehnică care include interceptarea și modificarea apelurilor de funcții pe care programele sau procesele le fac către un DLL. In esenta o configurație Man-in-The-Middle este stabilit acolo unde un cârlig se află între un program și DLL-urile pe care le apelează. Toate apelurile de funcții sau cele vizate sunt apoi urmărite și modificate.
Iată un exemplu de flux de lucru pentru atacul prin conectarea DLL:
- Atacatorul analizează apelurile de funcții efectuate de program și fișierele DLL de care depinde.
- Atacatorul creează un hook folosind una dintre numeroasele tehnici de implementare, cum ar fi conectarea IAT, conectarea inline, conectarea COM etc.
- Are loc execuția de cod arbitrar.
- Execuția originală a apelului de funcție se poate întâmpla sau nu.
- Atacatorul își acoperă urmele ștergând cârligul și anulând toate modificările făcute.
Conectarea DLL este o tehnică sofisticată care poate fi folosită atât pentru bine (cum ar fi extinderea funcționalității programului, depanarea și înregistrare) sau pentru rău (cum ar fi ocolirea măsurilor de securitate, furtul de date sensibile, executarea de cod arbitrar și scrierea de jocuri video hack-uri).
Cum funcționează DLL Hooking?
Înainte de a vă scufunda în implementarea agățării DLL, este important să clarificați elementele de bază. Să facem un pas înapoi și să înțelegem ce se întâmplă atunci când un apel de funcție este efectuat la un DLL de către un program.
Când un program apelează o funcție dintr-o DLL, sistemul de operare caută mai întâi numele funcției în tabelul de adrese de import al programului și obține adresa funcției din adresa de export a DLL-ului Masa.
Odată ce adresa funcției este rezolvată, programul poate sări la adresa funcției pentru a o accesa și executa. Conectarea DLL se învârte în jurul interceptării acestui proces și redirecționarea apelului de funcție către o altă funcție. Există mai multe moduri de a implementa conectarea DLL. Să ne uităm la tehnicile cele mai frecvent utilizate pentru implementarea acestuia.
Acest lucru poate deveni destul de tehnic, așa că vă poate ajuta dacă dvs sunteți un utilizator puternic de Windows sau, altfel, aveți o înțelegere puternică a elementelor interne Windows.
IAT Hooking
Conectarea IAT este o tehnică eficientă utilizată pe scară largă de autorii de programe malware pentru a evita măsurile de securitate și a evita detectarea. Import Address Table (IAT) este o structură de date care este încărcată în memorie ori de câte ori este creat un nou proces. IAT conține numele tuturor apelurilor de funcții importate și adresele lor de memorie.
Când un program apelează o funcție în DLL, numele funcției este mai întâi căutat în IAT și dacă adresa de memorie a funcției menționate nu este găsită în IAT, apoi este stabilită din adresa de export a DLL-ului Masa.
Este o structură de date în care toate funcțiile exportate de DLL sunt mapate la adresele lor de memorie. În conectarea IAT, un adversar poate modifica IAT-ul unui proces și poate înlocui mapările de funcții legitime cu cele rău intenționate, perturbând astfel operațiunea intenționată și făcând programul să se execute arbitrar cod.
Iată cum arată fluxul general de atac în hooking IAT:
- Un program efectuează un apel de funcție.
- Adresa funcției se află în IAT.
- Din moment ce IAT-ul a fost cuplat; adresa funcției a fost modificată și locația de memorie a unei funcții rău intenționate este încărcată.
- Programul sare la locația funcției rău intenționate și este executat un cod arbitrar.
- În cele din urmă, apelul original al funcției este executat.
Agățare în linie
Conectarea inline este o tehnică de conectare a DLL care implică modificarea codului sursă al unei funcții țintă pentru a direcționa execuția acesteia către o funcție specială. Inline Hooking, spre deosebire de hooking IAT, modifică direct codul funcției țintă, oferind atacatorului un control mai precis asupra modului în care se comportă funcția țintă.
În diagrama de mai sus, observați modul în care funcția legitimă a fost modificată pentru a indica o funcție rău intenționată. Odată ce toate instrucțiunile din funcția rău intenționată sunt executate, se face o instrucțiune de salt pentru a reveni la funcția legitimă pentru ca aceasta să se termine de execuție.
Adversarii folosesc conectarea inline pentru a face modificări de durată la un program, cum ar fi modificarea parametrilor sau a valorii returnate a unei funcții.
Microsoft Detours
Microsoft Research a dezvoltat un pachet intern de conectare DLL, Detours. Permite programatorilor să urmărească și să modifice apelurile de funcții efectuate de un program. Ocolurile pot fi utilizate pentru o varietate de sarcini, inclusiv, dar fără a se limita la: instrumentare, testare și remediere a erorilor.
Adversarii folosesc Detours pentru a efectua atacuri de injectare și hooking DLL, iar dezvoltatorii îl folosesc frecvent pentru a extinde funcționalitatea aplicațiilor lor. Puteți afla mai multe despre pachetul Detours pe site-ul depozitul oficial GitHub.
Acum știți cum funcționează DLL Hooking
Conectarea DLL este o tehnică sofisticată care, atunci când este utilizată din motivele potrivite, poate crește capacitățile aplicației dvs. sau vă poate ajuta să depanați și să optimizați software-ul. Din păcate, agățarea este văzută mai frecvent ca o tehnică adversară, mai degrabă decât una de dezvoltare. Așadar, este important să adoptați și să respectați cele mai bune practici de securitate, asigurându-vă că aplicațiile dvs. sunt sigure și lipsite de atacuri precum hooking și injectare.