公司简介   产品资讯   客户服务   安全资源   顾问服务   合作伙伴 


 

SUPPORT
  SUPPORT -> 技术文章-> 一些 FreeBSD 相关的安全问题

系统安全实务

一些 FreeBSD 相关的安全问题

FreeBSD 的日安全

如果你安装了sshd,请编辑你的 /etc/syslog.conf,内容如下∶

security.*;auth.info /var/log/security

原因很简单,这样 syslogd 就把连接到 sshd 的日信息记录下来。

当然如果你愿意,也可以建立其他的日,不过如果你建立新的日,你必须检查更新 /etc/newsyslog.conf 是否建立相关项目,如∶

/var/log/auth 600 10 100 * Z

/var/log/auth 表示日档名
600 是日档的属性
10 表示包括要归档的文件数
100 表示文件大小,以 K 为单位
* 表示间隔时间或者指定时间

其中 * 表示日归档是以 size 来判断的。最後一个 Z 表示指定归档要处理的格式,Z 表示使用 gzip(1) 来压缩日以节约空间,详细资料可以使用 man newsyslog 来获得。

这里建立你修改 newsyslog.conf 中的一些读取的属性,如 maillog 和 messages log,一般把它们的属性设置为 600。

/var/log/messages 600 5 100 * Z /var/log/maillog 600 7 * @T00 Z

当然如果你要把讯息记录到其他主机上更好,你可以修改 /etc/syslog.conf 中的项目,并修改 loghost 为要记录的机器名字∶

#*.* @loghost

最後你防止任意用户读取这些文件,你使用下面命令修改文件属性∶

# chmod 600 /etc/syslog.conf
# chmod 600 /etc/newsyslog.conf

关於 SSH 配置

telnetd 程序存在严重的缓冲溢出可以导致远程 ROOT SHELL 的获得,强烈建议你如果需要远端控制的话,就使用 SSH 工具,并且保证是最新的版本。
telnetd 程序存在严重的缓冲溢出可以导致远程 ROOT SHELL 的获得,强烈建议你如果需要远端控制的话,就使用 SSH 工具,并且保证是最新的版本。

sshd 设定档是 /etc/ssh/sshd_config,如果你没有使用 SSH protocol 1 的机会,建议你关闭 protocol 1 的使用,因为 ssh protocol 1 不如 protocol 2 安全,还可以有效的阻止攻击者利用修改封包的 banner 来劫持(hijacking)启动沟通程序并把 sshd 降级到 protocol 1,理论上可以迫使使用 ssh 1 协议来通信。

SSH 在执行的时候消耗比较多的暂存记忆体,这也是 cisco 产品近来发现有关 SSH 存在拒绝服务攻击的原因。每一个连接使用一大块暂存记忆体,FreeBSD 预设使用 "MaxStartups" 来管理,如∶

MaxStartups 5:50:10

除非有很多人管理系统或者提供 SHELL 服务,一般情况下这个值是足够了,MaxStartups 不是意味著总的连接数,只是指还没有认证的连接数,这意味著在同一时间下,只有 5 人可以同时呼叫登入程序。
预设情况下,FreeBSD 的 OpenSSH 设定关闭了远端 ROOT 登入和空密码登入,这里还建议关闭 X11Forwarding,你可以把 X11Forwarding 这行改为∶

X11Forwarding no

如果你的机器作为伺服器,就不需要安装 X 服务,因为使用了 X11Forwarding on,就可能被受控制了的远端主机发送程序来攻击你的 X11 沟通程序,而可以记录你的键盘输入记录,显示一些杂乱信息和撷取你的显示内容。

强烈建议不使用静态密码,而使用 DSA 或者RSA KEY,你修改如下内容就可以关闭使用密码认证∶

PasswordAuthentication no

因为使用密码验证毕竟不是一种安全的方法,存在著社会工程,猜测,窃取的可能性。

对於 sshd,你可以通过下面的方法来限制群组用户或者单独用户来访问 SHELL∶

AllowGroups shellusers
或者
AllowGroups wheel
或者
AllowUsers xundi

当然你如果要改变原来的用户使用 SHELL 属性,如要把用户改变成 /sbin/nologin 而不让它使用 shell,你可以使用下面的命令直接改变:

chsh -s /sbin/nologin user

最後你最好使用 tcpwrappers 来限制一些使用,你修改 /etc/hosts.allow 文件,mark 掉 "ALL : ALL : allow", 去掉其他无关控制使用,增加如下内容∶

sshd : localhost : allow
sshd : friendlycomputer : allow
sshd : all : deny

FreeBSD 预设情况下不把 ssh 登入失败的内容记录下来,你需要对/etc/security 进行修改,下面的 patch 只检测密码无效的登入并记录下来,你可以增加对 dsa/rsa key 登入失败或者不合法用户登入的检测∶

--- /etc/security Mon Jun 11 15:45:02 2001
+++ /etc/security Mon Jun 11 15:48:29 2001
@@ -44,6 +44,7 @@
sort -t. -r -n +1 -2 |
xargs zcat -f
[ -f $LOG/messages ] && cat $LOG/messages
+ [ -f $LOG/security ] && cat $LOG/security
}

sflag=FALSE ignore=
@@ -188,6 +189,12 @@
separator
echo "${host} login failures:"
n=$(catmsgs | grep -i "^$yesterday.*login failure" | tee/dev/stderr | wc -l)
+[ $n -gt 0 -a $rc -lt 1 ] && rc=1
+
+# Show "${host} SSH login failures:"
+separator
+echo "${host} login failures:"
+n=$(catmsgs | grep -i "^$yesterday.*failed password" | tee /dev/stderr | wc -l)
[ $n -gt 0 -a $rc -lt 1 ] && rc=1

# Show tcp_wrapper warning messages

网路部分

预设情况下 FreeBSD 和许多作业系统在关闭的 port 接受到 TCP SYN 段的时候,会发送 RST 封包,也就是告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个 port,一般情况下我们都不愿意让攻击者太容易的扫描 port,也不想浪费过多的 CPU 时间在 DoS 攻击上。因此我们可以使用 FreeBSD 系统中叫 blackhole 的功能,blackhole sysctl(8) MIB 用来控制当对一些没有 socket 监听的 TCP 或者 UDP port 接收到连接请求时所操作的行为,你可以使用 man blackhole 获得详细的信息,当设置这个选项後,对那些连接没有 socket 监听的 TCP 或者 UDP 通讯埠的连接,系统将马上丢弃这个包而不发 RST 包。连接端将看到 "Connection reset by peer". 下面的指令将启用这个功能∶

sysctl -w net.inet.tcp.blackhole=2
sysctl -w net.inet.udp.blackhole=1

你可以通过下面的指令马上启动这个功能∶
# /bin/sh /etc/rc.sysctl

当然这个功能不能作为 ipfw(8) 工具的替代品来防卫系统,要建立更高安全的系统,你当然需要使用 Ipfw(8) 或者 Ipfilter 工具达成。

修改/etc/rc.conf,把不需要的服务关闭,

1. portmap 服务,如果你没有 NFS, NIS 等需要。再 /etc/rc.conf 中加入∶

portmap_enable="NO"

你可能经常发现有人讨厌的扫描你整个网路,例如通讯埠 111 被扫瞄了,这是有人想寻找是否有 rpc 服务漏洞的扫描,你可以在你的路由器中丢弃 dstport 为 111 的封包。
2. 如果使用 mail 伺服器,建议把 sendmail 置於 queueing only 模式,如果确实需要 SMTP 服务,建议安装 postfix。

sendmail_flags="-q1m"

3. 建议丢弃 icmp 重新导向,可以防止 Dos 攻击或劫持连接(hijack sessions),也可以记录 icmp 重新导向,不过要区分一些讯息,因为有的时候 Cisco 路由器也会产生重新导向而不是攻击信息,要记录这些讯息,使用下列项目∶

icmp_log_redirect="YES"

当然你要完全去掉不确定讯息记录,可以在 CISCO 路由器上关闭重新导向∶

"no ip send-redirects"

4. 你可以设置系统丢弃 SYNFIN 封包,也可以更好的通过 IPFW 来过滤这种封包,也可以在 /etc/rc.conf 中增加以下的项目来启动这个选项∶

tcp_drop_synfin="YES"

当然你需要在 kernel 配置中增加如下配置∶

options TCP_DROP_SYNFIN

5. 关闭对广播类型的响应

#sysctl -w net.inet.icmp.bmcastecho=0

过滤 icmp 回应後,服务器无法 ping 通,这有助提高部份安全性能。

6. 对 udp 封包的校验和计算

#sysctl -w net.inet.udp.checksum=1

可以防止不正确的 udp 封包的攻击。

7. 设置 rc.sysctl, rc.conf 和 sysctl.conf 权限∶

# chmod 600 /etc/rc.sysctl
# chmod 600 /etc/rc.conf
# chmod 600 /etc/sysctl.conf

 

Certification & Awards

2006-02
2005 MIS Best Choice

2006-02
DragonSoft Vulnerability Database - CVE-Compatibility Certificate

2005-12
Small and Medium Enterprise Business Start-Up Award

2005-12
Small and Medium Enterprise Innovation Research Award

2005-11
Golden Torch Award

2005-04
National Quality Guarantee Golden Award

2005-03
Golden Peak Award

2004-11
DragonSoft Secure Scanner - CVE-Compatibility Certificate


  Copyright© DragonSoft Security Associates, Inc. All rights reserved.
  台湾总部∶新竹市光复路一段 607 巷 30 号 5F   Tel: 03-563-0989 Fax: 03-579-7758
  台北业务处∶中和市中山路二段 351 号 9F   Tel: 02-8221-5408 Fax: 02-8221-5476