一种有效缓冲区溢出漏洞检测防御方法

2021-01-10 17:26卢立浩厉洪瑞王颢翔
科学与生活 2021年28期

卢立浩 厉洪瑞 王颢翔

中文摘要:缓冲区溢出漏洞对计算机操作系统会产生严重的安全影响,能否准确检测并查杀此类安全漏洞是件重要的事。本文开展了一项溢出漏洞攻击流量分析实验,分析结果中给出了缓冲区溢出漏洞的特征,并提出了一种有效面向二进制溢出漏洞恶意攻击检测及防御方法,进一步给出对其普适化的安全响应策略。

关键词:二进制安全漏洞;流量分析;漏洞防御;

1. 引言

近年来,二进制漏洞的安全防御策略的到了广泛关注[1]。有效安全策略的提出很大程度上能够缓解因二进制漏洞所产生的安全威胁。本文开展了一项缓冲区溢出漏洞的攻击的流量分析实验,二进制漏洞攻击方式的实质是两台设备之间进行数据通信,这一过程通常使用应用层中的HTTPS、TCP等协议,采用取证工具wireshark[2]抓取数据包进行恶意流量特征分析。分析的结果中基于实验给出的漏洞的特征提出了缓冲区溢出攻击检测方法,进一步给出了普适化的恶意流量检测方法,这些方法能够有效查杀Linux平台下的缓冲区漏洞。

2. 恶意流量分析检测及防御方法

2.1缓冲区溢出攻击特征检测

测试实验设计为:靶机开启wireshark抓包功能捕获流经网卡的数据包。当攻击系统取得靶机控制权时,对数据包过滤处理。攻击系统与靶机之间通过应用层的协议与10001端口建立连接,构造如下表达式过滤数据包:tcp.port == 10001 || udp.port == 10001,过滤出如图1所示TCP协议的数据包,初步分析表明攻击系统与靶机系统完成了TCP三次握手,对这段数据包追踪流进一步发现两个系统之间的数据通信过程。

图1封包中的取证数据分析表明:缓冲区溢出漏洞利用过程中,攻击者需要将系统分配的栈空间填满至覆盖下一条返回地址,从而控制程序流程并执行恶意代码,特征如下:

(一)一定长度的填充字符。对应图2为一连串的A,实际情况中常为一段杂乱的无用字符或是\x00等空指令字符,作用是填满栈空间。

(二)数据封包尾部出现一段长度较短的地址数据。目前常见的计算机操作系统多为小端储存[3],因而在利用溢出漏洞的过程通常会在发送数据包的尾部倒序写入一段用作劫持程序流程的地址。为避免数据丢失,攻击者会在这段数据前加入少量空指令字符。

(三)数据封包中存在“/bin/sh”、“system”等系统调用命令或执行权限等指令。原因是攻击者在劫持控制流后,为了进一步夺得系统控制权会尝试在目标操作系统完成系统调用。因此常见的系统调用指令出现在流量封包中则具备明显的恶意攻击特征。

2.2普适化恶意流量检测方法

2.1结合本文攻击流量实例,给出实验环境中恶意程序的有效检测方法并归纳其恶意攻击特征。上述特征信息添加到入侵检测系统特征库,用于鉴别网络中出现的类似数据包,及时触发检测。本节在2.1基础上进一步拓展常见真实环境中的恶意流量检测方法,使其具备一定的普适性。

在实际环境中,受到恶意攻击的系统除服务器常用的Linux系统外,Windows系统在安全威胁方面受到的影响大同小异。错综复杂的系统及其提供的不同服务构成了复杂的网络环境,本文归纳如下几种有效的流量分析方法:

(一)木马特征检测,攻击者通过利用漏洞完成阶段攻击后,通常会向目标系统传入木马,从而获取长期且稳定的控制权并提升控制权限。目前多为反向连接木马[4]其特征是服务器主动连接客户机交互的反常情况,通过木马传输的数据大多经过加密保护,无法直观判断攻击者对系统的操作内容。但可通过过滤TCP、UDP或HTTPS等协议数据包查找特征,确定与攻击者连接的地址及端口。

(二)数据包查找特征匹配。在wireshark中的数据包查找功能具备四种可设定条件。第一种为显示过滤器,通过输入表达式可以将例如异常端口的流量过滤出并进行分析,本文2.1中使用的就是此类方法。第二种为十六进制值查找,可用于特征恶意指令检测,在计算机处理数据过程中将数据指令转化为为十六进制字符串对应汇编的opcode进行处理,构造十六进制的恶意特征指令进行检测,是一种有效方法。例如常见劫持程序控制流的汇编jmp无条件跳转指令,FF E4是其跳转到通用寄存器ESP的指令,包括call转移调用指令等对应的机器码均为敏感特征,可对其逐步分析排查。第三种数据包设定条件为字符串查找,这种方式可以过滤如GET、POST等请求特征,攻击者与目标操作系统建立连接后,对目标的系统的操作仍需要通过应用层协议进行请求,通过过滤此类特征进行取证。第四种是正则表达式,这种方法能针对实际情况灵活对恶意流量做适当的特征检测。

3. 防御策略

对漏洞进行防御处理是首要的,例如遭受木马感染的系统,应对其通信端口加入防火墙策略,阻断其与控制端的数据通信,丢弃来自远程控制端所有数据。并根据不同系统设置防火墙ACL规则,在Windows防火墙中设置如下策略:add portopeningtcp 10001 Wireshark DISABLE IP(目标IP)阻断控制端的数据通信。但很多情况下,单单添加防火墙策略不足以实现有效持久防控作用,原因在于攻击者可以通过端口映射等技术手段越过防火墙对特定端口的限制,在取得控制权后传入木马程序而获得持久控制权的攻击场景中,攻击者可以控制系统再次向控制端发送请求。

对此,有效的处理方法是修复漏洞函数并查杀木马程序。漏洞通过打补丁的方式进行修复。在查杀木马过程,由于攻击者通常会对木马程序进行隐藏。常见的方式如进程注入[5]即木马程序通过注入其它正常程序的dll文件中,使得木马能够自启动且难以辨识。对此可以通过本文流量分析方法对通信端口对应的程序PID进行排查,确定木马程序,木马程序注入的dll文件通常也会由其他正常程序加载。将所有占用的程序都强制暂停查杀木马程序。

在Linux系统中,需要及时对系统内的软件升级,并要对权限进行适当划分、经常检测系统cat /etc/passwd中是否存在高权限用户,以及在目录cat /etc/profile中查看系统环境变量是否异常。对linux系统中木马的查杀可通过find命令构造查询,如构造find ./ -name "*.xxx" -mtime -30 -typef -exec ls -l {} \;實现对过去30天内某格式被修改过的文件判断并查杀。

参考文献

[1]华驰,鲁志萍,王可.缓冲区溢出漏洞分析及防范策略[J].信息安全研究,2019,5(09):812-819.

[2]李荣茜,徐辉.Wireshark协议分析技术在计算机网络课程实验中的应用[J].科技风,2015(17):104+106.

[3]何剑.大小端存储模式对编程的影响及对策[J].扬州职业大学学报,2009(02):43-46.

[4]Seven.基于反向连接的木马编写思路[J].黑客防线,2004(06S):54-54.

[5]王佩红,赵尔敦,张瑜.远程线程注入DLL的检测与卸载方法研究[J].计算机与数字工程,2010(03):112-114+148.