GS 原理及破解 《0day安全》

1.原理:

  在main函数之前,会调用__security_init_cookie函数(win10,vs2017,release,x86);

  

  进入__security_init_cookie函数内部:

  __security_cookie(随机数,产生于ntdll.dll的函数,通过栈回溯,下.data+4的硬件断点,可以追踪,看的我头疼,不想弄)

  存在当前程序.data段的第4个字节,并将它按位取反,放入了.data的第0个字节。

  

  进入main函数:

  从.data+4的位置把__security_cookie取出来与当前栈的esp进行异或,得到的结果放入[ebp-4]

  

  当函数返回之前:

  将[ebp-4]中的数据取出来,与esp异或,比较得到的结果与[.data+4]中的数据是否一致,来判断[ebp-4]的位置是否被修改过。

       

  

2.GS的优点与缺陷(不考虑DEP,ALSR,优化等)(源于<<0day安全>>)

  ①修改栈帧中函数返回地址的经典攻击将被 GS 机制有效遏制;

  ② 基于改写函数指针的攻击,如 C++虚函数的攻击,GS 机制仍然很 难防御;

  ③ 针对异常处理机制的攻击,GS 很难防御;

  ④GS 是对栈帧的保护机制,因此很难防御堆溢出的攻击。

3.方法

  可以修改.data+4的数据(如果可以的话),人工计算向栈内填值,骗过__security_check_cookie函数

猜你喜欢

转载自www.cnblogs.com/jf-blog/p/12357344.html
gs