我最近了解了一个名为 Fire Sheep 的 Firefox 插件,它在 Security Now 播客中得到了推荐。我下载了 FS 并开始检查它。令我惊讶的是,它包含必须为插件工作而编译的 C++ 代码。
我的印象一直是 Firefox 与 IE 不同,它不允许在浏览器中执行下载的目标代码。FS似乎与此相矛盾。
人们下载插件,认为它们是安全的,当它们很容易包含木马目标代码甚至 Javascript 漏洞形式的恶意软件时,它们的安全隐患是什么?
我最近了解了一个名为 Fire Sheep 的 Firefox 插件,它在 Security Now 播客中得到了推荐。我下载了 FS 并开始检查它。令我惊讶的是,它包含必须为插件工作而编译的 C++ 代码。
我的印象一直是 Firefox 与 IE 不同,它不允许在浏览器中执行下载的目标代码。FS似乎与此相矛盾。
人们下载插件,认为它们是安全的,当它们很容易包含木马目标代码甚至 Javascript 漏洞形式的恶意软件时,它们的安全隐患是什么?
如果人们没有阅读 Firefox 每次安装插件或插件时显示的大胖警告,他们就输了。插件是可以做任何事情的完整程序,你有权做。
警告信息非常明显:
您应该只安装来自您信任的来源的附加组件。
恶意软件可能会损害您计算机上的文件或侵犯您的隐私。
特定浏览器用来描述插件的术语有点无用。有些浏览器称某些东西为插件,有些浏览器称某些东西为扩展。毕竟有人想出了将临时存储命名为“cookies”的想法,以及它作为一个名称有多么有用。
因此,扩展机制(就像浏览器功能的任何扩展一样)在两个层面上起作用:
1)浏览器实现了一些子语言,比如XML渲染的用户界面(firefox中的XUL就是这样,特别是xulrunner允许你用xml描述一个用户界面)。此外,许多firefox扩展都可以用javascript实现(查找spidermonkey等,这是firefox执行javascript的一个组件-在firefox中,还有一些额外的功能可以让javascript做一些事情,比如转换DOM的当前浏览的页面,或其他。在这个级别上,浏览器可以相当简单地控制扩展程序所做的事情,但是扩展程序想要做的任何火狐不支持或不允许的事情,都无法完成。这是一张图片:
OS <-- Firefox <-- Nice extension interpreter <- extension javascript.
2) 有时,您需要做一些 firefox 不适合做的事情,或者无法以 javascript 或其他解释的格式有效地完成,例如执行 flash 或解码奇怪的codec.oddfile。像这样的情况 Firefox 倾向于使用“处理程序”来处理,它的操作有点像这样:
OS <--- Firefox <--- webpage containing something
|
Plugin API---Relevant part of webpage, like <embed>
| |
OS <----- Plugin! like ns_flash.so or such like
在这里,扩展被编译以匹配这种事情的 Firefox 扩展架构。Firefox 暴露了一组功能,允许扩展以某种方式对其进行控制,但扩展也可以直接要求操作系统做事。如果它表现良好,它基本上会接受相关的输入(即这里是一个.swf
文件)并做它需要做的任何事情(“firefox,在这个框中,请绘制这个视频”)。但是,从技术上讲,它可以做您的用户可以做的任何事情,因为 Firefox 并没有阻止它。
至于为什么必须编译 Firesheep,这是因为它依赖于 libpcap(或类似的),它是关于从“线路”(即从接收它们的设备)中提取信息包。无线接口特别容易受到这种影响,因为许多无线适配器都是全向的,因此附近的任何接口都会拾取这些数据包。通常,您的内核(操作系统)会丢弃不是发送给它的数据包,但是,将接口设置为混杂模式是您要求它不要这样做的方式。libpcap
为您执行此操作并允许您获取这些数据包。为了做到这一点,它需要直接(可能是管理/root)访问操作系统。
Firesheep 的工作完全是通过分析这些数据包,找到未加密的 http 数据包,抓取它们以获取登录数据然后报告它。
现在,回到这些插件的安全风险 - 很明显,一个作为本机代码工作的插件(在 firefox 中,一个插件,而不是一个扩展)可以做任何用户可以做的事情(忘记 firefox),比如 Hendrik正确地说,如果您忽略大胖警告,那是个问题。扩展应该能够造成有限的损害。
虽然我们在这里,但谷歌浏览器模型再次不同。计算机上的每个应用程序都由进程和线程组成 - 在许多操作系统中,线程基本上是轻量级进程并在进程之间共享内存,这就是实现并发的方式,但是,单个崩溃的线程会导致整个进程崩溃,任何线程在技术上都可以无限制地更改另一个线程的内存。
因此,谷歌浏览器的工作原理是为您唯一访问的每个唯一域创建进程,就像您在每个选项卡(对于许多用例)和您使用的每个正在运行的扩展程序中都有一个进程一样。实际上,您还可以自定义它以执行每个选项卡的进程,或者每个域仅执行一个进程,而不管您进行的访问如何。因此,在 Firefox 中,您会得到:
Firefox thread/1
thread/2
thread/3
在谷歌浏览器中你得到
Chrome master process
Chrome child process for security.stackexchange.com
Chrome child process for meta.stackoverflow.com
Chrome child process for flash
现在,每个子进程都受到严格限制。默认情况下,创建进程的标准方法会为其提供父级拥有的任何权限(继承),但谷歌浏览器会明确设置权限。子进程只能在它们想要做某事时与父进程通信,并且它们对操作系统进行的任何 API 调用都受到 Windows 自己的访问控制令牌的严格限制。所以这里的想法是,理论上一个插件应该只能做它需要做的事情。
这就是谷歌浏览器理念的理论。实际上,设计文档暗示您必须通过,--sandbox-plugins
即我目前不确定沙盒插件在多大程度上是自动的,以及它们是否都可以正常工作。
首先,您缺少“附加组件”(或“扩展”)和“插件”之间的区别。“附加组件”以某种方式修改浏览器的功能,通常使生活更轻松。出于这个原因,它们比“插件”拥有更多的控制权和更少的访问限制。它们也(通常)是跨平台的。“插件”是依赖于平台的模块,允许浏览器显示原本不知道如何显示的内容,例如 PDF 文件或视频。
附加安全性取决于浏览器的实现。例如,Firefox 为附加组件提供了比 Chrome 对其扩展更多的访问权限。插件在浏览器之间具有相同的访问权限。一些插件,如 Flash,通过浏览器请求文件,使它们受到浏览器(或附加组件)可能施加的限制。例如,在 Firefox 中控制跨域请求的 RequestPolicy 和附加组件可以(并且确实)阻止 Flash 内容中的跨域请求。另一方面,Java 可以独立于浏览器在 JVM 中运行代码。
我不确定,但我相信 FireSheep 包含 C++ 代码的原因是因为它需要捕获网络上流动的所有数据包,这是 Firefox 不允许的。为了让 FireSheep 这样做,它必须运行某种方式的本机代码。
至于其他插件,在 Firefox 中,恶意插件可以访问您的所有历史记录、您保存的密码、书签,并可以修改它想要的任何网页的外观和行为。但是,在 Chrome 中,它必须明确声明其所需的访问权限,并且 Chrome 会在安装之前通知用户扩展程序需要访问什么。
插件几乎可以与本机代码相媲美,因此恶意插件可以访问操作系统允许其访问的任何内容。如果您下载并安装恶意插件,则与下载和安装任何其他恶意程序相同。
仅在您的计算机上运行受信任的软件。 http://technet.microsoft.com/en-us/library/cc722487.aspx
法则 1:如果一个坏人可以说服你在你的电脑上运行他的程序,那它就不再是你的电脑了
我对您在工作前需要编译 Firesheep 的描述感到困惑;请问你能扩展一下吗?此外,严格来说,firesheep 是 Firefox 扩展而不是插件。