Bibliotekets returangreb

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 3. april 2021; checks kræver 2 redigeringer .

Return -to-libc-angreb er en af  ​​de typer computerangreb, der er populære på x86-kompatible maskiner og ligner dem, relateret til bufferoverløb , når returadressen for en funktion på stakken erstattes af adressen på en anden funktion i programmet, og parametrene for den kaldte funktion skrives til den efterfølgende del af stakken. Denne teknik gør det muligt for en angriber at udføre en eksisterende funktion uden at skulle injicere ondsindet kode i programmet.

GNU , GNU /Linux og andre UNIX -lignende operativsystemer har et delt bibliotek, libc, der giver C- og POSIX -funktioner , såsom system()til at udføre vilkårlige programmer. Lignende biblioteker findes i Windows-familien af ​​operativsystemer. Selvom en angriber kan tvinge et program til at hoppe til en hvilken som helst adresse, bruger de fleste programmer (linket til) libc, som har praktiske funktioner til at starte vilkårlige programmer. Derfor er funktionerne i standardbiblioteket det mest sandsynlige mål for sådanne udnyttelser , som gav navnet til klassen af ​​angreb. Andre returadresser kan dog bruges, inklusive funktioner fra andre biblioteker og/eller kodestykker (inklusive at vende tilbage til midten af ​​en instruktion [1] ), se Returorienteret programmering for detaljer .

Angrebsforsvar

Den kodeeksekveringsbeskyttede stak kan forhindre visse udnyttelser af bufferoverløb, men ikke vende tilbage til biblioteket, fordi dette angreb udnytter eksekverbar kode , der allerede findes i processens adresserum . På den anden side, i modsætning til klassisk shellcode , kan dette angreb kun bruge eksisterende funktioner. Stak-smashing beskyttelse fra GCC (kendt som ProPolice) og lignende beskyttelse fra andre systemer kan forhindre eller i høj grad komplicere dette angreb, da de opdager stak-overtrædelser og muligvis bemærker injicerede data.

Address Space Layout Randomization (ASLR) teknologien, som tilføjer tilfældighed til placeringen af ​​biblioteker i processernes adresserum, gør denne type angreb ekstremt vanskelig og næsten ubrugelig på 64-bit systemer, da funktionsadresser bliver tilfældige. For systemer med 32-bit adressering er ASLR mindre nyttigt, da kun omkring 16 bit er tilgængelige for at tilføje tilfældighed, og en sådan tilfældighed kan håndteres med brute force i løbet af få minutter. [2]

Som med almindelige bufferoverløb er dette angreb meget vanskeligere for arkitekturer, der ikke gemmer returadressen på den samme stak som dataene. Sådanne arkitekturer er for eksempel SPARC [1] , som gemmer returadressen fra den aktuelle funktion i register %i7 , og MIPS (register $ra ). Angrebet er muligvis ikke muligt for processorer, der gemmer registervinduer for tidligere funktioner i skyggeregistre, såsom PowerPC, hvor opkaldsstakken er implementeret som et stackbart (lagrer gamle værdier i et skyggeområde, der er utilgængeligt for programmøren) register.

Lignende angreb

Teknikken " Returorienteret programmering " er en udvikling af ideerne bag dette angreb og giver dig mulighed for at udføre mere komplekse handlinger ved sekventielt at kombinere flere mindre angreb, som hver udfører et lille antal instruktioner ad gangen. I denne teknik er det ikke nødvendigt at bruge overgange til begyndelsen af ​​funktioner, men det er tilladt at "vende tilbage" til en instruktion placeret ikke langt fra returkontrolinstruktionen fra funktionen (ret). Efter at have udført et fragment, vil ret-kommandoen tage den næste adresse fra stakken og starte et andet fragment med dets retur. Ved hjælp af et omhyggeligt staklayout er det således muligt at skabe ret komplekse sekvenser af instruktioner.

Se også

Noter

  1. 1 2 Hovav Shacham: When Good Instructions Go Bad . Hentet 15. juni 2012. Arkiveret fra originalen 16. maj 2018.
  2. Shacham, Hovav; Page, Matthew; Pfaff, Ben; Goh, Eu-Jin; Modadugu, Nagendra; og Boneh, Dan. "Om effektiviteten af ​​randomisering af adresse-rum" (PDF) . Proceedings of Computer and Communications Security (CCS'04), 25.-29. oktober 2004, Washington (DC) . Forældet parameter brugt |coauthors=( hjælp ) Arkiveret 15. september 2011 på Wayback Machine

Links