5.1 KiB
ASLR
Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs za kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa Msingi
Urambazaji wa Mfumo wa Nafasi ya Anwani (ASLR) ni mbinu ya usalama inayotumika kwenye mifumo ya uendeshaji kwa kuchanganya anwani za kumbukumbu zinazotumiwa na michakato ya mfumo na maombi. Kwa kufanya hivyo, inafanya iwe ngumu sana kwa mkaidi kutabiri mahali pa michakato na data maalum, kama vile steki, rundo, na maktaba, hivyo kupunguza aina fulani za uvamizi, hasa mlipuko wa ujazo.
Kuangalia Hali ya ASLR
Ku kucheki hali ya ASLR kwenye mfumo wa Linux, unaweza kusoma thamani kutoka faili ya /proc/sys/kernel/randomize_va_space
. Thamani iliyohifadhiwa kwenye faili hii inaamua aina ya ASLR inayotumiwa:
- 0: Hakuna kuchanganya. Kila kitu ni tuli.
- 1: Kuchanganya kwa uangalifu. Maktaba zilizoshirikiwa, steki, mmap(), ukurasa wa VDSO zinachanganywa.
- 2: Kuchanganya kikamilifu. Mbali na vitu vilivyochanganywa na kuchanganya kwa uangalifu, kumbukumbu inayosimamiwa kupitia
brk()
inachanganywa.
Unaweza kuangalia hali ya ASLR kwa amri ifuatayo:
bashCopy codecat /proc/sys/kernel/randomize_va_space
Kulemaza ASLR
Ili kulemaza ASLR, weka thamani ya /proc/sys/kernel/randomize_va_space
kuwa 0. Kulemaza ASLR kwa ujumla siyo jambo linalopendekezwa isipokuwa kwenye mazingira ya majaribio au kutatua hitilafu. Hapa ndivyo unavyoweza kulimaza:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
Unaweza pia kulemaza ASLR kwa utekelezaji na:
setarch `arch` -R ./bin args
setarch `uname -m` -R ./bin args
Kuwezesha ASLR
Ili kuwezesha ASLR, unaweza kuandika thamani ya 2 kwenye faili ya /proc/sys/kernel/randomize_va_space
. Kawaida hii inahitaji mamlaka ya msingi. Kuwezesha ubadilishaji kamili wa random unaweza kufanywa kwa amri ifuatayo:
echo 2 | sudo tee /proc/sys/kernel/randomize_va_space
Uthabiti Kupitia Kuzimwa Upya
Mabadiliko yaliyofanywa kwa kutumia amri za echo
ni ya muda na yatarejeshwa wakati wa kuzimwa upya. Ili kufanya mabadiliko yawe ya kudumu, unahitaji kuhariri faili ya /etc/sysctl.conf
na kuongeza au kuhariri mstari ufuatao:
kernel.randomize_va_space=2 # Enable ASLR
# or
kernel.randomize_va_space=0 # Disable ASLR
Baada ya kuhariri /etc/sysctl.conf
, tumia mabadiliko kwa:
sudo sysctl -p
Hii itahakikisha mipangilio yako ya ASLR inabaki hata baada ya kuzimwa na kuzimwa upya.
Kupitisha 32bits ASLR
Kufanya nguvu kwa 32bit
PaX inagawa nafasi ya anwani ya mchakato katika makundi 3:
- Msimbo na data (iliyoanzishwa na isiyoanzishwa):
.text
,.data
, na.bss
—> 16 bits ya entropy katika kifaa chadelta_exec
. Kifaa hiki kinaanzishwa kwa nasibu kila mchakato na kuongezwa kwa anwani za awali. - Kumbukumbu iliyotengwa na
mmap()
na maktaba zilizoshirikiwa —> 16 bits, inayoitwadelta_mmap
. - Mtungo —> 24 bits, inayoitwa
delta_stack
. Walakini, inatumia bits 11 (kutoka kwa byte ya 10 hadi ya 20 pamoja), imepangwa kwa 16 bytes —> Hii inasababisha anwani halisi 524,288 za mtungo.
Data iliyotangulia ni kwa mifumo ya 32-bit na entropy iliyopunguzwa mwisho inawezesha kuvuka ASLR kwa kujaribu tena na tena hadi shambulio litakapokamilika kwa mafanikio.
Mawazo ya nguvu:
- Ikiwa shambulio ni la ndani, unaweza kujaribu kufanya nguvu kwa anwani ya msingi ya libc (yenye manufaa kwa mifumo ya 32bit):
for off in range(0xb7000000, 0xb8000000, 0x1000):
- Ikiwa unashambulia seva ya mbali, unaweza kujaribu kuburuta anwani ya kazi ya
libc
yausleep
, ukitoa kama hoja 10 (kwa mfano). Ikiwa kwa wakati fulani seva inachukua sekunde 10 zaidi kujibu, umepata anwani ya kazi hii.
{% hint style="success" %} Katika mifumo ya 64bit entropy ni kubwa zaidi na hili halikubaliki. {% endhint %}
Ret2ret
Jaribu kukiuka ASLR kwa kutumia anwani ndani ya steki:
{% content-ref url="../stack-overflow/ret2ret.md" %} ret2ret.md {% endcontent-ref %}