Det er rom for å injisere kode mellom en applikasjon og dens eksterne biblioteker. Å gjøre det er ikke dårlig i seg selv, men det er en fin måte å gjøre skade på.

Når utviklere trenger å utvide funksjonaliteten til et program de ikke har kildekoden til, henvender de seg ofte til DLL-hooking. Dette er en uortodoks måte å få et program til å gjøre noe det ikke er ment å gjøre.

Saken er at hackere også bruker denne teknikken av alle de gale grunnene, som å våpen harmløse applikasjoner eller cracking av programvare. Så hva er DLL-hooking, og hvordan fungerer det egentlig?

Hva er en DLL?

Hver applikasjon er avhengig av at noen filer utenfor basiskoden kjøres. Disse eksterne filene inneholder kode og data et program trenger for å fungere skikkelig. Når noen av disse eksterne filene forsvinner, kan programmet ha stabilitetsproblemer eller direkte nekte å kjøre.

I Windows-operativsystemet kalles disse eksterne filene DLL eller dynamiske koblingsbiblioteker. Dynamiske koblingsbiblioteker er essensielle komponenter i Windows-operativsystemet, og gir gjenbrukbar kode og ressurser som kan deles på tvers av flere applikasjoner.

instagram viewer

Eksterne filer på Windows er kjent som biblioteker. Det er to typer biblioteker: dynamiske og statiske. Dynamiske biblioteker lastes ved kjøring og statiske biblioteker lastes ved kompilering. DLL er et dynamisk bibliotek.

Hva er DLL Hooking?

DLL-hooking er en teknikk som inkluderer avskjæring og endring av funksjonsanrop programmer eller prosesser gjør til en DLL. I bunn og grunn et Man-in-The-Middle-oppsett er etablert der en krok sitter mellom et program og DLL-ene det kaller. Alle eller målrettede funksjonsanrop blir deretter sporet og endret.

Her er et eksempel på en arbeidsflyt for DLL-hooking-angrep:

  1. Angriperen analyserer funksjonskallene fra programmet og DLL-filene det er avhengig av.
  2. Angriperen oppretter en krok ved å bruke en av de mange implementeringsteknikkene som IAT-hooking, inline-hooking, COM-hooking, etc.
  3. Vilkårlig kodekjøring skjer.
  4. Opprinnelig kjøring av funksjonskall kan skje eller ikke.
  5. Angriperen dekker sporene deres ved å slette kroken og tilbakestille alle endringer som er gjort.

DLL-hooking er en sofistikert teknikk som kan brukes både til gode (som utvidelse av programfunksjonalitet, feilsøking og logging) eller for dårlig (som å omgå sikkerhetstiltak, stjele sensitive data, utføre vilkårlig kode og skrive videospill hacks).

Hvordan fungerer DLL Hooking?

Før du går inn i implementeringen av DLL-hooking, er det viktig å rydde opp i det grunnleggende. La oss ta et skritt tilbake og forstå hva som skjer når et funksjonskall gjøres til en DLL av et program.

Når et program kaller en funksjon i en DLL, slår operativsystemet først opp funksjonens navn i programmets importadressetabell og henter funksjonens adresse fra DLL-ens eksportadresse Bord.

Når adressen til funksjonen er løst, kan programmet hoppe til adressen til funksjonen for å få tilgang til og utføre den. DLL-hooking dreier seg om å avskjære denne prosessen og omdirigere funksjonskallet til en annen funksjon. Det er flere måter å implementere DLL-hooking på. La oss se på de mest brukte teknikkene for å implementere det.

Dette kan bli ganske teknisk, så det kan hjelpe hvis du er en superbruker av Windows eller på annen måte har en sterk forståelse av Windows internt.

IAT Hooking

IAT-hooking er en effektiv teknikk som er mye brukt av skadevareforfattere for å omgå sikkerhetstiltak og unngå oppdagelse. Import Address Table (IAT) er en datastruktur som lastes inn i minnet hver gang en ny prosess opprettes. IAT inneholder navnene på alle de importerte funksjonskallene og deres minneadresser.

Når et program kaller en funksjon i DLL, søkes funksjonsnavnet først etter i IAT og hvis minneadressen til den nevnte funksjonen finnes ikke i IAT, da blir den etablert fra DLL-ens eksportadresse Bord.

Det er en datastruktur der alle funksjonene som eksporteres av DLL-en er tilordnet til minneadressene deres. Ved IAT-hooking kan en motstander endre IAT-en til en prosess og erstatte legitime funksjonstilordninger med ondsinnede som dermed forstyrrer den tiltenkte operasjonen og gjør at programmet kjøres vilkårlig kode.

Slik ser den generelle angrepsflyten i IAT-hooking ut:

  1. Et program foretar et funksjonsanrop.
  2. Funksjonsadressen er plassert i IAT.
  3. Siden IAT har blitt hektet; funksjonsadressen er endret, og minneplasseringen til en ondsinnet funksjon er lastet inn.
  4. Programmet hopper til stedet for den skadelige funksjonen og vilkårlig kode blir utført.
  5. Til slutt blir det opprinnelige funksjonskallet utført.

Inline Hooking

Inline hooking er en DLL hooking teknikk som innebærer å endre en målfunksjons kildekode for å dirigere dens utførelse til en spesiell funksjon. Inline Hooking, i motsetning til IAT-hooking, endrer målfunksjonens kode direkte, og gir angriperen mer presis kontroll over hvordan målfunksjonen oppfører seg.

I diagrammet ovenfor, observer hvordan den legitime funksjonen har blitt tuklet med for å peke på en ondsinnet funksjon. Når alle instruksjonene i den ondsinnede funksjonen er utført, utføres en hoppinstruksjon for å gå tilbake til den legitime funksjonen for at den skal fullføres.

Motstandere bruker inline hooking for å gjøre varige endringer i et program, for eksempel å endre parametere eller returverdien til en funksjon.

Microsoft-omveier

Microsoft Research har utviklet en intern DLL-hooking-pakke, Detours. Den gjør det mulig for programmerere å spore og endre funksjonsanrop gjort av et program. Omveier kan brukes til en rekke oppgaver, inkludert men ikke begrenset til: instrumentering, testing og feilretting.

Motstandere bruker Detours for å utføre DLL-injeksjon og hooking-angrep, og utviklere bruker det ofte for å utvide funksjonaliteten til appene deres. Du kan lære mer om Omveier-pakken på offisielle GitHub-depot.

Nå vet du hvordan DLL Hooking fungerer

DLL-hooking er en sofistikert teknikk som, når den brukes av de riktige grunnene, kan øke mulighetene til applikasjonen din eller hjelpe deg med å feilsøke og optimalisere programvare. Dessverre blir hooking oftere sett på i bruk som en motstridende teknikk i stedet for en utviklingsteknikk. Så det er viktig at du tar i bruk og følger de beste sikkerhetspraksisene for å sikre at applikasjonene dine er trygge og fri for angrep som hooking og injeksjon.