當前位置:
首頁 > 最新 > 案發現場:被注入的軟體及 ORA-600 16703 災難的恢復

案發現場:被注入的軟體及 ORA-600 16703 災難的恢復

最近幫助一個客戶恢復資料庫,遇到了如下這個問題。讓我們再一次驚醒於數據安全,如果不做好防範,問題總是會來得猝不及防。

客戶在嘗試啟動資料庫時,是這樣一個 ORA-600 錯誤映入眼帘,反覆重試無法消除問題,歷史備份,同樣存在問題,客戶毫無防範的,陷入一場資料庫災難:

SQL*Plus: Release 11.2.0.4.0 Production on Fri Jul 20 22:12:34 2018

Copyright (c) 1982, 2013, Oracle. All rights reserved.

Connected to an idle instance.

SQL> startup mount;

ORACLE instance started.

Database mounted.

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-00704: bootstrap process failure

ORA-00704: bootstrap process failure

ORA-00600: internal error code, arguments: [16703], [1403], [20], [], [], [],

[], [], [], [], [], []

Process ID: 1236

Session ID: 1 Serial number: 5

按照我的思路,第一步是啟用 10046 跟蹤一下問題的出現位置:

從跟蹤文件中,可以找到如下信息,最後執行的是 obj$ 的對象訪問,綁定變數傳入值是 20 ,

PARSING IN CURSOR #605191324len=188 dep=1 uid=0 oct=1 lid=0 tim=77597981 hv=4006182593 ad="23987650" sqlid="32r4f1brckzq1"

create table bootstrap$ (

END OF STMT

PARSE #605191324:c=0,e=372,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,plh=0,tim=77597979

EXEC #605191324:c=0,e=78,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,plh=0,tim=77598086

CLOSE #605191324:c=0,e=4,dep=1,type=0,tim=77598125

在這個遞歸過程中,取得所有引導資料庫啟動所需SQL,然後再順序載入內容,完成內存初始化。

最後出現錯誤之處是 20 號對象,在資料庫中是 ICOL$ 對象:

SQL> select object_name from dba_objects where object_id=20;

OBJECT_NAME

--------------------------------------------------------------

ICOL$

在 bootstrap$ 中,可以找到這條記錄,在初始化這個對象的過程中,資料庫在 TAB$ 中找不到這條記錄,就出現了 16703 的錯誤:

CREATE TABLE ICOL$("OBJ#" NUMBER NOT NULL,"BO#" NUMBER NOT NULL,"COL#" NUMBER NOT NULL,"POS#" NUMBER NOT NULL,"SEGCOL#" NUMBER NOT NULL,"SEGCOLLENGTH" NUMBER NOT NULL,"OFFSET" NUMBER NOT NULL,"INTCOL#" NUMBER NOT NULL,"SPARE1" NUMBER,"SPARE2" NUMBER,"SPARE3" NUMBER,"SPARE4" VARCHAR2(1000),"SPARE5" VARCHAR2(1000),"SPARE6" DATE) STORAGE (OBJNO 20 TABNO 4) CLUSTER C_OBJ#(BO#)

在進程的轉儲文件中,也可以看懂對於 TAB$ 的遞歸訪問,綁定變數是 20 :

再來看看 ORA-600 錯誤,幾個參數含義如下:1403 指記錄未發現;20 指對象號:

ORA-00600: internal error code, arguments: [16703], [1403], [20], [], [], [],

[], [], [], [], [], []

$ oerr ora 1403

01403, 00000, "no data found"

// *Cause: No data was found from the objects.

// *Action: There was no data from the objects which may be due to end of fetch.

所以,現在問題很清楚了,是因為 20 號對象遞歸時找不到,這是被惡意刪除了。

這就是此前曾經被披露的,資料庫安裝介質被注入的問題,惜分飛曾經記錄過這個問題。

強烈警示:在下載Oracle安裝介質時,一定要從可靠來源下載,Oracle 官網是最佳途徑。當從未知來源獲得安裝軟體時,你就可能面臨著注入風險。這一次的客戶就是遭遇到了這個問題的威脅。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲和恩墨 的精彩文章:

觸類旁通:那些關於 TBL$OR$IDX$PART$NUM 的詭異案例和知識

TAG:雲和恩墨 |