可能重复:
计算机是否可以通过Web浏览器感染恶意软件?
众所周知,仅通过访问网站即可感染病毒。但这怎么可能呢?
这些病毒会攻击Windows,Mac和Linux用户,还是Mac / Linux用户具有免疫力?
我知道我显然可以通过在Windows中下载并执行.exe来感染病毒,但是仅通过访问网站如何获得病毒?
病毒是用JavaScript编程的吗?(这是有意义的,因为它是一种在本地运行的编程语言。)如果是这样,那么通常使用哪些JavaScript函数?
可能重复:
计算机是否可以通过Web浏览器感染恶意软件?
众所周知,仅通过访问网站即可感染病毒。但这怎么可能呢?
这些病毒会攻击Windows,Mac和Linux用户,还是Mac / Linux用户具有免疫力?
我知道我显然可以通过在Windows中下载并执行.exe来感染病毒,但是仅通过访问网站如何获得病毒?
病毒是用JavaScript编程的吗?(这是有意义的,因为它是一种在本地运行的编程语言。)如果是这样,那么通常使用哪些JavaScript函数?
Answers:
众所周知,仅通过访问网站即可感染病毒。谁能解释这怎么可能?
括号中的例子。浏览器(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上删除。
不幸的是,有多种方式可能会发生这种情况。
您绝对惊讶于像浏览器这样的“阅读设备”会主动操纵您自己的系统(并造成危害),这是绝对正确的。读书不会耗尽您的银行帐户,打开报纸也不会伤害您的孩子,那么为什么打开网站可以做更多的事情呢?
只要Internet上的外部数据(我们必须始终假定它们具有最大的恶意意图)被设计成某种方式设法由系统执行,就会发生问题。
如果您只是坐在命令行中输入wget http://evil.com/hitme.php
,则wget HTTP客户端将简单地将请求的二进制转储写入磁盘,并且没有发生任何不良情况(可能磁盘已满)。但是,如果您在浏览器中输入地址,则浏览器可以随意执行任何操作 -格式化硬盘,发送信用卡详细信息等等。您可以信任浏览器不要这样做。实际上,大多数浏览器都试图不做那些不好的事情,但是我们这些绵羊用户已经要求浏览器能够做更多的“聪明把戏”,并根据互联网上的指令展示自动行为。。我们的要求导致创建了客户端代码执行技术,例如JavaScript和Flash,它们下载了任意的,外部的,不受信任的恶意代码并执行了它们,这一切都是我们的荣幸。
提出这些技术的人没有立即被私刑的原因是:a)它使兔子在我们的屏幕上跳舞; b)他们声称他们对设计进行了足够的安全检查,以防止操纵任意恶意代码本地系统(例如,不允许读取/写入本地磁盘,读取/写入剪贴板,读取/写入其他选项卡中的表单字段)。
不幸的是,“首先让所有东西然后掩盖一些我们可以想到的坏点”的设计方法从根本上是有缺陷的,现在我们正面临着永无止境的新方法,通过这些新方法,我们的客户端便捷功能可以被用来破坏我们的系统。
唯一中等安全的方法是禁用浏览器中的JavaScript和插件。像1995年一样安全。
这些答案确实避开了这一点,我真的很想知道这一点:这 是因为您可以从网页中获取病毒的原因是,您正在运行的某些软件存在一个bug-安全漏洞。
在创建软件的过程的每一步中,Flash的创建者都应将Flash的创建者视为负责人。您的浏览器;您的操作系统中的一部分试图确保来自Internet的随机恶意代码不能仅仅找出一种执行自身的方法。不幸的是,这样做很难。 真的很难。
因此,就像所有人类一样,该软件的开发人员一定会犯错误:当您以html结尾时,HTML解析器会意外覆盖堆栈中的一个字节</p
。他们不小心使用了signed int
而不是unsigned int
。javascript JIT编译器意外尝试将数组索引解引用为空指针。所有这些漏洞以及数百万以上的漏洞始终在软件中发生,这是由于缺乏安全知识或疏忽大意,甚至是一个简单的错误。软件是根本方法太复杂,赶上他们。
因此,即使发现漏洞,操作系统也具有内置机制来防止损坏系统。您的操作系统可能具有DEP和ASLR。程序可以具有由编译器添加的各种保护。浏览器以较低的权限运行。程序通过自动分析和测试运行,可以捕获很多这些漏洞。
我的观点是,没有人会允许这种情况发生-但是,不可能设计出完全安全的软件,就像不可能设计出完全安全的保险箱一样。拥有足够时间,知识,金钱和动力的人总会找到一种方法来破解它。而且这种保险箱的问题在于,一旦一些黑客破解了他们的副本,他们就可以在不离开房间的情况下轻松地打开世界各地的其他副本。
您的具体问题
我知道我显然可以通过在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的攻击中,其中一些在服务器上,一些在数据文件(如图像)上。
但是安全是一个巨大且不断发展的领域。确实有太多信息无法完全回答您的所有问题。
该术语称为“通过下载驱动”
这是一个很好的例子,说明除了访问网站外,您无需进行任何其他操作即可如何进行。
施耐德说,该公司的研究团队在页面上发现了一段JavaScript,该JavaScript正在注入指向恶意网站的iframe。仔细检查后发现,它使用的是IE(以前未知)(0天)漏洞,能够完全破坏该浏览器的补丁版本并执行恶意代码。但是,由于Microsoft很快发布了有关该漏洞的详细信息,因此0天的期限很短。
对shellcode的进一步分析显示出指向一个已知恶意服务器的纯文本URL,该URL已利用已知的iepeers.dll漏洞MS10-018存储在M86的存储库中。
诀窍在于,病毒制造者/安全专家会在浏览器中发现漏洞。简而言之,他们在浏览器的安全性中发现了一个漏洞,并且能够使用此漏洞对您的系统进行处理。在某些情况下,Adobe Flash会出现漏洞,并带有特定的代码可能会被利用。还有一些JavaScript字符串可以触发这些安全漏洞。
但是,如果您使浏览器保持最新,则仅通过访问网站就不太可能被感染(下载文件并执行它们是另一回事!)
诸如通过访问网站感染您的病毒之类的病毒利用了访问系统中的漏洞。例如,浏览器或插件的程序设计可能存在缺陷,因此可能会允许图像(从浏览器开发人员的角度来看是偶然的)在访问计算机上运行任意命令。
因此,据说每个操作系统都是潜在的受害者,但是病毒编写者通常根据规模经济来构架其攻击-用户越多越好。这就是Windows和Internet Explorer经常成为攻击目标的原因。
浏览器或插件的任何部分都可能成为病毒的目标。上面提到的由病毒引起的映像就是一个真实的例子。Flash是常见的目标。浏览器中的JavaScript引擎也是。有很多不同的地方可能出错。
最好的选择是运行高质量的病毒扫描程序。我用的是Eset的NOD32。另外,如果实在太好了,也不要单击某些东西。在Firefox和AdBlock中使用NoScript。