缓冲区溢出检查
缓冲区溢出检查检测试图导致 Web 服务器上的缓冲区溢出。如果 Web App Firewall 检测到 URL、Cookie 或标头的长度超过配置的长度,则会阻止请求,因为它可能导致缓冲区溢出。
缓冲区溢出检查可防止攻击不安全的操作系统或 Web 服务器软件,这些软件可能会崩溃或行为不可预测,当它收到的数据字符串大于它可以处理的数据字符串时。正确的编程技术通过检查传入数据并拒绝或截断超长字符串来防止缓冲区溢出。但是,许多程序并不检查所有传入的数据,因此容易受到缓冲区溢出的影响。此问题特别影响旧版本的 Web 服务器软件和操作系统,其中许多仍在使用中。
缓冲区溢出安全检查允许您配置“阻止”、“日志”和“统计”操作。此外,您还可以配置以下参数:
- 最大 URL 长度。Web App Firewall 在请求的 URL 中允许的最大长度。具有较长 URL 的请求将被阻止。可能的值:0—65535。默认值:1024
- 最大饼干长度。Web App Firewall 允许请求中所有 Cookie 的最大长度。使用较长 Cookie 的请求触发冲突行为。可能的值:0—65535。默认值:4096
- 最大报头长度。Web App Firewall 允许 HTTP 标头的最大长度。具有较长标头的请求将被阻止。可能的值:0—65535。默认值:4096
- 查询字符串长度。传入请求中的查询字符串允许的最大长度。查询较长的请求将被阻止。可能的值:0—65535。默认值:1024
- 总请求长度。传入请求允许的最大请求长度。长度较长的请求将被阻止。可能的值:0—65535。默认值:24820
使用命令行配置缓冲区溢出安全检查
使用命令行配置缓冲区溢出安全检查操作和其他参数
在命令提示符下,键入:
add appfw profile <name> -bufferOverflowMaxURLLength <positive_integer> -bufferOverflowMaxHeaderLength <positive_integer> - bufferOverflowMaxCookieLength <positive_integer> -bufferOverflowMaxQueryLength <positive_integer> -bufferOverflowMaxTotalHeaderLength <positive_integer>
示例:
add appfw profile profile1 –bufferOverflowMaxURLLength 7000 –bufferOverflowMaxHeaderLength 7250 – bufferOverflowMaxCookieLength 7100 –bufferOverflowMaxQueryLength 7300 –bufferOverflowMaxTotalHeaderLength 7300
使用 Citrix ADC GUI 配置缓冲区溢出安全检查
- 导航到 安全 > Web App Firewall 和 配置文件。
- 在配置文件页面上,选择一个配置文件,然后单击编辑。
- 在 Citrix Web App Firewall 配置文件页面上,转到“高级设置”部分,然后单击“安全检查”。
- 在 安全检查 部分中,选择 缓冲区溢出 ,然后单击 操作设置。
- 在“缓冲区溢出设置”页中,设置以下参数。 a. 操作。选择要执行命令注入安全性检查的一个或多个操作。 b. 最大 URL 长度。受保护网站上 URL 的最大长度(以字符为单位)。具有较长 URL 的请求将被阻止。 c. 最大 Cookie 长度。发送到您受保护网站的 Cookie 的最大长度(以字符为单位)。使用较长 cookie 的请求将被阻止。 d. 最大标题长度。发送到受保护网站的请求中 HTTP 标头的最大长度(以字符为单位)。具有较长标头的请求将被阻止。 e. 最大查询长度。发送到受保护网站的查询字符串的最大长度(以字节为单位)。查询字符串较长的请求将被阻止。 f. 最大总报头长度。发送到受保护网站的请求中 HTTP 标头总长度的最大长度(以字节为单位)。将使用最小值和最大值在 Http配置文件中。长度较长的请求将被阻止。
-
单击确定和关闭。
将日志功能与缓冲区溢出安全检查结合使用
启用日志操作后,缓冲区溢出安全检查冲突将作为 APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE 和 APPFW_BUFFEROVERFLOW_HDR 冲突记录在审核日志中。Web App Firewall 支持本机和 CEF 日志格式。您也可以将日志发送到远程 syslog 服务器。
如果使用 GUI 查看日志,则可以使用点击部署功能应用日志指示的放宽。
使用命令行访问日志消息
切换到 shell 并将 /var/log/ 文件夹中的 ns.log 结尾,以访问与缓冲区溢出违规相关的日志消息:
> \*\*Shell\*\*
> \*\*tail -f /var/log/ns.log | grep APPFW_BUFFEROVERFLOW\*\*
<!--NeedCopy-->
在非块模式下显示 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\*\*
<!--NeedCopy-->
在非块模式下显示 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\*\*
<!--NeedCopy-->
在块模式下显示 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>\*\*
<!--NeedCopy-->
使用 GUI 访问日志消息
Citrix GUI 包括一个用于分析日志消息的有用工具(Syslog Viewer)。您有多个用于访问 Syslog 查看器的选项:
-
导航到应用程序防火墙 > 配置文件,选择目标配置文件,然后单击安全检查。突出显示 缓冲区溢出 行并单击 日志 。 当您直接从配置文件的缓冲区溢出安全检查访问日志时,GUI 会筛选出日志消息,并仅显示与这些安全检查冲突有关的日志。
-
您还可以通过导航到 NetScaler > 系统 > 审核 访问系统日志查看器。 在审计消息部分,单击 Syslog 消息 链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。
-
导航到 应用程序防火墙 > 策略 > 审核 。在 审计消息 部分,单击 Syslog 消息 链接以显示 Syslog Viewer,该查看器显示所有日志消息,包括其他安全检查违规日志。
基于 XML 的 Syslog 查看器提供了各种筛选器选项,用于仅选择您感兴趣的日志消息。要为 缓冲区溢 出检查选择日志消息,请在 模块 的下拉列表选项中选择 APPFW进行筛选。事件类型列表提供三个选项,即 APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE 和 APPFW_BUFFEROVERFLOW_HDR,以查看与缓冲区溢出安全检查有关的所有日志消息。您可以选择一个或多个选项以进一步优化您的选择。例如,如果您选中 APPFW_Bufferoverflow_Cookie 复选框并单击 应用 按钮,则系统日志查看器中只会显示与 缓冲区溢出安全 检查违规相关的日志消息。如果将游标放在特定日志消息的行中,则日志消息下方会显示多个选项,如 模块、 事件类型、事件 ID和 客户端 IP。您可以选择这些选项中的任何一个以突出显示日志消息中的相应信息。
点击部署:GUI 提供点击部署功能,目前仅支持与 URL 长度冲突相关的缓冲区溢出日志消息。您可以使用 Syslog Viewer,不仅可以查看触发的违规,还可以根据被阻止的消息的观察长度运行明智的决策。如果当前值限制太大,并且触发误报,您可以选择一条消息并将其部署以将当前值替换为消息中看到的 URL 长度值。此操作的日志消息必须采用 CEF 日志格式。如果可以为日志消息部署松弛,则会在该行的 Syslog 查看器 框的右边缘显示一个复选框。选中该复选框,然后从“操 作”列表中选择一个选项来部署放宽。“全部编辑和部署”、“部署”和“全部部署”均可用作“操作”选项。您可以使用 APPFW_BUFFEROVERFLOW_URL 筛选器隔离与配置的 URL 长度冲突有关的所有日志消息。
如果选择单个日志消息,则所有三个操作选项“编辑和部署”、“部署”和“全部部署”都可用。如果选择“编辑和部署”,则会显示“缓冲区溢出设置”对话框。请求中观察到的新 URL 长度将插入到 最大 URL 长度输入 字段中。 如果单击“关闭”而不进行任何编辑,则当前配置的值将保持不变。如果单击“确 定”按钮,“最大 URL 长度”的新值将替换以前的值。
注意
在显示的“缓冲区溢出设置”对话框中未选中“块、 日志和 统计数据”操作复选框,如果您选择“编辑和部署”选项,则需要重新配置。请确保在单 击“确定”之前启用这些复选框,否则将配置新的 URL 长度,但操作设置为 无。
如果选中多条日志消息的复选框,则可以使用“部署”或“全部部署”选项。 如果已部署的日志消息具有不同的 URL 长度,则配置的值将替换为所选消息中观察到的最高 URL 长度值。部署规则只会导致更改 bufferOverflowMaxURLLength 值。已配置的操作将保留并保持不变。
在 GUI 中使用点击部署功能
- 在 Syslog 查看器中,在 模块 选项中选择 APPFW 。
- 启用 APPFW_BUFFEROVERFLOW_URL 复选框作为事件类型来筛选相应的日志消息。
- 启用该复选框以选择规则。
- 使用“操 作”下拉列表的选项来部署放宽。
- 导航到“应用程序防火墙”>“配 置 文件”,选择目标配置文件,然后单击“安全检查”以访问“缓冲区溢出 设置”窗格以验证 最大 URL 长度 值是否已更新。
缓冲区溢出冲突的统计信息
启用统计操作时,Web App Firewall 对此安全检查采取任何操作时,缓冲区溢出安全检查的计数器会递增。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器的增量大小可能会因配置的设置而异。例如,如果启用了阻止操作,则对包含三个缓冲区溢出违规的页面的请求会逐一增加统计数器,因为检测到第一个违规时该页面会被阻止。但是,如果禁用块,处理相同的请求会增加违规的统计计数器,因为每个违规都会生成单独的日志消息。
使用命令行显示缓冲区溢出安全检查统计信息
在命令提示符下,键入:
> sh appfw stats
要显示特定配置文件的统计信息,请使用以下命令:
> stat appfw profile <profile name>
使用 GUI 显示缓冲区溢出统计信息
- 导航到 系统 > 安全 > 应用程序防火墙 。
- 在右窗格中,访问 统计信息 链接。
- 使用滚动条查看有关缓冲区溢出冲突和日志的统计信息。统计表提供实时数据,每 7 秒更新一次。
重要内容
-
缓冲区溢出安全检查允许您配置限制以强制执行允许的 URL、Cookie 和标题的最大长度。
-
“阻止”、“日志”和“统计”操作使您能够监视流量并为您的应用程序配置最佳保护。
-
Syslog 查看器允许您筛选和查看与缓冲区溢出冲突有关的所有日志消息。
-
“点击部署”功能支持 bufferOverflowMaxURLLength 冲突。您可以选择和部署单个规则,也可以选择多条日志消息来调整和放宽 URL 允许的最大长度的当前配置值。选定组中 URL 的最高值设置为新值,以允许当前标记为冲突的所有这些请求。
-
Web App Firewall 现在在检查传入请求时评估各个 Cookie。如果在 cookie 标头中接收到的任何一个 cookie 的长度超过配置的 BufferOverflowMaxCookieLength,则触发缓冲区溢出冲突。
重要
在 10.5.e 版本(在 59.13xx.e 版本之前的一些临时增强版本中)和 11.0 版本(在 65.x 之前的版本中)中,对 Cookie 标头的 Web App Firewall 处理发生了更改。在这些版本中,每个 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 长度时,还包括周围空格和分号 (;) 字符分隔名称-值对。