徐 鶯,馮亞玲,鄧 丹,王小娟
(中國電子科技集團第三十研究所,四川 成都 610041)
Web應用系統的應用越來越廣泛,規模和復雜度不斷提高,Web應用系統軟件中的安全缺陷與漏洞也在不斷增多,軟件安全性問題日益突出。針對Web應用系統軟件進行安全性測試,是保證軟件安全性、降低軟件安全風險的重要手段。目前,針對軟件系統的安全性測試技術的研究較為普遍,成果較多,逐步形成了相關的主流技術。本文主要分析滲透測試技術在Web軟件系統安全性測試的應用,研究相關方法和技術,為提升安全性測試質量和效果提供支撐。
隨著網絡技術及信息安全技術的高速發展,軟件安全性越來越成為一個重要的質量屬性。在國標GJB5236-2004中,安全性被定義為軟件的使用對人、業務、軟件、財產和環境產生傷害的風險,定義的內涵是軟件的失效安全性,即軟件的重要功能、性能有效且可靠,避免造成重大安全事故,如人員、財產、環境的損失等。定義強調了軟件的可用性,本質是軟件的失效安全性。
在國標GB/T 11375-2007中,提出了軟件/設備的抗風險能力,即保密安全性,強調軟件自身能夠抗攻擊能力,確保在受到攻擊的時候能夠正確完成軟件功能,避免敏感信息的泄露、系統資源的非法占用等。定義強調了軟件的抗風險能力,本質是軟件的可控性、可信性。隨著網絡技術的普及和發展,抗風險能力成為安全性測試更核心的內容。
借鑒國標中對軟件測試的定位,可將軟件安全性測試定義為確定軟件的安全特性實現是否與預期設計一致的過程。然而,保密安全性的定義內涵決定其測試技術手段的開放性,使得安全性測試成為一個重點和難點。本文主要針對保密安全性測試進行相關探討。
軟件安全性測試的手段可類分為白盒級核查和黑盒級測評。其中,白盒級核查是基于測評對象的安全設計機制,測試驗證實現與設計機制原理的一致性,確保測評對象按相關標準實現相應的安全功能,具備安全防護能力;黑盒級測評則是根據測評對象,直觀構造相關攻擊,以驗證對象具備防御能力。攻擊性測試的重要手段之一是滲透測試。
滲透測試(Penetration Test),是指測試者在客戶允許下的范圍內,采取黑客手段,真實模擬攻擊者使用各種方法和技術對目標系統實施攻擊,以檢驗系統在真實應用環境中的安全性的過程。它可以幫助用戶發現系統中存在的潛在安全漏洞,從而有針對性地提供應對措施,提升系統的安全防護能力。圖1列出了滲透測試的基本模型。

圖1 滲透測試基本模型
根據軟件安全性內涵定義,參考國際、國家相關標準,提出應用系統軟件安全性測試需求要素框架,將應用系統軟件安全性分為4個方面,即軟件自身防護機制實現正確性、安全功能正確性、抗攻擊能力測試和安全漏洞測試,相關要素如圖2所示。

圖2 應用系統軟件安全性測試需求要素
如圖2所示,抗攻擊能力的測試是一種開放性的測試和評估,包括抗網絡攻擊能力、抗本地攻擊能力、抗病毒木馬能力以及網絡攻擊審計能力。
安全漏洞測試則是直接關聯常見的軟件設計和軟件實現中的安全漏洞的測試。滲透測試可作為安全漏洞測試的主要手段。滲透測試以應用軟件系統為對象,發現系統軟件中的代碼安全問題,同時提供系統的安全風險評估。滲透測試也可作為軟件抗攻擊能力測試的重要手段,對抗敏感信息收集、已知脆弱性等測試要素進行測試及驗證。其中,緩沖區溢出攻擊和抗拒絕服務攻擊導致被測對象直接失效、崩潰,一般不納入滲透測試的范圍,可作為安全性測試的重要內容。
以下重點探討滲透測試在安全漏洞測試方面的方法及應用。
典型的Web應用系統接受外部輸入進行相關處理,保持、更新數據庫等過程,一般包括如下組件。
用戶接口代碼:Web應用系統的表示層,將客戶端和Web服務器連接的接口,通過用戶接口代碼創建站點的可視、展現界面,常用的開發語言包括Java、JavaScript、VB和HTML等。
Web應用服務器軟件:實現用戶瀏覽器和Web應用的通信和交互,主要處理HTTP消息請求、管理組用戶會話等。常見的Web站點使用的第三方廠商提供的Web服務器,如IIS、Apache等。
前端系統:前端系統實現用戶接口代碼和后臺系統的交互和處理,在獲得用戶接口代碼客戶端提供的數據后,前端系統進行相關處理,典型的開發語言包括ASP、CGI和JSP等。
后臺系統:Web應用系統的核心部分,直接與數據庫系統對接,實現應用核心邏輯。Web應用系統中的后臺系統通常是定制而開發的數據庫系統,常見的如DB2、MySQL等。
滲透測試以被測系統為邊界,從不同安全防護層級(物理層、網絡層、主機層、應用層)開展攻擊性測試。針對Web應用系統軟件,主要的滲透測試重點集中在主機層和應用層。針對本文案例系統的滲透測試方法及用例,主要包括如下內容。
3.2.1 SQL注入
SQL注入滲透的原理是,表單輸入域或頁面請求查詢字符串等輸入參數,插入惡意的SQL命令,獲得服務器后臺運行數據庫中數據。
(1)操作步驟
查找注入點→獲取數據庫類型等關鍵信息→數據庫提權(查找獲得高用戶權限如SA)→猜測數據庫名、表名、字段等敏感信息來獲取相關信息。
(2)滲透要點
采用單引號、判斷句拼接的等方式,探測被測頁面是否存在SQL注入漏洞。
常見的手工滲透測試語句,如表1所示。

表1 常見的手工滲透測試語句
3.2.2 跨站腳本
跨站腳本攻擊的原理是通過代碼的拼接,在遠程Web客戶端頁面的HTML代碼中插入非法腳本,如vBscriPt、Javascript、ACtivex、Flash等。用戶請求頁面瀏覽時,嵌入的腳本代碼被執行,實現相關攻擊。
(1)主要攻擊步驟
查找非法腳本插入點→插入非法腳本→用戶請求觸發→進一步攻擊.
(2)滲透要點
一般采用典型的腳本插入方式實施,主要針對可能出現漏洞的留言板、在線通信信息、文章發布頁面等。如果頁面對“<”“>”“;”“們”等特殊字符未進行過濾,檢查頁面標題處是否存在未閉合的標簽,則攻擊插入的惡意的代碼就會被執行。
典型的手工測試執行語句如下:
http://xxbank.eom/、。mepage?redireet= 跨站攻擊核心是非法腳本的構造,這是后續進行進一步攻擊的關鍵,一般可利用跨站腳本漏洞竊取用戶Cookie信息,劫持帳戶,執行Flash內容,強行下載軟件或進行網頁掛馬等。 (3)弱口令 弱口令問題是很多系統防護中最容易出現的問題。一些應用系統管理員用戶使用默認的admin、manager作為用戶名,口令使用與用戶名相同或123456等弱口令。 弱口令的滲透操作一般可參考口令字典中的常用賬號、口令進行猜測輸入,也可以利用專門的工具探測網站密存的口令,根據密碼特征分析加密方式如MD5加密,進行解密獲得賬號。 (4)文件上傳 文件上傳攻擊是利用網站提供的文件上傳功能上傳惡意的腳本文件,進一步通過腳本執行非法代碼。 常見的如一般文件上傳功能及頁面,還有一類是針對某些系統提供線上的文本編輯功能,功能集成的編輯器如ueditor、kindeitor等,而相關編輯器未采用防護控制機制的情況。 攻擊操作主要針對相關功能頁面進行文件上傳,攻擊核心是相關腳本文件的構造。作為針對Web應用系統的滲透測試,可以將找到文件上傳漏洞作為測試目標。 針對某電子商務支付系統,基于常見的應用層風險點進行如下滲透過程。 弱口令攻擊。在登錄頁面采用常見的弱口令進行登錄,采用口令破解工具獲得若干弱口令用戶及口令信息,如圖3所示。 登錄進入用戶系統,可看到所有的交易、刷卡信息。 滲透報告項目如表2所示。 表2 滲透報告項目 (1)文件上傳、Getshell攻擊 進入http://boss.icardpay.com/zxsale-sys2/login.action代碼區,掃描存在S2-019漏洞,如圖4所示。 圖4 漏洞掃描頁面 采用CKnife工具,直接連上http://boss.icardpay.com/zxsale-sys2/bak.jsp Cknife。進入后臺代碼區,找到數據庫配置文件,如圖5所示。需要說明的是,部分信息過于敏感,已做模糊化處理。 圖5 后臺代碼區 通過數據庫配置文件獲得相關文件路徑,成功連上數據庫。 從代碼區http://boss.icardpay.com/zxsale-sys2/aa.jsp中解密超級管理員賬號“Luhai 123qwe”。以超級管理員登錄系統后,可執行所有高權限操作,可直接編輯、修改相關代理商信息、狀態;可對pos機進行管理,禁用設備等;大量用戶信息泄露,包括身份信息,證件截圖等;可設置、修改用戶信息、權限等。 表3 滲透報告項目 SQL注入。在首頁的代理管理頁面,存在SQL注入漏洞(采用SQLmap工具掃描),如圖6所示。 圖6 注入漏洞頁面 可注入數據庫表Available databases,如圖7所示。 圖7 查詢數據庫表 如上述滲透過程,成功攻擊某支付系統,主要的漏洞包括SQL注入、弱口令和文件上傳。通過弱口令撞庫、上傳木馬程序運行實現后臺數據庫攻擊,取得數據庫最高權限,從而可實現對系統數據的任意操作,安全風險巨大。 參見前面的滲透測試項報告,系統軟件中主要的安全漏洞均與軟件設計、代碼安全缺陷直接相關,也客觀體現出目前基于Web應用系統軟件開發過程中代碼安全性問題的嚴重性,有待開發者提升軟件安全性設計與實現的意識和習慣。 表5列出了OWASP(應用程序安全項目組織)的一些典型安全漏洞原理與軟件缺陷的關系。 表4 滲透報告項目 表5 OWASP的一些典型安全漏洞原理與軟件缺陷的關系 針對Web應用系統軟件引入滲透測試手段,加強安全性測試,強化軟件的安全性設計與實現,越來越成為Web應用系統軟件開發的重要方面。 Web應用系統是運行在互聯網和TCP/IP的客戶/服務器模式的應用系統,由于其運行環境以及操作環境的開發性,容易被攻擊者實施信息探測,安全風險較高。滲透測試提供了一種開放的測試手段,是軟件安全性測試的重要補充。針對Web應用系統軟件安全性測試,引入滲透測試方法,發現相關安全性設計與實現缺陷,是提升安全性測試能力、強化軟件安全性設計與實現水平的重要方面。3.3 滲透測試過程、實例及相關問題分析






4 Web應用系統滲透測試小結


5 結 語