type
status
date
slug
summary
tags
category
icon
password
特权隔离(Privilege Separation)、最小特权(Least Privilege)、安全的错误处理(Fail Securely)等等,是安全设计重要原则,本实验的目的是通过系统提供的安全机制,对程序进行安全增强。
本实验涵盖以下方面:
- chroot
- 改变进程euid
- seccomp
- AppArmor
lab2
exploit脚本使用这个:
使用方法:
准备工作:
关闭地址随机化:
安装库:
占用端口:
任务1:删除特权文件
在/tmp文件夹下创建test.txt文件,将owner设为root:
把实验代码编译:
赋权并执行:
浏览器登录
127.0.0.1:80
,注册账号U202112003,1234,或登录已经注册好的账号,完成操作后,后台会有返回内容,等在修改脚本时需要用到。修改exploit脚本,将地址改为与程序相符的情况:
- banksv程序的libc地址:
/bin/sh
字符串偏移量:
- system,exit,unlink偏移量:
- ebp,查看touchstone程序后台返回的framepoint:
这个就不配图了
把刚才6处地址在脚本中修改好,运行:
返回了一些结果后连接断开了,查看
/tmp
目录,发现/tmp
目录下test.txt
消失。任务2:chroot
修改server以支持chroot:
编译:
更改root路径:
运行程序,运行完先去注册登陆一下,得到ebp,等下开启gdb调试的时候是没法正常注册登陆的
- 切换目录以后链接库基地址变了,注意看完地址就把gdb退出,否则无法正常运行
- 修改ebp,根据touchstone程序输出的framepoint进行
创建文件:
运行脚本:
查看结果,可以发现更改后的目录中test.txt被删掉了
任务3:改变进程euid
修改server.c,按照注释指引,插入改变euid的代码,总共有三处:
编译并运行:
- 修改链接库基地址,通过以下命令查看修改:
- ebp可能发生变化,参考刚才运行打印的framepoint进行修改
创建文件:
运行脚本:
查看结果,可以发现修改euid后文件没有被删除
任务4:使用seccomp限制系统调用
环境配置,注意,添加了库后,基地址和偏移地址会发生变化,需要重新在脚本中更正。建议安装前快照
修改
makefile
,在第4行关于banksv程序的末尾添加编译选项-lseccomp
:默认允许,显式拒绝
创建文件:
修改
banksv.c
,添加代码,使⽤默认允许规则初始化,并添加了拒绝unlink的规则,之后将seccomp进⾏加载:编译运行,然后注册登录账号:
查看新的地址:
在脚本中修改,然后进行攻击,发现删除失败:
验证结果,dmesg中存在seccomp的拦截信息,对banksv尝试使用的10号系统调用进行了拦截,通过在系统调用表中查看可知该调用为unlink:
尝试用脚本攻击,获得shell,结果失败:
验证结果,dmesg中存在seccomp的拦截信息,拦截了21号系统调用
默认拒绝,显式允许
创建文件:
修改
banksv.c
,使用代码:编译运行,然后注册登录账号:
查看新的地址:
在脚本中修改,然后进行攻击,发现删除失败:
验证结果,dmesg中存在seccomp的拦截信息,对banksv尝试使用的10号系统调用等等进行了拦截
尝试用脚本攻击,获得shell,结果失败:
验证结果,dmesg中存在seccomp的拦截信息,拦截了21号系统调用
接下来添加允许unlink的规则,编译后重新运行,步骤同上:
再次重复攻击,成功删除,验证了之前的拦截生效
任务5:AppArmor
环境配置:
编译,顺便创建文件:
创建配置文件,按F:
修改配置文件,拒绝对
tmp
的访问:让配置文件生效:
运行:
查看新的地址:
在脚本中修改,然后进行攻击,发现删除失败:
同理,查看调用被拦截的情况以验证:
尝试获得shell,发现获得失败:
- 作者:jackpai
- 链接:https://www.jackpai.life//technology/system-security-lab2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。