馮濟舟
(中國電子科技集團公司第三十八研究所,安徽合肥230088)
軟件注入缺陷典型案例
馮濟舟
(中國電子科技集團公司第三十八研究所,安徽合肥230088)
軟件測試是能力成熟度模型集成(CMMI,CapabilityMaturityModelIntegration)中驗證(Ver,Verification)與確認(Val,Validation)過程域的重要表現(xiàn)形式,是保障軟件可靠性的重要手段。近年來,隨著軟件規(guī)模的增大和復(fù)雜程度的不斷提高,軟件測試技術(shù)也不斷發(fā)展,現(xiàn)有測試方法已能夠確保導(dǎo)致系統(tǒng)崩潰問題的測試輸入的覆蓋。然而程序設(shè)計語言本身固有的特性使得許多漏洞無法在編譯、運行階段被發(fā)現(xiàn),且這些固有漏洞在不導(dǎo)致系統(tǒng)崩潰的情況下,可以通過非法注入篡改用戶權(quán)限的形式威脅系統(tǒng)安全。面對此種軟件安全的新形勢,開發(fā)人員及測試人員由于缺乏此方面的經(jīng)驗和認識,造成無法意識到此問題帶來的隱患,而忽略此問題的測試及修正。
本文根據(jù)實際工程經(jīng)驗對此缺陷在實踐中的具體表現(xiàn)形式進行歸納和總結(jié),并針對每種表現(xiàn)形式以具體代碼實例進行故障模式分析,給出補償措施分析,這對提高軟件質(zhì)量具有重要作用。
故障模式:網(wǎng)絡(luò)應(yīng)用程序從socket套接字中接收用戶自定義參數(shù),并且使用這些參數(shù)啟動進程時,如果放置未經(jīng)驗證的用戶輸入命令數(shù)據(jù)到一個執(zhí)行請求中,用戶數(shù)據(jù)就可以直接影響執(zhí)行代碼,造成用戶可以在服務(wù)器上使用應(yīng)用程序特權(quán)運行允許執(zhí)行破壞系統(tǒng)的自定義惡意代碼的情況。系統(tǒng)直接執(zhí)行用戶人工輸入的參數(shù)para,當(dāng)輸入內(nèi)容為“&shutdown-s-f-d p”時,無論該用戶權(quán)限是否合法,都將導(dǎo)致服務(wù)器關(guān)機。
補償措施分析:對于命令注入缺陷,需要關(guān)注程序代碼中接收用戶自定義參數(shù)para,以及定義的用戶可使用合法、有效命令參數(shù)集{A}。程序只需驗證輸入的用戶命令參數(shù)para在系統(tǒng)規(guī)定的用戶可使用合法、有效命令參數(shù)集{A}中(cmd_para∈{A}),即可避免命令注入問題。以故障模式分析的案例為例,在系統(tǒng)執(zhí)行用戶人工輸入?yún)?shù)之前,判斷所輸入?yún)?shù)是否符合所定義用戶可使用合法、有效命令參數(shù)規(guī)則,以此判斷該命令是否執(zhí)行,從而避免非法用戶引起的服務(wù)器關(guān)機事件。
故障模式:網(wǎng)絡(luò)應(yīng)用程序從socket套接字中接收來自用戶自定義文件名或路徑用于應(yīng)用程序文件處理時,應(yīng)用程序在服務(wù)器文件系統(tǒng)中存儲一些以用戶信息名稱作為文件名的用戶數(shù)據(jù),如果未驗證的數(shù)據(jù)出現(xiàn)在文件名中,那么用戶就能夠獲得訪問系統(tǒng)上任何文件的權(quán)限,并可以向應(yīng)用系統(tǒng)注入特殊準備的惡意數(shù)據(jù)。當(dāng)用戶提供“c:\windows\system.ini”作為信息名稱和一些特別準備的配置文件內(nèi)容作為信息內(nèi)容時,那么在保存這些信息后,系統(tǒng).ini文件可能被篡改并保存一些危險內(nèi)容。
補償措施分析:對于文件注入缺陷,需要關(guān)注程序代碼中從socket套接字中接收到的用戶自定義文件名name_para,以及系統(tǒng)定義的用戶合法、有效文件名及路徑集{A}。程序只需驗證輸入的用戶自定義文件名name_para在系統(tǒng)規(guī)定的
用戶可使用合法、有效文件名或路徑集{A}中(name_para∈{A}),即可避免文件名注入問題。以故障模式分析的案例為例,當(dāng)用戶人工輸入內(nèi)容“c:\windows\system.ini”時,系統(tǒng)會根據(jù)validate函數(shù)中定義的用戶可使用的合法、有效文件名和路徑,判斷該命令是否執(zhí)行,從而避免非法用戶引起的文件名注入問題。
故障模式:當(dāng)應(yīng)用程序使用用戶提供數(shù)據(jù)或未經(jīng)驗證數(shù)據(jù)源來構(gòu)建SQL查詢,并且在其使用之前不對這些數(shù)據(jù)進行驗證時,用戶可能按照開發(fā)者不希望的方式改變SQL語句,從而完全控制數(shù)據(jù)庫甚至在系統(tǒng)上執(zhí)行命令。當(dāng)用戶人工輸入登錄名稱:admin'or'1'='1以及登錄口令:123456'or'1'='1時,生成的SQL語句則變?yōu)镾ELECT user_id,user_class,rights FROM users WHEREuser_name='admin'or'1'='1'and password='123456'or'1'='1',因為where條件始終為真,所以盡管攻擊者沒有提供任何必要的許可信息,仍將成為用戶表中的最高權(quán)限用戶而得到所有用戶的信息。
補償措施分析:對于SQL注入缺陷,需要關(guān)注程序代碼中從socket套接字中接收到的用戶自定義的輸入SQL參數(shù),通過獲得用戶數(shù)據(jù),對用戶輸入的SQL參數(shù)的合法性和有效性進行判斷,即可避免SQL注入問題。以模式分析的案例為例,當(dāng)攻擊者人工輸入登錄名稱:admin'or'1'='1以及登錄口令:123456'or'1'='1時,通過獲得用戶數(shù)據(jù),而不是直接創(chuàng)建一個包含參數(shù)值的文字查詢,從而避免非法用戶引起的SQL注入問題。
本文根據(jù)實際工程經(jīng)驗描述了軟件注入缺陷在實踐過程中的具體表現(xiàn)形式、故障模式及補償措施,不僅可以為開發(fā)人員提供避免編程時引入軟件注入缺陷漏洞的參考,也可以作為測試人員設(shè)計測試方案的一種方法,這對提高軟件系統(tǒng)的可靠性具有積極意義。
[1]萬江平,孔學(xué)東,楊建梅.集成能力成熟度模型(CMMI)的研究[J].計算機應(yīng)用研究,2001,(10).
[2]李興兵,李孟軍,譚躍進.軍用CMMI模型的建立初探[J].兵工自動化,2003(6).
馮濟舟(1984年—),男,碩士,工程師,現(xiàn)從事軟件工程化和軟件測試工作。