姜 文,劉立康
(1.文思海輝技術(shù)有限公司西安分公司 陜西 西安710075;2.西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安710071)
Oracle數(shù)據(jù)庫(kù)是一個(gè)對(duì)象一關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。它提供開放的、全面的、和集成的信息管理方法。Oracle數(shù)據(jù)庫(kù)具有場(chǎng)地自治性(Site Autonomy)和實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)透明性。由于這些特性,Oracle數(shù)據(jù)庫(kù)各組件存在安全漏洞[1],漏洞可能會(huì)被各種類型的所協(xié)議利用,使未經(jīng)身份驗(yàn)證的遠(yuǎn)程攻擊者可利用漏洞影響Oracle數(shù)據(jù)庫(kù)各版本的機(jī)密性、完整性、可用性。同時(shí)數(shù)據(jù)庫(kù)在用戶使用過程中會(huì)不斷暴露各種功能和性能BUG,也會(huì)影響Oracle數(shù)據(jù)庫(kù)的正常使用。
為了解決這些問題,Oracle的技術(shù)人員編寫各種補(bǔ)丁。除去修改功能和性能BUG的補(bǔ)丁,還有應(yīng)對(duì)安全漏洞的安全補(bǔ)丁。Oracle官方網(wǎng)站會(huì)定期向用戶提供不同版本和不同操作系統(tǒng)環(huán)境下的Oracle補(bǔ)丁。
文中詳細(xì)敘述了Oracle數(shù)據(jù)庫(kù)補(bǔ)丁類別和各類補(bǔ)丁的特點(diǎn),Oracle補(bǔ)丁管理工具Opatch,最后介紹一個(gè)實(shí)施Oracle安全補(bǔ)丁的安裝實(shí)例。實(shí)際應(yīng)用表明及時(shí)實(shí)施補(bǔ)丁安裝可以確保Oracle數(shù)據(jù)庫(kù)系統(tǒng)安全穩(wěn)定運(yùn)行。
Oracle數(shù)據(jù)庫(kù)的補(bǔ)丁通常有以下幾種[2-6]。
PSR(Patch Set Release)是按 Oracle數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)產(chǎn)品發(fā)布“補(bǔ)丁包“。Oracle數(shù)據(jù)庫(kù)的主要版本號(hào)是8i,9i,10g,11g,每一版本會(huì)陸續(xù)有兩至三個(gè)發(fā)行版,如 10.1,10.2,和 11.1,11.2分別是10g和11g的兩個(gè)發(fā)行版。對(duì)于每一個(gè)發(fā)行版軟件中發(fā)現(xiàn)的BUG,給出相應(yīng)的修復(fù)補(bǔ)丁。每隔一定時(shí)期,會(huì)將所有補(bǔ)丁集成到軟件中,經(jīng)過集成測(cè)試后,進(jìn)行發(fā)布,也稱為PSR(Patch Set Release)。
Oracle公司對(duì)處于標(biāo)準(zhǔn)技術(shù)支持的產(chǎn)品不定期地提供PSR,每個(gè)PSR修改5位版本號(hào)的第4位。以11.1為例,11.1.0.1.0是基礎(chǔ)發(fā)行版,11.1的PSR為11.1.0.4.0。
這些在主版本號(hào)上發(fā)布的補(bǔ)丁集,修復(fù)了較多的Bug,可能會(huì)包含一些增強(qiáng)功能(Enhancement)。比如11.2.0.1是一個(gè)主版本,那么11.2.0.2、11.2.0.3就是2個(gè)不同的Patch set。這種補(bǔ)丁集經(jīng)過了嚴(yán)格的集成測(cè)試,也是累積型的,推薦安裝最新的Patch Set。
由于數(shù)據(jù)庫(kù)在信息系統(tǒng)的核心地位,對(duì)其性能和安全性的要求非常高。應(yīng)及時(shí)安裝所有重要補(bǔ)?。↖nterim Patch),但是這些補(bǔ)?。↖nterim Patch)之間可能相互影響,從而影響系統(tǒng)的性能。而等待下一個(gè)版本PSR,一般又需要一年時(shí)間。因此,出現(xiàn)了 PSU(Patch Set Update)。
PSU具有如下特點(diǎn):
1)Oracle選取被用戶下載數(shù)量多的,并且被驗(yàn)證過具有較低風(fēng)險(xiǎn)的補(bǔ)丁放入每個(gè)季度的PSU中。每個(gè)PSU中包含25至100個(gè)重要補(bǔ)丁,作為一個(gè)整體進(jìn)行嚴(yán)格測(cè)試,解決沖突問題,保證系統(tǒng)的穩(wěn)定性。PSU不僅包括對(duì)功能、性能修復(fù)的一般補(bǔ)丁,也包括最新的安全補(bǔ)丁CPU。
2)PSU是PSR的補(bǔ)充,在兩次PSR發(fā)布之間發(fā)布多個(gè)PSU,加快更新速度。每個(gè)PSU修改5位版本號(hào)的第5位。每個(gè)數(shù)據(jù)庫(kù)版本都有自己的PSU,PSU版本號(hào)體現(xiàn)在數(shù)據(jù)庫(kù)版本的最后一位,比如10.2.0.5的PSU是10.2.0.5.3,而11.2.0.2的PSU則是11.2.0.2.2。
3)PSU定期(一年四期)發(fā)布,發(fā)布日期與CPU發(fā)布日期相同。由于PSU包括同期發(fā)布的CPU,只要安裝PSU即可。(對(duì)部分平臺(tái),仍提供單獨(dú)的CPU,供客戶選擇)
4)PSU是累積型的,最新的PSU自動(dòng)包括以前所有PSU的內(nèi)容。
5)個(gè)別補(bǔ)?。↖nterim Patch)與PSU的關(guān)系分為三類:完全獨(dú)立;是PSU的一部分;與PSU沖突。第一類的個(gè)別補(bǔ)丁與PSU相互沒有影響,可以獨(dú)立的安裝或刪除。對(duì)于第二類,在安裝PSU之后,自然沒有必要安裝。若在PSU之前已安裝,則在安裝PSU時(shí)會(huì)被自動(dòng)刪除。對(duì)于第三類個(gè)別補(bǔ)丁,如在PSU之前已安裝,必須在安裝PSU時(shí)刪除。
除去修改功能和性能BUG的補(bǔ)丁,還有應(yīng)對(duì)安全漏洞的安全補(bǔ)丁。Oracle公司定期(一年四期)發(fā)布安全補(bǔ)丁集,稱之為CPU(Critical Patch Updates)。安全補(bǔ)丁用來(lái)修復(fù)軟件的安全漏洞。這類問題本來(lái)不屬于軟件錯(cuò)誤,在正常使用中不會(huì)出現(xiàn)任何問題。但是別有用心的人可以通過運(yùn)行非常精巧設(shè)計(jì)的代碼,繞過數(shù)據(jù)庫(kù)系統(tǒng)的安全管理機(jī)制,達(dá)到非授權(quán)存取的目的。一個(gè)CPU內(nèi)包含了對(duì)多個(gè)安全漏洞的修復(fù),并且也包括相應(yīng)必需的非安全漏洞的補(bǔ)丁。CPU是累積型的,其中包括之前發(fā)布的所有CPU的內(nèi)容。
Oracle公司只對(duì)處于標(biāo)準(zhǔn)技術(shù)支持和延長(zhǎng)支持期間的產(chǎn)品提供CPU更新,對(duì)處于維持支持范圍的產(chǎn)品不提供新的CPU.(對(duì)于9.2以前的版本,只對(duì)處于ECS和EMS期間的版本提供CPU更新。)
2012年10月CPU (Critical Patch Update)已經(jīng)更名為Security Patch Update(SPU)
Interim Patch是常說(shuō)的小補(bǔ)丁,也稱為個(gè)別補(bǔ)?。╫neoff patch 或 Patch Set Exception)。
由于PSR的發(fā)行有一定間隔,如果有些Bug對(duì)用戶有比較大的影響,Oracle公司也會(huì)向用戶公開和提供這些補(bǔ)丁,而對(duì)于最終補(bǔ)丁發(fā)行版而言,由于不再有下一個(gè)PSR,當(dāng)發(fā)現(xiàn)影響系統(tǒng)的新Bug時(shí),個(gè)別補(bǔ)丁成為唯一選擇。
在某個(gè)PSR之后編寫的補(bǔ)丁,在還沒有加入到下一個(gè)PSR之前,以個(gè)別補(bǔ)?。↖nterim Patch)的形式提供給客戶。某個(gè)個(gè)別補(bǔ)丁是針對(duì)Oracle公司發(fā)現(xiàn)的或客戶報(bào)告的某一個(gè)BUG編寫的補(bǔ)丁,多個(gè)個(gè)別補(bǔ)丁之間同時(shí)安裝可能會(huì)有沖突。即便在安裝時(shí)沒有發(fā)現(xiàn)沖突,由于沒有進(jìn)行嚴(yán)格的集成測(cè)試,運(yùn)行過程中由于相互作用而發(fā)生意外也不能完全排除。這種補(bǔ)丁推薦在測(cè)試庫(kù)上測(cè)試無(wú)誤后再安裝在數(shù)據(jù)庫(kù)上。
個(gè)別補(bǔ)丁 (Interim Patch)是針對(duì)特定的情況下觸發(fā)的Bug,沒有經(jīng)過Oracle系統(tǒng)的認(rèn)證,Oracle會(huì)根據(jù)Bug的嚴(yán)重性和需要在下一次的patch set中包含此Interim patch。Interim patch對(duì)環(huán)境和版本有特定的要求,即不同操作系統(tǒng)平臺(tái)和數(shù)據(jù)庫(kù)版本的會(huì)有不同的Interim patch。
從2012年4月份的 Database PSU 11.2.0.3.2和11.2.0.2.0.7開始,推出一種新的概念叫Composite Patches。這是一種新型的補(bǔ)丁包,它不同于其他的累積型補(bǔ)丁包。如果是第一次安裝Composite Patches,那么該Composite Patches所包括的全部補(bǔ)丁都會(huì)被安裝,后續(xù)安裝的Composite Patches,只會(huì)安裝對(duì)比前一次Composite Patches有變化的部分和新增加的補(bǔ)丁。
Composite Patche的改進(jìn)包括減少補(bǔ)丁安裝時(shí)間,減少回滾以前應(yīng)用的overlay patches的需要。 新的Composite Patches格式,使以前PSU應(yīng)用的overlay patches和新安裝的PSU并存成為可能。
診斷用補(bǔ)?。╠iagnostic patch)不是用來(lái)解決問題的,而是用來(lái)尋找問題。這類補(bǔ)丁只在Oracle技術(shù)支持部門要求安裝時(shí),才需要安裝。在得到需要的診斷信息后,應(yīng)立即卸載這一補(bǔ)丁。
從9.2版開始,Oracle公司設(shè)計(jì)實(shí)現(xiàn)了個(gè)別補(bǔ)?。↖nterim Patch)安裝管理工具Opatch[7-8],使用稱為 inventory的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)(嚴(yán)格說(shuō)是與oui共享inventory),集中管理所有已安裝的個(gè)別補(bǔ)??;個(gè)別補(bǔ)丁的安裝和卸載都使用Opatch命令完成,沖突檢測(cè)也由Opatch在安裝時(shí)自動(dòng)完成;提供列表命令可以很方便得到已安裝個(gè)別補(bǔ)丁的信息。10g(10.1)和11g(11.1)版本中,Opatch作為一個(gè)標(biāo)準(zhǔn)工具,在軟件安裝時(shí)自動(dòng)安裝。(安裝在$ORACLE_HOME/OPatch下。)而對(duì)于9.2版,需要從metalink下載Opatch。無(wú)論數(shù)據(jù)庫(kù)是哪一個(gè)版本,系統(tǒng)中是否已經(jīng)安裝Opatch,在使用之前,應(yīng)從metalink下載最新版本的Opatch。由于系統(tǒng)實(shí)現(xiàn)的問題,11.1使用的Opatch與之前版本(10.1和9.2)使用的Opatch不兼容,不能混用。
Opatch命令的存放位置在$ORACLE_HOME下的Opatch目錄下。
Opatch命令格式為:
Opatch
命令有:apply(安裝個(gè)別補(bǔ)?。?、rollback(卸載個(gè)別補(bǔ)?。sinventory(對(duì) inventory 進(jìn)行列表)、query(顯示某一個(gè)別補(bǔ)丁的詳細(xì)信息)、version(顯示Opatch版本信息)。在 Opatch目錄下,有用戶使用指南文件(Users_Guide.txt),其中有詳細(xì)的命令格式和使用示例。Opatch執(zhí)行操作時(shí),除在屏幕輸出結(jié)果外,還生成日志文件。
Opatch也用于安裝管理PSU補(bǔ)丁和CPU安全補(bǔ)丁。
本文環(huán)境為:Suse Linux 10 x86,Oracle 11g,Oracle 數(shù)據(jù)庫(kù)版本為11.1.0.7.0。Oracle數(shù)據(jù)庫(kù)自帶的補(bǔ)丁管理工具是Opatch,工具的版本是11.1.0.6.0。本文選擇的補(bǔ)丁是安全補(bǔ)丁CPU-Oct-2012(2012年10月Oracle公司發(fā)布的CPU補(bǔ)?。?,對(duì)應(yīng)的安裝包是:p14275623_111070_LINUX.zip。實(shí)施安裝步驟為Oracle系統(tǒng)漏洞掃描,Opatch工具升級(jí)和Oracle補(bǔ)丁安裝。
綠盟遠(yuǎn)程安全評(píng)估系統(tǒng) (NSFOCUS Remote Security Assessment System, 簡(jiǎn)稱:NSFOCUSRSAS)是一個(gè)好的“漏洞管理專家”,使用綠盟掃描軟件對(duì)Oracle系統(tǒng)進(jìn)行掃描,可發(fā)現(xiàn)表1所示的漏洞。
表1 綠盟掃描漏洞列表Tab.1 The table of the vulnerabilities to the NSFOCUSRSAS
CVE的 英 文 全 稱 是 “Common Vulnerabilities&Exposures”公共漏洞和暴露。CVE就像是一個(gè)字典表,CVE是安全信息共享的“關(guān)鍵字”。如果在漏洞報(bào)告中指明的漏洞有CVE名稱,就可以快速地在任何其它CVE兼容的數(shù)據(jù)庫(kù)中找到相應(yīng)修補(bǔ)的信息,解決安全問題。
綠盟掃描結(jié)束之后,會(huì)生成一個(gè)掃描報(bào)告,對(duì)掃描出來(lái)的每一條漏洞都會(huì)給出相應(yīng)的受影響Oracle數(shù)據(jù)庫(kù)版本號(hào)、相應(yīng)的漏洞描述以及解決建議。用戶可以根據(jù)掃描報(bào)告給出的建議來(lái)改進(jìn)自己的系統(tǒng)。
使用Opatch工具打CPU補(bǔ)丁,升級(jí)數(shù)據(jù)庫(kù)到11.1.0.7.x時(shí),就必須要求Opatch的版本達(dá)到11.1.0.8.0以上,而目前的Opatch的版本是11.1.0.6.0達(dá)不到所需的要求。如果不升級(jí)Opatch工具的版本就直接使用原有的Opatch工具實(shí)施安全補(bǔ)丁安裝,實(shí)施過程中會(huì)出現(xiàn):Opatch failed with error code 73,提示Opatch工具的版本過低。
更新Opatch工具需要從Oracle官方網(wǎng)站上下載高版本的Opatch。本文下載的Opatch安裝包為p6889880_111070_LINUX.zip,Opatch安裝包解壓后覆蓋到 ORACLE_HOME下的Opatch目錄。 當(dāng)然覆蓋之前,最好將原有的Opatch工具備份一下。升級(jí)后的Opatch工具的版本是11.1.0.9.9。
實(shí)施Oracle補(bǔ)丁安裝步驟如下所示:
1)確認(rèn)Oracle數(shù)據(jù)庫(kù)與監(jiān)聽已經(jīng)關(guān)閉,分別執(zhí)行指令lsnrctl status查看監(jiān)聽是否已經(jīng)停止,以及執(zhí)行指令ps-ef|grep oracle查看Oracle數(shù)據(jù)庫(kù)是否還有進(jìn)程在啟動(dòng)中,如果還有進(jìn)程未停止,則執(zhí)行指令:kill-9進(jìn)程號(hào),殺掉未停止的進(jìn)程。如果在仍有進(jìn)程處于未停止的狀態(tài)下,就實(shí)施Oracle安全補(bǔ)丁安裝,實(shí)施過程中會(huì)出現(xiàn):Opatch failed with error code 42,提示Oracle數(shù)據(jù)庫(kù)未停止;
2)將Oracle安全補(bǔ)丁安裝包p14275623_111070_LINUX.zip拷貝至 opt路徑下, 使用指令 unzip 14275623_111070_LINUX.zip解壓Oracle安全補(bǔ)丁安裝包;
3)在/opt/14275623路徑下執(zhí)行指令$ORACLE_HOME/Opatch apply,安裝Oracle安全補(bǔ)丁14275623,執(zhí)行結(jié)果顯示如下內(nèi)容(由于顯示內(nèi)容過多就不全部列出)。顯示結(jié)果主要包括如下內(nèi)容:
1)Oracle數(shù)據(jù)庫(kù)相關(guān)目錄的配置信息。
2)Opatch工具的版本信息:11.1.0.9.9和OUI版本信息:11.1.0.7.0。
3)Log文件的定位信息和輸出文件的定位信息。
4)Oracle數(shù)據(jù)庫(kù)的版本信息:Oracle Database 11g 11.1.0.6.0和打補(bǔ)丁后的版本信息:Oracle Database 11g Patch Set 1 11.1.0.7.0。
5)補(bǔ)?。≒atch)的相關(guān)信息和修復(fù)Bugs的編號(hào)。6)Opatch succeeded。
實(shí)施安全補(bǔ)丁之后,再次使用綠盟軟件對(duì)系統(tǒng)進(jìn)行掃描,發(fā)現(xiàn)之前掃描出來(lái)的Oracle數(shù)據(jù)庫(kù)安全漏洞已經(jīng)不存在了。由此可見實(shí)施Oracle數(shù)據(jù)庫(kù)安全補(bǔ)丁安裝可以有效地解決Oracle數(shù)據(jù)庫(kù)存在的安全漏洞。
Oracle數(shù)據(jù)庫(kù)在用戶使用過程中會(huì)不斷暴露各種功能和性能BUG;同時(shí)惡意攻擊者利用Oracle數(shù)據(jù)庫(kù)的安全漏洞繞過數(shù)據(jù)庫(kù)系統(tǒng)的安全管理機(jī)制,達(dá)到非授權(quán)存取的目的,甚至控制數(shù)據(jù)庫(kù)。從而影響Oracle系統(tǒng)的安全穩(wěn)定運(yùn)行。
隨時(shí)關(guān)注Oracle官網(wǎng)上發(fā)布的Oracle數(shù)據(jù)庫(kù)補(bǔ)丁信息,及時(shí)實(shí)施相應(yīng)的Oracle補(bǔ)丁安裝,從而修改功能和性能BUG,修復(fù)軟件的安全漏洞。
長(zhǎng)期的實(shí)際應(yīng)用表明為了確保數(shù)據(jù)庫(kù)的正常運(yùn)行,及時(shí)更新補(bǔ)丁是必不可少的。
[1]Rajesh Shah.Oracle On Demand Best Practices:Critical Patch Update[R].Oracle Corporation,2008.
[2]Steve Callan.Database Security and Patches-Part 1[EB/OL].(2005-11-8).[2013-11-30].http://www.databasejournal.com/features/oracle/article.php/3562181/Database-Security-and-Patches-150-Part-1.htm.
[3]Steve Callan.Database Security and Patches-Part 2[EB/OL].(2005-11-22)[2013-11-30].http://www.databasejournal.com/features/oracle/article.php/3565096/Database-Security-and-Patches-150-Part-2.htm.
[4]Steve Callan.Database Security and Patches-Part 3[EB/OL].(2005-12-4).[2013-11-30].http://www.databasejournal.com/features/oracle/article.php/3569941/Database-Security-and-Patches-150-Part-3.htm.
[5]Steve Callan.Database Security and Oracle Patches-Part 4[EB/OL].(2005-12-23).[2013-11-30].http://www.databasejournal.com/features/oracle/article.php/3571991/Database-Security-and-Oracle-Patches-150-Part-4.htm.
[6]Steve Callan.Database Security and Patches-Part 5[EB/OL].(2006-1-25).[2013-11-30].http://www.databasejournal.com/features/oracle/article.php/3579306/Database-Security-and-Patches-150-Part-5.htm.
[7]彭賢海,全國(guó)慶,張健.基于Oracle的管理信息系統(tǒng)數(shù)據(jù)庫(kù)自動(dòng)升級(jí)方法研究及實(shí)現(xiàn) [J].計(jì)算機(jī)工程與應(yīng)用,2004,40(10):193-194.PENG Xian-hai,OUAN Guo-ging,ZHANG Jian.A study of auto-upgrading for database ofmanagement information system based on Oracle[J].Computer Engineering and Applications,2004,40(10):193-194.
[8]劉志斌.給Oracle數(shù)據(jù)庫(kù)打補(bǔ)丁[N].計(jì)算機(jī)世界·技術(shù)與應(yīng)用,2006.