Linux Capabilities
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)
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.\
Linux capabilities zinagawanya privileges za root katika vitengo vidogo, tofauti, kuruhusu michakato kuwa na subset ya privileges. Hii inapunguza hatari kwa kutokupa privileges za root zisizohitajika.
Watumiaji wa kawaida wana ruhusa ndogo, ikihusisha kazi kama kufungua socket ya mtandao ambayo inahitaji ufikiaji wa root.
Inherited (CapInh):
Madhumuni: Inabainisha uwezo unaopitishwa kutoka kwa mchakato wa mzazi.
Ufanisi: Wakati mchakato mpya unaundwa, unarithi uwezo kutoka kwa mzazi katika seti hii. Ni muhimu kwa kudumisha privileges fulani wakati wa kuzalisha michakato.
Vikwazo: Mchakato hauwezi kupata uwezo ambao mzazi wake hakuwa nao.
Effective (CapEff):
Madhumuni: Inawakilisha uwezo halisi ambao mchakato unatumia wakati wowote.
Ufanisi: Ni seti ya uwezo inayokaguliwa na kernel ili kutoa ruhusa kwa shughuli mbalimbali. Kwa faili, seti hii inaweza kuwa bendera inayoashiria kama uwezo wa faili unaruhusiwa kuzingatiwa kuwa halisi.
Umuhimu: Seti halisi ni muhimu kwa ukaguzi wa haraka wa privileges, ikifanya kazi kama seti ya uwezo inayotumika ambayo mchakato unaweza kutumia.
Permitted (CapPrm):
Madhumuni: Inabainisha seti ya juu ya uwezo ambayo mchakato unaweza kuwa nayo.
Ufanisi: Mchakato unaweza kuinua uwezo kutoka kwa seti inayoruhusiwa hadi seti yake halisi, ikimpa uwezo wa kutumia uwezo huo. Pia inaweza kuondoa uwezo kutoka kwa seti yake inayoruhusiwa.
Mipaka: Inafanya kazi kama kikomo cha juu kwa uwezo ambao mchakato unaweza kuwa nao, kuhakikisha mchakato hauzidi wigo wa privileges ulioainishwa.
Bounding (CapBnd):
Madhumuni: Inweka kikomo juu ya uwezo ambao mchakato unaweza kupata wakati wa maisha yake.
Ufanisi: Hata kama mchakato una uwezo fulani katika seti yake inayoweza kurithiwa au inayoruhusiwa, hauwezi kupata uwezo huo isipokuwa pia uko katika seti ya bounding.
Matumizi: Seti hii ni muhimu kwa kupunguza uwezo wa mchakato kupandisha privileges, ikiongeza safu ya ziada ya usalama.
Ambient (CapAmb):
Madhumuni: Inaruhusu uwezo fulani kudumishwa wakati wa wito wa mfumo wa execve
, ambao kwa kawaida ungepelekea upya kamili wa uwezo wa mchakato.
Ufanisi: Inahakikisha kwamba programu zisizo za SUID ambazo hazina uwezo wa faili zinazohusiana zinaweza kudumisha privileges fulani.
Vikwazo: Uwezo katika seti hii unategemea vikwazo vya seti zinazoweza kurithiwa na zinazoruhusiwa, kuhakikisha hazipiti privileges zilizoidhinishwa za mchakato.
Kwa maelezo zaidi angalia:
Ili kuona uwezo wa mchakato maalum, tumia faili ya status katika saraka ya /proc. Kwa kuwa inatoa maelezo zaidi, hebu tuipunguze kwa habari zinazohusiana na uwezo wa Linux. Kumbuka kwamba kwa mchakato wote unaotembea, habari za uwezo zinahifadhiwa kwa kila thread, kwa binaries katika mfumo wa faili zinahifadhiwa katika sifa za kupanuliwa.
Unaweza kupata uwezo ulioainishwa katika /usr/include/linux/capability.h
Unaweza kupata uwezo wa mchakato wa sasa katika cat /proc/self/status
au kufanya capsh --print
na wa watumiaji wengine katika /proc/<pid>/status
Hii amri inapaswa kurudisha mistari 5 kwenye mifumo mingi.
CapInh = Uwezo ulio urithiwa
CapPrm = Uwezo ulio ruhusiwa
CapEff = Uwezo halisi
CapBnd = Seti ya mipaka
CapAmb = Seti ya uwezo wa mazingira
Hizi nambari za hexadecimal hazina maana. Kwa kutumia zana ya capsh tunaweza kuzifasiri kuwa majina ya uwezo.
Hebu tuangalia sasa uwezo unaotumiwa na ping
:
Ingawa hiyo inafanya kazi, kuna njia nyingine na rahisi. Ili kuona uwezo wa mchakato unaoendelea, tumia tu chombo cha getpcaps ikifuatiwa na kitambulisho chake cha mchakato (PID). Unaweza pia kutoa orodha ya vitambulisho vya michakato.
Hebu tuangalie hapa uwezo wa tcpdump
baada ya kumpa binary uwezo wa kutosha (cap_net_admin
na cap_net_raw
) ili kuchambua mtandao (tcpdump inakimbia katika mchakato 9562):
Kama unavyoona, uwezo uliopewa unalingana na matokeo ya njia 2 za kupata uwezo wa binary. Zana ya getpcaps inatumia wito wa mfumo wa capget() kuuliza uwezo unaopatikana kwa nyuzi maalum. Wito huu wa mfumo unahitaji tu kutoa PID ili kupata maelezo zaidi.
Binaries zinaweza kuwa na uwezo ambao unaweza kutumika wakati wa kutekeleza. Kwa mfano, ni kawaida sana kupata binary ya ping
ikiwa na uwezo wa cap_net_raw
:
Unaweza kutafuta binaries zenye uwezo kwa kutumia:
Ikiwa tutatua uwezo wa CAP_NET_RAW kwa ping, basi matumizi ya ping hayapaswi kufanya kazi tena.
Besides the output of capsh itself, the tcpdump command itself should also raise an error.
/bin/bash: /usr/sbin/tcpdump: Operation not permitted
The error clearly shows that the ping command is not allowed to open an ICMP socket. Now we know for sure that this works as expected.
You can remove capabilities of a binary with
Kwa kweli inawezekana kutoa uwezo pia kwa watumiaji. Hii ina maana kwamba kila mchakato unaotekelezwa na mtumiaji utaweza kutumia uwezo wa watumiaji.
Kulingana na hii, hii na hii faili chache mpya zinahitaji kusanidiwa ili kumpa mtumiaji uwezo fulani lakini ile inayotoa uwezo kwa kila mtumiaji itakuwa /etc/security/capability.conf
.
Mfano wa faili:
Kwa kukusanya programu ifuatayo inawezekana kuanzisha shell ya bash ndani ya mazingira yanayotoa uwezo.
Ndani ya bash inayotekelezwa na binary ya mazingira iliyokusanywa inawezekana kuona uwezo mpya (mtumiaji wa kawaida hatakuwa na uwezo wowote katika sehemu ya "sasa").
Unaweza kuongeza tu uwezo ambao upo katika seti za ruhusa na zinazorithishwa.
Binaries zenye uwezo hazitatumia uwezo mpya uliopewa na mazingira, hata hivyo binaries zisizo na uwezo zitawatumia kwani hazitakataa. Hii inafanya binaries zisizo na uwezo kuwa hatarini ndani ya mazingira maalum yanayotoa uwezo kwa binaries.
Kwa default, huduma inayotembea kama root itakuwa na uwezo wote uliotolewa, na katika baadhi ya matukio hii inaweza kuwa hatari. Kwa hivyo, faili ya mipangilio ya huduma inaruhusu kueleza uwezo unayotaka iwe nao, na mtumiaji anayeweza kutekeleza huduma ili kuepuka kuendesha huduma yenye ruhusa zisizohitajika:
Kwa default, Docker inatoa uwezo kadhaa kwa maktaba. Ni rahisi sana kuangalia ni uwezo gani hawa kwa kukimbia:
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
Uwezo ni muhimu unapohitaji kuzuia michakato yako mwenyewe baada ya kufanya operesheni zenye mamlaka (mfano, baada ya kuweka chroot na kuunganisha kwenye socket). Hata hivyo, zinaweza kutumika vibaya kwa kupitisha amri au hoja mbaya ambazo kisha zinafanywa kama root.
Unaweza kulazimisha uwezo kwa programu kwa kutumia setcap
, na kuuliza hizi kwa kutumia getcap
:
The +ep
inamaanisha unongeza uwezo (“-” ungeondoa) kama Ufanisi na Uidhinishwa.
Ili kubaini programu katika mfumo au folda zenye uwezo:
Katika mfano ufuatao, binary /usr/bin/python2.6
imepatikana kuwa na udhaifu wa privesc:
Uwezo unaohitajika na tcpdump
ili kuruhusu mtumiaji yeyote kunusa pakiti:
Kutoka kwenye nyaraka: Kumbuka kwamba mtu anaweza kupeana seti za uwezo zisizo na kitu kwa faili la programu, na hivyo inawezekana kuunda programu ya set-user-ID-root ambayo inabadilisha set-user-ID halisi na iliyohifadhiwa ya mchakato unaotekeleza programu hiyo kuwa 0, lakini haina uwezo wowote kwa mchakato huo. Au, kwa kusema kwa urahisi, ikiwa una binary ambayo:
haimilikiwi na root
haina bits za SUID
/SGID
zilizowekwa
ina seti za uwezo zisizo na kitu (mfano: getcap myelf
inarudisha myelf =ep
)
basi binary hiyo itakimbia kama root.
CAP_SYS_ADMIN
ni uwezo wa Linux wenye nguvu sana, mara nyingi unalinganishwa na kiwango cha karibu na root kutokana na privileges za kiutawala zake kubwa, kama vile kuunganisha vifaa au kubadilisha vipengele vya kernel. Ingawa ni muhimu kwa kontena zinazofanana na mifumo kamili, CAP_SYS_ADMIN
inatoa changamoto kubwa za usalama, hasa katika mazingira ya kontena, kutokana na uwezo wake wa kupandisha hadhi na kuathiri mfumo. Kwa hivyo, matumizi yake yanahitaji tathmini kali za usalama na usimamizi wa tahadhari, huku kukiwa na upendeleo mkubwa wa kuondoa uwezo huu katika kontena maalum za programu ili kuzingatia kanuni ya hadhi ndogo na kupunguza uso wa shambulio.
Mfano na binary
Kwa kutumia python unaweza kuunganisha faili iliyobadilishwa passwd juu ya faili halisi passwd:
Na hatimaye mount faili la passwd
lililobadilishwa kwenye /etc/passwd
:
Na utaweza su
kama root ukitumia nenosiri "password".
Mfano na mazingira (Docker breakout)
Unaweza kuangalia uwezo ulioanzishwa ndani ya kontena la docker ukitumia:
Ndani ya matokeo ya awali unaweza kuona kwamba uwezo wa SYS_ADMIN umewezeshwa.
Mount
Hii inaruhusu kontena la docker kuweka diski ya mwenyeji na kuipata kwa uhuru:
Upatikanaji kamili
Katika njia iliyopita tulifanikiwa kufikia diski ya mwenyeji wa docker. Ikiwa utagundua kwamba mwenyeji anafanya kazi na seva ya ssh, unaweza kuunda mtumiaji ndani ya diski ya mwenyeji wa docker na kuipata kupitia SSH:
Hii inamaanisha kwamba unaweza kutoroka kwenye kontena kwa kuingiza shellcode ndani ya mchakato fulani unaotembea ndani ya mwenyeji. Ili kufikia michakato inayotembea ndani ya mwenyeji, kontena linahitaji kuendeshwa angalau na --pid=host
.
CAP_SYS_PTRACE
inatoa uwezo wa kutumia kazi za ufuatiliaji na ufuatiliaji wa wito wa mfumo zinazotolewa na ptrace(2)
na wito za kuunganisha msongamano wa kumbukumbu kama process_vm_readv(2)
na process_vm_writev(2)
. Ingawa ni nguvu kwa ajili ya madhumuni ya uchunguzi na ufuatiliaji, ikiwa CAP_SYS_PTRACE
imewezeshwa bila hatua za kikomo kama vile filamu ya seccomp kwenye ptrace(2)
, inaweza kudhoofisha usalama wa mfumo kwa kiasi kikubwa. Kwa haswa, inaweza kutumika kukwepa vizuizi vingine vya usalama, hasa vile vilivyowekwa na seccomp, kama inavyoonyeshwa na uthibitisho wa dhana (PoC) kama hii.
Mfano na binary (python)
Mfano na binary (gdb)
gdb
na uwezo wa ptrace
:
Kuhifadhi Shellcode Hifadhi shellcode kwenye faili ili uweze kuingiza kwenye gdb.
Kuingiza Shellcode kwenye gdb Anza gdb na programu unayotaka kujaribu, kisha tumia amri za gdb kuingiza shellcode kwenye kumbukumbu.
Mfano na mazingira (Docker breakout) - Matumizi mengine ya gdb
Ikiwa GDB imewekwa (au unaweza kuisakinisha kwa apk add gdb
au apt install gdb
kwa mfano) unaweza kuchunguza mchakato kutoka kwa mwenyeji na kufanya uitwe kazi ya system
. (Tekniki hii pia inahitaji uwezo SYS_ADMIN
).
Hutaweza kuona matokeo ya amri iliyotekelezwa lakini itatekelezwa na mchakato huo (hivyo pata rev shell).
Ikiwa unapata kosa "No symbol "system" in current context." angalia mfano wa awali wa kupakia shellcode katika programu kupitia gdb.
Mfano na mazingira (Docker breakout) - Shellcode Injection
Unaweza kuangalia uwezo ulioanzishwa ndani ya kontena la docker kwa kutumia:
List processes running in the host ps -eaf
Get the architecture uname -m
Find a shellcode for the architecture (https://www.exploit-db.com/exploits/41128)
Find a program to inject the shellcode into a process memory (https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c)
Modify the shellcode inside the program and compile it gcc inject.c -o inject
Inject it and grab your shell: ./inject 299; nc 172.17.0.1 5600
CAP_SYS_MODULE
inaruhusu mchakato kuchoma na kuondoa moduli za kernel (init_module(2)
, finit_module(2)
na delete_module(2)
system calls), ikitoa ufikiaji wa moja kwa moja kwa operesheni kuu za kernel. Uwezo huu unatoa hatari kubwa za usalama, kwani unaruhusu kupanda kwa mamlaka na kuathiri mfumo mzima kwa kuruhusu mabadiliko kwenye kernel, hivyo kupita mitambo yote ya usalama ya Linux, ikiwa ni pamoja na Moduli za Usalama za Linux na kutengwa kwa kontena.
Hii inamaanisha kwamba unaweza kuingiza/kuondoa moduli za kernel katika/katika kernel ya mashine mwenyeji.
Mfano na binary
Katika mfano ufuatao, binary python
ina uwezo huu.
Kwa default, amri ya modprobe
inakagua orodha ya utegemezi na faili za ramani katika saraka /lib/modules/$(uname -r)
.
Ili kutumia hii vibaya, hebu tuunde folda ya uwongo ya lib/modules:
Kisha unda moduli ya kernel ambayo unaweza kupata mifano 2 hapa chini na nakala yake kwenye folda hii:
Hatimaye, tekeleza msimbo wa python unaohitajika kupakia moduli hii ya kernel:
Mfano wa 2 na binary
Katika mfano ufuatao, binary kmod
ina uwezo huu.
Ambayo inamaanisha kwamba inawezekana kutumia amri insmod
kuingiza moduli ya kernel. Fuata mfano hapa chini kupata reverse shell ukitumia haki hii.
Mfano na mazingira (Docker breakout)
Unaweza kuangalia uwezo ulioanzishwa ndani ya kontena la docker kwa kutumia:
Ndani ya matokeo ya awali unaweza kuona kwamba uwezo wa SYS_MODULE umewezeshwa.
Unda moduli ya kernel ambayo itatekeleza shell ya nyuma na Makefile ili kuunda hiyo:
Karakteri tupu kabla ya kila neno la make katika Makefile lazima iwe tab, si nafasi!
Tekeleza make
ili kuunda.
Hatimaye, anzisha nc
ndani ya shell na pakia moduli kutoka nyingine na utaweza kukamata shell katika mchakato wa nc:
Msimbo wa mbinu hii ulikopwa kutoka maabara ya "Kutatiza Uwezo wa SYS_MODULE" kutoka https://www.pentesteracademy.com/
Mfano mwingine wa mbinu hii unaweza kupatikana katika https://www.cyberark.com/resources/threat-research-blog/how-i-hacked-play-with-docker-and-remotely-ran-code-on-the-host
CAP_DAC_READ_SEARCH inaruhusu mchakato kuzidi ruhusa za kusoma faili na za kusoma na kutekeleza saraka. Matumizi yake makuu ni kwa ajili ya kutafuta au kusoma faili. Hata hivyo, inaruhusu pia mchakato kutumia kazi ya open_by_handle_at(2)
, ambayo inaweza kufikia faili yoyote, ikiwa ni pamoja na zile za nje ya eneo la mchakato. Kifaa kinachotumika katika open_by_handle_at(2)
kinapaswa kuwa kitambulisho kisichokuwa wazi kilichopatikana kupitia name_to_handle_at(2)
, lakini kinaweza kujumuisha taarifa nyeti kama nambari za inode ambazo zinaweza kuathiriwa. Uwezekano wa kutumia uwezo huu, hasa katika muktadha wa kontena za Docker, ulionyeshwa na Sebastian Krahmer kwa kutumia exploit ya shocker, kama ilivyochambuliwa hapa. Hii inamaanisha kwamba unaweza kuzidi kuangalia ruhusa za kusoma faili na kuangalia ruhusa za kusoma/kutekeleza saraka.
Mfano na binary
Binary itakuwa na uwezo wa kusoma faili yoyote. Hivyo, ikiwa faili kama tar ina uwezo huu itakuwa na uwezo wa kusoma faili la kivuli:
Mfano na binary2
Katika kesi hii, hebu tuone kwamba python
binary ina uwezo huu. Ili orodhesha faili za root unaweza kufanya:
Na ili kusoma faili unaweza kufanya:
Mfano katika Mazingira (Docker breakout)
Unaweza kuangalia uwezo ulioanzishwa ndani ya kontena la docker kwa kutumia:
Inside the previous output you can see that the DAC_READ_SEARCH capability is enabled. As a result, the container can debug processes.
You can learn how the following exploiting works in https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3 but in resume CAP_DAC_READ_SEARCH sio tu inatuwezesha kupita kwenye mfumo wa faili bila ukaguzi wa ruhusa, bali pia inafuta waziwazi ukaguzi wowote wa open_by_handle_at(2) na inaweza kuruhusu mchakato wetu kufikia faili nyeti zilizo funguliwa na michakato mingine.
The original exploit that abuse this permissions to read files from the host can be found here: http://stealth.openwall.net/xSports/shocker.c, the following is a modified version that allows you to indicate the file you want to read as first argument and dump it in a file.
Exploiti inahitaji kupata kiashiria kwa kitu kilichowekwa kwenye mwenyeji. Exploiti ya awali ilitumia faili /.dockerinit na toleo hili lililobadilishwa linatumia /etc/hostname. Ikiwa exploiti haifanyi kazi labda unahitaji kuweka faili tofauti. Ili kupata faili ambayo imewekwa kwenye mwenyeji tekeleza amri ya mount:
Msimbo wa mbinu hii ulikopwa kutoka maabara ya "Abusing DAC_READ_SEARCH Capability" kutoka https://www.pentesteracademy.com/
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
Hii inamaanisha kwamba unaweza kupita ukaguzi wa ruhusa za kuandika kwenye faili yoyote, hivyo unaweza kuandika faili yoyote.
Kuna faili nyingi ambazo unaweza kufuta ili kupandisha mamlaka, unaweza kupata mawazo kutoka hapa.
Mfano na binary
Katika mfano huu vim ina uwezo huu, hivyo unaweza kubadilisha faili yoyote kama passwd, sudoers au shadow:
Mfano na binary 2
Katika mfano huu, python
binary itakuwa na uwezo huu. Unaweza kutumia python kubadilisha faili yoyote:
Mfano na mazingira + CAP_DAC_READ_SEARCH (Docker breakout)
Unaweza kuangalia uwezo ulioanzishwa ndani ya kontena la docker kwa kutumia:
Kwanza, soma sehemu ya awali ambayo inatumia uwezo wa DAC_READ_SEARCH kusoma faili za kawaida za mwenyeji na kusanya exploit. Kisha, kusanya toleo linalofuata la exploit ya shocker ambalo litakuruhusu kuandika faili za kawaida ndani ya mfumo wa faili wa wenyeji:
Ili kutoroka kwenye kontena la docker unaweza kupakua faili /etc/shadow
na /etc/passwd
kutoka kwa mwenyeji, ongeza mtumiaji mpya, na utumie shocker_write
kuandika upya. Kisha, fikia kupitia ssh.
Msimbo wa mbinu hii ulikopiwa kutoka maabara ya "Kunyanyasa Uwezo wa DAC_OVERRIDE" kutoka https://www.pentesteracademy.com
Hii ina maana kwamba inawezekana kubadilisha umiliki wa faili yoyote.
Mfano na binary
Tuchukulie kwamba binary ya python
ina uwezo huu, unaweza kubadilisha mmiliki wa faili la shadow, badilisha nenosiri la root, na kupandisha haki:
Au na ruby
binary ikiwa na uwezo huu:
Hii inamaanisha kwamba inawezekana kubadilisha ruhusa za faili yoyote.
Mfano na binary
Ikiwa python ina uwezo huu unaweza kubadilisha ruhusa za faili la kivuli, badilisha nenosiri la root, na kuongeza mamlaka:
Hii inamaanisha kwamba inawezekana kuweka kitambulisho cha mtumiaji kilichofanywa kazi ya mchakato ulioanzishwa.
Mfano na binary
Ikiwa python ina hii uwezo, unaweza kuitumia kwa urahisi kuboresha mamlaka hadi root:
Njia nyingine:
Hii inamaanisha kwamba inawezekana kuweka kitambulisho cha kundi kinachofanya kazi cha mchakato ulioanzishwa.
Kuna faili nyingi ambazo unaweza kuandika upya ili kupandisha mamlaka, unaweza kupata mawazo kutoka hapa.
Mfano na binary
Katika kesi hii unapaswa kutafuta faili za kuvutia ambazo kundi linaweza kusoma kwa sababu unaweza kujifanya kuwa kundi lolote:
Mara tu unapopata faili unayoweza kutumia (kupitia kusoma au kuandika) ili kupandisha hadhi, unaweza kupata shell ukijifanya kuwa kundi la kuvutia kwa:
Katika kesi hii, kundi la shadow lilijitambulisha ili uweze kusoma faili /etc/shadow
:
Ikiwa docker imewekwa unaweza kujifanya kuwa kikundi cha docker na kuitumia kuwasiliana na docker socket na kupandisha mamlaka.
Hii inamaanisha kwamba inawezekana kuweka uwezo kwenye faili na michakato
Mfano na binary
Ikiwa python ina uwezo huu, unaweza kwa urahisi kuitumia kupandisha mamlaka hadi root:
Kumbuka kwamba ikiwa utaweka uwezo mpya kwa binary na CAP_SETFCAP, utapoteza uwezo huu.
Mara tu unapo kuwa na SETUID capability unaweza kwenda kwenye sehemu yake kuona jinsi ya kupandisha mamlaka.
Mfano na mazingira (Docker breakout)
Kwa default uwezo CAP_SETFCAP unatolewa kwa mchakato ndani ya kontena katika Docker. Unaweza kuangalia hilo kwa kufanya kitu kama:
Hii uwezo inaruhusu kutoa uwezo mwingine wowote kwa binaries, hivyo tunaweza kufikiria kuhusu kutoroka kutoka kwenye kontena kwa kutumia mojawapo ya uwezo mwingine wa kuvunja ulioelezwa kwenye ukurasa huu. Hata hivyo, ukijaribu kutoa kwa mfano uwezo CAP_SYS_ADMIN na CAP_SYS_PTRACE kwa binary ya gdb, utagundua kwamba unaweza kuwapa, lakini binary haitakuwa na uwezo wa kutekeleza baada ya hii:
From the docs: Permitted: Hii ni seti ya mipaka kwa uwezo halisi ambao thread inaweza kuchukua. Pia ni seti ya mipaka kwa uwezo ambao unaweza kuongezwa kwenye seti ya kurithiwa na thread ambayo haina uwezo wa CAP_SETPCAP katika seti yake halisi. Inaonekana kama uwezo wa Permitted unaleta mipaka kwa wale wanaoweza kutumika. Hata hivyo, Docker pia inatoa CAP_SETPCAP kwa chaguo-msingi, hivyo unaweza kuwa na uwezo wa kuweka uwezo mpya ndani ya wale wa kurithiwa. Hata hivyo, katika hati ya uwezo huu: CAP_SETPCAP : […] ongeza uwezo wowote kutoka kwenye seti ya mipaka ya thread inayopiga kwa seti yake ya kurithiwa. Inaonekana kama tunaweza kuongeza tu kwenye seti ya kurithiwa uwezo kutoka kwenye seti ya mipaka. Hii inamaanisha kwamba hatuwezi kuweka uwezo mpya kama CAP_SYS_ADMIN au CAP_SYS_PTRACE katika seti ya kurithiwa ili kupandisha hadhi.
CAP_SYS_RAWIO inatoa idadi ya operesheni nyeti ikiwa ni pamoja na ufikiaji wa /dev/mem
, /dev/kmem
au /proc/kcore
, kubadilisha mmap_min_addr
, ufikiaji wa ioperm(2)
na iopl(2)
system calls, na amri mbalimbali za diski. FIBMAP ioctl(2)
pia inaruhusiwa kupitia uwezo huu, ambao umesababisha matatizo katika zamani. Kulingana na ukurasa wa man, hii pia inaruhusu mwenye uwezo kufanya perform a range of device-specific operations on other devices
.
Hii inaweza kuwa na manufaa kwa kupandisha hadhi na Docker breakout.
Hii inamaanisha kwamba inawezekana kuua mchakato wowote.
Mfano na binary
Tuchukulie kwamba python
binary ina uwezo huu. Ikiwa ungeweza pia kubadilisha baadhi ya huduma au usanidi wa socket (au faili lolote la usanidi linalohusiana na huduma) faili, unaweza kuingiza nyuma, na kisha kuua mchakato unaohusiana na huduma hiyo na kusubiri faili mpya ya usanidi kutekelezwa na nyuma yako.
Privesc na kill
Ikiwa una uwezo wa kill na kuna programu ya node inayoendesha kama root (au kama mtumiaji tofauti) unaweza labda kutuma ishara SIGUSR1 na kuifanya ifungue debuggger ya node ambapo unaweza kuungana.
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa lengo la kukuza maarifa ya kiufundi, kongamano hili ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila taaluma.
Hii inamaanisha kwamba inawezekana kusikiliza kwenye bandari yoyote (hata zile za kibali). Huwezi kupandisha mamlaka moja kwa moja kwa kutumia uwezo huu.
Mfano na binary
Ikiwa python
ina uwezo huu itakuwa na uwezo wa kusikiliza kwenye bandari yoyote na hata kuungana kutoka kwake na bandari nyingine yoyote (huduma zingine zinahitaji muunganisho kutoka kwenye bandari za kibali maalum)
CAP_NET_RAW uwezo unaruhusu michakato kuunda RAW na PACKET sockets, ikiwaruhusu kuzalisha na kutuma pakiti za mtandao zisizo na mpangilio. Hii inaweza kusababisha hatari za usalama katika mazingira ya kontena, kama vile kupotosha pakiti, kuingiza trafiki, na kupita udhibiti wa ufikiaji wa mtandao. Waigizaji wabaya wanaweza kutumia hii kuingilia kati mwelekeo wa kontena au kuhatarisha usalama wa mtandao wa mwenyeji, hasa bila ulinzi wa moto wa kutosha. Zaidi ya hayo, CAP_NET_RAW ni muhimu kwa kontena zenye mamlaka kusaidia operesheni kama ping kupitia maombi ya RAW ICMP.
Hii inamaanisha kwamba inawezekana kunasa trafiki. Huwezi kuongeza mamlaka moja kwa moja kwa uwezo huu.
Mfano na binary
Ikiwa binary tcpdump
ina uwezo huu utaweza kuutumia kunasa taarifa za mtandao.
Kumbuka kwamba ikiwa muktadha unatoa uwezo huu unaweza pia kutumia tcpdump
kunasa trafiki.
Mfano na binary 2
Mfano ufuatao ni python2
msimbo ambao unaweza kuwa na manufaa kunasa trafiki ya kiolesura cha "lo" (localhost). Msimbo huu unatoka kwenye maabara "Misingi: CAP-NET_BIND + NET_RAW" kutoka https://attackdefense.pentesteracademy.com/
CAP_NET_ADMIN uwezo unampa mmiliki nguvu ya kubadilisha mipangilio ya mtandao, ikiwa ni pamoja na mipangilio ya firewall, meza za routing, ruhusa za socket, na mipangilio ya interface ya mtandao ndani ya majina ya mtandao yaliyofichuliwa. Pia inaruhusu kuwasha modo wa promiscuous kwenye interfaces za mtandao, ikiruhusu kunasa pakiti kupitia majina ya mtandao.
Mfano na binary
Hebu tuone kwamba python binary ina uwezo huu.
Hii inamaanisha kwamba inawezekana kubadilisha sifa za inode. Huwezi kupandisha mamlaka moja kwa moja na uwezo huu.
Mfano na binary
Ikiwa unapata kwamba faili ni immutable na python ina uwezo huu, unaweza kuondoa sifa ya immutable na kufanya faili iweze kubadilishwa:
Kumbuka kwamba kawaida sifa hii isiyoweza kubadilishwa huwekwa na kuondolewa kwa kutumia:
CAP_SYS_CHROOT inaruhusu utekelezaji wa chroot(2)
system call, ambayo inaweza kuruhusu kutoroka kutoka kwa mazingira ya chroot(2)
kupitia udhaifu unaojulikana:
CAP_SYS_BOOT sio tu inaruhusu utekelezaji wa reboot(2)
system call kwa ajili ya kuanzisha upya mfumo, ikiwa ni pamoja na amri maalum kama LINUX_REBOOT_CMD_RESTART2
iliyoundwa kwa ajili ya majukwaa fulani ya vifaa, lakini pia inaruhusu matumizi ya kexec_load(2)
na, kuanzia Linux 3.17, kexec_file_load(2)
kwa ajili ya kupakia nyukta mpya au zilizotiwa saini.
CAP_SYSLOG ilitengwa kutoka kwa CAP_SYS_ADMIN katika Linux 2.6.37, ikitoa uwezo wa kutumia syslog(2)
call. Uwezo huu unaruhusu kuona anwani za kernel kupitia /proc
na interfaces zinazofanana wakati mipangilio ya kptr_restrict
iko kwenye 1, ambayo inasimamia kufichuliwa kwa anwani za kernel. Kuanzia Linux 2.6.39, chaguo-msingi kwa kptr_restrict
ni 0, ikimaanisha anwani za kernel zinakabiliwa, ingawa usambazaji wengi huweka hii kuwa 1 (ficha anwani isipokuwa kutoka uid 0) au 2 (daima ficha anwani) kwa sababu za usalama.
Zaidi ya hayo, CAP_SYSLOG inaruhusu kufikia matokeo ya dmesg
wakati dmesg_restrict
imewekwa kuwa 1. Licha ya mabadiliko haya, CAP_SYS_ADMIN inabaki na uwezo wa kufanya operesheni za syslog
kutokana na mifano ya kihistoria.
CAP_MKNOD inapanua kazi ya mknod
system call zaidi ya kuunda faili za kawaida, FIFOs (mabomba yenye majina), au UNIX domain sockets. Inaruhusu hasa kuunda faili maalum, ambazo zinajumuisha:
S_IFCHR: Faili maalum za wahusika, ambazo ni vifaa kama terminal.
S_IFBLK: Faili maalum za block, ambazo ni vifaa kama diski.
Uwezo huu ni muhimu kwa michakato inayohitaji uwezo wa kuunda faili za vifaa, ikirahisisha mwingiliano wa moja kwa moja na vifaa kupitia vifaa vya wahusika au block.
Ni uwezo wa chombo cha docker wa chaguo-msingi (https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19).
Uwezo huu unaruhusu kufanya kupandisha hadhi (kupitia kusoma diski kamili) kwenye mwenyeji, chini ya hali hizi:
Kuwa na ufikiaji wa awali kwa mwenyeji (Bila Haki).
Kuwa na ufikiaji wa awali kwa chombo (Bila Haki (EUID 0), na CAP_MKNOD
inayofaa).
Mwenyeji na chombo vinapaswa kushiriki jina moja la mtumiaji.
Hatua za Kuunda na Kufikia Kifaa cha Block katika Chombo:
Kwenye Mwenyeji kama Mtumiaji wa Kawaida:
Tambua kitambulisho chako cha mtumiaji wa sasa kwa kutumia id
, mfano, uid=1000(standarduser)
.
Tambua kifaa kinacholengwa, kwa mfano, /dev/sdb
.
Ndani ya Chombo kama root
:
Rudi kwenye Host:
This approach allows the standard user to access and potentially read data from /dev/sdb
through the container, exploiting shared user namespaces and permissions set on the device.
CAP_SETPCAP enables a process to alter the capability sets of another process, allowing for the addition or removal of capabilities from the effective, inheritable, and permitted sets. However, a process can only modify capabilities that it possesses in its own permitted set, ensuring it cannot elevate another process's privileges beyond its own. Recent kernel updates have tightened these rules, restricting CAP_SETPCAP
to only diminish the capabilities within its own or its descendants' permitted sets, aiming to mitigate security risks. Usage requires having CAP_SETPCAP
in the effective set and the target capabilities in the permitted set, utilizing capset()
for modifications. This summarizes the core function and limitations of CAP_SETPCAP
, highlighting its role in privilege management and security enhancement.
CAP_SETPCAP
ni uwezo wa Linux unaoruhusu mchakato kubadilisha seti za uwezo za mchakato mwingine. Inatoa uwezo wa kuongeza au kuondoa uwezo kutoka kwa seti za uwezo zinazofaa, zinazorithiwa, na zinazoruhusiwa za michakato mingine. Hata hivyo, kuna vizuizi fulani juu ya jinsi uwezo huu unaweza kutumika.
Mchakato wenye CAP_SETPCAP
unaweza tu kutoa au kuondoa uwezo ambao uko katika seti yake ya uwezo inayoruhusiwa. Kwa maneno mengine, mchakato hauwezi kutoa uwezo kwa mchakato mwingine ikiwa haujakuwa na uwezo huo mwenyewe. Kizuizi hiki kinazuia mchakato kuinua mamlaka ya mchakato mwingine zaidi ya kiwango chake mwenyewe cha mamlaka.
Zaidi ya hayo, katika toleo za hivi karibuni za kernel, uwezo wa CAP_SETPCAP
umekuwa ukizuiwa zaidi. Hauruhusu tena mchakato kubadilisha seti za uwezo za michakato mingine kwa njia isiyo ya kawaida. Badala yake, inaruhusu tu mchakato kupunguza uwezo katika seti yake ya uwezo inayoruhusiwa au seti za uwezo zinazoruhusiwa za wazazi wake. Mabadiliko haya yaliletwa ili kupunguza hatari za usalama zinazoweza kutokea zinazohusiana na uwezo huo.
Ili kutumia CAP_SETPCAP
kwa ufanisi, unahitaji kuwa na uwezo huo katika seti yako ya uwezo inayofaa na uwezo wa lengo katika seti yako ya uwezo inayoruhusiwa. Unaweza kisha kutumia wito wa mfumo wa capset()
kubadilisha seti za uwezo za michakato mingine.
Kwa muhtasari, CAP_SETPCAP
inaruhusu mchakato kubadilisha seti za uwezo za michakato mingine, lakini haiwezi kutoa uwezo ambao haina mwenyewe. Zaidi ya hayo, kutokana na wasiwasi wa usalama, kazi yake imepunguzika katika toleo za hivi karibuni za kernel ili kuruhusu tu kupunguza uwezo katika seti yake ya uwezo inayoruhusiwa au seti za uwezo zinazoruhusiwa za wazazi wake.
Most of these examples were taken from some labs of https://attackdefense.pentesteracademy.com/, so if you want to practice this privesc techniques I recommend these labs.
Other references:
RootedCON is the most relevant cybersecurity event in Spain and one of the most important in Europe. With the mission of promoting technical knowledge, this congress is a boiling meeting point for technology and cybersecurity professionals in every discipline.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)