6月27日晚,乌克兰境内多个政府组织和重要企业的电脑遭遇恶意软件攻击,致使多地出网络中断和电脑故障,政府无法正常办公,企业无法正常运营。事后,ESET把这次攻击的恶意软件检测为Diskcoder.C也就是我们这两天常听的ExPetr,PetrWrap,Petya或NotPetya。Diskcoder.C像典型的恶意软件一样能够加密计算机上的数据并勒索价值300美金的比特币。
ESET将这次攻击归因于“TeleBots”组织,并发现了有关乌克兰其他类似攻击的详细信息。本文介绍了DiskCoder.C攻击期间使用的初始分布向量的详细信息。
ESET在一篇博文中称,“2016年下半年,ESET研究人员识别出一款独特的恶意工具集,针对乌克兰金融行业的高价值目标实施网络攻击。我们认为,攻击者使用这些工具的主要目标是进行网络破坏。而发起此次攻击的恶意软件TeleBots及其背后团伙与BlackEnergy黑客组织存在众多相似之处。BlackEnergy2015年12月与2016年1月曾对乌克兰的能源行业发起网络攻击。事实上,我们认为BlackEnergy组织已经变身TeleBots组织。”
Diskcoder.C的变异过程
乌克兰国家警察网络部在其Facebook帐户上表示:“如ESET和其他信息安全公司分析的那样,攻击者利用本国的合法会计软件M.E.Doc来传播DiskCoder.C。”
不过到目前为止,关于其具体的传播细节,官方还没有公布。而在ESET的研究中,他们发现一个M.E.Doc非常隐秘的后门,这使得攻击者可以轻松将DiskCoder.C注入到M.E.Doc的合法模块中,否则攻击者似乎不太可能通过访问M.E.Doc源代码的方式进行注入。
后门模块的文件名为ZvitPublishedObjects.dll,它是使用.NET Framework编写的,文件大小是5MB,其中包含很多可以由其他组件调用的合法代码,比如M.E.Doc可执行文件主要的主执行模块ezvit.exe。
ESET的专家们检查了2017年发布的所有M.E.Doc更新,并发现至少有三个更新包含后门模块,它们分别是:
01.175-10.01.176,于2017年4月14日发布 01.180-10.01.181,于2017年5月15日发布 01.188-10.01.189,于2017年6月22日发布
Win32 / Filecoder.AESNI.C事件发生在10.01.180-10.01.181更新三天后,DiskCoder.C在10.01.188-10.01.189更新五天后爆发。有趣的是,从2017年4月24日至2017年5月10日出现了四个更新,以及从2017年5月17日至2017年6月21日出现了七个软件更新,在这些更新中并没有包含后门模块。
由于5月15日更新中确实包含了后门模块,而5月17日的更新却没有包含该更新,这就可以解释为什么Win32/Filecoder.AESNI.C事件的感染率非常低,因为5月17日的更新是攻击者未预料到的事,而当他们在5月18日推送出了Win32/Filecoder.AESNI.C后,大部分M.E.Doc的用户的后门模块已经被更新。分析文件的PE编译时间表明,这些文件是在更新当天或更新的前一天同时进行期编译的,下图就是5月15日更新后推送的模块的编译时间戳。
下图则显示了使用ILSpy .NET反编译器在有无后门两种情况下的模块列表之间的区别,其中左侧为带有后门的反向模块,右侧为非后门的反向模块:
后门的主要类命名为MeCom,它位于ZvitPublishedObjects.Server命名空间中,如下图所示为具有恶意代码的MeCom类,如ILSpy .NET反编译器:
MeCom类是由ZvitPublishedObjects.Server命名空间中UpdaterUtils的IsNewUpdate方法调用。通过定期调用IsNewUpdate方法,以检查是否有新的更新可用。可以看出从5月15日起的后门模块的注入方式就发生了变化,因为相比于6月22日的功能更加丰富。
在乌克兰开展商业活动时,每个组织都会获得一个单独的法人实体标识符,称为EDRPOU号码(КодЄДРПОУ)。这对攻击者来说是非常重要的,一旦攻击者拥有EDRPOU号码,他们就可以确定正在使用具有后门的M.E.Doc的确切组织。一旦攻击对象确定,攻击者就可以根据攻击目标来制定对应的网络攻击策略。
在乌克兰, 由于M.E.Doc是企业最常用的会计软件,因此企业的EDRPOU号码可以在使用M.E.Doc的设备上的应用程序数据中被找到。在IsNewUpdate方法中注入的代码会从应用程序数据中收集所有EDRPOU值,由于一个M.E.Doc实例可同时为多个组织执行会计操作,因此后门代码会收集所有可能的EDRPOU值,下图就是收集EDRPOU号码的代码:
除了收集EDRPOU号码,攻击者还会利用后门从M.E.Doc应用程序收集代理和电子邮件设置,其中就包括用户名和密码。我们建议使用M.E.Doc软件的所有用户赶紧更改代理密码和电子邮件帐户。
恶意代码使用Cred和Prx值将收集的信息写入HKEY_CURRENT_USER SOFTWARE WC密钥的Windows注册表中。因此,如果这些值存在于计算机上,则后门模块很可能就在该计算机上运行。
该后门非常的隐蔽,不使用任何外部服务器作为C&C,仅使用M.E.Doc软件的常规更新检查请求进入官方M.E.Doc服务器upd.me-doc.com[.]ua。这种伪装的请求与合法请求的唯一区别是后门代码将收集的信息发送到Cookie,下图就是在Cookie中包含EDRPOU号码的后门模块的HTTP请求:
虽然截至目前,ESET的专家还没有对M.E.Doc服务器进行取证分析。但是,正如他们之前分析那样,有迹象表明服务器遭到入侵。因此,完全有理由推测,攻击者部署的服务器软件允许他们区分来自受损和不受影响的计算机的请求,下图就是请求添加Cookie的后门代码:
当然,攻击者也增加了控制受感染设备的能力。请求添加Cookie的后门代码会接收一个二进制的BOB(binary large object,二进制大对象)官方M.E.Doc服务器,并使用3DES算法进行解密,最后使用GZip进行解压缩,最后可以得到一个一次包含多个命令的XML文件。这个远程控制功能使得后门同时成为一个功能齐全的网络间谍和网络攻击的平台,下图就是解密传入恶意软件操作员命令的后门代码:
下表显示了可能的命令:
应该注意的是命令5,之所以恶意软件开发者将其命名为AutoPayload,是因为它完全符合了最初在“patient zero”设备上执行DiskCoder.C的方式,下图就是用于执行DiskCoder.C恶意软件的AutoPayload方法:
结论
本文分析显示,该后门为一个完美的攻击计划和恶意操作创造了良好的条件。假设攻击者可以访问M.E.Doc应用程序源代码,则他们有时间学习代码,并加入了一个非常隐蔽的后门。完整的M.E.Doc安装的大小约为1.5GB,ESET的专家目前还没有办法验证是否还存在除了MeCom之外的其他注入后门。
另外有待考证的是,这个后门使用了多长时间? 除了DiskCoder.C或Win32 / Filecoder.AESNI.C以外,还有哪些命令和恶意软件使用了此后门就行过传播?有没有其他的软件更新参与过传播?
特别感谢我的同事FrédéricVachon和Thomas Dupuy在这项研究中的帮助。