旧笔记回顾,目前想给自己提的问题如下:
1)应用层软件漏洞如何挖掘到exploit样本?
2)应用层的exploit样本如何在端点进行检测告警或拦截?
3)如何发现针对地区或存在定向性攻击的恶意文件?
4)如何批量化或大规模快速检测相关的恶意文件?
5)有哪些可以取证的痕迹点?
利用漏洞:CVE-2017-12824
InPage是一个专门针对乌尔都语使用者(巴基斯坦国语)设计的文字处理软件,卡巴斯基曾在2016年11月首次曝光了利用该软件漏洞进行定向攻击的案例,而利用该文字处理软件漏洞的野外攻击最早可以追溯到2016年6月。
漏洞成因:越界读(Out-Of-Bound Read)
CVE-2017-12824漏洞的本质是Out-Of-Bound Read,InPage文字处理程序在处理文档中的InPage100流时未对需要处理的数据类型(Type)进行检查,而需要处理的数据类型(Type)是通过InPage文档中的某个字段指定的。这样攻击者可以通过设置一个超出Type范围的值来使得InPage程序发生越界读错误。
漏洞调试
第一步先安装Inpage软件,公网只找到2010版本。
最终找到该版本:Inpage 2010 Professional Edition
下载地址:http://softwareslabpk.blogspot.com/2014/08/inpage-2010-professional-edition-free.html
漏洞分析如下:
InPage zero-day exploit used to attack financial institutions in Asia | Securelist
https://securelist.com/inpage-zero-day-exploit-used-to-attack-financial-institutions-in-asia/76717/
可通过其他文章里的截图找到对应的漏洞触发点,比如通过截图里调用的API函数名称搜索。
具体步骤如下,调试客户端漏洞比较简单,首先运行Inpage软件,接着使用ollydbg的附加功能去附加该进程,接着设置相应的断点,然后F9运行起来,此时通过软件菜单打开对应的漏洞利用文档会暂停在之前设置的断点下,然后可以进行调试,如下截图为打开Inpage100文件流。
移动读取的位置,之后会逐步读取相应的文件流数据。
seek方法的作用:从起始0开始到0xD0位置。参考链接为https://github.com/mirror/winscp/blob/master/libs/mfc/source/olestrm.cpp。
漏洞触发的位置如下(通过设置条件断点,当edi的值为0x72时满足断点),如下截图。
此时的关键数据结构如下:
72 7E 90 90 90 90 83 C7 28 FF D7 27 0A 05 04 00 0C 05 00 00 0D 05 00 8F E5 AD BA 7E CA 01 00 7E 7E A7 0F 00 01 7E C4 F9 17 00 02 7E 1C 1F 01 00 03 7E 40 9E 00 00 00 00 00 FE 58 74 A8 43 22 00 00 C4 00 02 03 20 32 02 03 00 00 00
接着通过pop retn进行跳转,执行如下截图。
通过遍历搜索是否匹配LuNdLuNd寻址到shellcode起始位置,如下截图。
执行shellcode,会经过一大段很长的nop指令,之后获取相应的API函数。
创建互斥量”QPONMLKJIH”,确保单一实例运行,该shellcode内存释放加载的dll具有的pdb路径为:c:usersmzdocumentsvisual studio 2013ProjectsShellcodeReleaseShellcode.pdb。
之后通过之前的shellcode分配内存空间,模拟PE内存加载,获取所需的API函数,跳转到入口点执行。
首先会创建一个线程,如下图。
在该线程内,首先会加载两个资源内容,名称为0x6A,0x6B,类型为BIN,BIN2。
获取%TEMP%环境变量的实际地址后,拼接路径创建”C:UsersonionAppDataLocalTempwinopen.exe”文件,写入BIN的资源内容,最后执行该路径下的winopen.exe。
接着还会打开正常的INP文件,呈现给用户,让用户以为打开了正常文件。
SAMPLE.INP的内容(当时分析时暂时没有想到如何去将文档内容翻译回中文内容),文档内容为解决克什米尔地区的当前问题。
接下来对之前漏洞利用后释放的文件winopen.exe进行分析,首先采用CheckRemoteDebuggerPresent进行反调试,采用循环时造成溢出来改变判断条件实现延时功能对抗自动化行为检测系统。
寻找资源名”11HZBC”,利用RC4算法解密出PE文件,RC4使用的密钥为:VACqItywGR1v3qGxVZQPYXxMZV0o2fzp。
在注册表HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRunOnce,设置键值”Putty”,路径为:”C:UsersonionAppDataLocalTempwinopen.exe”。
创建挂起的进程:”C:UsersonionAppDataLocalTempwinopen.exe”
采用进程镂空技术,之后重新写入新的PE文件内容。
之后就是常规的远控木马内存驻留了,因为是老样本且该漏洞利用文件在国内基本不可能出现,因此就不详细叙述后续的交互了。
作为恶意代码分析人员,对样本进行分析后可以输出相关的检测规则进行后续的检测或挖掘相似或同源的恶意文件,因此yara规则编写如下。
汇编代码(溢出导致延时的十六进制数据,可作为yara规则的线索)
33 D2 42 6A 0A 58 6A 09 59 48 83 E9 01 75 FA 85 C0 74 04 03 D0 75 EC
SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
rule APT_Confucius_droppper_2017_9_13 { meta: author = “jishuzhain” description = “Detects Confucius apt dropper exe” reference = “https://unit42.paloaltonetworks.com/unit42-recent-inpage-exploits-lead-multiple-malware-families/” hash = “f5cd8fd133642b75cd8a36def167dde8” date = “2021-3-3” strings: $delay_code = {33 D2 42 6A 0A 58 6A 09 59 48 83 E9 01 75 FA 85 C0 74 04 03 D0 75 EC} /* .text:00401313 33 D2 xor edx, edx .text:00401315 42 inc edx .text:00401316 .text:00401316 loc_401316: ; CODE XREF: start+62↓j .text:00401316 6A 0A push 0Ah .text:00401318 58 pop eax .text:00401319 6A 09 push 9 .text:0040131B 59 pop ecx .text:0040131C .text:0040131C loc_40131C: ; CODE XREF: start+5A↓j .text:0040131C 48 dec eax .text:0040131D 83 E9 01 sub ecx, 1 .text:00401320 75 FA jnz short loc_40131C .text:00401322 85 C0 test eax, eax .text:00401324 74 04 jz short loc_40132A .text:00401326 03 D0 add edx, eax .text:00401328 75 EC jnz short loc_401316 */ $reg = “SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce” ascii wide condition: uint16(0) == 0x5a4d and filesize < 1000KB and $delay_code and $reg } |
特殊的哈希计算方式也可以作为检测特征进行yara规则的输出,如下。
rule InPageShellcodeHashing { strings: $hashingFunction = {55 8B EC 51 53 52 33 C9 33 DB 33 D2 8B 45 08 8A 10 80 CA 60 03 DA D1 E3 03 45 10 8A 08 84 C9 E0 EE 33 C0 8B 4D 0C 3B D9 74 01 40 5A 5B 59 8B E5 5D C2 0C 00} condition: $hashingFunction } |
下面继续开始分析PE文件(0131E207B2DF97353348060C0477F3A5),执行流程与上述文件差不多,不过这里增加了比较当前用户名称的功能。
遍历进程获取explorer进程的PID
读取资源名“BD02MLD7″的内容
之后使用RC4算法解密资源内容,密钥为:kRPAnN2DN6vfrxsJLntnh7Mma8E68s。
在注册表HKEY_CURRENT_USERSOFTWAREMicrosoftWindowsCurrentVersionRunOnce设置键值名为Putty,路径为之前的路径,之后同样是对当前进程进行进程替换。
下面接着分析PE文件(A028510821531E8DDE80FC3D3B08118B),该文件是最后阶段的恶意文件,属于远控类恶意软件,归属于CONFUCIUS_B恶意软件家族,回连的C&C地址为151.80.14.194。
参考文章
https://unit42.paloaltonetworks.com/unit42-recent-inpage-exploits-lead-multiple-malware-families/
https://unit42.paloaltonetworks.com/unit42-confucius-says-malware-families-get-further-by-abusing-legitimate-websites/
原文始发于微信公众号(OnionSec):Confucius(摩罗桫)的老样本分析回顾Cyber Advisory No 91.inp