在上期 《勒索病毒Globelmposter来袭,数据备份你做好了吗》 中,我们介绍了Globelmposter勒索病毒,以SMB、RDP协议漏洞为突破口,加密篡改用户文件,从而达到勒索的目的,其感染目标并不局限特定的应用。
本次我们再来介绍另一种专门针对数据库的勒索病毒 -- RushQL。相比Globelmposter,RushQL专门针对数据库设计、并且具备一定潜伏期和隐蔽性,危害极大。
该病毒最早被发现是捆绑在被感染的绿色版/破解版PS/SQL安装程序上,一旦用户使用此类破解版软件连接到数据库,会立即执行“Afterconnet.sql”中的代码(此文件一般在官方PL/SQL软件中是一个空文件),在数据库中创建多个存储过程和触发器。
RushQL感染后并不会立即造成数据损坏,具备一定时间的潜伏期,它会首先判断数据库创建时间是否大于1200天(比较狠,专挑运行较长时间的数据库下手)。如果大于1200天,则重启数据库后触发病毒触发器,加密并删除 sys.tab$ ,导致用户无法访问数据库中所有的数据库对象集合(schema),提示“你的数据库已经被SQL RUSH Team锁死,请发送5个比特币到这个地址……”的勒索信息(也有变种会要求以太币等),并设置定时任务,如果在期限内不交赎金,就删除所有的表
RushQL包含多个存储过程和触发器,选取其中一个PROCEDURE DBMS_SUPPORT_INTERNAL来看主要的操作为:
1. 创建并备份`sys.tab$`表的数据到表 `ORACHK || SUBSTR(SYS_GUID,10)`;
2. 删除`sys.tab$`中的数据,条件是所有表的创建者ID 在(0,38)范围(针对核心表);
3. 在你的alert日志中写上2046次勒索信息,并触发异常告警
从存储过程的内容可知,相比Globelmposter,RushQL更难防范。其行为从数据库角度看来都是再正常不过的操作(update、truncate等),因此现有所有备份手段几乎都会失效,例如Dataguard可以防护文件类感染,但遇到RushQL仍会将错误的数据进行同步;定时备份能起到一定恢复作用,但无法保证数据没有丢失等。
若是被感染且尚未满足条件发作,则处理方式很简单,只要删除4个存储过程及3个触发器、不再使用带病毒的破解/绿色软件即可:
存储过程 DBMS_SUPPORT_INTERNAL
存储过程 DBMS_STANDARD_FUN9
存储过程 DBMS_SYSTEM_INTERNA
存储过程 DBMS_CORE_INTERNAL
触发器 DBMS_SUPPORT_INTERNAL
触发器 DBMS_SYSTEM_INTERNAL
触发器 DBMS_CORE_INTERNAL
如果病毒已经生效,数据库处于被锁定状态,则需:
1. 删除4个存储过程和3个触发器
2. 检查相关登录工具的自动化脚本,清理有风险的脚本
3. 使用备份将表恢复到truncate之前,视严重程度可能要用到DUL工具
(不一定能恢复所有的表,例如truncate的空间已被使用)
由于truncate的空间有可能被再次使用,大概率会有部分数据无法恢复。但是,如果之前已经部署过QPlus-DP 数据库备份云一体机,则恢复过程十分简单,可以使用“秒级恢复”功能创建病毒发作前1秒(或指定SCN号)的历史数据库,实现无数据丢失找回被truncate的表,如图:
经过几分钟的等待,使用新创建的数据库环境、确认需要恢复的表之后再导回至生产库即可。