问题 防止Osama Facebook蠕虫病毒[关闭]


有一个 javascript蠕虫 在Facebook上传播。蠕虫欺骗用户执行javascript 将有效负载复制并粘贴到地址栏中。这是 不是xss这是社会工程。如果你阅读了蠕虫的源代码,你就会发现它会在会话中发挥作用并伪造像Sammy蠕虫这样的请求。 Web应用程序可以通过什么方式防止此类攻击?


5428
2018-05-04 16:46


起源

不支持 javascript:。 - Gumbo
@Gumbo是的浏览器可以做到这一点,但运行noscript更好。我在问网络应用程序可以做什么? - rook
@Gumbo:这是一个开始,但不会阻止蠕虫指示用户“先键入”javascript“,然后是冒号,然后粘贴下面的代码等。 - Ates Goral


答案:


教育是最好也是唯一的方式。


3
2018-05-04 17:00



+1我倾向于同意。 - rook
教育谁?用户?似乎有点幼稚。 - peirix
@peirix:也许是不切实际的。天真..为什么? - Lightness Races in Orbit
我认为像facebook这样的网站的用户有时间或者想要了解这样的东西是天真的。当然,他们会受益于他们 应该 想要学习,但我认为这是一个可行的解决方案,这太过于牵强。 - peirix
不要误会我的意思,我绝对喜欢你的答案......也许我应该把它从天真改为 理想主义,至少没有那么多负面联想。 - peirix


如果我们谈论的是操纵DOM的恶意用户脚本(就像这个似乎正在做的那样):

您可以确保所有本机JS代码都隐藏在全局范围之外(通过闭包)然后劫持 document 的财产 window。蠕虫有可能绕过这种方式,但肯定会让事情变得更难。

这不是我实际尝试过并且已经证明有效的方法,但基本思路是:

(function () {
    // Initialize page

    // When we're done, make document inaccessible
    window.document = null;
})();

假设是,在页面初始化期间执行的所有本机代码(包括jQuery代码等)都应绑定到实际代码 document 对象通过关闭。地址栏中的“javascript:”代码不应该通过在全局范围内执行来访问实际文档。

再一次,我可能会遗漏一些明显存在缺陷的想法,而且我已经准备好接受所有的支持。也许还需要采取其他措施才能完全隐藏起来 document


4
2018-05-04 16:54



你能提供一个例子吗? - rook
@Rook:我已添加到我的答案中。 - Ates Goral
这不会破坏以任何方式处理DOM的事件吗?例如,点击事件代码在被触发之前不会被评估,对吗?到那时文件已“消失”......? - peirix
@peirix:那时事件处理函数应该绑定到实际的文档对象。 - Ates Goral
这不起作用,至少在Chrome中不起作用。您无法覆盖某些属性: jsfiddle.net/fkling/WVasw - Felix Kling


对于社会工程蠕虫这样非常简单的蠕虫,它应该归结为教育。与大多数社会工程问题一样,这是一个意识问题。

我看到很多人似乎都会因为每个Facebook骗局而陷入困境,而且这个人应该比大多数人更容易避免,因为它实际上需要用户输入命令。但人们迫切希望看到一个死去的恐怖分子的照片。 WTF?

棘手的是如何说服他们,虽然他们正在做的事情可能不会直接伤害他们,但确实需要付出代价。这与试图说服家庭用户运行防病毒和防火墙是一样的问题 - 许多人甚至不关心他们是否被感染并且作为僵尸网络的一部分运行,只要他们可以玩他们的游戏并上网。

技术上 - 它可以由Facebook完成,但它不会。您可以通过简单的模式匹配和删除密钥签名来阻止此传播。这只需要花费太多精力,一旦你对特定问题进行了分类,就会有一种方法可以绕过它。

TL;博士  - 教育每个人!工作繁重,无法取胜,但值得继续努力。


2
2018-05-05 11:54





一个非常简单的解决方法是强制用户使用没有地址栏的浏览器窗口。虽然这个解决方案有自己的问题。

另一种解决方案是使用javascript和/或  它可以与剪贴板交互。每当触发ctrl + c事件(或计时器)时,都可以执行检查。如果消息以。开头 javascript:然后将空白消息或警告复制到剪贴板。


1
2018-05-04 17:57





如果你正在谈论如何保护你的网站的用户免受这种形式的攻击(即cookie偷窃),我假设以下基本步骤会有所帮助,当然你可以做更多的事情,这个小清单不是'总的来说:

  1. 不要让用户发布Javascript! :-)
  2. 使用私钥加密您的Cookie数据,以便只有您的网络应用可以利用其中的数据
  3. 将会话锁定为IP​​,因此如果有人窃取了cookie /会话cookie,则无法重用

0
2018-05-04 16:50



这些都不会阻止蠕虫。  它更像是CSRF攻击,因为它在会话中读取csrf令牌并伪造请求。 Sammy蠕虫这样做了。 - rook


不幸的是,实际上没有办法阻止用户在您的Web应用程序环境中执行javascript。您可以发布一个注释,警告用户不要在地址栏中粘贴他们不理解的脚本,或者您可以尝试对您的客户端代码进行模糊处理,但这些都不能解决问题。在混淆代码的情况下,诈骗者编写可用代码只需要更多的工作。

由于代码在您的webapp上下文中执行,因此一旦请求到达服务器,您就没有万无一失的方法来区分合法用户操作与基于脚本的操作。您可以做的最好的事情是尝试使用启发式方法来检测可疑请求并停止它们。


0
2018-05-04 17:07