利用Google OAuth和DKIM重放攻击的钓鱼技术分析
字数 2029 2025-08-29 22:41:24

Google OAuth与DKIM重放钓鱼攻击技术分析

1. 攻击概述

攻击者利用Google OAuth应用授权机制,获取由Google系统发送且带有合法DKIM签名的电子邮件,然后对这封邮件进行重放攻击,使其看起来像是直接来自Google的安全通知。

攻击特点

  • 邮件通过DKIM身份验证
  • 发件人显示为no-reply@google.com等Google官方地址
  • 引导用户访问伪造的Google支持页面窃取凭证

2. DKIM机制与验证原理

2.1 DKIM基本机制

域名密钥识别邮件(DKIM, DomainKeys Identified Mail)是一种电子邮件验证机制,它利用公钥加密对电子邮件的某些部分生成数字签名,以确保邮件未被伪造或篡改。

工作原理

  1. 邮件发送服务器使用域名的私钥对邮件的选定报头字段和正文内容计算哈希并签名
  2. 在邮件头中添加DKIM-Signature签名字段
  3. 邮件接收服务器从发送方域名的DNS记录中获取相应的公钥,对签名进行验证

2.2 DKIM验证的局限性

  • 不验证SMTP传输层信封信息:如实际的MAIL FROM发件地址或发送IP
  • 无法防止签名邮件的重放:一旦攻击者截获一封带有有效DKIM签名的邮件,可以在不改变签名内容的前提下将邮件复制发送给其他目标

3. 攻击方法详解

3.1 攻击流程概述

  1. 诱使Google代表攻击者生成一封签名合法的邮件
  2. 将这封邮件进行重放发送给受害者

3.2 具体攻击步骤

3.2.1 注册自有域并设置邮箱

  • 注册一个自有域名,设置邮箱地址如me@attacker-domain.com
  • 使用该邮箱注册/关联一个Google账号

3.2.2 创建恶意Google OAuth应用

  • 在Google API控制台创建新的OAuth应用客户端
  • 将应用名称设置为精心设计的钓鱼邮件内容
  • 应用发布信息伪装成合法形式
  • 应用名称可包含大量空白字符,使实际通知内容被"推"到邮件下部

3.2.3 触发Google安全提醒邮件

  • 通过OAuth流程授权该应用访问自身账号(me@attacker-domain.com)
  • Google系统会自动发送"新应用已获得访问权限"的安全提醒邮件

3.2.4 钓鱼邮件内容嵌入

  • 邮件开头显示为正式的Google通知(攻击者伪造的内容)
  • 提供指向假冒登录页面的链接
  • 邮件底部是Google正常的提醒附注

3.2.5 截获邮件并检查签名

  • 邮件发送到攻击者控制的邮箱
  • 检查邮件头中的DKIM-Signature字段,确认签名有效

3.2.6 准备重放攻击邮件

重发技术要求

  • 不改变任何会影响DKIM签名验证的内容
  • 不能以普通"转发"方式转发邮件
  • 需要发送原始邮件

具体技术手段

  1. 使用脚本或邮件客户端以原始来源格式重新发送邮件
  2. 借助邮件转发服务或中继服务器
  3. 利用邮件列表/群发功能

3.2.7 受害者接收邮件

  • 邮件通过DKIM验证
  • 显示发件人为Google
  • 内容涉及账户安全,降低用户警惕

4. 技术实现示例

4.1 邮件重放Python示例代码

import smtplib
from email.message import EmailMessage

def send_phish_email(target_email, smtp_server, smtp_port, smtp_user, smtp_pass):
    # 读取原始邮件内容
    with open('phish_email.eml', 'r') as f:
        raw_message = f.read()
    
    # 设置SMTP连接
    with smtplib.SMTP(smtp_server, smtp_port) as server:
        server.starttls()
        server.login(smtp_user, smtp_pass)
        
        # 发送原始邮件数据
        server.sendmail(
            'attacker@example.com',  # Envelope From (不影响邮件头)
            [target_email],          # 目标收件人
            raw_message              # 原始邮件数据(包含DKIM签名)
        )

4.2 代码说明

  • 不对raw_message做任何修改
  • raw_message应完整包含原邮件的所有头字段和正文
  • 使用指定的Envelope From进行投递,但邮件头保持原来的From: no-reply@google.com

5. 防御策略

5.1 服务提供商防御措施

  1. 限制OAuth通知内容

    • 审查安全通知流程
    • 限制OAuth应用名称的长度和格式
    • 对动态内容进行适当的转义或模板处理
  2. Google的响应

    • 已开始修补OAuth机制的缺陷
    • 防止系统被滥用来发送经过验证的欺诈邮件

5.2 邮件接收方防御措施

  1. Envelope验证与异常检测

    • 检测声称来自google.com的邮件实际发送服务器是否属于Google的IP范围
    • 启用SPF和DMARC策略
    • 要求DKIM和SPF同时通过才接收邮件
  2. DKIM重放攻击防御

    • 缩短DKIM签名有效期
    • 定期更换DKIM私钥
    • 对重要头信息进行"过签名"
    • 在邮件中添加唯一标识
  3. 监控和速率限制

    • 监控来自某域的DKIM签名重复出现的频率
    • 对大量内容相同、DKIM签名相同的邮件进行拦截

5.3 用户教育与警示

  • 提醒用户即使收到"来自官方"的安全通知邮件也应提高警惕
  • 检查邮件中的链接域名是否真正属于官方
  • 查看邮件头的细微异常
  • 对要求输入密码、提交敏感信息的页面保持警惕

6. 总结

此次攻击手法显示,攻击者能够将可信赖的大型服务提供商的基础设施转化为钓鱼工具,绕过传统邮件安全检查。针对此类攻击,需要邮件生态各方协同应对:

  1. 服务提供商应修补流程漏洞
  2. 邮件接收方应优化验证逻辑、引入异常检测
  3. 域名持有者应主动轮换密钥、监控滥用
  4. 最终用户需保持警觉,不轻信表面可信的邮件

通过多管齐下的防御策略,才能有效遏制DKIM重放钓鱼攻击带来的威胁。

Google OAuth与DKIM重放钓鱼攻击技术分析 1. 攻击概述 攻击者利用Google OAuth应用授权机制,获取由Google系统发送且带有合法DKIM签名的电子邮件,然后对这封邮件进行重放攻击,使其看起来像是直接来自Google的安全通知。 攻击特点 : 邮件通过DKIM身份验证 发件人显示为 no-reply@google.com 等Google官方地址 引导用户访问伪造的Google支持页面窃取凭证 2. DKIM机制与验证原理 2.1 DKIM基本机制 域名密钥识别邮件(DKIM, DomainKeys Identified Mail)是一种电子邮件验证机制,它利用公钥加密对电子邮件的某些部分生成数字签名,以确保邮件未被伪造或篡改。 工作原理 : 邮件发送服务器使用域名的私钥对邮件的选定报头字段和正文内容计算哈希并签名 在邮件头中添加 DKIM-Signature 签名字段 邮件接收服务器从发送方域名的DNS记录中获取相应的公钥,对签名进行验证 2.2 DKIM验证的局限性 不验证SMTP传输层信封信息 :如实际的MAIL FROM发件地址或发送IP 无法防止签名邮件的重放 :一旦攻击者截获一封带有有效DKIM签名的邮件,可以在不改变签名内容的前提下将邮件复制发送给其他目标 3. 攻击方法详解 3.1 攻击流程概述 诱使Google代表攻击者生成一封签名合法的邮件 将这封邮件进行重放发送给受害者 3.2 具体攻击步骤 3.2.1 注册自有域并设置邮箱 注册一个自有域名,设置邮箱地址如 me@attacker-domain.com 使用该邮箱注册/关联一个Google账号 3.2.2 创建恶意Google OAuth应用 在Google API控制台创建新的OAuth应用客户端 将应用名称设置为精心设计的钓鱼邮件内容 应用发布信息伪装成合法形式 应用名称可包含大量空白字符,使实际通知内容被"推"到邮件下部 3.2.3 触发Google安全提醒邮件 通过OAuth流程授权该应用访问自身账号( me@attacker-domain.com ) Google系统会自动发送"新应用已获得访问权限"的安全提醒邮件 3.2.4 钓鱼邮件内容嵌入 邮件开头显示为正式的Google通知(攻击者伪造的内容) 提供指向假冒登录页面的链接 邮件底部是Google正常的提醒附注 3.2.5 截获邮件并检查签名 邮件发送到攻击者控制的邮箱 检查邮件头中的 DKIM-Signature 字段,确认签名有效 3.2.6 准备重放攻击邮件 重发技术要求 : 不改变任何会影响DKIM签名验证的内容 不能以普通"转发"方式转发邮件 需要发送原始邮件 具体技术手段 : 使用脚本或邮件客户端以原始来源格式重新发送邮件 借助邮件转发服务或中继服务器 利用邮件列表/群发功能 3.2.7 受害者接收邮件 邮件通过DKIM验证 显示发件人为Google 内容涉及账户安全,降低用户警惕 4. 技术实现示例 4.1 邮件重放Python示例代码 4.2 代码说明 不对 raw_message 做任何修改 raw_message 应完整包含原邮件的所有头字段和正文 使用指定的Envelope From进行投递,但邮件头保持原来的 From: no-reply@google.com 5. 防御策略 5.1 服务提供商防御措施 限制OAuth通知内容 : 审查安全通知流程 限制OAuth应用名称的长度和格式 对动态内容进行适当的转义或模板处理 Google的响应 : 已开始修补OAuth机制的缺陷 防止系统被滥用来发送经过验证的欺诈邮件 5.2 邮件接收方防御措施 Envelope验证与异常检测 : 检测声称来自 google.com 的邮件实际发送服务器是否属于Google的IP范围 启用SPF和DMARC策略 要求DKIM和SPF同时通过才接收邮件 DKIM重放攻击防御 : 缩短DKIM签名有效期 定期更换DKIM私钥 对重要头信息进行"过签名" 在邮件中添加唯一标识 监控和速率限制 : 监控来自某域的DKIM签名重复出现的频率 对大量内容相同、DKIM签名相同的邮件进行拦截 5.3 用户教育与警示 提醒用户即使收到"来自官方"的安全通知邮件也应提高警惕 检查邮件中的链接域名是否真正属于官方 查看邮件头的细微异常 对要求输入密码、提交敏感信息的页面保持警惕 6. 总结 此次攻击手法显示,攻击者能够将可信赖的大型服务提供商的基础设施转化为钓鱼工具,绕过传统邮件安全检查。针对此类攻击,需要邮件生态各方协同应对: 服务提供商应修补流程漏洞 邮件接收方应优化验证逻辑、引入异常检测 域名持有者应主动轮换密钥、监控滥用 最终用户需保持警觉,不轻信表面可信的邮件 通过多管齐下的防御策略,才能有效遏制DKIM重放钓鱼攻击带来的威胁。