什麼是seccomp
seccomp(全稱securecomputing mode)是linuxkernel從2.6.23版本開始所支持的一種安全機制。
在Linux系統裏,大量的系統調用(systemcall)直接暴露給用戶態程序。但是,並不是所有的系統調用都被需要,而且不安全的代碼濫用系統調用會對系統造成安全威脅。通過seccomp,我們限制程序使用某些系統調用,這樣可以減少系統的暴露面,同時是程序進入一種“安全”的狀態。
詳細介紹可參考seccomp內核文檔。
如何使用seccomp
seccomp可以通過系統調用ptrctl(2)或者通過系統調用seccomp(2)開啓,前提是內核配置中開啓了CONFIG_SECCOMP和CONFIG_SECCOMP_FILTER。
seccomp支持兩種模式:SECCOMP_MODE_STRICT和SECCOMP_MODE_FILTER。在SECCOMP_MODE_STRICT模式下,進程不能使用read(2),write(2),_exit(2)和sigreturn(2)以外的其他系統調用。在SECCOMP_MODE_FILTER模式下,可以利用BerkeleyPacket Filter配置哪些系統調用及它們的參數可以被進程使用。
如何查看是否使用了seccomp
通常有兩種方法:
-
利用prctl(2)的PR_GET_SECCOMP的參數獲取當前進程的seccomp狀態。返回值0表示沒有使用seccomp;返回值2表示使用了seccomp並處於SECCOMP_MODE_FILTER模式;其他情況進程會被SIGKILL信號殺死。
-
從Linux3.8開始,可以利用/proc/[pid]/status中的Seccomp字段查看。如果沒有seccomp字段,說明內核不支持seccomp。