iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Security

資安這條路:系統化學習網站安全與網站滲透測試系列 第 29

資安這條路:Day 29 SSDLC 安全開發軟體生命週期─測試階段與 OWASP Web Security Testing Guide

  • 分享至 

  • xImage
  •  

前言

在安全的軟體開發生命週期,在這篇文章我們將介紹測試階段,可以透過哪一些方法進行測試,文章後半部則介紹 OWASP Web Security Testing Guide 如何針對網站進行測試。

測試階段

測試階段目的是確保開發的系統符合需求規格,並在上線前發現並修正錯誤和問題,以加強系統抵擋惡意攻擊的能力。

測試階段會著重於以下幾個關鍵方向:

  • 測試類型
  • 測試技術 (包括弱點掃描與滲透測試)

測試類型

測試類型可以根據不同的標準來分類,以下列出幾種常見的分類方式:

依據對內部處理邏輯的瞭解程度分類

  • 白箱測試
    • 測試者完全瞭解應用程式的內部邏輯、結構與工作原理
    • 例如程式碼覆蓋率、單元測試等
    • 白箱測試特點
      • 在開發者撰寫程式碼的過程中同步進行測試
      • 以確保程式碼的品質和安全性
  • 黑箱測試
    • 測試者不知道應用程式的內部邏輯、結構與工作原理
    • 測試僅基於規格或需求
    • 黑箱測試特點
      • 在系統開發完成後由獨立的測試團隊進行測試
      • 以模擬真實使用者的操作情境

依據測試者與測試標的物之間是否有直接互動分類

  • 主動測試
    • 測試者主動觸發應用程式或系統的行為並觀察結果
      • 例如執行測試案例或使用測試腳本
    • 主動測試特點
      • 系統中輸入特定的資料或指令
      • 觀察系統的反應是否符合預期
  • 被動測試
    • 測試者不主動輸入或操作,而是觀察應用程式或系統在自然狀態下的表現
      • 例如監測和日誌分析
    • 被動測試特點
      • 系統執行時收集系統的日誌和效能資料
      • 分析系統是否存在異常行為

依據測試時是否有執行程式分類

  • 靜態測試
    • 測試過程中不執行程式
    • 而是透過檢查程式碼、設計文件、需求文件等來查找問題
      • 例如程式碼審查或使用靜態分析工具
    • 靜態測試特點
      • 檢查程式碼的語法、邏輯和安全性
      • 找出潛在的錯誤和漏洞
  • 動態測試
    • 實際執行被測試的程式並觀察行為和輸出結果是否符合預期
    • 動態測試特點
      • 模擬真實使用者的操作情境
      • 測試系統的功能、效能和安全性

依據測試時是否需要人工介入執行分類

  • 手動測試
    • 由人工執行各種操作或測試案例以確認資訊系統行為是否如預期
    • 手動測試需要測試人員具備專業知識和經驗,能夠靈活地適應複雜的測試情境
  • 自動測試
    • 利用工具和腳本來自動執行測試案例,不需要人工介入
    • 自動測試可以提高測試效率和一致性,適用於需要重複執行的測試
    • 相較於手動測試自動測試誤判率更高

測試技術

測試技術是指在測試階段使用的各種方法和工具,以下列出幾種常見的測試技術:

依據測試階段和目的分類

  • 單元測試
    • 對資訊系統中的最小可測試部分 (通常是函數或方法) 進行驗證
    • 以確保它們按照預期工作
    • 單元測試通常由開發者編寫並執行
    • 目的
      • 是確保程式碼的每個單元都能正常運作
  • 整合測試
    • 測試不同模組或服務元件之間互動是否正確
    • 識別模組之間的資料傳遞或整合問題
    • 目的
      • 是確保系統的各個模組能夠協同工作,完成系統的整體功能
  • 介面測試
    • 驗證系統中不同的使用者介面 (UI) 和應用程式介面 (API) 之間的互動是否準確和有效
    • 目的
      • 確保系統的各個介面能夠正確地交互作用,提供一致的使用者體驗
  • 回歸測試
    • 確保先前開發並測試過的資訊系統功能在新的開發週期後仍然正常運作
    • 目的
      • 是確保新的程式碼或功能修改不會影響系統的現有功能
  • 系統測試
    • 對系統整體的廣泛測試,包括功能性與非功能性測試
    • 確保符合規格要求
    • 目的
      • 是確保系統的整體功能、效能和安全性符合需求規格
  • 壓力測試
    • 透過將系統推至極限來測試其效能瓶頸
    • 目的
      • 是找出系統的效能瓶頸
      • 確保系統在高壓力下仍然能夠保持穩定執行
  • 安全測試
    • 專注於識別和緩解安全風險
    • 目的
      • 是找出系統的安全性漏洞,並採取措施加以修補

安全測試中的特殊技術

  • 模糊測試
    • 一種自動化或半自動的測試技術,用於識別安全漏洞和錯誤
    • 模糊測試會自動產生大量隨機資料來作為輸入
      • 嘗試混淆程式並觸發異常行為
      • 例如崩潰或執行未經授權的操作
  • 弱點掃描
    • 弱點掃描是一種自動化的過程
    • 目的
      • 識別系統、網路或應用程式中的已知安全漏洞
    • 弱點掃描會使用專門的工具來掃描目標系統
      • 尋找已知漏洞的痕跡
      • 例如過時的軟體、錯誤設定和缺少的修補程式
  • 滲透測試
    • 滲透測試是一種更主動、目標導向的安全評估
    • 主要在模擬攻擊者的行為
    • 並嘗試利用系統中的漏洞來取得未經授權的存取權限或資料
    • 滲透測試可以幫助組織
      • 更全面地瞭解系統的安全性狀況
      • 並採取措施加以改進
  • 使用者驗收測試 (UAT)
    • 確保系統滿足使用者實際需求
    • 通常由最終使用者執行

其他常見處理

  • 例外處理
    • 在開發階段中,應針對程式碼中可能發生的錯誤進行處理
    • 避免系統失效或出現異常行為
  • 程式碼審查
    • 透過人工方式檢查程式碼
    • 確保程式碼品質和安全性,並分享開發知識
  • 源碼掃描
    • 使用自動化工具檢查程式碼
    • 快速識別安全漏洞和程式碼問題

OWASP WSTG 測試

WSTG 是什麼

  • 開放和協作的專案
  • 目的
    • 幫助人們瞭解測試網站的內容、原因、時間、地點和方式
  • 提供測試框架
    • 含適用於軟體開發生命週期 (SDLC) 各個階段的技術和任務
    • 公司和專案團隊可以使用此模型來開發自己的測試框架,並確定供應商的測試服務範圍
  • 提供針對特定漏洞的測試方法
    • 資訊收集
    • 組態和部署管理測試
    • 身分管理測試
    • 驗證測試
    • 授權測試
    • 工作階段管理測試
    • 輸入驗證測試
    • 錯誤處理測試
    • 弱加密測試
    • 商業邏輯測試
    • 使用者端測試
    • API 測試

為什麼可以利用 WSTG 來測試

  • 需要建立一套加強的方法來編寫
    • 保護我們的網路、網站和資料
  • 需要一套一致、可重複和定義明確的方法來測試網站的安全性問題
    • 如果沒有最低限度的技術標準,可能不知道從哪裡開始

如何透過 WSTG 來協助自己

  • 完整測試框架
    • 不是簡單檢查清單或應該解決的問題的處方
    • 而是可以使用這個框架作為模板
    • 建立自己的測試流程
  • 測試框架與實作技術
    • 測試網站的先決條件和範圍
    • 成功測試的原則和測試技術
    • 測試報告如何撰寫以及說明
    • 安全測試的商業案例範例
    • 如何透過程式碼檢查和滲透測試來測試特定的漏洞
    • WSTG對於弱點掃描或自動化網站掃描的作用
      • 強調了其侷限性
      • 並主張採用全面的測試方案

WSTG 階段介紹

資訊收集

  • 這個階段的目標是找出目標應用程式的相關資訊,包含使用的技術和潛在的漏洞
    • 搜尋引擎探勘與資訊洩漏
      • 使用 Google Hacking 或 Dorking 等技術
      • 透過搜尋引擎找出特定類型的敏感檔案和資訊
        • 公開的管理後臺
        • robots.txt 檔案
        • 錯誤訊息頁面
        • 洩漏原始碼的頁面
      • 這也有助於瞭解目標網站建構時使用的技術
        • 例如 WordPress、phpBB、Mediawiki
    • 網頁伺服器指紋辨識
      • 透過分析伺服器回應的標頭、Cookie 和目錄結構
      • 辨識伺服器使用的軟體版本和組態設定
    • 網頁內容資訊洩漏審查
      • 檢查 HTML 原始碼中的註解和中繼資料
        • 開發者忘記移除的程式碼片段
        • 帳號密碼
        • 內部 IP 位址
        • 除錯資訊
    • 辨識應用程式進入點
      • 找出所有使用者可以與應用程式互動的介面
        • 例如網頁表單、API 端點
    • 應用程式架構圖
      • 繪製應用程式架構圖以瞭解整個系統的運作方式和潛在的攻擊面
        • 包含
          • 所有元件
          • 伺服器
          • 資料庫
          • 網路連線
  • OWASP 提供 Attack Surface Detector (ASD) 的工具
    • 可以分析原始碼並找出所有應用程式的端點
    • 包含那些沒有被連結的端點和未使用的參數

設定測試

  • 這個階段的目標是驗證網路和應用程式伺服器設定的安全性。
    • 測試應用程式平臺設定
      • 確認應用程式架構中各個元件的適當設定
      • 以防止可能危及整個架構安全的錯誤
      • 比如
        • 測試 HTTP 嚴格傳輸安全性 (HSTS) 功能
          • 這項功能可網站透過特殊的回應標頭
          • 通知瀏覽器永遠不要使用未加密的 HTTP 與指定的網域伺服器建立連線
        • 需要檢查伺服器的日誌設定
          • 確保日誌記錄了所有重要的事件
          • 例如登入嘗試、資料庫存取
    • 測試應用程式伺服器設定確保它們符合安全標準
      • 檢查應用程式伺服器的設定
      • 例如 Apache、IIS、Nginx
    • 測試 Web 應用程式防火牆設定
      • 如果應用程式使用 Web 應用程式防火牆 (WAF),
      • 則需要測試 WAF 的規則設定
      • 確保它可以有效地阻擋常見的攻擊
      • 例如跨站腳本 (XSS) 和 SQL 注入

身分驗證測試

  • 這個階段的目標是評估身分驗證機制的強度和有效性。
    • 測試預設帳號和密碼
      • 許多應用程式在安裝時會使用預設的帳號和密碼
      • 例如 "admin"、"administrator"、"root"
      • 攻擊者可以利用這些預設憑證來取得系統的控制權
    • 測試帳號列舉和可猜測的使用者帳號
      • 某些應用程式可能會洩漏使用者名稱或帳號資訊
      • 例如
        • 在錯誤訊息中顯示使用者名稱
        • 允許使用者透過電子郵件地址查詢帳號
      • 攻擊者可以利用這些資訊來進行暴力破解攻擊或其他攻擊
    • 測試弱密碼政策
      • 如果應用程式沒有強制執行強密碼政策
      • 攻擊者就可以使用簡單的密碼來猜測使用者帳號
    • 測試認證繞過
      • 檢查應用程式是否可以透過某些方法繞過認證機制
      • 例如
        • 使用 SQL 注入攻擊來修改資料庫中的使用者權限
        • 利用應用程式的邏輯漏洞來跳過認證步驟
    • 測試工作階段管理機制
      • 評估工作階段管理機制的安全性
        • 測試工作階段 ID 的長度
        • 複雜度、隨機性和預測性
    • 測試 Cookie 屬性
      • 檢查 Cookie 的屬性設定
        • 例如 SecureHttpOnlySameSite
        • Secure 確保 Cookie 只能透過 HTTPS 傳輸
        • HttpOnly確保無法被 JavaScript 存取

授權測試

  • 這個階段的目標是驗證存取控制機制是否按預期工作。
    • 測試目錄遍歷/檔案包含
      • 檢查應用程式是否允許使用者透過輸入特殊字元來存取系統上的其他檔案或目錄
      • 例如使用 ../%5c 等字元來跳脫應用程式的根目錄
    • 測試權限提升
      • 檢查使用者是否可以透過某些方法提升他們的權限
      • 例如利用應用程式的邏輯漏洞來
        • 取得管理員權限
        • 修改資料庫中的使用者角色

工作階段(Session)管理測試

  • 這個階段的目標是評估工作階段管理機制的安全性
    • 工作階段固定攻擊 (Session Fixation)
      • 攻擊者誘騙使用者使用攻擊者預先設定好的工作階段 ID 來登入應用程式
      • 然後攻擊者就可以使用該 ID 來冒充使用者
    • 工作階段劫持攻擊 (Session Hijacking)
      • 攻擊者透過竊取使用者的工作階段 Cookie 來冒充使用者
      • 為了防止這種情況,工作階段 Cookie 應該標記為 Secure 屬性,以便它們只能透過 HTTPS 進行通訊
    • 工作階段謎題攻擊 (Session Puzzling)
      • 攻擊者利用應用程式的邏輯漏洞
      • 將多個工作階段變數合併成一個,以繞過安全機制或提升權限

輸入驗證測試

  • 這個階段的目標是辨識和利用各種類型的注入漏洞。
    • 反射式跨站腳本 (Reflected XSS)
      • 發生在攻擊者將瀏覽器可執行程式碼注入單一 HTTP 回應中時
    • 儲存型跨站腳本 (Stored XSS)
      • 儲存型跨站腳本 (XSS) 是最危險的跨站腳本類型
      • 允許使用者儲存資料的網頁應用程式可能會遭到這類攻擊
    • SQL 注入
      • 攻擊者將 SQL 程式碼注入到應用程式中,以控制資料庫查詢
      • 針對特定類型的 SQL 注入漏洞也有特定的測試指南
        • 例如 Oracle、MySQL、SQL Server、PostgreSQL、MS Access、NoSQL 和 ORM
    • LDAP 注入
      • LDAP 注入攻擊利用應用程式在建構 LDAP 查詢時沒有正確地過濾使用者輸入
      • 攻擊者可以透過注入 LDAP 語法來控制 LDAP 伺服器的查詢結果
    • XML 注入
      • XML 注入攻擊利用應用程式在處理 XML 資料時沒有正確地過濾使用者輸入
      • 攻擊者可以透過注入惡意 XML 程式碼來修改 XML 文件的結構或內容
    • 程式碼注入
      • 攻擊者將程式碼注入到應用程式中,以控制伺服器的執行流程
    • 格式化字串注入
      • 格式化字串注入攻擊利用應用程式在使用格式化字串函式時沒有正確地過濾使用者輸入
      • 攻擊者可以透過注入格式化字串指示符來控制程式記憶體的存取
    • HTTP 分割/走私攻擊
      • 攻擊者透過在 HTTP 標頭中插入特殊字元
      • 例如 CR 和 LF,來分割 HTTP 訊息
        • 以繞過安全機制或進行其他攻擊
    • 主機標頭注入
      • 攻擊者透過修改 HTTP 請求中的主機標頭
      • 來控制伺服器回應的內容或將請求導向到其他伺服器
    • 伺服器端模板注入
      • 攻擊者將惡意程式碼注入到伺服器端模板引擎中
      • 以控制伺服器的執行流程

錯誤處理測試

  • 這個階段的目標是驗證錯誤處理機制是否安全並防止資訊洩漏
    • 不正確的錯誤處理
      • 檢查應用程式在處理錯誤時是否會洩漏敏感資訊
      • 例如資料庫錯誤訊息、程式碼片段等
    • 堆疊追蹤
      • 堆疊追蹤是指程式在執行過程中發生錯誤時,所記錄的函式呼叫順序
      • 攻擊者可以利用堆疊追蹤資訊來瞭解應用程式的內部運作方式,並找出潛在的漏洞

弱加密測試

  • 這個階段的目標是辨識和利用與加密相關的漏洞。這包含測試:
    • 弱傳輸層安全性 (TLS)
      • 檢查應用程式使用的 TLS 協定版本、加密套件和憑證等
      • 確保它們符合安全標準
    • 填充 Oracle 攻擊
      • 填充 Oracle 攻擊利用加密演算法中的填充機制來解密資料或取得加密金鑰
    • 透過未加密通道傳送的敏感資訊
      • 檢查應用程式是否會透過未加密的通道傳送敏感資訊
      • 例如密碼、信用卡號等
    • 弱雜湊演算法
      • 檢查應用程式使用的加密演算法是否過時或存在已知的漏洞,例如 MD5、RC4 等

商業邏輯測試

  • 這個階段的目標是評估應用程式商業邏輯的安全性,並辨識可能導致繞過安全控制或濫用應用程式功能的漏洞
    • 商業邏輯資料驗證
      • 檢查應用程式是否對使用者輸入的資料進行了適當的驗證
      • 以防止攻擊者提交惡意資料
    • 偽造請求的能力商業邏輯資料驗證
      • 檢查攻擊者是否可以偽造應用程式的請求
      • 例如修改 HTTP 請求的參數、偽造 Cookie 等
    • 完整性檢查商業邏輯資料驗證
      • 檢查應用程式是否對資料的完整性進行了驗證
      • 以防止攻擊者竄改資料
    • 處理時序商業邏輯資料驗證
      • 檢查應用程式在處理不同請求時的時間順序差異
      • 以找出潛在的競爭條件漏洞
    • 函數使用次數限制商業邏輯資料驗證
      • 檢查應用程式是否對特定函數的呼叫次數進行了限制
      • 以防止攻擊者發動 DoS 攻擊
    • 工作流程規避商業邏輯資料驗證
      • 檢查攻擊者是否可以繞過應用程式預定的工作流程
      • 例如跳過某些步驟、修改資料狀態等
    • 針對應用程式誤用的防禦措施商業邏輯資料驗證
      • 檢查應用程式是否採取了適當的措施來防止使用者誤用應用程式
      • 例如限制檔案上傳的大小和類型、防止使用者提交過多的請求等

總結

本文深入探討了軟體開發生命週期(SDLC)中的測試階段,詳細介紹了各種測試類型、技術和方法。文章特別聚焦於OWASP Web Security Testing Guide (WSTG),闡述了其重要性及如何利用WSTG進行全面的網站安全測試。WSTG測試階段包括資訊收集、設定測試、身分驗證測試、授權測試、工作階段管理測試、輸入驗證測試、錯誤處理測試、弱加密測試和商業邏輯測試。每個階段都提供了具體的測試方法和注意事項,幫助讀者建立一個全面、系統的網站安全測試框架。

小試身手

Q1: 在SDLC的測試階段中,哪種測試類型不需要執行程式?
A) 動態測試
B) 靜態測試
C) 單元測試
D) 整合測試

答案: B

解析: 靜態測試是在不執行程式的情況下進行的測試,主要通過檢查程式碼、設計文件、需求文件等來查找問題。其他選項都需要執行程式來進行測試。

Q2: OWASP WSTG中,哪個測試階段的目標是找出目標應用程式的相關資訊,包含使用的技術和潛在的漏洞?
A) 設定測試
B) 身分驗證測試
C) 資訊收集
D) 授權測試

答案: C

解析: 資訊收集階段的目標是找出目標應用程式的相關資訊,包含使用的技術和潛在的漏洞。這個階段包括搜索引擎探勘、網頁伺服器指紋辨識、網頁內容資訊洩漏審查等。

Q3: 在工作階段管理測試中,哪種攻擊方式是攻擊者誘騙使用者使用預先設定好的工作階段ID來登入應用程式?
A) 工作階段劫持攻擊
B) 工作階段固定攻擊
C) 工作階段謎題攻擊
D) 跨站腳本攻擊

答案: B

解析: 工作階段固定攻擊(Session Fixation)是攻擊者誘騙使用者使用攻擊者預先設定好的工作階段ID來登入應用程式,然後攻擊者就可以使用該ID來冒充使用者。

Q4: 在輸入驗證測試中,哪種類型的XSS攻擊被認為是最危險的?
A) 反射式XSS
B) DOM-based XSS
C) 儲存型XSS
D) 突變型XSS

答案: C

解析: 儲存型跨站腳本(Stored XSS)被認為是最危險的跨站腳本類型。這種攻擊允許攻擊者將惡意腳本永久儲存在目標伺服器上,影響所有存取受影響頁面的使用者。

Q5: 在商業邏輯測試中,哪種測試主要檢查應用程式在處理不同請求時的時間順序差異?
A) 商業邏輯資料驗證
B) 偽造請求的能力
C) 完整性檢查
D) 處理時間順序測試

答案: D

解析: 處理時間順序測試主要檢查應用程式在處理不同請求時的時間順序差異,目的是找出潛在的競爭條件漏洞。這種測試可以幫助發現由於不正確的時間順序測試處理而導致的安全問題。


上一篇
資安這條路:Day 28 SSDLC 安全開發軟體生命週期─開發階段與 OWASP 標準(OWASP Top 10、OWASP ASVS、OWASP Developer Guide)
下一篇
資安這條路:Day 30 SSDLC 安全開發軟體生命週期─部署與維運階段與整合 OWASP 資源
系列文
資安這條路:系統化學習網站安全與網站滲透測試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言