Linux Capabilities
Uwezo wa Linux
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Uhispania na moja ya muhimu zaidi barani Ulaya. Kwa kukuza maarifa ya kiufundi, mkutano huu ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila fani.\
Uwezo wa Linux
Uwezo wa Linux hugawa mamlaka ya mizizi katika vitengo vidogo na tofauti, kuruhusu michakato kuwa na sehemu ya uwezo. Hii inapunguza hatari kwa kutokupa mamlaka kamili ya mizizi bila sababu.
Tatizo:
Watumiaji wa kawaida wana idhini ndogo, ikionyesha kazi kama kufungua soketi ya mtandao ambayo inahitaji ufikiaji wa mizizi.
Seti za Uwezo:
Imeorodheshwa (CapInh):
Lengo: Inaamua uwezo unaopitishwa kutoka kwa mchakato mzazi.
Ufanisi: Wakati mchakato mpya unapoundwa, unarithi uwezo kutoka kwa mzazi wake katika seti hii. Inafaa kwa kudumisha uwezo fulani kwa michakato inayozaliwa.
Vikwazo: Mchakato hauwezi kupata uwezo ambao mzazi wake hakuwa nao.
Halisi (CapEff):
Lengo: Inawakilisha uwezo halisi ambao mchakato unatumia wakati wowote.
Ufanisi: Ni seti ya uwezo ambayo kernel inachunguza ili kutoa idhini kwa shughuli mbalimbali. Kwa faili, seti hii inaweza kuwa alama inayoonyesha ikiwa uwezo ulioruhusiwa wa faili unapaswa kuzingatiwa kuwa halisi.
Umuhimu: Seti halisi ni muhimu kwa ukaguzi wa mamlaka mara moja, ikifanya kama seti ya uwezo ya aktive ambayo mchakato unaweza kutumia.
Kuruhusiwa (CapPrm):
Lengo: Inafafanua seti kubwa ya uwezo ambao mchakato unaweza kuwa nao.
Ufanisi: Mchakato unaweza kuinua uwezo kutoka kwa seti iliyoruhusiwa hadi seti yake halisi, ikimpa uwezo wa kutumia uwezo huo. Pia inaweza kuondoa uwezo kutoka kwa seti iliyoruhusiwa.
Kizuizi: Inafanya kama kiwango cha juu cha uwezo ambao mchakato unaweza kuwa nao, ikahakikisha mchakato haupiti kikomo kilichopangwa cha mamlaka.
Kizuizi (CapBnd):
Lengo: Inaweka kikomo kwa uwezo ambao mchakato unaweza kupata wakati wa mzunguko wake wa maisha.
Ufanisi: Hata ikiwa mchakato una uwezo fulani katika seti yake ya kurithiwa au kuruhusiwa, hauwezi kupata uwezo huo isipokuwa pia uko katika seti ya kizuizi.
Matumizi: Seti hii ni muhimu hasa kwa kuzuia uwezekano wa mchakato kuongeza mamlaka yake, ikiongeza safu ya ziada ya usalama.
Mazingira (CapAmb):
Lengo: Inaruhusu uwezo fulani kuendelea kuwepo kupitia wito wa mfumo wa
execve
, ambao kwa kawaida ungefanya mchakato urejeshwe kabisa kwa uwezo wake.Ufanisi: Inahakikisha kuwa programu zisizo na SUID ambazo hazina uwezo wa faili zinaweza kuendelea kuwa na uwezo fulani.
Vikwazo: Uwezo katika seti hii unazingatia vikwazo vya seti za kurithiwa na kuruhusiwa, ikihakikisha kuwa hauzidi mamlaka yanayoruhusiwa kwa mchakato.
Kwa habari zaidi angalia:
Uwezo wa Mchakato na Programu
Uwezo wa Mchakato
Ili kuona uwezo wa mchakato fulani, tumia faili ya status katika saraka ya /proc. Kwa kuwa inatoa maelezo zaidi, hebu tuweke kikomo kwenye habari zinazohusiana na uwezo wa Linux. Tafadhali kumbuka kuwa kwa habari za uwezo wa mchakato zinahifadhiwa kwa kila mchakato, kwa programu katika mfumo wa faili inahifadhiwa kwa sifa zilizopanuliwa.
Unaweza kupata uwezo uliowekwa katika /usr/include/linux/capability.h
Unaweza kupata uwezo wa mchakato wa sasa kwa kutumia cat /proc/self/status
au kwa kufanya capsh --print
, na wa watumiaji wengine katika /proc/<pid>/status
Amri hii inapaswa kurudisha mistari 5 kwenye mifumo mingi.
CapInh = Uwezo uliorithiwa
CapPrm = Uwezo ulioruhusiwa
CapEff = Uwezo halisi
CapBnd = Seti ya mipaka
CapAmb = Seti ya uwezo wa mazingira
Linux Uwezo wa Kuongeza Uwezo
Kwa kutumia kifaa cha capsh, tunaweza kubadilisha nambari hizi za hexadecimali kuwa majina ya uwezo.
Hebu angalia sasa uwezo unaotumiwa na ping
:
Ingawa hiyo inafanya kazi, kuna njia nyingine rahisi zaidi. Ili kuona uwezo wa mchakato unaofanya kazi, tumia tu zana ya getpcaps ikifuatiwa na kitambulisho cha mchakato (PID). Unaweza pia kutoa orodha ya vitambulisho vya mchakato.
Hebu angalia hapa uwezo wa tcpdump
baada ya kumpa faili ya binary uwezo wa kutosha (cap_net_admin
na cap_net_raw
) ili kusikiliza mtandao (tcpdump inaendeshwa katika mchakato 9562):
Kama unavyoona uwezo uliotolewa unalingana na matokeo ya njia 2 za kupata uwezo wa faili. Zana ya getpcaps hutumia wito wa mfumo wa capget() kuuliza uwezo uliopo kwa mchakato fulani. Wito huu wa mfumo unahitaji tu kutoa PID ili kupata habari zaidi.
Uwezo wa Faili za Kutekelezwa
Faili za kutekelezwa zinaweza kuwa na uwezo ambao unaweza kutumiwa wakati wa utekelezaji. Kwa mfano, ni kawaida sana kupata faili ya ping
na uwezo wa cap_net_raw
:
Unaweza kutafuta faili za binary zenye uwezo kwa kutumia:
Kupunguza uwezo kwa kutumia capsh
Ikiwa tunapunguza uwezo wa CAP_NET_RAW kwa ping, basi zana ya ping haipaswi tena kufanya kazi.
Isipokuwa matokeo ya capsh yenyewe, amri ya tcpdump yenyewe pia inapaswa kutoa kosa.
/bin/bash: /usr/sbin/tcpdump: Operesheni haikuruhusiwa
Kosa linaonyesha wazi kuwa amri ya ping haijiruhusu kufungua soketi ya ICMP. Sasa tunajua kwa uhakika kuwa hii inafanya kazi kama ilivyotarajiwa.
Ondoa Uwezo
Unaweza kuondoa uwezo wa faili ya binary na
Uwezo wa Mtumiaji
Inaonekana niwezekana pia kumtumia mtumiaji uwezo. Hii inamaanisha kwamba kila mchakato uliofanywa na mtumiaji utaweza kutumia uwezo wa mtumiaji.
Kulingana na hii, hii, na hii, inahitajika kusanidi faili kadhaa ili kumpa mtumiaji uwezo fulani, lakini faili inayoweka uwezo kwa kila mtumiaji itakuwa /etc/security/capability.conf
.
Mfano wa faili:
Uwezo wa Mazingira
Kwa kuchapisha programu ifuatayo, ni inawezekana kuzindua kikao cha bash ndani ya mazingira yanayotoa uwezo.
Ndani ya bash inayotekelezwa na faili ya binary ya mazingira iliyoundwa, niwezekanavyo kuona uwezo mpya (mtumiaji wa kawaida hatakuwa na uwezo wowote katika sehemu ya "sasa").
Unaweza kuongeza uwezo tu ambao upo katika seti zote mbili, yaani seti ya kuruhusiwa na seti ya kurithiwa.
Programu zenye uwezo wa uwezo/Programu zenye uwezo mdogo
Programu zenye uwezo wa uwezo hazitatumia uwezo mpya uliotolewa na mazingira, hata hivyo programu zenye uwezo mdogo zitatumia uwezo huo kwani hazitakataa. Hii inafanya programu zenye uwezo mdogo kuwa hatarini ndani ya mazingira maalum yanayotoa uwezo kwa programu.
Uwezo wa Huduma
Kwa chaguo-msingi, huduma inayotumia akaunti ya root itapewa uwezo wote, na kwa baadhi ya hali hii inaweza kuwa hatari. Kwa hiyo, faili ya usanidi wa huduma inaruhusu kutaja uwezo unayotaka huduma hiyo kuwa nayo, na mtumiaji ambaye anapaswa kutekeleza huduma hiyo ili kuepuka kuendesha huduma na mamlaka zisizo za lazima.
Uwezo katika Kontena za Docker
Kwa chaguo-msingi, Docker inaweka uwezo kadhaa kwa kontena. Ni rahisi sana kuangalia uwezo huu kwa kukimbia:
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa kukuza maarifa ya kiufundi, mkutano huu ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila fani.
Privesc/Container Escape
Uwezo ni muhimu wakati unapotaka kuzuia michakato yako mwenyewe baada ya kufanya shughuli za kipekee (kwa mfano, baada ya kuanzisha chroot na kufunga soketi). Walakini, wanaweza kutumiwa vibaya kwa kusambaza amri au hoja zenye nia mbaya ambazo kisha zinatekelezwa kama mtumiaji mkuu.
Unaweza kulazimisha uwezo kwa programu kwa kutumia setcap
, na kuuliza haya kwa kutumia getcap
:
+ep
inamaanisha unaweka uwezo ("-" ingeondoa) kama Ufanisi na Kuruhusiwa.
Kutambua programu katika mfumo au folda yenye uwezo:
Mfano wa Utekaji
Katika mfano ufuatao, faili ya binary /usr/bin/python2.6
imeonekana kuwa na udhaifu wa kusababisha ongezeko la mamlaka:
Uwezo unaohitajika na tcpdump
ili kuruhusu mtumiaji yeyote kusikiliza pakiti:
This command sets the CAP_NET_RAW
capability for the tcpdump
binary located at /usr/sbin/tcpdump
. With this capability set, any user will be able to run tcpdump
and sniff packets.
Kesi maalum ya uwezo "mtupu"
Kutoka kwenye nyaraka: Tafadhali kumbuka kuwa unaweza kumwezesha uwezo mtupu kwenye faili ya programu, na hivyo niwezekana kuunda programu ya set-user-ID-root ambayo inabadilisha set-user-ID ya mchakato unaoendesha programu kuwa 0, lakini haipati uwezo wowote kwa mchakato huo. Au, kwa maneno rahisi, ikiwa una faili ya binary ambayo:
Haiomilikiwi na root
Haina alama za
SUID
/SGID
zilizowekwaIna uwezo mtupu (kwa mfano:
getcap myelf
inarudimyelf =ep
)
basil binary hiyo itaendeshwa kama root.
CAP_SYS_ADMIN
CAP_SYS_ADMIN
ni uwezo wenye nguvu sana wa Linux, mara nyingi unalinganishwa na kiwango cha karibu-cha-root kutokana na uwezo wake mkubwa wa utawala, kama vile kufunga vifaa au kubadilisha vipengele vya kernel. Ingawa ni muhimu kwa kontena zinazosimulisha mifumo nzima, CAP_SYS_ADMIN
ina changamoto kubwa za usalama, hasa katika mazingira ya kontena, kutokana na uwezekano wake wa kuongeza uwezo na kuhatarisha usalama wa mfumo. Kwa hiyo, matumizi yake yanahitaji tathmini kali ya usalama na usimamizi wa tahadhari, na upendeleo mkubwa wa kuondoa uwezo huu katika kontena maalum ya programu ili kuzingatia kanuni ya uwezo mdogo na kupunguza eneo la shambulio.
Mfano na binary
Kwa kutumia python unaweza kufunga faili iliyobadilishwa ya passwd juu ya faili halisi ya passwd:
Na hatimaye funga faili iliyobadilishwa ya passwd
kwenye /etc/passwd
:
Na utaweza su
kama root kwa kutumia nenosiri "password".
Mfano na mazingira (Docker breakout)
Unaweza kuangalia uwezo uliowezeshwa ndani ya kontena ya Docker kwa kutumia:
Ndani ya matokeo ya awali unaweza kuona kuwa uwezo wa SYS_ADMIN umewezeshwa.
Kuunganisha
Hii inaruhusu kontena ya docker kuunganisha diski ya mwenyeji na kuiwezesha kupata kwa uhuru:
Upatikanaji kamili
Katika njia iliyotangulia tulifanikiwa kupata ufikiaji wa diski ya mwenyeji wa docker. Ikiwa utagundua kuwa mwenyeji anaendesha seva ya ssh, unaweza kuunda mtumiaji ndani ya diski ya mwenyeji wa docker na kufikia kupitia SSH:
CAP_SYS_PTRACE
Hii inamaanisha kuwa unaweza kutoroka kwenye chombo kwa kuingiza shellcode ndani ya mchakato fulani unaoendesha ndani ya mwenyeji. Ili kupata ufikiaji wa michakato inayoendesha ndani ya mwenyeji, chombo kinahitaji kuendeshwa angalau na --pid=host
.
CAP_SYS_PTRACE
inaruhusu uwezo wa kutumia utambuzi na ufuatiliaji wa kazi za mfumo zinazotolewa na ptrace(2)
na wito wa kuambatisha kumbukumbu kama vile process_vm_readv(2)
na process_vm_writev(2)
. Ingawa ni yenye nguvu kwa madhumuni ya uchunguzi na ufuatiliaji, ikiwa CAP_SYS_PTRACE
inawezeshwa bila hatua za kizuizi kama vile kichujio cha seccomp kwenye ptrace(2)
, inaweza kuhatarisha sana usalama wa mfumo. Hasa, inaweza kutumika kuzunguka vizuizi vingine vya usalama, haswa vile vilivyowekwa na seccomp, kama inavyodhihirishwa na uthibitisho wa dhana (PoC) kama huu.
Mfano na binary (python)
Mfano na faili (gdb)
gdb
na uwezo wa ptrace
:
Unda Shellcode na msfvenom kuingiza kwenye kumbukumbu kupitia gdb
Ili kuunda shellcode na msfvenom na kuiingiza kwenye kumbukumbu kupitia gdb, unaweza kufuata hatua zifuatazo:
Kwanza, tumia msfvenom kuunda payload ya shellcode. Chagua payload inayofaa kwa kusudi lako, kama vile
linux/x86/shell_reverse_tcp
. Chini ni mfano wa amri ya msfvenom:Badilisha
<IP yako>
na anwani ya IP ya mashine yako ya kusikiliza na<Namba ya bandari>
na namba ya bandari unayotaka kutumia.Baada ya kutekeleza amri hiyo, msfvenom itaunda faili ya shellcode inayoitwa "shellcode".
Sasa, fungua gdb na uanze kutekeleza programu ambayo unataka kuingiza shellcode ndani yake.
Mara tu programu inapopakia kwenye gdb, tumia amri ifuatayo kuingiza shellcode kwenye kumbukumbu:
Chunguza kwa kina mchakato wa mizizi na gdb na nakili na ubandike mistari ya gdb iliyotengenezwa hapo awali:
Mfano na mazingira (Docker breakout) - Matumizi mengine ya gdb
Ikiwa GDB imefungwa (au unaweza kuifunga kwa kutumia apk add gdb
au apt install gdb
kwa mfano), unaweza kudebugi mchakato kutoka kwenye mwenyeji na kumfanya aite kazi ya system
. (Mbinu hii pia inahitaji uwezo wa SYS_ADMIN
).
Hutaweza kuona matokeo ya amri iliyotekelezwa lakini itatekelezwa na mchakato huo (hivyo pata rev shell).
Ikiwa unapata kosa "Hakuna ishara "system" katika muktadha wa sasa." angalia mfano uliopita wa kupakia shellcode katika programu kupitia gdb.
Mfano na mazingira (Docker breakout) - Uingizaji wa Shellcode
Unaweza kuangalia uwezo uliowezeshwa ndani ya kontena ya docker kwa kutumia:
Orodhesha mchakato unaofanya kazi kwenye mwenyeji ps -eaf
Pata usanifu
uname -m
Tafuta shellcode kwa usanifu (https://www.exploit-db.com/exploits/41128)
Tafuta programu ya kuingiza shellcode kwenye kumbukumbu ya mchakato (https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c)
Badilisha shellcode ndani ya programu na itafsiri
gcc inject.c -o inject
Ingiza na pata shell yako:
./inject 299; nc 172.17.0.1 5600
CAP_SYS_MODULE
CAP_SYS_MODULE
inawezesha mchakato kufanya upakiaji na uondolewaji wa moduli za kernel (init_module(2)
, finit_module(2)
na delete_module(2)
wito wa mfumo), ikitoa ufikiaji moja kwa moja kwa shughuli za msingi za kernel. Uwezo huu unaweka hatari kubwa ya usalama, kwani inawezesha kuongeza mamlaka na kuhatarisha mfumo mzima kwa kuruhusu mabadiliko kwenye kernel, hivyo kukiuka taratibu zote za usalama za Linux, ikiwa ni pamoja na Moduli za Usalama za Linux na kizuizi cha kontena. Hii inamaanisha kuwa unaweza kuweka/kuondoa moduli za kernel kwenye mashine ya mwenyeji.
Mfano na binary
Katika mfano ufuatao, binary python
ina uwezo huu.
Kwa chaguo-msingi, amri ya modprobe
inachunguza orodha ya utegemezi na faili za ramani katika saraka /lib/modules/$(uname -r)
.
Ili kutumia hili vibaya, hebu tujenge saraka bandia ya lib/modules:
Kisha kamilisha moduli ya kernel unaweza kupata mifano 2 hapa chini na nakili kwenye folda hii:
Hatimaye, tekeleza msimbo wa python unaohitajika ili kupakia kifurushi hiki cha kernel:
Mfano 2 na binary
Katika mfano ufuatao binary kmod
ina uwezo huu.
Hii inamaanisha kwamba ni rahisi kutumia amri insmod
kuweka moduli ya kernel. Fuata mfano hapa chini ili kupata shell ya nyuma kwa kutumia mamlaka haya.
Mfano na mazingira (Docker breakout)
Unaweza kuangalia uwezo uliowezeshwa ndani ya kontena ya docker kwa kutumia:
Ndani ya matokeo ya awali unaweza kuona kuwa uwezo wa SYS_MODULE umewezeshwa.
Tengeneza moduli ya kernel ambayo itatekeleza kitanzi cha kurudisha na Makefile ya kuikusanya:
Neno tupu kabla ya kila neno la kufanya katika faili ya Kufanya lazima iwe tab, sio nafasi!
Tumia fanya
ili kuikusanya.
Hatimaye, anza nc
ndani ya kikao na pakiwa moduli kutoka kikao kingine na utapata kikao katika mchakato wa nc:
Msimbo wa mbinu hii ulichukuliwa kutoka kwenye maabara ya "Abusing SYS_MODULE Capability" 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
CAP_DAC_READ_SEARCH inawezesha mchakato kukiuka ruhusa za kusoma faili na kusoma na kutekeleza saraka. Matumizi yake kuu ni kwa ajili ya utafutaji wa faili au kusoma. Walakini, pia inaruhusu mchakato kutumia kazi ya open_by_handle_at(2)
, ambayo inaweza kupata faili yoyote, ikiwa ni pamoja na zile nje ya kipekee cha mchakato. Kipekee kinachotumiwa katika open_by_handle_at(2)
kinapaswa kuwa kitambulisho kisichoweza kuonekana kupitia name_to_handle_at(2)
, lakini inaweza kujumuisha habari nyeti kama nambari za inode ambazo zinaweza kudukuliwa. Uwezekano wa kutumia uwezo huu, haswa katika muktadha wa vyombo vya Docker, ulidhihirishwa na Sebastian Krahmer na shambulio la shocker, kama ilivyoainishwa hapa. Hii inamaanisha kuwa unaweza kukiuka ukaguzi wa ruhusa za kusoma faili na ukaguzi wa ruhusa za kusoma/utekelezaji wa saraka.
Mfano na faili ya binary
Faili ya binary itaweza kusoma faili yoyote. Kwa hivyo, ikiwa faili kama tar ina uwezo huu, itaweza kusoma faili ya shadow:
Mfano na binary2
Katika kesi hii, fikiria kuwa kuna uwezo huu kwenye binary ya python
. Ili kuorodhesha faili za mizizi, unaweza kufanya yafuatayo:
Na ili kusoma faili unaweza kufanya:
Mfano katika Mazingira (Docker breakout)
Unaweza kuangalia uwezo uliowezeshwa ndani ya kontena ya docker kwa kutumia:
Ndani ya matokeo ya awali unaweza kuona kuwa uwezo wa DAC_READ_SEARCH umewezeshwa. Kama matokeo, chombo kinaweza kuchunguza michakato.
Unaweza kujifunza jinsi mbinu ifuatayo inavyofanya kazi katika https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3 lakini kwa muhtasari CAP_DAC_READ_SEARCH sio tu inaturuhusu kupitia mfumo wa faili bila ukaguzi wa idhini, lakini pia inaondoa wazi ukaguzi wowote kwa open_by_handle_at(2) na inaweza kuruhusu michakato yetu kufikia faili nyeti zilizofunguliwa na michakato mingine.
Mbinu ya awali ambayo inatumia uwezo huu kusoma faili kutoka kwenye mwenyeji inaweza kupatikana hapa: http://stealth.openwall.net/xSports/shocker.c, ifuatayo ni toleo lililobadilishwa ambalo linakuwezesha kuonyesha faili unayotaka kusoma kama hoja ya kwanza na kuiweka kwenye faili.
Exploit hii inahitaji kupata pointer kwa kitu kilichomount kwenye mwenyeji. Exploit ya awali ilikuwa inatumia faili /.dockerinit na toleo lililobadilishwa linatumia /etc/hostname. Ikiwa exploit haifanyi kazi, labda unahitaji kuweka faili tofauti. Ili kupata faili ambayo imemount kwenye mwenyeji, tuendeshe amri ya mount:
Msimbo wa mbinu hii ulichukuliwa kutoka kwenye maabara ya "Abusing DAC_READ_SEARCH Capability" kutoka https://www.pentesteracademy.com/
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Spain na moja ya muhimu zaidi barani Ulaya. Kwa kukuza maarifa ya kiufundi, mkutano huu ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila fani.
CAP_DAC_OVERRIDE
Hii inamaanisha kuwa unaweza kuepuka ukaguzi wa ruhusa ya kuandika kwenye faili yoyote, hivyo unaweza kuandika faili yoyote.
Kuna faili nyingi unazoweza kuandika upya ili kuongeza mamlaka, unaweza kupata wazo kutoka hapa.
Mfano na binary
Katika mfano huu, vim ina uwezo huu, hivyo unaweza kubadilisha faili yoyote kama passwd, sudoers au shadow:
Mfano na faili ya 2
Katika mfano huu, faili ya python
itakuwa na uwezo huu. Unaweza kutumia python kubadilisha faili yoyote:
Mfano na mazingira + CAP_DAC_READ_SEARCH (Docker breakout)
Unaweza kuangalia uwezo uliowezeshwa ndani ya chombo cha docker kwa kutumia:
Kwanza soma sehemu iliyotangulia ambayo inatumia uwezo wa DAC_READ_SEARCH kusoma faili za aina yoyote ya mwenyeji na kuchakata shambulio. Kisha, chakata toleo lifuatalo la shambulio la shocker ambalo litakuruhusu kuandika faili za aina yoyote ndani ya mfumo wa faili wa mwenyeji:
Ili kutoroka kwenye kontena ya docker unaweza kupakua faili /etc/shadow
na /etc/passwd
kutoka kwenye mwenyeji, kuongeza mtumiaji mpya, na kutumia shocker_write
kuwafuta. Kisha, fikia kupitia ssh.
Msimbo wa mbinu hii ulichukuliwa kutoka kwenye maabara ya "Abusing DAC_OVERRIDE Capability" kutoka https://www.pentesteracademy.com
CAP_CHOWN
Hii inamaanisha kuwa niwezekana kubadilisha umiliki wa faili yoyote.
Mfano na binary
Tuchukulie kuwa binary ya python
ina uwezo huu, unaweza kubadilisha umiliki wa faili ya shadow, kubadilisha nenosiri la root, na kuongeza mamlaka:
Au na ruby
binary ikiwa na uwezo huu:
CAP_FOWNER
Hii inamaanisha kwamba niwezekana kubadilisha ruhusa ya faili yoyote.
Mfano na binary
Ikiwa python ina uwezo huu, unaweza kubadilisha ruhusa ya faili ya kivuli, kubadilisha nenosiri la root, na kuongeza mamlaka:
CAP_SETUID
Hii inamaanisha kwamba ni rahisi kuweka kitambulisho cha mtumiaji kinachotumika kwenye mchakato ulioundwa.
Mfano na faili ya binary
Ikiwa python ina uwezo huu, unaweza kuitumia kwa urahisi kuongeza mamlaka hadi kwenye akaunti ya msimamizi (root):
Njia nyingine:
CAP_SETGID
Hii inamaanisha kwamba niwezekana kuweka kitambulisho cha kikundi cha mchakato ulioundwa.
Kuna faili nyingi unaweza kubadilisha ili kuongeza mamlaka, unaweza kupata wazo hapa.
Mfano na binary
Katika kesi hii, unapaswa kutafuta faili za kuvutia ambazo kikundi kinaweza kusoma kwa sababu unaweza kujifanya kuwa kikundi chochote:
Marafiki, mara tu utakapopata faili ambayo unaweza kuitumia (kwa kusoma au kuandika) ili kuongeza mamlaka, unaweza kupata kifaa cha kuingia kwa kujifanya kama kikundi kinachovutia kwa kutumia:
Katika kesi hii, kikundi cha shadow kilijifanya ili uweze kusoma faili /etc/shadow
:
Ikiwa docker imefungwa, unaweza kujifanya kama kikundi cha docker na kuitumia vibaya kuwasiliana na socket ya docker na kuongeza mamlaka.
CAP_SETFCAP
Hii inamaanisha kuwa ni rahisi kuweka uwezo kwenye faili na michakato
Mfano na faili ya binary
Ikiwa python ina uwezo huu, unaweza kuitumia kwa urahisi kuongeza mamlaka hadi kwa mtumiaji mkuu:
Tafadhali kumbuka kuwa ikiwa unaweka uwezo mpya kwa faili ya CAP_SETFCAP, utapoteza uwezo huu.
Marafiki wakati unaweka uwezo wa SETUID kwenye faili, unaweza kwenda kwenye sehemu yake kuona jinsi ya kuongeza mamlaka.
Mfano na mazingira (Docker breakout)
Kwa chaguo-msingi, uwezo wa CAP_SETFCAP unapewa kwa mchakato ndani ya kontena kwenye Docker. Unaweza kuthibitisha hilo kwa kufanya kitu kama:
Uwezo huu unaruhusu kutoa uwezo wowote kwa faili za binary, hivyo tunaweza kufikiria kuhusu kutoroka kutoka kwenye chombo kwa kutumia uwezo mwingine uliovunjika uliotajwa kwenye ukurasa huu. Hata hivyo, ikiwa utajaribu kutoa uwezo wa CAP_SYS_ADMIN na CAP_SYS_PTRACE kwa faili ya gdb, utagundua kuwa unaweza kutoa uwezo huo, lakini faili ya binary haitaweza kutekelezwa baada ya hapo:
Kutoka kwa nyaraka: Kuruhusiwa: Hii ni seti ya kikomo kwa uwezo halisi ambao mchakato unaweza kutumia. Pia ni seti ya kikomo kwa uwezo ambao unaweza kuongezwa kwenye seti ya kurithiwa na mchakato ambao haujapata uwezo wa CAP_SETPCAP kwenye seti yake ya uwezo halisi. Inaonekana kama uwezo ulioruhusiwa unapunguza uwezo ambao unaweza kutumika. Hata hivyo, Docker pia hutoa CAP_SETPCAP kwa chaguo-msingi, kwa hivyo huenda uweze kuweka uwezo mpya ndani ya uwezo wa kurithiwa. Hata hivyo, kwenye nyaraka za uwezo huu: CAP_SETPCAP: […] ongeza uwezo wowote kutoka kwenye seti ya mipaka ya mchakato unaopiga simu kwenye seti yake ya kurithiwa. Inaonekana kama tunaweza kuongeza 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 kwenye seti ya kurithiwa ili kuongeza uwezo wa mamlaka.
CAP_SYS_RAWIO
CAP_SYS_RAWIO hutoa shughuli kadhaa nyeti ikiwa ni pamoja na upatikanaji wa /dev/mem
, /dev/kmem
au /proc/kcore
, kubadilisha mmap_min_addr
, upatikanaji wa wito wa mfumo wa ioperm(2)
na iopl(2)
, na amri mbalimbali za diski. FIBMAP ioctl(2)
pia imeamilishwa kupitia uwezo huu, ambao umesababisha matatizo katika siku za nyuma. Kulingana na ukurasa wa mwongozo, hii pia inaruhusu mmiliki kufanya shughuli mbalimbali za kifaa maalum kwenye vifaa vingine
.
Hii inaweza kuwa na manufaa kwa kuongeza mamlaka na kuvunja kizuizi cha Docker.
CAP_KILL
Hii inamaanisha kwamba ni rahisi kuua mchakato wowote.
Mfano na faili ya binary
Tufikirie faili ya binary ya python
ina uwezo huu. Ikiwa ungekuwa pia unaweza kubadilisha mipangilio ya huduma au soketi (au faili yoyote ya mipangilio inayohusiana na huduma) unaweza kuweka mlango nyuma, kisha kuua mchakato unaohusiana na huduma hiyo na kusubiri faili ya mipangilio mpya itekelezwe na mlango nyuma wako.
Privesc na kill
Ikiwa una uwezo wa kuuwa na kuna programu ya node inayotumika kama root (au kama mtumiaji tofauti), labda unaweza kupeleka ishara ya SIGUSR1 na kufanya iifungue msanidi wa node ambapo unaweza kuunganisha.
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa kukuza maarifa ya kiufundi, mkutano huu ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila fani.
CAP_NET_BIND_SERVICE
Hii inamaanisha kuwa ni rahisi kusikiliza kwenye bandari yoyote (hata kwenye bandari zenye mamlaka). Hauwezi kuongeza mamlaka moja kwa moja na uwezo huu.
Mfano na binary
Ikiwa python
ina uwezo huu, itaweza kusikiliza kwenye bandari yoyote na hata kuunganisha kutoka kwenye bandari nyingine yoyote (baadhi ya huduma zinahitaji uhusiano kutoka kwenye bandari maalum za mamlaka)
Weka uhusiano na mfumo wa malengo kwa kutumia njia zifuatazo:
SSH: Tumia amri
ssh
kuingia kwenye mfumo wa malengo kwa kutumia kitambulisho cha SSH.RDP: Tumia amri
xfreerdp
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya RDP.VNC: Tumia amri
vncviewer
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya VNC.Telnet: Tumia amri
telnet
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya Telnet.FTP: Tumia amri
ftp
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya FTP.SMB: Tumia amri
smbclient
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya SMB.HTTP: Tumia kivinjari cha wavuti kufikia mfumo wa malengo kupitia itifaki ya HTTP.
HTTPS: Tumia kivinjari cha wavuti kufikia mfumo wa malengo kupitia itifaki ya HTTPS.
WinRM: Tumia amri
winrm
kuingia kwenye mfumo wa malengo kwa kutumia itifaki ya WinRM.SSH Tunnel: Tumia amri
ssh
kuunda handaki la SSH kuelekeza trafiki ya itifaki nyingine kwenye mfumo wa malengo.
Kumbuka kurekebisha amri kulingana na mazingira yako na maelezo ya mfumo wa malengo.
CAP_NET_RAW
CAP_NET_RAW uwezo unaruhusu michakato kuunda soketi za RAW na PACKET, ikiruhusu kutengeneza na kutuma pakiti za mtandao za aina yoyote. Hii inaweza kusababisha hatari za usalama katika mazingira ya kontena, kama vile kudanganya pakiti, kuingiza trafiki, na kuzunguka udhibiti wa upatikanaji wa mtandao. Watendaji wa uovu wanaweza kutumia hii kuingilia kati na ujumbe wa kontena au kuhatarisha usalama wa mtandao wa mwenyeji, haswa bila ulinzi wa kutosha wa kifaa cha moto. Zaidi ya hayo, CAP_NET_RAW ni muhimu kwa kontena zenye mamlaka kuunga mkono shughuli kama vile ping kupitia ombi za ICMP za aina ya RAW.
Hii inamaanisha kuwa ni rahisi kusikiliza trafiki. Hauwezi kuongeza mamlaka moja kwa moja na uwezo huu.
Mfano na binary
Ikiwa binary tcpdump
ina uwezo huu, utaweza kutumia kuikamata habari ya mtandao.
Tafadhali kumbuka kuwa ikiwa mazingira yanatoa uwezo huu, unaweza pia kutumia tcpdump
kusikiliza trafiki.
Mfano na binary 2
Mfano ufuatao ni msimbo wa python2
ambao unaweza kuwa na manufaa katika kuvuruga trafiki ya kiolesura cha "lo" (localhost). Msimbo huu umetoka kwenye maabara "The Basics: CAP-NET_BIND + NET_RAW" kutoka https://attackdefense.pentesteracademy.com/
CAP_NET_ADMIN + CAP_NET_RAW
Uwezo wa CAP_NET_ADMIN unawapa mmiliki uwezo wa kubadilisha mipangilio ya mtandao, ikiwa ni pamoja na mipangilio ya firewall, meza za mwelekeo, ruhusa za soketi, na mipangilio ya kiolesura cha mtandao ndani ya majina ya nafasi ya mtandao yaliyofichuliwa. Pia inawezesha kuwasha hali ya kusikiliza kwenye vipengele vya mtandao, kuruhusu uchunguzi wa pakiti kote kwenye majina ya nafasi.
Mfano na faili ya binary
Tuchukulie kuwa faili ya python binary ina uwezo huu.
CAP_LINUX_IMMUTABLE
Hii inamaanisha kuwa niwezekana kubadilisha sifa za inode. Hauwezi kuongeza mamlaka moja kwa moja na uwezo huu.
Mfano na binary
Ikiwa unagundua kuwa faili ni isiyo badilika na python ina uwezo huu, unaweza kuondoa sifa ya isiyo badilika na kufanya faili iweze kubadilishwa:
Tafadhali kumbuka kuwa kawaida sifa hii isiyoweza kubadilishwa huwekwa na kuondolewa kwa kutumia:
CAP_SYS_CHROOT
CAP_SYS_CHROOT inawezesha utekelezaji wa wito wa mfumo wa chroot(2)
, ambao unaweza kuruhusu kutoroka kutoka kwa mazingira ya chroot(2)
kupitia udhaifu uliojulikana:
CAP_SYS_BOOT
CAP_SYS_BOOT sio tu inaruhusu utekelezaji wa wito wa mfumo wa reboot(2)
kwa ajili ya kuanzisha upya mfumo, ikiwa ni pamoja na amri maalum kama LINUX_REBOOT_CMD_RESTART2
iliyoundwa kwa jukwaa fulani la vifaa, lakini pia inawezesha matumizi ya kexec_load(2)
na, kutoka Linux 3.17 kuendelea, kexec_file_load(2)
kwa ajili ya kupakia mifumo ya kuyumba mpya au iliyosainiwa mtawaliwa.
CAP_SYSLOG
CAP_SYSLOG iligawanywa kutoka CAP_SYS_ADMIN pana katika Linux 2.6.37, ikiruhusu hasa matumizi ya wito wa syslog(2)
. Uwezo huu unawezesha kuangalia anwani za kernel kupitia /proc
na interfaces kama hizo wakati mipangilio ya kptr_restrict
iko kwenye 1, ambayo inadhibiti ufunuo wa anwani za kernel. Tangu Linux 2.6.39, chaguo-msingi kwa kptr_restrict
ni 0, maana anwani za kernel zinafunuliwa, ingawa usambazaji wengi huiweka kwenye 1 (ficha anwani isipokuwa kutoka kwa uid 0) au 2 (ficha anwani daima) kwa sababu za usalama.
Zaidi ya hayo, CAP_SYSLOG inaruhusu kupata matokeo ya dmesg
wakati dmesg_restrict
imewekwa kwenye 1. Licha ya mabadiliko haya, CAP_SYS_ADMIN inaendelea kuwa na uwezo wa kufanya operesheni za syslog
kutokana na mifano ya kihistoria.
CAP_MKNOD
CAP_MKNOD inapanua utendaji wa wito wa mfumo wa mknod
zaidi ya kuunda faili za kawaida, FIFO (mabomba yaliyopewa majina), au soketi za uwanja wa UNIX. Hasa inaruhusu kuunda faili maalum, ambazo ni pamoja na:
S_IFCHR: Faili maalum ya wahusika, ambayo ni vifaa kama vituo vya mawasiliano.
S_IFBLK: Faili maalum ya kuzuia, ambayo ni vifaa kama diski.
Uwezo huu ni muhimu kwa michakato ambayo inahitaji uwezo wa kuunda faili za kifaa, kurahisisha mwingiliano wa moja kwa moja na vifaa vya vifaa kupitia vifaa vya wahusika au vifaa vya kuzuia.
Hii ni uwezo wa msingi wa docker (https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19).
Uwezo huu unaruhusu kufanya uongezaji wa haki za kibali (kupitia kusoma diski kamili) kwenye mwenyeji, chini ya hali zifuatazo:
Kuwa na ufikiaji wa awali kwa mwenyeji (bila haki za kibali).
Kuwa na ufikiaji wa awali kwa kontena (yenye haki za kibali (EUID 0), na uwezo wa
CAP_MKNOD
).Mwenyeji na kontena wanapaswa kushiriki nafasi ya mtumiaji sawa.
Hatua za Kuunda na Kupata Kifaa cha Kuzuia kwenye Kontena:
Kwenye Mwenyeji kama Mtumiaji wa Kawaida:
Tambua kitambulisho chako cha sasa cha mtumiaji na
id
, kwa mfano,uid=1000(standarduser)
.Tambua kifaa cha lengo, kwa mfano,
/dev/sdb
.
Ndani ya Kontena kama
root
:
Rudi kwenye Mwenyeji:
Hii njia inaruhusu mtumiaji wa kawaida kupata na labda kusoma data kutoka /dev/sdb
kupitia kontena, kwa kutumia nafasi za mtumiaji zilizoshirikiwa na ruhusa zilizowekwa kwenye kifaa.
CAP_SETPCAP
CAP_SETPCAP inawezesha mchakato kubadilisha seti za uwezo za mchakato mwingine, kuruhusu kuongeza au kuondoa uwezo kutoka kwenye seti za uwezo zilizopo, kurithiwa, na kuruhusiwa. Walakini, mchakato huo unaweza tu kubadilisha uwezo ambao una katika seti yake ya kuruhusiwa, kuhakikisha kuwa hauwezi kuinua mamlaka ya mchakato mwingine zaidi ya mamlaka yake mwenyewe. Maboresho ya hivi karibuni kwenye kernel yameimarisha sheria hizi, kuzuia CAP_SETPCAP
kufanya tu uwezo wa kupunguza katika seti zake za kuruhusiwa au za watoto wake, lengo likiwa kupunguza hatari za usalama. Matumizi yanahitaji kuwa na CAP_SETPCAP
katika seti ya uwezo inayofanya kazi na uwezo wa lengo katika seti ya kuruhusiwa, kwa kutumia capset()
kwa marekebisho. Hii inafupisha kazi kuu na mipaka ya CAP_SETPCAP
, ikionyesha jukumu lake katika usimamizi wa mamlaka na kuimarisha usalama.
CAP_SETPCAP
ni uwezo wa Linux ambao inaruhusu mchakato kubadilisha seti za uwezo za mchakato mwingine. Inatoa uwezo wa kuongeza au kuondoa uwezo kutoka kwenye seti za uwezo zilizopo, kurithiwa, na kuruhusiwa za mchakato mwingine. Walakini, kuna vizuizi fulani juu ya jinsi uwezo huu unaweza kutumika.
Mchakato wenye CAP_SETPCAP
anaweza tu kutoa au kuondoa uwezo ambao upo katika seti yake ya uwezo iliyoruhusiwa. Kwa maneno mengine, mchakato hauwezi kutoa uwezo kwa mchakato mwingine ikiwa hauna uwezo huo mwenyewe. Kizuizi hiki kinazuia mchakato kuinua mamlaka ya mchakato mwingine zaidi ya kiwango chake cha mamlaka.
Zaidi ya hayo, katika toleo jipya la kernel, uwezo wa CAP_SETPCAP
umepata kizuizi zaidi. Sasa haikuruhusu mchakato kubadilisha seti za uwezo za mchakato mwingine kwa hiari. Badala yake, inaruhusu mchakato kupunguza uwezo katika seti yake ya uwezo iliyoruhusiwa au seti ya uwezo iliyoruhusiwa ya watoto wake. Mabadiliko haya yalifanywa ili kupunguza hatari za usalama zinazohusiana na uwezo huo.
Ili kutumia CAP_SETPCAP
kwa ufanisi, unahitaji kuwa na uwezo huo katika seti yako ya uwezo inayofanya kazi na uwezo wa lengo katika seti yako ya uwezo iliyoruhusiwa. Kisha unaweza kutumia wito wa mfumo wa capset()
kubadilisha seti za uwezo za mchakato mwingine.
Kwa muhtasari, CAP_SETPCAP
inaruhusu mchakato kubadilisha seti za uwezo za mchakato mwingine, lakini hauwezi kutoa uwezo ambao hauna mwenyewe. Zaidi ya hayo, kutokana na wasiwasi wa usalama, utendaji wake umepunguzwa katika toleo jipya la kernel ili kuruhusu tu kupunguza uwezo katika seti yake ya uwezo iliyoruhusiwa au seti ya uwezo iliyoruhusiwa ya watoto wake.
Marejeo
Mifano mingi ya hii ilichukuliwa kutoka kwa maabara fulani za https://attackdefense.pentesteracademy.com/, kwa hivyo ikiwa unataka kufanya mazoezi ya mbinu hizi za kuongeza mamlaka, napendekeza maabara haya.
Marejeo mengine:
RootedCON ni tukio muhimu zaidi la usalama wa mtandao nchini Hispania na moja ya muhimu zaidi barani Ulaya. Kwa kukuza maarifa ya kiufundi, mkutano huu ni mahali pa kukutana kwa wataalamu wa teknolojia na usalama wa mtandao katika kila uwanja.
Last updated