Page 205 - 《软件学报》2021年第8期
P. 205

罗武  等:浏览器同源策略安全研究综述                                                             2487


                    (2)  安全威胁与应对
                    postMessage 在 2007 年被提出时,仅仅提供了一个参数来传输要发送的消息内容.Barth 等人                      [59] 发现了
                 postMessage 无法满足机密性要求.如图 8(a)所示,受害者网页内嵌了一个第三方网页,并使用 postMessage 来传
                 输数据,该数据可能是用户的隐私数据.例如,受害者网页可能借助第三方网页来验证用户口令强度,此时的用
                 户口令将使用 postMessage 的方式传输给第三方网页.在这种情况下,攻击者诱导用户访问其网页,该网页内嵌
                 了受害者网页,进而内嵌了第三方网页.由于第三方网页为攻击者网页的孙子网页,攻击者网页可以对第三方网
                 页进行导航(修改 window.location.href 变量),导致浏览器将第三方网页重新加载为攻击者网页(如图 8(b)所示).
                 此时,受害者网页通过 postMessage 发送的秘密数据将被重新加载后的攻击者网页所接收,导致秘密数据泄漏.
                    这种针对 postMessage 机密性的攻击成功的原因在于,浏览器未考虑第三方网页被重新加载为攻击者网页.
                 Barth 等人 [59] 建议 postMessageAPI 增加第 2 个参数,用来表明发送方预期的接收方的源.当浏览器将受害者发送
                 的秘密数据提交给第三方网页时,浏览器判断第三方网页是否仍然属于原来的源.在图 8 的攻击中,由于第三方
                 网页被重新加载,其源变化为攻击者网页,导致浏览器对源的判断失败,浏览器将拒绝向该攻击者网页转发原来
                 的消息,从而攻击者无法获取到受害者网页的秘密数据.HTML 标准据此对 postMessageAPI 进行了修改而引入
                 了第 2 个参数,目前,浏览器已经能够抵抗图 8 所示的攻击.



                           攻击者网页                                攻击者网页
                                受害者网页      postMessage(secret)       受害者网页       postMessage(secret)
                                      第三方网页                                 攻击者网页






                            (a)  受害者网页往第三方网页发送 secret             (b)  攻击者替换第三方网页来偷取 secret
                             Fig.8    Attacks on the confidentiality of postMessage communication mechanisms
                                         图 8   针对 postMessage 通信机制机密性的攻击

                    在此之后,Son 等人    [14] 发现了使用 postMessageAPI 的另一个安全威胁.postMessage 涉及到消息发送方与接
                 收方,接收方需要验证消息是否来自于合法的发送方;否则,恶意的消息发送方(攻击者网页)能够通过消息来在
                 接收方(受害者网页)实现数据注入攻击.例如,当接收方网页将消息中的某些字段写入 cookie 时,攻击者可以通
                 过消息来篡改接收方网页的 cookie 内容;当接收方网页将消息中一些字段利用 JavaScript 提供的 eval 等 API
                 来当成代码执行时,攻击者可以在受害者网页中执行任意代码.HTML5 标准中明确指出,消息接收方需要判断
                 发送方的源    [91] .然而,Son 等人 [14] 对现有的 Alexatop 10000 网页进行了调研分析,发现现有网页中存在不足.
                    •   2 245 个网站上使用了 postMessageAPI;1 585 个网站没有对发送方进行验证.
                    •   261 个网站对发送方的源进行了验证,但是验证方式是不安全的.例如,有网站对发送方判断的代码为
                        if(m.origin.indexOf(“sharethis.com”)!=−1),这使得任意在源中含有 sharethis.com 的网页发送的消息都
                        会被接收方所接受,此时,攻击者可以通过注册类似于 sharethis.com.malicious.com 或者 evilsharethis.
                        com 等域名来发起攻击.
                    •   在未对发送方源进行验证或进行不安全验证的网站中,84 个网站允许攻击者网页在接收方网页执行
                        任意代码,或者往本地存储中注入任意内容.
                    针对这一类安全威胁,Son 等人         [14] 提出了两种防御方式:第 1 种方式要求发送方与接收方事先构造某个秘
                 密数据,由于同源策略限制,使得只有与发送方具备相同源的网页能够访问这个秘密数据,接收方消息处理函数
   200   201   202   203   204   205   206   207   208   209   210