由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2
前言
去年分析过Oracle比特币勒索事件,通过在各大下载平台上传恶意pl/sql安装包。详细链接如下:
http://greatagain.dbappsecurity.com.cn/#/book?id=196&type_id=1
接下来分析的事件与上述事件类似,但又有不同。
同时在各下载平台上传Oracle软件的安装介质,从而替换恶意文件prvtsupp.plb,达到实现了恶意代码的注入,从而实现了数据库300天之后重启之后无法正常启动而是出现类似ORA-00600: internal error code, arguments: [16703], [1403], [20], [], [], [], [], [], [], [], [], []的错误。
No.3
故障现象
客户对数据库进程重启,重启之后数据库就无法启动,后台alert日志就报ORA-00600 [16703]错误。
进一步通过10046分析,可以发现数据库在启动过程中访问tab$和I_OBJ$的时候出现了问题。
No.4
故障原理
通过分析,发现和最近爆发的Oracle安装介质被注入恶意代码有关。
检查Oracle数据库安装目录,发现文件prvtsupp.plb文件正常和异常的多出来下面的代码:
正常的:
异常的:
可以看到异常的安装介质包中$ORACLE_HOME/rdbms/admin/prvtsupp.plb被人注入了多余的代码,创建了一个startup触发器,当数据库重启的时候,就会触发该动作。该动作会去执行一个叫DBMS_SUPPORT_DBMONITORP的存储过程。该存储过程是加密的存储过程。使用解密工具可以查看到该存储过程的内容,如下:
可以看到这段代码的内容就是当系统的当前日志>创建日期300天,就创建一个叫ORACHK开头的表对sys.tab$执行备份。同时再删除sys.tab$表。
这段代码是毁灭性的,数据库重启之后就把基表tab$删除了。再也启动不了。
No.5
解决办法
目前解决办法有两种:
1.通过bbed来恢复,这种恢复方法相当复杂。可以看到病毒对tab$表做了备份,可以通过bbed来读到ORACHK表中的块的数据,然后在还原到tab$表中的数据块上。
EXECUTE IMMEDIATE 'create table ORACHK'||SUBSTr(SYS_GUID,10)||' tablespace system as select * from sys.tab$';
2.通过DUL等抽取工具来抽取。数据量大非常耗费时间。
3.使用备份的system.dbf文件强行推进scn打开数据库,然后把数据导出来。
alter system set
"_system_trig_enabled"=false scope=both;
alter database open ;
drop TRIGGER
DBMS_SUPPORT_DBMONITOR;
drop PROCEDURE
DBMS_SUPPORT_DBMONITORP;
No.6
预防措施
1.根据软件注入的原理,需要检查文件$ORACLE_HOME/rdbms/admin/prvtsupp.plb,看看是否里面包含多余的创建触发器的代码。如果存在,需要将问题触发器和存储过程删除。
2.检查是否包含触发器
DBMS_SUPPORT_DBMONITOR和存储过程
DBMS_SUPPORT_DBMONITORP。
定期监控语句更新如下:
select 'DROP TRIGGER
'||owner||'."'||TRIGGER_NAME||'";'
from dba_triggers where
TRIGGER_NAME like
'DBMS_%_INTERNAL% '
or TRIGGER_NAME like
'DBMS_SUPPORT_DBMONITOR% '
union all
select 'DROP PROCEDURE
'||owner||'."'||a.object_name||'";'
from dba_procedures a
where a.object_name like
'DBMS_%_INTERNAL% ' or
a.object_name like
'DBMS_SUPPORT_DBMONITOR% ';
参考:http://www.xifenfei.com/2017/07/oracle-software-malicious-injection.html
閱讀更多 E安全 的文章