Side Channel Attack Lab
1 实验介绍
1.1 实验目的
通过使用所提供的漏洞代码sidechannel.c,设计一个攻击代码,利用边信道攻击的方式获取正确的密码,并执行后面的shellcode 来获取一个 root shell,其中的 s.pass为root只读的密码文件。
1.2 具体场景
有人留了一个root所有suid程序为后门,和一个root只读的s.pass文件,密码正确就能执行输入的shellcode,普通用户只能看到s.pass大小为19个字节
,也能猜测其中为可打印字符,实验就是利用边信道攻击在不知道s.pass内容的情况下,攻击得到密码从而执行shellcode获得root shell ,编译sidechannel.c的时候记得加上堆栈可执行
1.3 实验原理
- 边信道攻击(side channel attack简称SCA),又称侧信道攻击:针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法被称为边信道攻击。
- 本实验中,错误的密码和正确的密码用时会不一样,猜测出第1个字符再猜第2个,依次猜完19个字符就搞定了,最后一个字符有点特殊。
- 精确计时,比较不同字符程序运行的时间,错误字符和正确字符用时的差异不是特别大,但是在seed机器上还是可以测出来
- 关键代码如下:
2 攻击过程
2.1 分析sidechannel.c代码
//sidechannel.c
//s.pass root只读
//S1deCh4nnelAttack3r
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
FILE *in = 0;
char pass[20]="";
unsigned int i=0, j=0;
unsigned short correct=0,misplaced=0;
unsigned short pwlen=strlen(pass) - 1, inlen=0;
if(argc != 3 || (inlen=strlen(argv[1]) - 1) > 19)
return 1;
setresuid(geteuid(),geteuid(),geteuid());
in = fopen("s.pass","r");
pass[fread(pass, 1,19,in)] = 0;
fclose(in)