5.2 漏洞
所有黑客攻击、病毒攻击、恶意代码攻击都是因为信息系统存在漏洞,本小节来讲述漏洞的相关知识。
5.2.1 漏洞的概念
漏洞(Vulnerability)又叫脆弱性,是硬件、软件或策略上的缺陷,使得攻击者能够在未授权的情况下访问、控制系统。软件漏洞也叫bug。
漏洞可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。这些缺陷、错误或不合理之处可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制,重要资料被窃取,用户数据被篡改,系统被作为入侵其他主机系统的跳板。从目前发现的漏洞来看,应用软件中的漏洞远远多于操作系统中的漏洞,特别是Web应用系统中的漏洞更是占信息系统漏洞中的绝大多数。
现今用电子商务支付是非常方便快捷的交易方式,很多人都开通了网上银行,在家里通过计算机网络可以进行各项业务的办理。一个人在使用网上银行交易时,如果计算机自身安全系统不健全,这时黑客就可以通过计算机系统的漏洞把病毒植入计算机中窃取使用者银行卡的账号和密码,银行卡里的钱在瞬间就会被黑客转走。系统漏洞无疑使计算机系统安全和个人的信息安全、财产安全等就得不到保障。
关于信息系统漏洞的几个理解:
●漏洞一般指软件的(安全)漏洞。
●漏洞多存在于通用的软件中。
●漏洞是事先未知、事后发现的。
●漏洞是安全隐患,如果被利用,其后果不可预知。
●漏洞一般能够被远程利用。
●漏洞一般是可以修补的。
●不存在没有漏洞的计算机系统或信息系统。
5.2.2 漏洞产生的原因
漏洞一旦被发现,就可使用这个漏洞获得计算机系统的额外权限,使攻击者能够在未授权的情况下访问或破坏系统,从而危害计算机系统安全。那么,导致计算机系统漏洞的原因是什么呢?简单来说有以下三点。
1.设计缺陷
(1)编程人员在设计程序时,程序逻辑结构设计不合理、不严谨,因此产生一处或者多处漏洞。正是由于这些漏洞,给病毒入侵用户计算机提供了入口。
(2)编程人员的程序设计错误也是计算机系统漏洞产生的原因之一。受编程人员的能力、经验和当时安全技术所限,在程序中难免会有不足之处,轻则影响程序效率,重则导致非授权用户的权限提升。这种类型的漏洞最典型的是缓冲区溢出漏洞,它也是被黑客利用得最多的一种类型的漏洞。
(3)由于目前硬件无法解决某些特定的问题,使编程人员只得通过软件设计来表现出硬件功能而产生的漏洞,也会让黑客长驱直入,攻击用户的计算机系统。
综上所述,在人为方面,导致计算机系统漏洞的原因包括程序逻辑结构设计不合理、不严谨,编程人员程序设计错误以及目前为止硬件无法解决特定的问题等。
2.利益上的考虑
(1)为个人利益考虑。
有些程序员为了以后调试程序方便,故意留下“后门”。这也是漏洞产生的一种原因。
(2)为了公司利益,或为了自己的国家利益。有些公司给出口的信息系统留有“后门”,而自己使用的信息系统则没有安全问题。这种漏洞小则会引起外国公司利益受损害,大则会影响到国家安全。
3.软件变得日益复杂
在一个大型系统的开发过程中,需要各种语言进行数万乃至数千万行的代码。编译软件的编译过程中只能检测到语法问题,但是一些微小的逻辑bug是不会被检测出来的。另外,由于采用了不同的语言,语言之间的接口、兼容就会出现不可预知的问题。
5.2.3 漏洞对系统的威胁
事实上,一个漏洞对安全造成的威胁远不限于它的直接可能性,如果黑客获得了对系统的一般用户访问权限,他就有可能再通过本地漏洞把自己升级为管理员,这样他就可以为所欲为了。按漏洞可能对信息系统造成的直接威胁可以大致分成下面几类。
1.通过漏洞获取远程管理员权限
攻击者无须通过一个账号来登录到远程系统,从而获得管理员权限。他们通常以管理员身份执行有缺陷的远程系统守护进程来获得远程管理员权限。这些漏洞的绝大部分来源于缓冲区溢出,少部分来自守护进程本身的逻辑缺陷。
典型漏洞:Windows NT IIS 4.0的ISAPI DLL对输入的URL未做适当的边界检查,如果构造一个超长的URL,可以溢出IIS(inetinfo.exe)的缓冲区,执行攻击者指定的代码。由于inetinfo.exe是以local system身份启动,溢出后可以直接得到远程管理员权限。
2.通过漏洞获取本地管理员权限
攻击者在已有一个本地账号能够登录到系统的情况下,通过攻击本地某些有缺陷的suid程序、竞争条件等手段,得到系统的管理员权限。
典型漏洞:在Windows 2000操作系统下,攻击者就有机会让网络DDE(一种在不同的Windows机器上的应用程序之间动态共享数据的技术)代理在本地系统用户的安全上下文中执行其指定的代码,从而提升权限并完全控制本地机器。
3.通过漏洞获取普通用户访问权限
攻击者利用服务器的漏洞,取得系统的普通用户存取权限,对UNIX类系统通常是shell访问权限,对Windows系统通常是cmd.exe的访问权限,能够以一般用户身份的执行程序、存取文件。攻击者通常攻击以非管理员身份运行的守护进程、有缺陷的CGI程序等手段获得这种访问权限。
典型漏洞:Windows IIS 4.0-5.0存在Unicode解码漏洞,可以使攻击者利用cmd.exe以guest组的权限在系统上运行程序,相当于取得了普通用户的权限。
4.通过漏洞获得权限提升
攻击者在本地通过攻击某些有缺陷的sgid程序,把自己的权限提升到某个非管理员用户的水平。获得管理员权限可以看作是一种特殊的权限提升,只是因为威胁的大小不同而把它独立出来。
典型漏洞:RedHat Linux 6.1带的man程序为sgid,它存在格式化bug,通过对它的溢出攻击,可以使攻击者得到man组的用户权限。
5.通过漏洞读取受限文件
攻击者利用某些漏洞,读取他本来无权访问的文件,这些文件通常是安全相关的。这些漏洞的存在可能是文件设置权限不正确,或者是特权进程对文件的不正确处理和意外dump core使受限文件的一部分dump到了core文件中。
典型漏洞:Oracle 8.0.3 Enterprise Edition for NT 4.0的日志文件全局可读而且为明文,它记录了连接的口令,很可能被攻击者读到。
6.通过漏洞造成远程系统拒绝服务
攻击者利用这类漏洞,无须登录即可对系统发起拒绝服务攻击,使系统或相关的应用程序崩溃或失去响应能力。这类漏洞通常是系统本身或其守护进程有缺陷或设置不正确造成的。
典型漏洞:Windows 2000带的Netmeeting 3.01存在缺陷,通过向它发送二进制数据流,可以使服务器的CPU占用达到100%。
7.通过漏洞造成本地系统拒绝服务
在攻击者登录到系统后,利用这类漏洞,可以使系统本身或应用程序崩溃。这种漏洞主要因为是程序对意外情况的处理失误,如写临时文件之前不检查文件是否存在,盲目跟随链接等。
典型漏洞:RedHat 6.1的tmpwatch程序存在缺陷,可以使系统fork出许多进程,从而使系统失去响应能力。
8.通过漏洞造成远程非授权文件存取
利用这类漏洞,攻击者可以不经授权地从远程存取系统的某些文件。这类漏洞主要是由一些有缺陷的CGI程序引起的,它们对用户输入没有做适当的合法性检查,使攻击者通过构造特别的输入获得对文件存取的权限。
典型漏洞:Windows IIS 5.0存在一个漏洞,通过向它发送一个特殊的head标记,可以得到ASP源码,而不是经过解释执行后的ASP页面。
9.通过漏洞造成口令恢复
因为采用了很弱的口令加密方式,使攻击者可以很容易地分析出口令的加密方法,从而使攻击者通过某种方法得到密码后还原出明文。
典型漏洞:Windows下的PassWD v1.2用来管理系统中的各种口令,并和URL一起储存起来。但它加密储存的口令加密方式非常脆弱,经过简单的分析,就可以从加密后的口令还原出明文。
10.通过漏洞造成欺骗
利用这类漏洞,攻击者可以对目标系统实施某种形式的欺骗。这通常是由于系统的实现上存在某些缺陷。
典型漏洞:IE曾经存在一个漏洞,允许一个恶意网站在另一个网站的窗口内插入内容,从而欺骗用户输入敏感数据。
11.通过漏洞造成服务器信息泄露
利用这类漏洞,攻击者可以收集到对进一步攻击系统有用的信息。这类漏洞的产生主要是因为系统程序有缺陷,一般是对错误的不正确处理。
典型漏洞:Windows IIS 3.0~5.0存在漏洞,当向系统请求不存在的.ida文件时,服务器系统可能会返回出错信息,里面暴露了IIS的安装目录信息,比如请求http://www.microsoft.com/anything.ida,服务器会返回Response:The IDQ file d:\http\anything.ida could not be found,为攻击者提供方便。
12.通过漏洞造成其他危害
虽然以上的几种分类包括了绝大多数的漏洞情况,可还是存在一些上面几种类型无法描述的漏洞。