qq游戏的pkg格式文件解压工具_你的文件压缩工具WinRar是否存在隐患?

ad41f2f8ba54fd826e011c0eda4a5487.png

漏洞是指在硬件、软件、协议的具体实现或系统安全策略上存在缺陷,从而使攻击者能够在未授权的情况下访问或破坏系统。是受限制的计算机、组件、应用程序或其他联机资源无意中留下的不受保护的入口点。

漏洞背景

WinRAR是一种流行的文件压缩工具,全球有超过五亿人在使用该软件。

2019年2月20日,CheckPoint安全团队发表了一篇文章,该文章披露了WinRAR中UNACEV2.dll文件在ACE格式文件解压时会产生的路径穿越漏洞,攻击者可利用该漏洞释放恶意文件至指定文件夹,从而达到控制受害者主机的目的。

2046Lab深入解析该漏洞的原理和利用过程发现,该漏洞使用简单方便,一经披露广受攻击者的青睐,攻击者通过构造恶意的ACE文件来释放病毒软件、后门软件、挖矿软件、勒索软件等恶意文件至受害者的主机。受害者一旦使用利用UNACEV2.dll文件解压的解压工具(如WinRAR),恶意文件就会在指定条件下被执行。

漏洞原理解析

漏洞编号:WinRar漏洞(CVE-2018-20250)

前置信息

环境:Windows 7 32位

工具:Ollydbg、IDA、WinHex

文件信息:6c702c25ec425764a303418b2d3f99ae

漏洞定位

该漏洞运行时必须将用户控制调至最低,否则将产生权限拒绝,无法成功利用漏洞。

bdbd7c820a8bcc7e92a1c2b46205a262.png

由于该漏洞成功利用后将释放文件至指定目录文件夹,WinRAR将在指定文件夹写入文件,因此对Kernel32.dll的WriteFile函数下断点,随后解压文件,用户指定路径为“D:”。

0b950662a0df423ebf2c4696bc164115.png

从截图中可知,程序中断时将写入一个PE文件进入指定位置,调用的dll为UNACEV2.dll,由此推测漏洞利用点在该dll中。使用“Ctrl+F9”不断运行直至返回至WinRAR程序领空,可以发现WinRAR在内存地址00DB557E进入UNACEV2.dll,并调用ACEExtract函数。

d620f4d1135038aeed2fed0f18e273f1.png

确定存在漏洞的dll后,通过查找程序中的可参考字符串猜测文件释放位置为:

“C:ProgramDataMicrosoftWindowsStartMenuProgramsStartupCMSTray.exe”,进入到该位置后发现的确存在该文件,因此确定该文件即为释放文件。随后对调用该字符串的内存地址下断点。

ef674eeb233e0a9924265fe8ab02a32d.png

重新运行程序后,发现程序中断于内存地址为031ACB48的函数空间内,在该函数空间内发现用户指定的文件释放位置“D:”。单步运行后,发现程序并不会调用该位置,程序将跳过用户指定位置而使用先前的字符串位置,因此确定该函数即为存在漏洞的函数。

d8f70bfc304eda4e74007a73a8cdcb8a.png

漏洞分析

随后在IDA中打开UNACEV2.dll文件,并移动至指定内存空间0040CB48。由汇编代码可知,在该函数空间内,从入口点至漏洞利用点共有四个函数,位置分别为:00401E5A,00401E8E,00401AD9,0040D648。

c0b6b1fccd422a6af6b217b5a38db525.png

00401E5A函数功能(即为图中check_5C):检测指定字符串中是否含有””,若存在则移动原字符串首位置并返回新位置,若不存在则返回0;

00401E8E函数功能(即为图中return_position):移动原字符串首位置并返回新位置;

00401AD9函数功能(即为图中check_and_return_position):检测指定字符串中是否含有”..”,若存在则移动原字符串首位置并返回新位置,若不存在则返回0;

0040D648函数功能(即为图中check_and_return_eax):检测指定字符串中是否含有””与”:”,若第二位为”:”则返回相2,若第三位为””,则返回3,若不存在则返回0。

函数0040CB48为漏洞利用主函数,该函数流程为:

设原攻击者字符串为A

1、若A的第一位为””,则执行步骤13,若第一位不为””,则执行步骤2;

2、若A的第二位为”:”,则执行步骤8,若第二位不为”:”,则执行步骤3;

3、执行函数00401AD9,若A中存在”..”,则执行步骤5并返回新字符串,若不存在”..”,则执行步骤4;

4、执行函数0040D648,若返回值为正数,则设定新字符串为解压路径,若返回值为0,则设定用户指定路径为解压路径;

5、将新字符串与字符串A作比较,若相同则将字符串A的第四位设置为新字符串的起始字符并执行步骤6,若不同则执行步骤7;

6、执行函数00401E8E,并执行步骤3;

7、若新字符串前一位为””,则将新字符串的第四位设置为新字符串并执行步骤6,若前一位不为””,则将新字符串的第二位设置为新字符串的起始字符并执行步骤3;

8、若A的第三位为””,则执行步骤10,若第三位不为””,则执行步骤9;

9、取字符串A的第三位设置为新字符串的起始字符并执行步骤6;

10、取字符串A的第四位设置为新字符串的起始字符并执行步骤11;

11、执行函数00401E8E,若新字符串的第二位为”:”,则执行步骤12,若第二位不为”:”,则执行步骤3;

12、若新字符串的第三位为”“,则执行步骤3,若第三位不为””,则将新字符串的第三位设置为新字符串的起始位置并执行步骤6;

13、若A的第二位为””,则执行步骤14,若第二位不为””,则执行步骤2;

14、取字符串A的第三位设置为新字符串的起始位置并执行函数00401E5A,若返回值为正数,则执行步骤15,若返回值为0,则执行步骤2(但使用的字符串为新字符串非字符串A);

15、将新字符串的第二位设置为新字符串的起始位置并执行函数00401E5A,若返回值为正数,则执行步骤16,若返回值为0,则执行步骤2(但使用的字符串为新字符串非字符串A);

16、将新字符串的第二位设置为新字符串的起始位置并执行函数00401E8E,随后执行步骤2(但使用的字符串为新字符串非字符串A).

综述:该函数对攻击者提供的字符串路径进行字符过滤,过滤成功则使用用户提供的路径,过滤失败则使用攻击者提供的字符串路径中的子路径,该子路径为恶意文件释放的真正路径。

漏洞利用

由上一段分析可知,该漏洞利用需要构造特定的ACE格式文件,成功利用将释放文件至指定路径。下图为ACE格式文件样例。

1722c70ce768ad8a4f591ee6be3929cc.png

通过对ACE格式文件的分析,UNACEV2.dll解压文件时仅校验了CRC值,而未校验文件路径。CRC值与文件路径、文件名长度、头部大小有关,因此修改了文件路径后需要修改相应的文件名长度与头部大小,并计算出正确的CRC值。计算完成后,使用WinHex修改文件的十六进制数据。其中上图中位置1为CRC值,位置2为头部大小,位置3为文件路径长度,下划线部分为文件指定路径,位置1、2、3的值均为小端模式。

漏洞防护

1、在“控制面板”中调整用户控制,不使用“从不通知”级别;

2、删除UNACEV2.dll文件;

3、升级到最新版本的WinRAR;

4、对利用该漏洞的恶意样本的网络通信行为进行监控,从而及时发现威胁并进行恶意样本清除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值