公司新闻

FALCON NEWS

勒索软件 “Locky”深度分析

2016-03-02 来源:猎鹰安全

  2月19日,德国媒体报道,一款家族名为"Locky"的勒索者恶意软件每小时感染德国5300台计算机,Locky由此进入人们视野。目前,Locky已经蔓延到包括德国、荷兰、美国在内的十几个国家,国内知名论坛上也陆续开始出现关于Locky的讨论,不少人在寻求文件被修改“.lock”的加密文件后的解决方案,可见部分国内网民已经中招,而某宝上也有公开出售Locky的解密密钥。几乎同时,金山安全接到多个企业报警显示Locky已在其内网蔓延,并影响到生产环节,事态进一步升级。


  金山安全反病毒实验室采集到Locky样本,分析发现勒索提示可以显示中文,可见此次勒索事件与以往“国外中招,中国躺枪”不同,犯罪集团的矛头开始指向中国用户。


  Locky攻击流程



  如图所示,黑客向受害者邮箱发送带有恶意word文档的Email,word文档中包含有黑客精心构造的恶意宏代码,受害者打开word文档并运行宏代码后,主机会主动连接指定的web服务器,下载locky恶意软件到本地Temp目录下,并强制执行。locky恶意代码被加载执行后,主动连接黑客C&C服务器,执行上传本机信息,下载加密公钥。locky遍历本地所有磁盘和文件夹,找到特定后缀的文件,将其加密成“.locky”的文件。加密完成后生成勒索提示文件。


  恶意代码执行的关键一步是宏代码的手动启用。多数Office软件默认不运行宏代码,在遇到带宏代码的文档时,需要用户手动启用。同时,Office 2010遇到带不可信宏代码文件会弹出提示信息,如下图所示。因此只有用户单击“启用宏”,恶意代码才能得到执行。



  恶意宏代码分析

  实验室从受害者主机中筛选出invoice_J-61387625.doc、New Doc 115.docm两个典型样本。


  *.doc文件使用Word 2003打开即可运行宏代码。而主机安装Office 2007及以上版本的Office软件时,宏代码是否能运行对后缀名有严格的要求,后缀名分为.docx、docm、dotx、dotm四种,打开*.docx文件或兼容低版本的*.doc文件时默认禁止宏代码运行,故恶意代码作者需要再次构造*.docm文件,保证Office 2007以上版本也能执行恶意代码。




  在invoice_J-61387625.doc中包含两个模块Module1和Module2,New Doc 115.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


Locky主体svchost.exe恶意软件分析

  宏代码下载的文件是一个Microsoft Visual C++编译的exe文件,文件名由宏代码决定,执行后其自动更名为svchost.exe,故将locky主体样本命名为svchost.exe。


  svchost.exe主要执行流程如下图。


  1.创建“Locky”注册表项:



  主要注册表如下:
  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项,

 
  判断主机是否加密完毕,加密完毕则退出程序。


  2.检查自身是否在临时目录下,命名成svchost.exe




  如果自身不在临时文件目录下或未命名svchost.exe,恶意代码把自身拷贝到~Temp/svchost.exe并删除原始文件。


  3.读取本机信息


识别的操作系统: Windows 2000、Windows XP、Windows 2003、Windows 2003 R2、Windows Vista、Windows 、Server 2008、Windows 7、Windows Server 2008 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系统

4.构造URL:



  其中sub_40467B函数是产生域名的函数,sub_4046F5函数作用为拼接得到完整URL。 恶意软甲根据本机环境随机从域名列表中选取域名,以下是实测中截获的部分域名:
mxdboggndfjpnuu.fr
ekfbhxkaoigjyj.uk
racnbf.ru
fpceaoggl.pm
fpceaoggl.pm.localdomain
wfuiglgv.be
Wfuiglgv.be.localdomain


  6.填充传送参数



  构造参数主要有: id 编号,标识计算机
  act 与C&C服务器交互的指令
  affid 未知
  lang 计算机所使用的语言
  corp 未知
  serv 未知
  os 操作系统
  sp 补丁包
  x64 是否为64位操作系统
  encrypted 加密成功
  failed 加密失败
  length 长度
  path 路径
  其中act指令主要有四种:
  getkey 开启加密流程前发送,向服务器获取公钥
  stats 单个文件加密完成时发送,附带加密文件具体信息,如加密成功或失败,加密长度等
  report 发送加密文件的列表
  gettext 加密完成时发送,表示获取提示用户的勒索信息



  7.遍历磁盘并创建线程遍历文件夹,找到所有文件


  递归调用FindFirstFileW与FindNextFileW两个API函数遍历所有文件。该处使用多线程同时进行遍历,加快加密文件速度。


  8.加密文件




  恶意软件使用windows crypto API进行加密,既不需要自己设计复杂的加密算法,又能确保中招主机能顺利执行。



  加密完成后,将文件复制成后缀名为.locky的文件,删除源文件。


  9.加密结束

  待所有加密线程退出,给C&C服务器反馈加密情况,并销毁密钥



  10.删除全盘所有卷影副本



  为防止执勒索用户通过卷影副本恢复源文件,恶意代码执行  vssadmin.exe Delete Shadows /All /Quiet。


11.形成勒索提示文件



  每个被加密文件的相同目录下释放一个名为_Locky_recover_instructions.txt的勒索提示文件。


总结

  通过对Locky样本的深入分析和对攻击事件的还原,我们知道勒索者恶意软件Locky的攻击手法并不新奇,一般是通过邮件形式传播,需要被攻击用户主动打开附件内容并点击允许宏代码执行。可见传统的攻击手段并没有失效,office宏病毒的破坏力依然存在。


  截至目前,样本Word文件宏代码访问的服务器、locky主体交互的C&C服务器均已关闭,一些域名已经无效,故当前截获的Word样本无法连接服务器下载locky恶意软件,已存在的locky恶意软件也因无法从C&C服务器获取公钥,从而无法加密本地文件。但此次事件的威胁依然存在,存在的大量样本变种表明,勒索者事件是有组织的犯罪团伙所为,恶意代码作者只需修改代码中连接服务器的域名信息或者IP地址,便可以大批量再生产有效攻击样本,罪犯们需要做的仅仅是购置非法域名和服务器。


  值得注意的是,前几年的勒索事件因国人少有使用比特币的习惯,基本没有用户为此买单,勒索者矛头并没有指向中国内地,中招者纯属“躺枪”。然而,此例样本可以弹出中文勒索提示,表明勒索事件开始蔓延到国内。


  2016年勒索类恶意软件将愈演愈烈,加密后的文件很难被找回已为业界公认。对付勒索类恶意软件依然是以预防为主:定期备份重要文件,当心陌生邮件及附件,在打开带宏代码的Office文件时应特别注意,确认可信后再启用宏运行。



媒体联系人:

猎鹰安全

media@ejinshan.net