【IT168 专稿】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来重启系统。
|