Linux Capabilities
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON je najrelevantnija sajber bezbednosna manifestacija u Španiji i jedna od najvažnijih u Evropi. Sa misijom promovisanja tehničkog znanja, ovaj kongres je vrelo okupljanje za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.\
Linux Capabilities
Linux capabilities dele root privilegije na manje, različite jedinice, omogućavajući procesima da imaju podskup privilegija. Ovo minimizira rizike ne dodeljujući nepotrebno pune root privilegije.
Problem:
Normalni korisnici imaju ograničena ovlašćenja, što utiče na zadatke kao što je otvaranje mrežnog soketa koji zahteva root pristup.
Skupovi privilegija:
Inherited (CapInh):
Svrha: Određuje privilegije koje se prenose sa roditeljskog procesa.
Funkcionalnost: Kada se kreira novi proces, on nasleđuje privilegije iz ovog skupa. Korisno za održavanje određenih privilegija tokom pokretanja procesa.
Ograničenja: Proces ne može steći privilegije koje njegov roditelj nije posedovao.
Effective (CapEff):
Svrha: Predstavlja stvarne privilegije koje proces koristi u bilo kojem trenutku.
Funkcionalnost: To je skup privilegija koje kernel proverava da bi odobrio dozvolu za razne operacije. Za datoteke, ovaj skup može biti oznaka koja ukazuje da li su dozvoljene privilegije datoteke da se smatraju efektivnim.
Značaj: Efektivni skup je ključan za trenutne provere privilegija, delujući kao aktivni skup privilegija koje proces može koristiti.
Permitted (CapPrm):
Svrha: Definiše maksimalni skup privilegija koje proces može posedovati.
Funkcionalnost: Proces može podići privilegiju iz dozvoljenog skupa u svoj efektivni skup, dajući mu mogućnost da koristi tu privilegiju. Takođe može odbaciti privilegije iz svog dozvoljenog skupa.
Granica: Deluje kao gornja granica za privilegije koje proces može imati, osiguravajući da proces ne premaši svoj unapred definisani opseg privilegija.
Bounding (CapBnd):
Svrha: Postavlja plafon na privilegije koje proces može steći tokom svog životnog ciklusa.
Funkcionalnost: Čak i ako proces ima određenu privilegiju u svom nasledivom ili dozvoljenom skupu, ne može steći tu privilegiju osim ako nije takođe u bounding skupu.
Upotreba: Ovaj skup je posebno koristan za ograničavanje potencijala eskalacije privilegija procesa, dodajući dodatni sloj bezbednosti.
Ambient (CapAmb):
Svrha: Omogućava održavanje određenih privilegija tokom
execve
sistemskog poziva, što bi obično rezultiralo potpunim resetovanjem privilegija procesa.Funkcionalnost: Osigurava da ne-SUID programi koji nemaju povezane privilegije datoteka mogu zadržati određene privilegije.
Ograničenja: Privilegije u ovom skupu podložne su ograničenjima nasledivih i dozvoljenih skupova, osiguravajući da ne premaše dozvoljena privilegije procesa.
Za više informacija proverite:
Procesi & Binarne sposobnosti
Sposobnosti procesa
Da biste videli sposobnosti za određeni proces, koristite status datoteku u /proc direktorijumu. Kako bi se pružilo više detalja, ograničimo se samo na informacije vezane za Linux sposobnosti. Imajte na umu da se za sve aktivne procese informacije o sposobnostima čuvaju po niti, dok se za binarne datoteke u datotečnom sistemu čuvaju u proširenim atributima.
Možete pronaći sposobnosti definisane u /usr/include/linux/capability.h
Možete pronaći sposobnosti trenutnog procesa u cat /proc/self/status
ili koristeći capsh --print
, a sposobnosti drugih korisnika u /proc/<pid>/status
Ova komanda bi trebala da vrati 5 redova na većini sistema.
CapInh = Nasleđene sposobnosti
CapPrm = Dozvoljene sposobnosti
CapEff = Efikasne sposobnosti
CapBnd = Ograničeni skup
CapAmb = Skup ambijentalnih sposobnosti
Ove heksadecimalne brojeve nema smisla. Koristeći capsh alat, možemo ih dekodirati u imena sposobnosti.
Hajde da proverimo capabilities koje koristi ping
:
Iako to funkcioniše, postoji još jedan i lakši način. Da biste videli sposobnosti pokrenutog procesa, jednostavno koristite alat getpcaps praćen njegovim ID-jem procesa (PID). Takođe možete navesti listu ID-eva procesa.
Hajde da proverimo ovde mogućnosti tcpdump
-a nakon što smo binarnoj datoteci dali dovoljno mogućnosti (cap_net_admin
i cap_net_raw
) da presreće mrežu (tcpdump se izvršava u procesu 9562):
Kao što možete videti, date sposobnosti odgovaraju rezultatima 2 načina dobijanja sposobnosti binarne datoteke. Alat getpcaps koristi capget() sistemski poziv za upit dostupnih sposobnosti za određenu nit. Ovaj sistemski poziv samo treba da pruži PID da bi dobio više informacija.
Sposobnosti binarnih datoteka
Binarne datoteke mogu imati sposobnosti koje se mogu koristiti tokom izvršavanja. Na primer, veoma je uobičajeno pronaći ping
binarnu datoteku sa cap_net_raw
sposobnošću:
Možete pretraživati binarne datoteke sa sposobnostima koristeći:
Dropping capabilities with capsh
Ako uklonimo CAP_NET_RAW sposobnosti za ping, tada alatka ping više ne bi trebala da funkcioniše.
Pored izlaza capsh samog, komanda tcpdump takođe treba da izazove grešku.
/bin/bash: /usr/sbin/tcpdump: Operacija nije dozvoljena
Greška jasno pokazuje da ping komanda nema dozvolu da otvori ICMP soket. Sada znamo sa sigurnošću da ovo funkcioniše kako se očekuje.
Ukloni Kapacitete
Možete ukloniti kapacitete binarne datoteke sa
User Capabilities
Naizgled je moguće dodeliti sposobnosti i korisnicima. To verovatno znači da će svaki proces koji izvrši korisnik moći da koristi sposobnosti korisnika.
Na osnovu ovoga, ovoga i ovoga potrebno je konfigurisati nekoliko datoteka kako bi se korisniku dodelile određene sposobnosti, ali datoteka koja dodeljuje sposobnosti svakom korisniku biće /etc/security/capability.conf
.
Primer datoteke:
Environment Capabilities
Kompajliranjem sledećeg programa moguće je pokrenuti bash shell unutar okruženja koje pruža sposobnosti.
Unutar bash-a koji izvršava kompajlirani ambijentalni binarni fajl moguće je posmatrati nove sposobnosti (običan korisnik neće imati nikakvu sposobnost u "trenutnom" odeljku).
Možete samo dodati sposobnosti koje su prisutne u dozvoljenom i naslednom skupu.
Binarni fajlovi s sposobnostima / Binarni fajlovi bez sposobnosti
Binarni fajlovi s sposobnostima neće koristiti nove sposobnosti koje daje okruženje, međutim binarni fajlovi bez sposobnosti će ih koristiti jer ih neće odbaciti. To čini binarne fajlove bez sposobnosti ranjivim unutar posebnog okruženja koje dodeljuje sposobnosti binarnim fajlovima.
Sposobnosti usluga
Podrazumevano, usluga koja se pokreće kao root će imati dodeljene sve sposobnosti, i u nekim slučajevima to može biti opasno. Zato, konfiguracioni fajl za uslugu omogućava da specifikujete sposobnosti koje želite da ima, i korisnika koji treba da izvrši uslugu kako bi se izbeglo pokretanje usluge sa nepotrebnim privilegijama:
Capabilities in Docker Containers
Podrazumevano, Docker dodeljuje nekoliko sposobnosti kontejnerima. Veoma je lako proveriti koje su to sposobnosti pokretanjem:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON je najrelevantnija sajber bezbednosna manifestacija u Španiji i jedna od najvažnijih u Evropi. Sa misijom promovisanja tehničkog znanja, ovaj kongres je vrelo okupljanje za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
Privesc/Container Escape
Kapaciteti su korisni kada želite da ograničite svoje procese nakon izvršavanja privilegovanih operacija (npr. nakon postavljanja chroot i vezivanja za soket). Međutim, mogu se iskoristiti tako što im se proslede zlonamerni komandi ili argumenti koji se zatim izvršavaju kao root.
Možete primeniti kapacitete na programe koristeći setcap
, i upitati ih koristeći getcap
:
+ep
znači da dodajete sposobnost (“-” bi je uklonio) kao Efikasnu i Dozvoljenu.
Da identifikujete programe u sistemu ili folderu sa sposobnostima:
Пример експлоатације
У следећем примеру бинарни фајл /usr/bin/python2.6
је пронађен као подложан преласку привилегија:
Capabilities potrebne za tcpdump
da omogući bilo kojem korisniku da presreće pakete:
Poseban slučaj "praznih" sposobnosti
Iz dokumenata: Imajte na umu da se prazni skupovi sposobnosti mogu dodeliti datoteci programa, i tako je moguće kreirati program sa set-user-ID-root koji menja efektivni i sačuvani set-user-ID procesa koji izvršava program na 0, ali ne dodeljuje nikakve sposobnosti tom procesu. Ili, jednostavno rečeno, ako imate binarni fajl koji:
nije u vlasništvu root-a
nema postavljene
SUID
/SGID
bitoveima prazan skup sposobnosti (npr.:
getcap myelf
vraćamyelf =ep
)
onda će taj binarni fajl raditi kao root.
CAP_SYS_ADMIN
CAP_SYS_ADMIN
je veoma moćna Linux sposobnost, često izjednačena sa skoro root nivoom zbog svojih opsežnih administrativnih privilegija, kao što su montiranje uređaja ili manipulacija funkcijama jezgra. Dok je neophodna za kontejnere koji simuliraju cele sisteme, CAP_SYS_ADMIN
predstavlja značajne bezbednosne izazove, posebno u kontejnerizovanim okruženjima, zbog svog potencijala za eskalaciju privilegija i kompromitaciju sistema. Stoga, njena upotreba zahteva stroge bezbednosne procene i oprezno upravljanje, sa jakim preferencijama za odbacivanje ove sposobnosti u kontejnerima specifičnim za aplikacije kako bi se pridržavali principa minimalnih privilegija i smanjili površinu napada.
Primer sa binarnim fajlom
Korišćenjem Pythona možete montirati izmenjenu passwd datoteku na vrh prave passwd datoteke:
I konačno montirajte izmenjenu passwd
datoteku na /etc/passwd
:
I moći ćete da su
kao root koristeći lozinku "password".
Primer sa okruženjem (Docker breakout)
Možete proveriti omogućene sposobnosti unutar docker kontejnera koristeći:
Unutar prethodnog izlaza možete videti da je SYS_ADMIN sposobnost omogućena.
Mount
Ovo omogućava docker kontejneru da montira host disk i slobodno mu pristupa:
Potpun pristup
U prethodnoj metodi uspeli smo da pristupimo disku docker host-a. U slučaju da otkrijete da host pokreće ssh server, mogli biste napraviti korisnika unutar diska docker host-a i pristupiti mu putem SSH:
CAP_SYS_PTRACE
To znači da možete pobjeći iz kontejnera injektovanjem shell koda unutar nekog procesa koji se izvršava unutar hosta. Da bi se pristupilo procesima koji se izvršavaju unutar hosta, kontejner treba da se pokrene barem sa --pid=host
.
CAP_SYS_PTRACE
daje mogućnost korišćenja funkcionalnosti za debagovanje i praćenje sistemskih poziva koje pruža ptrace(2)
i pozive za preuzimanje memorije kao što su process_vm_readv(2)
i process_vm_writev(2)
. Iako je moćan za dijagnostičke i monitoring svrhe, ako je CAP_SYS_PTRACE
omogućen bez restriktivnih mera poput seccomp filtera na ptrace(2)
, može značajno oslabiti bezbednost sistema. Konkretno, može se iskoristiti za zaobilaženje drugih bezbednosnih ograničenja, posebno onih koje nameće seccomp, kao što je prikazano u dokazima koncepta (PoC) poput ovog.
Primer sa binarnim (python)
Пример са бинарним (gdb)
gdb
са ptrace
способношћу:
Kreirajte shellcode sa msfvenom za ubrizgavanje u memoriju putem gdb
Debugujte root proces sa gdb i kopirajte prethodno generisane gdb linije:
Primer sa okruženjem (Docker breakout) - Još jedna zloupotreba gdb-a
Ako je GDB instaliran (ili ga možete instalirati sa apk add gdb
ili apt install gdb
, na primer) možete debug-ovati proces sa hosta i naterati ga da pozove funkciju system
. (Ova tehnika takođe zahteva sposobnost SYS_ADMIN
).
Nećete moći da vidite izlaz komande koja je izvršena, ali će biti izvršena od strane tog procesa (tako da dobijete rev shell).
Ako dobijete grešku "No symbol "system" in current context.", proverite prethodni primer učitavanja shellcode-a u program putem gdb-a.
Primer sa okruženjem (Docker breakout) - Ubrizgavanje shellcode-a
Možete proveriti omogućene sposobnosti unutar docker kontejnera koristeći:
List processa koji se izvršavaju na hostu ps -eaf
Dobijte arhitekturu
uname -m
Pronađite shellcode za arhitekturu (https://www.exploit-db.com/exploits/41128)
Pronađite program za ubacivanje shellcode u memoriju procesa (https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c)
Izmenite shellcode unutar programa i kompajlirajte ga
gcc inject.c -o inject
Ubacite ga i uhvatite svoj shell:
./inject 299; nc 172.17.0.1 5600
CAP_SYS_MODULE
CAP_SYS_MODULE
omogućava procesu da učitava i uklanja kernel module (init_module(2)
, finit_module(2)
i delete_module(2)
sistemski pozivi), pružajući direktan pristup osnovnim operacijama kernela. Ova sposobnost predstavlja kritične bezbednosne rizike, jer omogućava eskalaciju privilegija i potpunu kompromitaciju sistema omogućavajući izmene u kernelu, čime se zaobilaze svi Linux bezbednosni mehanizmi, uključujući Linux Security Modules i izolaciju kontejnera.
To znači da možete ubacivati/uklanjati kernel module u/iz kernela host mašine.
Primer sa binarnim fajlom
U sledećem primeru, binarni python
ima ovu sposobnost.
Podrazumevano, modprobe
komanda proverava listu zavisnosti i map fajlove u direktorijumu /lib/modules/$(uname -r)
.
Da bismo to iskoristili, hajde da kreiramo lažni lib/modules folder:
Zatim kompajlirajte kernel modul, možete pronaći 2 primera ispod i kopirajte ga u ovu fasciklu:
Na kraju, izvršite potrebni python kod za učitavanje ovog kernel modula:
Primer 2 sa binarnim fajlom
U sledećem primeru, binarni fajl kmod
ima ovu sposobnost.
Što znači da je moguće koristiti komandu insmod
za umetanje kernel modula. Pratite primer u nastavku da dobijete reverse shell zloupotrebljavajući ovu privilegiju.
Primer sa okruženjem (Docker breakout)
Možete proveriti omogućene sposobnosti unutar docker kontejnera koristeći:
Unutar prethodnog izlaza možete videti da je SYS_MODULE sposobnost omogućena.
Kreirajte kernel modul koji će izvršiti reverznu ljusku i Makefile za kompilaciju:
Prazan karakter pre svake reči make u Makefile-u mora biti tab, a ne razmaci!
Izvršite make
da biste ga kompajlirali.
Na kraju, pokrenite nc
unutar ljuske i učitajte modul iz druge i uhvatićete ljusku u nc procesu:
Kod ove tehnike je kopiran iz laboratorije "Zloupotreba SYS_MODULE sposobnosti" sa https://www.pentesteracademy.com/
Još jedan primer ove tehnike može se naći na 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 omogućava procesu da zaobiđe dozvole za čitanje datoteka i za čitanje i izvršavanje direktorijuma. Njegova primarna upotreba je za pretragu ili čitanje datoteka. Međutim, takođe omogućava procesu da koristi funkciju open_by_handle_at(2)
, koja može pristupiti bilo kojoj datoteci, uključujući one van prostora montiranja procesa. Rukohvat korišćen u open_by_handle_at(2)
treba da bude netransparentni identifikator dobijen putem name_to_handle_at(2)
, ali može uključivati osetljive informacije poput inode brojeva koji su podložni manipulaciji. Potencijal za zloupotrebu ove sposobnosti, posebno u kontekstu Docker kontejnera, demonstrirao je Sebastian Krahmer sa shocker exploit-om, kako je analizirano ovde. To znači da možete zaobići provere dozvola za čitanje datoteka i provere dozvola za čitanje/izvršavanje direktorijuma.
Primer sa binarnim fajlom
Binarni fajl će moći da čita bilo koju datoteku. Dakle, ako datoteka poput tar ima ovu sposobnost, moći će da pročita shadow datoteku:
Example with binary2
U ovom slučaju pretpostavimo da python
binarni fajl ima ovu sposobnost. Da biste nabrojali root fajlove, mogli biste uraditi:
I da biste pročitali datoteku, mogli biste uraditi:
Primer u okruženju (Docker breakout)
Možete proveriti omogućene sposobnosti unutar docker kontejnera koristeći:
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 ne samo da nam omogućava da prolazimo kroz fajl sistem bez provere dozvola, već takođe eksplicitno uklanja sve provere za open_by_handle_at(2) i može omogućiti našem procesu da pristupi osetljivim fajlovima koje su otvorili drugi procesi.
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.
Eksploit treba da pronađe pokazivač na nešto montirano na hostu. Originalni exploit je koristio datoteku /.dockerinit, a ova modifikovana verzija koristi /etc/hostname. Ako exploit ne radi, možda treba da postavite drugu datoteku. Da biste pronašli datoteku koja je montirana na hostu, jednostavno izvršite mount komandu:
Kod ove tehnike je kopiran iz laboratorije "Abusing DAC_READ_SEARCH Capability" sa https://www.pentesteracademy.com/
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON je najrelevantnija sajber bezbednosna manifestacija u Španiji i jedna od najvažnijih u Evropi. Sa misijom promovisanja tehničkog znanja, ovaj kongres je vrelo okupljalište za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
CAP_DAC_OVERRIDE
To znači da možete zaobići provere dozvola za pisanje na bilo kojoj datoteci, tako da možete pisati u bilo koju datoteku.
Postoji mnogo datoteka koje možete prepisati da biste eskalirali privilegije, možete dobiti ideje ovde.
Primer sa binarnim fajlom
U ovom primeru vim ima ovu sposobnost, tako da možete modifikovati bilo koju datoteku kao što su passwd, sudoers ili shadow:
Пример са бинарним 2
У овом примеру python
бинарни ће имати ову способност. Можете користити python да превазиђете било коју датотеку:
Primer sa okruženjem + CAP_DAC_READ_SEARCH (Docker izlazak)
Možete proveriti omogućene sposobnosti unutar docker kontejnera koristeći:
Prvo pročitajte prethodni odeljak koji zloupotrebljava DAC_READ_SEARCH sposobnost za čitanje proizvoljnih fajlova hosta i kompajlirajte eksploataciju. Zatim, kompajlirajte sledeću verziju shocker eksploatacije koja će vam omogućiti da pišete proizvoljne fajlove unutar fajl sistema hosta:
Da biste pobegli iz docker kontejnera, možete preuzeti datoteke /etc/shadow
i /etc/passwd
sa hosta, dodati im novog korisnika i koristiti shocker_write
da ih prepišete. Zatim, pristupite putem ssh.
Kod ove tehnike je kopiran iz laboratorije "Abusing DAC_OVERRIDE Capability" sa https://www.pentesteracademy.com
CAP_CHOWN
To znači da je moguće promeniti vlasništvo nad bilo kojom datotekom.
Primer sa binarnim fajlom
Pretpostavimo da python
binarni fajl ima ovu sposobnost, možete promeniti vlasnika datoteke shadow, promeniti root lozinku i eskalirati privilegije:
Ili sa ruby
binarnim fajlom koji ima ovu sposobnost:
CAP_FOWNER
To znači da je moguće promeniti dozvole bilo kog fajla.
Primer sa binarnim fajlom
Ako python ima ovu sposobnost, možete modifikovati dozvole fajla shadow, promeniti root lozinku, i eskalirati privilegije:
CAP_SETUID
To znači da je moguće postaviti efektivni korisnički ID kreiranog procesa.
Primer sa binarnim fajlom
Ako python ima ovu kapacitet, možete vrlo lako zloupotrebiti to da eskalirate privilegije na root:
Još jedan način:
CAP_SETGID
To znači da je moguće postaviti efektivni grupni ID kreiranog procesa.
Postoji mnogo fajlova koje možete prepisati da biste eskalirali privilegije, možete dobiti ideje odavde.
Primer sa binarnim fajlom
U ovom slučaju trebate tražiti zanimljive fajlove koje grupa može da čita jer možete imitirati bilo koju grupu:
Kada pronađete datoteku koju možete zloupotrebiti (putem čitanja ili pisanja) da biste eskalirali privilegije, možete dobiti shell imitujući interesantnu grupu sa:
U ovom slučaju, grupa shadow je imitirala, tako da možete pročitati datoteku /etc/shadow
:
Ako je docker instaliran, možete imitirati docker grupu i zloupotrebiti je da komunicirate sa docker socketom i eskalirate privilegije.
CAP_SETFCAP
To znači da je moguće postaviti sposobnosti na datoteke i procese
Primer sa binarnim fajlom
Ako python ima ovu sposobnost, možete je vrlo lako zloupotrebiti da eskalirate privilegije na root:
Imajte na umu da ako postavite novu sposobnost za binarni fajl sa CAP_SETFCAP, izgubićete ovu sposobnost.
Kada imate SETUID sposobnost možete otići u njen deo da vidite kako da eskalirate privilegije.
Primer sa okruženjem (Docker breakout)
Podrazumevano, sposobnost CAP_SETFCAP se dodeljuje procesu unutar kontejnera u Dockeru. Možete to proveriti radeći nešto poput:
Ova sposobnost omogućava da damo bilo koju drugu sposobnost binarnim datotekama, tako da možemo razmišljati o izbegavanju iz kontejnera zloupotrebom bilo koje od drugih sposobnosti za izlazak pomenutih na ovoj stranici. Međutim, ako pokušate da dodelite, na primer, sposobnosti CAP_SYS_ADMIN i CAP_SYS_PTRACE binarnoj datoteci gdb, otkrićete da ih možete dodeliti, ali binarna datoteka neće moći da se izvrši nakon toga:
From the docs: Dozvoljeno: Ovo je ograničeni superset za efektivne sposobnosti koje nit može preuzeti. Takođe je ograničeni superset za sposobnosti koje mogu biti dodate u nasledni skup od strane niti koja nema CAP_SETPCAP sposobnost u svom efektivnom skupu. Izgleda da dozvoljene sposobnosti ograničavaju one koje se mogu koristiti. Međutim, Docker takođe po defaultu dodeljuje CAP_SETPCAP, tako da možda možete postaviti nove sposobnosti unutar naslednih. Međutim, u dokumentaciji ove sposobnosti: CAP_SETPCAP : […] dodajte bilo koju sposobnost iz ograničenog skupa pozivajuće niti u njen nasledni skup. Izgleda da možemo samo dodavati u nasledni skup sposobnosti iz ograničenog skupa. Što znači da ne možemo staviti nove sposobnosti kao što su CAP_SYS_ADMIN ili CAP_SYS_PTRACE u nasledni skup za eskalaciju privilegija.
CAP_SYS_RAWIO
CAP_SYS_RAWIO pruža niz osetljivih operacija uključujući pristup /dev/mem
, /dev/kmem
ili /proc/kcore
, modifikaciju mmap_min_addr
, pristup ioperm(2)
i iopl(2)
sistemskim pozivima, i razne disk komande. FIBMAP ioctl(2)
je takođe omogućen putem ove sposobnosti, što je uzrokovalo probleme u prošlosti. Prema man stranici, ovo takođe omogućava nosiocu da opisno izvrši niz operacija specifičnih za uređaje na drugim uređajima
.
Ovo može biti korisno za escalaciju privilegija i Docker breakout.
CAP_KILL
To znači da je moguće ubiti bilo koji proces.
Primer sa binarnim fajlom
Pretpostavimo da python
binarni fajl ima ovu sposobnost. Ako biste mogli takođe modifikovati neku konfiguraciju servisa ili soketa (ili bilo koji konfiguracioni fajl vezan za servis), mogli biste ga unazaditi, a zatim ubiti proces vezan za taj servis i čekati da novi konfiguracioni fajl bude izvršen sa vašim unazadjenjem.
Privesc sa kill
Ako imate kill sposobnosti i postoji node program koji se izvršava kao root (ili kao drugi korisnik) mogli biste verovatno poslati mu signal SIGUSR1 i naterati ga da otvori node debager na koji se možete povezati.
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON je najrelevantnija sajber bezbednosna manifestacija u Španiji i jedna od najvažnijih u Evropi. Sa misijom promovisanja tehničkog znanja, ovaj kongres je vrelo okupljanje za profesionalce iz tehnologije i sajber bezbednosti u svakoj disciplini.
CAP_NET_BIND_SERVICE
To znači da je moguće slušati na bilo kom portu (čak i na privilegovanim). Ne možete direktno eskalirati privilegije sa ovom sposobnošću.
Primer sa binarnim fajlom
Ako python
ima ovu sposobnost, moći će da sluša na bilo kom portu i čak se poveže sa njega na bilo koji drugi port (neke usluge zahtevaju veze sa specifičnih privilegovanih portova)
CAP_NET_RAW
CAP_NET_RAW sposobnost omogućava procesima da kreiraju RAW i PACKET sokete, omogućavajući im da generišu i šalju proizvolne mrežne pakete. To može dovesti do bezbednosnih rizika u kontejnerizovanim okruženjima, kao što su spoofing paketa, injekcija saobraćaja i zaobilaženje mrežnih kontrola pristupa. Zlonamerni akteri bi mogli iskoristiti ovo da ometaju rutiranje kontejnera ili ugroze bezbednost mreže domaćina, posebno bez adekvatne zaštite od vatrozida. Pored toga, CAP_NET_RAW je ključan za privilegovane kontejnere da podrže operacije poput pinga putem RAW ICMP zahteva.
To znači da je moguće presresti saobraćaj. Ne možete direktno eskalirati privilegije sa ovom sposobnošću.
Primer sa binarnim fajlom
Ako binarni fajl tcpdump
ima ovu sposobnost, moći ćete da ga koristite za hvatanje mrežnih informacija.
Napomena da ako okruženje daje ovu sposobnost, možete takođe koristiti tcpdump
za presretanje saobraćaja.
Primer sa binarnim 2
Sledeći primer je python2
kod koji može biti koristan za presretanje saobraćaja sa "lo" (localhost) interfejsa. Kod je iz laboratorije "Osnove: CAP-NET_BIND + NET_RAW" sa https://attackdefense.pentesteracademy.com/
CAP_NET_ADMIN + CAP_NET_RAW
CAP_NET_ADMIN sposobnost daje nosiocu moć da menja mrežne konfiguracije, uključujući podešavanja vatrozida, tabele rutiranja, dozvole za sokete i podešavanja mrežnih interfejsa unutar izloženih mrežnih imenskih prostora. Takođe omogućava uključivanje promiskuitetnog moda na mrežnim interfejsima, što omogućava presretanje paketa širom imenskih prostora.
Primer sa binarnim fajlom
Pretpostavimo da python binarni fajl ima ove sposobnosti.
CAP_LINUX_IMMUTABLE
To znači da je moguće modifikovati inode atribute. Ne možete direktno eskalirati privilegije sa ovom sposobnošću.
Primer sa binarnim fajlom
Ako otkrijete da je fajl nepromenljiv i da python ima ovu sposobnost, možete ukloniti nepromenljivi atribut i omogućiti modifikaciju fajla:
Napomena da se obično ovaj nepromenljivi atribut postavlja i uklanja korišćenjem:
CAP_SYS_CHROOT
CAP_SYS_CHROOT omogućava izvršavanje chroot(2)
sistemskog poziva, što može potencijalno omogućiti bekstvo iz chroot(2)
okruženja kroz poznate ranjivosti:
CAP_SYS_BOOT
CAP_SYS_BOOT ne samo da omogućava izvršavanje reboot(2)
sistemskog poziva za restartovanje sistema, uključujući specifične komande kao što su LINUX_REBOOT_CMD_RESTART2
prilagođene određenim hardverskim platformama, već takođe omogućava korišćenje kexec_load(2)
i, od Linux 3.17 nadalje, kexec_file_load(2)
za učitavanje novih ili potpisanih crash kernela.
CAP_SYSLOG
CAP_SYSLOG je odvojen od šireg CAP_SYS_ADMIN u Linux 2.6.37, specifično dodeljujući mogućnost korišćenja syslog(2)
poziva. Ova sposobnost omogućava pregledanje kernel adresa putem /proc
i sličnih interfejsa kada je podešavanje kptr_restrict
na 1, što kontroliše izlaganje kernel adresa. Od Linux 2.6.39, podrazumevana vrednost za kptr_restrict
je 0, što znači da su kernel adrese izložene, iako mnoge distribucije postavljaju ovo na 1 (sakrij adrese osim za uid 0) ili 2 (uvek sakrij adrese) iz bezbednosnih razloga.
Pored toga, CAP_SYSLOG omogućava pristup dmesg
izlazu kada je dmesg_restrict
postavljen na 1. I pored ovih promena, CAP_SYS_ADMIN zadržava mogućnost izvođenja syslog
operacija zbog istorijskih presedana.
CAP_MKNOD
CAP_MKNOD proširuje funkcionalnost mknod
sistemskog poziva izvan kreiranja običnih fajlova, FIFOs (imenovanih cevi) ili UNIX domen soketa. Specifično omogućava kreiranje specijalnih fajlova, koji uključuju:
S_IFCHR: Specijalni karakter fajlovi, koji su uređaji poput terminala.
S_IFBLK: Specijalni blok fajlovi, koji su uređaji poput diskova.
Ova sposobnost je ključna za procese koji zahtevaju mogućnost kreiranja fajlova uređaja, olakšavajući direktnu interakciju sa hardverom putem karakterističnih ili blok uređaja.
To je podrazumevana docker sposobnost (https://github.com/moby/moby/blob/master/oci/caps/defaults.go#L6-L19).
Ova sposobnost omogućava eskalaciju privilegija (kroz potpuno čitanje diska) na hostu, pod sledećim uslovima:
Imati inicijalni pristup hostu (Nepovlašćen).
Imati inicijalni pristup kontejneru (Povlašćen (EUID 0), i efektivni
CAP_MKNOD
).Host i kontejner treba da dele isti korisnički prostor.
Koraci za kreiranje i pristup blok uređaju u kontejneru:
Na hostu kao standardni korisnik:
Odredite svoj trenutni korisnički ID sa
id
, npr.,uid=1000(standarduser)
.Identifikujte ciljni uređaj, na primer,
/dev/sdb
.
Unutar kontejnera kao
root
:
Ponovo na hostu:
Ovaj pristup omogućava standardnom korisniku da pristupi i potencijalno pročita podatke sa /dev/sdb
kroz kontejner, koristeći deljene korisničke imenske prostore i dozvole postavljene na uređaju.
CAP_SETPCAP
CAP_SETPCAP omogućava procesu da menja skupove sposobnosti drugog procesa, omogućavajući dodavanje ili uklanjanje sposobnosti iz efektivnog, naslednog i dozvoljenog skupa. Međutim, proces može da menja samo sposobnosti koje poseduje u svom dozvoljenom skupu, osiguravajući da ne može da poveća privilegije drugog procesa iznad svojih. Nedavne ažuriranja jezgra su pooštrila ova pravila, ograničavajući CAP_SETPCAP
da samo smanjuje sposobnosti unutar svog ili dozvoljenog skupa svojih potomaka, sa ciljem smanjenja bezbednosnih rizika. Korišćenje zahteva da imate CAP_SETPCAP
u efektivnom skupu i ciljne sposobnosti u dozvoljenom skupu, koristeći capset()
za izmene. Ovo sumira osnovnu funkciju i ograničenja CAP_SETPCAP
, ističući njegovu ulogu u upravljanju privilegijama i poboljšanju bezbednosti.
CAP_SETPCAP
je Linux sposobnost koja omogućava procesu da menja skupove sposobnosti drugog procesa. Daje mogućnost dodavanja ili uklanjanja sposobnosti iz efektivnog, naslednog i dozvoljenog skupa sposobnosti drugih procesa. Međutim, postoje određena ograničenja u načinu na koji se ova sposobnost može koristiti.
Proces sa CAP_SETPCAP
može samo dodeliti ili ukloniti sposobnosti koje su u njegovom vlastitom dozvoljenom skupu sposobnosti. Drugim rečima, proces ne može dodeliti sposobnost drugom procesu ako je sam ne poseduje. Ovo ograničenje sprečava proces da poveća privilegije drugog procesa iznad svog nivoa privilegije.
Štaviše, u nedavnim verzijama jezgra, sposobnost CAP_SETPCAP
je dodatno ograničena. Više ne omogućava procesu da proizvoljno menja skupove sposobnosti drugih procesa. Umesto toga, samo omogućava procesu da smanji sposobnosti u svom dozvoljenom skupu sposobnosti ili dozvoljenom skupu sposobnosti svojih potomaka. Ova promena je uvedena kako bi se smanjili potencijalni bezbednosni rizici povezani sa sposobnošću.
Da biste efikasno koristili CAP_SETPCAP
, potrebno je da imate sposobnost u svom efektivnom skupu sposobnosti i ciljne sposobnosti u svom dozvoljenom skupu sposobnosti. Tada možete koristiti sistemski poziv capset()
za izmene skupova sposobnosti drugih procesa.
Ukratko, CAP_SETPCAP
omogućava procesu da menja skupove sposobnosti drugih procesa, ali ne može dodeliti sposobnosti koje sam ne poseduje. Pored toga, zbog bezbednosnih briga, njegova funkcionalnost je ograničena u nedavnim verzijama jezgra da bi se omogućilo samo smanjenje sposobnosti u svom dozvoljenom skupu sposobnosti ili dozvoljenim skupovima sposobnosti svojih potomaka.
Reference
Većina ovih primera je uzeta iz nekih laboratorija https://attackdefense.pentesteracademy.com/, pa ako želite da vežbate ove privesc tehnike, preporučujem ove laboratorije.
Ostale reference:
![](https://book.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2Ffiles.gitbook.com%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-L_2uGJGU7AVNRcqRvEi%252Fuploads%252FelPCTwoecVdnsfjxCZtN%252Fimage.png%3Falt%3Dmedia%26token%3D9ee4ff3e-92dc-471c-abfe-1c25e446a6ed&width=768&dpr=4&quality=100&sign=9c8fe74f&sv=1)
RootedCON je najrelevantnija sajber bezbednosna manifestacija u Španiji i jedna od najvažnijih u Evropi. Sa misijom promovisanja tehničkog znanja, ovaj kongres je vrelo okupljalište za profesionalce u tehnologiji i sajber bezbednosti u svakoj disciplini.
Last updated