Winnti是一个从2009年起一直活跃至今的黑客组织,其主要攻击目标是网络游戏行业,窃取由合法软件供应商签发的数字证书和知识产权内容,包括在线游戏项目的源代码。得到源代码后再放到中国黑市进行兜售,或是直接用到这些源代码制作山寨游戏来以此获利。2015年开始,Winnti组织的攻击目标已经不再仅限于网络游戏公司,还包括电信和大型制药公司。
而最近,ESET的研究人员发现了Winnti组织之前未公开的一个后门程序——skip-2.0,主要针对MSSQL Server 11/12,能让攻击者通过魔术密码秘密连接到任何MSSQL帐户,还能自动从日志中隐藏这些连接,从而让攻击者悄悄复制、修改或删除数据库的内容,例如操纵游戏币来获取经济利益,而Winnti操纵游戏币的行为也不是什么新鲜事了。
据我们所知,skip-2.0是第一个公开记录的MSSQL Server后门。虽然MSSQL Server 11和12不是其最新版本(分别于2012年和2014年发布),但根据Censys的数据,它们还是当前最常用的版本。
skip-2.0与Winnti组织使用的另一个工具——PortReuse后门有很多相似之处,后者在2019年10月被检测到,它们都使用相同的自定义封装器和VMProtected启动器,这也是把该后门归于Winnti的原因之一。
本文将重点介绍skip-2.0的技术细节和功能,以及它与Winnti Group的已知工具(PortReuse后门、ShadowPad)技术上的相似之处。
VMProtected启动器
Winnti组织所使用的VMProtected启动器,其payload通常是PortReuse或ShadowPad,而这次研究人员发现的新样本则是skip-2.0。
嵌入的payload
与PortReuse和ShadowPad一样,skip-2.0嵌入在VMProtected启动器的Overlay中,如图1所示:
图1.VMProtected启动器的头,payload嵌入在PE Overlay中
加密
Payload的加密程式则和之前的一样,都用rc5加密,密钥来自于VolumeID和字符串“ [email protected]!rCto R$”。
持久性
PortReuse和ShadowPad的持久性机制可能依赖的是利用DLL劫持漏洞,漏洞安装在C:\Windows\System32\ TSVIPSrv.DLL,这将导致在系统启动时由标准的Windows SessionEnv服务加载DLL。
Winnti组织的定制封装器
嵌入的payload实际上是Winnti组织的自定义封装器,用于封装PortReuse后门以及破坏视频游戏的payload。
封装器配置
封装器包含二进制文件的解密密钥及其原始文件名、大小和执行类型(EXE或DLL)。Payload的封装器配置如表1所示。
表1.payload的封装程序配置
从配置中可以看到,payload被称为Inner-Loader,Inner-Loader是Winnti 组织所使用的一个注入器,用于将PortReuse后门注入到侦听特定端口的进程中。此样本的所使用的应该是另一个变体。
Inner-Loader注入器
此版本的Inner-Loader不再寻找在特定端口上侦听的进程,而是寻找一个名为sqlserv.exe的进程,这是MSSQL Server的常规进程名称。如果找到,Inner-Loader会将payload注入,表2中显示了该payload的封装器配置。
表2.内置于Inner-Loader中的payload的封装器配置
而注入的payload的原始文件名是skip-2.0.dll。
skip-2.0
在由Inner-Loader注入并启动后,skip-2.0首先检查它是否在sqlserv.exe进程中执行,如果是,则检索sqllang.dll的句柄,该句柄由sqlserv.exe加载,然后继续从sqllang.dll中查找并挂钩多个函数。图2描述了skip-2.0的执行过程。
图2. skip-2.0的执行过程
挂接sqllang.dll
skip-2.0使用的挂接过程与NetAgent所用的类似,NetAgent是PortReuse中负责安装网络钩子的模块,该挂钩库基于distorm开源反汇编程序,被多个开源挂钩框架使用。在图3中可以看到,NetAgent和skip-2.0使用的挂接过程几乎相同。
图3. NetAgent(左)和skip-2.0(右)挂接过程之间的Hex-Rays输出比较
有一个显著的区别是,skip-2.0的钩子函数将要安装的钩子的地址作为参数,而对于NetAgent,要安装的钩子的地址是硬编码的。这是由于skip-2.0必须挂钩sqllang.dll中的多个函数才能正常运行,而NetAgent仅针对单个函数。
为了找到要挂接的每个sqllang.dll函数,skip-2.0首先通过解析其PE标头来检索加载到内存中的DLL的大小(即其虚拟大小)。然后在sqllang.dll中初始化一个字节数组,如图4所示。一旦找到匹配字节数组的第一个匹配项的地址,就使用图3所示的过程安装钩子。
图4.在sqllang.dll中初始化字节数组以匹配进程的Hex-Rays输出
钩子安装成功后以明文形式记录在位于硬编码路径C:\Windows\Temp\TS_2CE1.tmp 的日志文件中,如图5所示。
图5.在钩子安装期间生成的日志
如果找不到目标函数,则钩子安装程序将使用一组不同的字节模式搜索回退函数。
通过匹配一个字节序列来定位目标函数的地址,而不是使用静态偏移量,再加上使用回退的字节序列,使得skip-2.0对MSSQL更新更有弹性,并且可能针对多个sqllang.dll更新。
破解所有,只需一个密码
skip-2.0的目标函数与身份验证和事件记录有关。目标函数包括:
· CPwdPolicyManager::ValidatePwdForLogin
· CSECAuthenticate::AuthenticateLoginIdentity
· ReportLoginSuccess
· IssueLoginSuccessReport
· FExecuteLogonTriggers
· XeSqlPkg::sql_statement_completed::Publish
· XeSqlPkg::sql_batch_completed::Publish
· SecAuditPkg::audit_event::Publish
· XeSqlPkg::login::Publish
· XeSqlPkg::ual_instrument_called::Publish
最有趣的函数是第一个(CPwdPolicyManager :: ValidatePwdForLogin),它负责验证为给定用户提供的密码。该函数的钩子检查用户提供的密码是否与魔术密码匹配,在这种情况下,原始函数将不会被调用,钩子将返回0,即使未提供正确的密码也允许连接。然后设置一个全局标志,其他负责事件记录的钩子函数进行检查志。相应的反编译过程如图6所示。在设置了此全局标志的情况下,钩子的日志记录函数将不调用相应的原始函数而自动返回,因此不会记录操作。如果提供了不同的密码,则会调用原始函数。
图6.用于匹配登录时提供的密码与硬编码字符串的过程的Hex-Rays输出
ESET以前发现的SSH后门也使用了类似的基于硬编码密码的回溯技术。这里的不同之处在于,skip-2.0安装在内存中,而对于SSH后门,则在执行之前修改了sshd可执行文件。
另外,CSECAuthenticate::AuthenticateLoginIdentity将在其钩子代码中调用,但是钩子将始终返回0。如果使用了魔术密码登录,则ReportLoginSucess和IssueLoginSuccessReport挂钩将不会调用原始函数。相同的行为应用于FEExecuteLogonTriggers 。如果用户使用魔术密码登录,则其他日志记录功能(例如XeSqlPkg :: sql_statement_completed :: Publish或XeSqlPkg :: sql_batch_completed :: Publish也将被禁用)。多个审核事件也被禁用,包括SecAuditPkg :: audit_event :: Publish,XeSqlPkg :: login :: Publish和XeSqlPkg :: ual_instrument_称为:: Publish。
这一系列的钩子使攻击者不仅可以通过使用特殊密码来获取受害者的MSSQL Server的持久性,而且由于在使用该密码时禁用了多个日志和事件发布机制,所以攻击者仍然无法检测到。
我们针对多个MSSQL Server版本测试了skip-2.0,发现我们能够使用特殊密码通过MSSQL Server 11和12成功登录。要检查skip-2.0是否针对特定的sqllang.dll版本(即,是否匹配字节模式),我们创建了一个YARA规则,该规则可以在我们的GitHub存储库中找到。
与Winnti的联系
skip-2.0与Winnti组织使用的其他工具之间存在多个相似之处,其VMProtected启动器、自定义封装器、Inner-Loader注入器和挂钩框架都是Winnti武器库中见过的,于是我们认为skip-2.0也属于Winnti作品。
结论
skip-2.0后门能让攻击者在MSSQL服务器上实现持久性,这点以前是从未发现过的。我们将继续监视Winnti组织的新动态,并及时发布相关信息。
本文翻译自:https://www.welivesecurity.com/2019/10/21/winnti-group-skip2-0-microsoft-sql-server-backdoor/如若转载,请注明原文地址: https://www.4hou.com/web/21102.html