Der er plads til at injicere kode mellem en applikation og dens eksterne biblioteker. At gøre det er ikke i sig selv dårligt, men det er en fantastisk måde at gøre skade på.

Når udviklere skal udvide funktionaliteten af ​​et program, de ikke har kildekoden til, henvender de sig ofte til DLL-hooking. Dette er en uortodoks måde at få et program til at gøre noget, det ikke er beregnet til.

Sagen er, at hackere også bruger denne teknik af alle de forkerte årsager, som f.eks. at våben harmløse applikationer eller cracking af software. Så hvad er DLL hooking, og hvordan fungerer det egentlig?

Hvad er en DLL?

Hver applikation afhænger af, at nogle filer uden for dens basiskode kan køre. Disse eksterne filer indeholder kode og data, som et program skal bruge for at fungere korrekt. Når nogen af ​​disse eksterne filer forsvinder, kan programmet have stabilitetsproblemer eller direkte nægte at køre.

I Windows-operativsystemet kaldes disse eksterne filer DLL eller dynamiske linkbiblioteker. Dynamiske linkbiblioteker er væsentlige komponenter i Windows-operativsystemet, der giver genbrugelig kode og ressourcer, der kan deles på tværs af flere applikationer.

instagram viewer

Eksterne filer på Windows er kendt som biblioteker. Der er to typer biblioteker: dynamiske og statiske. Dynamiske biblioteker indlæses ved kørsel, og statiske biblioteker indlæses ved kompilering. DLL er et dynamisk bibliotek.

Hvad er DLL Hooking?

DLL-hooking er en teknik, der omfatter opsnapning og ændring af funktionsopkald, programmer eller processer foretager til en DLL. I det væsentlige en Man-in-The-Middle-opsætning etableres, hvor en krog sidder mellem et program og de DLL'er, det kalder. Alle eller målrettede funktionsopkald spores og ændres derefter.

Her er et eksempel på et DLL-hoking-angrebs-workflow:

  1. Angriberen analyserer funktionskaldene foretaget af programmet og de DLL-filer, det afhænger af.
  2. Angriberen opretter en hook ved hjælp af en af ​​de mange implementeringsteknikker som IAT hooking, inline hooking, COM hooking osv.
  3. Vilkårlig kodeudførelse sker.
  4. Den oprindelige udførelse af funktionskald kan ske eller ikke.
  5. Angriberen dækker over deres spor ved at slette krogen og vende alle ændringer tilbage.

DLL-hooking er en sofistikeret teknik, der kan bruges både til gavn (såsom udvidelse af programfunktionalitet, fejlretning og logning) eller for dårlige (såsom at omgå sikkerhedsforanstaltninger, stjæle følsomme data, udføre vilkårlig kode og skrive videospil hacks).

Hvordan virker DLL Hooking?

Før du dykker ned i implementeringen af ​​DLL-hooking, er det vigtigt at rydde op i det grundlæggende. Lad os tage et skridt tilbage og forstå, hvad der sker, når et funktionskald foretages til en DLL af et program.

Når et program kalder en funktion i en DLL, slår operativsystemet først funktionens navn op i programmets importadressetabel og henter funktionens adresse fra DLL'ens eksportadresse Bord.

Når adressen til funktionen er løst, kan programmet springe til funktionens adresse for at få adgang til og udføre den. DLL-hooking drejer sig om at opsnappe denne proces og omdirigere funktionskaldet til en anden funktion. Der er flere måder at implementere DLL-hooking på. Lad os se på de mest almindeligt anvendte teknikker til at implementere det.

Dette kan blive ret teknisk, så det kan hjælpe, hvis du er en Windows power-bruger eller på anden måde har en stærk forståelse af Windows internt.

IAT Hooking

IAT-hooking er en effektiv teknik, der i vid udstrækning anvendes af malware-forfattere til at omgå sikkerhedsforanstaltninger og undgå opdagelse. Importadressetabellen (IAT) er en datastruktur, der indlæses i hukommelsen, hver gang en ny proces oprettes. IAT indeholder navnene på alle de importerede funktionskald og deres hukommelsesadresser.

Når et program kalder en funktion i DLL'en, søges der først efter funktionsnavnet i IAT'en, og hvis hukommelsesadressen for den nævnte funktion findes ikke i IAT'en, så etableres den fra DLL'ens eksportadresse Bord.

Det er en datastruktur, hvor alle de funktioner, der eksporteres af DLL'en, er kortlagt til deres hukommelsesadresser. Ved IAT-hooking kan en modstander ændre IAT'en for en proces og erstatte lovlige funktionstilknytninger med ondsindede, hvilket forstyrrer den tilsigtede operation og gør programmet vilkårlig afviklet kode.

Sådan ser det generelle angrebsflow i IAT-hooking ud:

  1. Et program foretager et funktionskald.
  2. Funktionsadressen er placeret i IAT.
  3. Siden IAT er blevet tilsluttet; funktionsadressen er blevet ændret, og hukommelsesplaceringen for en ondsindet funktion indlæses.
  4. Programmet hopper til placeringen af ​​den ondsindede funktion, og vilkårlig kode udføres.
  5. Til sidst udføres det oprindelige funktionskald.

Inline Hooking

Inline hooking er en DLL hooking teknik, der involverer ændring af en målfunktions kildekode for at dirigere dens eksekvering til en speciel funktion. Inline Hooking, i modsætning til IAT-hooking, ændrer målfunktionens kode direkte, hvilket giver angriberen mere præcis kontrol over, hvordan målfunktionen opfører sig.

I diagrammet ovenfor kan du se, hvordan den legitime funktion er blevet manipuleret for at pege på en ondsindet funktion. Når alle instruktionerne i den ondsindede funktion er udført, bliver der lavet en hop-instruktion for at vende tilbage til den legitime funktion, så den kan afslutte eksekveringen.

Modstandere anvender inline hooking til at foretage varige ændringer af et program, såsom at ændre parametrene eller returværdien af ​​en funktion.

Microsoft Omveje

Microsoft Research har udviklet en intern DLL-hooking-pakke, Detours. Det gør det muligt for programmører at spore og ændre funktionsopkald foretaget af et program. Omveje kan bruges til en række opgaver, herunder, men ikke begrænset til: instrumentering, test og fejlretning.

Modstandere bruger Detours til at udføre DLL-injektion og hooking-angreb, og udviklere bruger det ofte til at udvide funktionaliteten af ​​deres apps. Du kan lære mere om pakken Omveje på officielt GitHub-lager.

Nu ved du, hvordan DLL Hooking fungerer

DLL-hooking er en sofistikeret teknik, der, når den bruges af de rigtige årsager, kan øge din applikations muligheder eller hjælpe dig med at fejlsøge og optimere software. Desværre ses hooking mere almindeligt i brug som en modstridende teknik frem for en udviklingsteknik. Så det er vigtigt, at du vedtager og overholder de bedste sikkerhedsmetoder, der sikrer, at dine applikationer er sikre og fri for angreb som hooking og injection.