服务器安全:架构安全的Solaris系统

来源:岁月联盟 编辑:zhu 时间:2008-04-13
服务器安全:架构安全的Solaris系统内容简介:Internet的迅速发展在给人们带来巨大便利的同时,但随之而来的网络安全问题日益严重。Solaris系统虽应用广泛,也避免不了安全问题,相应版本系统补丁程序(Patch)的不断推出也证明了这一点,此外,诸如文件系统se 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协议的传输。

三、Solsris系统补丁安装

    跟所有的操作系统一样,Solaris系统也不可避免地有它的漏洞,其中一些从可能产生的攻击后果来说几乎是灾难性的。SUN公司有向它的客户提供补丁的优良传统,这些补丁以集合包或者单个补丁的形式存在。不幸的是,要完全修补我们的系统,既需要大的补丁集合包,又需要单个的补丁,我们这里介绍一种把补丁包和单个补丁结合起来使用的方法。

    (1)以root身份登录系统。

    (2)键入umask 022来设置您的许可模式(给系统打补丁不仅要求所有的补丁被“nobody”用户可读,而且包括补丁之前的所有目录)。

    (3)创建一个叫patch的目录,并进入它。
    # mkdir export/home/patch
    # cd /export/home/patch

    (4)用ftp连接sunsolve站,得到所有Solaris操作系统版本的PatchReport文件,下载对应于服务器操作系统版本的补丁报告文件(如get Solaris7.PatchReport),进而下载报告中所标记的补丁包和单个补丁。

    (5)解压补丁包后,把所有单个的补丁加到patch_order文件中,在这个文件中列出了所有将被install_cluster脚本安装的补丁。

    (6)解压所有单个的补丁包:ls *.zip | xargs-n1 unzip。

    (7)现在所有的补丁都准备好了,重新启动计算机到单用户模式:
    # boot -s
    # mountall (mount所有的文件系统)
    # cd /export/home/patch(进入保存所有补丁的目录)
    # ./nstall_cluster  
   
    安装完后重启服务器即可。

四、防止Solaris系统遭受攻击的安全设置

    (1) 阻止ping
    鉴于攻击者一般先进行远程ping测试以寻找目标,进行阻止系统被ping时的回应,安全性自然增加了。
    在/etc/rc.d/rc.local文件中增加如下内容:
    echo 1 >/proc/sys/net/ipv4/
    icmp_echo_ignore_all

    (2) 防止IP欺骗
    IP欺骗运用过程如下:首先,目标主机已经选定;其次,信任模式已被发现,并找到了一个被目标主机信任的主机。

    黑客为了进行IP欺骗,会进行以下工作:使被信任的主机丧失工作能力,同时采样目标主机发出的TCP序列号,猜测出它的数据序列号,然后伪装成被信任的主机,同时建立起与目标主机基于地址验证的应用连接。成功后黑客可以使用一种简单的命令放置一个系统后门,以进行非授权操作。
可编辑host.conf文件并增加如下几行内容来防止IP欺骗攻击:
    order bind,hosts
    multi off
    nospoof on

    (3) 防止DoS攻击
    DoS(Denial of Service)攻击是一种很简单但又很有效的攻击方式,首先攻击者向服务器发送众多的带有虚假地址的请求,服务器发送回复信息后等待回传信息,由于地址是伪造的,所以服务器一直等不到回传的消息,分配给这次请求的资源就始终没有被释放。当服务器等待一定的时间后,连接会因超时而被切断,攻击者会再度传送新的一批请求,在这种反复发送伪地址请求的情况下,服务器资源最终将被耗尽,从而对合理请求也拒绝服务。

     对系统所有的用户设置资源限制可以防止DoS类型攻击,如最大进程数和内存使用数量等。
 例如,可以在/etc/security/limits.conf中添加如下几行:
    * hard core 0
    * hard rss 50000 (限制使用内存为50M)
    * hard nproc 50 (限制进程数为50个)
   然后编辑/etc/pam.d/Login文件检查下面一行是否存在。
    session required /lib/security/pam_limits.so

    以上的系统安全措施能够很大程度上减少系统漏洞,增强Solaris系统的安全性。建议系统管理员同时在网络边界路由上对服务器做先允许后全部拒绝的ACL访问列表进行包过滤,管理员在日常的管理工作中还可以利用报文监听工具对所管理网络中的数据报文进行捕获、分析,进而发现服务器中存在的安全漏洞。这类工具中较专业的有Sniffer、Snoop、Tcpdump、Netman等。

图片内容