0

0

Winnti黑客组织MSSQL后门的示例分析

PHPz

PHPz

发布时间:2023-05-27 21:04:30

|

1659人浏览过

|

来源于亿速云

转载

一段时间以来,eset的研究人员一直在跟踪winnti的活动,该组织从2012年起就开始活跃,并针对视频游戏和软件行业供应链进行攻击。最近发现一处以前未被登记的后门,其攻击目标为microsoft sql(mssql)系统。这个后门与portreuse后门有多处相似之处,portreuse是winnti group使用的另一个工具,于2019年10月首次记录。

Winnti组织成员发布了一个新的后门样本,名为Skip-2.0,今年检测到了该样本。这个后门程序以MSSQL服务器11和12为目标,攻击者可以使用magic密码连接到任何MSSQL帐户,同时自动将这些连接隐藏在日志中。攻击者可以利用后门进入数据库,复制、修改或删除其中的内容,从而操纵游戏内货币,以获取经济利益。根据了解,Skip-2.0是第一个被公开记录的MSSQL服务器后门。

本文将重点介绍mssql服务器后门的技术细节和功能,以及skip.2-0与winnti已知武器库(特别是portreuse后门和shadowpad)的技术相似性。

vmprotected启动程序

我们在查找vmprotected启动程序时找到了skip-2.0,其有效负载通常是portreuse或shadowpad。

嵌入式有效载荷

与加密的portreuse和shadowpad有效负载一样,skip-2.0嵌入到vmprotected启动程序中,如图1所示:

Winnti黑客组织MSSQL后门的示例分析

加密

与其他使用VMProtect启动程序的相同,有效载荷也要进行加密。该加密方式采用RC5算法,密钥由volumeID和字符串"f@ukd!RCTO R$"组成。

持久性

与portreuse和shadowpad的一样,启动程序可能会通过利用dll劫持而持续存在,方法是将其安装在c:\windows\system32\tsvipsrv.dll。这会使得系统启动时标准的Windows SessionEnv服务加载DLL。

打包器

嵌入有效负载的解密后,实际上是winnti组的自定义打包程序。这个打包器与我们在白皮书中记录的代码是相同的。该工具被用于打包PortReuse后门,并将负载嵌入到受损的视频游戏中。

配置

程序打包配置中包含解密二进制文件所需的密钥,以及原始文件的名称、大小和执行类型(exe或dll)。有效载荷配置如表1所示。

Winnti黑客组织MSSQL后门的示例分析

打包器配置可以看出,有效负载称为内部装载器。内部加载程序是一个注入器的名称,它是winnti集团的武库的一部分,用于将portreuse后门注入监听特定端口的进程。

内部加载器

这是一种内部加载程序的变体,不是像注入portreuse后门时那样寻找监听特定端口的进程,而是寻找名为sqlserv.exe的进程,这是mssql server的常规进程名。如果找到,则内部加载程序会将有效负载注入此进程。此有效负载与自定义打包程序一起打包,该打包程序的配置列于表2中。

Winnti黑客组织MSSQL后门的示例分析

此注入负载的原始文件名为skip-2.0.dll。

skip-2.0

在被内部加载程序注入并启动之后,skip-2.0首先检查它是否在sqlserv.exe进程中执行,如果是,则检索sqllang.dll的句柄,该句柄由sqlserv.exe加载。然后继续从该dll中查找并挂接多个函数。图2描述了skip-2.0的运行过程。

Winnti黑客组织MSSQL后门的示例分析

Hooking sqllang.dll

skip-2.0使用的hook过程与netagent非常相似,netagent是负责安装网络hook的portreuse模块。该hook库建立在开源的distorm反汇编程序基础上,多个开源的挂接框架也使用了该反汇编程序。需要一个反汇编库来正确计算要hook的指令的大小。几乎相同的hook过程被NetAgent和Skip-2.0使用,如下图所示。

Winnti黑客组织MSSQL后门的示例分析

a0.dev
a0.dev

专为移动端应用开发设计的AI编程平台

下载

图3Hex-Rays output comparison between the NetAgent (left) and skip-2.0 (right) hooking procedures

有一个显著的区别就是skip-2.0中的hooking函数将要安装的钩子的地址作为参数,而对于netagent,要安装的钩子的地址是硬编码的。这是因为skip-2.0必须hooksqllang.dll中的多个函数才能正常运行,而netagent只针对一个函数。

要定位hook的每个sqllang.dll函数,skip-2.0首先通过解析pe头来检索加载到内存中的dll的大小(即其虚拟大小)。接着,需初始化sqllang.dll中需要匹配的字节数组,参照图4。一旦找到与字节数组匹配的第一个匹配项的地址,就会使用图3所示的过程安装钩子。

Winnti黑客组织MSSQL后门的示例分析

然后,钩子安装成功后会在cleartext中记录,该文件位于硬编码路径c:\ windows\temp\ts\u 2ce1.tmp中,如图5所示。

Winnti黑客组织MSSQL后门的示例分析

如果找不到目标函数,钩子安装程序将搜索具有不同字节模式集的回退函数。

通过匹配字节序列来定位目标函数的地址,而不是使用静态偏移量,再加上使用字节的回退序列,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),它负责验证为给定用户提供的密码。

此函数的钩子检查用户提供的密码是否与magic密码匹配;如果是,则不会调用原始函数,钩子将返回0,从而允许连接。接下来,设立一个全局标识,由其他负责事件日志记录的钩子函数进行检查。相应的反编译过程如图6所示。在设置此全局标志的情况下,hook的日志记录函数将静默返回,而不调用其对应的原始函数,因此不会记录操作。

Winnti黑客组织MSSQL后门的示例分析

如果使用magic密码登录,reportloginsaccess和issueloginsuccessreport挂钩将不会调用原始函数。feexecutelogontriggers也适用于同样的行为。其他日志记录功能,如xesqlpkg::sql_completed::publish或xesqlpkg::sql_batch_completed::publish,在用户使用魔法密码登录的情况下也将被禁用。还禁用了多个审核事件,包括secauditpkg::audit_event::publish、xesqlpkg::login::publish和xesqlpkg::uau instrument_called::publish。

这一系列hook不仅允许攻击者通过特殊密码在受害者的mssql服务器中获得持久控制,而且使用该密码时禁用了多个日志,因此无法检测到攻击者。

研究人员对多个MSSQL Server版本测试了Skip-2.0,发现能够使用MSSQL Server 11和12的密码成功登录。为了检查skip-2.0是否针对特定的sqllang.dll版本,创建了一个yara规则,该规则可以在github库中找到。

与Winnti的联系

skip-2.0和来自winnti的其他工具有很多相似之处。vmprotected启动程序、自定义打包程序、内部加载程序和hook框架是winnti工具集的一部分。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

678

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

675

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

572

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

415

2024.04.29

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号