公司簡介   產品資訊   客戶服務   安全資源   顧問服務   合作伙伴   臺銀共同供應契約 


 

 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 號 9 F   Tel: 02-8221-5408 Fax: 02-8221-5476