1 应用程序安全策略
应用程序安全策略指的是对一个程序的运行设定安全规则,符合规则的行为允许执行,否则拒绝执行。合理的安全策略可以有效提高系统的安全性和韧性,即使应用程序被攻击,也无法执行超出规则限制的动作。
安全策略的核心是访问控制,即对应用程序对资源的访问增加检查,如文件读写、socket使用等,并由操作系统判断访问是否需要被拦截。Linux内核提供了LSM(Linux Security Module)框架,即在内核的关键执行流中安插钩子函数进行安全检查。基于LSM框架,Linux操作系统实现了多种安全机制,如SELinux、AppArmor、SMACK、TOMOYO等。系统管理员将预先定义的安全策略载入内核,这些安全机制即可根据策略执行权限检查,从而保障系统的安全运行。
2 安全策略开发的痛点
尽管安全机制和安全策略的实施可以使系统更加安全,但是至今为止,它们在实际场景下并没有获得广泛的应用。系统管理员无法了解每一个应用程序的运行原理、资源访问等细节,同时SELinux、AppArmor等安全机制又要求以白名单的形式组织策略,一旦策略配置疏漏,应用程序甚至无法正常运行。
因此,最适合制定应用程序安全策略的是软件开发者本身,他们最熟悉应用程序运行过程。许多知名的开源软件在发布软件的同时发布了配套的安全策略,如openvswitch、docker、ceph、tpm2-abrmd等。然而,对于大多数软件开发者而言,他们并没有太多使用安全机制的经验,并不能很好地开发和维护安全策略。
3 secPaver介绍
secPaver是一个开源的安全策略开发工具,在欧拉开源社区开源。
项目地址
https://gitee.com/openeuler/secpaver
其核心理念是抽象封装出一组通用的策略描述方法和策略操作接口,开发者无需详细了解安全机制细节,只需使用secPaver配置策略描述即可,具体的安全策略由secPaver生成。

相比传统的安全策略开发方式,使用secPaver可以降低开发者对安全机制的知识背景要求,简化策略开发流程,提高策略开发效率,实现软件和安全策略同步发布。

secPaver使用go语言开发,为客户端/服务端架构。用户可以通过客户端工具与服务端进程交互,进行安全策略开发工作。服务端为一个systemd服务进程,提供策略开发所需要的具体功能。secPaver采用go-plugin机制,对于不同安全机制的开发的差异化功能实现,封装在不同的插件,由服务端进程加载调用。secPaver当前支持SELinux策略开发功能,未来将支持AppArmor以及更多的策略开发功能。

secPaver旨在帮助用户实现端到端的安全策略开发,从安全策略的开发周期来看,secPaver的功能涵盖策略设计、迭代开发、策略发布等一系列流程。

4 在openEuler上使用secPaver开发SELinux策略
4.1 准备工作
Step1:从官方镜像源下载并安装openEuler-21.09 ISO。
下载地址
https://repo.openeuler.org/openEuler-21.09/ISO/
Step2:环境准备:
使用openEuler官方源配置yum仓库;
确认secpaver和secpaver-selinux软件包安装:
# rpm -qa | grep secpaver
secpaver-1.0.2-2.oe1.x86_64
secpaver-selinux-1.0.2-2.oe1.x86_64如果没有安装,使用yum命令安装:
# yum install –y secpaver secpaver-selinux确认SELinux开启,且运行模式为enforce模式:
# getenforce
Enforcing如果没有开启,则根据安全加固指导开启:https://docs.openeuler.org/zh/docs/21.09/docs/SecHarden/SELinux%E9%85%8D%E7%BD%AE.html
启动secPaver服务端进程:
# systemctl start pavd
4.2 策略开发
本次以常用的touch命令为例,通过添加策略限制touch命令只能创建路径为/tmp/test的文件。
Step1:创建模板工程,工程命名为demo:
# pav project create demo .
Finish creating demo template project at demo
Step2:在resource.json中声明策略涉及的所有文件资源:
# cat resources.json
{
"resourceList":[
{
"type":"exec_file",
"path":"/usr/bin/touch"
},
{
"type":"file",
"path":"/tmp/test"
}
]
}
在specs/module_demo.json中配置权限:
# cat specs/module_demo.json
{
"applicationList":[
{
"application":{
"path":"/usr/bin/touch"
},
"permissionList":[
{
"type":"filesystem",
"resources":[
"/tmp/test"
],
"actions":[
"create"
]
}
]
}
]
}
Step3:编译生成SELinux安全策略,完成后可以通过查询命令查询到demo_selinux策略状态为disable:
# pav project build -d . --engine selinux
[info]: Finish building project
# pav policy list
Name Status
demo_selinux disable
Step4:将生成SELinux安全策略安装到系统中,完成后可以通过查询命令查询到demo_selinux策略状态为active,且权限限制生效:
# pav policy install demo_selinux
[info]: install SELinux policy module
[info]: start to restore file context
[info]: Finish installing policy
# pav policy list
Name Status
demo_selinux active
# touch /tmp/test
# touch /tmp/test1
touch: cannot touch '/tmp/test1': Permission denied
Step5:测试完成后,卸载策略:
# pav policy uninstall demo_selinux
[info]: uninstall SELinux policy module
[info]: restore file context
[info]: Finish uninstalling policy
4.3 策略导出
secPaver支持将安全策略导出为策略包,策略包中除策略文件外,还会生成策略操作的脚本文件。在未部署secPaver的环境,也可以迅速完成策略安装、卸载等操作。
Step1:导出策略包文件:
# pav policy export demo_selinux .
Finish exporting: export_policy_demo_selinux.zip
Step2:执行策略包中的脚本文件安装策略:
# unzip -q export_policy_demo_selinux.zip
# cd demo/
# sh install.sh
Step3:执行策略包中的脚本文件卸载策略:
# sh uninstall.sh
5 secPaver未来规划
当前secPaver处于开发初期,未来secPaver的发展规划是:横向支持更多的安全策略类型,纵向提供更多策略开发功能。secPaver已规划的功能有:
支持AppArmor安全机制的策略生成和策略管理;
SELinux策略管理新增规则补全功能,捕获系统运行日志,并获取缺失规则;
客户端支持图形化界面,简化用户操作;
支持更简洁的策略配置格式。
欢迎对安全技术感兴趣的开发者加入进来,共同开发和维护secPaver项目。
更多内容详见secPaver项目仓库,点击阅读原文直达。

扫码进群交流




