内存攻防技术


计算机会将内存中的1和0当作指令或者是数据进行处理,然后是指令形式还是数据形式,取决于该数据在内存中的位置。

之前的汇编中有说到,数据段的数据当作数据使用,代码段的数据当作指令使用。


缓冲区溢出


由于缺乏对缓冲区的边界条件检查而引起的一种异常行为。

(覆盖原先的数据)


栈溢出


计算机的冯诺依曼体系中,将控制程序流程的敏感数据与程序变量同时保存在同一段内存空间中。(有可行性)


1、覆盖函数返回地址利用方式

2、覆盖异常处理结构利用方式


堆溢出


堆是程序运行时动态分配的内存。如果不进行释放,或者内存分配不合理,就造成内存泄露。


缓冲区溢出利用的限制条件


1、空间大小

2、样式

3、过滤坏字符

4、空指令

5、栈指针


对抗博弈的发展


图解


Metasploit训练基础-内存攻防技术_安全入门


第一阶段


攻击方(黑客):基础的缓冲区溢出


防守方(操作系统以及编译厂商):使用GS保护选项,内存中加入一个随机的cookie值,如果变化,则判定发生溢出


第二阶段


攻击方(黑客):利用SEH(异常函数)执行


防守方(操作系统以及编译厂商):使用safeSEH保护,加入SEH的句柄验证技术,如果变化,则判定发生溢出


第三阶段


攻击方(黑客):使用未验证的SEH模块,利用POP/POP/RET代码。


防守方(操作系统以及编译厂商):使用SEHOP技术,验证整体的SEH链表,如果发生变化,则判定发生溢出


第四阶段


攻击方(黑客):伪造整体SEH链表,来绕过SEHOP


防守方(操作系统以及编译厂商):使用ASLR技术,地址空间布局随机化,让你确定不了目标代码的内存位置


第五阶段


攻击方(黑客):使用Heap Spray技术,堆喷射,让内存中大量重复shellcode的,增加执行几率。使用未启用ASLR的模块,也是一种方式


防守方(操作系统以及编译厂商):使用数据执行保护技术(DEP)技术,将数据段的内存页面属性设置为NX,(不执行)


第六阶段


攻击方(黑客):利用第三方模块gadget,串联关闭DEP保护


防守方(操作系统以及编译厂商):使用DEP+ASLR保护机制


第七阶段


攻击方(黑客):使用JIT Spray技术,布置大量的XOR指令,从而将XOR机器码执行关闭DEP、ASLR的操作。


防守方(操作系统以及编译厂商):等待


Metasploit训练基础-内存攻防技术_安全入门_02


攻防之间的博弈与斗争,共同促进了系统安全水平呈现螺旋式的上升。