什么是 Azure Web 应用程序防火墙?

已完成

在这里,你将了解 Azure Web 应用程序防火墙的基础知识。 本概述将帮助你评估 Azure Web 应用程序防火墙是否是添加到 Contoso 整体网络安全策略的有用工具。

Azure Web 应用程序防火墙概述

你可能会认为恶意用户不会困扰你的 Web 应用。 但是,测试表明机器人或恶意执行组件在部署后的几分钟内探测新的 Web 应用是否存在弱点。 如果将应用置于 Web 上,假设威胁执行组件几乎会立即测试应用是否存在漏洞。 还可以假设此类探测将在应用的生存期内继续。

Web 应用的大多数恶意测试检查是否存在一个或多个常见漏洞。 如果发现,威胁参与者可以使用这些漏洞来运行攻击,如以下攻击:

  • SQL 注入
  • 跨站点脚本
  • 本地和远程文件包含
  • HTTP/HTTPS 洪水攻击
  • 恶意机器人攻击

Web 应用开发周期中的常见任务涉及编写代码以关闭最常见的安全漏洞。 编写安全代码需要时间、专业知识和测试。

Azure Web 应用程序防火墙是一项 Azure 服务,提供对 Azure 托管的 Web 应用的集中保护。 Azure Web 应用程序防火墙可保护 Web 应用免受 SQL 注入和跨站点脚本等常见威胁。

包含 Azure Web 应用程序防火墙的 Azure 虚拟网络示意图。机器人和威胁被阻止访问 Web 应用程序;合法请求则获准通过。

可以在几分钟内部署 Azure Web 应用程序防火墙。 Web 应用立即从已知威胁中获得强大的保护,无需编写单行安全代码。

Azure Web 应用程序防火墙的主要功能

为了帮助你评估 Azure Web 应用程序防火墙,以下是其一些重要功能:

  • 托管规则:Microsoft的安全团队创建、维护和更新 Azure Web 应用程序防火墙用于检测和防止常见攻击的规则。 如果规则更改或规则集(请参阅以下说明)已修改,Microsoft会自动和无缝地更新 Azure Web 应用程序防火墙。

    注释

    不能修改或删除 Azure Web 应用程序防火墙提供的托管规则。 但是,如果某个特定规则对环境有问题(例如,它阻止了到 Web 应用的合法流量),则可以创建排除项或禁用规则或规则集。 还可以创建自定义规则来覆盖默认行为。

  • 机器人规则:机器人规则可识别好的机器人并防止坏机器人。 根据Microsoft威胁情报检测到恶意机器人。

  • 自定义规则:如果 Azure Web 应用程序防火墙提供的托管规则未涵盖对 Web 应用程序的特定威胁,则可以创建自定义规则。

  • 模式:Azure Web 应用程序防火墙可以在以下两种模式之一中运行。 检测模式仅记录违反规则的请求,而预防模式既记录又阻止违反规则的请求。

  • 排除列表:可以将 Azure Web 应用程序防火墙配置为在检查请求时忽略特定属性。

  • 策略:可以将一组托管规则、自定义规则、排除项和其他 Azure Web 应用程序防火墙设置合并到名为 Azure Web 应用程序防火墙策略的单个元素中。 然后,可以将该策略应用于多个 Web 应用,以便轻松管理和维护。

  • 请求大小限制:可以将 Azure Web 应用程序防火墙配置为标记太小或太大的请求。

  • 警报:Azure Web 应用程序防火墙与 Azure Monitor 集成。 当 WAF(Web 应用程序防火墙)检测到威胁时,此集成可提供近乎实时的警报。

Azure Web 应用程序防火墙阻止的常见攻击

下表描述了 Azure Web 应用程序防火墙帮助防范的最常见恶意威胁类型。

威胁 DESCRIPTION
跨站点脚本 威胁参与者使用 Web 应用程序将恶意代码发送到其他用户的 Web 浏览器。 浏览器运行代码,该代码允许脚本访问用户的会话数据、Cookie 和其他敏感信息。
本地文件包含 攻击者利用服务器处理 include 语句中的漏洞,通常是在 PHP 脚本中。 通过将专门配置的文本传递给脚本的 include 语句,攻击者可以包含服务器上本地存在的文件。 然后,攻击者可能能够访问敏感信息并运行服务器命令。
PHP 注入 攻击者插入专门配置为欺骗服务器运行 PHP 命令的文本。 这些命令使攻击者可以运行本地或远程 PHP 代码。 然后,攻击者可能能够访问敏感数据并在服务器上运行命令。
协议攻击 攻击者将专门配置的文本插入 HTTP/HTTPS 请求标头。 根据注入标头的特定文本,攻击者可能会欺骗服务器显示敏感数据或运行代码。
远程命令执行 攻击者欺骗服务器运行与服务器的作系统关联的命令。 例如,在 UNIX 系统上,攻击者可能运行服务器 ls 以获取目录列表。
远程文件包含 与本地文件包含相同,不同之处在于攻击者向服务器发送特殊配置的文本,而该文本会将远程文件(即由攻击者控制的远程服务器上的文件)传递给脚本的 include 语句。
会话固定 攻击者利用 Web 应用漏洞,使攻击者能够获取有效的会话 ID。 攻击者欺骗用户通过该 ID 对新会话进行身份验证。 然后,攻击者劫持了此用户验证的会话。
SQL 注入 在 Web 窗体字段中,攻击者插入专门配置为欺骗服务器运行 SQL 命令的(或“注入”)文本。 这些命令允许攻击者访问敏感数据、插入、更新或删除数据,或运行 SQL作。

仅当服务器信任它收到的输入时,才能使用上表中列出的所有攻击。 编写用于检查和清理这些漏洞的代码将非常困难且耗时。 上表中仅表示 Web 应用可能面临的攻击的一小部分。 Azure Web 应用程序防火墙旨在防止这些攻击和更多攻击。

净化输入

新式 Web 应用面临的威胁各不相同且复杂。 在大多数情况下,漏洞利用之所以可能发生,是因为 Web 应用程序隐式地信任其接收到的输入。

例如,请考虑允许授权的 Web 应用用户登录到用户帐户的 Web 窗体。 表单只包含三个元素:

  • “用户名”文本框
  • 密码文本框
  • 登录 ”按钮

当授权用户填写表单并选择 “登录”时,Web 应用脚本会将用户名和密码存储在变量中。 假设这些变量分别命名为 userNameuserPassword。 然后,该脚本将执行以下语句:

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 的用户,此命令会将攻击者以管理员身份登录,这是一个严重的安全漏洞!

描述两次登录尝试的网络图,Azure Web 应用程序防火墙允许授权登录并拒绝未经授权的登录。

前面的示例是名为 SQL 注入的漏洞的实例。 攻击者可以利用信任所有输入的 Web 应用中的 SQL 注入和其他攻击。

Azure Web 应用程序防火墙在 Web 应用与其用户输入之间创建不受信任的屏障。 Azure Web 应用程序防火墙假定所有输入都可能是恶意的,因此它会 清理 该输入。

对输入进行净化在不同的上下文中意味着不同的东西。 例如,清理输入可能意味着删除明显危险的文本元素,例如 SQL 注释指示器。 无论数据清理如何进行,其结果都是不会对 Web 应用或其后端数据造成任何损害的输入。