1. 程式人生 > >【專項測試】京東“安全測試”

【專項測試】京東“安全測試”

                                            京東安全測試

         資訊保安是網際網路時代人們面臨的嚴重威脅,首先來看看近幾年比較著名的資訊保安事件:

1、2011年12月,國內某程式設計師社群遭拖庫,600萬個賬戶資訊洩露。

2、2014年3月,某旅遊網站的系統存在技術漏洞,導致使用者的姓名、身份證號碼、銀行卡類別、銀行卡卡號、銀行卡CVV碼以及銀行卡6位pin洩露。

3、2014年5月,某論壇涉及800萬用戶資訊遭洩露,資訊包括使用者名稱、密碼、註冊IP、郵箱等。

4、2014年12月,某系統遭撞庫攻擊,13萬用戶資訊洩露,包括使用者賬號、明文密碼、身份證、郵箱等敏感資訊。

5、2015年10月,某郵箱遭攻擊,近5億條使用者資訊被洩露,包括使用者名稱、密碼、密碼保護資訊、登入IP以及使用者生日等多個原始資訊。

        這些安全事件,也無疑將資訊系統安全推至風口浪尖。京東商城作為一個知名的電子商務網站,面臨著更加嚴重的資訊保安的挑戰。目前主要面臨的安全威脅及其防治措施如下圖所示:

 

圖24-7 主要的安全威脅及防治措施

一、SQL注入漏洞

       SQL注入攻擊指的是通過構建特殊的輸入作為引數傳入Web應用程式,而這些輸入大都是SQL語法裡的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程式沒有細緻地過濾使用者輸入的資料,致使非法資料侵入系統。

SQL注入的原理:

       SQL注入可以分為平臺層注入和程式碼層注入。平臺層注入是由於不安全的資料庫配置或資料庫平臺的漏洞所致;程式碼層注入是由於程式設計師對輸入未進行細緻的過濾,從而執行了非法的資料查詢。所以,

SQL注入的產生原因通常表現在以下幾方面:

不當的型別處理;

不安全的資料庫配置;

不合理的查詢集處理;

不當的錯誤處理;

轉義字元處理不合適;

多個提交處理不當。

SQL注入的防護:

        為了保證資料庫安全,減少SQL注入的影響,SQL注入防護可以從以下幾個方面進行:

  •  不要信任使用者的輸入。對使用者的輸入進行校驗,可以通過正則表示式,或限制長度;對特殊字元進行轉換。
  • 不使用動態拼裝SQL語句,可以使用引數化的SQL語句或者直接使用儲存過程進行資料查詢存取。
  • 不使用管理員許可權的資料庫連線(例如MySQL的root,SQL Server的sa),為每個應用使用單獨的許可權,只授予有限的資料庫連線許可權。
  • 不把敏感資訊直接存放,而是通過加密演算法或者hash運算對敏感的資訊進行處理。
  • 應用的異常資訊應該給出儘可能少的提示,最好使用自定義的錯誤資訊對原始錯誤資訊進行包裝,比如使用者登入給出“使用者名稱或密碼錯誤”,而不是給出“使用者名稱錯誤”、“密碼錯誤”之類的錯誤提示。

       對於平臺層SQL注入,這是運維部門安全執行管理的範疇,不在討論範圍之內。這裡只討論程式碼層的SQL注入,程式碼層SQL注入的防治,主要要求開發工程師在程式碼編寫過程中注意前文提到的防治方法,在開發工程師提交程式碼後,對程式碼通過靜態分析工具進行分析檢測,再由安全工程師對程式碼進行安全分析,針對SQL語句進行分析。通過一些第三方工具對系統進行掃描,常見的第三方工具有JSky,Acunetix WVS等,可以發現一些安全威脅。 

二、防止XSS攻擊

        跨站指令碼漏洞是系統在處理使用者可控資料時,沒有對使用者可控資料做相關驗證或轉義,導致使用者可以對可控資料中插入惡意程式碼,並執行,導致對客戶端造成攻擊。XSS分為兩大類,儲存XSS和反射XSS,反射XSS主要是通過使用者是URL中的引數來實現的,儲存XSS是由於站點的一些form中沒有對使用者的輸入進行判斷,在顯示使用者輸入時也沒有進行轉義操作,導致使用者將一些惡意程式碼寫入資料庫中,每次使用者訪問都會看到。

跨站指令碼漏洞風險主要在於,如果跨站指令碼漏洞被惡意利用的話,將會產生如下的安全風險:

  • 盜取使用者cookie,然後偽造使用者身份登入,洩漏使用者個人身份及使用者訂單資訊。
  • 操控使用者瀏覽器,藉助其他漏洞可能導致對https加密資訊的破解,導致登入傳輸存在安全風險。
  • 結合瀏覽器及其外掛漏洞,下載病毒木馬到瀏覽者的計算機上執行。
  • 修改頁面內容,產生釣魚攻擊效果,例如偽造登入框獲取使用者明文帳號密碼。

        XSS安全漏洞的掃描可以通過一些第三方工具(如Acunetix WVS等)來進行,自動檢測工具可能會誤報的情況,如果對掃描結果不確定是否存在XSS,可以通過Chrome瀏覽器載入一個XssSniper外掛進行檢測。

 

圖24-8 Chrome中XssSniper外掛

 

       在目標列表中輸入索要測試的站點的列表,列表中支援萬用字元。編輯Payload列表,目的在於能夠根據現實的結果來判定出發的Payload項,如果不編輯也可以。開啟Fuzz,在瀏覽器的URL欄輸入要訪問的地址,等待結果即可。如果被訪問的URL含有XSS,會有一個彈窗顯示。

 

圖24-9 XssSniper的配置選項

三、Struts 2安全防護

        Apache Struts 2是一個用於開發Java EE網路應用程式的開放原始碼網頁應用程式架構。它利用並延伸了Java Servlet API,鼓勵開發者採用MVC架構。Struts1設計的第一目標就是使MVC模式應用於web程式設計。但由於這個架構的一些先天不足,經常會爆出一些致命的安全漏洞,並且Struts2開發組常被指漏洞修復手法不妥,要麼修復後仍有可利用,要麼無法修復並長期閒置。

       京東有很多系統採用struts2架構,所以時常關注Struts2的安全,京東特別針對struts2 的安全漏洞,開發了全新的安全補丁。為了避免strut2的後患,京東安全資訊部倡導各部門逐漸用Spring架構取代struts2,各個研發部門已經開始實施,隨著時間的推移,struts2將會被徹底預防。