总体架构:用户态 + 通信 + 内核态LSM
捕获一定是在LSM中完成,实现bin、so、ko和file检测使用以下钩子:
1、bprm_check_security
2、mmap_file + elf过滤 + exec权限过滤
3、kernel_module_file
4、file_permission + write/append/exec过滤??
通信可以使用netlink,但securityFS是LSM模块的惯例,securityFS使用和调试都更为简单,在内核加载过程中应该也更早生效。
度量比对可以只放在用户态完成,也可配合LSM共同完成。后者信任链更完整。
百度是SB
白名单如果使用文件,则需要保护。可以在LSM中作为关键数据进行专门处理;使用xattr的方式则更为高效,也是IMA的做法,安全性受制于root用户权限。
因为配置功能的存在,安全性受制于root权限。使用口令授权配置的话,又需要系统性对口令进行管理,还要对口令进行二次保护,不可取。
综上,良好的方案是:
用户(配置+xattr) + securityFS + LSM(度量比对)