Seccomp
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)
Seccomp, što znači Secure Computing mode, je bezbednosna funkcija Linux jezgra dizajnirana da filtrira sistemske pozive. Ograničava procese na ograničen skup sistemskih poziva (exit()
, sigreturn()
, read()
, i write()
za već otvorene deskriptore datoteka). Ako proces pokuša da pozove bilo šta drugo, kernel ga prekida koristeći SIGKILL ili SIGSYS. Ovaj mehanizam ne virtualizuje resurse, već izoluje proces od njih.
Postoje dva načina za aktiviranje seccomp-a: putem sistemskog poziva prctl(2)
sa PR_SET_SECCOMP
, ili za Linux jezgra 3.17 i novija, sistemski poziv seccomp(2)
. Stariji metod omogućavanja seccomp-a pisanjem u /proc/self/seccomp
je ukinut u korist prctl()
.
Poboljšanje, seccomp-bpf, dodaje mogućnost filtriranja sistemskih poziva sa prilagodljivom politikom, koristeći Berkeley Packet Filter (BPF) pravila. Ova ekstenzija se koristi u softveru kao što su OpenSSH, vsftpd, i Chrome/Chromium pregledači na Chrome OS-u i Linux-u za fleksibilno i efikasno filtriranje sistemskih poziva, nudeći alternativu sada neodržavanom systrace-u za Linux.
U ovom režimu Seccomp dozvoljava samo sistemske pozive exit()
, sigreturn()
, read()
i write()
za već otvorene deskriptore datoteka. Ako se napravi bilo koji drugi sistemski poziv, proces se ubija koristeći SIGKILL
Ovaj režim omogućava filtriranje sistemskih poziva koristeći konfigurisanu politiku implementiranu pomoću pravila Berkeley Packet Filter.
Seccomp-bpf je podržan od strane Docker-a da ograniči syscalls iz kontejnera, efikasno smanjujući površinu napada. Možete pronaći syscalls koje su blokirane po default-u na https://docs.docker.com/engine/security/seccomp/ i default seccomp profil se može pronaći ovde https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Možete pokrenuti docker kontejner sa drugom seccomp politikom sa:
Ako želite, na primer, da zabranite kontejneru da izvršava neki syscall kao što je uname
, možete preuzeti podrazumevani profil sa https://github.com/moby/moby/blob/master/profiles/seccomp/default.json i jednostavno ukloniti uname
string sa liste.
Ako želite da se uverite da neki binarni program ne radi unutar docker kontejnera, možete koristiti strace da navedete syscalls koje binarni program koristi i zatim ih zabranite.
U sledećem primeru otkrivaju se syscalls za uname
:
Ako koristite Docker samo za pokretanje aplikacije, možete profilisati to sa strace
i samo dozvoliti syscalls koje su potrebne
Da ilustrujemo Seccomp funkciju, hajde da kreiramo Seccomp profil koji onemogućava “chmod” sistemski poziv kao u nastavku.
U gornjem profilu, postavili smo podrazumevanu akciju na "dozvoli" i kreirali crnu listu da onemogućimo "chmod". Da bismo bili sigurniji, možemo postaviti podrazumevanu akciju na odbacivanje i kreirati belu listu da selektivno omogućimo sistemske pozive. Sledeći izlaz prikazuje "chmod" poziv koji vraća grešku jer je onemogućen u seccomp profilu.
Следећи излаз показује “docker inspect” који приказује профил:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)