Seccomp
Temel Bilgiler
Seccomp, Linux çekirdeğinin bir güvenlik özelliğidir ve sistem çağrılarını filtrelemek için tasarlanmıştır. Bu, işlemleri sınırlı bir sistem çağrısı kümesine (exit()
, sigreturn()
, read()
ve write()
) kısıtlar. Bir işlem başka bir şey çağırmaya çalışırsa, çekirdek tarafından SIGKILL veya SIGSYS kullanılarak sonlandırılır. Bu mekanizma kaynakları sanallaştırmaz, ancak işlemi onlardan izole eder.
Seccomp'i etkinleştirmenin iki yolu vardır: prctl(2)
sistem çağrısıyla PR_SET_SECCOMP
kullanarak veya Linux çekirdekleri 3.17 ve üstü için seccomp(2)
sistem çağrısıyla. Seccomp'i etkinleştirmenin eski yöntemi, /proc/self/seccomp
'a yazarak seccomp'i etkinleştirmekti, ancak bu yöntem prctl()
lehine kullanımdan kaldırılmıştır.
Bir geliştirme olan seccomp-bpf, özelleştirilebilir bir politika ile sistem çağrılarını filtreleme yeteneği ekler ve Berkeley Packet Filter (BPF) kurallarını kullanır. Bu uzantı, OpenSSH, vsftpd ve Chrome OS ve Linux üzerindeki Chrome/Chromium tarayıcıları gibi yazılımlar tarafından kullanılır ve eski desteklenmeyen systrace için esnek ve verimli sistem çağrısı filtreleme sağlar.
Orijinal/Katı Mod
Bu modda Seccomp, yalnızca exit()
, sigreturn()
, read()
ve write()
sistem çağrılarına izin verir. Başka bir sistem çağrısı yapılırsa, işlem SIGKILL kullanılarak sonlandırılır.
Seccomp-bpf
Bu mod, Berkeley Packet Filter kuralları kullanılarak uygulanan yapılandırılabilir bir politika ile sistem çağrılarının filtrelenmesine izin verir.
Docker'da Seccomp
Seccomp-bpf, Docker tarafından desteklenir ve konteynerlerden gelen sistem çağrılarını kısıtlamak için kullanılır, böylece yüzey alanı azaltılır. Varsayılan olarak engellenen sistem çağrılarını https://docs.docker.com/engine/security/seccomp/ adresinde bulabilirsiniz ve varsayılan seccomp profili burada bulunabilir: https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Farklı bir seccomp politikasıyla bir docker konteyneri çalıştırabilirsiniz:
Örneğin, uname
gibi bazı sistem çağrılarının bir konteyner tarafından yürütülmesini yasaklamak istiyorsanız, varsayılan profil dosyasını https://github.com/moby/moby/blob/master/profiles/seccomp/default.json adresinden indirebilir ve sadece listeden uname
dizesini kaldırabilirsiniz.
Bir docker konteyneri içinde bazı ikili dosyaların çalışmadığından emin olmak isterseniz, strace kullanarak ikili dosyanın kullandığı sistem çağrılarını listelemek ve ardından bunları yasaklamak mümkündür.
Aşağıdaki örnekte, uname
'in sistem çağrıları keşfedilir:
Eğer sadece bir uygulama başlatmak için Docker kullanıyorsanız, onu strace
ile profilleyebilir ve sadece ihtiyaç duyduğu sistem çağrılarını izin verebilirsiniz.
Örnek Seccomp politikası
Seccomp özelliğini göstermek için, aşağıdaki gibi "chmod" sistem çağrısını devre dışı bırakan bir Seccomp profil oluşturalım.
Yukarıdaki profilde, varsayılan eylemi "izin ver" olarak ayarladık ve "chmod"u devre dışı bırakmak için bir kara liste oluşturduk. Daha güvenli olmak için, varsayılan eylemi "düşür" olarak ayarlayabilir ve sistem çağrılarını seçici olarak etkinleştirmek için bir beyaz liste oluşturabiliriz. Aşağıdaki çıktı, seccomp profilde devre dışı bırakıldığı için "chmod" çağrısının hata döndürdüğünü göstermektedir.
Aşağıdaki çıktı, profilin görüntülendiği "docker inspect" komutunu göstermektedir:
Docker'da Devre Dışı Bırakma
Bayrakla birlikte bir konteyner başlatın: --security-opt seccomp=unconfined
Kubernetes 1.19'dan itibaren, seccomp varsayılan olarak tüm Pod'lar için etkinleştirilmiştir. Bununla birlikte, Pod'lara uygulanan varsayılan seccomp profili, konteyner çalışma zamanı tarafından sağlanan "RuntimeDefault" profili olup (örneğin Docker, containerd), "RuntimeDefault" profili, çoğu sistem çağrısına izin verirken, konteynerler için tehlikeli veya genellikle gereksiz olarak kabul edilen birkaç sistem çağrısını engeller.
Last updated