网络安全 频道

架构安全的Solaris系统

Internet的迅速发展在给人们带来巨大便利的同时,但随之而来的网络安全问题日益严重。Solaris系统虽应用广泛,也避免不了安全问题,相应版本系统补丁程序(Patch)的不断推出也证明了这一点,此
外,诸如文件系统setuid程序隐患、网络信息服务NIS的DoS攻击、网络文件系统服务NFS的PPC安全漏洞等均是攻击者频繁使用的手段。本文从Solsris系统的本身着手,分析系统的安全漏洞及相应的防范措施。
   
一、防止基于堆栈的缓冲区溢出    
    在Solaris服务器被攻击成功事件中,70%以上利用的就是“堆栈溢出”漏洞,攻击者通过给一个以ROOT身份运行的程序提供比它所能处理的能力多得多的任务,使被攻击的Solaris系统无法处理而改变执行流程去执行攻击者赋予的恶意代码,从而达到攻击目的。在Solaris系统中将用户堆栈设为不可执行的能力,就可以避免基于堆栈缓冲区溢出的攻击。
    Solaris系统在2.6版本以上就提供了noexec_user_stack变量,使用它可以设定堆栈是否能够执行。在默认情况下,变量的值为0,它提供了和ABI相适应的设置。如果它的值不为0,系统将把所有进程的栈设置为可读、可写,但是不可执行。
    1、禁止程序使用可执行堆栈
    使用下面的步骤来禁止程序使用可执行堆栈:

    1)使自己成为超级用户;
    2)在/etc/system文件中加入一行setnoexec_user_stack=1;
    3)键入init6来重启系统。
    当变量被设为非0值时,那些使用它们堆栈的程序会得到一个SIGSEGA信号,通常这个信号会使程 序终止并产生转储(dump)。程序也会产生一个警告信息,信息中包含程序名,运行这个程序的用户ID号和程序的进程号。如下所示:
    a.out[347] attempt to execute code on attack by uid 555
    当syslog的核心设备被设置为注意(notice)级别的话,这条信息会自动地被syslogd精灵程序记录下来。对信息的记录是在文件syslog.conf中缺省定义的,这说明这条信息被送到了控制台和/var/adm/messages文件中。
   如果已经设置了noexec_user_stack变量的话,可以监视这些信息来发现潜在的安全问题。也可以监视信息来确定哪些程序要依靠可执行堆栈来运行。
    可以使用mprotect命令来明确地将程序栈标识为可执行的。请查看mprotect的手册页以得到更多的信息。注意因为硬件的局限,只有在sun4m、sun4d、sun4u平台上的可执行堆栈的问题才可以被检测出来。
    2、禁止可执行堆栈信息的记录
    如果不想记录可执行堆栈的信息,可以在/etc/system文件中将变量noexec_user_stack_log设置为0。即使禁止了可执行堆栈信息的记录,SIGSEGA信号仍会使执行程序产生转储。

    使用下面的步骤来禁止可执行堆栈信息的记录:
    1)成为超级用户。
    2)在/etc/system文件中加入一行set noexec_user_stack_log=0。
    3)键入init6来重启系统。


二、有关Solaris系统的安全保护  
    系统安全的第一道防线是对系统访问的控制。可以用以下的方法来控制和监视对系统的访问。如:维
护系统的物理安全、维护登录的控制、限制对文件中数据的访问、维护网络控制、监视系统的使用、设置正确的路径变量、监视setuid程序、监视超级用户(root)的登录、安装防火墙以及使用自动安全增强工具(ASET)。    
    为了控制对系统的访问,必须保证计算机所处的环境的物理安全。比如,一个用户登录计算机后就离开了,这时任何其他人可以利用这个系统访问操作系统和网络。当心用户所处的环境并提醒他们以免出现上述的情况。
    使用密码和登录控制来避免对系统或网络的未被授权的登录。系统中的所有帐户都应该有密码。即使系统中只有一个帐户没有密码,对那些知道这个帐户或可以猜到这个帐户名的人来说整个网络都是可用的。
    Solaris 系统中限制了用户对一些系统设备的访问。
    使用UNIX中对目录和文件的权限设置来进行对数据访问的控制。可以在一个用户对某个文件有读权限的同时,使其他用户可以改变或删除该文件。也可以把一个文件设置为其他用户都不可以读。
    计算机往往是网络的一部分,网络就是使得连接在一起的系统之间可以交换信息并可以访问连接到网络中的系统所提供的数据和其他资源。网络提供了一种强大且精密的计算方式。当然,网络也导致了一些破坏系统安全的机会。
    例如,在一个网络中,每个系统都提供了信息的共享。因为很多用户要访问网络,所以不受欢迎的访问出现的机会就会增加。特别是因为用户的错误,比如用户使用了一个很容易被猜到的密码。
    使用系统提供的工具对系统进行计帐并监视每个用户的一举一动。当怀疑有不安全因素存在的时候,监视系统是十分有用的。
    路径变量是十分重要的。它可以避免用户无意中执行了别人的程序而产生的对数据的损害。一个制造安全隐患的程序叫做特洛伊木马程序。如,一个假冒的su程序可以被放在一个公共的目录中,而作为管理员可能会在那里运行它。这个程序好像跟普通的su命令一样。因为在它被运行完之后它就将自己删掉,所以很难说是否已经运行过一个特洛伊木马程序。
   路径变量是在登录的过程中由.login、.profile和.cshrc启动文件自动生成的。请将当前目录(.)设置在路径变量的最后,以防止和的用户去执行这种特洛伊木马程序。决不能在root的路径变量中加入一个公共的、可写的目录。超级用户的路径变量不能包含当前目录。ASET检测启动文件以确定路径变量的设置是正确的并不包含当前目录(.)。
    另一个方法是使用防火墙或安全的网关系统来保护网络。防火墙将整个系统分为两个网络,其中之一对另一个的访问都被视为不可信任的。防火墙被设置为在内部网络和外部网络之间的委托系统。
    防火墙系统在几个内部网络之间也是很有用处的。比如,防火墙或安全网关计算机不可能在两个网络之间传递数据,除非网关计算机是数据源或数据传输目的中的一个。设置一个使用特殊协议的防火墙。如,允许传输邮件,但不可以使用telnet和ftp服务。当使用了ASET的高安全等级的话,ASET将禁止IP协议的传输。

0
相关文章