什麼是 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 應用程式防火牆,以下是其中一些重要功能:
受控規則:Azure Web 應用程式防火牆用來偵測和防止常見惡意探索的規則,都是由 Microsoft 的安全性小組建立、維護及更新。 如果規則變更或規則集 (請參閱下列描述) 遭到修改,Microsoft 會自動順暢地更新 Azure Web 應用程式防火牆。
注意
您無法修改或刪除 Azure Web 應用程式防火牆所提供的受控規則。 不過,如果特定規則會對您的環境造成問題 (例如封鎖您 Web 應用程式的合規流量),則您可以建立排除清單或停用規則 (或規則集)。 您也可以建立自訂規則來覆寫預設行為。
Bot 規則:Bot 規則可識別狀況良好的 Bot,並防止狀況不良的 Bot。 偵測狀況不良的 Bot 會以 Microsoft 威脅情報為依據。
自訂規則:如果 Azure Web 應用程式防火牆所提供的受控規則未涵蓋您 Web 應用程式的特定威脅,您可以建立自訂規則。
模式:Azure Web 應用程式防火牆可以在兩種模式的其中一個運作:偵測模式只會記錄違反規則的要求,而預防模式則會記錄並封鎖違反規則的要求。
排除清單:您可以設定 Azure Web 應用程式防火牆,在檢查要求時忽略特定屬性。
原則:您可以將一組受控規則、自訂規則、排除及其他 Azure Web 應用程式防火牆設定合併成單一元素,稱為 Azure Web 應用程式防火牆原則。 然後,您可以將該原則套用至多個 Web 應用程式,以便輕鬆管理和維護。
要求大小限制:您可以設定 Azure Web 應用程式防火牆,以標幟太小或太大的要求。
警示:Azure Web 應用程式防火牆會與 Azure 監視器整合。 這項整合可在 WAF 偵測到威脅時,為您提供近乎即時的警示。
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 註解指標。 無論發生哪種清理方式,結果都是不會對 Web 應用程式或其後端資料造成傷害的輸入。