缓冲区溢出检查
缓冲区溢出检查检测试图导致 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
使用 NetScaler GUI 配置缓冲区溢出安全检查
- 导航到“安全”>“Web App Firewall 和 配置文件”。
- 在 配置文件 页面上,选择一个配置文件,然后单击 编辑。
- 在 NetScaler Web App Firewall 配置文件 页面上,转到 高级设置 部分,然后单击 安全检查。
- 在“安全检查”部分中,选择“缓冲区溢出”,然后单击“操作设置”。
- 在“缓冲区溢出设置”页面中,设置以下参数。 a. 操作。选择一个或多个要执行的操作以进行命令注入安全检查。 b. 最大 URL 长度。受保护网站上 URL 的最大长度,以字符为单位。具有较长 URL 的请求将被阻止。 c. 饼干的最大长度。发送到您的受保护网站的 Cookie 的最大长度,以字符为单位。包含较长 Cookie 的请求将被阻止。 d. 最大标题长度。发送到您的受保护网站的请求中 HTTP 标头的最大长度,以字符为单位。具有较长标头的请求将被阻止。 e. 最大查询长度。发送到您的受保护网站的查询字符串的最大长度,以字节为单位。查询字符串较长的请求会被阻止。 f. 最大标题总长度。发送到您的受保护网站的请求中 HTTP 标头总长度的最大长度,以字节为单位。将使用此值和 httpProfile 中的 maxHeaderLen 的最小值。长度较长的请求会被阻止。
-
单击“确定”和“关闭”。
在缓冲区溢出安全检查中使用日志功能
启用日志操作后,缓冲区溢出安全检查违规行为将在审计日志中记录为 APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE 和 APPFW_BUFFEROVERFLOW_HDR 违规。Web App Firewall 支持本机和 CEF 日志格式。您还可以将日志发送到远程 syslog 服务器。
如果您使用 GUI 查看日志,则可以使用“单击部署”功能应用日志指示的放松措施。
使用命令行访问日志消息
切换到 shell 并跟踪 /var/log/ 文件夹中的 ns.logs 以访问与缓冲区溢出违规有关的日志消息:
> \*\*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-->
显示非阻塞模式下违规 bufferOverflowmaxurlength 的 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 访问日志消息
GUI 包含一个用于分析日志消息的有用工具(Syslog 查看器)。您可以通过多种方式访问 Syslog 查看器:
-
导航到 应用程序防火墙 > 配置文件,选择目标配置文件,然后单击 安全检查。突出显示“缓冲区溢出”行,然后单击“日志”。 当您直接从配置文件的缓冲区溢出安全检查访问日志时,GUI 会过滤掉日志消息,仅显示与这些安全检查违规有关的日志。
-
您还可以通过导航到 NetScaler > 系统 >审核来访问系统日志查看器。 在“审核消息”部分,单击 Syslog 消息链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。这对于在请求处理过程中可能触发多个安全检查冲突时进行调试非常有用。
-
导航到 应用程序防火墙 > 策略 > 审核。在“审核消息”部分,单击 Syslog 消息链接以显示 Syslog Viewer,其中显示所有日志消息,包括其他安全检查违规日志。
基于 XML 的 Syslog 查看器提供各种筛选选项,用于仅选择您感兴趣的日志消息。 要为缓冲区溢出检查选择日志消息,请在模块的下拉列表选项中选择APPFW进行过滤。事件类型列表提供三个选项,APPFW_BUFFEROVERFLOW_URL、APPFW_BUFFEROVERFLOW_COOKIE和 APPFW_BUFFEROVERFLOW_HDR,用于查看与缓冲区溢出安全检查有关的所有日志消息。您可以选择一个或多个选项来进一步优化您的选择。例如,如果您选中APPFW_BUFFEROVERFLOW_COOKIE复选框并单击“应用”按钮,则系统日志查看器中仅显示与 Cookie 标头的缓冲区溢出安全检查违规有关的日志消息。如果将光标置于特定日志消息的行中,则日志消息下方会显示多个选项,例如模块、事件类型、事件 ID和 客户端 IP。您可以选择这些选项中的任何一个来突出显示日志消息中的相应信息。
单击部署:GUI 提供单击部署功能,该功能目前仅支持与 URL 长度违规相关的缓冲区溢出日志消息。您不仅可以使用 Syslog Viewer 查看触发的违规行为,还可以根据观察到的屏蔽消息长度做出明智的决策。如果当前值过于严格并且触发了误报,则可以选择一条消息并部署该消息,将当前值替换为消息中看到的 URL 长度值。对于此操作,日志消息必须采用 CEF 日志格式。如果可以为日志消息部署放松功能,则在该行的Syslog Viewer框的右边缘会出现一个复选框。选中该复选框,然后从“操作”列表中选择一个选项来部署放松效果。“编辑和部署”、“部署”和“全部部署”作为操作 选项提供。您可以使用 APPFW_BUFFEROVERFLOW_URL 过滤器来隔离与配置的 URL 长度违规有关的所有日志消息。
如果您选择单个日志消息,则所有三个操作选项“编辑并部署”、“部署”和“全部部署”都可用。 如果选择“编辑和部署”,则会显示“缓冲区溢出设置”对话框。在请求中观察到的新 URL 长度将插入到 最大 URL 长度输入 字段中。 如果您在未进行任何编辑的情况下单击“关闭”,则当前配置的值将保持不变。如果单击“确定”按钮,“最大 URL 长度”的新值将取代之前的值。
注意
在显示的“缓冲区溢出设置”对话框中, 阻 止、 记录 和 统计 操作复选框处于未选中状态,如果您选择“编辑和部署”选项,则需要重新配置。在单击“确定”之前,请务必启用这些复选框,否则将配置新的 URL 长度,但操作将设置为 无。
如果您选中多个日志消息的复选框,则可以使用“部 署”或“全部部署”选项。 如果部署的日志消息具有不同的 URL 长度,则配置值将被所选消息中观察到的最大 URL 长度值所取代。部署规则只会导致更改 bufferOverfl owMaxurLength 值。配置的操作将保留并保持不变。
在 GUI 中使用“单击部署”功能
- 在 Syslog 查看器中,在“模块”选项中选择 APPFW 。
- 启用 APPFW_BUFFEROVERFLOW_URL 复选框作为事件类型以筛选相应的日志消息。
- 启用该复选框以选择规则。
- 使用“操作”选项下拉列表来部署放松效果。
- 导航到“应用程序防火墙”>“配置文件”,选择目标配置文件,然后单击“安全检查”以访问“缓冲区溢出 设置”窗格以验证“最大 URL 长度”值是否已更新。
缓冲区溢出违规的统计信息
启用统计操作后,当 Web App Firewall 对此安全检查采取任何操作时,缓冲区溢出安全检查的计数器会增加。这些统计数据是针对流量、冲突和日志的速率和总计数收集的。日志计数器增量的大小可能因配置的设置而异。例如,如果启用了屏蔽操作,则对包含三个 Buffer Overflow 违规的页面的请求会使统计计数器增加 1,因为当检测到第一次违规时,该页面就会被阻止。但是,如果禁用阻止,则处理相同的请求会增加违规的统计计数器,因为每次违规都会生成单独的日志消息。
使用命令行显示缓冲区溢出安全检查统计信息
在命令提示符下,键入:
> 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 之前的版本中)中,Web App Firewall 对 Cookie 标头的处理发生了变化。在这些版本中,每个 cookie 都是单独评估的,如果在 Cookie 标头中收到的任何一个 cookie 的长度超过配置的 bufferOverflowMaxCookieLength,就会触发缓冲区溢出违规。 由于此更改,可能会允许在 10.5 及更早版本中被阻止的请求,因为不会计算整个 cookie 标头的长度来确定 cookie 长度。** 在某些情况下,转发给服务器的 cookie 总大小可能大于接受的值,服务器可能会以“400 错误请求”作出响应。
此更改已恢复。除了 11.0 版本 65.x 和后续版本外,10.5.e->59.13xx.e 和后续的 10.5.e 增强版本中的行为现在与版本 10.5 的非增强版本的行为类似。现在,在计算 cookie 的长度时,会考虑整个原始 Cookie 标头。确定 cookie 长度时还包括周围的空格和分号 (;) 字符分隔名称-值对。