我们发现Sofacy组织使用了一种新的自启动方式,我们称他为Office Test。
病毒会在office每次运行时被加载。文章发布后,我们收到很多关键该启动方式的问题,特别是它是如何工作的以及那些Office版本受影响。本文章将对该自启动方式做技术分析,我们相信其他组织很快也将会使用该方法。
Office Test 背景故事
在分析Sofacy组织最近的恶意文档时,我们发现文档创建了如下注册表项:
HKEY_CURRENT_USERSoftwareMicrosoftOffice testSpecialPerf
基于我们分析,将恶意dll文件路径添加到这个注册表项后每次打开Office都会加载该dll。我们之前没有见过使用该注册表项作为自启动方式的样本,所以深入研究为什么该注册表项会导致恶意dll被加载。
我们检查了一个安装了office的安全的系统,确认默认是没有该注册表项的如图1。
图1:默认安装Office的windows系统并没有”Ofice Test”注册表项
在我们样本集中搜索使用了该自启动方式的样本发现所有都属于Sofacy组织。当时,我们认为Sofacy组织发现了一个新的自启动方式,但是让我们惊讶的是,Hexacom在2014年4月的blog中就公布了该注册表项(Hexacorn had revealed this registry key in an April 2014 blog post)。这说明Sofacy组织可能不是自己发现改启动方式。
DLL加载过程
为了确定该注册表项如何执行恶意DLL,我们分析了启动Office Word后的所有行为。我们分析Word是因为从研究中得知Sofacy组织攻击中正是使用的Word加载了恶意的DLL。然而,office其他应用也被发现易受这个自启动方式的影响,这个我们将在下一节中详细说明。
下图2 API调用显示了Office启动过程中和该注册表项有关的活动。ApI调用显示Word(WINWORD.EXE)加载了”wwlib.dll”,这时Word运行时需要加载的一个正常模块,”wwlib.dll”模块打开注册表并查询,查询它的默认值,然后使用LoadLibrary加载了储存在注册表项的病毒DLL(“btecache.dll”)。
图2 Word加载病毒DLL的API调用
图2中,wwlib.dll最后的行为是尝试打开HKEY_LOCAL_MACHINE下的相同注册表项,如下:
HKEY_LOCAL_MACHINESoftwareMicrosoftOffice testSpecialPerf
尝试打开失败的原因是默认安装并没有该项。此外,以自启动为目的使用该注册表项是行不通的,因为行为者需要提升权限才能修改HKLM目录下的注册表项。然而,修改HKCU目录下的Office Test项来加载恶意DLL只需要当前用户权限。
在Sofacy组织攻击中,攻击者将病毒loader命名为btecache.dll(如图2)保存在Office Test注册表项。病毒Loader加载主要功能模块“C:ProgramDatasvchost.dll”到Word中,然后退出,如图3。 “svchost.dll”模块包含着Sofacy组织使用的Carberp病毒的变种代码,“svchost.dll” 将一直运行直到用户关闭Word应用。
图3 恶意模块“svchost.dll”运行在Word进程中
OFFICE TEST的本意
基于进程的启动行为,我们看到正常的“wwlib.dll”模块从注册表项中读取并加载了恶意的DLL。我们想知道为什么“wwlib.dll”会从一个默认不存在的注册表项中加载DLL。静态分析显示”wwlib.dll”读取注册表项并加载指定模块,然后试图从该模块中寻找“_GetPerfhostHookVersion@0”导出函数,如图4
图4 代码显示wwlib.dll加载dll并查找调用_GetPerfhostHookVersion@0函数
当”wwlib.dll”使用LoadLibraryW函数加载从注册表项中取得的DLL时,会调用DLL的DllEntryPoint函数。Sofacy组织的“btecache.dll”的DllEntryPoint 函数会查找并加载 “svchost.dll”,运行其功能代码。
在“btecache.dll”中虽然没有导出“_GetPerfhostHookVersion@0”函数,但是这并没什么影响如图4代码显示查找失败只是不会去调用该API而已。
“wwlib.dll”除了在注册表项指定的dll中查找“_GetPerfhostHookVersion@0”,函数外,还查找以下函数:
_InitPerf
_PerfCodeMarker
_UnInitPerf
这显示Word(包括其他office应用)使用该注册表项加载指定DLL为了产品性能评估,开发期间调试或者测试阶段使用。这也解释了为什么“SoftwareMicrosoftOffice testSpecialPerf”注册表项默认不存在。
我们也揭漏了”wwlib.dll”试图从HKEY_LOCAL_MACHINESoftwareMicrosoftOffice testSpecialPerfRuntimePerfMeasurement加载DLL。
"RuntimePerfMeasurement”的注册表项名也暗示着该注册表项是为了性能测试和调试目的存在。
受影响的应用和版本
为了确定哪些版本Word受影响,我们测试了如下版本中的“wwlib.dll” 模块:2003, 2007, 2010, 2013, 2015 and 2016。确认Office 2007, 2010, 2013, 2015, 2016中的”wwlib.dll”会读取”Office Test”注册表项的数据并加载DLL。Office2003不受影响。
我们也测试了Office其他应用(Word, Powerpoint, Excel, Outlook, OneNote, Publisher)为了确定哪些会读取”Office Test”注册表项并加载DLL。有趣的是Office工具包中的一些应用不需要通过DLL去读取注册表项并加载病毒模块,而是主程序直接读取主程序并加载。
图5显示各个应用读取并加载恶意模块的流程。
图5 Office Test流程图
总结
“Office Test”启动方式允许病毒在用户每次启动Office时运行,这对沙箱自动化分析是个挑战。建议安全软件将该注册表项加入监控中。微软更新了Autoruns支持“Office Test”启动方式检测。我们建议用户自行添加“Office Test”注册表项并设置为只读权限防止被恶意修改。