暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

secPaver 正式开源,应用程序安全策略开发必备工具

openEuler 2022-01-21
1240

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:环境准备:

  1. 使用openEuler官方源配置yum仓库;

  2. 确认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

  3. 确认SELinux开启,且运行模式为enforce模式:

    # getenforce 
    Enforcing

    如果没有开启,则根据安全加固指导开启:https://docs.openeuler.org/zh/docs/21.09/docs/SecHarden/SELinux%E9%85%8D%E7%BD%AE.html

  4. 启动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已规划的功能有:

  1. 支持AppArmor安全机制的策略生成和策略管理;

  2. SELinux策略管理新增规则补全功能,捕获系统运行日志,并获取缺失规则;

  3. 客户端支持图形化界面,简化用户操作;

  4. 支持更简洁的策略配置格式。

欢迎对安全技术感兴趣的开发者加入进来,共同开发和维护secPaver项目。

更多内容详见secPaver项目仓库,点击阅读原文直达。

扫码进群交流

文章转载自openEuler,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论