SROP - Sigreturn-Oriented Programming
Taarifa Msingi
Sigreturn
ni syscall maalum ambayo kimsingi hutumiwa kusafisha baada ya kikundi cha ishara kumaliza utekelezaji wake. Ishara ni mapumziko yanayotumwa kwa programu na mfumo wa uendeshaji, mara nyingi kumaanisha kuwa hali isiyo ya kawaida imejitokeza. Wakati programu inapokea ishara, kwa muda inasitisha kazi yake ya sasa kushughulikia ishara na mchakato wa ishara, kazi maalum iliyoundwa kushughulikia ishara.
Baada ya mchakato wa ishara kukamilika, programu inahitaji kuendelea na hali yake ya awali kana kwamba hakuna kitu kimetokea. Hapa ndipo sigreturn
inapoingia. Inasaidia programu kurudi kutoka kwa mchakato wa ishara na kurejesha hali ya programu kwa kusafisha fremu ya steki (sehemu ya kumbukumbu inayohifadhi wito wa kazi na pembejeo za ndani) ambayo ilitumiwa na mchakato wa ishara.
Sehemu inayovutia ni jinsi sigreturn
inavyorejesha hali ya programu: inafanya hivyo kwa kuhifadhi thamani zote za rejista za CPU kwenye steki. Ishara haipobanwa tena, sigreturn
inapitisha thamani hizi kutoka kwenye steki, ikirejesha kimsingi rejista za CPU kwa hali yake kabla ya ishara kushughulikiwa. Hii ni pamoja na rejista ya kidole cha steki (RSP), ambayo inaelekeza kwenye sehemu ya juu ya steki ya sasa.
Kuita syscall sigreturn
kutoka kwa mnyororo wa ROP na kuongeza thamani za rejista tungependa iweze kuzipakia kwenye steki inawezekana kudhibiti thamani zote za rejista na hivyo kuita kwa mfano syscall execve
na /bin/sh
.
Tafadhali angalia jinsi hii itakuwa aina ya Ret2syscall ambayo inafanya iwe rahisi kudhibiti vigezo vya kuita Ret2syscalls nyingine:
pageRet2syscallIkiwa una hamu hii ni muundo wa sigcontext uliohifadhiwa kwenye steki kwa kupona baadaye thamani (mtaalam kutoka hapa):
Kwa maelezo bora angalia pia:
Mfano
Unaweza kupata mfano hapa ambapo wito wa signeturn unajengwa kupitia ROP (kuweka thamani 0xf
kwa rxa), ingawa hii ni shambulizi la mwisho kutoka hapo:
Angalia pia exploit kutoka hapa ambapo binary ilikuwa tayari inaita sigreturn
na kwa hivyo haifai kujenga hiyo na ROP:
Mifano Mingine & Marejeo
Programu ya ushirikiano wa kufunga ambayo inaruhusu kuandika kwenye steki na kisha kuita syscall ya
sigreturn
. Inawezekana kuandika kwenye steki ret2syscall kupitia muundo wa sigreturn na kusoma bendera ambayo iko ndani ya kumbukumbu ya programu ya ushirikiano.Programu ya ushirikiano wa kufunga ambayo inaruhusu kuandika kwenye steki na kisha kuita syscall ya
sigreturn
. Inawezekana kuandika kwenye steki ret2syscall kupitia muundo wa sigreturn (programu ya ushirikiano ina mfuatano wa herufi/bin/sh
).Biti 64, hakuna relro, hakuna canary, nx, hakuna pie. Uvujaji rahisi wa steka unaoabuse kazi ya
gets
bila vifaa vya kutekeleza ret2syscall. Mnyororo wa ROP unaandika/bin/sh
katika.bss
kwa kuita tena gets, inatumia kazi yaalarm
kuweka eax kuwa0xf
ili kuita SROP na kutekeleza kifaa cha shell.Programu ya ushirikiano ya biti 64, hakuna relro, hakuna canary, nx, hakuna pie. Mchakato unaruhusu kuandika kwenye steki, kudhibiti vijenzi kadhaa, na kuita syscall na kisha kuita
exit
. Kifaa cha kuchaguliwa nisigreturn
ambacho kitaweka vijenzi na kuhamishaeip
ili kuita maagizo ya awali ya syscall na kukimbiamemprotect
kuweka nafasi ya programu kuwarwx
na kuweka ESP katika nafasi ya programu. Kufuata mchakato, programu itaita kusoma kwenye ESP tena, lakini katika kesi hii ESP itakuwa inaelekeza kwa maagizo yanayofuata hivyo kupitisha kifaa cha shell itaandika kama maagizo yanayofuata na kuyatekeleza.SROP hutumiwa kutoa ruhusa ya utekelezaji (memprotect) kwenye sehemu ambapo kifaa cha shell kilipowekwa.
Last updated