返回列表 回复 发帖

[转帖]关键服务器保护的七大绝技

编者按:没有什么比网络安全更让人忧虑了,我们可以让网络越来越快,可以让网络提供越来越多的服务,但是我们也必须保证网络必须忠于自己。

在众多的网络安全因素中,服务器安全又显得尤为重要,如果我们的服务器不再安全,我们不仅享受不到网络给我们带来的高效与便利,同时也会使自己陷入危险之中,很多时候,这些危险都可以是致命的。

本文所涉及的绝技包含:


堆栈溢出
远程攻击
口令破解
信息篡改
木马后门
进程中止
超级权限


绝技并不能包治百病,但是很多时候,它确实是非常有用的。


正文:

网络的互连是为了实现信息的方便共享和传输。但是几乎自从有了网络的存在,入侵行为也就同时出现了。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技术在不改变操作系统内核下同级工作,能帮助定义并且分配一个随机化的偏移量,在不修改的系统内核的情况动态实现上述功能。

通过这种防范措施,用户不仅仅能够对所有已知和未知推栈溢出类型的攻击进行彻底防范,而且还不需要修改任何现有的操作系统和应用程序,保证原有系统的持续运行,保护了投资。

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表