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 prctl(2)
sistemskog poziva sa PR_SET_SECCOMP
, ili za Linux jezgra 3.17 i novija, seccomp(2)
sistemski poziv. 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 kako bi se ograničili 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 poput 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 zabraniti.
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)