相信大家平常在開發時,肯定是以功能開發跟商業考量為主要目標。但近年發生了許多資安事件,也讓大眾逐漸意識到資安的重要性。但大家對於資安的漏洞與攻擊方式應該都不太了解,這樣要如何確保自己的系統是安全的呢?
一、什麼是弱點掃描?
除了一般的帳密驗證與授權之外,我們可以依靠弱點掃描工具來檢驗常見的攻擊方式,確保在基本跟常見的攻擊方式下,系統可以正常運作。
弱點掃描分成白箱測試跟黑箱測試。
白箱測試屬於靜態測試,我們會提供工具程式原始碼,工具會掃描原始碼的內容進行靜態分析,並告訴我們是否有寫出系統漏洞。工具會提供漏洞說明及修正範例,告訴我們怎樣的寫法可以避免這些漏洞產生。
黑箱測試則屬於動態測試,我們這次不提供工具程式碼,改為提供網址,讓工具直接用模擬攻擊的方式,對網站進行測試,來確認是否有系統漏洞的發生。因為我們沒有提供原始碼,工具並不知道如何針對程式碼的內容進行攻擊,所以稱為黑箱測試。也由於不提供程式碼,工具並不知道我們是使用哪種技術來達成的,僅能工具提供我們相關說明但不會提供修改範例。
而弱點掃描主要都是靠工具來進行弱點的測試,更進階的滲透測試則會找資安專家或白帽駭客,來了解系統狀況,並模擬更真實的資安攻防戰,進行更完善的資安檢測。
弱點掃描如果找付費軟體或是專業的公司來進行檢測的話,可能需要不少費用,而且每次修復與重新檢測都是一筆費用。這篇文章主要會介紹免費的開源工具來進行弱點掃描的使用與學習。
二、安裝 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。
網頁畫面是使用 Webswing 產生類似桌面版的頁面,有用過 Java Swing 的人應該覺得這個風格格外親切。
三、使用 ZAP 自動掃描
對話框主要是詢問是否儲存工作階段,我們這邊選擇第三個選項不儲存。
選擇 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 執行完成並擷取連結。
最後才會真正執行弱點掃描的部分,ZAP 嘗試針對對每個連結執行攻擊,並把確認到的結果記錄下來。
我們可以點選查看執行細節。
可以看到 ZAP 實際上執行了哪些類型的攻擊。
最後我們點選生成報告。
生成報告的對話預設會長這樣。
這邊要注意的是,因為我們是使用 Docker,所以要把路徑改為我們 Volume 掛出來的路徑,也就是 /zap/wrk。
如此一來儲存之後才會留存在我們本地的位置上(提供的設定檔會存在 ./volumes/data,可以依自己的需求修改),不然 Docker Container 停掉之後報告就會一起被重置掉了。
四、檢視報告
報告會儲存為 HTML 的形式,如果沒修改設定檔的話大概會在這個位置 ./volumes/data/2024-06-14-ZAP-Report-.html。
我們用瀏覽器開啟之後大概會長這個樣子。
我們可以往下轉看到摘要,這是依據分險程度跟信心程度的統計表格。
因為 ZAP 是黑箱測試,他很有機率誤判漏洞。
信心程度越高代表 ZAP 認定這個漏洞存在的可能性越高。
可以看到 JSON Placeholder 沒有任何的高風險漏洞,但有幾個中度跟低風險的漏洞存在。
再往下轉看到摘要,這是依據站點跟風險程度的統計表格。
我們這次掃描只有擷取到 JSON Placeholder 的網址跟 Cloudflare 的 CDN。
最後是依據弱點類型的統計表格。
再繼續往下轉,可以看到各網址所隱含的弱點問題。
我們可以點選類型,網頁就會自動轉到提供更詳細的弱點說明連結的部分。
比如說我們點選第二項 Content Security Policy (CSP) Header Not Set。
這邊簡單介紹一下,CSP 是指透過設定 HTTP header 來限制瀏覽器載入和執行特定來源的資源,阻止惡意內容在受到信任的網頁環境中執行。不在白名單的設定內容的話,就會被瀏覽器擋下來,網頁就無法進行存取跟執行。
五、結論
以上就是 ZAP 的基本介紹,我們認識了什麼是弱點掃描、靜態測試與動態測試的差別,並且使用 ZAP 進行了自動掃描的功能。
要記得,使用弱點掃描與修正本質上是為了確保自己網站的安全性與可靠性,而不是單純為了驗證過關或取得憑證。當哪天網站被攻擊時,系統停用或資料損失甚至會遠遠超過花錢做弱掃的成本。
而是否使用付費軟體來執行弱掃,則是根據商業考量來評估。也可以先用免費的開源軟體做一次基本測試,再送付費檢測,減少部分的時間成本與費用。
我們目前只介紹了 ZAP 最基本的自動掃描功能,還有很多細節可以調整以及提供網頁驗證的部分,就等有機會再聊了。