RushQL勒索病毒检查

来源:这里教程网 时间:2026-03-03 16:04:37 作者:

 

说明

近期,国内通过重写 PL/SQL Developer 破解版中的 AfterConnect.sql login.sql 脚本,当开发运维人员通过该工具连接 Oracle 数据库,登陆账号具有创建存储过程触发器等权限,则会自动创建一系列的存储过程和触发器,通过用户登录,数据库重启等条件,触发器调用相应的存储过程。

该病毒的主要触发条件如下:

1.       数据库创建时间是否大于 1200

2.       非系统表空间的用户表未进行统计信息收集天数是否大于 1200

3.       数据库是否重启

 

所以,该病毒有一定可能在 Oracle 数据库感染后不会立即触发删除表的动作,具有较长的潜伏期。  

 

勒索病毒针对数据库,而不会因为操作系统(类 unix windows )不同而导致病毒失效,所以在所有的 ORACLE 数据库环境,均需要预防该病毒的感染,而不考虑操作系统版本和数据库版本。  

检查方法

1 连接至 Oracle 数据库   2 复制以下 sql 执行:

-- 查询表未统计信息收集天数是否超过 1200

SELECT   NVL(TO_CHAR(SYSDATE-MIN(LAST_ANALYZED)),0) FROM DBA_TABLES WHERE   TABLESPACE_NAME NOT IN ('SYSTEM','SYSAUX','EXAMPLE');

-- 查询病毒相关的触发器和存过

select 'DROP TRIGGER   '||owner||'."'||TRIGGER_NAME||'";'

from dba_triggers

where TRIGGER_NAME like 'DBMS%INTERNAL% '

union all

select 'DROP PROCEDURE   '||owner||'."'||a.object_name||'";'

from dba_procedures a

where a.object_name like 'DBMS%INTERNAL% ';

  如果该 sql 输出一下记录,则数据库已感染病毒  

对象名

对象内容

DBMS_SUPPORT_INTERNAL

TRIGGER

DBMS_SUPPORT_INTERNAL

PROCEDURE

DBMS_SYSTEM_INTERNAL

TRIGGER

DBMS_CORE_INTERNAL

TRIGGER

DBMS_SYSTEM_INTERNAL

PROCEDURE

DBMS_CORE_INTERNAL

PROCEDURE

DBMS_STANDARD_FUN9

PROCEDURE

 

该病毒通过触发器的方式来实现对数据库的破坏 , 分为三部分 :

 

DBMS_SUPPORT_INTERNAL

该触发器为数据库启动触发 , 启动后执行如下操作

1.  检查数据库创建时间是否大于 1200 , 如果超过 1200 则创建 ORACHK 表来备份 tab$ , 此后删除 tab$ 中除掉 owner# 0 38(sys,xdb) 的行 .

2. 接着通过 dbms_backup_restore 清理整个数据库的备份信息

3. 然后通过 dbms_system alert 日志中写入相关告警提示信息

 

DBMS_SYSTEM_INTERNAL

该触发器为数据库登陆触发 , 该触发器作用主要是针对除了 SYSTEM EXAMPLE SYSAUX 三个表空间以外的对象进行统计信息最后分析时间的对比 , 如果存在 1200 天以上的表未做统计信息分析则会判断下是否属于 C89239 的客户端的进程 , 如果不是则出发事件告警 . 告知登陆用户数据库被锁定 .

 

DBMS_CORE_INTERNAL

该触发器为数据库用户登陆触发 . 在用户登陆后 , 会触发对归属于当前登陆用户的不在 SYSTEM EXAMPLE SYSAUX 表空间的表并且过滤掉带 $ 的表以及 orachk 备份表 , 簇表进行统计信息收集的时间进行收集对比 , 如果存在超过 1200 天未收集统计信息 , truncate 对应的表 ( 不是全部表 truncate, 还是有条件的 ). 然后告警 .  

处理步骤

1 如数据库创建时间( SYSDATE-CREATED )未达到 1200 天,病毒不会触发删除数据的操作。

处理办法:

直接手工删除以上的存储过程和触发器。

select 'DROP TRIGGER '||owner||'."'||TRIGGER_NAME||'";'  

from dba_triggers

where TRIGGER_NAME like 'DBMS%INTERNAL% '

union all

select 'DROP PROCEDURE   '||owner||'."'||a.object_name||'";'

from dba_procedures a

where   a.object_name like 'DBMS%INTERNAL% ';

 

2 如果数据库创建时间( SYSDATE-CREATED )大于 1200 , 数据库未重启且对应表格(不在 SYSTEM EXAMPLE SYSAUX 表空间的表)的统计信息收集时间( SYSDATE-MIN(LAST_ANALYZED) )小于 1200 天。

处理办法:

a 直接手工删除以上的存储过程和触发器。(命令详见操作 1

b 使用 DUL 恢复(不一定能恢复所有的表,如 truncate 的空间已被重用)

 

3 如果数据库创建时间( SYSDATE-CREATED )大于 1200 , 数据库已经重启且数据表未收集统计信息( SYSDATE-MIN(LAST_ANALYZED) )小于 1200 天。

a 直接手工删除以上的存储过程和触发器。

b 通过病毒的备份表 ORACHK 恢复 tab$

c 使用 DUL 恢复(不一定能恢复所有的表,如 truncate 的空间已被重用)

 

4 数据库创建日期大于 1200 且数据表未收集统计信息大于 1200 天,数据库重启过

a 删除 4 个存储过程和 3 个触发器

b 使用备份集把业务表恢复到 truncate 之前

c 通过病毒的备份表 ORACHK 恢复 tab$

d 使用 DUL 恢复(不一定能恢复所有的表,如 truncate 的空间已被使用)

   

后续步骤

建议客户自行排查连接数据库的开发运维人员的 PL/SQL Developer 安装目录,查找 afterconnect.sql login.sql 文件(文件在安装包解压后所在的目录下)。

其中 afterconnect.sql 文件默认是空白, 大小应是 0 字节,

login.sql 打开后只有一句注释“ - -Autostart Command Window script  ”,

如果这两个文件里有其他内容,怀疑是感染病毒的工具,由其确认是否为自己添加相关命令,还是病毒。

建议清空相关脚本内容。

从运维角度来说:

1 做好用户权限的控制,减少数据库被感染的风险;

2 使用正版的数据库工具

3 如果网络上下载的破解工具,检查相关登陆工具的自动运行脚本 清理掉有风险脚本

sqlplus 中的 glogin.sql/login.sql   toad 中的 toad.ini   PL/SQL Developer 中的 login.sql/afterconnect.sql

4 定期执行上述 sql ,检查数据库是否近期有被感染

5 数据库定期做备份,并建议在备份集不放在服务器本地

相关推荐