两年前分析的一个流行木马,如今看着当时留下的笔记里那略带生疏的语言以及颇多的截图有一点点感慨,嘿嘿当时的自己有点傻傻的,不过回过头看当时也是很自然的现象,事物的发展总归是由浅入深,由懵懂到清晰,只要不是停滞不前便也挺好啦,每个人的节奏不一样有快有慢。因为想要挖掘针对性攻击活动痕迹,所以当时看到公开的邮件内容后以为是针对性攻击活动还挺兴奋的,不过回想起来是因为见到这类场景少所以没能判断得出结论,目前看还是黑产活动类型,前期大规律投递钓鱼邮件然后最终实现窃密,并非是针对性攻击活动痕迹,而且AgentTesla木马也属于流行木马因而被发现的概率很高,所以被用于针对性活动的可能性非常低。
附件是木马文件,如果操作系统没有开启后缀名隐藏取消的选项,由于可执行文件的图标进行了伪装,看起来就像是个pdf文件。恶意文件没有混淆,属于.NET编写的程序。
前期初步调试会跑飞,通过任务管理器显示可以知道,会创建新进程(原始进程为172,后续新建的进程为2060)。
如何调试成功呢?
先假设这里存在新进程,那么很有可能会在内存里解密释放出完整PE文件加载执行,所以调试的目标就是找到这个PE文件将其dump出来。第一次尝试,当在任务管理器观察发现存在新进程出现且属于同名进程时,立刻利用dnSpy的附加进程调试功能对新进程进行附加调试。
下图为附加到进程,当出现新的进程,则直接附加调试。
附加进程成功后,立刻对其进行暂停。此时如果能进入到新进程空间里,则表示附加进程调试成功。
此时就是选中全部中断后,暂停在了新进程的代码空间区域,由于附加进程时新进程已经处于执行状态,因此中断的位置并非为程序的入口点地址。
通过在左侧的模块列表中找到附加进程的模块然后右键选择进入入口点查看,右侧表明找到了程序的入口点位置。
但这里能进行调试的是已经经过混淆的代码,不过此时已经对进程进行了暂停调试,后续可采用开源工具pe-sieve提取内存中加载的PE文件(子进程),命令为:pe-sieve.exe /pid 812。
在本地可以找到生成的相关文件,其中会包括内存中存在的PE文件或者可疑的shellcode代码,这里的场景针对的是并未实现自解密(SMC)功能的木马,如果存在SMC功能那么最终内存提取的PE文件将会是存在修改后的并非是最终加载的PE文件,总的来说这也是一种思路。
当然使用经典工具LordPE也可以进行dump该子进程,获取最终的.NET木马程序。
提取进程后利用de4dot去混淆,不过由于木马使用了控制流混淆,代码可读性依然很差,可以使用ConfuserEx-Unpacker-v2.0进行脱壳。
第二种方法尝试使用在线工具,针对并非是强壳的场景可以试用,本文提及的AgentTesla木马可以成功获取最终的木马文件,工具的原理应该也是类似脱壳内存dump的思路,在线工具地址:https://www.unpac.me/,可以成功获取最终释放并内存加载的子进程文件。
第三种方法尝试,首先断点需要设置好,把相关的代码都自行先浏览一遍,之后一步步调试,直到发现存在CreateInstance方法(这是创建实例的方法与内存加载执行PE文件有关系),然后单步步入调试跟进去。但是如果之后不设置断点,都是直接跑飞无法调试。调试后会发现内存里新加载了执行ButterFly.dll程序集,作用是创建任务计划程序,以及创建新进程。
窃密并提取配置信息,后续会使用。
创建计划任务
删除tmp文件,如下。
最终单步调试找到了已经解密出的完整PE文件,将其保存到本地。
PE文件的MD5值:A1C2798FA343FB1DABA5EE642AA1BD39
经过对比,发现两者只有4个字节不同。
最终提取出的完整PE文件也是基于.NET平台的程序,经过分析属于AgentTesla窃密木马,可以通过木马里携带的邮箱账号与密码获取到接收窃密信息的邮箱内容。