使用最新的Foudre后门进行攻击活动的分析

0x00.前言

美人鱼(又称infy,Prince of Persia,Foudre)APT组织其主要针对政府机构进行攻击活动,由unit42以及360威胁情报中心首先于2016年5月进行披露,其最早的攻击活动可以追溯到2010年,并且期间一直没有长时间的间断.该组织背后的来源为中东地区.其使用的后门由于其C2的请求中带有infy的路径,故此被名为infy后门,在2017年,unit42发布报告披露了其使用了更新的后门,名为Foudre。不过其单独披露了版本1和版本2的后门。在2018年,Intezerlab发布报告披露了关于Foudre后门的第八版本.在本次的攻击活动中,我们发现了其使用的第21版本第22版本

本次发现的攻击活动中,Gcow安全团队追影小组以及微步情报局共同发现并且分析了该活动,其使用了带有恶意宏的文档并且使用了新版本的Foudre后门,其更新了后门的一些操作.同时保留了相关的域生成算法以及部分C2的请求参数具有一定的重合度.并且介于其一直通过在文档中嵌入ole对象通过社工的方式诱导受害者运行使用带有恶意宏提取嵌入的ole对象并且执行的方式释放并运行其打包WinSFX文档以执行相应的Foudre后门,故此撰写本报告以便于看官对该组织更加的了解

根据样本的针对性我们判断其很可能属于中东的威胁演员,并且很大概率属于伊朗

0x01.样本分析

样本为doc文档,诱饵文档中的内容由波斯语的图片组成,带有宏代码,运行后进程链无其他新进程产生

文档内容截图
文字内容截图
文字内容翻译

文档中插入了几张InlineShape的图片

嵌入的InlineShape的图片

宏代码运行时,遍历插入的几张图片,遍历到Type属性为“wdInlineShapeEmbeddedOLEObject”的图片

宏代码提取相应属性图片

拼接出路径,根据版本不同释放到"C:\\Users\\sam\\AppData\\Local\\Temp\\upxuppos\\fwupdate.tmp"或"C:\\Users\\sam\\AppData\\Local\\Temp\\fwupdate.tmp",并将.tmp后缀修改为.temp

根据不同版本释放恶意ole对象并且修改其后缀

fwupdate.tmp

fwupdate.tmp为一个自解压程序,压缩包大小仅为900K,解压后的文件200MB+,文件内容中含有大量重复内容

压缩包调用rundll32加载dll

自解压命令

conf4389.dll

从1-110数字中取随机数,取出后根据随机数随机取出一个DLL名称

取随机数并且获取dll名称

DLL名称由样本写在内存中

dll文件名称

列表共计110行,全部取出后整理得下表,全都为系统白dll名称

本次生成的是AuthFWSnapin.dll,在运行的时候其会从中随机抽选

将一同释放出的d488移动到 C:\\ProgramData 目录下命名为" AuthFWSnapin.dll "并设置为"NORMAL"属性

移动d488

创建计划任务,在每次登陆时运行

初始化计划任务xml
使用schtask加载xml注册服务

AuthFWSnapin.dll

通过利用 Rundll32.exe 加载 Shell32.dll ,在DLL中main函数内再利用 Rundll32.exe 加载运行“f8757”导出函数

使用rundll32.exe加载导出函数f8757

检测窗口"NRV3B19"

检测窗口NRV3B19

样本中还会将一串UNICODE字符串拷贝到变量中,但在执行过程中不知道有何用处

拷贝一串字符串到变量
这段unicode字符的翻译

从注册表" HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"下APPDATA查询到 %APPDATA% 路径

通过注册表获取AppData的路径-1
通过注册表获取AppData路径-2

检查%APPDATA%是否存在,不存在则创建,然后在%APPDATA%下拼接出样本要释放的文件路径

检查AppData是否存在以及拼接路径

获取API地址

获取API地址

遍历进程,查询进程“ dfserv.exe

查询进程dfserv.exe

注册了一个窗口类,类名为“NRV3B91”,并创建一个窗口"Form100022",使用名为"Form100022"的窗口进行键盘记录

注册窗口类NRV3B91
创建窗口并进行键盘记录

获取到HTTPUser-AgentGoogle域名

获取Google域名的User-Agent

获取到本机的计算机名、用户名、IP地址信息

收集本机计算机名,用户名,IP地址信息

创建两个定时器,一个每隔10S读取一次剪贴板内容,一个每隔300s链接C2发送窃取的信息

设置定时器用于读取剪切板内容以及向C2发送信息

%APPDATA%目录下创建config.xml用作“Project INI”,存放一串数字ID

写入数字ID于config.xml下

Google建立链接,查询状态码是否为200

对Google请求判断其状态码

链接成功后,在%temp%目录下创建一个“tempupd6.exe”,向其中写入的内容为HTTP请求返回的内容,写入之后很快又将文件删除了

向临时目录下写tempupd6.exe并删除

域名使用生成算法生成

使用lockbox3 Delphi库来验证C2,从C2下载签名文件:

其中d 代表 {year} {自年初以来的天数} t 代表 当前时间

下载的签名文件%appdata%\\sig.tmp使用公钥解密后与明文%appdata%\\dom.tmp比较是否相对应

使用公钥解密下载的签名文件

当生成的域名链接不成功时,尝试生成其他域名进行重试

使用多种后缀的域名进行请求

验证C2后,与C2通信发送请求检查更新

与C2通信检查更新

将更新下载回的木马保存在 %temp%\\tempupd6.exe

将更新下载的木马存在临时目录下的tempupd6.exe中

更新木马下载成功后会再次下载签名文件进行验证,保存在%temp%\\gtsdci32.tmp

向C2请求验证其下载的更新文件

验证成功后,使用WinExec函数执行新下载回来的木马文件

验证成功后使用winexec执行木马文件

还会向C2传回加密后的键盘记录情况

后续的载荷并没有下载下来故此不能继续分析

上文中我们根据其C2通信的特征将其命名为V22

此外我们还发现了另外一个与之有相似宏代码的恶意文档,根据与C2通信的特征将版本命名为V21

V21样本中诱饵使用的文档截图:

FoudreV21版本后门文档截图

诱饵文档为带有宏代码的恶意文档,文档中的内容为波斯语

诱饵文档内容翻译

与前面的样本一样,插入的图片同样是InlineShape属性,将其释放到%temp%目录下并调用Shell运行,释放的是一个自解压文件

释放的自解压文档EZUpdate.tmp

EZUpdate.tmp

EZUpdate.tmp是一个自解压文件,其中包含一个.bmp文件,一个.dll文件,一个d3d9

执行的命令行为:Setup=rundll32.exe conf3234.dll f8753 d948

自解压命令

通过文档内容来看,该样本可能于2020/07/29号后进行编译的

查找窗口"NRV3B19","NRV3B19"是样本最后一阶段注册的窗口类

查找窗口NRV3B19

修改注册表,在HKEY_CURRENT_USER\\Software\\temp下写入一个名为“ran2”的注册表,注册表内DLL名称为上文所提及生成的

将生成额dll名称写入注册表

查询C:\\Programdata是否存在,不存在则创建

检查路径是否㛮

将最初同一个压缩包的d389移动到C:\\ProgramData\\下,文件名为注册表内写入的DLL名

移动d389

创建计划任务,实现持久化,自启的方式依然是利用Rundll32调用Shell32.dll的函数执行DLL中的main函数,在main函数中再利用Rundll32调用导出函数

初始化计划任务xml
使用schtask注册计划任务

AppxApplicabilityEngine.dll

执行f8755函数

检测参数"1281020996"

检测参数

注册窗口类“NRV3B19”,并创建一个窗口"Form100021",使用名为"Form100021"的窗口进行键盘记录,与V22版本不同,V22的窗口为"Form100022",样本习惯使用版本号作为窗口名称的结尾

注册窗口类NRV3B19
创建窗口以进行键盘记录

V21中的域名生成算法与V22版本相同,使用的域名也相同

域名算法中依然由"NRV1"+年+月+周组成

C2域名生成

生成的域名和V22版本样本相同,后缀依然为".space,“.net",".top",".dynu.net"

与上文一样出现的后缀

两次样本用来解密从C2获得的签名文件的密钥也相同

解密验证文件的私钥

两版本样本功能几乎一致,唯一的不同点在于版本号不同,而没有发现其余功能的更新

同时为了方便各位看官理解,我们绘制了该类样本的流程图

Foudre后门v21V22版本执行流程图

0x02.样本相似以及技术演进

1.样本相似

(1).域名生成算法的相关

从之前的样本去看,从第一版本第22版本都使用了相关的域名生成算法,其中以第八版本为一个分界线

第八版本之前使用了如下的C2域名生成算法:

第八版本使用了如下的C2域名生成算法:

而本次活动披露的第21版本第22版本则使用了老的域名生成算法进行生成,同时扩充了新的后缀

在V21与V22版本中更新了添加了验证C2的功能,猜测可能因为之前有安全公司通过算法得到域名后抢在黑客组织前提前抢注了域名

所以导致攻击者添加了验证的环节

(2).C&C报文的URL路径

该组织并没有去费周折修改其样本的C&C的请求报文

2.样本技术演进

(1).初始植入物的演变

其使用的植入物在前期版本以向PPT文件嵌入多个ole以诱导受害人点击,以及使用可能的水坑攻击,并且使用直接投递伪装成相关诱饵文件的sfx文档进行投递.在本次捕获的样本中主要涉及到使用恶意宏文档进行投递.不过不排除还有其他攻击手段的可能性(注意:不是准确结论,仅为部分猜测)

美人鱼(Infy) APT手法的演进

(2).持久化方式的演进

持久化方式演进

0x03.处置建议

删除文件

0x04.IOCs

MD5

C2

0x05.附录

参考链接:

https://www.intezer.com/blog/research/prince-of-persia-the-sands-of-foudre/ https://researchcenter.paloaltonetworks.com/2017/08/unit42-prince-persia-ride-lightning-infy-returns-foudre/ http://researchcenter.paloaltonetworks.com/2016/06/unit42-prince-of-persia-game-over/ http://researchcenter.paloaltonetworks.com/2016/05/prince-of-persia-infy-malware-active-in-decade-of-targeted-attacks/ https://unit42.paloaltonetworks.com/prince-of-persia-infy-malware-active-in-decade-of-targeted-attacks/ https://www.freebuf.com/articles/network/105726.html

域名生成脚本

基于Esmid idrizovic的脚本进行修改:

0x06.结语

美人鱼(Infy) APT组织是一个活动持续将近10年的组织,其水平不高也不算低.其不断改变手法以逃避安全人员的追查,同时该组织在其恶意样本的编写中逐渐尝试减少特征,并且在编写过程中使用寄存器传递参数的方式加大安全分析人员分析的难度以及归属的难度.并且很有意思的一点,该组织喜欢在其样本中添加最近新闻中的信息,目的不明,猜测可能旨在标记时间

最后更新于

这有帮助吗?