轉自http://www.xifenfei.com/2016/11/plsql-dev-hacker-bitcoin.html
afterconnect.sql
是plsql dev登錄后自動執行腳本,非Oralce官方腳本
數據庫啟動后執行觸發器DBMS_SUPPORT_INTERNAL


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

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


當你的非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



這里比較明顯,把表名不含$,不含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)備份表中數據進行恢復
預防策略
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)建議從官方下載工具,不要使用綠色版/破解版等