什麼是 Azure Web 應用程式防火牆?
在這裡,您將瞭解 Azure Web 應用程式防火牆的基本概念。 此概觀可協助您評估 Azure Web 應用程式防火牆是否為可新增至 Contoso 整體網路安全性策略的實用工具。
Azure Web 應用程式防火牆概觀
您可能會認為惡意使用者不會困擾您的 Web 應用程式。 不過,測試指出 Bot 或惡意執行者會在部署幾分鐘內探查新的 Web 應用程式是否有弱點。 如果您將應用程式放在網路上,假設威脅執行者幾乎會立即測試應用程式是否有弱點。 您也可以假設這類探查會在應用程式的存留期內繼續。
大部分的 Web 應用程式惡意測試都會檢查是否有一或多個常見的弱點。 如果發現,威脅執行者可以使用這些弱點來執行攻擊,例如下列惡意探索:
- SQL 插入
- 跨網站指令碼攻擊
- 本機和遠端檔案包含攻擊
- HTTP/HTTPS 攻擊
- 惡意 Bot 攻擊
Web 應用程式開發週期中的常見工作牽涉到撰寫程式代碼以關閉最常見的安全性漏洞。 撰寫安全性程式代碼需要時間、專業知識和測試。
Azure Web 應用程式防火牆是一項 Azure 服務,可提供 Azure 裝載 Web 應用程式的集中式保護。 Azure Web 應用程式防火牆可保護 Web 應用程式免於常見的威脅,例如 SQL 插入式和跨網站腳本。
您可以在幾分鐘內部署 Azure Web 應用程式防火牆。 您的 Web 應用程式會立即從已知威脅中獲得強大的保護,而不需要撰寫單一安全性程式代碼。
Azure Web 應用程式防火牆的主要功能
為了協助您評估 Azure Web 應用程式防火牆,以下是其一些重要功能:
受控規則:Microsoft的安全性小組建立、維護及更新 Azure Web 應用程式防火牆用來偵測及防止常見惡意探索的規則。 如果規則變更或規則集(請參閱下列描述)已修改,Microsoft會自動且順暢地更新 Azure Web 應用程式防火牆。
備註
您無法修改或刪除 Azure Web 應用程式防火牆所提供的受控規則。 不過,如果特定規則對您的環境有問題(例如,它封鎖 Web 應用程式的合法流量),您可以建立排除專案或停用規則或規則集。 您也可以建立自定義規則來覆寫預設行為。
Bot 規則:Bot 規則能識別良好的 Bot,並防止惡意 Bot。 系統會根據 Microsoft 威脅情報檢測到惡意機器人。
自定義規則:如果 Azure Web 應用程式防火牆所提供的受控規則未涵蓋 Web 應用程式的特定威脅,您可以建立自定義規則。
模式:Azure Web 應用程式防火牆可以在兩種模式之一中運作。 偵測模式只會記錄違反規則的要求,同時防止模式記錄和封鎖違反規則的要求。
排除清單:您可以設定 Azure Web 應用程式防火牆,以在檢查要求時忽略特定屬性。
原則:您可以將一組受控規則、自定義規則、排除和其他 Azure Web 應用程式防火牆設定合併成稱為 Azure Web 應用程式防火牆原則的單一元素。 然後,您可以將該原則套用至多個 Web 應用程式,以便輕鬆管理和維護。
要求大小限制:您可以設定 Azure Web 應用程式防火牆來標幟太小或太大的要求。
警示:Azure Web 應用程式防火牆與 Azure 監視器整合。 此整合可讓您在 WAF (Web 應用程式防火牆) 偵測到威脅時,提供近乎即時的警示。
Azure Web 應用程式防火牆所防止的常見攻擊
下表描述 Azure Web 應用程式防火牆可協助防範的最常見惡意威脅類型。
| 威脅 | 說明 |
|---|---|
| 跨網站指令碼攻擊 | 威脅執行者會使用 Web 應用程式將惡意代碼傳送至其他使用者的網頁瀏覽器。 瀏覽器會執行程序代碼,讓腳本能夠存取使用者的會話數據、Cookie 和其他敏感性資訊。 |
| 本機檔案包含 | 攻擊者會利用伺服器處理 include 語句的弱點,通常是在 PHP 腳本中。 藉由將特別設定的文字傳遞至指令碼的 include 陳述式,攻擊者就可以包含本機伺服器上的檔案。 攻擊者接著就能夠存取敏感性資訊並執行伺服器命令。 |
| PHP 插入式攻擊 | 攻擊者會插入特別設定的文字,以誘使伺服器執行 PHP 命令。 這些命令可讓攻擊者執行本機或遠端 PHP 程式代碼。 攻擊者接著就能夠存取敏感數據,並在伺服器上執行命令。 |
| 通訊協議攻擊 | 攻擊者會將特別設定的文字插入 HTTP/HTTPS 要求標頭。 根據插入標頭的特定文字,攻擊者可以欺騙伺服器顯示敏感數據或執行程序代碼。 |
| 遠端命令執行 | 攻擊者會誘使伺服器執行與伺服器作系統相關聯的命令。 例如,在 UNIX 系統上,攻擊者可能會執行伺服器 ls 以取得目錄清單。 |
| 遠端檔案包含攻擊 | 與本機檔案包含相似,差別在於攻擊者將特別配置的文字傳送至伺服器,該文字會將遠端檔案——也就是由攻擊者控制的遠端伺服器上的檔案——傳遞給腳本的 include 語句。 |
| 工作階段固定 | 攻擊者會利用 Web 應用程式弱點,讓攻擊者取得有效的會話標識碼。 攻擊者會欺騙使用者以該標識碼驗證新的會話。 攻擊者接著會劫持這個使用者驗證的工作階段。 |
| SQL 插入 | 在 Web 表單欄位中,攻擊者會插入特別設定為欺騙伺服器執行 SQL 命令的文字(或「插入」)。 這些命令可讓攻擊者存取敏感數據、插入、更新或刪除數據,或執行 SQL 作業。 |
只有當伺服器信任其接收到的輸入時,上表所列的所有漏洞利用才有可能發生。 撰寫只檢查和清理這些惡意探索的程式代碼會很困難且耗時。 在上一個表格中,只有一小部分 Web 應用程式可能面臨的潛在漏洞被列出。 Azure Web 應用程式防火牆的設計目的是防止這些攻擊等等。
清理輸入
新式 Web 應用程式面臨的威脅會有所不同且複雜。 不過,在大部分情況下,惡意探索的可能原因是 Web 應用程式會隱含信任它收到的輸入。
例如,假設有一個 Web 窗體,可讓授權的 Web 應用程式使用者登入用戶帳戶。 表單只包含三個元素:
- [ 用戶名稱] 文字框
- [密碼] 文字框
- [登入] 按鈕
當授權的使用者填寫表單並選取 [ 登入] 時,Web 應用程式腳本會將使用者名稱和密碼儲存在變數中。 假設這些變數分別命名為 userName 和 userPassword。 然後,腳本會執行下列語句:
sql = "SELECT * FROM users WHERE username='" + userName + "' AND password='" + userPassword + "'"
例如,如果使用者名稱是 support 且密碼為 1234ABCD,則 sql 變數具有下列值:
SELECT * FROM users WHERE username='support' AND password='1234ABCD'
Web 應用程式會執行這個 SQL 語句。 如果從查詢傳回記錄,Web 應用程式會將使用者登入。
現在假設攻擊者在 admin'-- [ 用戶名稱 ] 字段中輸入 ,並將 [ 密碼 ] 字段保留空白。 在此情況下,以下是產生的 SQL 語句:
SELECT * FROM users WHERE username='admin'--' AND password=''
在許多 SQL 系統上,雙虛線 (--) 會標示批註的開頭。 -- 之後的所有內容將被忽略,因此上一個語句相當於下列程式碼:
SELECT * FROM users WHERE username='admin'
假設有名為 admin 的使用者,此命令會將攻擊者以系統管理員使用者的身分登入,這是一個嚴重的安全漏洞!
上述範例是一個稱為 SQL 注入的漏洞攻擊案例。 攻擊者可以在信任所有輸入的 Web 應用程式中,利用 SQL 插入式攻擊及其他惡意探索。
Azure Web 應用程式防火牆會在 Web 應用程式與其使用者輸入之間建立不信任的屏障。 Azure Web 應用程式防火牆假設所有輸入都可能是惡意的,因此它會 清理 該輸入。
根據上下文,對輸入進行過濾有不同的含義。 例如,清理輸入可能表示移除明顯危險的文字元素,例如 SQL 批注指標。 不論如何進行資料清理,結果都是不會對網路應用程式或其後端資料造成任何傷害的輸入。