论坛格式调整比较麻烦,其具体可参考CSDN文章,望各位海涵,用户名相同
一、 概述
众所周知WinRAR是一款功能强大的压缩包管理器,作为档案工具RAR在 Windows环境下,可用于备份数据、压缩文件、解压RAR/ZIP等格式的文件、创建RAR/ZIP等格式的压缩文件,得到了较为广泛的应用。2019年2月20日,Check Point团队爆出了一个关于WinRAR存在19年的毛病,不法分子可用利用该毛病取得受害者计算机的控制权限。该团队经过深入研究检测相继发现了WinRAR的四个安全毛病,分别为ACE文件验证逻辑绕过毛病(CVE-2018-20250)、ACE文件名逻辑验证绕过毛病(CVE-2018-20251)、ACE/RAR文件越界写入毛病(CVE-2018-20252)以及LHA/LZH文件越界写入毛病(CVE-2018-20253)。毛病攻击者可利用上述毛病,通过诱使用户使用WinRAR打开恶意构造的压缩包文件,将恶意代码写入系统启动目次或者写入恶意dll劫持其他软件进行实行,实现对用户主机的恣意代码实行攻击。国家信息安全毛病共享平台(CNVD)对上述毛病的综合评级为“高危”,并于2019年2月21日收录该系列毛病(CNVD-2019-04911、CNVD-2019-04912、CNVD-2019-04913和CNVD-2019-04910,分别对应CVE-2018-20250、CVE-2018-20251、CVE-2018-20252和CVE-2018-20253),同时向外界发出安全公告。
二、毛病先容
CVE-2018-20250毛病的发现在科技界引起了异常轩然大波,尽管这个毛病的利用条件很有限,实际危害并不是很高,然而令人恐惊的是这个毛病已经遗留了19年,而且影响到全球5多亿的WinRAR用户。究其毛病产生的根本缘故原由,发现问题的关键在于5.70 Beta 1之前版本的WinRAR使用了陈旧的动态链接库unacev2.dll。该动态链接库的编译时间为2005年,在处理惩罚ACE格式文件过程中发挥作用,然而却无任何的基础掩护机制(ASLR, DEP 等)。以是当使用WinRAR对恶意构造的ACE文件进行解压操作时,由于没有对文件名进行充分过滤,产生了“目次穿越”现象,其中隐藏的恶意文件可以实现被写入计算机的恣意目次下,乃至可以写入开机启动项中,导致恶意文件的实行。经研究发现这种毛病的影响非常广,其影响范围包罗:
- 发布时间早于5.70 Beta 1版本的WinRAR软件;使用unacev2.dll动态共享库的解压、文件管理类工具软件。
团结腾讯玄武实验室后续的检测结果,可以发现除WinRAR软件外,还包罗6.2.0.0以及之前版本的Bandizip压缩工具,5.9.8.10907以及之前版本的2345好压,早于4.0.0.1170版本的360压缩等共计38款压缩软件此毛病影响。但好在相干的平台,厂商,软件提供商都在第一时间站了出来,积极应对该系列毛病,目前网络上毛病利用原理已公开,厂商也已发布新版本修复此毛病。仔细品位,可发现CVE-2018-20250此种毛病思绪比较简单,在实际利用过程中简单易用,因此备受病毒黑色财产的青睐。但WinRAR unacev2.dll恣意代码实行毛病利用还存在一个明显的不足,即需要受害者重启系统后恶意代码才气得以实行。在腾讯安全御见威胁情报中心对该类型毛病攻击的后期监控中,发现攻击者对WinRAR毛病利用的手段进行了升级创新,一定程度上减少了对受害者主动重启系统的依赖,同时确保恶意木马能在第一时间启动,如比较有名的Lime-RAT远控木马,该远控木马的功能非常强大,可通过修改配置信息或者接收C2服务器(C&C的缩写,远程下令和控制服务器)指令,以实现文件加密勒索、挖矿和下载其他恶意组件等功能。别的木马还可以监视剪切板,当检测到受害者主机进行数字钱币交易时,直接替换钱包地址达到抢钱目标,对比特币矿工及数字加密币交易的人群危害极大。
三、 毛病分析
3.1 unacev2.dll恣意代码实行毛病缺陷概述
图1 常见攻击方式
该种方式是比较简单常见的攻击方式,攻击者利用此毛病构造恶意的压缩文件,当被攻击者在不知情的情况下对其解压开释时,解压软件需要对解压目标的相对路径进行分析。此时unacev2.dll中的CleanPath函数因存在过滤不严导致目次穿越毛病,隐藏其中的恶意木马将被写至开机启动项,终极用户重启电脑时将促成恶意木马的实行。因此为了该毛病的深层缘故原由,我们需要探究unacev2.dll的使用细节,通过对其进行代码逆向,发现两个关于ACE文件归档提取的关键函数:初始化函数ACEInitDll和提取函数ACEExtract。然而在IDA中难以查看这两个函数的参数界说,于是另辟蹊径在github中找到了一个同样使用这种布局的开源项目FarManager,该项目使用此dll别的该项目标创建者也是WinRAR的创建者,具有较高的可信度。下载完毕后通过使用sourceinsight程序编辑器打开Github中的开源FarManager工程,快速搜索关于ACEInitDll和ACEExtract的具体界说,其结果如下图,本文仅展示函数在项目中的大概位置,具体界说读者可自行实践获得:
图2 ACEInitDll函数界说
图3 ACEExtract函数界说
其中pACEInitDllStruc 指针布局体比较关键,需要重点注意一下:
图4 pACEInitDllStruc指针布局体界说
团结Check Point团队发布的毛病原理分析文章,下面团结IDA静态分析对unacev2.dll进行深入研究,重点关注以下四个关键函数:CleanPath、GetDevicePathLen函数、WinRAR Validators/Callbacks回调函数以及触发目次遍历毛病的sprintf函数。
3.2 CleanPath关键函数分析
下面是关于CleanPath函数的伪代码:
图5 CleanPath函数伪代码 [table][tr][td]
1.如果Path的第2、3个字符为“:”、“\”,那么将Path第4个字符之前的部门清除。
2.如果Path的第2个字符为“:”,第3个字符不为“\”,那么将Path第3个字符之前的部门清除。
3.在Path中探求“..\”出现的位置,PathTraversalPos将指向此位置。若找到,实行4;否则实行7。
4.如果PathTraversalPos指向的位置正是Path开始的位置(e.g...\some_folder\some_file.ext)或者PathTraversalPos指向位置的前一个字符是“\”,实行5;否则,实行6。
5.将Path第4个字符之前的部门清除,继续在Path中探求“..\”出现的位置,若找到,实行4;否则,实行7。
6.在Path+1处向后探求“..\”出现的位置,若找到则实行步骤4;否则实行7。
7.返回Path。
这段伪代码的大概流程可形貌为:由分析可知该函数的作用为过滤一定格式的路径序列,如盘符名:\是在步骤1被清除掉的,盘符名:是在步骤2被清除掉的;盘符名:\盘符名:是通过步骤1和步骤2两个步骤清除掉的;而\..\是在步骤5被清除掉的。
3.3 GetDevicePathLen关键函数分析
下面是关于GetDevicePathLen函数的伪代码:
图6 GetDevicePathLen函数伪代码
这段伪代码的大概流程可形貌为: [table][tr][td]
1.如果Path中第1个字符为“\”,实行2;否则,实行7。
2.如果Path中第2个字符为“\”,实行3;否则,实行6。
3.如果在Path第3个字符之后没有找到“\”,返回0;否则将SlashPos指向此位置。
4.如果在SlashPos+1之后没有找到“\”,返回0;否则将SlashPos指向此位置。
5.将SlashPos指向位置减去Path指向位置再加1赋值给Result,然后实行步骤9。
6.Result赋值为1,然后实行9。
7.如果Path第2个字符为“:”,Result赋值为2。
8.如果Path第3个字符为“\”,Result值加1。
9.返回Result。
由分析可知该函数的作用为检查文件的相对路径即Path,Result将作为结果表现相对路径的长度返回。可以将Result取值有两种情况:非0和0。
例子如下:l 待检查路径为C:\some_folder\some_file.ext则函数返回值3
l 待检查路径为\some_folder\some_file.ext则函数返回值1
l 待检查路径为some_folder\some_file.ext则函数返回值0
3.4 WinRAR Validators/Callbacks回调函数分析
下面是关于WinRAR Validators/Callbacks回调函数的伪代码:
图7 WinRAR Validators/Callbacks回调函数伪代码
其中return返回的为宏界说常量,具体含义可参考FarManager项目中的界说说明。
图8 宏界说常量界说
由分析可知该函数会对待提取文件的相对路径进行检查(其中伪代码里“SourceFileName”表现待提取文件的相对路径),确保路径满意以下条件:
1.第一个字符不等于“\”或“/”;
2.文件名不以字符串“..\”或“../”开头;
3.字符串中不存在“\..\”、“\../”、“/../”或“/..\”。
3.5 触发目次遍历毛病的sprintf函数
图9 触发目次遍历毛病的sprintf函数在IDA中的位置
在IDA中终极定位到产生毛病的真正首恶,即红圈中的sprintf函数。在loc_40CC32基本块的上方有两个分支,而GetDevicePathLen的函数的调用结果影响着代码流的走向。
如果调用GetDevicePathLen的结果等于0,则实行:
反之,则实行:
而末了一个sprintf便是触发目次遍历毛病的错误代码,这意味着相对路径实际上将被视为应写入/创建的文件/目次的完备路径。
3.6 毛病利用思绪
经过对解压过程中unacev2.dll中起作用的若干关键函数模块的分析,我们便可实验构造攻击向量,构造思绪如下图所示:
图10 攻击向量构造思绪
通过该思绪我们可以找到一个找到了一个向量,它答应我们将文件提取到系统自启动文件夹,而无需关心用户名。下面我们正向分析它:
先由CleanPath函数过滤转换为下列路径,再次过程中删除了“C:\C:”:
接着由GetDevicePathLen函数验证路径序列得到返回2,故此目标文件夹将被忽略,将触发目次遍历毛病的sprintf函数。
接着由WinRAR的回调函数对解压目标路径进行验证:
参考3.4中的验证条件可发现上面得到终极路径可以绕过路径遍历验证。但是只能回退一个文件夹。而我们需要在不知道用户名的情况下将文件解压缩到目标系统自启文件夹。
如果从WinRAR安装目次中启动解压软件,则“当前目次”将是:
然而通过双击存档文件或右键单击存档文件中的“extract”来实行WinRAR,则WinRAR的“当前目次”将成为存档地点文件夹的路径。
例如,如果存档位于用户的“下载”文件夹中,则WinRAR的“当前目次”将为:
如果存档位于Desktop文件夹中,则“当前目次”路径将为:
以是当在桌面或是在下载文件夹中进行解压操作时将得到终极路径为:
四、毛病实例分析与验证
对该毛病的利用攻击不能跨盘符,即受害者进行解压文件触发毛病时,必须在系统盘,且在不知道计算机主机名的情况下,只能在主浏览器的默认下载路径下(C:\Users\Administrator\Downloads)或者桌面进行解压,或者多猜几个启动项路径。别的产生毛病的DLL文件即UNACEV2.DLL,不能识别相对路径,以是毛病利用条件还包罗其文件名部门必须为绝对路径。以下是几种操作系统下的开机启动项路径,可以发现在个人PC上由于用户名的多样性故难以猜测到准确的路径,而服务器上用户名一般为Administrator,以是这个毛病在服务器上利用度比较高。
表1 不同操作系统下的开机启动项路径[table][tr][td=1,1,94]Win2003[/td][td=1,1,459]C:\Documents and Settings\Administrator\「开始」菜单\程序\启动 [/td][/tr][tr][td=1,1,94]Win2008[/td][td=1,1,459]C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win2012[/td][td=1,1,459]C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win7[/td][td=1,1,459]C:\Users\用户 \AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup[/td][/tr][tr][td=1,1,94]Win10[/td][td=1,1,459]C:\Users\用户\AppData\Roaming\Microsoft\Windows\Start- Menu\Programs\Startup
本次试验使用的是Win7操作系统。
4.1 UNACEV2.dll校验CRC引发毛病
毛病主要是由Winrar用来解压ACE文件时使用的动态链接库UNACEV2.dll引起的,UNACEV2.dll在处理惩罚filename时只校验了CRC。故我们可以通过使用010Editor修改filename将恶意文件解压到启动目次,但是在修改完成后,CRC校验会失败,以是我们还要再去修改CRC,具体过程请见下面的分析。起首列出本次实验的工具清单:[table][tr][td=2,1,553] 工具清单 [/td][/tr][tr][td=1,1,179] 虚拟机 [/td][td=1,1,374]VMware Workstation11.0.0[/td][/tr][tr][td=1,1,179] 系统镜像 [/td][td=1,1,374]Win7家庭版[/td][/tr][tr][td=1,1,179] WinRAR 5.60简体中文版 [/td][td=1,1,374]https://www.rarlab.com/rar/winrar-x64-560sc.exe[/td][/tr][tr][td=1,1,179] Python-3.7.2-amd64.exe [/td][td=1,1,374]https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64.exe[/td][/tr][tr][td=1,1,179] 010Editor [/td][td=1,1,374]https://download.sweetscape.com/010EditorWin64Installer901.exe[/td][/tr][tr][td=1,1,179] Wace和模板文件 [/td][td=1,1,374]https://github.com/360-A-Team/CVE-2018-20250[/td][/tr][tr][td=1,1,179] EXP [/td][td=1,1,374]https://github.com/WyAtu/CVE-2018-20250一切软件安装完毕后,下面正式进入实验部门:
创建一个简单的bat文件,终极的毛病利用便是将该文件写入系统启动项中:
使用WinACE对1.bat进行压缩,选择store full path模式,得到文件1.ace:
使用https://github.com/WyAtu/CVE-2018-20250中的acefile.py脚本检查文件1.ace的header信息:
赤色部门为需要修改的内容,同时使用010Editor打开1.ace,对比可知(该ace文件为小端模式):
第一个赤色框内为:hdr_crc的值:0xC98C;第二个赤色框内为:filename即文件的名字,包罗其路径。前面的0x001A为filename的长度,十进制为26。
赤色框内为:hdr_size,代表头部大小,值为0x0039表现其头部大小57。 复制启动项目次路径,并在ace文件中修改:
稍作修改:
修改filename的长度:
修改hdr_size:
使用acefile.py分析ace文件,可以看到报错,需要修改hdr_crc:
使用acefile.py脚本检查文件1.ace的header信息:
修改完毕后另存为1.rar(实际上不该也行,即下一步直接解压1.ace):
选择解压到当前文件夹或解压到文件夹1都可以,可以看到bat文件成功解压到开机启动项里。
重启电脑发现自动运行bat文件弹窗。
4.2 msf利用
msf是一个免费的、可下载的框架,它自己附带数百个已知软件毛病的专业级毛病攻击工具,通过它可以很轻易地获取、开发并对计算机软件毛病实施攻击。团结CVE-2018-20250毛病,本末节实验将实现后门程序的植入,从而复现一次比较有危害性的攻击,具体实验环境如下:[table][tr][td=2,1,553] 工具清单 [/td][/tr][tr][td=1,1,217] 虚拟机 [/td][td=1,1,336]VMware Workstation11.0.0[/td][/tr][tr][td=1,1,217] 系统镜像1 [/td][td=1,1,336]Win7家庭版[/td][/tr][tr][td=1,1,217] Win7 ip [/td][td=1,1,336]192.168.116.147[/td][/tr][tr][td=1,1,217] 系统镜像2 [/td][td=1,1,336]kali-linux-2018.4-amd64.iso[/td][/tr][tr][td=1,1,217] 内核版本2 [/td][td=1,1,336]4.18.0-kali2-amd64 #1 SMP Debian 4.18.10-2kali1 (2018-10-09) x86_64 GNU/Linux[/td][/tr][tr][td=1,1,217] Kali ip [/td][td=1,1,336]192.168.116.128
起首在kali环境下生成目标呆板的后门程序,需要知道目标呆板ip地址:
接着拿到shell.exe后门程序后构造压缩文件,可参考4.1节中恶意压缩文件的构造过程。对构造后的文件使用acefile.py脚本检查其header信息:
对改造后的shell.ace文件选择解压到当前文件夹或解压到文件夹shell都可以,可以看到bat文件成功解压到开机启动项里。
在kali中进入msfconsole,加载exploit/multi/handler模块:
设置本地主机ip地址及监听端口,然后实验攻击监听exploit :
重启win7,发现kali中已渗出成功,拿到目标呆板shell:
五、 心得体会
在分析毛病过程中,查阅了各种资料,自己毛病利用机制比较轻易理解,但是真正的利用原理是比较复杂的,需要阅读相干项目标代码以及需要在IDA中找到关键函数。团结文档和静态分析结果基本能把基本的逻辑搞明确,剩下的实践过程相对比较简单。经过岁月的洗礼,如今在网上搜索WinRAR毛病利用案例,可发现其利用手段在富有想象力与能动力的黑客手中已经更新出了许多版本。挑选两个比较典范的升级版攻击利用手段如下所示:
通过对该毛病的分析实践,笔者对解压软件中的一些模块具有了更深的了解,特别在对WinRAR创建者的FarManager项目源码阅读过程中劳绩颇丰。而对于毛病攻击利用的升级版本,由于时间有限没有来得及深入研究,但隐隐之中感觉到毛病的利用手段在一定程度上具有相通之处,后续仍需研讨学习之。
参考资料
[1]Extracting a 19 Year Old Code Execution from WinRARhttps://research.checkpoint.com/extracting-code-execution-from-winrar/
[2] WinRAR目次穿越毛病浅析及复现(CVE-2018-20250)https://mp.weixin.qq.com/s/KbDliC2e0_bkFFur4nx-LQ
[3] WinRAR毛病CVE-2018-20250攻击样本分析 http://www.52bug.cn/hkjs/5732.html
[4] CVE-2018-20250 winrarhttps://www.cnblogs.com/threesoil/p/10534280.html
[5] [CVE-2018-20250]WinRAR毛病浅谈https://www.landui.com/help/show-9239
[6] [毛病复现]WinRAR目次穿越毛病(CVE-2018-20250)复现https://www.cnblogs.com/fox-yu/p/10495236.html
[7] Metasploit使用后门程序渗出Windows7http://www.myhack58.com/Article/html/3/8/2015/65031.htm
[8] 成功获取WinRAR 19年汗青代码实行毛病https://www.360zhijia.com/anquan/444960.html
[9] FarManager项目https://github.com/FarGroup/FarManager
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |