hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md

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:

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 cha delta_exec. Kifaa hiki kinaanzishwa kwa nasibu kila mchakato na kuongezwa kwa anwani za awali.
  • Kumbukumbu iliyotengwa na mmap() na maktaba zilizoshirikiwa —> 16 bits, inayoitwa delta_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 ya usleep, 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 %}