缓冲区溢出检查

缓冲区溢出检查检测试图导致 Web 服务器上的缓冲区溢出。如果 Web App Firewall 检测到 URL、Cookie 或标头长于请求中指定的最大长度,则会阻止该请求,因为这可能是试图导致缓冲区溢出。

缓冲区溢出检查可防止攻击不安全的操作系统或 Web 服务器软件,这些软件可能会崩溃或行为不可预测,当它收到的数据字符串大于它可以处理的数据字符串时。正确的编程技术通过检查传入数据并拒绝或截断超长字符串来防止缓冲区溢出。但是,许多程序并不检查所有传入的数据,因此容易受到缓冲区溢出的影响。此问题特别影响旧版本的 Web 服务器软件和操作系统,其中许多仍在使用中。

缓冲区溢出安全检查允许您配置“止”、“日志”和“统计”操作。此外,您还可以配置以下参数:

  • 最大 URL 长度。Web App Firewall 在请求的 URL 中允许的最大长度。具有较长 URL 的请求将被阻止。可能的值:0-65535。默认值:1024
  • 最大 Cookie 长度。Web App Firewall 允许请求中所有 Cookie 的最大长度。使用较长 Cookie 的请求触发冲突行为。可能的值:0-65535。默认值:4096
  • 最大标题长度。Web App Firewall 允许 HTTP 标头的最大长度。具有较长标头的请求将被阻止。可能的值:0-65535。默认值:4096

使用命令行配置缓冲区溢出安全检查

使用命令行配置缓冲区溢出安全检查操作和其他参数

如果您使用命令行界面,则可以将以下缓冲区溢出检查参数添加到设置 appfw 配置文件<profileName> 命令:

  • -bufferOverflowAction [[ block] [ log] [stats]] | [none]
  • -bufferOverflowMaxURLLength <positiveInteger>
  • -bufferOverflowMaxCookieLength <positiveInteger>
  • -bufferOverflowMaxHeaderLength <positiveInteger>

使用 GUI 配置缓冲区溢出安全检查

在 GUI 中,您可以在窗格中为与应用程序关联的配置文件配置缓冲区溢出安全检查。

使用 GUI 配置或修改缓冲区溢出安全检查

  1. 导航到“应用程序防火墙”>“配置 件”,突出显示目标配置文件,然后单击“编辑”。
  2. 在“高级设置”窗格中,单击“安全检查”。

安全检查表显示当前为所有安全检查配置的操作设置。您有 2 个配置选项:

a. 如果您只想为 缓冲区溢出启用或禁用 阻止日志统计数据操作,则可以选中或清除表中的复选框,单 确定,然后单击 保存并关闭以关闭安全检查窗格中。

b. 如果要为此安全检查配置其他选项,请双击 缓冲区溢出,或者选择该行并单击 操作设置,以显示以下选项:

最大 URL 长度。

最大 Cookie 长度。 最大标题长度。

更改上述任何设置后,单 击“确定”保存更改并返回“安全检查”表。如果需要,您可以继续配置其他安全检查。单 “确定”以保存在“安全检查”部分中所做的所有更改,然后单击“保存并关闭”以关闭“安全检查”窗格。

将日志功能与缓冲区溢出安全检查结合使用

启用日志操作后,缓冲区溢出安全检查冲突将作为 APPFW_BUFFEROVERFLOW_URLAPPFW_BUFFEROVERFLOW_COOKIEAPPFW_BUFFEROVERFLOW_HDR 冲突记录在审核日志中。Web App Firewall 支持本机和 CEF 日志格式。您也可以将日志发送到远程 syslog 服务器。

如果使用 GUI 查看日志,则可以使用点击部署功能应用日志指示的放宽。

使用命令行访问日志消息

切换到 shell 并尾随 /var/log/ 文件夹中的 ns.log 以访问与缓冲区溢出冲突相关的日志消息:

> \*\*Shell\*\*
> \*\*tail -f /var/log/ns.log | grep APPFW_BUFFEROVERFLOW\*\*

在非块模式下显示 bufferOverflowMaxCookieLength 冲突的 CEF 日志消息示例

Oct 22 17:35:20 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|\*\*APPFW_BUFFEROVERFLOW_COOKIE\*\*|6|src=10.217.253.62 geolocation=Unknown spt=41198 method=GET request=http://aaron.stratum8.net/FFC/sc11.html \*\*msg=Cookie header length(43) is greater than maximum allowed(16).\*\* cn1=119 cn2=465 cs1=owa_profile cs2=PPE1 cs3=wvOOOb+cJ2ZRbstZpyeNXIqLj7Y0001 cs4=ALERT cs5=2015 \*\*act=not blocked\*\*

在非块模式下显示 bufferOverflowMaxURLLength 冲突的 CEF 日志消息示例

Oct 22 18:39:56 <local0.info> 10.217.31.98 CEF:0|Citrix|NetScaler|NS11.0|APPFW|\*\*APPFW_BUFFEROVERFLOW_URL\*\*|6|src=10.217.253.62 geolocation=Unknown spt=19171 method=GET request=http://aaron.stratum8.net/FFC/sc11.html \*\*msg=URL length(39) is greater than maximum allowed(20).\*\* cn1=707 cn2=402 cs1=owa_profile cs2=PPE0 cs3=kW49GcKbnwKByByi3+jeNzfgWa80000 cs4=ALERT cs5=2015 \*\*act=not blocked\*\*

在块模式下显示 bufferOverflowMaxHeaderLength 冲突的本机格式日志消息示例

Oct 22 18:44:00 <local0.info> 10.217.31.98 10/22/2015:18:44:00 GMT ns 0-PPE-2 : default APPFW \*\*APPFW_BUFFEROVERFLOW_HDR\*\* 155 0 :  10.217.253.62 374-PPE2 khhBEeY4DB8V2D3H2sMLkXmfWnA0002 owa_profile \*\*Header(User-Agent) length(82) is greater than maximum allowed(10)\*\* : http://aaron.stratum8.net/ \*\*<blocked>\*\*

使用 GUI 访问日志消息

Citrix GUI 包括一个用于分析日志消息的有用工具(系统日志查看器)。您有多个用于访问 Syslog 查看器的选项:

  • 导航到“应用程序防火墙”>“配置 件”,选择目标配置文件,然后单击“安全检查”。突出显示 缓冲区溢出 行并单击 日志 。当您直接从配置文件的缓冲区溢出安全检查访问日志时,GUI 会筛选出日志消息,并仅显示与这些安全检查冲突有关的日志。

  • 您还可以通过导航到 NetScaler > 系统 > **审核 访问系统** 日志查看器。在审核消息部分中,单击 Syslog 消息 链接以显示 Syslog 查看器,该查看器显示所有日志消息,包括其他安全检查冲突日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。

  • 导航到 应用程序防火墙 > 策略 > 审核 。在 审核消息 部分中,单击 Syslog 消息 链接以显示 Syslog 查看器,该查看器显示所有日志消息,包括其他安全检查冲突日志。

基于 XML 的 Syslog 查看器提供了各种筛选器选项,用于仅选择您感兴趣的日志消息。要为 缓冲区溢出 检查选择日志消息,请通过在 模块 的下拉选项中选择 APPFW 进行筛选。事件类型列表提供三个选项,即 APPFW_BUFFEROVERFLOW_URLAPPFW_BUFFEROVERFLOW_COOKIEAPPFW_BUFFEROVERFLOW_HDR,以查看与缓冲区溢出安全检查有关的所有日志消息。您可以选择一个或多个选项以进一步优化您的选择。例如,如果您选择 APPFW_BUFFEROVERFLOW_COOKIE 复选框,然后单击应用按钮,系统日志查看器中只会显示与缓冲区溢出安全检查冲突相关的日志消息。如果将游标放在特定日志消息的行中,则日志消息下方会显示多个选项,如 模块事 **件类型、事件 ID和 **客户端 IP。您可以选择这些选项中的任何一个以突出显示日志消息中的相应信息。

点击部署:GUI 提供点击部署功能,目前仅支持与 URL 长度冲突相关的缓冲区溢出日志消息。您可以使用 Syslog 查看器不仅查看触发的冲突,还可以根据被阻止邮件的观察长度执行明智的决策。如果当前值限制太大,并且触发误报,您可以选择一条消息并将其部署以将当前值替换为消息中看到的 URL 长度值。此操作的日志消息必须采用 CEF 日志格式。如果可以为日志消息部署放宽,则该行的“Syslog 查看器”框的右边缘会出现一个复选框。选中该复选框,然后从“ 作”列表中选择一个选项来部署放宽。“全部编辑和部署”、“部署”和“全部部署”均可用作“作”选项。您可以使用 APPFW_BUFFEROVERFLOW_URL 筛选器隔离与配置的 URL 长度冲突有关的所有日志消息。

如果选择单个日志消息,则所有三个操作选项“编辑和部署”、“部署”和“全部部署”都可用。如果选择“编辑和部署”,则会显示“缓冲区溢出设置”对话框。在请求中观察到的新 URL 长度将插入到“最大 URL 长度”输入字段中。如果单击“关闭”而不进行任何编辑,则当前配置的值将保持不变。如果单击“ 定”按钮,“最大 URL 长度”的新值将替换以前的值。

注意

在显示的“缓冲区溢出设置”对话框中未选中“日志统计数据”操作复选框,如果您选择“编辑和部署”选项,则需要重新配置。请确保在单 “确定”之前启用这些复选框,否则将配置新的 URL 长度,但操作将设置为

如果选中多条日志消息的复选框,则可以使用“部署”或“全部部署”选项。如果已部署的日志消息具有不同的 URL 长度,则配置的值将替换为所选消息中观察到的最高 URL 长度值。部署规则只会导致更改 bufferOverflowMaxURLLength 值。已配置的操作将保留并保持不变。

在 GUI 中使用点击部署功能

  1. 在系统日志查看器中,在 模块 选项中选择 APPFW
  2. 启用 APPFW_BUFFEROVERFLOW_URL 复选框作为事件类型来筛选相应的日志消息。
  3. 启用该复选框以选择规则。
  4. 使用“ 作”下拉列表的选项来部署放宽。
  5. 导航到“应用程序防火墙”>“配 文件”,选择目标配置文件,然后单击“安全检查”以访问“缓冲区溢出 设置”窗格以验证 最大 URL 长度 值是否已更新。

缓冲区溢出冲突的统计信息

启用统计操作时,Web App Firewall 对此安全检查采取任何操作时,缓冲区溢出安全检查的计数器会递增。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器的增量大小可能会因配置的设置而异。例如,如果启用了阻止操作,则对包含三个缓冲区溢出冲突的页面的请求将统计数据计数器递增一个,因为一旦检测到第一个冲突,该页面就会被阻止。但是,如果禁用了块,则处理相同的请求会将冲突的统计数据计数器和日志增加三个,因为每个冲突都会生成一个单独的日志消息。

使用命令行显示缓冲区溢出安全检查统计信息

在命令提示窗口中,键入:

> sh appfw stats

要显示特定配置文件的统计信息,请使用以下命令:

> stat appfw profile <profile name>

使用 GUI 显示缓冲区溢出统计信息

  1. 导航到 系统 > 安全 > 应用程序防火墙
  2. 在右窗格中,访问 统计信息 链接。
  3. 使用滚动条查看有关缓冲区溢出冲突和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。

重要内容

  • 缓冲区溢出安全检查允许您配置限制以强制执行允许的 URL、Cookie 和标题的最大长度。

  • 阻止”、“日志”和“统计”操作使您能够监视流量并为您的应用程序配置最佳保护。

  • Syslog 查看器允许您筛选和查看与缓冲区溢出冲突有关的所有日志消息。

  • 点击部署”功能支持 bufferOverflowMaxURLLength 冲突。您可以选择和部署单个规则,也可以选择多条日志消息来调整和放宽 URL 允许的最大长度的当前配置值。选定组中 URL 的最高值设置为新值,以允许当前标记为冲突的所有这些请求。

  • Web App Firewall 现在在检查传入请求时评估各个 Cookie。如果在 cookie 标头中接收到的任何一个 cookie 的长度超过配置的 BufferOverflowMaxCookieLength,则触发缓冲区溢出冲突。

重要

在 10.5.e 版本(在 59.13xx.e 版本之前的一些临时增强版本中)和 11.0 版本(在 65.x 之前的版本中)中,Web App Firewall 对 Cookie 标头的处理发生了更改。在这些版本中,每个 cookie 都是单独评估的,如果 cookie 标头中接收到的任何一个 cookie 的长度超过配置的 BufferOverflowMaxCookieLength,则触发缓冲区溢出冲突。由于此更改,可能允许在 10.5 和更早版本版本中被阻止的请求,因为不计算整个 cookie 标头的长度来确定 cookie 长度。** 在某些情况下,转发到服务器的 Cookie 总大小可能大于接受的值,并且服务器可能会响应“400 错误请求”。

请注意 ,此更改已被恢复。10.5.e->59.13xx.e 和后续 10.5.e 增强版本以及 11.0 版本 65.x 和后续版本中的行为现在类似于版本 10.5 的非增强版本。现在在计算 Cookie 的长度时考虑整个原始 Cookie 标头。在确定 cookie 长度时,还包括周围空格和分号 (;) 字符分隔名称-值对。**