ADC

cookie 劫持保护

Cookie 劫持保护可缓解来自黑客的 Cookie 窃取攻击。在安全攻击中,攻击者接管用户会话以获得对 Web 应用程序的未经授权的访问权限。当用户浏览网站(例如银行应用程序)时,该网站会与浏览器建立会话。在会话期间,应用程序将登录凭证、页面访问等用户详细信息保存在 cookie 文件中。然后,Cookie 文件将在响应中发送到客户端浏览器。浏览器存储 Cookie 以保持活动会话。攻击者可以从浏览器的 Cookie 存储区手动窃取这些 cookie,也可以通过某些 rouge 浏览器扩展程序窃取这些 cookie。然后,攻击者使用这些 Cookie 来访问用户的 Web 应用程序会话。

为了缓解 cookie 攻击,NetScaler Web App Firewall (WAF) 会质疑来自客户端的 TLS 连接以及 WAF cookie 一致性验证。对于每个新的客户端请求,设备都会验证 TLS 连接,并验证请求中的应用程序和会话 Cookie 的一致性。如果攻击者试图混合并匹配从受害者那里盗取的应用程序 Cookie 和会话 Cookie,则 cookie 一致性验证将失败,并应用已配置的 Cookie 劫持操作。有关 Cookie 一致性的更多信息,请参阅 Cookie 一致性检查

注意:

Cookie 劫持功能支持日志和 SNMP 陷阱。有关日志的更多信息,请参阅 ADM 主题;有关 SNMP 配置的更多信息,请参阅 SNMP 主题。

限制

  • 必须在客户端浏览器中启用 JavaScript。
  • TLS 版本 1.3 不支持 Cookie 劫持保护。
  • 由于浏览器不重复使用 SSL 连接,因此对 Internet Explorer (IE) 浏览器的支持有限。导致为一个请求发送多个重定向,最终导致 IE 浏览器中出现“超出最大重定向”错误。

以下场景说明了 Cookie 劫持保护在 NetScaler 设备中的工作原理。

Cookie 劫持攻击用例 1:用户在没有会话 cookie 的情况下访问

  1. 用户尝试在 Web 应用程序中进行身份验证,并开始访问请求中没有任何 ADC 会话 cookie 的第一个网页。
  2. 收到请求后,设备会使用会话 cookie ID 创建应用程序防火墙会话。
  3. 这会为会话启动 TLS 连接。由于 JavaScript 不是在客户端浏览器上发送和运行的,因此设备将 TLS 连接标记为已验证,无需质询。

    注意:

    即使攻击者尝试在不发送会话 cookie 的情况下从受害者那里发送所有应用程序 cookie ID,设备也会检测到问题并在将请求转发到后端服务器之前删除请求中的所有应用程序 Cookie。后端服务器在没有应用程序 cookie 的情况下考虑此请求,并根据其配置采取必要措施。

  4. 当后端服务器发送响应时,设备会收到响应并将其与 JavaScript 会话令牌和种子 cookie 一起转发。然后,设备将 TLS 连接标记为已验证。
  5. 当客户端浏览器收到响应时,浏览器运行 JavaScript 并使用会话令牌和种子 cookie 生成变形的 cookie ID。
  6. 当用户通过 TLS 连接发送后续请求时,设备会绕过变形 Cookie 验证。这是因为 TLS 连接已经过验证。

Cookie 劫持攻击使用案例 2:用户使用会话 cookie 访问新的 TLS

  1. 当用户通过新的 TLS 连接发送连续页面的 HTTP 请求时,浏览器会发送会话 cookie ID 和变形的 cookie ID。
  2. 由于这是新的 TLS 连接,因此设备会检测 TLS 连接,并使用种子 cookie 向客户端发送重定向响应。
  3. 客户端在收到来自 ADC 的响应后,使用会话的令牌和新的种子 cookie 计算变形的 cookie。
  4. 然后,客户端将这个新计算的变形 cookie 连同会话 ID 一起发送。
  5. 如果在 ADC 设备中计算的变形 Cookie 与通过请求发送的 cookie 相匹配,则 TLS 连接将被标记为已验证。
  6. 如果计算出的变形 cookie 与客户端请求中存在的 cookie 不同,则验证失败。之后,设备将质询发送回客户端,以发送正确的变形 Cookie。

场景 3:攻击者冒充未经身份验证的用户

Cookie 劫持攻击用例 3:攻击者冒充为未经身份验证的用户

  1. 当用户在 Web 应用程序中进行身份验证时,攻击者会使用不同的技术窃取 Cookie 并重播它们。
  2. 由于这是来自攻击者的新 TLS 连接,因此 ADC 会发送重定向质询以及新的种子 cookie。
  3. 由于攻击者没有运行 JavaScript,因此攻击者对重定向请求的响应不包含变形的 cookie。
  4. 这会导致 ADC 设备端的变形 cookie 验证失败。设备再次向客户端发送重定向质询。
  5. 如果变形 Cookie 验证尝试次数超过阈值限制,则设备会将状态标记为 Cookie 劫持。
  6. 如果攻击者尝试混合搭配应用程序 Cookie 和从受害者那里窃取的会话 Cookie,则 cookie 一致性检查将失败,设备会应用配置的 Cookie 劫持操作。

场景 4:攻击者冒充经过身份验证的用户

Cookie 劫持攻击用例 4:攻击者冒充身份经过身份验证的用户

  1. 攻击者还可以尝试以真实用户身份在 Web 应用程序中进行身份验证,并重播受害者的 Cookie 以获取 Web 会话访问权限。
  2. ADC 设备还会检测到此类假冒攻击者。尽管攻击者使用经过验证的 TLS 连接来重播受害者的 cookie,但 ADC 设备仍会验证请求中的会话 cookie 和应用程序 cookie 是否一致。设备使用请求中的会话 cookie 来验证应用程序 cookie 的一致性。由于请求包含攻击者的会话 cookie 和受害者的应用程序 cookie,因此 cookie 一致性验证失败。
  3. 因此,设备会应用配置的 Cookie 劫持操作。如果配置的操作设置为“阻止”,则设备会删除所有应用程序 Cookie 并将请求发送到后端服务器。
  4. 后端服务器收到没有应用程序 cookie 的请求,因此它会向攻击者响应错误响应,例如“用户未登录”。

您可以选择特定的应用程序防火墙配置文件并设置一个或多个防止 Cookie 劫持的操作。

在命令提示符下,键入:

set appfw profile <name> [-cookieHijackingAction <action-name> <block | log | stats | none>]

注意:

默认情况下,该操作设置为“无”。

示例:

set appfw profile profile1 - cookieHijackingAction Block

其中,操作类型为:

阻止:阻止违反此安全检查的连接。 日志:记录违反此安全检查的行为。 统计信息:生成此安全检查的统计数据。 无:禁用此安全检查的所有操作。

  1. 导航到 安全 > NetScaler Web App Firewall > 配置文件
  2. 配置文件 页面上,选择一个配置文件,然后单击 编辑
  3. NetScaler Web App Firewall 配置文件 页面上,转到 高级设置 部分,然后单击 安全检查

    在 NetScaler GUI 上配置 cookie 劫持

  4. 在“安全检查”部分中,选择“Cookie 劫持”,然后单击“操作 设置”。
  5. Cookie 劫持设置 页面中,选择一项或多项防止 Cookie 劫持的操作。
  6. 单击“确定”

    在 NetScaler GUI 上配置 cookie 劫持设置

要处理 Cookie 一致性验证中的误报,您可以为可以免于 Cookie 验证的 Cookie 添加放宽规则。

  1. 导航到 安全 > NetScaler Web App Firewall > 配置文件
  2. 配置文件 页面上,选择一个配置文件,然后单击 编辑
  3. NetScaler Web App Firewall 配置文件 页面上,转到“高级设置”部分,然后单击“放松规则”。
  4. 在“放松规则”部分中,选择 Cookie 一致性 并单击“操作”。

  5. Cookie 一致性放宽规则 页面中,设置以下参数。
    1. 已启用。选择是否要启用放松规则。
    2. Cookie 名称是正则表达式吗。选择 cookie 名称是否为正则表达式。
    3. cookie名称。输入可以免于进行 Cookie 验证的 cookie 的名称。
    4. 正则表达式编辑器。单击此选项提供正则表达式的详细信息。
    5. 评论。有关 cookie 的简要描述。
  6. 单击创建关闭

以表格或图形格式查看安全流量和安全违规的详细信息。

要查看安全统计信息,请执行以下操作:

在命令提示符下,键入:

stat appfw profile profile1

Appfw 配置文件流量统计 速率(/秒) 总数
请求 0 0
Request Bytes(请求字节数) 0 0
回应 0 0
Response Bytes(响应字节数) 0 0
中止 0 0
重定向 0 0
长期平均响应时间(毫秒) 0
最近平均响应时间(毫秒) 0
HTML/XML/JSON 违规统计数据 速率(/秒) 总数
起始 URL 0 0
拒绝 URL 0 0
引荐人标头 0 0
缓冲区溢出 0 0
Cookie 一致性 0 0
cookie 劫持 0 0
CSRF 表单标签 0 0
HTML 跨站点脚本 0 0
HTML SQL 注入 0 0
字段格式 0 0
字段一致性 0 0
信用卡 0 0
安全对象 0 0
签名违规 0 0
内容类型 0 0
JSON 拒绝服务 0 0
JSON SQL 0 0
JSON 跨站点脚本 0 0
文件上载类型 0 0
推断内容类型 XML 有效负载 0 0
HTML CMD 注入 0 0
XML 格式 0 0
XML 拒绝服务 (XDoS) 0 0
XML 消息验证 0 0
Web 服务互操作性 0 0
XML SQL 注 0 0
XML 跨站点脚本 0 0
XML 附件 0 0
SOAP 错误违规 0 0
XML 通用违规 0 0
违规总数 0 0
HTML/XML/JSON 日志统计信息 速率(/秒) 总数
启动 URL 日志 0 0
拒绝 URL 日志 0 0
引用者标头日志 0 0
缓冲区溢出日志 0 0
缓冲区溢出日志 0 0
Cookie 一致性日志 0 0
cookie 劫持日志 0 0
CSRF 表单标签日志 0 0
HTML 跨站脚本日志 0 0
HTML 跨站点脚本转换日志 0 0
HTML SQL 插入日志 0 0
HTML SQL 转换日志 0 0
字段格式日志 0 0
字段一致性日志 0 0
信用卡 0 0
信用卡转换日志 0 0
安全对象日志 0 0
签名日志 0 0
内容类型日志 0 0
JSON 拒绝服务日志 0 0
JSON SQL 注入 0 0
JSON 跨站点脚本日志 0 0
文件上载类型日志 0 0
推断内容类型 XML 有效负载 L 0 0
HTML 命令注入日志 0 0
XML 格式化日志 0 0
XML 拒绝服务 (XDoS) 日志 0 0
XML 邮件验证日志 0 0
WSI 日志 0 0
XML SQL 注入日 0 0
XML 跨站点脚本日志 0 0
XML 附件日志 0 0
SOAP 错误日志 0 0
XML 通用日志 0 0
日志消息总数 0 0
服务器错误响应统计 速率(/秒) 总数
HTTP 客户端错误 (4xx 回复) 0 0
HTTP 服务器错误 (5xx) 0 0
  1. 导航到 安全 > NetScaler Web App Firewall > 配置文件
  2. 在详细信息窗格中,选择 Web App Firewall 配置文件,然后单击“统计”。
  3. NetScaler Web App Firewall 统计 信息页面显示 Cookie 劫持流量和违规详细信息。
  4. 您可以选择表格视图或切换到图形视图以表格或图形格式显示数据。

NetScaler GUI 上的 Cookie 劫持违规统计信息