最近接触了下AppArmor以及刚好最近部署某比赛,突然不想用docker做权限隔离,所以做了个记录
AppArmor
安装
sudo apt-get install apparmor-profiles apparmor-utils
创建配置文件
在生成配置文件前,需要做个软连接,因为aa-autodep是通过Path去寻找目标程序的。所以我这里先
sudo ln -s /home/binfile /usr/local/bin/binfile
然后..
1 2
| cd /etc/apparmor.d/ sudo aa-autodep binfile
|
此刻 /etc/apparmor.d 目录下就会生成一个 home.binfile 的文件,内容如下:
1 2 3 4 5 6 7 8 9 10
| # Last Modified: Tue Aug 6 18:49:37 2019 #include <tunables/global>
/home/binfile flags=(complain) { #include <abstractions/base>
/home/binfile mr, /lib/x86_64-linux-gnu/ld-*.so mr,
}
|
切换为 Complain 模式
sudo aa-complain home.binaryname
紧接着正常运行程序以及exploit
配置规则
用sudo aa-logprof
生成记录运行过程中的正常日志
生成的规则如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # Last Modified: Tue Aug 6 19:39:38 2019 #include <tunables/global>
/home/hub flags=(complain) { #include <abstractions/base>
/bin/dash cx -> /bin/dash, /bin/dash mr, /home/hub mr, /lib/x86_64-linux-gnu/ld-*.so mr,
profile /bin/dash flags=(complain) { #include <abstractions/base>
/bin/cat mrix, /bin/dash mr, /bin/ls mrix, /home/ r, /home/* r, /lib/x86_64-linux-gnu/ld-*.so mr,
} }
|
由于自动生成配置文件并不是那么完美,因此我们要手动修改。
- 由于远程需要,需要加上network inet stream
- 我仅仅需要读取 flag,因此需要修改可读文件目录
最后修改如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <tunables/global>
/home/hub { #include <abstractions/base>
network inet stream, /bin/dash mrix, /bin/bash mrix, /bin/cat mrix, /bin/ls mrix, /usr/bin/id mrix, /lib/x86_64-linux-gnu/ld-*.so mr, /tmp/server mr, /tmp/ r, /tmp/flag r,
^/bin/bash { } }
|
当修改完配置文件,我们需要将它导入内核使用:
apparmor_parser -r /etc/apparmor.d/home.hub
或者
aa-enforce /etc/apparmor.d/home.hub
其实说来这个配置文件就是一个白名单,意味着如果一些内容多写进到白名单里,可能会造成权限配置不当。
与xinetd 合用
配置文件
由于用来配置 ctf pwn,所以我们还需一个守护进程,这里我选择xinetd,配置文件如下:
1 2 3 4 5 6 7 8 9 10 11
| service pwn_server { socket_type = stream protocol = tcp user = root group = root server = /home/limit.sh wait = no per_source = 50 banner = /home/banner }
|
limit.sh
1 2 3 4 5
| #! /bin/sh ulimit -u 10000 ulimit -c 0 ulimit -v 7340032 /home/hub
|
并在 /etc/services 加上相应的服务名称与端口,例如:
1 2 3 4
| pwn_server 12435/tcp tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp
|
最后 service xinetd start 启动即可。
冲!XD
文章来源: https://bestwing.me/AppArmor-Pwn-Env.html
如有侵权请联系:admin#unsafe.sh