plsql dev引發的數據庫被黑勒索比特幣實現原理分析和解決方案

轉自http://www.xifenfei.com/2016/11/plsql-dev-hacker-bitcoin.htmlhtml

afterconnect.sql
是plsql dev登陸後自動執行腳本,非Oralce官方腳本
1linux


數據庫啓動後執行觸發器DBMS_SUPPORT_INTERNAL
2
3

DBMS_SUPPORT_INTERNAL主要的意義是:
1. 當數據庫建立時間大於1200天以後,開始備份tab$表
2. 刪除tab$中除掉owner#爲0和38的記錄(sys,xdb)
4

3. 經過SYS.DBMS_BACKUP_RESTORE.RESETCFILESECTION清理掉備份信息(v$controlfile_record_section)
4. 而後經過DBMS_SYSTEM.KSDWRT在你的alert日誌中寫上2046次的提示信息
Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.
你的數據庫已被SQL RUSH Team鎖死 發送5個比特幣到這個地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小寫一致) 以後把你的Oracle SID郵寄地址 sqlrush@mail.com 咱們將讓你知道如何解鎖你的數據庫
5. 再拋出一個前臺的和4相似的警告信息
數據庫登陸觸發器DBMS_SYSTEM_INTERNAL
6
7

當你的非SYSTEM,SYSAUX,EXAMPLE以外的全部表的最小統計信息時間大於1200天,並且非C89239.EXE程序,就會報出來」 你的數據庫已被SQL RUSH Team鎖死 發送5個比特幣到這個地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小寫一致) 以後把你的Oracle SID郵寄地址 sqlrush@mail.com 咱們將讓你知道如何解鎖你的數據庫 Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE
(case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.」的信息
數據庫登陸觸發器DBMS_CORE_INTERNAL
8
9
5

這裏比較明顯,把表名不含$,不含ORACHK,不是cluster的表放到一個遊標裏面,而後取非SYSTEM,SYSAUX,EXAMPLE以外的表空間的表的最小統計信息收集時間和當前時間比較若是大於1200天就執行truncate table操做,操做完成以後判斷若是登陸程序不爲C89239.EXE,則報出來異常,」 你的數據庫已被SQL RUSH Team鎖死 發送5個比特幣到這個地址 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE (大小寫一致) 以後把你的Oracle SID郵寄地址 sqlrush@mail.com 咱們將讓你知道如何解鎖你的數據庫 Hi buddy, your database was hacked by SQL RUSH Team, send 5 bitcoin to address 166xk1FXMB2g8JxBVF5T4Aw1Z5JaZ6vrSE
(case sensitive), after that send your Oracle SID to mail address sqlrush@mail.com, we will let you know how to unlock your database.」。

對於此次故障處理方法
1. 若是SELECT NVL(TO_CHAR(SYSDATE-MIN(LAST_ANALYZED)),0) FROM ALL_TABLES WHERE TABLESPACE_NAME NOT IN (‘SYSTEM’,'SYSAUX’,'EXAMPLE’); 小於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-MIN(LAST_ANALYZED)大於1200, SYSDATE-CREATED大於1200天未重啓,或者SYSDATE-CREATED小於1200;就是tab$還未被清理,可是表被truncate,這樣狀況能夠經過oracle原廠dul工具恢復

3. 若是SYSDATE-CREATED大於1200天,並且數據庫重啓過,可是SYSDATE-MIN(LAST_ANALYZED)小於1200天,那能夠直接經過把ORACHK’||SUBSTR(SYS_GUID,10)中備份信息插入到$tab中

4. SYSDATE-CREATED大於1200天,並且數據庫重啓過,可是SYSDATE-MIN(LAST_ANALYZED)大於1200天,Oracle 原廠dul之類工具結合ORACHK’||SUBSTR(SYS_GUID,10)備份表中數據進行恢復
dulsql


預防策略
1)數據庫裏面查詢下,若是有這些對象,及時給與清理(注意% ‘中間有空格)

 

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)建議業務用戶儘可能限制dba 權限

3)檢查相關登錄工具的自動運行腳本 清理掉有風險腳本
sqlplus中的glogin.sql/login.sql
toad中的toad.ini
plsql dev中的login.sql/afterconnect.sql

4)建議從官方下載工具,不要使用綠色版/破解版等數據庫

相關文章
相關標籤/搜索