只要討論到 Web 應用程式的資安問題,在 Azure 官方文件中都是唯一推薦使用 Web Application Firewall (WAF),好奇心驅使下的我一直很想知道 WAF 到底會怎麼防禦這些資安攻擊,於是以下我嘗試了幾種最簡單的攻擊手法,來看看 WAF 會有哪些反應。
WAF on Azure Application Gateway
WAF 其實本身不是一項單獨的服務,它更像是其他服務內的進階功能,以我們這次選擇的 Azure Application Gateway 為例,你必須要選擇 WAF_v2 等級的 SKU 才能享受到 WAF 的資安保護。
再來我們還需要一個可以被測試攻擊的網頁做為 Application Gateway 的後端,最快速的方式就是建立一個 App Service,在這個測試中我們不需要編寫任何網頁或測試,直接使用 App Service 的預設入口即可。
建立 Virtual Network
首先我們先建立一個 10.10.0.0/16 的虛擬網路,其中 10.10.1.0/24 的子網段會分配給 Application Gateway 使用。
建立 Public IP
接著因為我們會透過 Application Gateway 將網頁對外,所以勢必需要一個公用 IP。
建立 Application Gateway
再來就是建立 Application Gateway 了,這邊記得要對應上剛剛建立的子網段與公用 IP。
Application Gateway 使用 Portal UI 創建時會需要你點一堆東西,但如果使用 AZ CLI 就可以跳過這些點擊,並給你一組基本的設定。
建立 App Service
如前面提到的,我們需要一個 App Service 做為測試的網頁,首先建立 App Service Plan。
接著在 Plan 上建立 App Service。
設定 Application Gateway
再來我們需要在 Application Gateway 上加上一點設定,來讓 Application Gateway 可以將流量導入 App Service。
後端集區
使用 AZ CLI 建立的 Application Gateway 會帶有一個預設的後端集區 appGatewayBackendPool,我們在其中的後端目標新增上剛剛建立好的 App Service。
後端設定
確認設定
設定完成後稍等幾分鐘,進入「監視」→「後端健康狀態」,確認 Application Gateway 可以看得到我們的 App Service。
最後使用瀏覽器開啟 Application Gateway 的公用 IP,確認看到 App Service 的預設畫面就可以了。
開啟 WAF
開啟後等待五分鐘,確保 WAF 生效後就能開始測試了。
WAF 測試
以下我們使用最簡單的 SQL Injection 與 Cross-Site-Scripting (XSS) 範例,並且在 URL Path 中插入這些攻擊。
SQL Injection:?id=1 OR 1=1
這條攻擊預期透過 OR 1=1 來讓搜尋條件無效,藉此得到整個 Table 的資訊。
SQL Injection:?id=1'; DROP TABLE users; --
另一個標準的攻擊方式,目標是刪除資料庫的整張表。
留言
張貼留言