-
游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
- 0
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
问题
HACK1949
手把手教你分析APT:蔓灵花下载器样本分析
初始载荷信息
进犯的初始载荷是一个文件名为双后缀名的文件“开证装期邮件.pdf.exe”,这是一种常见的文件假装办法,运用Windows的扩展名显现设置(“躲藏已知文件类型的扩展名”)假装真实的.exe后缀,再选择高档自解压选项中自界说自解压文件图标,选择让exe文件看起来像PDF文档,诱骗用户翻开。
不过因为自解压格局的图标来历于文件,而不是体系自带的图标:
时常呈现画风不同的C位出道场面(一看便是自带剧本的):
VT查找该文件MD5能够看到有52/69的高检测率,匹配的YARA规矩名能够解释为躲藏为PDF的SFX自解压文件:
SFX自解压文件,是一种压缩软件生成的exe文件,具有履行后能够解压开释文件并履行的特性,一般被病毒文件用来绑缚掩饰文档或其他白文件进行假装。可将文件后缀改为rar,运用压缩软件翻开,检查其间的文件和相关代码和解压,或许在文件特点的注释中也能够看到。如本文中的样本运转后会在“C:\intel\logs”途径下开释“dlhost.exe”并履行:
直接双击运转exe使初始载荷在指定途径下开释文件也行,多一个步骤要找一下文件。一般来说解压比较便利,可是有些样本会检测是否在设置的目录下运转,不是则退出,剖析时需注意这一点(本文样本无此检测)。
有效载荷dlhost.exe
定论先行,带入定论看内容比较容易看进去。
“dlhost.exe”经过剖析后发现为APT安排蔓灵花常用的下载器,用来搜集受害者计算机信息和创立套接字通讯,从长途服务器下载插件完结其他功用的操作。
在剖析之前,建议先做一些准备工作,磨刀不误砍柴工~
去除随机基址
因为PE的特性,程序有基址随机化的问题,那么在剖析前,需求检查并修正为不随机的状况,便于下断点剖析后调试的配置文件(.udd)在重新运转后还能收效。
办法有多种,比较简单的是运用010Editor检查PE文件,将在PE结构中有字段“(NtHeader→OptionalHeader→DllCharacteristics→)IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE”,假如数值为1,即敞开了“基址重定位”(动态随机基址),现将其修正为0后保存文件:
也能够自己写脚本或许可履行程序将其修正。
检查断点
假如没有特地躲藏或许处理要运用的函数的状况(可“一般”是有的),检查IDA的导入表窗口中显现的函数,能够估测出一些功用,发现有:
1.套接字通讯的函数,那么存在套接字通讯(好绕):
2.文件操作函数,包含创立/翻开、读取和写入等。能够估测有创立文件、读取文件、移动文件等操作:
3.获取信息操作:
那么此刻能够经过导入表有个开始的判别,这是一个有获取计算机和用户信息,而且有文件操作的联网歹意软件——基本上现已能够估测出这是下载器或文件盗取器了。
反调试
一般来说歹意软件都会有反调试功用,反调试的方向也分多类,如:勘探Windows调试器、识别调试器行为、搅扰调试器的功用等。在《歹意代码剖析实战》第16章反调试技能、《逆向工程核心原理》第51章静态反调试技能&第52章动态反调试技能都有具体介绍,一般工作中遇到“Sleep”和“IsDebuggerPresent”比较多。
本样本虽无搅扰调试的“Sleep”,但有检测调试环境的“IsDebuggerPresent”,问题不大,“15PB OD”的插件大礼包中“Hide Debugger”已将该函数的回来值HOOK,即反反调试(狗头):
对API下断并检查
将样本拖入OD后,对敏感API函数下断,如:
接着能够“Alt+B”或菜单栏下的“B”(Break,断点之意),检查已下的断点,想取消断点时从这儿也能够快速的找到:
检查后“Alt+C”或菜单栏下的“C”,可回来反汇编窗口。
检查函数调用
回来后能够运用右键“查找”功用中的“所有模块间的调用”,检查有无反常状况(那当然是有的):
大事不妙!反常便是许多调用动态获取函数地址的“GetModuleHandleW”+“GetProcAddress”,这是一种常见的规避检测的办法,而且也是一种反静态剖析手段:
在IDA处找到对应的函数或代码后,运用IDA的脚本功用(Shift+F2):
运用IDA的重命名函数“MakeNameEX”编写的命令“MakeNameEx(long ea, string name, long flags);”。能够用Notepad++/Excel等修正东西或Python/BAT脚本,将命令批量化处理后如下,复制粘贴后RUN:
将地址进行重命名,便于静态剖析:
呈现单个因为已有该称号所以冲突不能重命名的,独自重命名(N键)一下即可:
调试运转
IDA导出表能够检查到主函数“Start”地址,下断后F9可直接运转到断点处,进行调试剖析。
解密操作
在IDA界面还能够发现比较重要的功用代码在函数401C80处,其间有许多的if+Do While循环解密(解密办法-= 0xD),问题不大,在解密函数完结后的那行代码下断:
此处建议看看解密出的内存都是什么数据,假如发现特殊的字符串或数据需求特地盯梢一下。比如此样本中解密的部分数据就很显着包含注册表途径、外连的URL字符串、和一串疑似指令的字符串“Yes file”。这其实便是解密出了配置文件:
环境检测
如上上图所示,解密后就调用“CreateSemaphoreA”创立信号量“7t56yr54r”,接着调用“GetLastError”检测信号量是否创立成功,假如错误码为界说“ERROR_ALREADY_EXISTS”的183(0xB7),即代表内存中已存在运转中的该进程,那么其后续的函数40C234必然是退出进程函数(或许有或许进入打乱剖析或许假装功用的代码):
一般歹意的可履行文件会经过CreateMutex创立互斥体或CreateSemaphore创立信号量(蔓灵花该下载器都是用信号量)+“GetLastError”获取错误码的办法让歹意进程在内存中坚持仅有运转的状态,防止相互搅扰。那么由此能够逆推,其实首要的功用代码,一般是在判别完互斥体或信号量后的部分(或许其他检测行为后)。时间比较紧迫的状况,能够考虑定位到检测+“GetLastError”后,“if”判别不成立的逻辑条件进行剖析。
因为自己调试剖析时,常运用火绒剑等监测东西监测后台运转的该进程,故“GetLastError”的回来值为0xB7,此步能够经过修正寄存器的ZF标志位越过此步跳转:
网络行为
初始化操作和解密操作等非歹意功用代码比较多,先用IDA找比较重要的函数剖析,再用OD按F4到CALL行检查其传入的参数,如外连“http://162.0.229.203/RguhsT/RguhsT/”:
因为剖析时大部分状况是不建议联网的,且有或许外连的域名或IP已失效,在套接字通讯后的if判别处修正跳转。不跳就完毕嘞(“Tab”键检查流程图或许在“Graph overview”中能够看出,假如不跳就越过大段代码完毕了):
将光标定位到“if”判别connect回来的结果处,按“Tab”键检查IDA的反汇编窗口,能够看到“if”的要害地址是“0x403678”,下断运转到此处后修正ZF标志位,让其不跳转即可:
数据及其来历
套接字连接成功后的第一个函数402F40里调用了体系API“GetComputerNameA”,检查其保存获取到数据ComputerName在何处被引证,发现函数402F40末尾有许多调用同一函数40C318和同一内存地址0x435598。在“GetComputerNameA”和函数40C318间,这部分代码中有“GetUserNameA”、“RegQueryValueExA”、和“GetSystemInfo”等获取信息的函数后,估测函数402F40为计算机信息的字符串拼接:
有了这个估测后,在最终一次调用40C318处下断,数据窗口监视对应的首参内存地址“0x435598”:
确实拼接出带有计算机信息的字符串“?a=HostName&b=COMPUTERNAME&c=Windows%207%20Professional&d=AdministratorAdministratorf9117a5d-b155-4a3e-b6c9-5ae181247d3b165536040965860”,能够分解为以下的格局:
其间d值比较古怪,运用穿插引证检查该写入值的调用,能够发现其值为UserName和调用“RegQueryValueExA”获取的GUID:
以懒人思想来说,定位这类数据来历的步骤是能够省略的,仅需将计算机信息(如计算机名,用户名,MAC地址、IP地址、GUID、乃至是偏门如C盘卷序列号的数据)修正或记载其数据即可。上面图中显现的调试环境的计算机便是如此,一般剖析了这么多样本,看到自己的GUID数据也能认出来,仅仅为了演示一下怎么穿插引证定位。或记住GUID格局为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”(8-4-4-4-12)。
所以d值的数据为[UserName][UserName][GUID][dwActiveProcessorMask][dwAllocationGranularity][dwOemId][dwPageSize][dwProcessorType][wProcessorArchitecture],现在又能够把[dwActiveProcessorMask][dwAllocationGranularity][dwOemId][dwPageSize][dwProcessorType][wProcessorArchitecture]数据记到小本本里了~
数据运用
将IDA中该储存计算机数据的内存地址重命名后,检查该内存地址的穿插引证能够发现被多个函数调用,而最终一个调用的函数401080,该函数的首参(一般是比较重要的参数)后续成为了“Send”函数参数中要发送的数据缓冲区,此处能够估测401080函数为拼接待发送数据:
跳转到调用401080处,能够显着看到是构建GET办法的HTTP报文数据。其实不用跳转,经过传参的数量/格局和前后调用的函数其实也能够估测出这段代码是构建HTTP报文:
Send发送上线包
检查“Send”函数的要发送的数据缓冲区(第二个参数地址),能够看到拼接好要发送的数据:
木马程序发送的第一个包还带有计算机信息的,一般能够叫做上线包:
此处能够发现有比较显着的流量特征,家里有沙箱/流量检测设备的同学能够设置为流量检测规矩:
这个规矩的误报率估量不低,给c值加上“Windows”能够降低一些误报率
假如家里有条件的同学,能够以安全研究/APT追踪发现的角度设置该流量规矩,然后再过一遍沙箱规矩或YARA规矩;假如是部署到客户现场的流量检测设备,则不建议部署。
沙箱假如像我的调试环境一样用户名电脑名主机名是固定字符串的话,再写死对其他值的判别,基本就没有误报了。除非这个上线包来自开源项目,被许多歹意软件运用,那就需求添加其他判别条件,此步在下文的“经过VT扩线”中有胪陈。
Recv承受回来数据
一般“Send”发送上线包后便是“Recv”从长途服务器承受命令或文件,检查“Recv”从长途服务器获取的数据有什么穿插引证,发现函数408550显着有C2指令判别:
有部分内存数据为运转后才被解密的字符串,能够在上述的字符串解密操作后,在IDA里将对应的内存地址重命名,或许在动态运转时现已是解密后的数据。
为了进入预界说C2指令的逻辑,能够在“Recv”履行后将函数408550的第二个参数手动修正为“Yes file”,或许修正字符串对比判别后的跳转也行,具体看后续履行的代码,本样本直接修正跳转更便利:
一般接收C2指令后的判别处建议做个快照,看看跳不跳转分别履行了哪些功用。如当有多个C2指令进入不同的逻辑分支履行不同的代码时,剖析完其间一个跳转后能够恢复快照,经过修正跳转或下一跳地址(EIP)无缝衔接剖析下一个分支逻辑。该样本假如不满足“Yes file”指令后的代码逻辑便是退出,此处不做展现。
进入“Yes file”的代码逻辑后,能够显着看到有许多对接收数据的操作,如提取数据的代码:if判别长度+DoWhile循环中嵌套一个if判别数据,最终memmove保存:
因为数据不便利揭露及教学含义,此处按照无法获取数据的状况进行接下来的剖析。
对承受的数据结合上下文代码进行估测:
1.一般来说,对数据进行各种提取/解密/判别后的最终一个内存块地址0x4351F7能够优先剖析。发现最终被操作的内存块在后续代码中被函数40EB61屡次调用;
2.函数40EB61最终一次调用的首参,同时也是字符串拼接函数“strcat”的首参,而拼接的另一个字符串为解密后的字符串“.exe”;
3.那么能够估测该文件为一个exe文件,检查其穿插引证,发现是履行程序的函数“ShellExecuteA”的参数,而且履行动作的参数为“open”——也便是运转了一个EXE文件:
而在调试器运转到“ShellExecuteA”之前,中间大部分的函数为对文件的一些操作,或许会触发一系列文件操作函数,这一步调试剖析的含义不是很大。从长途服务器获取数据到本地履行的这个过程,或许有文件解密操作,经过逆出解密算法,能够复原出PE文件的加密数据(或许从流量里Dump),写出下载加密PE文件的流量规矩。
至此,该样本的功用现已很明晰了,下载器运转后会搜集受害机器的信息拼接为字符串,构建上线包发送给长途服务器,从长途服务器获取exe文件的数据并运转。
这种有外连下载exe运转操作的歹意文件一般归类为下载器(Downloader/Loader),APT安排蔓灵花常运用下载器在受害机器上装置其他的歹意功用插件,如键盘记载器、文件记载器或许远控木马。一般这些文件存放在下载器发送上线包的长途服务器下,此刻经过VT查找IP或许域名,检查其相关文件,或许会有收成。
经过VT扩线
查找长途服务器IP“162.0.229.203”,在“Relations”,能够看到多个域名,部分字符串“pop3”、“webmail”、“mail”和邮件服务相关,契合垂钓邮件进犯的信息:
“Communicating Files”下也有多个相关文件,经过时间能够发现来自多个进犯活动:
点开相关文件中其他进犯活动的样本的“Behavior”,能够发现有两个比较固定的信息。
1.GET请求的URL:
2.开释文件到“C:\intel\logs\dlhost.exe”:
经过上面两个信息,写沙箱规矩能够比较准确地抓到初始进犯载荷:
在IP的“Details”页面能够看到其“Google Results”中,有相关到蔓灵花前史进犯活动的陈述,以及在线沙箱跑出的带有该IP的陈述:
从以往进犯活动的在线沙箱陈述中能够看到其他插件的信息,如在%TEMP%途径下开释文件“rgdl.exe”,该文件有PDB信息“D:\C++\Reg_Entry\reg_en\Release\reg_en.pdb”,在蔓灵花早期的进犯中曾名为“regdl”:
“rgdl.exe”是一个注册表操作器,将“audiodq.exe”途径写入注册表的Run项,用于建立歹意可履行程序(“audiodq.exe”)的开机自启动:
上述两个exe都是能够经过在线网站扩线到的蔓灵花常用的插件。再查找这两个字符串进行扩线,能够找到更多的前史进犯载荷、开源情报、乃至更完好的进犯活动陈述。从开源情报中发现该下载器被命名为“ArtraDownloader”,源自2019年Palo Alto Networks揭露发布的陈述:
运用搜集到的信息,组合查找到以往前史进犯活动,发现多个本次活动未呈现的插件,如键盘记载器“Igfxsrvk.exe”,信息搜集器“Lsap.exe”,远控木马“MSAServices”和“MSAServicet”等。尽管与本次进犯活动的样本无强相关的联系,一般来说都是这几个搭配着运用,能够作为日常堆集进行剖析记载。
剖析APT安排常用的TTPs(进犯方法),将完好的进犯链分解为多个阶段,将屡次进犯活动的样本称号、MD5、功用都记载保存之后,以文件名、PDB信息、C2指令,沙箱行为等信息进行组合,写出多角度多层级的检测规矩。在理论理想(重音)的信息复利下,能够更好地发现、预警APT进犯活动,盯梢APT安排的方法演进。
结语
蔓灵花的常用下载器ArtraDownloader剖析到这儿就完毕啦~
剖析透一个经典的样本后,就相当于把握了一个类型的病毒,歹意功用和完成的代码都是迥然不同的。经过许多的剖析和堆集经历(《机 器 学 习》),理解原理后就能够更快的找到断点和不同处。再将其特征应用到检测环境中,发现或追踪APT安排的进犯活动,乃至在许多的前史进犯方法演化数据下进行未来进犯的猜测(如StrongPity(下期再会)),把握先机拉取更多的歹意载荷,为下一次极速响应争取时间。
长辈们精品帖子许多,我写的比较偏零基础教学方面,希望有错之处大家能帮忙指正和轻拍。
链接帖子
意见的链接
分享到其他网站
这个问题有0个答案
推荐的帖子