“裁剪”出的安全
Solaris系统虽应用广泛,也避免不了安全问题,很多网络管理员采取外在的安全解决方案,但治标不治本,完全依靠外在的技术是很难真正维护好网络安全的,只有对系统本身有深入的了解和防治才行。本文从Solaris系统的服务着手,分析系统服务的安全漏洞,提出基于服务裁剪的安全策略,并进一步阐明应用服务裁剪的技术措施。
任何一个软件本身都不可能有绝对的安全性,Solaris操作系统当然也不例外。相应版本系统补丁程序(Patch)的不断推出也证明了这一点,此外诸如文件系统setuid程序隐患、网络信息服务NIS的DoS攻击(在多台客户端上使用finger服务)、网络文件系统服务NFS的RPC安全漏洞等均是攻击者较频繁使用的手段。
Solaris网络系统服务裁剪
现今的网络安全事件中,大部分的Solaris网络系统攻击是针对服务器上运行的服务漏洞,其中包括电子邮件服务、匿名FTP服务、WWW服务、NFS服务等服务系统。基于服务裁剪的安全策略可以有效控制服务的运行,关闭不需要启动的服务端口,达到减少攻击漏洞的目的。
1、Solaris网络服务的启动方式
Inetd方式
Solaris系统启动时,主要的Internet服务器过程inetd就开始运行了。Inetd读取配置文件/etc/inet/services和/etc/inet/inetd.conf,从而启动文件中定义的网络服务,然后开始监听从网络的其他计算机发出的连接请求,Inetd过程同时监听文件/etc/inet/services中定义的所有端口。
RC方式
在没有inetd的情况下,有些服务通过自己的rc文件来启动。系统的运行等级决定引导系统时启动和初始化哪些程序,Solaris系统分为8个运行等级(如表1所示),系统缺省运行等级为3,运行等级在/etc/inittab文件中定义。Solaris系统提供了运行控制程序:/sbin/rc*.d ,每个运行等级都在/sbin目录下有相应的rc程序。例如rc0.d、rc1.d、rc2.d、rc3.d、rc5.d、rc6.d和rcS.d。实际上此种情况也是常见的。例如sendmail就是这样类型的服务,它通过自己的rc文件S88sendmail来启动,并不需要inetd。
以上两种启动方式的主要区别在于:Inetd方式可以用来管理比较普遍的网络服务,例如telnet、ftp等服务;而RC方式则可以处理负荷很重的网络服务,此类服务使用自己专门的端口监控过程,用来直接对服务请求进行监听和处理,加快了这些网络服务的响应速度。
两种启动方式均是在solaris系统安装、启动后自动运行的,其中绝大部分网络服务默认情况下都是被激活的,所以必须对系统进行相应的服务裁剪,关闭那些非必须启动的服务以消除安全隐患。
2、服务裁剪
由于solaris系统网络服务启动方式的不同,所以不同类型的服务其裁剪方法也不同。下面我们分别根据inetd和rc方式进行单独裁剪。
Inetd方式服务裁剪
此种方式下服务启动是依靠在文件/etc/inet/services 和/etc/inet/inetd.conf中进行定义的。/etc/inet/services文件把每个服务的名称给定一个端口号和一个端口类型,其字段的定义如下所示:
name port/protocol [alias]
其中name是服务的名称,port是IP端口号,protocol是所使用的协议(数据传输控制协议TCP或者用户数据协议UDP),alias是一个可选项,可以利用它为服务指定其他替代名称。下面给出文件的部分:
systat 11/tcp users
netstat 15/tcp
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
假如现在本服务器对ftp服务进行裁剪,可以利用solaris系统下提供的vi编辑器(当然ed、pico等其他编辑器也可)对/etc/inet/services文件中相应的行进行注释即可(在行开始加入“#”):
......
#ftp-data 20/tcp
#ftp 21/tcp
......
如此注释完之后重新启动服务器,利用netstat命令可以显示当前服务器打开的端口,进行对照即可了解达到目的与否了。
/etc/inet/inetd.conf文件的字段包括如下一些内容:
name type protocol waitstatus userid path args
其中name是服务的名称,type是stream、dgram、raw、seqpacket或者tli中的一个,protocol是在文件/etc/inet/protocols中列出协议中的一个,waitstatus代表是处于等待(wait)或者是处于非等待(nowait)状态,userid指定了哪个帐号可以运行这个服务,path是服务的一个完整路径名,args包含了程序所有的参数,通常是程序自己的名称。下面给出文件的部分:
ftp stream tcp nowait root /usr/sbin/in.ftpd
telnet stream tcp nowait root /usr/sbin/in.telnetd
finger stream tcp nowait nobody /usr/sbin/in.fingerd
服务裁剪方法仍然是利用编辑器在需要裁剪的服务行首加“#”符号并重启inetd.conf服务即可。可以注释掉的一些比较有代表性的服务如下:shell、login、talk、uucp、finger、sprayd、walld、cmsd、ruserd、ttdbserverd、rpc.rstatd、rpc.ttdbserverd等。
以上就对基于inetd启动方式的网络服务进行了裁剪。
RC方式服务裁剪
RC方式服务裁剪先确定系统运行等级下的对应rc程序,然后通过关闭其中不需启动的服务来达到目的。例如可以在rc3.d中裁剪掉非MAIL服务器上的sendmail服务。
裁剪方法:进入/etc/sbin目录,在rc0.d到rc6.d的各个目录中,先利用grep命令搜索出关心的服务文件,把该文件(默认以S开头)移走即可,为了防止将来需要使用该文件,建议使用如下方法:
1.将文件的首字母“S”改为其他字母;
2.将文件的首字母“S”改为“K”,代表杀死对应进程。
一般大部分的服务均可以裁剪,建议保留的配置文件如下(部分):
1.rc2.d(运行等级2)
S69inet、S74syslog、S85power、S88sendmail(如已安装其他mail功能软件或非mail服务器则可裁剪)、S71sysid.sys、S75savecore、S92volmgt、S73cachefs.daemon、S80PRESERVE、S99audit、S20sysetup、S30sysid.net、S72inetsvc、S76nscd。
2.rc3.d(运行等级3)
与rc2.d保留的基本相同,只是由于运行等级3下启动了NFS服务使得网络资源能共享,所以可以将S15nfs.server服务保留。
裁剪验证
在服务裁剪完后,可以重新启动服务器,通过以下几种方法可以对裁剪效果进行验证:
1.利用netstat -an命令可以显示当前服务器所有已经打开的端口,进行对照验证;
2.从/var/adm/messages文件中来观察自启动的服务情况;
3.利用网络漏洞扫描器对裁剪过的服务器进行扫描验证,比较专业的扫描器有Satan、 Internet Security Scan、Haktek.exe、Nmap等。
结束语
以上操作均在Solaris5.7系统环境下运行通过,利用服务裁剪方法极大地增强了Solaris网络系统的安全性。建议同时在网络边界路由上做对服务器先允许后全部拒绝的ACL访问列表进行包过滤,网络管理员在日常的管理工作中还可以利用报文监听工具对所管理网络中的数据报文进行捕获、分析,进而发现服务器中存在的安全漏洞,此类较专业的工具有Sniffer、Snoop、Tcp-dump、Netman等。
表1 系统运行等级
运行等级 功 能 对应的rc程序
0 PROM监控等级,停机状态(Halt态) rc0.d
1 管理状态(单用户态,系统维护模式,不允许普通用户登录) rc1.d
2 多用户状态 (未启动NFS,网络资源不能共享) rc2.d
3 多用户状态(启动NFS,网络资源能共享) rc3.d
4 可选多用户状态(当前未使用) rc4.d
5 软件重启状态(未使用) rc5.d
6 重新启动 rc6.d
S或s 管理状态(单用户态,系统维护模式,不允许普通用户登录) rcS.d
文章转载地址:http://www.365master.com/kt_article_show.php?article_id=400&categ_code=10041003