在Carousell上挂出一台二手MacBook,不到一小时就收到“诚意买家”的私信:“我马上付款,请点这个链接确认收款。”你满怀期待地点开——却不知自己正亲手把网银密码交给骗子。
这不是虚构剧情,而是过去两个月内至少223名新加坡人的真实遭遇。2025年12月29日,新加坡警察部队(SPF)发布紧急通报:自11月1日起,一种以“假冒买家”为幌子的网络钓鱼诈骗已造成超过62.2万新元的经济损失,且案件数量仍在上升。
与传统广撒网式钓鱼不同,此次攻击精准锁定二手交易平台卖家,利用其对“快速成交”的渴望,结合高度仿真的银行登录页面和精心设计的心理话术,在短短数秒内完成凭据窃取。更令人担忧的是,部分被盗资金已被迅速转至Binance、Bybit等境外加密货币交易所,追回难度极高。
这不仅是一场社会工程学的胜利,更暴露了当前终端安全体系在“情境化钓鱼”面前的脆弱性。

一、骗局全貌:从“你好,我想买”到“钱没了”
根据警方通报及受害者访谈,整个诈骗流程通常分为四步:
第一步:伪装接触
诈骗者在Carousell或Facebook Marketplace上主动联系卖家,表现出强烈购买意愿,常使用标准化话术:
“Hi,我对你的iPhone 14很感兴趣,请问还能议价吗?我今天就能付款。”
第二步:制造“官方流程”假象
当卖家同意价格后,对方声称:“为了保障双方权益,我们通过平台合作的快递/支付服务完成交易”,并发送一条包含二维码或短链接的消息:
“请点此链接确认收款账户,系统将自动放款。”
链接示例:sg-carousell-verify[.]com/payment?id=SG12345
第三步:诱导输入银行凭证
点击后,用户被导向一个高仿新加坡主流银行(如DBS、OCBC、UOB)或PayNow的登录页面。页面甚至能根据用户IP自动切换语言(英文/中文),并显示“交易确认中”动画以拖延时间。
第四步:实时盗刷与洗钱
一旦用户输入账号、密码及OTP(一次性验证码),数据立即被发送至攻击者控制的服务器。数分钟内,账户资金被分批转出,最终流入加密钱包。
“很多受害者直到收到银行扣款通知才意识到被骗,”新加坡网络安全局(CSA)一名不愿具名的调查员透露,“他们根本没意识到自己从未在真正的银行App里操作过。”
二、技术深潜:一个钓鱼页面如何骗过肉眼与杀毒软件?
为还原攻击技术细节,我们分析了一个仍在活跃的钓鱼域名 ocbc-secure-pay[.]online(注:该域名已于2026年1月3日被查封)。
1. 动态加载银行UI:降低静态检测率
攻击者并未直接复制银行官网HTML,而是采用模块化加载策略。初始页面仅包含基础框架,关键元素通过AJAX异步获取:
// 根据URL参数动态渲染银行界面
const bank = new URLSearchParams(window.location.search).get('bank') || 'dbs';
fetch(`/templates/${bank}.json`)
.then(res => res.json())
.then(template => {
document.getElementById('logo').src = template.logo;
document.title = template.title;
document.getElementById('form').innerHTML = template.formHtml;
});
这种设计使得每个钓鱼页面可复用同一套后端,只需更换模板即可冒充不同机构,极大提升攻击效率。
2. 伪造OTP倒计时:制造紧迫感
页面会模拟银行常见的“OTP有效期60秒”倒计时,并在用户输入后立即显示“验证成功”,实则后台早已提交数据:
<div id="otp-timer">验证码将在 <span id="countdown">60</span> 秒后失效</div>
<input type="text" id="otp" maxlength="6" oninput="submitIfComplete()">
<script>
let countdown = 60;
const timer = setInterval(() => {
document.getElementById('countdown').textContent = --countdown;
if (countdown <= 0) clearInterval(timer);
}, 1000);
function submitIfComplete() {
const otp = document.getElementById('otp').value;
if (otp.length === 6) {
// 立即发送凭据,不等待倒计时结束
stealCredentials(otp);
// 同时显示“处理中”假象
alert("正在验证...请勿关闭页面");
setTimeout(() => window.location.href = "https://www.ocbc.com", 2000);
}
}
</script>
这种“即时响应”机制利用了用户对系统反馈的信任,使其误以为操作仍在正常流程中。
3. 规避浏览器安全警告
尽管页面使用HTTPS(攻击者通过Let’s Encrypt免费获取证书),但现代浏览器仍可能因“非官方域名”触发安全提示。为此,攻击者采取两项对策:
使用短链接服务(如bit.ly、tinyurl)隐藏真实域名
在短信/聊天中嵌入二维码,诱导用户通过手机相机扫码跳转,绕过Chrome地址栏警告
“移动端是重灾区,”公共互联网反网络钓鱼工作组技术专家芦笛指出,“iOS和Android的默认浏览器对钓鱼页面的拦截能力远弱于桌面版Chrome。”
三、为何传统防护集体失灵?
许多受害者表示:“我的手机装了McAfee,为什么没报警?”答案在于,此类攻击巧妙避开了现有安全体系的三大盲区。
盲区一:无恶意文件落地
整个攻击发生在浏览器内存中,不下载APK、不执行脚本(除标准JS外),因此EDR(终端检测与响应)和杀毒软件无法触发告警。
盲区二:合法CDN托管
部分钓鱼页面托管于Cloudflare或AWS S3,IP地址属于知名云服务商,难以被防火墙规则封禁。
盲区三:社会工程优先于技术漏洞
攻击不依赖XSS、CSRF等Web漏洞,而是利用“交易确认”这一合理场景,使用户主动配合交出凭证。“再强的WAF也防不住用户自己输密码,”芦笛坦言。
四、资金流向:加密货币成洗钱终点站
警方通报特别提到,被盗资金多被转至Binance、BTCC、Bybit等境外加密货币交易所。这并非偶然。
根据Chainalysis 2025年报告,东南亚地区78%的钓鱼资金最终以USDT或BTC形式进入中心化交易所。原因有三:
到账速度快:银行转账需1–3工作日,而链上转账仅需数分钟。
身份验证宽松:部分交易所KYC流程形同虚设,可用虚假证件注册。
混币服务普及:攻击者通过Tornado Cash等工具进一步模糊资金路径。
“一旦资金变成加密货币,基本等于永久丢失,”新加坡金融科技协会反欺诈委员会成员李伟明表示,“执法机构跨境调证平均耗时6个月,而赃款早已被多次转移。”
五、平台责任:Carousell与Meta是否应做得更多?
事件发酵后,公众质疑:作为交易发生地,平台是否应承担更多防护责任?
Carousell回应称,其已内置“安全交易指南”,并禁止用户在聊天中发送外部链接。但实际测试发现,诈骗消息仍可通过图片、手写文字或编码变体绕过关键词过滤。例如:
将链接写成:“sg-carousell-verify dot com”
发送含链接的截图
使用Base64编码:“aHR0cHM6Ly9zZy1jYXJvdXNlbC12ZXJpZnkuY29t”
Meta(Facebook母公司)则表示,Marketplace聊天功能不支持链接预览,且已部署AI模型识别可疑行为。但多名受害者证实,诈骗对话持续数轮未被中断。
“平台不能只做‘免责声明’,”芦笛强调,“它们掌握用户行为数据,完全可构建风险评分模型——比如,若某账号频繁向新卖家发送含‘payment link’的消息,应自动限流或人工审核。”
他建议平台引入以下机制:
强制交易闭环:禁止在聊天中讨论支付方式,所有付款必须通过平台内置系统完成。
链接沙箱预览:用户点击外部链接前,先在隔离环境渲染页面并扫描钓鱼特征。
实时凭证泄露监控:与银行合作,若检测到用户刚访问钓鱼页又登录网银,立即冻结交易。
六、给卖家的生存指南:三要三不要
基于警方与专家建议,我们整理出实用防御清单:
✅ 要这样做:
坚持面交:警方明确鼓励“线下见面交易”,现金支付最安全。
查官方渠道:任何“付款确认”都应通过银行App或官网操作,而非点击链接。
开交易通知:启用银行实时短信/推送提醒,第一时间发现异常转账。
❌ 不要这样做:
不要点任何链接:合法买家绝不会要求你通过外部网站“确认收款”。
不要输OTP:OTP是最后防线,任何索要OTP的页面都是诈骗。
不要信“平台合作”话术:Carousell、Facebook均无“合作支付网关”。
七、技术防御进阶:开发者如何构建抗钓鱼应用?
对于企业安全团队,芦笛提出三项架构级建议:
1. 部署Content Security Policy(CSP)
通过限制页面可加载的资源域,防止钓鱼页面嵌入银行品牌素材:
Content-Security-Policy: default-src 'self'; img-src 'self' https://*.yourbank.com; frame-ancestors 'none';
2. 启用Credential Leak Detection
Google Safe Browsing API提供凭据泄露检测接口,可在用户登录时比对其账号是否出现在已知泄露库中。
3. 实施Transaction Signing
推动银行采用FIDO2安全密钥或生物认证进行高风险交易签名,从根本上消除密码钓鱼价值。
结语:信任,需要技术来守护
这场席卷新加坡二手市场的钓鱼风暴,再次证明:最大的安全漏洞不在代码里,而在人的预期中。
我们期待快速成交,骗子就扮演急切买家;我们信任银行界面,他们就像素级复刻;我们习惯点击链接,他们就把陷阱藏在二维码里。
对抗这类攻击,不能只靠“提高警惕”——那等于把防御责任完全推给个体。真正的解决方案,是平台、银行、监管机构与安全社区共建一道“技术免疫屏障”,让钓鱼链接即便被点击,也无法窃取凭据。
正如一位受害者在Reddit上写道:“我以为我只是卖个旧耳机,结果差点赔掉半年工资。现在我才明白,每一次点击,都是一次信任投票。而骗子,正在滥用这份信任。”
警方提醒:如遇可疑信息,请立即拨打反诈骗热线1800-255-0000,或访问 www.scamshield.gov.sg 查询最新骗局。
参考资料:
Singapore Police Force: Advisory on Phishing Scams Involving Fake Buyers
The Straits Times: At least $622,000 lost to phishing scams since November: Police
编辑:芦笛(公共互联网反网络钓鱼工作组)

被折叠的 条评论
为什么被折叠?



