2 月19日 , 德国媒体报道,一款家族名为”Locky”的勒索者恶意软件每小时感染德国5300台计算机,Locky由此进入人们视野。目前,Locky已经蔓延到包括德国、荷兰、美国在内的十几个国家,国内知名论坛上也陆续开始出现关于Locky的讨论,不少人在寻求文件被修改“.lock”的加密文件后的解决方案,可见部分国内网民已经中招,而某宝上也有公开出售Locky的解密密钥。几乎同时,金山安全接到多个企业报警显示Locky已在其内网蔓延,并影响到生产环节,事态进一步升级。
金山安全反病毒实验室采集到Locky样本,分析发现勒索提示可以显示中文,可见此次勒索事件与以往“国外中招,中国躺枪”不同,犯罪集团的矛头开始指向中国用户。
如图所示,黑客向受害者邮箱发送带有恶意 word 文档的 Email , word 文档中包含有黑客精心构造的恶意宏代码,受害者打开 word 文档并运行宏代码后,主机会主动连接指定的 web 服务器,下载 locky 恶意软件到本地 Temp 目录下,并强制执行。 locky 恶意代码被加载执行后,主动连接黑客 C&C 服务器,执行上传本机信息,下载加密公钥。 locky 遍历本地所有磁盘和文件夹,找到特定后缀的文件,将其加密成“ .locky ”的文件。加密完成后生成 勒索提示文件。
恶意代码执行的关键一步是宏代码的手动启用。多数 Office 软件默认不运行宏代码,在遇到带宏代码的文档时,需要用户手动启用。同时, Office 2010 遇到带不可信宏代码文件会弹出提示信息,如下图所示。因此只有用户单击“启用宏”,恶意代码才能得到执行。
实验室从受害者主机中筛选出 invoice_J-61387625.doc 、 NewDoc 115.docm 两个典型样本。
*.doc 文件使用 Word 2003 打开即可运行宏代码。而主机安装 Office 2007 及以上版本的 Office 软件时,宏代码是否能运行对后缀名有严格的要求,后缀名分为 .docx 、docm、dotx、dotm四种,打开*.docx文件或兼容低版本的* .doc 文件时默认禁止宏代码运行,故恶意代码作者需要再次构造 *.docm 文件,保证 Office 2007 以上版本也能执行恶意代码。
在invoice_J-61387625.doc中包含两个模块Module1和Module2,New Doc115.docm包含Module1一个模块。但对比两个文件中的函数发现,存在同名函数AddSensors()、CheckBins()、SaveMaps()。
函数分布如下图所示:
进一步对比发现,同名函数内除了变量名不同,可执行代码均相同。 CheckBins() 与 getTypeBodyCell() 、 CheckMaps() 与 MimoNasM() 、存在相似代码, ConnectMaps() 与 OnasOn() 基本相同。
由此可以确定两个样本的恶意代码同源,可以猜测作者为了达到兼容 Office2007 以上版本,找来一串 .docm 文件的合法宏代码,将原始代码粘贴插入到函数中,并修改入口函数,达到执行恶意代码的目的。有意思的是,从函数名与函数内容中看出,恶意代码作者找到的是一串贪吃蛇游戏的代码。
现在我们以 invoice_J-61387625.doc 为例对恶意宏代码进行分析:
如上如所示,打开从文档处可以找到入口函数 AddSensors (),顺着入口函数,可以清晰看到函数间的调用关系。
宏代码关键函数分析如下:
恶意代码作者把字符串常量保存在UserForm1.Label1.Caption中,使用“/”符号分隔,初始化变量时将其取出放到DrinkSun变量中 。 UserForm1.Label1.Caption内容如下:Microsoft.XMLHTTP/Adodb.Stream/Shell.Application/WScript.Shell/Process/GET/TEMP/Type/Open/write/responseBody/savetofile//ladybi.txt
KogdaGe_7变量中保存的数组是经过混淆的访问locky的url,红色部分为将数组解密成url的代码。
解密完成后的url为:
www.jesusdenazaret.com.ve/34gf5y/r34f3345g.exe
函数尝试对外连接成功后,服务器返回locky文件的二进制流数据,代码将其保存到临时文件夹路径下,注:DrinkSun字符串数组,即UserForm1.Label1.Caption以“/”分隔的字符串,因此DrinkSun(6)为“TEMP”DrinkSun(12)为“/ladybi.txt”,字符串中没有“t”,文件名即为“ladybi.txt”。
最后一步,把黑客服务器返回的locky文件数据流写到“ladybi.txt”中,并执行。
虽然连接下载恶意代码服务器的url是写死在程序中的,但不同样本访问的域名却不相同,犯罪集团拥有大量可控的服务器。采集到部分样本url如下:
www.jesusdenazaret.com.ve/34gf5y/r34f3345g.exe
feestineendoos.nl/system/logs/7623dh3f.exe
jsteksys.com/4/4_b9ffd5c5.exe
宏代码下载的文件是一个Microsoft Visual C++编译的exe文件,文件名由宏代码决定,执行后其自动更名为svchost.exe,故将locky主体样本命名为svchost.exe。
svchost.exe主要执行流程如下图:
主要注册表如下:
HKEY_CURRENT_USER/Software/Locky
HKEY_CURRENT_USER/Software/Locky/id
HKEY_CURRENT_USER/Software/Locky/pubkey
HKEY_CURRENT_USER/Software/Locky/paytext
HKEY_CURRENT_USER/Software/Locky/completed
程序可以根据HKEY_CURRENT_USER/Software/Locky/completed项,判断主机是否加密完毕,加密完毕则退出程序。
如果自身不在临时文件目录下或未命名svchost.exe,恶意代码把自身拷贝到~Temp/svchost.exe并删除原始文件。
识别的操作系统:
Windows 2000、Windows XP、Windows 2003、Windows 2003 R2、Windows Vista、Windows 、Server 2008、Windows 7、Windows Server2008 R2、Windows 8、Windows Server 2012、Windows 8.1、Windows Server 2012 R2、Windows 10、Windows Server 2016 Technical Preview
可见恶意软件兼容从Windows 2000到Windows 10的操作系统版本。
上图为判断系统是否为X64系统
其中sub_40467B函数是产生域名的函数,sub_4046F5函数作用为拼接得到完整URL。
恶意软甲根据本机环境随机从域名列表中选取域名,以下是实测中截获的部分域名:
mxdboggndfjpnuu.fr
ekfbhxkaoigjyj.uk
racnbf.ru
fpceaoggl.pm
fpceaoggl.pm.localdomain
wfuiglgv.be
Wfuiglgv.be.localdomain
构造参数主要有:
id 编号,标识计算机
act 与C&C服务器交互的指令
affid 未知
lang 计算机所使用的语言
corp 未知
serv 未知
os 操作系统
sp 补丁包
x64 是否为64位操作系统
encrypted 加密成功
failed 加密失败
length 长度
path 路径
其中act指令主要有四种:
getkey 开启加密流程前发送,向服务器获取公钥
stats 单个文件加密完成时发送,附带加密文件具体信息,如加密成功或失败,加密长度等
report 发送加密文件的列表
gettext 加密完成时发送,表示获取提示用户的勒索信息
构造参数主要有:
id 编号,标识计算机
act 与C&C服务器交互的指令
affid 未知
lang 计算机所使用的语言
corp 未知
serv 未知
os 操作系统
sp 补丁包
x64 是否为64位操作系统
encrypted 加密成功
failed 加密失败
length 长度
path 路径
其中act指令主要有四种:
getkey 开启加密流程前发送,向服务器获取公钥
stats 单个文件加密完成时发送,附带加密文件具体信息,如加密成功或失败,加密长度等
report 发送加密文件的列表
gettext 加密完成时发送,表示获取提示用户的勒索信息
递归调用FindFirstFileW与FindNextFileW两个API函数遍历所有文件。该处使用 多线程同时进行遍历,加快加密文件速度。
恶意软件使用 windows crypto API 进行加密,既不需要自己设计复杂的加密算法,又能确保中招主机能顺利执行。
加密完成后,将文件复制成后缀名为.locky的文件,删除源文件。
待所有加密线程退出,给C&C服务器反馈加密情况,并销毁密钥
为防止执勒索用户通过卷影副本恢复源文件,恶意代码执行vssadmin.exe Delete Shadows /All /Quiet。
每个被加密文件的相同目录下释放一个名为_Locky_recover_instructions.txt的勒索提示文件。
通过对Locky样本的深入分析和对攻击事件的还原,我们知道勒索者恶意软件Locky的攻击手法并不新奇,一般是通过邮件形式传播,需要被攻击用户主动打开附件内容并点击允许宏代码执行。可见传统的攻击手段并没有失效,office宏病毒的破坏力依然存在。
截至目前,样本Word文件宏代码访问的服务器、locky主体交互的C&C服务器均已关闭,一些域名已经无效,故当前截获的Word样本无法连接服务器下载locky恶意软件,已存在的locky恶意软件也因无法从C&C服务器获取公钥,从而无法加密本地文件。但此次事件的威胁依然存在,存在的大量样本变种表明,勒索者事件是有组织的犯罪团伙所为,恶意代码作者只需修改代码中连接服务器的域名信息或者IP地址,便可以大批量再生产有效攻击样本,罪犯们需要做的仅仅是购置非法域名和服务器。
值得注意的是,前几年的勒索事件因国人少有使用比特币的习惯,基本没有用户为此买单,勒索者矛头并没有指向中国内地,中招者纯属“躺枪”。然而,此例样本可以弹出中文勒索提示,表明勒索事件开始蔓延到国内。
2016 年勒索类恶意软件将愈演愈烈,加密后的文件很难被找回已为业界公认。对付勒索类恶意软件依然是以预防为主:定期备份重要文件,当心陌生邮件及附件,在打开带宏代码的Office文件时应特别注意,确认可信后再启用宏运行。
*作者:金山安全(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)