Lazy loaded image
技术分享
信息系统安全实验(2/3)
00 分钟
2024-6-21
2024-8-29
type
status
date
slug
summary
tags
category
icon
password
特权隔离(Privilege Separation)、最小特权(Least Privilege)、安全的错误处理(Fail Securely)等等,是安全设计重要原则,本实验的目的是通过系统提供的安全机制,对程序进行安全增强。
本实验涵盖以下方面:
  1. chroot
  1. 改变进程euid
  1. seccomp
  1. AppArmor

lab2

exploit脚本使用这个:
使用方法:

准备工作:

关闭地址随机化:
安装库:
占用端口:

任务1:删除特权文件

在/tmp文件夹下创建test.txt文件,将owner设为root:
把实验代码编译:
赋权并执行:
浏览器登录127.0.0.1:80,注册账号U202112003,1234,或登录已经注册好的账号,完成操作后,后台会有返回内容,等在修改脚本时需要用到。
修改exploit脚本,将地址改为与程序相符的情况:
  1. banksv程序的libc地址:
    1. notion image
  1. /bin/sh字符串偏移量:
    1. notion image
  1. system,exit,unlink偏移量:
    1. notion image
  1. ebp,查看touchstone程序后台返回的framepoint:
    1. 这个就不配图了
把刚才6处地址在脚本中修改好,运行:
返回了一些结果后连接断开了,查看/tmp目录,发现/tmp目录下test.txt消失。

任务2:chroot

修改server以支持chroot:
编译:
更改root路径:
运行程序,运行完先去注册登陆一下,得到ebp,等下开启gdb调试的时候是没法正常注册登陆的
  1. 切换目录以后链接库基地址变了,注意看完地址就把gdb退出,否则无法正常运行
    1. 修改ebp,根据touchstone程序输出的framepoint进行
    创建文件:
    运行脚本:
    查看结果,可以发现更改后的目录中test.txt被删掉了

    任务3:改变进程euid

    修改server.c,按照注释指引,插入改变euid的代码,总共有三处:
    编译并运行:
    1. 修改链接库基地址,通过以下命令查看修改:
      1. 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,发现获得失败:
      上一篇
      信息系统安全实验(1/3)
      下一篇
      信息系统安全实验(3/3)