Seccomp
Basiese Inligting
Seccomp, wat staan vir Secure Computing Mode, is 'n sekuriteitskenmerk van die Linux-kernel wat ontwerp is om stelseloproepe te filtreer. Dit beperk prosesse tot 'n beperkte stel stelseloproepe (exit()
, sigreturn()
, read()
en write()
vir reeds-geopen lêerbeskrywers). As 'n proses probeer om iets anders te roep, word dit deur die kernel beëindig deur gebruik te maak van SIGKILL of SIGSYS. Hierdie meganisme virtualiseer nie hulpbronne nie, maar isoleer die proses daarvan.
Daar is twee maniere om seccomp te aktiveer: deur die prctl(2)
stelseloproep met PR_SET_SECCOMP
, of vir Linux-kernel 3.17 en hoër, die seccomp(2)
stelseloproep. Die ouer metode om seccomp te aktiveer deur na /proc/self/seccomp
te skryf, is verouderd en is vervang deur prctl()
.
'n Verbetering, seccomp-bpf, voeg die vermoë by om stelseloproepe te filtreer met 'n aanpasbare beleid deur gebruik te maak van Berkeley Packet Filter (BPF) reëls. Hierdie uitbreiding word benut deur sagteware soos OpenSSH, vsftpd, en die Chrome/Chromium-webblaaier op Chrome OS en Linux vir buigsame en doeltreffende stelseloproep-filtrering, as 'n alternatief vir die nou nie-ondersteunde systrace vir Linux.
Oorspronklike/Strikte Modus
In hierdie modus laat Seccomp slegs die stelseloproepe toe exit()
, sigreturn()
, read()
en write()
na reeds-geopen lêerbeskrywers. As enige ander stelseloproep gemaak word, word die proses doodgemaak deur gebruik te maak van SIGKILL.
Seccomp-bpf
Hierdie modus maak dit moontlik om sistemaanroepings te filter deur gebruik te maak van 'n konfigureerbare beleid wat geïmplementeer word deur gebruik te maak van Berkeley Packet Filter reëls.
Seccomp in Docker
Seccomp-bpf word deur Docker ondersteun om die syscalls van die houers te beperk en sodoende die oppervlakte te verminder. Jy kan die syscalls wat standaard geblokkeer word vind by https://docs.docker.com/engine/security/seccomp/ en die standaard seccomp-profiel kan hier gevind word https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Jy kan 'n docker-houer uitvoer met 'n verskillende seccomp-beleid met:
As jy byvoorbeeld 'n houer wil verbied om sekere syscall soos uname
uit te voer, kan jy die verstek profiel aflaai vanaf https://github.com/moby/moby/blob/master/profiles/seccomp/default.json en net die uname
string uit die lys verwyder.
As jy seker wil maak dat 'n sekere binêre lêer nie binne 'n Docker-houer werk nie, kan jy strace gebruik om die syscalls wat die binêre lêer gebruik, te lys en dit dan verbied.
In die volgende voorbeeld word die syscalls van uname
ontdek:
As jy Docker net gebruik om 'n toepassing te begin, kan jy dit profiler met strace
en slegs die syscalls toelaat wat dit nodig het.
Voorbeeld Seccomp-beleid
Om die Seccomp-funksie te illustreer, skep ons 'n Seccomp-profiel wat die "chmod" stelseloproep deaktiveer soos hieronder.
In die bogenoemde profiel het ons die verstekaksie op "toelaat" gestel en 'n swartlys geskep om "chmod" te deaktiveer. Om meer veilig te wees, kan ons die verstekaksie op "afwerp" stel en 'n witlys skep om selektief stelseloproepe toe te laat. Die volgende uitset toon die "chmod" oproep wat 'n fout teruggee omdat dit gedeaktiveer is in die seccomp-profiel.
Die volgende uitset toon die "docker inspect" wat die profiel vertoon:
Deaktiveer dit in Docker
Begin 'n houer met die vlag: --security-opt seccomp=unconfined
Vanaf Kubernetes 1.19, is seccomp standaard geaktiveer vir alle Pods. Die verstek seccomp profiel wat op die Pods toegepas word, is die "RuntimeDefault" profiel, wat voorsien word deur die houer runtime (bv. Docker, containerd). Die "RuntimeDefault" profiel laat die meeste stelseloproepe toe terwyl dit 'n paar blokkeer wat as gevaarlik beskou word of nie algemeen deur houers benodig word nie.
Last updated