Biblioteksåterkomstattack

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 3 april 2021; kontroller kräver 2 redigeringar .

Return -to-libc attack är en av  de typer av datorattacker som är populära på x86-kompatibla maskiner och liknande dem, relaterat till buffertspill , när returadressen för en funktion i stacken ersätts med adressen för en annan funktion i programmet, och parametrarna för den anropade funktionen skrivs till den efterföljande delen av stacken. Denna teknik gör det möjligt för en angripare att utföra vissa befintliga funktioner utan att behöva injicera skadlig kod i programmet.

GNU , GNU /Linux och andra UNIX -liknande operativsystem har ett delat bibliotek, libc, som tillhandahåller C- och POSIX- funktioner , till exempel system()för exekvering av godtyckliga program. Liknande bibliotek finns i Windows-familjen av operativsystem. Även om en angripare kan tvinga ett program att hoppa till vilken adress som helst, använder de flesta program (länkat till) libc, som har praktiska funktioner för att starta godtyckliga program. Därför är funktionerna i standardbiblioteket det mest troliga målet för sådana exploateringar , vilket gav namnet till klassen av attacker. Däremot kan andra returadresser användas, inklusive funktioner från andra bibliotek och/eller kodsnuttar (inklusive återgång till mitten av en instruktion [1] ), se Returorienterad programmering för detaljer .

Attack Defense

Den kodexekveringsskyddade stacken kan förhindra vissa utnyttjande av buffertspill, men inte återgå till biblioteket, eftersom denna attack utnyttjar körbar kod som redan finns i processens adressutrymme . Å andra sidan, till skillnad från klassisk skalkod , kan denna attack bara använda befintliga funktioner. Stack-krossande skydd från GCC (känd som ProPolice) och liknande skydd från andra system kan förhindra eller avsevärt komplicera denna attack, eftersom de upptäcker stacköverträdelser och eventuellt märker injicerad data.

Address Space Layout Randomization ( ASLR)-teknologin, som lägger till slumpmässighet till bibliotekens placering i processernas adressutrymme, gör denna typ av attack extremt svår och nästan värdelös på 64-bitarssystem, eftersom funktionsadresser blir slumpmässiga. För system med 32-bitars adressering är ASLR mindre användbart, eftersom endast cirka 16 bitar är tillgängliga för att lägga till slumpmässighet, och sådan slumpmässighet kan hanteras med brute force på några minuter. [2]

Som med vanliga buffertspill är denna attack mycket svårare för arkitekturer som inte lagrar returadressen på samma stack som data. Sådana arkitekturer är till exempel SPARC [1] , som lagrar returadressen från den aktuella funktionen i register %i7 , och MIPS (register $ra ). Attacken kanske inte är möjlig för processorer som lagrar registerfönster för tidigare funktioner i skuggregister, såsom PowerPC, där anropsstacken är implementerad som ett stapelbart (lagrar gamla värden i ett skuggområde oåtkomligt för programmeraren) register.

Liknande attacker

Tekniken " Returorienterad programmering " är en utveckling av idéerna bakom denna attack, och låter dig utföra mer komplexa åtgärder genom att sekventiellt kombinera flera mindre attacker, som var och en utför ett litet antal instruktioner åt gången. I denna teknik är det inte nödvändigt att använda övergångar till början av funktioner, men det är tillåtet att "återgå" till en instruktion som ligger inte långt från returstyrinstruktionen från funktionen (ret). Efter att ha kört ett fragment, kommer ret-kommandot att ta nästa adress från stacken och starta ett annat fragment med dess retur. Således, med hjälp av noggrann stacklayout, är det möjligt att skapa ganska komplexa sekvenser av instruktioner.

Se även

Anteckningar

  1. 1 2 Hovav Shacham: När bra instruktioner går dåliga . Hämtad 15 juni 2012. Arkiverad från originalet 16 maj 2018.
  2. Shacham, Hovav; Page, Matthew; Pfaff, Ben; Goh, Eu-Jin; Modadugu, Nagendra; och Boneh, Dan. "Om effektiviteten av randomisering av adressutrymme" (PDF) . Proceedings of Computer and Communications Security (CCS'04), 25–29 oktober 2004, Washington (DC) . Utfasad parameter används |coauthors=( hjälp ) Arkiverad 15 september 2011 på Wayback Machine

Länkar