以前检测到客户的一台数据库服务器中出现了 RushQL 病毒,进行处理后可正常使用该数据库,将中毒原因和处理过程记录如下:
一、 RushQL 病毒简介
RushQL是一种针对Oracle数据库精心设计的勒索软件,它具有潜伏性和隐蔽性特点。该恶意软件由“SQL RUSH Team”团伙发起攻击,第一次现身于2016年11月。其传播途径主要是通过篡改非法版本的PL/SQL中的login.sql和Afterconnect.sql脚本。在使用这些脚本之前,用户应当仔细检查它们,如果文件大小非零,则极有可能已经被恶意修改。一旦执行了这些被篡改的脚本,数据库中将悄无声息地植入以下存储过程和触发器 :
存储过程:
DBMS_SUPPORT_INTERNAL
DBMS_STANDARD_FUN9
DBMS_SYSTEM_INTERNA
DBMS_CORE_INTERNAL
触发器:
DBMS_SUPPORT_INTERNAL
DBMS_SYSTEM_INTERNAL
DBMS_CORE_INTERNAL
二、中毒表现
一旦RushQL病毒感染了Oracle数据库,它会首先检查数据库的创建时间是否已超过1200天。如果未达到这一时间阈值,病毒将保持潜伏状态,不露出任何痕迹。然而,一旦数据库的年龄达到或超过1200天,病毒便会触发其破坏性功能。在病毒爆发的情况下,当用户尝试通过PL/SQL或navicat客户端软件连接数据库时,将会遭遇以下状况 :

三、病毒检测
受RushQL病毒感染的Oracle数据库将包含之前提到的存储过程和触发器。病毒的制作者地在这些存储过程和触发器的名称中插入了多个空格,这一策略使得它们在常规查询中难以被发现和移除。为了有效地搜索和删除这些恶意元素,用户在执行查询和删除操作时必须使用通配符来匹配名称中的额外空格 :
查询语句:
SELECT owner,created,object_name,object_type FROM dba_objects WHERE object_name LIKE '%DBMS_SUPPORT%'; SELECT owner,created,object_name,object_type FROM dba_objects WHERE object_name LIKE '%DBMS_SYSTEM_INTERNAL%'; SELECT owner,created,object_name,object_type FROM dba_objects WHERE object_name LIKE '%DBMS_CORE_INTERNAL%'; SELECT owner,created,object_name,object_type FROM dba_objects WHERE object_name LIKE '%DBMS_STANDARD_FUN9%';
在RushQL病毒未爆发的情况下,可以通过特定的查询来检测数据库中是否存在上述提到的存储过程和触发器。而在病毒爆发后,除了这些存储过程和触发器,数据库中还会出现大量的truncate jobs,这些作业会产生大量的日志文件,进而导致数据库空间迅速被占满,最终可能导致数据库目录空间不足,服务被迫中断 。
检测异常 job 的语句:
SELECT COUNT(*) FROM dba_jobs WHERE schema_user='username' AND what LIKE '%truncate%';
username 为上述查询结果中的 owner
四、病毒处理
1 、删除上述存储过程和触发器:
DROP PROCEDURE %DBMS_SUPPORT_INTERNAL%; DROP PROCEDURE %DBMS_STANDARD_FUN9%; DROP PROCEDURE %DBMS_SYSTEM_INTERNA%; DROP PROCEDURE %DBMS_CORE_INTERNAL%; DROP TRIGGER %DBMS_SUPPORT_INTERNAL%; DROP TRIGGER %DBMS_SYSTEM_INTERNAL%; DROP TRIGGER %DBMS_CORE_INTERNAL%;
2 、删除异常的 jobs :
DELETE FROM dba_jobs WHERE schema_user='username' AND what LIKE '%truncate%';
3 、删除 trace 日志、 alter 日志、归档日志等,腾出数据空间。
