linux

apparmor

前言
AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统。AppArmor 通过强制执行良好行为并防止已知和未知的应用程序缺陷被利用,主动保护操作系统和应用程序免受外部或内部威胁,甚至是零日攻击。
AppArmor 通过提供强制访问控制 (MAC) 来补充传统的 Unix 自主访问控制 (DAC) 模型。自 2.6.36 版起,它已包含在主线 Linux 内核中,并且自 2009 年以来,它的开发得到了 Canonical 的支持。

安装
许多 Linux 发行版(例如 Debian、Ubuntu、OpenSUSE)都带有 AppArmor

但需要安装一些额外的预装的配置文件(存放在/etc/apparmor.d/)

#apt-get install apparmor-profiles

安装apparmor 分析工具(命令)

#apt-get install apparmor-utils

命令如下:

aa-status #查看当前状态
aa-enforce #把配置文件设置成强制模式
aa-complain #把配置文件设置成投诉模式
apparmor_parser #重启加载改变的策略
aa-genprof #生成一个新的配置文件
aa-logprof #读取执行的日志
aa-mergeprof #合并策略

apparmor模式

apparmor有enforce与complain 两种模式
enforce 表示,放行配置文件中允许的行为,其余行为都会被阻止,会记录日志。
complain 表示,放行配置文件中允许的行为,对于其余行为不加阻止,但会记录日志

apparmor处理流程

初始化配置文件(每个进程(服务)一个配置文件)
将配置文件设置为 complain (因为这个模式只会报警,而不会阻止)
进行一系列的正常操作,由于这些正常的操作还未写入配置文件,所以会触发报警,产生日志
分析日志,逐条分析,选择放行或者阻止,最终获得我们想要的配置文件
但由于我们认为的正常操作,不可能全部涵盖,为了避免误伤,会继续监视
经过一段时间(比如一个星期),重复上述分析过程
最终,将配置文件的模式设置为 enforce,从而达到对服务器的保护作用
若依然会有误伤的行为,继续重复上述的分析过程

演示(创建nginx apparmor 规则)

初始化nginx规则文件

#cd /etc/apparmor.d/
#aa-autodep nginx
生成/etc/apparmor.d/usr.sbin.nginx 配置文件

将nginx规则设置为complain模式

#aa-complain nginx

重启 nginx

#systemctl restart nginx

打开浏览器访问页面,模拟用户,对网站的一些常用功能进行操作

分析规则(使用aa-logprof命令)

aa-logprof是一个交互式工具,用于查看 AppArmor 生成的消息并更新
使用方法
aa-logprof [ -d /path/to/profiles ] [ -f /path/to/logfile ]
-d –dir /path/to/profiles 指定在何处查找 AppArmor 安全配置文件集,默认为 /etc/apparmor.d/
-f –file /path/to/logfile 指定包含 AppArmor 安全事件的日志文件的位置

#aa-logprof

会出现类似下面的交互界面

Reading log entries from /var/log/syslog.
Updating AppArmor profiles in /etc/apparmor.d.
Complain-mode changes:

Profile: /usr/sbin/nginx
Capability: setuid
Severity: 9

[1 - #include ]
2 - capability setuid,
(A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish
Adding #include to profile.

Profile: /usr/sbin/nginx
Path: /run/nginx.pid
New Mode: owner rw
Severity: unknown

[1 - owner /run/nginx.pid rw,]
(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish
Adding owner /run/nginx.pid rw, to profile.

Profile: /usr/sbin/nginx
Path: /var/log/nginx/download.drivereasy.com.access.log
Old Mode: owner w
New Mode: w
Severity: 8

[1 - /var/log/nginx/* w,]
2 - /var/log/nginx/download.drivereasy.com.access.log w,
(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inish
Adding /var/log/nginx/* w, to profile.
Deleted 3 previous matching profile entries.

= Changed Local Profiles =

The following local profiles were changed. Would you like to save them?

[1 - /usr/sbin/nginx]
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
Writing updated profile for /usr/sbin/nginx.

操作规则如下:

(A)llow                            a:允许
[(D)eny]                           d:拒绝
(I)gnore                           i:忽略
(G)lob                             g:通配符 /var/log/nginx/download.drivereasy.com.access.log w ===》 /var/log/nginx/* w
Glob with (E)xtension              e:保留文件扩展名的通配符规则 /var/log/nginx/download.drivereasy.com.access.log w ===》 /var/log/nginx/*.log w
(N)ew                              n:手动输入
Audi(t) / Audi(t) off              t:审计
(O)wner permissions off /(O)wner permissions on: o: 所有者权限
Abo(r)t                            r:放弃规则
(F)inish                           f:完成
(S)ave Changes                     s:保存
Save Selec(t)ed Profile            t:保存
[(V)iew Changes]                   v:浏览 v:编辑
View Changes b/w (C)lean profiles  c:浏览规则 v:编辑

这个分析过程可能耗时很长,为了避免误伤,需要多次。最终,一旦配置文件准备妥当,可以设置配置文件为 enforce 模式。

#aa-enforce nginx

重启 apparmor 使配置生效

#systemctl restart apparmor 

留言

您的电子邮箱地址不会被公开。 必填项已用 * 标注