Seccomp
Osnovne informacije
Seccomp, što znači Secure Computing mode, je sigurnosna funkcija Linux kernela koja filtrira sistemski pozive. On ograničava procese na ograničeni skup sistemskih poziva (exit()
, sigreturn()
, read()
i write()
) za već otvorene file deskriptore. Ako proces pokuša da pozove bilo šta drugo, kernel ga prekida korišćenjem SIGKILL ili SIGSYS signala. Ovaj mehanizam ne virtualizuje resurse, već ih izoluje od procesa.
Postoje dva načina za aktiviranje seccomp-a: kroz prctl(2)
sistemski poziv sa PR_SET_SECCOMP
, ili za Linux kernel verzije 3.17 i novije, kroz seccomp(2)
sistemski poziv. Stariji način omogućavanja seccomp-a pisanjem u /proc/self/seccomp
je zastareo u korist prctl()
.
Unapređenje, seccomp-bpf, dodaje mogućnost filtriranja sistemskih poziva sa prilagodljivom politikom, koristeći Berkeley Packet Filter (BPF) pravila. Ovo proširenje se koristi u softverima 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 za sada nepodržani systrace za Linux.
Originalni/Striktni režim
U ovom režimu Seccomp samo dozvoljava sistemski pozive exit()
, sigreturn()
, read()
i write()
za već otvorene file deskriptore. Ako se izvrši bilo koji drugi sistemski poziv, proces se ubija korišćenjem SIGKILL signala.
Seccomp-bpf
Ovaj režim omogućava filtriranje sistemskih poziva pomoću konfigurabilne politike implementirane pomoću pravila Berkeley Packet Filter.
Seccomp u Dockeru
Seccomp-bpf je podržan od strane Dockera kako bi se ograničili syscalls iz kontejnera, efektivno smanjujući površinu napada. Možete pronaći blokirane syscalls po podrazumevanim postavkama na https://docs.docker.com/engine/security/seccomp/ i podrazumevani seccomp profil možete pronaći ovde https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Možete pokrenuti Docker kontejner sa različitom seccomp politikom koristeći:
Ako na primer želite da zabranite kontejneru da izvršava neke syscall-ove kao što je uname
, možete preuzeti podrazumevani profil sa https://github.com/moby/moby/blob/master/profiles/seccomp/default.json i jednostavno ukloniti string uname
iz liste.
Ako želite da se uverite da neki binarni fajl ne radi unutar docker kontejnera, možete koristiti strace da biste izlistali syscall-ove koje binarni fajl koristi, a zatim ih zabraniti.
U sledećem primeru su otkriveni syscall-ovi za uname
:
Ako koristite Docker samo za pokretanje aplikacije, možete je profilisati pomoću strace
i samo dozvoliti syscalls koje aplikacija zahteva.
Primer Seccomp politike
Da bismo ilustrovali Seccomp funkcionalnost, kreirajmo Seccomp profil koji onemogućava "chmod" sistemski poziv kako je prikazano ispod.
U prethodnom profilu smo postavili podrazumevanu akciju na "dozvoli" i napravili crnu listu da onemogućimo "chmod". Da bismo bili sigurniji, možemo postaviti podrazumevanu akciju na "odbaci" i napraviti belu listu da selektivno omogućimo sistemski poziv. Sledeći izlaz prikazuje da poziv "chmod" vraća grešku jer je onemogućen u seccomp profilu.
Sledeći izlaz prikazuje "docker inspect" koji prikazuje profil:
Isključivanje u Dockeru
Pokrenite kontejner sa zastavicom: --security-opt seccomp=unconfined
Od verzije Kubernetes 1.19, seccomp je podrazumevano omogućen za sve Podove. Međutim, podrazumevani seccomp profil koji se primenjuje na Podove je profil "RuntimeDefault", koji je pružen od strane kontejner runtime-a (npr. Docker, containerd). Profil "RuntimeDefault" dozvoljava većinu sistemskih poziva, ali blokira nekoliko koji se smatraju opasnim ili općenito nisu potrebni za kontejnere.
Last updated