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, Güvenli Hesaplama modu anlamına gelir, sistem çağrılarını filtrelemek için tasarlanmış bir Linux çekirdek güvenlik özelliğidir. Süreçleri sınırlı bir sistem çağrısı kümesiyle (exit()
, sigreturn()
, read()
ve write()
zaten açık dosya tanımlayıcıları için) kısıtlar. Bir süreç başka bir şeyi çağırmaya çalışırsa, çekirdek tarafından SIGKILL veya SIGSYS kullanılarak sonlandırılır. Bu mekanizma kaynakları sanallaştırmaz, ancak süreci onlardan izole eder.
Seccomp'ı etkinleştirmenin iki yolu vardır: PR_SET_SECCOMP
ile prctl(2)
sistem çağrısı veya Linux çekirdekleri 3.17 ve üzeri için seccomp(2)
sistem çağrısı. /proc/self/seccomp
dosyasına yazarak seccomp'ı etkinleştirmenin eski yöntemi, 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 Paket Filtreleme (BPF) kurallarını kullanır. Bu uzantı, OpenSSH, vsftpd ve Chrome OS ile Linux'taki Chrome/Chromium tarayıcıları gibi yazılımlar tarafından esnek ve verimli sistem çağrı filtrelemesi için kullanılmaktadır ve artık desteklenmeyen systrace'a alternatif sunmaktadır.
Bu modda Seccomp yalnızca sistem çağrılarına exit()
, sigreturn()
, read()
ve write()
zaten açık dosya tanımlayıcıları için izin verir. Başka bir sistem çağrısı yapılırsa, süreç SIGKILL kullanılarak öldürülür.
Bu mod, Berkeley Paket Filtreleme kuralları kullanılarak uygulanan yapılandırılabilir bir politika ile sistem çağrılarının filtrelenmesine olanak tanır.
Seccomp-bpf, Docker tarafından konteynerlerden syscall'ları kısıtlamak için desteklenmektedir ve bu, yüzey alanını etkili bir şekilde azaltır. Varsayılan olarak engellenen syscall'ları https://docs.docker.com/engine/security/seccomp/ adresinde bulabilirsiniz ve varsayılan seccomp profili burada bulunmaktadır https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Farklı bir seccomp politikası ile bir docker konteyneri çalıştırabilirsiniz:
Eğer bir konteynerin bazı syscall'ları, örneğin uname
'i yasaklamak istiyorsanız, https://github.com/moby/moby/blob/master/profiles/seccomp/default.json adresinden varsayılan profili indirebilir ve sadece uname
dizesini listeden kaldırabilirsiniz.
Eğer bir ikili dosyanın bir docker konteyneri içinde çalışmadığından emin olmak istiyorsanız, ikilinin kullandığı syscall'ları listelemek için strace kullanabilir ve ardından bunları yasaklayabilirsiniz.
Aşağıdaki örnekte uname
'in syscall'ları keşfedilmektedir:
Eğer Docker'ı sadece bir uygulamayı başlatmak için kullanıyorsanız, onu strace
ile profil oluşturabilir ve ihtiyaç duyduğu sistem çağrılarına sadece izin verebilirsiniz.
Seccomp özelliğini göstermek için, aşağıda “chmod” sistem çağrısını devre dışı bırakan bir Seccomp profili 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ı, "chmod" çağrısının, seccomp profilinde devre dışı bırakıldığı için hata döndürdüğünü göstermektedir.
Aşağıdaki çıktı, profilin görüntülendiği “docker inspect” komutunu göstermektedir:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)