什么是 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 注入和跨站脚本)。

Diagram of an Azure virtual network with Azure Web Application Firewall. Bots and threats are blocked from a web app; legitimate requests are allowed.

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

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

为了帮助你评估 Azure Web 应用程序防火墙,下面提供其中的一些重要功能:

  • 托管规则:Azure Web 应用程序防火墙用于检测和防止常见攻击的规则由 Microsoft 安全团队创建、维护和更新。 如果规则发生更改,或者规则集(请参阅以下描述)被修改,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 检测到威胁时为你提供准实时警报。

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

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

威胁 说明
跨站点脚本 攻击者使用 Web 应用向其他用户的 Web 浏览器发送恶意代码。 浏览器运行代码,这使脚本能够访问用户的会话数据、cookies 和其他敏感信息。
本地文件包含 攻击者利用服务器处理 include 语句中的漏洞进行攻击,这些漏洞通常出现在 PHP 脚本中。 通过向脚本的 include 语句传递特殊配置的文本,攻击者可以包含服务器上本地存在的文件。 然后,攻击者可以访问敏感信息并运行服务器命令。
PHP 注入 攻击者插入专门配置的文本,诱使服务器运行 PHP 命令。 这些命令允许攻击者运行本地或远程 PHP 代码。 然后,攻击者可以访问敏感数据并在服务器上运行命令。
协议攻击 攻击者在 HTTP/HTTPS 请求头中插入特别配置的文本。 根据注入头中的特定文本,攻击者可以诱使服务器显示敏感数据或运行代码。
远程命令执行 攻击者诱使服务器运行与服务器操作系统关联的命令。 例如,在 UNIX 系统上,攻击者可能让服务器运行 ls 以获取目录列表。
远程文件包含 与本地文件包含相同,不同之处在于攻击者将服务器特殊配置的文本发送给脚本的 include 语句,该文本传递远程文件(由攻击者控制的远程服务器上的文件)。
会话固定 攻击者利用允许攻击者获取有效会话 ID 的 Web 应用漏洞进行攻击。 攻击者诱使用户使用该 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 的用户,此命令将以管理员用户的身份让攻击者登录;这是一个严重的安全漏洞!

Network diagram depicting two sign-in attempts, with Azure Web Application Firewall allowing the authorized sign-in and denying the unauthorized sign-in.

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

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

净化输入意味着不同的内容,具体取决于上下文。 例如,净化输入可能意味着删除明显危险的文本元素,例如 SQL 注释指示器。 无论进行什么样的净化,结果都是不会对 Web 应用或其后端数据造成损害的输入。