新钓鱼技术——页面双生
字数 1375 2025-08-22 12:23:36

页面双生(Twin Pages)钓鱼技术详解

一、技术概述

页面双生(Twin Pages)是一种新型网络钓鱼攻击技术,攻击者通过创建两个相互依赖的网页——主页面和副页面,利用目标的浏览习惯和行为模式进行攻击。该技术的核心特点是:

  1. 动态渲染:只有当目标同时打开这两个页面时,副页面才会动态渲染成钓鱼网页
  2. 隐蔽性强:单独打开任意一个页面都显示正常内容,难以被察觉
  3. 规避检测:减少被反病毒工具或其他安全机制发现的机会

二、攻击原理

攻击流程

  1. 用户打开主页面(显示正常内容)
  2. 用户通过主页面中的链接或自动弹窗打开副页面
  3. 两个页面通过特定机制互相确认对方的存在
  4. 确认后,副页面动态渲染为钓鱼页面(如伪造登录页面)
  5. 用户误以为是正常登录流程,输入敏感信息

技术依赖

  • 窗口间通信:使用window.namelocalStorage进行页面间状态同步
  • 动态内容渲染:根据状态标记决定是否显示钓鱼内容
  • 用户行为利用:依赖用户同时保持两个页面打开的习惯

三、技术实现细节

主页面构建(test.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Main Page</title>
    <script>
        // 标记主页面已打开
        function markMainPageOpened() {
            window.name = 'main'; // 设置窗口名称,便于副页面识别
            localStorage.setItem('mainPageOpened', 'true'); // 在localStorage中标记
        }

        // 检查副页面是否已打开,并准备钓鱼页面渲染
        function checkTwinPageStatus() {
            if (localStorage.getItem('twinPageOpened') === 'true') {
                // 标记准备显示钓鱼页面
                localStorage.setItem('showPhishing', 'true');
            }
        }

        // 页面加载时执行的函数
        window.onload = function() {
            markMainPageOpened(); // 标记主页面已打开
            checkTwinPageStatus(); // 检查副页面是否已打开
            
            // 页面卸载时清理localStorage,防止数据泄漏
            window.onbeforeunload = function() {
                localStorage.removeItem('mainPageOpened');
                localStorage.removeItem('showPhishing');
            };

            // 通过消息发送通知副页面
            window.addEventListener("message", function(event) {
                if (event.origin !== window.location.origin) return; // 确保消息来源可靠
                if (event.data === "twinPageOpened") {
                    localStorage.setItem('twinPageOpened', 'true'); // 标记副页面已打开
                    localStorage.setItem('showPhishing', 'true'); // 准备渲染钓鱼页面
                }
            });
        };
    </script>
</head>
<body>
    <h1>Welcome to the Main Page</h1>
    <p>This is a normal page. It will display as usual.</p>
    <p>You can interact with the page as you normally would.</p>
    
    <!-- 示例按钮,模拟向副页面发送信息 -->
    <button onclick="window.open('twinPage.html', 'twin')">Open Twin Page</button>
</body>
</html>

关键技术点

  1. 窗口标识:通过window.name = 'main'设置窗口名称供副页面识别
  2. 状态存储:使用localStorage存储和检查页面状态:
    • mainPageOpened:标记主页面已打开
    • twinPageOpened:标记副页面已打开
    • showPhishing:控制是否显示钓鱼内容
  3. 页面通信:通过window.addEventListener("message", ...)实现跨页面通信
  4. 清理机制:在onbeforeunload事件中清理localStorage,避免留下痕迹

四、防御措施

用户层面防护

  1. 避免同时打开多个不明页面:特别是通过链接自动打开的页面
  2. 检查URL:在输入敏感信息前仔细核对网站域名
  3. 使用密码管理器:自动填充可避免输入到伪造页面
  4. 启用多因素认证:即使密码泄露也能提供额外保护

技术层面防护

  1. 禁用不必要的JavaScript:钓鱼页面常依赖JS实现动态渲染
  2. 使用反钓鱼浏览器扩展:如Netcraft Extension等
  3. 监控localStorage使用:异常频繁的localStorage操作可能是钓鱼信号
  4. 实施内容安全策略(CSP):限制页面加载外部资源

企业防护建议

  1. 员工安全意识培训:识别新型钓鱼技术
  2. 邮件过滤:拦截包含可疑链接的邮件
  3. 网络监控:检测异常页面访问模式
  4. 终端防护:部署能检测此类攻击的安全软件

五、检测方法

  1. 静态分析

    • 检查网页代码中是否存在可疑的localStorage操作
    • 查找跨页面通信代码(window.postMessage等)
  2. 动态分析

    • 单独打开页面观察内容
    • 同时打开多个页面观察行为变化
    • 监控网络请求是否在特定条件下触发
  3. 行为分析

    • 检测页面是否根据其他标签页状态改变行为
    • 检查是否有隐藏的窗口/标签页操作

六、总结

页面双生技术代表了钓鱼攻击的演进方向,其特点是:

  1. 高度隐蔽:单一页面显示正常内容
  2. 动态触发:依赖用户行为触发恶意内容
  3. 规避检测:传统基于单一页面分析的检测方法可能失效

防御此类攻击需要结合技术防护和用户教育,保持对新型攻击技术的认知更新,才能有效防范此类精心设计的钓鱼攻击。

页面双生(Twin Pages)钓鱼技术详解 一、技术概述 页面双生(Twin Pages)是一种新型网络钓鱼攻击技术,攻击者通过创建两个相互依赖的网页——主页面和副页面,利用目标的浏览习惯和行为模式进行攻击。该技术的核心特点是: 动态渲染 :只有当目标同时打开这两个页面时,副页面才会动态渲染成钓鱼网页 隐蔽性强 :单独打开任意一个页面都显示正常内容,难以被察觉 规避检测 :减少被反病毒工具或其他安全机制发现的机会 二、攻击原理 攻击流程 用户打开主页面(显示正常内容) 用户通过主页面中的链接或自动弹窗打开副页面 两个页面通过特定机制互相确认对方的存在 确认后,副页面动态渲染为钓鱼页面(如伪造登录页面) 用户误以为是正常登录流程,输入敏感信息 技术依赖 窗口间通信 :使用 window.name 和 localStorage 进行页面间状态同步 动态内容渲染 :根据状态标记决定是否显示钓鱼内容 用户行为利用 :依赖用户同时保持两个页面打开的习惯 三、技术实现细节 主页面构建(test.html) 关键技术点 窗口标识 :通过 window.name = 'main' 设置窗口名称供副页面识别 状态存储 :使用 localStorage 存储和检查页面状态: mainPageOpened :标记主页面已打开 twinPageOpened :标记副页面已打开 showPhishing :控制是否显示钓鱼内容 页面通信 :通过 window.addEventListener("message", ...) 实现跨页面通信 清理机制 :在 onbeforeunload 事件中清理 localStorage ,避免留下痕迹 四、防御措施 用户层面防护 避免同时打开多个不明页面 :特别是通过链接自动打开的页面 检查URL :在输入敏感信息前仔细核对网站域名 使用密码管理器 :自动填充可避免输入到伪造页面 启用多因素认证 :即使密码泄露也能提供额外保护 技术层面防护 禁用不必要的JavaScript :钓鱼页面常依赖JS实现动态渲染 使用反钓鱼浏览器扩展 :如Netcraft Extension等 监控localStorage使用 :异常频繁的localStorage操作可能是钓鱼信号 实施内容安全策略(CSP) :限制页面加载外部资源 企业防护建议 员工安全意识培训 :识别新型钓鱼技术 邮件过滤 :拦截包含可疑链接的邮件 网络监控 :检测异常页面访问模式 终端防护 :部署能检测此类攻击的安全软件 五、检测方法 静态分析 : 检查网页代码中是否存在可疑的localStorage操作 查找跨页面通信代码(window.postMessage等) 动态分析 : 单独打开页面观察内容 同时打开多个页面观察行为变化 监控网络请求是否在特定条件下触发 行为分析 : 检测页面是否根据其他标签页状态改变行为 检查是否有隐藏的窗口/标签页操作 六、总结 页面双生技术代表了钓鱼攻击的演进方向,其特点是: 高度隐蔽 :单一页面显示正常内容 动态触发 :依赖用户行为触发恶意内容 规避检测 :传统基于单一页面分析的检测方法可能失效 防御此类攻击需要结合技术防护和用户教育,保持对新型攻击技术的认知更新,才能有效防范此类精心设计的钓鱼攻击。