在众多的网络安全因素中,服务器安全又显得尤为重要,如果我们的服务器不再安全,我们不仅享受不到网络给我们带来的高效与便利,同时也会使自己陷入危险之中,很多时候,这些危险都可以是致命的。
本文所涉及的绝技包含:
堆栈溢出
远程攻击
口令破解
信息篡改
木马后门
进程中止
超级权限
绝技并不能包治百病,但是很多时候,它确实是非常有用的。
正文:
网络的互连是为了实现信息的方便共享和传输。但是几乎自从有了网络的存在,入侵行为也就同时出现了。Internet的出现和高速发展同时带动了网络入侵活动的发展。在种种网络入侵行为中,针对关键服务器的攻击可以说是最具威胁性、可能造成损失最大的行为。越来越重要的信息无形资产存储在这些服务器上,一旦服务器受到了安全威胁势必殃及这些信息和数据。
据统计,2001年的入侵事件超过了往年的总和。更加致命的是这些入侵行为不仅仅来自于外部的所谓"黑客"(确切地讲应该是Cracker),而且很多来自于内部人员。但是,入侵方式虽然五花八门,但是却万变不离其宗,具有其固定的套路和方法。正所谓魔高一尺,道高一丈,本文将从分析七种最普遍的攻击方式入手,逐一介绍破解这种攻击的方法。这七种入侵手法分别是:堆栈溢出、漏洞攻击、口令破解、信息篡改、木马后门、进程中止以及超级用户权限的滥用。此处用到的核心技术是冠群金辰公司的eTrust服务器核心防护(eTrust Access Control)。
1. 堆栈溢出
又称缓存区溢出攻击、Buffer Overflow。这种类型的攻击赫赫有名,频频出现在CERT、SANS、CSI等国际网络安全组织的最具威胁的攻击类型名单内。在1998年Lincoln实验室用来评估入侵检测的的5种远程攻击中,有3种是基于社会工程学的信任关系,2种是缓冲区溢出 在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的建议是和缓冲区溢出有关的;在 Bugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题。据统计,通过缓冲区溢出进行的攻击占所有系统攻击总数的80%以上。
这是一种渗透到系统中的攻击技术,其基本理是当来自某个程序的输入数据超出程序缓冲区能够处理的长度时会产生溢出,结果不受程序员的控制。当入侵者巧妙地安排代码后,被攻击的服务器还可能执行入侵者指定的程序代码,从而导致攻击者甚至可以获得系统中超级用户的权限。比如80年代的Morris"蠕虫"事件导致了当时Internet上1/3的计算机瘫痪,这种入侵方式就是采用了UNIX的Finger服务的一个缓存区溢出的漏洞;2001年的红色代码病毒在短短几个小时内传遍了全球,造成了数十亿美元的损失,也是采用了Windows服务器平台上的IIS服务的一个缓存区溢出漏洞。为什么这种攻击这么多呢?主要原因在于,目前广泛用于系统编程的语言--C语言本身的某些函数就存在着一些漏洞,造成了这种漏洞的广泛存在和难以彻底清查。
目前对这种攻击方式的防范方式主要有以下几种:第一,对存在溢出漏洞的程序打补丁。这是最常见的防范方式,需要依靠程序的厂商提供相应的补丁程序才能生效。但是随着网络攻击的频度不断加快,一个漏洞从被发现到运用在大规模的攻击中的时间大大缩短。往往程序厂商还没有发布相应的补丁程序,攻击就已经发生了。所以这种方式是非常被动的,无法防范新出现的漏洞入侵。第二,通过操作系统的设置使得缓冲区不可执行,从而阻止攻击者植入攻击代码。这种方式的主要问题在于首先可能和现有的应用程序存在冲突,其次对溢出攻击的防范不全面。因为有些攻击不需要进行攻击代码的植入过程。第三,采用专用的防范溢出的编译器对程序进行编译检查。这是一个比较完整的保护措施,但是却需要付出非常高昂的时间和费用的代价。
所有上述的办法都无法在现实的业务系统中顺利使用。冠群金辰的eTrust Access Control则提供了另一种切实可行、易于实施的防止"堆栈溢出攻击"的方法。eTrust Access Control中具有一种STOP(STack Overflow Protection,堆栈溢出保护)技术,可以阻止这种入侵,防止用户或程序获得超级用户权限。这种技术是基于另外一种DSX技术实现的。
eTrust Access Control的专利型技术DSX(Dynamic Security Extensions,动态安全扩展)的实现原理如下:一般的操作系统都有一个系统调用表,包含指向每个系统调用的内存地址的指针。应用程序对资源的访问、对硬件设备的使用、进程间的通讯都是通过系统调用接口在操作系统内核中实现的。DSX保存了该表中与安全有关的系统调用的指针,并把这些系统调用重定向到eTrust Access Control的相应代码。当用户或程序执行一个与安全有关的系统调用时,eTrust Access Control系统调用代码会检查eTrust Access Control数据库。如果调用是被授权的,eTrust Access Control调用原来的系统调用,就想eTrust Access Control没有安装一样。否则,DSX返回错误,禁止改请求。
所有的缓冲区漏洞挖掘程序都基于以下一个假设,即:程序在每次运行时有问题的参数压入栈内的数据地址空间偏移量是一定的(或者相差较小)。如果在程序运行时由操作系统定义并且分配一个随机化的偏移给该应用程序,那么则专为此有缺陷的程序设计的溢出程序在溢出时就会返回一个错误的ret地址,而不能跳转到恶意构造的shellcode下。虽然大部分的缓冲区溢出程序也能提供可调整的offset变量,但由于每次有缺陷的程序运行时都将拥有一个随机化的偏移,因此通过上次不成功的溢出猜测所得到的地址空间和内容并不能来指导修正下次调整的offset。eTrust Access Control提供了STOP技术在不改变操作系统内核下同级工作,能帮助定义并且分配一个随机化的偏移量,在不修改的系统内核的情况动态实现上述功能。
通过这种防范措施,用户不仅仅能够对所有已知和未知推栈溢出类型的攻击进行彻底防范,而且还不需要修改任何现有的操作系统和应用程序,保证原有系统的持续运行,保护了投资。
2. 远程攻击
所谓远程攻击也称为远程漏洞发掘行为。就是入侵者在初步掌握了系统的一些信息和漏洞后在远程针对服务器发起的攻击行为,或者是已经掌握了内部合法身份的内部入侵者对服务器采取的渗透行为。实际上堆栈溢出类型的攻击是一种典型的远程攻击行为,但是由于其突出的地位,我们将它单独放在了第一位。除了堆栈溢出类型,远程攻击还有很多类型,根据系统存在的漏洞而定。
入侵者通过前期的"踩点",往往会掌握大量有关被攻击对象的信息。比如采用在域名注册机构公开网站上查询到的注册负责人、电话、DNS地址、地址等等,以及通过端口扫描工具和其它刺探工具获得的对外公开的服务器的操作系统版本、服务程序版本以及打开的端口。高级别的入侵者甚至能够透过防火墙和包过滤设备探测到防火墙内部的内部服务器的相当多的信息。到最后,入侵者手中可能已经掌握了被攻击对象网络的拓扑结构、服务器部署、互连结构、IP地址分配甚至防火墙或包过滤设备上的过滤规则。随后,入侵者就能够按照这些信息按照入侵策略实施攻击行为。在若干年以前,由于知识的局限性,不是所有的入侵者掌握了这些信息后都有能力实施入侵行为。但是,随着近年来Internet的迅速普及,入侵者有了一个交换信息的广阔平台,一个漏洞一经发现,一般会在第一时间内出现在黑客论坛上,而后发现漏洞的黑客会公布验证该漏洞的程序。这时一些恶意的入侵者就会依据这些程序进一步开发出更加简单易用、傻瓜化的远程攻击工具。还有人将漏洞的扫描和发掘(也就是利用该漏洞的入侵)集成在一起进行,就是一旦扫描工具发现被扫描的系统存在安全漏洞,就马上启动入侵进程,对该系统进行攻击。这样就形成了所谓的"自动化入侵工具",大大缩短了入侵的周期。近期,更有将漏洞发掘工具和蠕虫结合的趋势。比如2001年的红色代码病毒就是将攻击代码和蠕虫相结合,既具有了攻击工具的效果,又充分利用了蠕虫的快速传播的特性。这种攻击方式的结果会使攻击行为在短短数小时内就传遍全球,造成的后果会更加可怕。
远程攻击的直接后果就是系统中的一台或者多台服务器因为存在的安全漏洞被攻陷,导致信息失密以及数据丢失、篡改。对于这种入侵方式的防范措施一般就是及时应用系统厂商提供的升级和补丁程序,并切时刻关注系统厂商的安全通知和动态。如果需要获得更好的时效性,那么还需要经常到一些著名的安全站点去检索本系统相关的安全通告。当然,前面已经说过,这种方式尽管是必要的,但是属于非常被动的防范方式。而且作为系统管理员,往往需要在非常有限的时间内利用有限的资源维护庞杂的网络系统,工作量非常大,根本就没有时间持续关注网络安全以及系统漏洞的最新动向。所以,一种主动的保护措施对于防御远程攻击是非常有必要的。
eTrust Access Control就是这样一种主动的保护系统,它架构在一个完善的访问控制策略模型之上,基于1976年IBM公司的大型机安全体系技术:RACF (Remote Access Control Facility)。经过二十余年的发展,该体系已经非常成熟,成为服务器、主机安全体系的工业标准,并且集成在了OS/390大型机中。采用大型机上实现的稳健的安全体系对服务器进行安全防护是非常有保障的。eTrust Access Control采用了超细粒度、多条件的访问控制规则,使得对资源的保护得到了强大保障。
远程攻击的主要目的就是为了取得本地资源的访问权限、破坏或窃取系统中的文件、数据资源。但是,如果采用合适的时间、地点、用户身份ID以及访问应用程序等多个条件进行限制后,这种攻击能够起到的破坏作用就大大降低。
eTrust Access Control保护的资源不仅仅限于文件和目录