仅通过访问网站如何获得病毒?[重复]


47

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

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

这些病毒会攻击Windows,Mac和Linux用户,还是Mac / Linux用户具有免疫力?

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

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


2
它通常是各种技术和浏览器安全漏洞的结合。
圣保罗Ebermann

很好的问题,恕我直言,由于它是Web,它依赖于HTTP并且不再受操作系统的影响,因此浏览器比操作系统更重要。
Kenan D

非常广泛的主题是,浏览器漏洞随着发现而改变,并且随浏览器的不同而变化。
摩押人

1
在一个相关的说明:superuser.com/questions/245096/...
BloodPhilia

@LordCover:虽然最初的恐吓策略可能是http,但是有效载荷必须是针对特定系统的可执行文件,以便摆脱简单的烦恼并成为真正的病毒。由于Linux和Mac无法运行exe(始终没有帮助)并且Win无法运行为其他OS编写的可执行文件,因此它仍然是依赖于OS的系统。最近的黑客大游行表明,Win7在安全性方面可与Mac和Linux相媲美(并且在某些方面优于Mac和Linux)。目前,仍然是大多数人运行Windows使其成为流行目标的事实。
music2myear11年

Answers:


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来触发浏览器错误,然后最终将病毒从Internet上删除。


4
这是不准确的。病毒通常会这样做,但是不需要(下载额外的代码)。他们可能将有效负载嵌入基于javascript的漏洞利用中。该有效载荷将是汇编代码,但将以javascript形式呈现。这完全取决于错误以及具体的利用实现。
Merlyn Morgan-Graham

2
您是否只是写过Java没有沙箱?因为它确实适用于我所知道的所有浏览器。
CarlF 2011年

4
@CarlF:不,这与Java沙箱(仍然存在)无关。这与Java中的错误有关-如果这些错误使您能够突破沙盒,则几乎没有其他安全措施(例如DEP)可以阻止攻击者。
sleske 2011年

3
Java是一个主要的漏洞利用漏洞,它被我咬了两次。:我现在宗教禁用它superuser.com/questions/201613/...
杰夫·阿特伍德

2
@Merlyn是的,可以将整个有效负载放入javascript中,而不必下载其他代码(例如,所有的metasploit模块,例如“向系统添加其他用户”或reverse_tcp)。但是,复杂的恶意软件通常会使用javascript中的shellcode作为暂存器,以提取更复杂,更复杂的代码。 一切都取决于错误和利用-所有逻辑和shellcode都可能存在于破坏图像解析器的图像中-我只是说最常见的路线。
汤姆·里特

14

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

您绝对惊讶于像浏览器这样的“阅读设备”会主动操纵您自己的系统(并造成危害),这是绝对正确的。读书不会耗尽您的银行帐户,打开报纸也不会伤害您的孩子,那么为什么打开网站可以做更多的事情呢?

只要Internet上的外部数据(我们必须始终假定它们具有最大的恶意意图)被设计成某种方式设法由系统执行,就会发生问题。

如果您只是坐在命令行中输入wget http://evil.com/hitme.php,则wget HTTP客户端将简单地将请求的二进制转储写入磁盘,并且没有发生任何不良情况(可能磁盘已满)。但是,如果您在浏览器中输入地址,则浏览器可以随意执行任何操作 -格式化硬盘,发送信用卡详细信息等等。您可以信任浏览器不要这样做。实际上,大多数浏览器都试图不做那些不好的事情,但是我们这些绵羊用户已经要求浏览器能够做更多的“聪明把戏”,并根据互联网上的指令展示自动行为。我们的要求导致创建了客户端代码执行技术,例如JavaScript和Flash,它们下载了任意的,外部的,不受信任的恶意代码并执行了它们,这一切都是我们的荣幸。

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

不幸的是,“首先让所有东西然后掩盖一些我们可以想到的坏点”的设计方法从根本上是有缺陷的,现在我们正面临着永无止境的新方法,通过这些新方法,我们的客户端便捷功能可以被用来破坏我们的系统。

唯一中等安全的方法是禁用浏览器中的JavaScript和插件。像1995年一样安全。


6
Wget并不“安全”,运行您的计算机的驱动程序也不安全,任何内核级系统也不安全。有缓解措施,但最终每段代码都可能受到攻击。
Merlyn Morgan-Graham

@Meryll:我忽略了一整类问题,即那些来自错误代码的问题。是的,肯定有损坏的图像库和MP3标头解析器之类的威胁。我不想走得太远。我发现由现代互联网技术设计引起的问题与OP的问题更为相关。
Kerrek SB 2011年

1
@Kerrek:他们的问题是“我是否可以通过访问网页感染病毒”,然后您继续说他们无法从wget感染病毒。您还谈到信任。但是问题不是关于“我如何保护自己”,而是关于“漏洞利用将如何工作”。攻击面似乎是您的主要要点,这是一个很好的要点,但由于这些不准确和切线而使它变得模糊。
Merlyn Morgan-Graham

3
是的,我只是简化了一点……我不想用一个详细的说法来弄乱这个说法,“原则上,wget中可能存在导致它表现异常的错误”。你当然是对的。我认为OP似乎是该领域的新手,并希望专注于IT社会的更基本和概念性问题,而不是技术故障引起的问题。
Kerrek SB 2011年

-1这个答案无法理解这个问题:“我们的要求导致创建了客户端代码执行技术,例如JavaScript和Flash,它们下载了任意的,外部的,不受信任的恶意代码并执行了,这一切都是为了我们的荣幸。” -目的不是下载任意代码;即使没有这些,我们仍然会从互联网上获取病毒。您可以通过在涂料中打开.jpg或在VLC中观看电影来感染病毒。这并不常见,但以前已经发生过。
BlueRaja-Danny Pflughoeft

11

这些答案确实避开了这一点,我真的很想知道这一点:这 是因为您可以从网页中获取病毒的原因是,您正在运行的某些软件存在一个bug-安全漏洞

在创建软件的过程的每一步中,Flash的创建者都应将Flash的创建者视为负责人。您的浏览器;您的操作系统中的一部分试图确保来自Internet的随机恶意代码不能仅仅找出一种执行自身的方法。不幸的是,这样做很难真的很难

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

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

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


但是在许多情况下,存在此错误是因为用户“要求”它。即,HTML3.14159的规范存在缺陷,因为它允许某些固有风险的行为。网站设计人员使用引起这些行为的特定功能,要求浏览器设计人员实施“ feechurs”(否则就有可能在“浏览器之战”中被遗忘)。浏览器设计者可能会尝试以某种方式减轻风险行为,而防病毒实施者会进行额外的检查,但总能成功。
Daniel R Hicks

@DanH:您是否有任何特定的安全漏洞示例,这些漏洞是由于用户要求而故意保留在所有浏览器中的?
BlueRaja-Danny Pflughoeft

我并不是说这些孔是故意留在那里的。相反,糟糕的规格导致“风险大”的实现,并且从安全的角度来看,在太多情况下,实现(显然)是不正确的。(而且由于规范未启用它,因此无法证明是正确的。)
Daniel R Hicks,

啊,是的,计算机科学……世界上的科学,有一半时间,汽车在一条单向街上行驶,但错误的方向是另一端。
突破

8

您的具体问题

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

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

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

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

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

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

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

这些病毒会攻击Windows,Mac和Linux用户吗?还是Mac / Linux用户具有免疫力?

我们使用的平台无法完全避免错误,因为它们都使用将数据视为代码的处理器。这就是我们现有计算机体系结构的工作原理。

产生这种神话的原因是,与Windows计算机(在台式机级别)相比,Mac和Linux的采用率低得多。因此,这些机器上的桌面软件并不是病毒制造者的普遍目标。

病毒不会通过魔术或事态发展而发生(就像生物病毒一样)。它是由个人或开发人员团队编写的软件。他们希望以常规软件供应商的方式瞄准最大的市场份额。

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

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

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

病毒是用JavaScript编程的吗?

有些病毒是。我上面提到的信息(关于缓冲区溢出漏洞利用)通常被用作Java脚本之外的攻击,但同样可以适用于旨在通过Java解释器攻击漏洞的病毒。

Javascript在超过缓冲区溢出的操作级别上也将具有自己的漏洞利用集。有许多攻击任何软件的方法。软件越大(代码行),它可能会收到的用户输入(在这种情况下,就是代码类型)的种类就越多,它可能包含的错误也就越多。

同样,运行的软件(例如,运行服务器的软件)暴露的越多,攻击的脆弱性就越大。

通常,这称为“ 攻击面”

一般利用

Microsoft具有常用漏洞利用类型的助记符,并且它们都有各自有趣的属性以及可以攻击的不同级别的软件-STRIDE,代表:

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

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

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


当您使用解释(相对于编译)语言时,漏洞利用通常是与体系结构无关的。为其他处理器体系结构编译的应用程序(或病毒)将无法运行(除非处理器包含兼容层)。
突破

@Breakthrough:他们问“他们是用JavaScript编程的吗?” 并没有使我所说的不那么正确,尤其是当应用于“仅通过访问网站如何获得病毒”时。他们提出了多个问题,而我所描述的内容甚至适用于部分问题。
Merlyn Morgan-Graham

@Breakthrough:我添加了有关Java脚本和一般威胁的更多信息。
Merlyn Morgan-Graham

@Merlyn Morgan-Graham,当您说“ ...为非Intel Mac编写的病毒可能无法在Intel Mac上运行时,反之亦然,因为它们具有不同的处理器。” 而不是你的全部答案。
突破

1
@Merlyn Morgan-Graham“这个神话的原因是Mac和Linux的采用率比Windows计算机低得多”
Lincity

7

该术语称为“通过下载驱动”

这是一个很好的例子,说明除了访问网站外,您无需进行任何其他操作即可如何进行。

施耐德说,该公司的研究团队在页面上发现了一段JavaScript,该JavaScript正在注入指向恶意网站的iframe。仔细检查后发现,它使用的是IE(以前未知)(0天)漏洞,能够完全破坏该浏览器的补丁版本并执行恶意代码。但是,由于Microsoft很快发布了有关该漏洞的详细信息,因此0天的期限很短。

对shellcode的进一步分析显示出指向一个已知恶意服务器的纯文本URL,该URL已利用已知的iepeers.dll漏洞MS10-018存储在M86的存储库中。


+1是迄今为止唯一使用适当术语的答案。
突破

3

诀窍在于,病毒制造者/安全专家会在浏览器中发现漏洞。简而言之,他们在浏览器的安全性中发现了一个漏洞,并且能够使用此漏洞对您的系统进行处理。在某些情况下,Adobe Flash会出现漏洞,并带有特定的代码可能会被利用。还有一些JavaScript字符串可以触发这些安全漏洞。

但是,如果您使浏览器保持最新,则仅通过访问网站就不太可能被感染(下载文件并执行它们是另一回事!)


存在的每个软件中都存在安全性错误。并非所有人都被找到。例如,Microsoft Paint长期存在一个令人讨厌的错误,只需在“文件->打开”对话框中简单地将随机生成的数据作为“图像”抛出,就可以轻松地(在几分钟之内)重现该错误。
Merlyn Morgan-Graham

好吧,我敢肯定有些地方写的软件没有安全性漏洞。(我想我可能自己写了一两个。)但是,您有一个很好的观点。大约35年前,有人通过简单地将随机字符输入到shell命令解析器中,展示了Unix中的数十个错误。几分钟内机器坠毁。
Daniel R Hicks

2

诸如通过访问网站感染您的病毒之类的病毒利用了访问系统中的漏洞。例如,浏览器或插件的程序设计可能存在缺陷,因此可能会允许图像(从浏览器开发人员的角度来看是偶然的)在访问计算机上运行任意命令。

因此,据说每个操作系统都是潜在的受害者,但是病毒编写者通常根据规模经济来构架其攻击-用户越多越好。这就是Windows和Internet Explorer经常成为攻击目标的原因。

浏览器或插件的任何部分都可能成为病毒的目标。上面提到的由病毒引起的映像就是一个真实的例子。Flash是常见的目标。浏览器中的JavaScript引擎也是。有很多不同的地方可能出错。

最好的选择是运行高质量的病毒扫描程序。我用的是Eset的NOD32。另外,如果实在太好了,也不要单击某些东西。在Firefox和AdBlock中使用NoScript


1

这些病毒会攻击Windows,Mac和Linux用户,还是Mac / Linux用户具有免疫力?

如果网站设法破坏您的浏览器的安全性,则它可能会破坏计算机上属于您的任何内容。但是,如果它可以升级其特权并获得管理访问权限,则它可能根本无法处理系统上的任何内容。

长期以来一直认为,在Unix计算机(例如Linux,Mac或BSD)上获得管理特权比在Windows上更难。但是,Microsoft最近(从Windows Vista开始)对安全功能的改进可能使Windows比以前更加安全-至少,这就是您所希望的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.