cookie 劫持保护
Cookie 劫持保护可以减少窃取黑客攻击的 cookie。在安全攻击中,攻击者接管用户会话以获取对 Web 应用程序的未经授权访问权限。当用户浏览网站(例如银行应用程序)时,该网站会与浏览器建立一个会话。在会话期间,应用程序将用户详细信息(如登录凭据、页面访问)保存在 cookie 文件中。然后,cookie 文件会在响应中发送到客户端浏览器。浏览器存储 Cookie 以保持活动会话。攻击者可以从浏览器的 cookie 存储中手动窃取这些 cookie,也可以通过某些胭脂浏览器扩展。然后,攻击者使用这些 cookie 来访问用户的 Web 应用程序会话。
为了减轻 Cookie 攻击,Citrix ADC 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 劫持保护的工作原理
以下方案说明了 Cookie 劫持保护在 Citrix ADC 设备中的工作原理。
场景 1:用户在没有会话 cookie 的情况下访问第一个网页
- 用户尝试在 Web 应用程序中进行身份验证,并开始访问第一个网页,请求中没有任何 ADC 会话 cookie。
- 收到请求后,设备会创建一个具有会话 cookie ID 的应用程序防火墙会话。
-
这将启动会话的 TLS 连接。由于 JavaScript 不会在客户端浏览器上发送和运行,设备会将 TLS 连接标记为已验证,无需质询。
注意 : 即使攻击者试图从受害者发送所有应用程序 Cookie ID 而不发送会话 cookie,设备也会检测到问题,并在将请求转发到后端服务器之前删除请求中的所有应用程序 Cookie。后端服务器在没有应用程序 cookie 的情况下考虑此请求,并根据其配置采取必要措施。
- 当后端服务器发送响应时,设备会收到响应并使用 JavaScript 会话令牌和种子 cookie 转发响应。然后,设备将 TLS 连接标记为已验证。
- 当客户端浏览器收到响应时,浏览器会运行 JavaScript 并使用会话令牌和种子 cookie 生成一个变形的 cookie ID。
- 当用户通过 TLS 连接发送后续请求时,设备将绕过变形的 Cookie 验证。这是因为 TLS 连接已经验证。
场景 2:用户使用会话 cookie 通过新的 TLS 连接访问连续的网页
- 当用户通过新的 TLS 连接发送连续页面的 HTTP 请求时,浏览器会发送会话 cookie ID 和变形的 cookie ID。
- 由于这是一个新的 TLS 连接,设备会检测 TLS 连接,并通过种子 cookie 向客户端提出重定向响应。
- 客户端在收到 ADC 响应后,使用会话的令牌和新的种子 cookie 计算变形的 cookie。
- 然后,客户端会发送这个新计算的模型 Cookie 以及会话 ID。
- 如果在 ADC 设备中计算出的变形 cookie 和通过请求发送的 cookie 匹配,则 TLS 连接将标记为已验证。
- 如果计算出的模型 cookie 与客户端请求中存在的 cookie 不同,则验证失败。之后,设备将挑战发送回客户端,以发送正确的变形 Cookie。
场景 3:攻击者模拟为未经身份验证的用户
- 当用户对 Web 应用程序进行身份验证时,攻击者会使用不同的技术窃取 cookie 并重放它们。
- 由于这是来自攻击者的新 TLS 连接,因此 ADC 会发送重定向挑战以及新的种子 cookie。
- 由于攻击者没有运行 JavaScript,因此攻击者对重定向请求的响应不包含变形的 cookie。
- 这会导致 ADC 设备端出现变形 Cookie 验证失败。设备再次向客户端发送重定向询问。
- 如果变形 Cookie 验证尝试次数超过阈值限制,设备会将状态标记为 Cookie 劫持。
- 如果攻击者尝试混合并匹配从受害者那里盗取的应用程序 Cookie 和会话 Cookie,则 Cookie 一致性检查将失败,并且设备将应用配置的 Cookie 劫持操作。
场景 4:攻击者冒充身份验证的用户
- 攻击者还可以尝试以真正用户身份验证到 Web 应用程序,并重播受害者的 Cookie 以获得对 Web 会话的访问权限。
- ADC 设备还会检测到此类模拟攻击者。尽管攻击者在重放受害者的 cookie 时使用经过验证的 TLS 连接,但 ADC 设备仍会验证请求中的会话 cookie 和应用程序 cookie 是否一致。设备使用请求中的会话 cookie 验证应用程序 cookie 的一致性。由于请求包含攻击者的会话 cookie 和受害者的应用程序 cookie,因此 cookie 一致性验证失败。
- 因此,设备将应用配置的 Cookie 劫持操作。如果配置的操作设置为“阻止”,则设备将删除所有应用程序 Cookie 并将请求发送到后端服务器。
- 后端服务器收到没有应用程序 cookie 的请求,因此它响应攻击者的错误响应,例如“用户未登录”。
使用 CLI 配置 cookie 劫持
您可以选择特定的应用程序防火墙配置文件,并设置一个或多个防止 Cookie 劫持的操作。
在命令提示符下,键入:
set appfw profile <name> [-cookieHijackingAction <action-name> <block | log | stats | none>]
注意 : 默认情况下,操作设置为“无”。
示例:
set appfw profile profile1 - cookieHijackingAction Block
其中,操作类型为:
阻止:阻止违反此安全检查的连接。 日志:记录违反此安全检查的情况。 统计信息:为此安全检查生成统计信息。 无:禁用此安全检查的所有操作。
使用 Citrix ADC GUI 配置 cookie 劫持
- 导航到安全 > Citrix Web App Firewall > 配置文件。
- 在配置文件页面上,选择一个配置文件,然后单击编辑。
-
在 Citrix Web App Firewall 配置文件页面上,转到“高级设置”部分,然后单击“安全检查”。
- 在“安全检查”部分,选择“Cookie 劫持”,然后单击“操作 设置”。
- 在 Cookie 劫持设置 页面中,选择一个或多个防止 cookie 劫持的操作。
-
单击 OK(确定)。
使用 Citrix ADC GUI 为 cookie 一致性验证添加松弛规则
为了处理 cookie 一致性验证中的误报,您可以为 cookie 添加一个放松规则,该规则可以免于 cookie 验证。
- 导航到安全 > Citrix Web App Firewall > 配置文件。
- 在配置文件页面上,选择一个配置文件,然后单击编辑。
- 在 Citrix Web App Firewall 配置文件 页面上,转到“高级设置”部分,然后单击“放松规则”。
-
在 放松规则 部分,选择 Cookie 一致性 ,然后单击 操作。
- 在 Cookie 一致性放松规则 页面中,设置以下参数。
- 已启用。如果要启用放松规则,请选择此选项。
- cookie 名称正则表达式。选择 cookie 名称是否为正则表达式。
- cookie 名称。输入可以免除 Cookie 验证的 Cookie 名称。
- 正则表达式编辑器。单击此选项可提供正则表达式详细信息。
- 评论。有关 cookie 的简要描述。
- 单击创建和关闭。
使用 CLI 查看 Cookie 劫持流量和违规统计信息
以表格或图形格式查看安全流量和安全违规详细信息。
要查看安全统计信息:
在命令提示符下,键入:
stat appfw profile profile1
应用程序配置文件流量统计 | 速率 (/秒) | 总数 |
---|---|---|
请求 | 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 |
使用 GUI 查看 Cookie 劫持流量和违规统计信息
- 导航到安全 > Citrix Web App Firewall > 配置文件。
- 在详细信息窗格中,选择 Web App Firewall 配置文件,然后单击 统计信息。
- Citrix Web App Firewall 统计 信息页面显示 Cookie 劫持流量和违规详细信息。
- 您可以选择“表格视图”或切换到“图形视图”以表格或图形格式显示数据。