干货!一文看懂漏洞攻击那些事儿

IT服务圈儿 今天

以下文章来源于小白学黑客 ,作者小白

小白学黑客小白也能看懂的网络安全教程

作者丨小白
来源丨经授权转载自公众号 小白学黑客(ID:xiaobaihacker)

二进制漏洞的攻防对抗经过几十年的发展,涌现出了形形色色的攻击手法,也催生了一个又一个的防御手段,今天这篇文章来简单科普回顾一下这几十年的攻防对抗历史。

第一回合:栈溢出攻击 vs GS/Stack Canary + ASLR

栈溢出攻击,也叫缓冲区溢出攻击,它的名头即使是不做安全的朋友估计也听说过。

这种攻击手法,曾经风靡一时。

因为函数调用的过程中,涉及到函数栈帧的压入弹出,也会将调用处的返回地址压入栈中,这就导致了一些情况下,通过操作位于栈中的局部变量,可能会覆盖、篡改掉栈中的返回地址。

攻击者经过精确计算,可以精准控制写入的数据,覆盖返回地址,从而待函数返回时劫持执行流。

早期的C函数库中大量关于字符串的操作函数都是不安全的,都没有检查缓冲区的长度,这种问题非常严重。

后来各家编译器都推出了更安全版本的字符串操作函数,增加了对缓冲区长度的检查。

栈溢出攻击能够得逞的根本原因,在于栈中的返回地址被破坏了之后,程序未能感知到,错把攻击者填充的地址,当成正常的返回地址取出使用。

基于这个特点,微软的VC++编译器、Linux平台的GCC/G++编译器都引入了一个相同的应对手段:在栈中做记号

通过在返回地址之前放置一个标记,在函数返回之际,取出栈中的返回地址之前,将这一标记取出来,做一个安全校验,如果校验通过,说明返回地址安全,否则则说明栈数据被破坏,程序立即终止。

在VC++中,这一技术叫GS(Guard of Stack),在GCC/G++上,这一技术叫做Stack Canary

后来,攻击者更换攻击目标,盯上了C++的虚函数表中的函数指针、栈中的异常处理函数指针等等,通过覆盖它们来劫持执行流。

于是,一个新的防御技术又出现了,它就是:地址空间随机化ASLR

攻击者能成功覆盖函数指针的前提是它们能够精确计算需要覆盖的目标在内存中哪个位置,而在之前的系统中,程序模块加载的地址都是固定的,也就是每次启动,可执行文件、动态链接库文件都是加载到了同一个位置,这就为预测带来了方便。

ASLR的出现,改变了这一历史,将各个模块加载到内存中的地址随机化,每次都不一样,攻击者就很难预测了。

第二回合:堆喷射+堆溢出 vs DEP

ASLR的出现极大的增加了攻击的难度,攻击者很难填写正确的shellcode地址来劫持返回地址了。于是,一项新的技术出现了,这就是Heap Spary 堆喷射技术

这项技术常用于针对IE浏览器中的攻击,使用Javascript分配大量内存,占据内存空间关键地址(如0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D等),然后使用大量滑板指令nop填充堆区,最后劫持EIP执行shellcode。

看上去有点复杂,简单来说就是:我分配大量内存,把上面那些特殊的地址占据,然后在里面填充nop指令,在最后再放恶意代码,然后劫持跳转到那些特殊地址,最后通过一大片nop都能滑行到恶意代码中。

这种行为大面积分配堆内存,往里面写入nop指令,动作有点像喷射,所以叫堆喷射。

魔高一尺,道高一丈,无论是栈溢出还是堆喷射,其本质都是把shellcode放到栈或者堆里,然后劫持EIP去执行。但本质上,栈和堆是存放数据的地方,而非存放指令的地方

于是,抓住这个特点,一个新的防御手段又又出现了!

DEP:数据执行保护,釜底抽薪,让栈和堆所在的内存页面不可执行!

x64架构下,页表PTE中有一个标记NX/XD位,指示该页面是否可执行,当CPU检测到执行了带有该标记的页面中的代码,则抛异常,终止程序。

第三回合:ROP vs CFG

有了ASLR和DEP是不是就可以高枕无忧了呢?

黑客的脑子总是很聪明,那里有压迫,哪里就有反抗。

既然攻击者填充的代码不允许执行,那就用目标程序自己的代码吧!

什么意思?

所有的程序,归根到底都是由一条条CPU指令构成的,如果攻击者的指令不是它们自己写的,而是来自于正常的程序片段呢?

黑客很聪明啊,它们把需要完成的核心功能拆解成一条条的指令,然后去正常的程序和系统库中寻找这些现成的指令片段,一个个拼凑起来,就完成了自己的功能。

这种技术叫做:面向返回编程ROP

ROP的核心思想:攻击者扫描已有的动态链接库和可执行文件,提取出可以利用的指令片段(gadget),这些指令片段均以ret指令结尾,即用ret指令实现指令片段执行流的衔接。

这一招是不是很聪明,真是让人拍案叫绝!

不得不说这一招威力真的很大,面对这种攻击,微软从Windows 8.1搞出了一个叫CFG的技术。

CFG是Control Flow Guard的缩写,就是控制流保护,它是一种编译器和操作系统相互配合的防护手段,目的在于防止不可信的间接调用。

CFG通过在编译和链接期间,记录下所有的间接调用信息,并把他们记录在最终的可执行文件中,并且在所有的间接调用之前插入额外的校验,当间接调用(通过指针调用,如 call dword ptr eax,而不是通过函数名的普通调用)的地址被篡改时,会触发异常。

如上图中,在call [ebp+var_14] 之前插入的 __guard_check_icall_fptr 调用就属于安全校验。

简单来说,编译器在代码编译的时候就会把所有合法的间接调用地址记录在案,并悄悄的在代码中所有进行间接调用的地方插入校验,一旦发现要调用的目标不在记录中,则认为这是一个非法的调用行为,立刻Crash掉。

这一招杀敌一千,自损一百,所有间接调用都加入了检验,对程序执行性能的影响无法忽略。

总结

二进制漏洞攻防你来我往,手法越来越刁钻,了解这些技术,会让你对程序执行的原理有更本质的认识。未来会朝着什么方向发展,你怎么看呢?欢迎评论区留言交流。

好了,以上就是这篇文章的全部内容了,写作不易,大家看到这里来个点赞分享吧~谢谢啦~

(0)

相关推荐

  • C语言函数参数压栈的顺序是?

    今天分享关于C语言函数参数压栈顺序的问题.按照日常习惯,C语言的函数参数压栈顺序是从左到右吧?但是事实却是相反的,C语言函数参数压栈顺序是从右到左的.下面看一个程序: #include <std ...

  • IoT上的缓冲区溢出漏洞

    在过去N年里,缓冲区溢出一直是网络攻击中最常被利用的漏洞. 看一下缓冲区是如何创建的,就能知道原因所在. 下面是C语言的一个例子: 第一步,程序员使用 malloc 函数并定义缓冲区内存的数量(例如3 ...

  • cfi那些事(1)

    控制流完整性 针对于漏洞利用,最终的效果和目的就是劫持控制流,控制目标程序做一些他本来做不了的事情.可以达到这一目的的方式有很多,比如ROP.劫持函数指针等等.而这些都来自于软件中一些漏洞,如缓冲区溢 ...

  • CTF 一次PWN解题的小技巧

    前几天在国外的某个ctf社区发现了一道好玩的赛题. 建议ctfer在阅读这篇文章的时候,首先要掌握以下的一些内容,因为这些东西对于ctf比赛来说,都是很有必要掌握的. 基本的Linux知识 对于X86 ...

  • 记一次ARM架构的ROP利用

    先说一下需要搭建的环境: 1.安装qemu:sudo apt-get install qemu-user 2.安装gdb-multiarch:sudo apt-get install gdb-mult ...

  • Serv-U服务器漏洞,黑客可远程执行程序

    近日,微软已经分享了有关影响 SolarWinds Serv-U 托管文件传输服务的现已修复.积极利用的关键安全漏洞的技术细节. 该漏洞源于 Serv-U 实施的 Secure Shell (SSH) ...

  • 干货 | 一文看懂中华兵器史

    Cold Arms 石兵器时代 1.旧石器时代的石兵 原始人类工兵不分,石器就是石兵,用作生产生活就是石器,用作格斗就是石兵.下图是周口店"北京人"使用的石器. 2.新石器时代的石 ...

  • 精选干货 | 一文看懂文献综述的写作结构、方法、步骤与常见问题

    文献综述也称研究综述,是指在全面掌握.分析某一学术问题(或研究领域)相关文献的基础上,对该学术问题(或研究领域)在一定时期内已有研究成果.存在问题进行分析.归纳.整理和评述而形成的论文. 文献综述一般 ...

  • 技术干货 | 一文看懂汽车电路图的画法规则,汽车电子电气工程师必读!

    要修好汽车电气设备,必须读懂和掌握汽车电路图.而要学会如何看汽车电路图,就要先了解汽车电路图的画法规则. 由于目前各国汽车电路图的绘制方法.符号标注.文字标注.技术标准的不同,各汽车生产厂家,汽车电路 ...

  • 技术干货 | 一文看懂特斯拉电池构造原理!

    据外媒报道,特斯拉员工发布在领英上的一篇帖子显示:特斯拉公司正在为能源交易团队招聘新成员,来支持其电池和可再生能源项目. Tesla的电池模块一直是值得称道的设计,今天小优就给大家带来了特斯拉电池的构 ...

  • 学术干货 | 一文看懂金属材料疲劳(附疲劳试验标准下载) – 材料牛

    疲劳破坏是工程结构中最常见的失效形式之一,据统计,占各类机械零件破坏总数的80%到90%都是由疲劳断裂引起的,所造成的直接经济损失占美.日.欧洲共同体等国家每年国民生产总和的6%到8%左右[1].此外 ...

  • 【干货】一文看懂光伏产业链

    太阳能光伏发电是太阳能发电的重要分支,主要是指利用太阳能电池直接将太阳光能转化为电能,而太阳能电池通常是利用半导体器件的光伏效应原理进行光电转换. 按照光伏电池片的材质,太阳能电池大致可以分为两类:一 ...

  • 一文看懂3D打印及其行业应用(绝对干货)

    增材制造(Additive manufacturing, AM),又称 3D 打印,其应用被认为是继蒸汽机,计算机,和互联网之后的又一项工业革命.AM 技术在过去的 30 年发展迅速,尤其是在近 5 ...

  • 干货:一文看懂分布式存储架构

    [摘要]本文介绍了分布式存储的架构类型.分布式理论.不同的分布式文件系统和分布式键值系统等,较为系统详尽,可阅读收藏.[作者]Rock,目前担任某国内著名餐饮连锁企业运维负责人,从事过数据库.大数据和 ...

  • 干货:一文看懂高考必考中国历史概念!

    干货:一文看懂高考必考中国历史概念!