扫一扫
关注微信公众号

Solaris安全加强
2007-10-08   网络

本文首先介绍Solaris的基本安全设置。

1.物理安全

首先要进行Solaris的OpenBoot安全设置。

通过OpenBoot,几乎可以从任何连接SCSI设备上引导。也可以修改OpenBoot变量,而这些影响到整个Unix的引导。

OpenBoot的三种安全级别如下:

(1)None:可以执行任何命令。

(2)Command:除boot和go之外的命令执行需要口令,可以从默认设备上引导。

(3)Full:除go之外的命令执行需要口令。

注意在full模式下,如果遗忘了OpenBoot口令,只有用root登录后用eeprom才能修改口令。

如果root口令也遗忘了,只能更换EPROM了。

推荐至少将OpenBoot设为Command模式。在严格限制安全条件时规定Full模式,但在这时需要牢记OpenBoot口令,否则会造成很大的麻烦。

2.文件系统安全

(1)文件和目录的权限。

UNIX系统中的文件权限,是指对文件(或者目录)的访问权限,包括对文件和目录的读、写和执行。我们要注意这三种权限在文件与目录上的不同作用。

请检查自己的Solads服务器的下列文件权限是否正确:

●/etc下的所有文件:/etc中的文件不需要可写,应设为只读,chmodg-w/etc/*。

●/etc/inetd.conf:所有者为root,访问权限是可读写。其他用户无任何权限。

●/etc/services:确保文件所有者是root,可读写。其他人可读。

对于root用户新创建的文件与目录,注意在没有必要的情况下,一定要使任何一个用户没有访问的权限。超级用户的权限最好设置为077。如果某些文件或者目录需要被别人访问,生成后再修改权限就行了。麻烦一点总比被攻击好。

(2)SetUID与SetGID权限。

在Solaris中,文件除了读、写和执行权限外,还有一些特殊权限,SetUID和SetGID是其中的一类。它与Solaris系统的安全关系紧密。SetUID是指设置程序的有效的执行用户身份(UID)为该文件的主人,而不是调用该程序的进程的uid。SetGID与之类似。SetUID和 SetGID存在于主人和属组的执行权限的位置上。

这种权限怎么用?举个例子来说,假如某一命令(程序)的主人是root用户,并且该文件有SetUID属性,但是该文件的读、写、执行权限的属性表明普通用户userl可以执行该命令,那么就表示:当userl执行该命令时,他具有root的执行身份,并获得相应的权限。一旦该命令执行完成,root身份也随之消失。

有些文件是不能有SetUID权限的,比如cat、mole、vi、tail等可以起显示和编辑作用的命令。如果有的话会产生什么效果?就会让普通用户看到他本不应该看到的文件,如/etc/shadow,这里存放着所有用户加密后的口令,一旦黑客得到root的口令加密串,然后利用一台性能好的计算机可以在几天时间内就把root口令算出来,从而非法提升权限。

如果/Bin/ksh这样的外壳程序有SetUID权限就更不得了,普通用户执行后就马上成为超级用户了。

(3)查找特定权限的文件。

在黑客攻击了系统之后,往往会修改一些文件与目录的属性,来达到留后门和其他的目的,我们可以通过下列的手段来找出这些文件,消除隐患。

在当前目录及其子目录查找所有的SetUID文件:

#find/ -perm -4000 -prin

在当前目录及其子目录查找SetGID的文件:

#find/ -perm -2000 -print

在当前目录及其子目录查找所有用户都可写的文件:

#find/ -perm -O+W -print

查找属于某个用户的文件,这在确定一个账户被非法使用后是很有用的:

#find/ -user xyd -print

使用这个命令可以列出系统中所有属主是用户xyd的文件。

(4)账号与密码。

黑客要非法地访问一台计算机,最简单的办法是盗取一个合法的账号,这样就可以令人不易察觉地使用系统。在Solaris系统中默认有不少账号安装,也会建立新的个人用户账号,系统管理员应对所有的账号进行安全保护,而不能只防护那些重要的账号,如root。

无用和长期不用的账号对系统来说是一种负担,也容易为黑客提供入侵的途径。为了整体的安全,应关闭这些账号,直接在/etc/passwd和/etc/group中把相应的行注释掉就可以了。在默认设置下,系统中有这些用户与组需要关闭:

需要关闭的用户:

daemon、bin、sys、adm、lp、uucp、nuucp、listen、nobody、nobody4、noaccess。

需要关闭的组:

sysadmin(14)、sys(3)。

在Solaris中可以使用/etc/default/passwd文件来保护账号的安全,下面给出了一些推荐值:

●MINWEEKS=1    #最短改变口令时间为1周之后;

●MAXWEEKS=4    #最长改变口令时间为4周之内;

●WARNWEEKS=3   #3周的时间给出密码过时警告:

●PASSLENGTH=6  #最短口令长度为6。

密码的设置应按照一定的规则。在Solaris系统中,为了强制用户使用合格的口令,用户修改口令时默认要求必须最少有6个字符,而且至少包括一个数字或者特殊字符。不过要注意在以root的身份进行密码修改时是不受这个限制的。

下面是在进行密码设置时推荐的一些注意事项:

●密码至少应有6个字符(在/etc/default/passwd中定义);

●密码至少应该包含2个英文字母及一个数字或特殊符号;

●密码应与用户名完全不同,且不能使用原有名称的变化(如反序、位移等,因为系统在做比较时忽略大小写);

●新旧密码至少有3个字符不相同(因为系统在做比较时忽略大小写)。

(5)用passwd命令设置账号。

利用passwd命令,除了可以修改口令外,还可以进行一些口令方面的参数设置:

●-s:列出口令的参数;

●-1:root锁定一个用户;

●-d:root删除一个用户的口令;

●-n:root设置一个用户的最短修改密码时间;

●-x:root设置一个用户的最长修改密码时间;

●-w:root设置一个用户的修改密码警告时间。

(6)设置账号组信息。

在Solaris中,用户在/etc,passwd文件中规定的组是主组,他还可以同时属于其他组。这个属性在/etc/group中可以查到。下面是有关用户组的一些命令:

●newgrp:切换成新的用户组;

●groups:显示所属的用户组;

●id:显示用户的身份,包括UID、GID、用户组等信息。

(7)su命令。

切换用户的命令su可以使一个用户切换为另一个用户而不必退出。在使用时,系统会提示输入将要切换为的用户密码。按“Ctrl”+D或exit返回。

可以使用/etc/default/su文件管理su的参数:

●SULOG=/var/adm/sulog#10g文件记录:

●PATH=/usr/bin:#新用户默认PATH:

●SUPATH=/usr/sbin:/usr/bin;

●SYSLOG=YES#记录log。

如果可能的话,使用sudo代替su命令,这样可以减少特权命令被滥用的情况。

3.root账号的安全

root账号是黑客攻击的最终目标,有了root账号,黑客可以不受限制地访问系统中的所有文件和资源,也可以成为任何一个用户。

在/etc/default/login中添加Console=/dev/console即可限制root只能在控制台上直接登录。

4.cron安全

系统中,在很多时候都需要不断重复一些命令,例如某公司每周一自动向员工报告上一周公司的活动情况,这时就需要使用cron命令来完成任务。cron常有的安全问题有:

(1)没有充分屏蔽cron运行的程序。root用户的cron中运行的脚本和程序不应被其他用户读到,更不能被修改。

(2)cron的PATH不安全。存在不安全和不确定的PATH。在/etc/default/cron中和程序本身的PATH都不应该有不安全的PATH,这会导致黑客在这些PATH中添加自己的程序,与cron所要执行的命令名称相同;同样地,如果cron的PATH中存在着”~”、“.”等不确定的PATH,也可以为类似的攻击手段留下可能。要检查crontab,不使其中留下这样的路径。

(3)用户的crontab放在其他用户可以看到的目录。这会使其他用户查看并分析这些 cron的条目,进行对相应漏洞的攻击。

(4)cron.allow与cron.deny。在进行cron设置的时候,应该使用root权限对/etc/cr- on.d/cron.allow/etc/cron.d/cron.deny进行限制,允许和禁止相应的用户使用crontab命令。

5.文件与进程检查工具fuser与lsof

fuser是系统中自带的命令,它可以查找出哪个进程在使用文件。它可以用来在删除或者重命名文件之前检查是否有某个进程打开了这个文件,并且在不能卸载一个文件系统的时候,作为查找故障的工具查看是哪些进程打开了这个文件。

fuser的模式:

进程的当前工作目录;

进程的根目录(装入点目录);

打开的普通文件;

内存映射文件;

程序的代码;

程序的控制终端;

lsof列出系统中所有打开的文件及其被哪些进程所打开,由此查出被可疑进程打开的文件。

lsof可以列出UNIX系统中的所有打开的文件,并且显示它们是被哪些进程打开的。这个工具可以用来帮助确定黑客或者他们的进程是否在读写他们本不应该访问的文件。使用“lsof”命令管理员可以查看进程、进程UID(包括sniffer、IRC、login shell)、网络连接和所有当前被打开的文件(如显示sniffer的log文件、工作目录等信息)。

6.安全检查工具COPS

COPS是一个安全性的软件包,它可以在系统上检查一些已知的缺陷,并且向系统管理员报告这些缺陷。COPS包含如下这样一些在系统中检查已知缺陷的工具包:

●dir.chk、file.chk:扫描所有用户可写的系统文件和目录;

●dev.chk:扫描系统设备目录;

●home.chk、user.chk:检查所有用户可写的用户主目录;

●root.chk:扫描所有用户可写的root的登录文件、路径、umask和hosts.equiv;

●suid.chk:扫描系统中的新的SetUID程序;

在使用COPS时,最好是定期运行它。至少一周运行一次,在重要的服务器和经常改变配置的服务器上最好每天都运行它,甚至每天运行两次。COPS可以检查到两次运行之间文件和目录权限发生的变化。了解到这些变化以后,系统管理员就可以有的放矢地找出漏洞。

7.安全检查工具,Tiger

类似于COPS,Tiger也是一个系统安全性的检查工具。它可以检查系统内一些已经存在的漏洞并向系统管理员报告。它使用时比较简单,只要解压缩包后运行就可以了。

下面介绍Solaris的网络安全设置。

UNIX系统的网络服务和网络接口是用来与其他计算机进行通信,访问网络的途径。如果对网络服务与接口的配置不当,会造成系统的安全性受到损害。

UNIX系统在安装时会激活所有的网络服务(如Telnet、FTP、rlogin等),并处在随时可以运行的状态。每一个开放的网络服务就像一扇开着的门,为黑客提供了攻击的可能。在进行网络安全设置的时候,有一个原则就是禁用不需要的服务。在系统不需要Telnet时(可以用ssh来进行远程管理)禁止它,如果不需要其他rlogin或rsh等服务,也禁止它。

8.停止/etc中不必要的服务

系统在启动时会在/etc/rc2.d和/etc/rc3.d目录下寻找以“S”开头的文件并执行,在关闭时会查找“K”开头的文件关闭相应进程。如果需要停止某些程序在启动时运行,只要把开头的“S”改为其他字母即可,如“s”,也要把相应的“K”改为“k”。下面推荐关闭的一些程序和它们所对应的启动文件。

(1)使电源管理无效:/etc/rc2.d/S85power。

(2)停止DMI Service./etc/rc2.d/K77dmi:/etc/rc3.d/S77dmi;

(3)使Asynchronous PPP无效:/etc/rc2.d/S47asppp。

(4)停止BD Stream配置:/etc/rc2.d/S89bdconfig。

(5)使UUCP临时文件清除无效:/etc/rc2.d/S70uucp。

(6)停止AutoFS/MountD:/etc/rc2.d/S74autofs。

(7)停止系统重配置:/etc/rc2.d/S30sysid。Net及/etc/rc2.d/S71sysid。Sys。

8)停止JumpStart/AutInstaU。/etc/rc2.d/S72autoinstall。

(9)使Cache File System无效:/etc/rc2.d/S93cacheos。Finish及/etc/rc2.d/S73cachefs。 Daemon。

(10)使Preserve Service无效:/etc/rc2.d/S80PRESERVE。

(11)使Network Time Protocol无效:/etc/rc2.d/S74xntpd。

(12)使CDE程序无效(除非要使用图形控制台):/etc/rc2.d/S99dtlogin。(恢复时使用命令“/usr/dt/bin/dtconfig-e”)

(13)停止名字服务缓冲守护程序服务:/etc/rc2.d/S76nscd。

(14)使打印服务无效(除非有本地打印机):/etc/rc2.d/S80lp及/etc/rc2.d/S80spc。

(15)使SNMP无效(不使用网管时):/etc/rc2.d/K76snmpdx及/etc/rc3.d/S76snmodx。

(16)停止NFS服务:/etc/rc2.d/S73nfs,Client:/etc/rc2.d/K60nfs,server;/etc/rc3.d/S15nfs, server。

(17)使Sendmail守护程序无效(非E-mail服务器):/etc/rc2.d/S88sendmail。

(18)停止其他不必要的服务:在root的crontab中加入,用以处理系统邮件队列:

0****/usr/lib/sendmail-q

只保留/etc/inetd.conf中需要服务,只须把不需要的服务前加“#”号注释即可。
9.网络监听与snoop

网络监听是黑客们常用的一种方法。当成功地登录进一台网络上的主机,并取得了这台主机的超级用户的权限之后,往往要扩大战果,尝试登录或者夺取网络中其他主机的控制权。而网络监听则是一种最简单,而且最有效的方法,它常常能轻易地获得用其他方法很难获得的信息。

在网络上,监听效果最好的地方是在网关、路由器、防火墙一类的设备处,通常由网管员来操作。使用最方便的是在一个以太网中的任何一台上网的主机上,这是大多数黑客的做法。snoop是Solaris中特有的程序,可以实现监听的功能。它是一个很有用的诊断工具,只有root才能使用它。下面是snoop使用时的一些参数:

*snoop直接监听所有的数据包;

#snoop host bjserver捕获所有与bjserver计算机有关的数据包;

#snoop-v host bjserver port 23捕获所有与bjserver有关的Telnet包。

r*命令存在一些安全问题。我们常说的r水命令包括rlogin,rsh,rcp和rdist,以r开头表示远程。这几个命令都必须在远程系统上运行shell。r命令是为了方便运行和使用远程系统而创建的。通过使用rhost文件,用户就可以在远程系统上登录或者运行命令,而不用提供口令。

r*命令的弱点如下:

(1)使用.rhosts文件易造成对不合适计算机的错误信任,导致被黑客利用。

(2)在没有.rhosts文件的情况下,用户通过r*命令来访问远程系统时会需要输入口令,整个过程没有加密,在网络上会被监听而泄露密码。

3)所有的r*命令的全部会话过程都是加密的,同样面临被监听的问题。

强烈建议不使用r*命令,它们的功能可以由ssh等程序替代。

10.Telnet命令的安全问题

Telnet虽然不像r*命令采用信任模式,但是它传递信息采用明文方式容易造成信息泄漏。同样建议采用ssh来替代Telnet。

11.Ndd

ndd系列命令是Solaris系统中独有的,可以检测或者设置网络设备驱动程序的特性。在这些可以更改的设置中有不少是与安全性有关的,管理员可以通过ndd设置IP和TCP,以及其他网络设备的特性来提高系统安全性和性能。

(1)ndd:禁止IP转发。#ndd-set/dev/ip ip_forwarding 0。

对于多宿主主机,存在可能的安全问题是,攻击者可能通过II)转发的方式访问到私有网络。在Solaisr系统中,也可以简单地生成一个文件/etc/notrouter,就能在下次启动的时候关闭IP转发。

(2)ndd:不转发定向广播。#ndd -set/dev/ip ip_forward_directed_broadcasts 0。

由于在转发状态下默认是允许的,为了防止被用来实施smurf攻击,关闭这一特性。一个简单的smurf攻击通过使用将回复地址设置成受害网络的广播地址的ICMP应答请求(ping)数据包来淹没受害主机的方式进行,最终导致该网络的所有主机都对此ICMP应答请求做出答复,导致网络阻塞,比ping of death洪水的流量高出一或两个数量级。更加复杂的smurf将源地址改为第三方的受害者,最终导致第三方雪崩。防御方法:为了防止黑客利用用户的网络攻击他人,关闭外部路由器或防火墙的广播地址特性。为防止被攻击,在防火墙上设置规则,丢弃掉ICMP包。

(3)ndd:限定多宿主机。#ndd-set/dev/ip ip_strict_dst_multihoming 1。

如果是多宿主主机,为了防止IP spoof的攻击,关闭这一特性。

(4)ndd:忽略重定向包。#ndd -set/dev/ip ip_ignore_redirect 1。

一个攻击者能伪造重定向错误的报文从而给目标主机装载一个新的路由,而这个路由也许根本就是错误的,这样主机就不会和一些特定的主机或网络通信,这是一种DDoS攻击(Solairs默认是不忽略的)。虽然重定向报文本身有一些校验规则,但是这些规则能很容易地被欺骗,而且目前存在大量的工具来达到这个目的。大多数只有一条默认路由的主机系统是不需要理会这种报文的。

(5)ndd:不发送重定向包。#ndd -set/dev/ip ip_send_redirects 0。

只有路由器才需要重定向错误,任何主机即使是多宿主主机也不需要发送这种报文。

(6)ndd.关闭时间戳响应。#ndd -set/dev/ip ip_respond to_timestamp 0。

时间戳广播报文在大多数环境下是不需要的。关闭这个特性以后,有些使用rdate系统命令的UNIX主机将不能再同步时钟。但是Solaris 2.6和7使用更好的时钟同步方式:NTP(网络时间协议)。

(7)ndd:不响应Echo广播。#ndd -set/dev/ip ip_respond_to_echo_boadcast 0。

echo广播通常用来诊断网络主机的存活情况,一旦主机收到一个对广播地址的echo请求,默认情况下所有系统会回复这个广播要求。当有人恶意定制过量的echo包,系统中的流量将大为增加。

(8)ndd:不响应地址掩码广播。#ndd -set/dev/ip ip_respond_to_address_mask_br- oadcast  0。

地址掩码请求被用来确定本地掩码,通常是网络中无盘工作站在启动的时候发送。

(9)ndd:不转发设置源路由包。#ndd -set/dev/ipip_forward src routed 0。

源路由包中包含了指定数据如何路由的信息。因此攻击者可能使用源路由包绕过某些特定的路由器和防火墙设备,也可能用来避开一个已知的IDS系统的监控范围。Solairs在打开IP转发以后默认支持源路由转发,在大多数Solairs的应用系统上,是不需要这个特性的。

(10)ndd:加快ARP表过期时间。#ndd -set/dev/ip_ip_ire_flush_interval 60000;#n-ddset/dev/arp arp_cleanup_interval 60000。

加快过期时间,并不能避免攻击,但是使得攻击更加困难,带来的影响是在网络中会大量出现ARP请求和回复,请不要在繁忙的网络上使用。或者使用静态ARP表,禁止ARP。

(11)ndd:提高未连接队列的大小。#ndd -set/dev/tcp tcp_conn_req_max_q0 4096。

TCP-SYN flood又称半开式连接攻击,提高这个队列的大小可以减轻TCP-SYN flood的攻击。

对于繁忙的服务器也应该提高这个队列。

(12)ndd:提高已连接队列的大小。#ndd -set/dev/tcp tcp_conn_req_max_q 1024。

提高队列的大小和减短连接时间可以减缓连接耗尽攻击。连接耗尽攻击和SYN flood攻击不同,连接耗尽攻击不太常见。因为这种攻击必须使用真实IP,攻击的目标是已连接队列。许多系统有一个同时连接的上限,取决于核心参数和系统内存情况。

我们可以通过优化系统核心和增加内存来缓解,但这些不是根本的方法。因为攻击者可能同时调动多台机器发起攻击。当然,我们可以在发现攻击后,在防火墙或路由器上拒绝这些IP来源的连接。

如果不通过网络设备,仅仅通过调节系统参数来缓解攻击,一方面,可以调节Web

Server,如apache的timeout参数,减短连接保持时间,另一方面,我们可以将核心以连接队列参数增大(默认是128)。作为通常的Web服务器,这个上限值很难达到,因为http的连接是典型的短时连接。但是一个攻击者可能快速发送大量的连接请求,同时保持连接,这样正常访问者的连接就可能被服务器拒绝。

以上的方法能阻止大多数连接耗尽的攻击企图,除非攻击者调动更多的资源,发动大规模的DDoS,但这样会使攻击者更容易暴露。

热词搜索:

上一篇:DDoS攻防演示
下一篇:小心共享蠕虫入侵局域网(上)

分享到: 收藏