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