记一次Oracle数据库比特币勒索病毒的处理

下午的时候SQL开发的同事在故障处理群中发出截图,表示数据库中毒了
记一次Oracle数据库比特币勒索病毒的处理_第1张图片
第一反应是:怎么又是比特币勒索病毒

第一时间询问是哪个库,同事反映是一个测试库,当时就感到小小的庆幸

之前处理过一次比特币勒索病毒事件,个人经验,先禁用掉JOB进程。

  1. 防止病毒通过JOB运行存储过程,使存储过程处于占用状态,导致存储过程无法删除
  2. 中毒后病毒会在dba_jobs中建立大量JOB,JOB的内容就是truncate表
#将该参数设置为0前,建议先查一下该参数的值,以便处理后恢复参数的值
alter system set job_queue_processes=0;

然后检查数据库中疑似病毒的存储过程:

select owner,object_name,object_type from dba_objects where object_name like 'DBMS_SYSTEM_INTERNAL%';
select owner,object_name,object_type from dba_objects where object_name like 'DBMS_SUPPORT_INTERNAL%';
select owner,object_name,object_type from dba_objects where object_name like 'DBMS_CORE_INTERNAL%';
select owner,object_name,object_type from dba_objects where object_name like 'DBMS_STANDARD_FUN9%';

以下为病毒存储过程(已经被加密了)和触发器(DBMS_CORE_INTERNAL的存储过程被我手快处理掉了,没留下截图…)
记一次Oracle数据库比特币勒索病毒的处理_第2张图片
还有一个过程(这个有时候会被忽视):
记一次Oracle数据库比特币勒索病毒的处理_第3张图片
共计4个存储过程,3个触发器
其存储过程和触发器的命名特点是"DBMS_XXXX_INTERNAL "注意这个地方,名字之后有一串空白字符,如果你删除该对象时只写了前面,数据库会提示对象不存在,造成你能看到存储过程却无法删除的假象
我通过使用SQL-Developer找到对应过程或者是触发器,然后查看内容,直接复制粘贴对象名进行删除,或者直接右键删除
既然找到问题的存储过程,你就可以进行处理了
将问题存储过程和触发器干掉后,检查一下dba_jobs表,你会发现,你的中毒用户已经在里面创建了N多JOB,我这次中毒,dba_jobs表中多了300万条JOB,每条JOB都是truncate表的动作
这个JOB的删除需要到JOB的创建用户下,根据JOB的ID进行删除JOB
我们数据库使用的JOB都是scheduler job,都在dba_scheduler_jobs表中,所以在dba_jobs中该用户所建的JOB全是病毒创建的JOB

select 'exec dbms_job.remove('||job||');' from dba_jobs where  log_user='XXX'

连接中毒用户,通过以上SQL生成SQL脚本对JOB进行删除
然后commit提交,提交后,删除动作才生效
整理中毒用户权限,将一些较大的权限收回(这个测试用户之前给的是DBA权限,呵-呵-)
恢复JOB进程参数的值
观察alert日志,看看有么有问题遗漏。

后记:(已验证,中毒的那一刻,一些表已经被truncate掉了,跟FUN9处理环节无关)
本人在处理问题存储过程的时候遗漏了FUN9的那个存储过程,恢复JOB进程参数后,发现alert日志大量刷新,才找到这个存储过程的。本以为所有的表都被清空了,但SQL开发的同事反映表中依旧有数据,我也统计了该用户下的表的数据,发现也有好多表的数据量为0。怀疑可能是FUN9那个环节处理的有问题导致一部分表被truncate掉了。

补充:
很不幸,时隔2天,这个测试机又中毒了,趁此机会观察一下中毒后产生的JOB
记一次Oracle数据库比特币勒索病毒的处理_第4张图片
可以发现这个JOB是通过一个病毒相关的存储过程传入truncate表的参数
我在结果里随机抽取了几个表查了一下,表已经被truncate掉了
也有开发的同事反应昨晚刚导入的测试数据,今天就没了,所以…
当你发现数据库中毒的时候已经晚了

以上内容仅为本人处理比特币勒索病毒的小结,请各位同行在处理该事件时一定要谨慎

个人认为以下规范可以有效预防比特币勒索病毒:

  1. 比特币勒索病毒有潜伏期,可以在每日巡检数据库时增加疑似异常过程的检查
  2. 在赋予用户权限的时候一定要慎重(如果该用户只有connect权限估计病毒也玩不转)
  3. 第三方工具最好使用正版工具(之前就说有SQL-Developer的Afterconnect.sql脚本中有携带病毒,防不胜防)
  4. 周期性的有效备份(备份在手,啥也不怕)

找到一个关于比特币勒索病毒存储过程相关内容的文章:
以供大家参考
http://www.xifenfei.com/2016/11/plsql-dev-hacker-bitcoin.html
各存储过程功能解析
http://www.sohu.com/a/278602441_100216380

小子初来乍到,如有写的不好的地方还望各位大佬指正

你可能感兴趣的:(Oracle)