该黑客组织发起的攻击事件的独特之处在于如何安装CARBANAK后门进行权限维持。Mandiant(美国麦迪安网络安全公司)分析发现该组织利用shim数据库在不同的系统环境下实现权限维持。shim将恶意的内存补丁注入到服务控制管理器(“services.exe”)进程中,然后产生一个CARBANAK后门进程。
Mandiant(美国麦迪安网络安全公司)分析指出,FIN7还使用这种技术来安装payment card采集工具用于权限维持。这是FIN7黑客组织以前的方法,为了注入恶意进程维持权限会先安装一个恶意的Windows服务。
Shim功能概要(解决古老的程序兼容问题)
引用Microsoft的官方说明,程序兼容Shim(application compatibility shim)是一个可以通过hook透明拦截API的小型函数库,可以篡改传输函数的参数值,可以处理一些自己的操作,也可以执行其他的操作(例如存储在当前系统中的其他位置的代码)。
现如今,Shim的存在主要解决的问题是处理一些古老应用程序的兼容性问题(译者注:部分古老的应用程序采用一些过时或已被弃用的API,都过Shim可以hook这些API替换为较流行的函数,进而解决程序的兼容性问题)。可以看到,Shim是一个合法的功能,出于一个善意的目的,去解决系统迭代产生的问题,由于技术的两面性,其功能有可能被滥用执行一些恶意的操作。Mandiant(美国麦迪安网络安全公司)的安全顾问曾经在BruCon和BlackHat讨论过Shim数据库被滥用可能产生的安全问题。
Shim数据库注册表
在当前操作系统上注册shim数据库有多种方式,其中一种方法就是使用系统内置的“sdbinst.exe”命令行工具。图1展示的就是使用“sdbinst.exe”命令行工具注册shim时创建的两个注册表键。
图1:Shim数据库注册表键
一旦shim数据库在系统上成功注册,shim数据库文件(后缀名为“.sdb”)将被复制到"C:\Windows\AppPatch\Custom"(32位shim)目录下(64位shim将被复制到"C:\Windows\AppPatch\Custom\Custom64"目录下)。
恶意Shim数据库安装
在操作系统上安装和注册恶意shim数据库,FIN7使用自定义经过Base64编码的PowerShell脚本,该脚本的功能是运行“sdbinst.exe”命令行工具注册一个经过修改插入恶意代码的shim数据库,图2为经过还原的FIN7 PowerShell脚本中解码的部分截图,列出了执行的命令及参数。
图2:FIN7 PowerShell脚本安装自定义Shim数据库文件的部分截图
FIN7黑客组织使用“sdbinst.exe”命令行工具在目标操作系统上创建和注册不同命名规则的shim数据库文件。但有一个共同点是,都会创建一个后缀名为“.tmp”的Shim数据库文件(如图3所示)。
图3:恶意Shim数据库文件示例
当前的恶意shim数据库文件再操作系统上注册后,一个后缀名为“.sdb”,文件名为随机GUID值的shim数据库文件(恶意文件)将在其64位的默认目录("C:\Windows\AppPatch\Custom\Custom64")下创建,如图4所示。该shim数据库文件具有与最初在“C:\Windows\Temp”目录下创建的文件具有相同的MD5 hash值。
图4:注册后的shim数据库文件
除此之外,与之相关的注册表键也将在shim数据库注册表中创建。图5展示了与此shim安装相关的注册表键值关系。
图5:注册表键值关系
用于shim数据库注册表的数据库描述(DatabaseDescription)“Microsoft KB2832077”是很有意思的,因为这个KB编号不是一个Microsoft官方发布的更新补丁编号。如图6所示,该描述出现在受影响的操作系统中的Windows控制面板的已安装程序列表中。
图6:作为已安装应用程序的Shim数据库
恶意Shim数据库细节分析
经过研究分析,Mandiant(美国麦迪安网络安全公司)分析出FIN7黑客组织向全版本操作系统
(32位、64位)中的“services.exe”中注入自定义的Shim数据库(将原生Shim数据库文件植入CARBANAK后门payload)。当操作系统启动“services.exe”进程执行时,CARBANAK后门payload将会执行。shim数据库文件包含第一阶段加载的shellcode,其余的shellcode payload存储在注册表键中。图7列出了FIN7黑客组织利用的解析shim数据库文件。
图7:解析shim数据库
对于第一阶段加载的程序,FIN7黑客组织改写了services.exe进程中相对虚拟地址 (RVA)“0x0001407c”对应“ScRegisterTCPEndpoint” 函数的代码,执行带有恶意shellcode的shim数据库。新的“ScRegisterTCPEndpoint”函数(shellcode)包含了对“\REGISTRY\MACHINE\SOFTWARE\Microsoft\DRM”路径的引用。该路径下的内容为存贮在操作系统中其余的恶意shellcode和CARBANAK DLL(FIN7黑客组织使用的后门程序)payload。
图8展示了在恢复的shim数据库文件中解析补丁结构的部分截图
图8:从shim数据库文件中解析补丁结构
存储在注册表“HKLM\SOFTWARE\Microsoft\DRM”中的shellcode可以利用ntdll中的API函数“RtlDecompressBuffer”进行解压缩出payload。该程序在执行CARBANAK DLL(FIN7黑客组织使用的后门程序)payload的入口函数之前会休眠4分钟。一旦payload加载进内存,就会创建一个包含CARBANAK DLL名为“svchost.exe”的新进程。
总结一下完整的攻击过程
图9是一个完整的行为流程图,利用shim数据库向64位的“services.exe”进程中注入shellcode最终实现权限维持。
图9:Shim数据库代码注入过程
如何检测电脑是否被该恶意代码感染?
Mandiant(美国麦迪安网络安全公司)推荐了以下几种方式检测操作系统是否受到这种恶意Shim数据库的感染。
1.监控默认shim数据库下新创建的shim数据库文件:“C:\Windows\AppPatch\Custom”(32位),“C:\Windows\AppPatch\Custom\Custom64”(64位)
2.监控以下注册表键的创建或修改事件:“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom”和“HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB”
3.监控进程执行事件和恶意使用“sdbinst.exe”命令行工具执行的参数的异常行为。
|