開源弱點掃描軟體 – ZAP

ZAP

相信大家平常在開發時,肯定是以功能開發跟商業考量為主要目標。但近年發生了許多資安事件,也讓大眾逐漸意識到資安的重要性。但大家對於資安的漏洞與攻擊方式應該都不太了解,這樣要如何確保自己的系統是安全的呢?

一、什麼是弱點掃描?

除了一般的帳密驗證與授權之外,我們可以依靠弱點掃描工具來檢驗常見的攻擊方式,確保在基本跟常見的攻擊方式下,系統可以正常運作。

弱點掃描分成白箱測試黑箱測試

白箱測試屬於靜態測試,我們會提供工具程式原始碼,工具會掃描原始碼的內容進行靜態分析,並告訴我們是否有寫出系統漏洞。工具會提供漏洞說明及修正範例,告訴我們怎樣的寫法可以避免這些漏洞產生。

黑箱測試則屬於動態測試,我們這次不提供工具程式碼,改為提供網址,讓工具直接用模擬攻擊的方式,對網站進行測試,來確認是否有系統漏洞的發生。因為我們沒有提供原始碼,工具並不知道如何針對程式碼的內容進行攻擊,所以稱為黑箱測試。也由於不提供程式碼,工具並不知道我們是使用哪種技術來達成的,僅能工具提供我們相關說明但不會提供修改範例。

而弱點掃描主要都是靠工具來進行弱點的測試,更進階的滲透測試則會找資安專家或白帽駭客,來了解系統狀況,並模擬更真實的資安攻防戰,進行更完善的資安檢測。

弱點掃描如果找付費軟體或是專業的公司來進行檢測的話,可能需要不少費用,而且每次修復與重新檢測都是一筆費用。這篇文章主要會介紹免費的開源工具來進行弱點掃描的使用與學習。

二、安裝 ZAP

我們使用開源工具來自一家 OWASP 的非營利組織,提供的 OWASP Top Ten 會排名每年十大網路的安全風險,是具有權威象徵的資安排名。黑箱測試採用 ZAP,也是這篇文章的主角。白箱測試則會採用是 SonarQube,會寫另一篇文章介紹用法。

這是一般的安裝教學。

但我們教學會採用 Docker Compose 的方式進行安裝與執行。

此為 Docker Compose 的設定檔:

services:
  zap:
    image: zaproxy/zap-stable:latest
    container_name: zap-server
    ports:
      - 8080:8080
      - 8090:8090
    volumes:
      - ./volumes/data:/zap/wrk/:rw
    command: >
      zap-webswing.sh

啟用指令:

$ docker compose up -d

使用瀏覽器開啟 http://localhost:8080/zap/ 會導向 ZAP 的網頁版的 GUI 畫面。8090 port 則是提供 ZAP 的 API。

ZAP 初始畫面

網頁畫面是使用 Webswing 產生類似桌面版的頁面,有用過 Java Swing 的人應該覺得這個風格格外親切。

三、使用 ZAP 自動掃描

對話框主要是詢問是否儲存工作階段,我們這邊選擇第三個選項不儲存。

是否儲存工作階段

選擇 Automated Scan (自動掃描)。

選擇 Automated Scan (自動掃描)

我們這邊使用 JSON Placeholder 的網址做測試,在輸入框填入 https://jsonplaceholder.typicode.com/

輸入網址

這邊說明一下畫面可以做的設定。

  • URL to attack: 測試網站的主網址,ZAP 會用爬蟲去解析網站內有的 URL 跟子 URL。
  • Use traditional spider: 使用傳統的爬蟲。這項主要是因為現在 SPA 盛行,傳統的爬蟲不會等待 JavaScript 執行,但執行速度就快很多,如果是採用 SSR 就可以勾選,請依情況斟酌選擇。
  • Use ajax spider: 就是針對 AJAX 來做執行的部分,瀏覽器可以選擇 Firefox 或 Chrome 來貼近開發客群。
  • Progress: 是目前的執行狀態。

設定完成就可以點選執行。

點選執行

應該會看到三個階段的執行。

傳統爬蟲會去把能抓到的靜態頁面的連結給擷取出來。

傳統爬蟲

AJAX 爬蟲則會去等待 JavaScript 執行完成並擷取連結。

AJAX 爬蟲

最後才會真正執行弱點掃描的部分,ZAP 嘗試針對對每個連結執行攻擊,並把確認到的結果記錄下來。

弱點掃描

我們可以點選查看執行細節。

點選查看執行細節

可以看到 ZAP 實際上執行了哪些類型的攻擊。

執行細節

最後我們點選生成報告。

生成報告

生成報告的對話預設會長這樣。

生成報告對話框

這邊要注意的是,因為我們是使用 Docker,所以要把路徑改為我們 Volume 掛出來的路徑,也就是 /zap/wrk

修改生成報告路徑

如此一來儲存之後才會留存在我們本地的位置上(提供的設定檔會存在 ./volumes/data,可以依自己的需求修改),不然 Docker Container 停掉之後報告就會一起被重置掉了。

四、檢視報告

報告會儲存為 HTML 的形式,如果沒修改設定檔的話大概會在這個位置 ./volumes/data/2024-06-14-ZAP-Report-.html
我們用瀏覽器開啟之後大概會長這個樣子。

HTML 報告

我們可以往下轉看到摘要,這是依據分險程度跟信心程度的統計表格。
因為 ZAP 是黑箱測試,他很有機率誤判漏洞。
信心程度越高代表 ZAP 認定這個漏洞存在的可能性越高。

依據分險程度跟信心程度的統計表格

可以看到 JSON Placeholder 沒有任何的高風險漏洞,但有幾個中度跟低風險的漏洞存在。

再往下轉看到摘要,這是依據站點跟風險程度的統計表格。

依據站點的統計表格

我們這次掃描只有擷取到 JSON Placeholder 的網址跟 Cloudflare 的 CDN。

最後是依據弱點類型的統計表格。

依據弱點類型的統計表格

再繼續往下轉,可以看到各網址所隱含的弱點問題。

警報列表

我們可以點選類型,網頁就會自動轉到提供更詳細的弱點說明連結的部分。
比如說我們點選第二項 Content Security Policy (CSP) Header Not Set。

CSP

這邊簡單介紹一下,CSP 是指透過設定 HTTP header 來限制瀏覽器載入和執行特定來源的資源,阻止惡意內容在受到信任的網頁環境中執行。不在白名單的設定內容的話,就會被瀏覽器擋下來,網頁就無法進行存取跟執行。
CSP 原理

五、結論

以上就是 ZAP 的基本介紹,我們認識了什麼是弱點掃描、靜態測試與動態測試的差別,並且使用 ZAP 進行了自動掃描的功能。

要記得,使用弱點掃描與修正本質上是為了確保自己網站的安全性與可靠性,而不是單純為了驗證過關或取得憑證。當哪天網站被攻擊時,系統停用或資料損失甚至會遠遠超過花錢做弱掃的成本。

而是否使用付費軟體來執行弱掃,則是根據商業考量來評估。也可以先用免費的開源軟體做一次基本測試,再送付費檢測,減少部分的時間成本與費用。

我們目前只介紹了 ZAP 最基本的自動掃描功能,還有很多細節可以調整以及提供網頁驗證的部分,就等有機會再聊了。

Loading

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *