Double Free
Basic Information
Ikiwa unachomoa block ya kumbukumbu zaidi ya mara moja, inaweza kuharibu data ya allocator na kufungua mlango wa mashambulizi. Hapa kuna jinsi inavyotokea: unapochomoa block ya kumbukumbu, inarudi kwenye orodha ya vipande vya bure (mfano "fast bin"). Ikiwa unachomoa block ile ile mara mbili mfululizo, allocator inagundua hili na kutupa kosa. Lakini ikiwa unachomoa kipande kingine katikati, ukaguzi wa double-free unakwepwa, na kusababisha uharibifu.
Sasa, unapofanya ombi la kumbukumbu mpya (ukitumia malloc
), allocator inaweza kukupa block ambayo imeondolewa mara mbili. Hii inaweza kusababisha viashiria viwili tofauti kuashiria eneo moja la kumbukumbu. Ikiwa mshambuliaji anadhibiti mmoja wa viashiria hivyo, wanaweza kubadilisha maudhui ya kumbukumbu hiyo, ambayo inaweza kusababisha matatizo ya usalama au hata kuwapa uwezo wa kutekeleza msimbo.
Example:
Katika mfano huu, baada ya kujaza tcache na vipande vingi vilivyofutwa (7), msimbo unafuta kipande h
, kisha kipande i
, na kisha h
tena, na kusababisha double free (pia inajulikana kama Fast Bin dup). Hii inafungua uwezekano wa kupokea anwani za kumbukumbu zinazoviana wakati wa reallocating, ikimaanisha viashiria viwili au zaidi vinaweza kuelekeza kwenye eneo moja la kumbukumbu. Kupanua data kupitia kiashiria kimoja kunaweza kuathiri kingine, na kuunda hatari kubwa ya usalama na uwezekano wa unyakuzi.
Ukitekeleza, angalia jinsi i1
na i2
zilipata anwani sawa:
Mifano
Tunaweza tu kugawa vipande vya Fast-Bin isipokuwa kwa saizi
0x70
, ambayo inazuia kawaida__malloc_hook
kuandikwa upya.Badala yake, tunatumia anwani za PIE zinazohakikisha kuanzia na
0x56
kama lengo la Fast Bin dup (1/2 nafasi).Mahali moja ambapo anwani za PIE zinahifadhiwa ni katika
main_arena
, ambayo iko ndani ya Glibc na karibu na__malloc_hook
Tunalenga offset maalum ya
main_arena
ili kugawa kipande huko na kuendelea kugawa vipande hadi kufikia__malloc_hook
ili kupata utekelezaji wa msimbo.Kwa kutumia Tcache bins na overflow ya null-byte, tunaweza kufikia hali ya double-free:
Tunagawa vipande vitatu vya saizi
0x110
(A
,B
,C
)Tunafuta
B
Tunafuta
A
na kugawa tena ili kutumia overflow ya null-byteSasa uwanja wa saizi wa
B
ni0x100
, badala ya0x111
, hivyo tunaweza kuifuta tenaTuna Tcache-bin moja ya saizi
0x110
na moja ya saizi0x100
zinazoelekeza kwenye anwani sawa. Hivyo tuna double free.Tunatumia double free kwa kutumia Tcache poisoning
Marejeleo
Last updated