Ders 4.34: Seccomp: bir sistem çağrısı izin listesi
Bir program çekirdekle birkaç yüz sistem çağrısı üzerinden konuşur ve bir belge dönüştürücü bunların yalnızca küçük bir kısmına ihtiyaç duyar. Seccomp, systemd'nin bir hizmet için çekirdeğe bir izin listesi vermesini sağlar: listenin dışındaki her şey, arkasındaki çekirdek kodu daha hiç çalışmadan süreci öldürür ya da bir hatayla başarısız olur. Laboratuvarda Northwind'in dönüştürücüsü müşterilerden gelen dosyaları işliyor ve bir fatura, bir dönüştürücünün asla ihtiyaç duymadığı bir çekirdek arayüzü olan perf_event_open'a uzanan bir makro taşıyor. Dönüştürücünün gerçekte ne kullandığını ölçüyor, saldırıyı süzgeçli ve süzgeçsiz sınıyor, bir başarısızlık kipi seçiyor ve süzgeci kalıcı yapıyorsun.
19 dk
Bu derste öğreneceklerin
- Seccomp'un neyi süzdüğünü ve çekirdek saldırı yüzeyini neden küçülttüğünü açıklamak
- Bir programın sistem çağrılarını strace -c ile saymak
- SystemCallFilter'ı systemd-run ile sınamak
- SIGSYS ile SystemCallErrorNumber=EPERM arasında seçim yapmak
- Süzgeci bir ek parçayla kalıcı yapmak
Temel terimler
- Sistem çağrısı
- Bir programın çekirdekten isteği; Linux'ta birkaç yüz tane vardır.
- Seccomp
- Bir sürecin her sistem çağrısını bir süzgece karşı denetleyen çekirdek özelliği.
- SystemCallFilter=
- systemd ayarı: izin verilen çağrılar ya da gruplar (ya da yasak listesi için ~).
- @system-service
- systemd'nin tipik hizmetlerin kullandığı çağrı grubu; @debug, @mount, @module, @reboot ve benzerlerini dışarıda bırakır.
- SIGSYS
- Süzülen bir çağrı yapan süreci öldüren sinyal (status=SYS).
- SystemCallErrorNumber=
- Süzülen çağrılar için öldürmek yerine bu hata kodunu döndür.
← PAM yığınını denetlemek · Tüm dersler · Ayrıcalıklı kapsayıcılar ve yetenekler →