一、 安全測試的意義
安全問題,沒發生的時候我們可以僥倖,一旦發生生產安全問題,對很多公司來說可能就是黑天鵝事件了。平臺的安全,是我們測試中不可捨棄的一環,而且需要長期持續的關注。
二、 從哪裡入手
很多公司沒有專職的安全測試人員,一個是安全涉及的技術棧比較廣,要做好還需要對每一個技術棧有深入的研究,市面上的安全人才是很稀缺的;另外一般小公司去養一個專職的安全人員,往往會去對比第三方安全外包平臺,發現提交外包平臺會更划算。
團隊中沒有安全人員,特別是在敏捷的當下,也不可能每一次迭代都提交第三方外包,那作為測試人員,我們就需要去思考,如何在測試流程中插入安全測試這一環,畢竟生產出損,你是無法置身事外的,引入安全測試也能為公司帶來價值
那麼我們該如何開展安全測試呢,很多同學目前可能直接用APPscan或zap進行掃描,這也是一個方式,但有些業務相關的安全問題這種工具是無法識別到的,有些還是需要手工環節的接入,安全測試也是測試的一種型別,在整個軟體研發的生命週期中,我們是如何去保障產品質量的?同樣,我們也按照這個思路,去建設我們的安全測試執行路徑
三、 萬丈高樓從地起,打造我們的安全測試流程
3.1 需求階段
在需求評審階段,我們除了關注需求的合理性和價值,還要加入破壞者思維去審視這個需求--這個需求哪裡有漏洞,可以讓我去破壞他的規則。
比如商家做活動,評論下點贊越多的傳送禮品,那麼我是不是可以通過介面去不斷的刷點贊,讓你介面tps過載,導致別人無法點贊,這樣我就有更大的機會拿取禮品。所以這樣就引申出來一個安全性需求--我們需要對活動的點贊和評論做限流處理。
3.2 程式碼層面
- 靜態程式碼掃描
我們可以引入靜態程式碼掃描工具,比如靜態程式碼掃描,目前也有很多開源的靜態程式碼掃描工具,比如大家常用的sonar
- 三方元件的掃描
除了靜態程式碼的掃描,開發人員在引用第三方依賴包的時候,獲取來源比較隨意,很可能下載的這個依賴包就包含病毒,程式中整合的第三方的元件也是需要做安全掃描的,比如node的依賴包安全掃描就可以選擇nsp這個開源軟體
3.3 資料脫敏
關於資料脫敏我們主要關注兩部分,一個是敏感資料的儲存是否做了加密處理,比如使用者的賬戶密碼、商家的卡密,這些都需要在資料落地的地方做加密儲存。我們需要通過查詢資料庫或者檔案,確認資料是否做了加密儲存
另外一塊就是在傳輸的過程中,敏感資料是否做了加密處理,比如我們的登入註冊功能,在前後端介面互動過程中,密碼是否做了加密處理;獲取簡訊相關的業務,介面是否直接將簡訊做了返回等。我們可以通過瀏覽器自帶的開發者工具F12或者第三方工具fiddler、Charles抓包測試。
3.4 跨目錄許可權
在商戶管理側,涉及到了商戶和子賬號的業務需求,子賬戶是可以定義訪問哪些頁面的角色。當我們沒有給子賬戶賦權的頁面,他是否可以直接通過瀏覽器中輸入url進行訪問,這個我們是需要進行測試的。
3.5 跨站指令碼
跨站指令碼,大家比較熟知的有xss,跨站指令碼會導致會話被劫持、敏感資訊洩露甚至賬戶被盜的風險,最簡單的方式是在有文字框的地方通過構造js或者html儲存,看是否做了轉義處理;另外也可以通過帶引數的url後面進行js傳值進行請求,檢視是否執行了js
3.6 SQL隱碼攻擊
sql注入大家都比較熟悉,在介面上做資料庫相關的操作,我們可以構造一些傳入引數去改變sql的最終執行邏輯,比如針對查詢類的,http://xxx.com/salay/userid=9898,我們可以再後面修改9898為9898 “or 1=1“,這樣在最終sql查詢中就變成一個始終為真的資料,如果存在注入問題會將所有人的薪資資料暴露出來。sql注入相關的測試我們可以借用sqlmap這個工具
3.7 越權
越權,簡單的理解就是A使用者操作了B使用者的資料,比如我們在下單過程中,商品A是給會員的購買的,非會員在獲取商品ID後,通過下單結構模擬下單商品A,如果能夠成功,就證明存在越權的問題,我們可以通過fiddler進行請求擷取,然後修改傳參進行測試
3.8 上傳下載
檔案的上傳下載主要有三點
一個是對使用者磁碟空間的大小限制,比如提供了一個上傳功能,使用者無限制的上傳大容量檔案,導致磁碟成本巨大。
檔案型別校驗
比如要上傳excel的,使用者上傳了html檔案,這個是存在一定的風險的,特別是上傳後可以直接訪問資原始檔,這樣使用者可以通過上傳的html做一些xss的攻擊
資源下載的安全控制,比如使用者下載自己的工資條,是這樣一個連結,http://xxx.con/8888.xls,這樣就可以聯想修改8888這個值為其他值,檢視他人的敏感資料
3.9 伺服器埠
伺服器埠的測試,對有些自建機房,直接通過物理機進行部署的會很有用處,比如有些不需要使用的埠對外開放了,惡意使用者可能利用該埠從事一些非法操作,我們可以通過nmap進行伺服器的埠掃描,非必須的埠要關閉
3.10 業務需求維度
上面的測試項是通用性的規則,結合具體的業務需求,我們也可以產出一些安全測試點,比如針對登入註冊的需求,我們從密碼強度、驗證碼可以產出安全測試用例
針對有些使用者類的API介面,我們可以做限流的策略,比如獲取簡訊驗證碼,我們就要做一些風控策略,否則遇到惡意使用者,會造成公司簡訊成本損失
四、 結束語
安全是質量保障不可或缺的一環,作為測試人員,我們可以從最基礎開始去打造我們的安全測試流程,與其他測試型別一樣將安全的思想貫穿在整個軟體研發生命週期,做好安全質量內建。也希望大家一起交流你們是如何做安全測試的