一些FreeBSD相关的安全问题 |
| 一些FreeBSD相关的安全问题
by xundi@xfocus.org ==========================================================================
security.*;auth.info /var/log/security 原因很简单,这样syslogd就把连接到sshd的日志信息记录下来。 当然如果你愿意,也可以建立其他的日志文件,不过如果你建立新的日志文件, /var/log/auth 600 10 100 * Z 其中/var/log/auth表示日志文件名,600是日志文件指定的属性,10表示包括 这里建立你修改newsyslog.conf中的一些全局可读属性,如maillog和messages /var/log/messages 600 5 100 * Z 当然如果你要把信息记录到其他主机上更好,你可以修改/etc/syslog.conf中的 #*.* @loghost 最后你防止任意用户读取这些文件,你使用下面命令修改文件属性: # chmod 600 /etc/syslog.conf ========================================================================= 关于SSH配置 就象上面所说的,telnetd守护程序存在严重的缓冲溢出可以导致远程ROOT SHELL sshd控制文件是/etc/ssh/sshd_config,如果你没有使用SSH protocol 1的机会, Protocol 2 第二,SSH在运行的时候消耗比较多的内存,是个"耗粮"大户,这也是cisco产品 MaxStartups 5:50:10 因为一个系统你除非有很多人管理系统或者提供SHELL服务,一般情况下这个值 默认情况下,FreeBSD的OpenSSH配置关闭了远程ROOT登陆和空密码登陆,这里还 X11Forwarding no 如果你的机器作为服务器在运行,就不需要安装X服务程序,因为使用了 强烈建议不使用静态密码,而使用DSA或者RSA KEY,你修改如下内容就可以关闭 PasswordAuthentication no 因为使用密码验证毕竟不是一种安全的方法,存在着社会工程,猜测,窃取 对于sshd,你可以通过下面的方法来限制组用户或者光是单独用户来访问SHELL: AllowGroups shellusers 当然你如果要改变原来的用户访问SHELL属性,如要把用户改变成/sbin/nologin chsh -s /sbin/nologin user 最后你最好使用tcpwrappers来限制一些访问,你修改/etc/hosts.allow文件,注释 sshd : localhost : allow FreeBSD默认情况下不把ssh登陆失败的内容记录下来,你需要对/etc/security --- /etc/security Mon Jun 11 15:45:02 2001 sflag=FALSE ignore= # Show tcp_wrapper warning messages ==================================================================== 网络部分 --------- 默认情况下FreeBSD和许多操作系统在关闭的端口上接受到TCP SYN段的时候,会 sysctl -w net.inet.tcp.blackhole=2 你可以通过下面的操作马上启动实现这个特征: # /bin/sh /etc/rc.sysctl 当然这个特征不能作为ipfw(8)工具的替代品来防卫系统,要建立更高安全的 修改/etc/rc.conf,把不需要的服务关闭,i)portmap服务,如果你没有NFS, NIS portmap_enable="NO" 你可能经常发现有人讨厌的扫描你整个网络,目标端口为111的信息,这是有人 ii)除非你运行mail服务器或者mail网关,这里建议你把sendmail置于queueing only sendmail_flags="-q1m" iii)建议你丢弃icmp重定向,可以防止Dos攻击或劫持进程(hijack sessions), icmp_log_redirect="YES" 当然你要完全去掉不确定信息记录,你可以在你的CISCO路由器上关闭重定向: "no ip send-redirects" (IV)你可以设置系统丢弃SYNFIN信息包,不过这个你可以更好的通过IPFW来过滤 tcp_drop_synfin="YES" 当然你需要在kernel配置中增加如下配置: options TCP_DROP_SYNFIN v)关闭对广播类型的响应 #sysctl -w net.inet.icmp.bmcastecho=0 过滤icmp响应这后,服务器无法ping通,这有助提高部份安全性能。 vi)对udp包的校验和计算 #sysctl -w net.inet.udp.checksum=1 可以防止不正确的udp包的攻击。 vii)设置rc.sysctl, rc.conf 和 sysctl.conf 权限: # chmod 600 /etc/rc.sysctl =================================================================== Crontab和at问题 ---------------- crontab是一个比较强大的服务,有不少漏洞在cron发现过,普通用户最起码 建立一/etc/cron/allow文件并把需要使用的用户放进去,如: # echo root > /var/cron/allow 并设置权限crontab不能由其他用户任意访问: # chmod 600 /etc/crontab 不过你如果不需要使用'at'命令,就关闭这个服务,因为安全的原则始终是" # */5 * * * * root /usr/libexec/atrun =================================================================== inetd和rate限制问题 Inetd默认情况下是启用的,它控制了不少不安全的服务,如:telnet, ntalk inetd_enable="NO" 如果你要使用FreeBSD的inetd.你可以通过inent请求来控制rate的资源,如: auth stream tcp nowait/10/10 root internal auth -r -f -n -o UNKNOWN -t 30 第一个10表示我们允许的最大子进程数量,第二个值是每一个IP每一分钟连接的 =======================================================================、 Securelevel 问题 FreeBSD内核有一个安全级别(securelevel)的概念,这是指系统内核运行使用 如果你要改变级别系统为2,你可以在/etc/rc.conf中增加如下条目: kern_securelevel_enable="YES" 你可以重新去启动,或者使用 # sysctl -w kern.securelevel=2 来激活。 ===================================================================== 一些本地安全tip i)编辑/etc/ttys,把下面的一行的secure改为insecure: console none unknown off secure 这样用户进入单用户模式时会要求输入ROOT密码,当然这样也使你忘记ROOT密码 ii)修改一些计算机相关设置,如BIOS,不允许软盘启动,CDROM启动等,即在装载 iii)关于虚拟终端和虚拟终端缓冲,虚拟终端缓冲中的内容在你logoff以后并 SC_NO_HISTORY #取消历史记录 SC_DISABLE_DDBKEY # 取消debug键 iv)对/bin,/sbin进行安全保护。 #chflags schg /bin/* ====================================================================== 信息过滤问题 FreeBSD的包过滤工具具有强大的规则设置来过滤你想阻塞的信息,你可以使用 需要在编译内核时打开下面选项重新定制内核。 options IPFIREWALL options IPDIVERT 其中第一项设置IPFIREWALL是用于打开基本的包过滤支持的,只有使用它才能 你可以建立/etc/firewall.rules建立自己的规则,并把文件设置为600属性, ipfw -q -f flush # 检查通信状态 # 控制icmp包,只能通过icmp类型来限制 # 允许DHCP通过 # allow ident requests # log anything that falls through 其实关于规则有很多文章可以参考,这里就不在叙述。 你可以使用下面命令马上激活规则: # sh /etc/firewall.rules 如果你要在你日志里查看有关丢弃包的记录,你需要如下设置: # sysctl -w net.inet.ip.fw.verbose=1 如果你要所有这些设置在机器启动时候激活,编辑/etc/rc.conf增加如下条目: firewall_enable="YES" 最好你如果要记录这些信息进行调试,不要忘了在/etc/syslog.conf中增加如下 !ipfw 记得在/etc/newsyslog.conf中设置如下选项: /var/log/ipfw.log 600 3 100 * Z ========================================================================= 用户资源限制问题 从 4.3 BSD Net/2开始,BSD Unix引入了登录类别这种分类机制来管理用户使用的资源、记账和环境设置。FreeBSD系统使用/etc/login.conf中描述的数据来将用户按照登录环境、强制性的资源限制以及记账管理等分为不同的登录类别,每个用户的登录类别记录在/etc/master.passwd中的该用户的设置中。以下是一个缺省安装的/etc/login.conf的部份内容。
---------------------snip----------------------
# 利用login.conf可以方便地对用户的登录环境和资源许可进行设置,缺省的设置对用户所能使用的资源几乎没有限制,可以把login.conf改为如下内容: ---------------------snip---------------------- 上面设置了default登录类别中的几个参数,如果没有在master.passwd文件中明确指定用户的登录类别,就使用这个缺省类别来作为用户的登录类别。 cputime设置了用户的每个进程可以使用的CPU时间,缺省是无限制(infinity)。如果加以限制,有些需要大量CPU时间进行运算的进程就不能正常执行到结束。 datasize-cur设置了用户使用的数据段最大为64M,但-cur设置不是强制的,用户实际使用的数据有可能超过这个值,但最大不能超过datasize-max设置的值(缺省没有设置)。如果没有-cur和-max 后缀,仅仅定义datasize,则表示datasize-cur和datasize-max同样都为datasize 设置的值。同样stacksize定义了对栈的限制。 memorylocked-cur设置了用户每进程可以锁定的最大内存。 memoryuse-cur设置了每进程使用的最大内存。 filesize-cur设置了用户产生的文件大小。 coredumpsize设置了在应用程序发生问题时产生的core dump文件的大小。 maxproc-cur设置了用户可以同时执行的最大进程数。 openfiles-cur设置了每进程最多打开的文件数。 priority设置用户进程的优先级。 requirehome设置用户登录时是否需要主目录,@符号表示不需要主目录。 umask项设置缺省的umask,用于用户创建文件的属性。 tc设置系统认证策略为使用缺省的认证策略。 如果要创建新类别,并不需要对每个值都重新设置,系统缺省先应用default类别的设置,然后再应用具体类别的设置,因此只需要设置与default类别不同的项就可以了。 ---------------------snip---------------------- 上面是设置了一个新类users,可以看出它为用户设置了环境变量MANPATH,并重置了cputtime 、openfile、maxproc和tc的值。每次更改login.conf之后,都要进行更新登录类别数据库的操作。 bash-2.03# cap_mkdb /etc/login.conf 由于登录类别保存在master.passwd文件中,通常在使用adduser添加用户的时候设置用户的登录类别。如果要进行更改,必须使用vipw来修改/etc/master.passwd文件的第5个域。下面为master.passwd
中的一行,该行指定这个用户的登录类别为user: 改为: inburst:TioxhDpCtDaRE:1004:0:users:0:0:stardust:/home/stardust:/usr/local/bin/bash 设定系统中用户的可用空间也是系统免受本地拒绝服务攻击重要的一方面,在未设定 quota 的系统上的用户可以随意的灌爆硬盘。要把 quota这项功能打开,可以修改 /etc/rc.conf 中的这项设定: check_quotas="NO" # Check quotas (or NO). 改成 check_quotas="YES" # Check quotas (or NO).
========================================================================= 一些管理员日常操作 i)经常查看http://www.freebsd.org/security/index.html的安全公告 ii)订阅security bugtraq和FreeBSD官方安全邮件列表了解安全动态。 iii)每天检查系统日志,关于检查系统日志,你可以通过其他工具增加多信息的捕获, iv)如果你硬盘够大,信息处理够快,定时使用netstat -an >> /.../.../netstat.log来 v)如果你对你的文件系统有原始的记录,你可以定时使用一些系统完整性检查工具进行 vi)如果你有防火墙,那更好,经常查看防火墙信息。 =============================================================================== FreeBSD近来比较严重的一些安全漏洞 远程漏洞 i)目前出现的最严重的漏洞,telnetd守护程序存在远程溢出漏洞,可以让攻击者远程 ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:49.telnetd.v1.1.asc ii)FreeBSD的ftp也存在远程溢出,可以让攻击者最终获得Root shell.详细资料请看: ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:33.ftpd-glob.v1.1.asc iii)FreeBSD如果使用BIND服务(操作系统附带),如果BIND服务版本小于8.2.3-RELEASE, ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:18.bind.asc 另外关于应用程序的还有wu-ftp,qmail中的vcheckpasswd也存在远程缓冲溢出,还有其他
i)FreeBSD的内核对信号处理不正确,可以导致本地用户获得ROOT SHELL。详细信息请看: ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-01:42.signal.asc ii)FreeBSD的procfs文件系统存在漏洞,可以导致本地用户获得超级管理 ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-00:77.procfs.v1.1.asc iii)因为好多FreeBSD安装了Mysql数据库,而低于3.23.22版本的mysql都有 上面几个本人认为必须重视的几个漏洞,然后你需要打上补丁,或者使用最新的 http://www.freebsd.org/security/index.html =================================================================================== 有错误难免,以后有关安全tip也会不断整理加上,谢谢! |