RushQL勒索病毒檢查

yingyifeng306發表於2020-08-11

 

說明

近期,國內透過重寫 PL/SQL Developer 破解版中的 AfterConnect.sql login.sql 指令碼,當開發運維人員透過該工具連線 Oracle 資料庫,登陸賬號具有建立儲存過程觸發器等許可權,則會自動建立一系列的儲存過程和觸發器,透過使用者登入,資料庫重啟等條件,觸發器呼叫相應的儲存過程。

該病毒的主要觸發條件如下:

1.       資料庫建立時間是否大於 1200

2.       非系統表空間的使用者表未進行統計資訊收集天數是否大於 1200

3.       資料庫是否重啟

 

所以,該病毒有一定可能在 Oracle 資料庫感染後不會立即觸發刪除表的動作,具有較長的潛伏期。  

 

勒索病毒針對資料庫,而不會因為作業系統(類 unix windows )不同而導致病毒失效,所以在所有的 ORACLE 資料庫環境,均需要預防該病毒的感染,而不考慮作業系統版本和資料庫版本。


 

檢查方法

1 連線至 Oracle 資料庫

 

2 複製以下 sql 執行:

-- 查詢表未統計資訊收集天數是否超過 1200

SELECT   NVL(TO_CHAR(SYSDATE-MIN(LAST_ANALYZED)),0) FROM DBA_TABLES WHERE   TABLESPACE_NAME NOT IN ('SYSTEM','SYSAUX','EXAMPLE');

-- 查詢病毒相關的觸發器和存過

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% ';

 

如果該 sql 輸出一下記錄,則資料庫已感染病毒

 

物件名

物件內容

DBMS_SUPPORT_INTERNAL

TRIGGER

DBMS_SUPPORT_INTERNAL

PROCEDURE

DBMS_SYSTEM_INTERNAL

TRIGGER

DBMS_CORE_INTERNAL

TRIGGER

DBMS_SYSTEM_INTERNAL

PROCEDURE

DBMS_CORE_INTERNAL

PROCEDURE

DBMS_STANDARD_FUN9

PROCEDURE

 

該病毒透過觸發器的方式來實現對資料庫的破壞 , 分為三部分 :

 

DBMS_SUPPORT_INTERNAL

該觸發器為資料庫啟動觸發 , 啟動後執行如下操作

1.  檢查資料庫建立時間是否大於 1200 , 如果超過 1200 則建立 ORACHK 表來備份 tab$ , 此後刪除 tab$ 中除掉 owner# 0 38(sys,xdb) 的行 .

2. 接著透過 dbms_backup_restore 清理整個資料庫的備份資訊

3. 然後透過 dbms_system alert 日誌中寫入相關告警提示資訊

 

DBMS_SYSTEM_INTERNAL

該觸發器為資料庫登陸觸發 , 該觸發器作用主要是針對除了 SYSTEM EXAMPLE SYSAUX 三個表空間以外的物件進行統計資訊最後分析時間的對比 , 如果存在 1200 天以上的表未做統計資訊分析則會判斷下是否屬於 C89239 的客戶端的程式 , 如果不是則出發事件告警 . 告知登陸使用者資料庫被鎖定 .

 

DBMS_CORE_INTERNAL

該觸發器為資料庫使用者登陸觸發 . 在使用者登陸後 , 會觸發對歸屬於當前登陸使用者的不在 SYSTEM EXAMPLE SYSAUX 表空間的表並且過濾掉帶 $ 的表以及 orachk 備份表 , 簇表進行統計資訊收集的時間進行收集對比 , 如果存在超過 1200 天未收集統計資訊 , truncate 對應的表 ( 不是全部表 truncate, 還是有條件的 ). 然後告警 .


 

處理步驟

1 如資料庫建立時間( SYSDATE-CREATED )未達到 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-CREATED )大於 1200 , 資料庫未重啟且對應表格(不在 SYSTEM EXAMPLE SYSAUX 表空間的表)的統計資訊收集時間( SYSDATE-MIN(LAST_ANALYZED) )小於 1200 天。

處理辦法:

a 直接手工刪除以上的儲存過程和觸發器。(命令詳見操作 1

b 使用 DUL 恢復(不一定能恢復所有的表,如 truncate 的空間已被重用)

 

3 如果資料庫建立時間( SYSDATE-CREATED )大於 1200 , 資料庫已經重啟且資料表未收集統計資訊( SYSDATE-MIN(LAST_ANALYZED) )小於 1200 天。

a 直接手工刪除以上的儲存過程和觸發器。

b 透過病毒的備份表 ORACHK 恢復 tab$

c 使用 DUL 恢復(不一定能恢復所有的表,如 truncate 的空間已被重用)

 

4 資料庫建立日期大於 1200 且資料表未收集統計資訊大於 1200 天,資料庫重啟過

a 刪除 4 個儲存過程和 3 個觸發器

b 使用備份集把業務表恢復到 truncate 之前

c 透過病毒的備份表 ORACHK 恢復 tab$

d 使用 DUL 恢復(不一定能恢復所有的表,如 truncate 的空間已被使用)

 


 

後續步驟

建議客戶自行排查連線資料庫的開發運維人員的 PL/SQL Developer 安裝目錄,查詢 afterconnect.sql login.sql 檔案(檔案在安裝包解壓後所在的目錄下)。

其中 afterconnect.sql 檔案預設是空白, 大小應是 0 位元組,

login.sql 開啟後只有一句註釋“ - -Autostart Command Window script  ”,

如果這兩個檔案裡有其他內容,懷疑是感染病毒的工具,由其確認是否為自己新增相關命令,還是病毒。

建議清空相關指令碼內容。

從運維角度來說:

1 做好使用者許可權的控制,減少資料庫被感染的風險;

2 使用正版的資料庫工具

3 如果網路上下載的破解工具,檢查相關登陸工具的自動執行指令碼 清理掉有風險指令碼

sqlplus 中的 glogin.sql/login.sql
  toad
中的 toad.ini
 
PL/SQL Developer 中的 login.sql/afterconnect.sql

4 定期執行上述 sql ,檢查資料庫是否近期有被感染

5 資料庫定期做備份,並建議在備份集不放在伺服器本地


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23732248/viewspace-2710655/,如需轉載,請註明出處,否則將追究法律責任。

相關文章