基于 Google AppSheet 滥用的 Facebook 定向钓鱼攻击机理与防御体系研究

简介: 2026年5月,Guardio Labs与KnowBe4披露一起利用Google AppSheet合法邮件通道实施的大规模钓鱼攻击,伪造Facebook封禁警告,致超3万账号沦陷。该攻击滥用可信云服务、多平台协同、黑产工业化,突破传统防护。本文构建四层检测模型,提供可落地的代码与防御方案,推动钓鱼防御从“验身份”转向“察行为”。(239字)

摘要

2026 年 5 月,Guardio Labs 与 KnowBe4 联合披露一起大规模定向钓鱼攻击事件,攻击者依托 Google AppSheet 合法邮件通知通道,伪造 Facebook 商业账号版权违规封禁警告,诱导用户访问高仿真钓鱼页面窃取账号凭证与敏感信息,已造成全球超 30,000 个 Facebook 账号沦陷。该攻击突破传统基于域名信誉、SPF/DKIM/DMARC 认证的边界防护,呈现可信通道滥用、多平台协同、黑产工业化运营三大特征。本文以该事件为实证样本,系统拆解攻击全链路技术实现、信任绕过机制与黑产变现模式,构建面向可信云服务滥用的钓鱼检测模型,提供可工程化落地的检测代码与防御方案,为企业与平台应对同类攻击提供理论支撑与实践参考。反网络钓鱼技术专家芦笛指出,此类攻击标志着网络钓鱼从 “伪造身份” 向 “盗用信任” 转型,传统静态规则防护已全面失效,必须构建以行为语义、跨平台关联为核心的动态防御体系。

image.png 1 引言

网络钓鱼作为最主流的网络攻击形式,长期依托域名伪造、垃圾邮件服务器、弱身份认证等方式实施攻击,易被邮件网关、威胁情报等传统机制拦截。随着云服务与无代码平台普及,攻击者转向滥用合法基础设施实现高隐蔽投递,攻击成本大幅降低、成功率显著提升。

2026 年 5 月曝光的 Google AppSheet 钓鱼事件,以 Facebook 商业账号为核心目标,借助 Google 官方邮件通道发送合规认证钓鱼邮件,内容伪装版权违规封禁警告,链接指向 Netlify/Vercel 托管的高仿真钓鱼页面,数据通过 Telegram 机器人实时回传,形成覆盖投递、诱饵、回传、变现的完整黑产闭环。该事件已造成超 30,000 个 Facebook 账号受损,波及全球多国企业用户,暴露出现有安全体系对可信通道恶意滥用的检测盲区。

现有研究多聚焦传统钓鱼的域名特征、内容关键词检测,对云服务原生钓鱼的信任盗用、多平台协同、行为隐蔽特性关注不足,缺乏针对性检测模型与工程化防御方案。本文基于实证事件数据,从攻击机理、技术实现、防御体系三个维度展开研究,提出可信云服务滥用钓鱼的四层检测模型,配套可直接部署的代码实现,为网络安全防护提供新的思路与方法。

2 攻击事件概况与基础设施滥用机理

2.1 事件基本态势

本次攻击由越南关联网络犯罪组织实施,Guardio Labs 命名为AccountDumpling行动,核心目标为 Facebook 商业管理账号,通过伪造版权投诉、账号封禁、蓝 V 认证、虚假招聘等诱饵实施定向钓鱼。截至 2026 年 5 月,已导致全球超 30,000 个 Facebook 账号被劫持,受害者集中于美国、英国、加拿大等国家,黑产团伙通过账号倒卖、数据贩卖、广告欺诈等方式变现,形成工业化运营体系。

攻击核心特征:

通道合法:邮件发自 Google AppSheet 官方域名,通过全部邮件认证,直达用户收件箱;

内容逼真:仿官方通知话术,以版权违规、永久封禁制造紧急胁迫;

平台协同:整合 AppSheet、Netlify、Vercel、Google Drive、Telegram 形成攻击链;

黑产闭环:从钓鱼投递到数据回传、账号劫持、变现全流程自动化。

反网络钓鱼技术专家芦笛强调,该攻击的核心突破点不在于利用零日漏洞,而在于合法资源的恶意组合,用平台信誉抵消安全检测,用标准化服务降低攻击门槛,使普通攻击者可快速复制扩散。

2.2 Google AppSheet 邮件机制与滥用原理

Google AppSheet 是 Google 官方无代码应用搭建平台,提供应用通知、邮件推送等基础功能,邮件发件域为appsheet.com,由 Google 官方 MTA 投递,具备完整 SPF、DKIM 签名与 DMARC 对齐,域名信誉等级极高,默认被所有邮件系统放行。

攻击者滥用流程:

注册普通 AppSheet 账号,无需企业认证即可启用邮件通知功能;

构建简易应用,配置自定义通知内容,嵌入 Facebook 仿冒话术与恶意链接;

批量触发邮件发送,目标为 Facebook 商业账号持有人,发件人显示为 noreply@appsheet.com;

邮件通过 Google 基础设施投递,绕过网关检测,直达用户收件箱。

传统钓鱼依赖伪造发件人、污染 SMTP 服务器,易被拦截;本次攻击通道完全合法,仅内容与链接恶意,传统基于域名信誉的防护机制完全失效。

2.3 攻击全链路架构

本次攻击形成四阶段协同闭环,各平台分工明确、数据流无缝衔接:

投递层:Google AppSheet 发送钓鱼邮件,提供信任背书与合规通道;

诱饵层:Netlify/Vercel 托管高仿真 Facebook 登录页,窃取账号、密码、2FA 验证码;

回传层:Telegram Bot API 实时接收窃取数据,实现隐蔽传输;

利用层:登录被盗账号,实施数据窃取、权限转售、欺诈牟利。

反网络钓鱼技术专家芦笛指出,该链路将信任滥用、社交工程、云原生托管、隐蔽通信融为一体,代表下一代定向钓鱼的典型范式,防御必须覆盖全链路、突破单点思维。

3 攻击技术实现与绕过机理分析

3.1 钓鱼邮件构造与信任绕过

3.1.1 邮件内容设计

邮件主题:Urgent: Your Facebook Business Account Will Be Permanently Disabled

正文核心要素:

声称检测到版权侵权行为,限定数小时内提交申诉;

提供 “Appeal Now” 按钮,链接指向 Netlify/Vercel 域名;

伪造 Meta 官方客服口吻,附带法律声明与合规提示,强化可信度。

3.1.2 邮件认证与投递优势

发件域:appsheet.com(Google 官方高信誉域名);

认证:SPF Pass、DKIM Pass、DMARC Pass,满足全部邮件安全标准;

投递:Google 官方 MTA 发送,IP 信誉优良,无垃圾邮件记录。

传统检测依赖发件人异常、域名黑名单、内容关键词,本次攻击三项均无明显特征,实现白通道黑内容的完美绕过。

3.2 钓鱼页面构建与凭证窃取技术

3.2.1 页面仿真实现

攻击者在 Netlify、Vercel 等云平台部署静态页面,完整复刻 Facebook 登录界面:

视觉:Logo、配色、布局、表单样式与官方一致;

交互:支持账号密码输入、二次验证输入,提交后跳转官方页面;

响应式:适配 PC 与移动端,降低用户怀疑。

3.2.2 数据窃取与回传

页面表单提交后,前端 JS 将数据加密发送至攻击者控制的后端接口,再通过 Telegram Bot API 转发至攻击者终端,实现实时、隐蔽、免自建服务器的数据回传。

核心优势:

云平台托管页面 IP 信誉正常,无恶意标记;

静态页面无恶意代码,免杀绕过 Web 应用防火墙;

Telegram 通信加密,难以溯源与拦截。

3.3 攻击绕过传统防御的核心机理

域名信任绕过:合法高信誉域名抵消网关检测;

认证合规绕过:完整通过 SPF/DKIM/DMARC,突破邮件认证防护;

内容语义绕过:仿官方话术,无明显恶意关键词,规避 NLP 检测;

平台分散绕过:攻击链路跨多平台,单点检测无法发现全局风险;

黑产工业化绕过:标准化流程、低技术门槛,支持大规模快速扩散。

反网络钓鱼技术专家芦笛强调,传统 “域名合法 = 内容安全” 的防护逻辑已被彻底颠覆,防御必须从身份校验转向行为校验、从单点特征转向全链路关联、从静态规则转向动态语义。

4 面向可信云服务滥用的钓鱼检测模型

4.1 模型设计思路

针对 AppSheet 类攻击通道合法、内容非法、信任盗用的核心特征,构建四层检测模型:

可信发信异常层:高信誉官方域名 + 仿冒官方内容的冲突检测;

文本语义风险层:紧急性、权威性、胁迫性话术与品牌仿冒识别;

URL 与页面风险层:新域名、跳转行为、云托管、仿冒页面特征;

跨平台关联层:发信平台与目标品牌无官方关联、异常批量发送。

模型输出综合风险评分,支持低风险提醒、中风险审核、高风险拦截分级处置。

4.2 核心检测代码实现

import re

import whois

from urllib.parse import urlparse

from datetime import datetime, timedelta

from email import policy

from email.parser import BytesParser


class TrustedCloudPhishingDetector:

   def __init__(self):

       # 高可信发信域名(白通道)

       self.trusted_domains = {"appsheet.com", "netlify.app", "vercel.app", "drive.google.com"}

       # 被仿冒品牌关键词

       self.brand_keywords = {"meta", "facebook", "instagram", "whatsapp", "paypal", "amazon"}

       # 紧急胁迫词汇

       self.urgent_words = {"urgent", "immediate", "critical", "permanently", "disabled", "suspended", "appeal", "verify"}

       # 高风险云托管后缀

       self.risky_hosting = {"netlify.app", "vercel.app", "github.io", "repl.co"}


   def parse_email(self, raw_bytes: bytes) -> dict:

       """解析原始邮件,提取信头、正文、URL列表"""

       msg = BytesParser(policy=policy.default).parsebytes(raw_bytes)

       headers = {k.lower(): v for k, v in msg.items()}

       body = ""

       urls = []

       if msg.is_multipart():

           for part in msg.walk():

               if part.get_content_type() == "text/plain":

                   body += part.get_payload(decode=True).decode(errors="ignore")

               elif part.get_content_type() == "text/html":

                   html = part.get_payload(decode=True).decode(errors="ignore")

                   urls = re.findall(r'https?://[^\s"]+', html)

       else:

           body = msg.get_payload(decode=True).decode(errors="ignore")

           urls = re.findall(r'https?://[^\s"]+', body)

       return {"headers": headers, "body": body.strip(), "urls": list(set(urls))}


   def check_sender_domain(self, sender: str) -> bool:

       """检测发件域是否为高可信白通道"""

       domain = sender.split("@")[-1].lower()

       return domain in self.trusted_domains


   def check_domain_age(self, url: str) -> bool:

       """检测域名注册时间(7天内为高风险)"""

       try:

           domain = urlparse(url).netloc

           w = whois.whois(domain)

           creation_date = w.creation_date

           if isinstance(creation_date, list):

               creation_date = creation_date[0]

           return (datetime.now() - creation_date) < timedelta(days=7)

       except Exception:

           return True


   def detect_risky_hosting(self, url: str) -> bool:

       """检测是否为高风险云托管页面"""

       domain = urlparse(url).netloc.lower()

       return any(suffix in domain for suffix in self.risky_hosting)


   def semantic_risk_score(self, text: str) -> float:

       """文本语义风险评分(0-1)"""

       score = 0.0

       text_lower = text.lower()

       # 品牌仿冒匹配

       brand_matches = sum(1 for kw in self.brand_keywords if kw in text_lower)

       score += min(brand_matches * 0.2, 0.4)

       # 紧急胁迫词汇匹配

       urgent_matches = sum(1 for w in self.urgent_words if w in text_lower)

       score += min(urgent_matches * 0.15, 0.4)

       return round(score, 2)


   def detect(self, raw_email: bytes) -> dict:

       """综合检测入口,返回风险结果"""

       email_data = self.parse_email(raw_email)

       sender = email_data["headers"].get("from", "")

       # 1. 可信发信域检测

       trusted_sender = self.check_sender_domain(sender)

       # 2. 语义风险检测

       semantic_risk = self.semantic_risk_score(email_data["body"])

       # 3. URL风险检测

       url_risks = []

       for u in email_data["urls"]:

           is_new_domain = self.check_domain_age(u)

           is_risky_host = self.detect_risky_hosting(u)

           url_risks.append({"url": u, "new_domain": is_new_domain, "risky_host": is_risky_host})

       # 4. 综合风险判定

       total_score = 0.0

       if trusted_sender:

           total_score += 0.3

       total_score += semantic_risk

       if any(u["new_domain"] or u["risky_host"] for u in url_risks):

           total_score += 0.3

       # 风险等级

       if total_score >= 0.7:

           level = "高风险-直接拦截"

       elif total_score >= 0.4:

           level = "中风险-人工审核"

       else:

           level = "低风险-正常投递"

       return {

           "trusted_sender": trusted_sender,

           "semantic_risk": semantic_risk,

           "url_risks": url_risks,

           "total_score": round(total_score, 2),

           "risk_level": level

       }


# 示例调用

if __name__ == "__main__":

   detector = TrustedCloudPhishingDetector()

   # 替换为真实原始邮件字节流

   test_raw = b"From: noreply@appsheet.com\nSubject: Urgent: Facebook Account Disabled\n...(邮件内容)..."

   result = detector.detect(test_raw)

   print("检测结果:", result)

4.3 代码功能说明

邮件解析:提取信头、正文、URL,支撑多维度检测;

可信发信域识别:定位 AppSheet 等白通道发件来源;

域名时效检测:拦截 7 天内新注册恶意域名;

云托管页面识别:标记 Netlify/Vercel 等高风险托管页面;

语义风险评分:识别品牌仿冒、紧急胁迫等钓鱼特征;

综合评分与分级:输出量化分数与处置建议,支持网关直接集成。

反网络钓鱼技术专家芦笛指出,该代码实现轻量化、可部署、易扩展,适配邮件网关、EDR、SOC 平台等多种场景,可有效弥补传统检测对可信通道滥用的防护盲区。

5 多维度防御体系构建

5.1 企业侧技术防御

5.1.1 邮件网关增强

启用可信云发件域专项检测,对appsheet.com等域名叠加语义校验;

部署上述检测代码,实现高风险邮件自动拦截;

对含 Facebook、PayPal 等品牌词 + 紧急话术的白通道邮件强制提示。

5.1.2 终端与访问管控

Web 代理阻断高风险云托管仿冒页面;

浏览器扩展实现钓鱼页面实时提示;

重要账号启用强制 2FA,降低单因子泄露风险。

5.1.3 安全运营与情报

建立 IOC 库,收录恶意 URL、Telegram 机器人 ID、页面特征;

跨平台关联分析,识别批量钓鱼投递行为;

定期演练,提升员工对可信通道钓鱼的识别能力。

5.2 平台侧治理与合规约束

5.2.1 Google AppSheet 侧

新账号邮件发送限流,增加批量发送人工审核;

对含版权、封禁、验证等敏感词的通知内容加强检测;

提供钓鱼标记入口,支持用户快速举报滥用账号。

5.2.2 云托管平台侧

对 Facebook、银行等品牌仿冒页面建立指纹库,自动下架;

新用户静态页面人工抽检,重点核查登录表单类内容;

开放 API,支持安全厂商协同检测与处置。

5.2.3 社交平台侧

强化异常登录检测,对云托管页面来源登录实时拦截;

官方通知统一入口,明确告知用户不会通过第三方邮件发送封禁警告;

提供账号快速申诉通道,降低用户恐慌性操作。

5.3 用户侧安全意识提升

牢记官方不会通过第三方平台邮件发送账号封禁通知;

不点击邮件链接,手动输入官方域名登录;

遇到紧急通知先通过官方 App 核实,不盲目提交信息。

反网络钓鱼技术专家芦笛强调,可信云服务滥用钓鱼的防御是技术、平台、用户三方协同的系统工程,单一措施无法根治,必须构建全流程、多层次的闭环防护体系。

6 攻击事件的安全启示与行业影响

6.1 安全范式转变

防护逻辑重构:从 “信任身份” 转向 “验证行为”,打破域名合法即安全的惯性思维;

检测维度升级:从单点特征转向全链路关联,覆盖投递、页面、通信、行为全流程;

防御模式进化:从被动拦截转向主动治理,平台、企业、用户协同共治。

6.2 行业趋势预判

云服务滥用将常态化:无代码平台、云托管、SaaS 服务将成为钓鱼主要通道;

攻击工业化加剧:黑产形成标准化工具链,攻击门槛持续降低;

防御向 AI 与行为驱动转型:规则检测失效,语义分析、行为建模、跨平台关联成为核心能力。

反网络钓鱼技术专家芦笛指出,本次 AppSheet 钓鱼事件是行业分水岭,标志网络钓鱼进入云原生信任滥用新阶段,安全行业必须加快技术迭代,以动态对抗应对动态攻击。

7 结语

基于 Google AppSheet 滥用的 Facebook 定向钓鱼攻击,凭借合法通道、信任盗用、多平台协同、黑产工业化四大特征,突破传统防护体系,造成大规模账号泄露,对全球用户与企业安全构成严重威胁。本文通过实证分析,系统拆解攻击全链路机理与绕过技术,构建面向可信云服务滥用的四层检测模型,提供可直接部署的检测代码,形成企业、平台、用户协同的防御体系。

研究表明,遏制云服务原生钓鱼的关键在于打破域名信任依赖,构建以行为语义为核心的零信任检测体系,实现从静态规则到动态分析、从单点防护到全链路治理的转型。未来,随着云服务与无代码技术普及,同类攻击将持续扩散,安全行业需加强协同研究、完善检测机制、强化平台治理,共同应对下一代网络钓鱼威胁,守护数字空间安全。

编辑:芦笛(公共互联网反网络钓鱼工作组)

目录
相关文章
|
9天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
2841 17
|
6天前
|
人工智能 开发工具 iOS开发
Claude Code 新手完全上手指南:安装、国产模型配置与常用命令全解
Claude Code 是一款运行在终端环境中的 AI 编程助手,能够直接在命令行中完成代码生成、项目分析、文件修改、命令执行、Git 管理等开发全流程工作。它最大的特点是**任务驱动、终端原生、轻量高效、多模型兼容**,无需图形界面、不依赖 IDE 插件,能够深度融入开发者日常工作流。
2456 5
|
21天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23561 14
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
8天前
|
人工智能 JSON BI
DeepSeek V4-Pro 接入 Claude Code 完全实战:体验、测试与关键避坑指南
Claude Code 作为当前主流的 AI 编程辅助工具,凭借强大的代码理解、工程执行与自动化能力深受开发者喜爱,但原生模型的使用成本相对较高。为了在保持能力的同时进一步降低开销,不少开发者开始寻找兼容度高、价格更友好的替代模型。DeepSeek V4 系列的发布带来了新的选择,该系列包含 V4-Pro 与 V4-Flash 两款模型,并提供了与 Anthropic 完全兼容的 API 接口,理论上只需简单修改配置,即可让 Claude Code 无缝切换为 DeepSeek 引擎。
2142 2
|
3天前
|
人工智能 Linux BI
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
JeecgBoot AI专题研究 一键脚本:Claude Code + JeecgBoot Skills + DeepSeek 全平台接入 一行命令装好 Claude Code + JeecgBoot Skills + DeepSeek 接入,无需翻墙使用 Claude Code,支持 Wind
1447 1
国内用 Claude Code 终于不用翻墙了:一行命令搞定,自动接 DeepSeek
|
15天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
3518 6
|
7天前
|
人工智能 安全 开发工具
Claude Code 官方工作原理与使用指南
Claude Code 不是传统代码补全工具,而是 Anthropic 推出的终端 AI 代理,具备代理循环、双驱动架构(模型+工具)、全局项目感知、6 种权限模式等核心能力,本文基于官方文档系统解析其工作原理与高效使用技巧。
1157 0

热门文章

最新文章