Fråga:
Är ASLR värdelöst för att förhindra attacker som return-to-libc i Linux?
DrPrItay
2017-01-21 19:58:54 UTC
view on stackexchange narkive permalink

Om jag stämmer laddar vi libc till någon slumpmässig adress på grund av ASLR. Och för att få det att hända utan att tillåta skrivbehörighet för textsidor i minnet använder vi plt / got. Nu kan jag helt enkelt hoppa tillbaka till någon libc @ plt-funktion som är välkänd innan programmet körs och kringgå det ganska mycket. Så gör return-to-plt hela konceptet värdelöst?

Två svar:
forest
2017-12-16 10:54:34 UTC
view on stackexchange narkive permalink

Ja, om PIE är inaktiverat. Det sägs ofta att ASLRs effektivitet minskar avsevärt för applikationer som inte kompileras med PIE-stöd (Position Independent Code). När PIE inte används måste programmet förlita sig på en fast PLT, skapad under länkning för att lösa adresserna till funktioner i delade bibliotek. När ASLR används och PIE är aktiverat mildras kodåteranvändningsattacker i allmänhet, även om infoleaks fortfarande är så allestädes närvarande att ASLR ofta kan besegras med sidokanalattacker, vilket gör det nära värdelöst mot lokala skadlig kod och begränsar dess effektivitet till attacker över nätverket och skriptfria exploater. Det finns flera andra anledningar till att ASLR utan PIE är svagare och varför mindre randomisering används, som förklarade i ett annat svar.

hax
2017-01-21 21:08:05 UTC
view on stackexchange narkive permalink

return to plt och return to libc är något annorlunda attacker.

Återgå till libc

Ett av sätten att förhindra buffertöverflöd är att använda en icke körbar stack. För att göra en icke körbar stack använder de från CPU &-systemnivå något som kallas NX-bit. Om NX-bit är inställd kan den minnesadressen inte köras. Även om vi utför ett buffertöverflöde och skriver över stacken för att omdirigera returpekaren till stack där vår skalkod finns, skulle inte shell-koden köras eftersom den skulle finnas i stacken - vilket är ett icke-körbart minnesavsnitt.

Det här är när vi använder return to libc attack för att skapa ett skal. Istället för att använda det klassiska tillvägagångssättet för att skriva över returadressen till adressen till shell-kod använder vi adressen till libc system () -anropet.

Återgå till PLT

ASLR eller randomisering av adressutrymme är en annan metod för att kontrollera buffertöverflöden. Som jag sa i föregående avsnitt kringgår människor NX genom att hitta körbara filer som laddas till minnet av system.like libc. Detta var möjligt eftersom det var lätt att identifiera platsen för systemladdade körbara filer. ASLR randomiserade adressen till dessa körbara filer och minskade därmed sannolikheten för att leka ett skal genom att omdirigera till dem.

Anledningen till att denna attack är möjlig är att i körbara filer med dynamiskt länkade bibliotek kan libc-funktionsadressen erhållas från PLT och GOT. PLT-adressen är inte slumpmässig och det gör attacken enkel.

du säger mycket här men du säger i princip ingenting lol
tillbaka till PLT gör det möjligt att attackera.Men det krävs för att dynamiskt länka bibliotek till en körning
Förlåt mig om jag gör det tvetydigt.Läs följande https://sploitfun.wordpress.com/2015/05/08/bypassing-aslr-part-i/
För det första var min fråga inte vad buffertöverflöd är eller hur man utnyttjar buffertöverflöde eller vad nx-bit är, tack för att du berättade för mig saker jag redan vet, min fråga var enkel - eftersom användning av plt betyder att du använder fasta adresser som är kända före körning - ASLR blir värdelös - randomisering av adressen libc laddas in för att förhindra återgång till libc-attacker, jag letar efter någon att förklaraför mig om jag fick den delen fel, håll dig till den här frågan snälla
Jag vet att bloggen, blogginlägget jag inte behöver förklara vad aslr eller nx bit är
Först och främst fick du begreppet fel i själva frågan.Det var därför jag var tvungen att förklara varför återvända till libc och returnera till PLT är olika.1. När du använder ASLR laddas libc-funktionerna i slumpmässiga adresser.Men förskjutningen av libc-funktioner från libc-basadressen ändras inte.Med andra ord ändras inte ordningen på libc-funktioner.2. PLT är den gissningsbara adressen här.PLT är gissningsbart och PLT pekar på libc-adressen.Eftersom PLT inte slumpmässigt görs randomisering av libc-körbar adress värdelös
Kort sagt, ja, tillbaka till PLT gör allt värdelöst.Men det är det minsta för att dynamiskt länka bibliotek och det förklaras i blogginlägget.Därför gav jag dig den länken i första hand :)
lol varför har jag begreppet fel ?, som attacker skulle jag kunna överföra en buffert till adressen till en tidigare känd libc-funktion om ingen ASLR används (return-to-libc) och om den används kan jag bara överskrida returenadress för att vara system@plt som borde vara gissningsbar / känd före körning, vad är skillnaden?båda tar fördelar av ROP


Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...