SROP - Sigreturn-Oriented Programming
Basiese Inligting
Sigreturn
is 'n spesiale syscall wat hoofsaaklik gebruik word om op te ruim nadat 'n seinhanterer sy uitvoering voltooi het. Signale is onderbrekings wat deur die bedryfstelsel na 'n program gestuur word, dikwels om aan te dui dat 'n buitengewone situasie plaasgevind het. Wanneer 'n program 'n sein ontvang, onderbreek dit tydelik sy huidige werk om die sein met 'n seinhanterer te hanteer, 'n spesiale funksie wat ontwerp is om met seine om te gaan.
Nadat die seinhanterer klaar is, moet die program sy vorige toestand hervat asof niks gebeur het nie. Dit is waar sigreturn
in die prentjie kom. Dit help die program om terug te keer van die seinhanterer en herstel die program se toestand deur die stapelraamwerk (die gedeelte van geheue wat funksie-oproepe en plaaslike veranderlikes stoor) wat deur die seinhanterer gebruik is, skoon te maak.
Die interessante deel is hoe sigreturn
die program se toestand herstel: dit doen dit deur al die CPU se registerwaardes op die stapel te stoor. Wanneer die sein nie meer geblokkeer word nie, haal sigreturn
hierdie waardes van die stapel af, wat die CPU se register effektief herstel na hul toestand voordat die sein hanteer is. Dit sluit die stapelpuntregister (RSP) in, wat na die huidige boonste gedeelte van die stapel wys.
Om die syscall sigreturn
vanaf 'n ROP-ketting te roep en die registerwaardes by te voeg wat ons wil hê dit in die stapel moet laai, is dit moontlik om al die registerwaardes te beheer en dus byvoorbeeld die syscall execve
met /bin/sh
te roep.
Let daarop dat hierdie 'n tipe Ret2syscall sou wees wat dit baie makliker maak om parameters te beheer om ander Ret2syscalls te roep:
pageRet2syscallAs jy nuuskierig is, hierdie is die sigcontext-struktuur wat op die stapel gestoor word om die waardes later te herstel (diagram van hier):
Vir 'n beter verduideliking, kyk ook:
Voorbeeld
Jy kan 'n voorbeeld hier vind waar die oproep na signeturn opgebou word via ROP (met die waarde 0xf
in rxa), alhoewel dit die finale aanval van daar af is:
Kyk ook na die exploit van hier af waar die binêre lêer reeds sigreturn
aanroep en dit dus nie nodig is om dit met 'n ROP te bou nie:
Ander Voorbeelde & Verwysings
Monteerbare binêre program wat toelaat om na die stok te skryf en dan die
sigreturn
systaamoproep aanroep. Dit is moontlik om op die stok 'n ret2syscall te skryf via 'n sigreturn struktuur en die vlag wat binne die geheue van die binêre program is, te lees.Monteerbare binêre program wat toelaat om na die stok te skryf en dan die
sigreturn
systaamoproep aanroep. Dit is moontlik om op die stok 'n ret2syscall te skryf via 'n sigreturn struktuur (die binêre program het die string/bin/sh
).64-bits, geen relro, geen kanarie, nx, geen pie. Eenvoudige buffer oorvloed wat die
gets
funksie misbruik met 'n gebrek aan gadgets wat 'n ret2syscall uitvoer. Die ROP-ketting skryf/bin/sh
in die.bss
deur weer gets te roep, dit misbruik diealarm
funksie om eax na0xf
te stel om 'n SROP aan te roep en 'n skaal uit te voer.64-bits monteerbare program, geen relro, geen kanarie, nx, geen pie. Die vloei maak dit moontlik om in die stok te skryf, verskeie registre te beheer, 'n systaamoproep te doen en dan
exit
te roep. Die gekose systaamoproep is 'nsigreturn
wat registre sal stel eneip
sal skuif om 'n vorige systaamoproep instruksie te roep enmemprotect
te hardloop om die binêre spasie narwx
te stel en die ESP in die binêre spasie te stel. Volgens die vloei sal die program weer intro ESP lees, maar in hierdie geval sal ESP na die volgende instruksie wys sodat die oordra van 'n skaal dit as die volgende instruksie sal skryf en dit sal uitvoer.SROP word gebruik om uitvoeringsregte (memprotect) te gee aan die plek waar 'n skaal geplaas is.
Last updated