一项缓冲区溢出漏洞安全性隐患分析

2021-01-10 17:26王颢翔厉洪瑞卢立浩
科学与生活 2021年28期
关键词:安全分析

王颢翔 厉洪瑞 卢立浩

中文摘要:缓冲区溢出漏洞对计算机系统固件、设备及应用程序会产生严重的安全影响。其危害程度很大,能够操作系统造成严重影响。本文开展了一项针对二进制程序安全漏洞的隐患分析,复现了一种恶意代码劫持程序控制流程漏洞及利用的复现实验,本文给出了实验结果表明,恶意的漏洞利用将造成难以估计的安全隐患。

关键词:缓冲区溢出漏洞;安全分析;二进制漏洞;

1.引言

伴随5G网络诞生及其衍生产品的高速发展,网络为人类社会带来了极大的改变,但与此同时网络设备的安全性却不断受到威胁和挑战。事实上,层出不穷的安全漏洞时刻对互联网用户造成影响甚至产生危害。其中偏向操作系统底层的二进制漏洞与其他类别漏洞相比往往具备更为严重的威胁。常见的二进制漏洞有缓冲区堆栈溢出漏洞、条件竞争漏洞、驱动内核漏洞等。其造成的危害具体有:用户数据泄露、服务宕机、甚至被攻击者通过远程代码执行获取系统的最高控制权等。

为此,本文针对一个缓冲区栈溢出漏洞[1],开展了一项漏洞恶意劫持控制程序流程攻击的安全分析实验,目的是提供一种直观的网络安全攻击隐患,给予普通网络用户一种安全意识普及。

2.缓冲区溢出漏洞原理

便于开展有效且特征明显的缓冲区溢出漏洞实验,并给出有效漏洞原理分析过程,本文选用ret2shellcode栈溢出漏洞为测试对象论述缓冲区溢出原理。

基于计算机底层角度,应用程序在运行过程最终都转化为二进制机器码通过CPU运算处理。过程中操作系统为程序分配一块连续的内存空间储存数据,这片内存区域称为缓冲区[2]。当写入或读入的数据超过缓冲区分配的内存大小,则会触发缓冲区溢出形成漏洞。

程序运行过程中,系统会根据不同的功能模块自动分配多段有限大小的栈空间。并依据内存分段具体分配存放程序.text代码段内容、已初始化.data段内容以及未初始化的.bss段内容等。数据主要通过寄存器进行传参,在x86架构下寄存器的EIP指向程序的下一次返回地址,ESP与EBP分别指向一个功能模块所在栈空间的栈顶与栈底。当输入的数据超出这段栈空间的大小,则超出的数据会覆盖栈段相邻内存中的数据。从而造成缓冲区溢出使程序异常或崩溃。

对此攻击者通常会利用栈溢出覆盖EIP地址恶意跳转预先设定的一段内存地址,从而劫持程序控制流程完成漏洞利用。因此栈溢出大多发生在具备输入函数的功能模块中,常见的漏洞函数如gets、read以及scanf等,如果输入函数未对输入长度做适当限制,则容易产生栈溢出漏洞。

3.缓冲区溢出栈漏洞的利用

3.1实验环境

实验环境为两台Linux虚拟机,系统分别为攻击系统kali Linux和靶机系统ubuntu16.04。攻击系统中配置python环境并安装建立端口传输库,这里选用pwntools库,优点是便于将漏洞利用程序与目标靶机建立连接传输。靶机系统中安装部署socat作用是将名称为test的漏洞程序通过socat映射运行在实验环境中的10001端口上,便于攻击系统访问。操作命令如下:socat tcp-listen:10001,fork exec:./test,reuseaddr。

3.2漏洞分析

基于常用程序逆向调试[3]方法,本实验分析过程分为静态分析和动态调试两个部分。以下为漏洞程序的漏洞函数部分源码:

{char s; /* [esp+1Ch] [ebp-64h]*/ puts("test"); gets(&s); strncpy(buf2, &s, 0x64u); printf("Attack"); return 0;}

该代码段的主要功能是通过gets函数接收输入变量s中的内容,将其拷贝到buf2地址后执行输出函数,静态分析可得buf2所在内存分段为bss段,采用动态调试工具Gdb对这段程序结构进行分析并判断漏洞利用方式,载入被测程序后在main函数下断点,单步至输入功能函数后开始分析测试。思路为构造测试输入,判断程序是否产生崩溃异常等情况。实验中输入了一段长度为0x200的字符串。通过Gdb断下的程序崩溃信息,发现在输入112字符长度时程序发生栈溢出并覆盖返回地址。由此判断在输入函数部分存在栈溢出漏洞,动态调试查看程序内各段的权限,其中buf2所在的bss段具备读写执行权限。因此利用思路为将栈空间填满造成溢出后劫持EIP跳转到写入shellcode的buf2的地址从而取得系统权限。

3.3 shellcode原理及利用方法

总结本文3.2所述思路确定的shellcode利用方法主要原理为:将程序下一条返回地址覆盖为已写入一段恶意代码的内存地址,从而劫持程序执行流程。对照通用寄存器及汇编指令阐述利用原理,给出一段shellcode主要汇编代码:

asm {xor eax,eax /*eax置0*/xor edx,edx /*edx置0*/push edx push "//sh" push "/bin" /*将/bin/sh入栈*/ mov ebx,esp /*ebx指向/bin/sh字符串*/ xor ecx,ecx mov al,0Bh /*eax置为execve函数的中断号*/ int 80h } /*调用软中断*/

这段汇编指令对应寄存器参数为:EAX = 0xb,EBX = &("/bin//sh"), ECX = EDX = 0,調用int 0x80软中断后 ,即执行了sys_execve("/bin//sh", 0, 0, 0)从而完成系统调用。在攻击利用过程传输的shellcode为十六进制字符串opcode。其中opcode由最多6个域组成,是与汇编指令对应的机器码。

利用脚本主要部分及结果如图1所示:

显然,将攻击脚本通过socat映射端口传输到靶机中,触发栈溢出后实现劫持控制程序流程,进而读取shellcode地址后取得了靶机控制权,图1中示出的的id命令观察到获取到了靶机最高控制权并能执行bash命令,即获得目标操作系统的最高控制权,危害极大。

4.小结

本文开展了一项缓冲区漏洞利用实例,实验的测试结果表明,复现漏洞劫持程序控制流程的二进制攻击所产生的威胁很严重,当前互联网不仅仅只是网络用户用来工作、娱乐等活动的载体,更是物联网设备、智能应用产品普及的快速发展期。本文给出的测试实例结果充分说明安全隐患是件重要的事,普通网络用户应当时刻留意软件补丁更新,提高网络安全的基本意识,切实做到共同维护健康的网络环境。

参考文献

[1]邵思豪,高庆,马森,段富尧,马骁,张世琨,胡津华.缓冲区溢出漏洞分析技术研究进展[J].软件学报,2018,v.29(05):7-26.

[2]袁连海,李湘文,徐晶.缓冲区溢出攻击研究[J].舰船电子工程2019,39(04):93-98.

[3]罗文华.基于逆向技术的恶意程序检测方法研究[J].警察技术,2012 (06):28-30.

猜你喜欢
安全分析
校园网络安全分析与设计
HAZOP分析方法及其在发电厂电气系统安全分析中的应用
关于高层建筑电气设计中低压供配电系统安全分析
电梯制动器的结构型式与检验方法探讨
行为安全管理在施工中的应用分析
运营商大数据安全管理策略研究
对分布式数据库系统的安全分析
海洋石油钻井平台电气设备安全
云计算安全问题浅析
物联网RFID技术与云计算数据传输的安全性分析