我怎么能通过访问一个网站就感染病毒?

46 security browser website

可能的重复:
计算机是否会通过 Web 浏览器感染恶意软件?

众所周知,您可以通过访问网站来感染病毒。但这怎么可能呢?

这些病毒是攻击 Windows、Mac 和 Linux 用户,还是 Mac/Linux 用户免疫?

我知道我显然可以通过在 Windows 中下载和执行 .exe 来感染病毒,但是如何仅通过访问网站来获得病毒?

病毒是用 JavaScript 编写的吗?(这是有道理的,因为它是一种在本地运行的编程语言。)如果是,那么常用的 JavaScript 函数有哪些?

Tom*_*ter 24

众所周知,您可以通过访问网站来感染病毒。任何人都可以解释这怎么可能吗?

括号中的示例。浏览器 (IE)、javascript 解释器或插件(如 flash 或 java)中存在错误。这个错误会导致代码执行——这部分可能非常复杂,但它通常涉及释放后使用错误和堆操作

然后我运行了一些shellcode。shellcode 必须逃脱浏览器的任何保护——对于 V8/Chrome 错误,你必须逃脱 chrome 的沙箱并击败 DEP 和 ASLR。对于 IE,您必须击败 DEP 和 ASLR,然后退出低完整性模式。对于 Java,你必须……什么都不做——你都是金子。(这就是为什么会出现大量 Java 错误的原因。)

所以现在我已经在你的机器上运行了任意代码,就像你一样(你不是以管理员身份运行,对吧?),我可以从互联网上下载一个文件并运行它,在你的机器上放置一些恶意软件。

病毒是用 JavaScript 编写的吗?(这是有道理的,因为它是一种在本地运行的编程语言。)如果是,那么常用的 JavaScript 函数有哪些?

具体 - 没有。Javascript 是人们用来在浏览器中查找错误的攻击媒介。他们还可以使用 Flash、Java 或 Silverlight 作为攻击媒介。在javascript的情况下,他们编写javascript来触发浏览器错误,然后病毒最终从互联网上拉下来。

  • 这是不准确的。病毒通常会这样做,但不需要(下载额外的代码)。他们可能在基于 javascript 的漏洞利用中嵌入了有效载荷。该有效负载将是汇编代码,但会显示为 javascript。这一切都取决于错误和特定的漏洞利用实现。 (4认同)
  • @CarlF:不,这与 Java 沙箱(仍然存在)无关。这是关于 Java 中的错误 - 如果这些错误允许您突破沙箱,则几乎没有额外的安全性(例如 DEP)来阻止攻击者。 (4认同)
  • Java 是一个主要的漏洞利用漏洞,它咬了我两次。我现在虔诚地禁用它:http://superuser.com/questions/201613/disable-java-plugin-in-google-chrome (3认同)
  • 你刚刚写过Java没有沙箱吗?因为它确实适用于我所知道的每个浏览器。 (2认同)
  • @Merlyn 是的,* 可能* 将整个有效负载放入 javascript 而不是下载额外的代码(例如所有的 metasploit 模块,如“向系统添加额外用户”或 reverse_tcp)。但是复杂的*恶意软件*通常会使用javascript中的shellcode作为stager来提取更复杂、更复杂的代码。*一切*取决于错误和漏洞——所有逻辑和shellcode都可能在破坏图像解析器的图像中——我只是说最常见的路线。 (2认同)

Ker*_* SB 14

不幸的是,这种情况有多种可能发生。

您对浏览器等“阅读设备”可以主动操纵您自己的系统(并造成伤害)感到惊讶是绝对正确的。读一本书不会耗尽你的银行账户,开一份报纸也不会伤害你的孩子,那么为什么开一个网站可以做所有这些甚至更多呢?

只要有可能来自 Internet 的外部数据(我们必须始终假设这些数据是出于最大的恶意意图制作的)可能会以某种方式被您的系统执行,就会出现问题。

如果您只是坐在命令行并键入wget http://evil.com/hitme.php,wget HTTP 客户端将简单地将请求的二进制转储写入您的磁盘,并且没有发生任何不好的事情(除了您的磁盘可能已满)。但是,如果您在浏览器中输入地址,您的浏览器就可以随心所欲地做任何它想做的事情——格式化您的硬盘、发送您的信用卡详细信息等等。您可以相信您的浏览器不会这样做。大多数浏览器确实试图不做那些坏事,但我们这些绵羊用户要求浏览器能够做更多“聪明的把戏”,并根据互联网的指令表现出自动行为. 我们的需求催生了 JavaScript 和 Flash 等客户端代码执行技术,这些技术可以下载任意、外来、不受信任的恶意代码并执行,这一切都是为了我们的乐趣。

提出这些技术的人没有立即被处死的原因是 a) 它让兔子在我们的屏幕上跳舞,以及 b) 他们声称他们在设计中进行了足够的安全检查以防止任意恶意代码操纵本地系统(例如,不允许读/写本地磁盘、读/写剪贴板、读/写其他选项卡中的表单字段)。

不幸的是,“首先允许一切,然后修补我们能想到的一些坏点”的设计方法从根本上是有缺陷的,现在我们面临着永无止境的新方式流,我们的客户端便利功能可以通过这些方式来实现被用来危害我们的系统。

唯一适度安全的方法是禁用浏览器中的 JavaScript 和插件。像我们在 1995 年一样安全。

  • Wget 不是“安全的”,运行您的机器的驱动程序也不是“安全的”,也不是任何内核级系统。有缓解措施,但最终每段代码都可能受到攻击。 (6认同)
  • 是的,我正在简化一些......我不想用一个详细的“原则上 wget 中可能有一个错误导致它出现意外行为”来混淆论点。你当然是对的。我认为 OP 似乎是该领域的新手,并希望专注于我们 IT 社会的更基本和概念性问题,而不是由于技术故障引起的问题。 (3认同)

Blu*_*eft 11

在这些答案中真正被回避的一点是,我真的很想击败它: 您可以从网页中感染病毒的原因是您正在运行的某些软件存在错误 - 一个安全漏洞

在创建软件过程的每一步中,Flash 的创建者;您的浏览器;您的操作系统试图确保来自 Internet 的随机恶意代码不能只是想出一种执行自身的方法。不幸的是,这样做很难真的很难

所以,像所有人一样,这个软件的开发者肯定会犯错误:当你以 .html 结尾时,HTML 解析器意外地覆盖了堆栈中的一个字节</p。他们不小心使用了 asigned int而不是unsigned int。javascript JIT 编译器意外地尝试将数组索引解引用为空指针。所有这些漏洞以及数以百万计的漏洞一直在软件中发生,要么是因为缺乏安全知识,要么是疏忽,甚至只是一个简单的错误。软件是根本方法太复杂,赶上他们。

因此,操作系统具有内置机制来防止系统损坏,即使在发现漏洞时也是如此。您的操作系统可能有DEPASLR。程序可以具有编译器添加的各种保护。浏览器以较低的特​​权运行。程序运行通过自动分析测试,可以捕获很多这些漏洞。

我的观点是,没有人会允许这种情况发生——但设计完全安全的软件是不可能的,就像设计一个完全安全的保险箱是不可能的。有足够的时间、知识、金钱和激励的人总能找到打开它的方法。这个保险箱的问题在于,一旦某些黑客破解了他们的副本,他们就可以轻松地打开世界各地的其他副本,而无需离开他们的房间。


Mer*_*ham 8

您的具体问题

我知道我显然可以通过在 Windows 中下载和执行 .exe 来感染病毒,但是如何仅通过访问网站来获得病毒?

您的浏览器一直在执行代码(它由代码组成)。当它下载网页时,该代码正在下载和显示任意数据(像素、字符等)。

代码也是数据(在处理器级别)。

由于代码是数据,如果您的浏览器尝试执行数据(无论文件扩展名或格式如何),它实际上可能会运行(如果制作正确)。

通常,您的浏览器不会愚蠢到尝试运行它下载的随机数据。然而,这可能发生。

这样做的一种方法是以这样一种方式形成数据,即在读取时,它会“泄漏”并覆盖构成浏览器可执行程序的数据。这要求浏览器存在错误(在这种情况下最常见的是允许缓冲区溢出)。

您的浏览器还在网页之上运行程序。正如您所提到的,Javascript 就是这样一种代码。但是有几十个。ActiveX、Flash、附加组件、油脂猴子脚本等都是您在访问网页时运行的代码。此代码可能包含导致安全马裤的错误。

这些病毒是同时攻击 Windows、Mac 和 Linux 用户还是 Mac/Linux 用户免疫?

我们使用的任何平台都不能完全避免错误,因为它们都使用将数据视为代码的处理器。这就是我们现有的计算机架构的工作方式。

这个神话的原因是与 Windows 机器(在桌面级别)相比,Mac 和 Linux 的采用率要低得多。因此,这些机器上的桌面软件并不是病毒制造者的常见目标。

病毒不是靠魔法发生的,也不是靠发生的进化(就像生物病毒那样)。它是由个人或开发人员团队编写的软件。他们希望以最大的市场份额为目标,就像普通软件供应商所做的那样。

至于一种病毒是否可以针对多个平台;所有浏览器都运行不同的代码,因此会有不同的错误(即使是不同平台上的相同浏览器)。但是有一些跨平台共享的代码库。如果此类库包含错误,则漏洞可能存在于多个平台上。

但是,根据攻击的类型,为非英特尔 Mac 编写的病毒可能无法在英特尔 Mac 上运行,反之亦然,因为它们具有不同的处理器。对于不同的处理器,代表代码的数据具有不同的格式。

但是,当您谈论虚拟机或脚本语言时,攻击可能与平台无关。这就引出了下一个问题......

病毒是用 JavaScript 编写的吗?

有些病毒是。我上面提到的信息(关于缓冲区溢出漏洞利用)通常被用作 Javascript 之外的攻击,但同样适用于精心设计的病毒,以攻击 Javascript 解释器中的漏洞利用。

Javascript 也将有自己的一组漏洞利用,其操作级别高于缓冲区溢出。有很多方法可以攻击任何软件。软件越大(代码行),它可能收到的用户输入(在这种情况下,代码类型)就越多,它包含的错误也就越多。

此外,正在运行的软件(例如运行服务器的软件)暴露得越多,它就越容易受到攻击。

通常,这称为攻击面

一般漏洞利用

微软有一个常见漏洞利用类型的助记符,它们都有自己有趣的属性,以及它们可以攻击的不同级别的软件——STRIDE,它代表:

Spoofing (of user identity)
Tampering
Repudiation
Information disclosure (privacy breach or Data leak)
Denial of Service (D.o.S.)
Elevation of privilege
Run Code Online (Sandbox Code Playgroud)

其中一些比其他更可能用于基于 Javascript 的攻击,一些用于服务器,一些用于数据文件(例如图像)。

但安全是一个庞大且不断发展的领域。信息太多,无法完全回答您的所有问题。


Moa*_*oab 7

该术语称为“驱动下载”

这是一个很好的例子,说明它是如何发生的,除了访问网站外,您无需做任何事情。

Schneider 表示,该公司的研究人员团队在页面上发现了一段 JavaScript,该页面正在注入指向恶意站点的 iframe。仔细检查后发现,它使用了一个以前未知(0 天)的 IE 漏洞,能够使该浏览器的完全修补版本崩溃并执行恶意代码。不过,0-day 是短暂的,因为微软很快发布了有关该漏洞的详细信息。

对 shellcode 的进一步分析揭示了一个指向已知恶意服务器的明文 URL,该 URL 存储在 M86 的存储库中,因为它利用了众所周知的 iepeers.dll 漏洞 MS10-018。


Rog*_*Far 3

诀窍在于病毒制造者/安全专家会发现浏览器中的漏洞。简而言之,他们发现浏览器的安全漏洞,并且能够利用该漏洞对您的系统执行某些操作。在某些情况下,Adobe Flash 存在漏洞,并且通过特定代码可以被利用。还有一些 JavaScript 字符串可以触发这些安全漏洞。

然而,如果您保持浏览器处于最新状态,那么您不太可能仅通过访问网站而被感染(下载文件并执行它们是另一回事!)


归档时间:

查看次数:

39920 次

最近记录:

14 年,7 月 前