在CTF Pwn下使用AppArmor做权限隔离
最近接触了下AppArmor以及刚好最近部署某比赛,突然不想用docker做权限隔离,所以做了个记录
AppArmor
安装
sudo apt-get install apparmor-profiles apparmor-utils
创建配置文件
在生成配置文件前,需要做个软连接,因为aa-autodep是通过Path去寻找目标程序的。所以我这里先
sudo ln -s /home/binfile /usr/local/bin/binfile
然后..
1 | cd /etc/apparmor.d/ |
此刻 /etc/apparmor.d 目录下就会生成一个 home.binfile 的文件,内容如下:
1 | # Last Modified: Tue Aug 6 18:49:37 2019 |
切换为 Complain 模式
sudo aa-complain home.binaryname
紧接着正常运行程序以及exploit
配置规则
用sudo aa-logprof
生成记录运行过程中的正常日志
生成的规则如下
1 | # Last Modified: Tue Aug 6 19:39:38 2019 |
由于自动生成配置文件并不是那么完美,因此我们要手动修改。
- 由于远程需要,需要加上network inet stream
- 我仅仅需要读取 flag,因此需要修改可读文件目录
最后修改如下:
1 | #include <tunables/global> |
当修改完配置文件,我们需要将它导入内核使用:
apparmor_parser -r /etc/apparmor.d/home.hub
或者
aa-enforce /etc/apparmor.d/home.hub
其实说来这个配置文件就是一个白名单,意味着如果一些内容多写进到白名单里,可能会造成权限配置不当。
与xinetd 合用
配置文件
由于用来配置 ctf pwn,所以我们还需一个守护进程,这里我选择xinetd,配置文件如下:
1 | service pwn_server |
limit.sh
1 | ! /bin/sh |
并在 /etc/services 加上相应的服务名称与端口,例如:
1 | pwn_server 12435/tcp |
最后 service xinetd start 启动即可。
冲!XD