Bypass FS protections: read-only / no-exec / Distroless
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
If you are interested in hacking career and hack the unhackable - we are hiring! (fluent polish written and spoken required).
In the following videos you can find the techniques mentioned in this page explained more in depth:
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
:
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
).
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.
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.
Ikiwa una 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 kuikandamiza katika fd iliyoundwa kwa kuita create_memfd
syscall na wito kwa exec syscall kuikimbia.
Hii haifanyi 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 ni mbinu inayokuruhusu kubadilisha kumbukumbu ya mchakato wako 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.
Kwa maelezo zaidi kuhusu mbinu hii angalia Github au:
DDexec / EverythingExecMemexec ni hatua ya asili inayofuata ya DDexec. Ni DDexec shellcode demonised, hivyo kila wakati unapotaka kuendesha 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.
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.
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.
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, hutaweza 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 scripting.
Kwa kutumia lugha ya scripting 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 wa RCE kupata lugha za scripting reverse shells na kuendesha binaries kutoka kwenye kumbukumbu katika https://github.com/carlospolop/DistrolessRCE.
Ikiwa unavutiwa na kazi ya hacking na kuhack yasiyoweza kuhackwa - tunatafuta wafanyakazi! (kuandika na kuzungumza kwa kiswahili vizuri kunahitajika).
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)