滲透測試(penetration test,簡稱 pentest)是一種經授權的安全測試:測試人員模仿真實攻擊者,嘗試找出並利用系統的弱點,然後報告發現了甚麼、應該如何修正。對於經營網站、網店或網上應用程式的企業,它回答一個實際問題:如果有人嘗試入侵,對方可以走多遠?
滲透測試與漏洞掃描的分別
兩者經常被混為一談,但用途不同。
- 漏洞掃描由工具自動進行,按已知問題清單檢查系統,例如過時的軟件版本、缺少的安全標頭或對外開放的服務。掃描速度快,可以經常執行,但可能出現誤報,一般也不理解應用程式的業務邏輯。
- 滲透測試由人主導。測試人員會把掃描結果當作參考,再逐項人手核實,把幾個細小弱點串連起來,並測試業務邏輯,例如只要改動網址中的一個號碼,某位客戶能否看到另一位客戶的訂單。
掃描適合用作日常檢查,滲透測試則在某個時間點作較深入的評估。大部分機構兩者都需要。
滲透測試的類型
按測試人員事前掌握的資料,一般分為三種:
- 黑盒測試:測試人員只有網址等基本資料,情況接近外部攻擊者。
- 灰盒測試:提供測試帳戶或部分文件,測試集中在已登入用戶能接觸的範圍。
- 白盒測試:提供架構資料,有時連源代碼也提供,可作最徹底的檢查。
按測試對象,則可分為網上應用程式測試(登入、表格、工作階段、存取控制)、API 測試(每個端點的身份驗證、授權和資料外洩風險)、網絡測試(伺服器、防火牆和對外服務),以及流動應用程式測試(應用程式本身、裝置上儲存的資料及其調用的 API)。
測試範圍與書面授權
安全測試必須得到系統擁有人許可,因此正式的滲透測試會先取得有權批准者的書面授權。如網站放在託管或雲端服務商,也要查閱對方政策,因為部分服務商對安全測試設有規定。開始前,雙方應議定測試規則:
- 哪些域名、IP 位址、應用程式和環境屬於範圍內,哪些不屬於
- 測試日期和時段,以及在正式環境還是測試環境進行
- 不准使用的手法,例如阻斷服務攻擊
- 緊急聯絡人,以及測試期間發現嚴重問題時如何處理
一般測試流程
- 界定範圍:議定目標、測試對象、類型和時間。
- 偵察:整理可被攻擊的範圍,包括子域名、頁面、API 和所用技術。
- 測試:在議定規則內尋找並嘗試利用弱點。
- 報告:記錄每項發現、證據和修正建議。
- 修正:內部團隊或開發商按風險高低先後修正。
- 重新測試:確認修正有效,而且沒有帶來新的漏洞。
一份好的報告應包含甚麼
報告是測試的主要成果,管理層和開發人員都應看得明白。留意以下內容:
- 以淺白文字概述整體風險
- 每項發現的嚴重程度評級,以及對業務的影響
- 清晰的重現步驟和證據,方便開發人員確認問題
- 具體的修正建議,而非籠統的提醒
- 測試範圍和日期,以及未有測試的部分
以下示例僅供說明:一項發現可能寫成「高風險:已登入用戶只要更改 API 請求中的發票編號,即可下載其他用戶的發票」,並附上實際使用的請求、受影響的端點,以及在伺服器端加入權限檢查的建議。
何時測試、多久測試一次
常見的測試時機包括新網站或應用程式推出前、加入新付款流程或登入系統、更換託管等重大改動之後,以及為處理客戶或付款資料的系統定期安排測試。部分行業、客戶或合約可能要求按指定周期測試,具體要求請向你的顧問查詢。
與其他保安措施的配合
滲透測試是一種檢查,不能取代日常的良好做法。CI/CD 流程中的自動安全檢查,可在每次發佈時發現部分問題;回歸測試確保已修正的問題不會再出現。多重身份驗證可減低密碼被盜的影響,零信任則限制單一帳戶能接觸的範圍。滲透測試的結果往往能指出這些措施的不足之處。
如需把安全測試與其他保護措施一併規劃,可參閱 technine.io 的網絡安全及合規服務。
常見問題
只做漏洞掃描足夠嗎?
作日常檢查有用,但業務邏輯和存取控制方面的問題,往往要靠人手才能發現。滲透測試正好補上這部分。
滲透測試會令網站停止運作嗎?
如測試規則已排除具破壞性的手法,並議定好時間,一般不應如此。部分團隊會先在測試環境進行,以減低風險。
通過滲透測試是否代表網站已經安全?
不是。結果只反映測試人員在議定範圍和時間內的發現。新代碼、新功能和新公開的漏洞都可能改變情況,所以重新測試和持續檢查同樣重要。
