恶意软件将代码注入我的 Dojo/WebSocket 应用程序:如何防止?

Posted

技术标签:

【中文标题】恶意软件将代码注入我的 Dojo/WebSocket 应用程序:如何防止?【英文标题】:Malware injecting code into my Dojo/WebSocket app: how prevent? 【发布时间】:2015-02-19 02:50:04 【问题描述】:

我已经为嵌入式产品编写了一个 Web UI,它基于 Dojo 并使用 WebSockets 与设备进行通信。它在大多数浏览器上运行良好且可靠,但在许多客户机器上 WebSocket 无法连接。我终于能够在客户机器上看到问题,这是在尝试访问 localStorage 的一些 javascript 中抛出的 SecurityError。关键在于:错误代码实际上来自 superfish.com,并被安装在客户机器上的工具注入到我的网络应用程序中。

进一步调查表明,罪魁祸首实际上是 Sendori“浏览器助手”工具,该工具作为购物助手销售,但实际上使用 Superfish 的工具进行网络广告替换。 (边栏:在诊断这个问题时,我花了几个小时试图在我的浏览器上安装 Sendori/Superfish。我失败了,因为谷歌搜索“Sendori”和/或“superfish”产生了数百个“删除 Sendori”页面,但没有一个“安装 Sendori”页面。我猜没有人真的想要在他们的机器上安装这个。)

Sendory/Superfish 代码不知何故被添加到我的

【参考方案1】:

请记住,如果浏览器遭到入侵,您将无能为力。

仍然...这是一个疯狂的想法...

如果恶意软件将 JS 附加到文档末尾...尝试在文档末尾附加 <!--

你的文档是这样的:

<html>
    <body>
        <b>Test</b>
    </body>
</html>

所以当恶意软件运行时,它只是在末尾附加脚本:

<html>
    <body>
        <b>Test</b>
    </body>
</html>
<script>
    alert('script added');
</script>

这个想法是你用一个开放的评论结束文档:

<html>
    <body>
        <b>Test</b>
    </body>
</html>
<!--

所以无论附加什么,都会被注释掉:

<html>
    <body>
        <b>Test</b>
    </body>
</html>
<!--
<script>
    alert('script added');
</script>

我认为它不应该影响您的文档(我仍然觉得令人难以置信的是浏览器正在执行 html 标签之外的内容)。

如果插件更智能并且在&lt;/html&gt; 标记之后添加代码......那么这个解决方案将不起作用,但我认为值得一试。这一切都归结为确定恶意软件在解析文档和插入垃圾时的智能程度。但我认为如果在最后添加东西,那是因为根本没有做任何解析。

如果找到&lt;/html&gt; 标签,您可以尝试执行以下操作:

<html>
    <body>
        <b>Test</b>
    </body>
<!-- 
</html>
-->
</html>
<!-- 
</html>

这将导致恶意软件在假&lt;/html&gt; 标记之后的注释掉区域中添加垃圾。如果恶意软件从顶部读取,则有一个假的,如果从底部读取,则另一个假的。

现在,如果恶意软件确实正确地解析了 HTML 文档……那么我不确定是否有解决方案。

【讨论】:

我一定要试试这个。有强有力的间接证据表明攻击者没有解析页面,因为如果他*正在解析页面,那么 a) 他会在结构糟糕的页面上中断,并且 b) 他可能会将他的代码插入其他地方(例如 <头>)。 *向女性程序员道歉,因为我使用了“他”,但大多数恶意程序员仍然是男性。 (总有一天这将不再是真的;我不知道我是应该欢迎它,还是害怕它。) 成功了:注入的代码现在被注释掉了。不过,我的应用程序仍然无法运行……我必须弄清楚它在这台机器上的其他问题。 不错。我也会考虑将其添加到我的页面中。 嘿,您终于找到阻止您的页面工作的原因了吗?【参考方案2】:

你不能阻止代码运行,因为从 JS 引擎的角度来看,运行它是你想要的——否则你就不会发送它。 JS引擎不知道,代码是第三方插入的。

基本上,Sendori 是恶意软件 - 使用恶意软件感染的浏览器,一个健全的执行环境的所有机会都没有。问题出在客户端 - 您无法从服务器端修复它。

【讨论】:

【参考方案3】:

您可以使用“同源策略”阻止资源的跨域来源

这意味着任何不是源自您的服务器的资源都不会被加载。

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

http://www.w3.org/TR/cors/#access-control-allow-origin-response-header

【讨论】:

这不会阻止相关脚本加载自身,也不会阻止脚本导致的错误。目前尚不清楚这如何帮助解决这个问题。 这些工具可以让我指定我的网络资源是否可以在其他域中使用。似乎没有一种机制来指定是否可以在 MY 域中使用其他域的资源。所以,这似乎并不相关。 查看“原点定义”顶部的图表:developer.mozilla.org/en-US/docs/Web/Security/…。 Mozilla 声称它将阻止浏览器请求外部内容。

以上是关于恶意软件将代码注入我的 Dojo/WebSocket 应用程序:如何防止?的主要内容,如果未能解决你的问题,请参考以下文章

常见的网络安全漏洞都有哪些

十种花式注入你身体的方法|通用性进程注入技巧大研究

MySQL 数据库在注入攻击后包含恶意 SCRIPT 标签?

如何在网站上查找恶意代码/恶意软件 [关闭]

以反战之名,向开源项目“投毒”?知名 NPM 包作者注入恶意代码,只为一个文件名...

软件测试 -- SQL注入测试跟JS注入测试