4.kernel security

20: Linux Kernel /etc/sysctl.conf Hardening

/etc/sysctl.conf file is used to configure kernel parameters at runtime. Linux reads and applies settings from /etc/sysctl.conf at boot time. Sample /etc/sysctl.conf:

# Turn on execshield kernel.exec-shield=1 kernel.randomize_va_space=1 # Enable IP spoofing protection net.ipv4.conf.all.rp_filter=1 # Disable IP source routing net.ipv4.conf.all.accept_source_route=0 # Ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_messages=1 # Make sure spoofed packets get logged net.ipv4.conf.all.log_martians = 1

9. 核心安全

移除不必要的功能

設定核心的基本規則是移除所有您不需要的東西。這會建立一個比較小的核心,同時也可以 避免那些可能存在驅動程式或其他功能中的漏洞。

同時考慮關閉模組載入支援 (loadable module support),雖然說還是可以用這個以外的方 法加入模組 (根工具 - root kits),不過它的確讓一般的攻擊者難以經由核心模組安裝根 工具 (root kits)。

/proc (核心旗標)

許多核心參數可以從 /proc 或 sysctl 被更改。

想在執行時期動態變更核心參數以及變數,您的 .config 中必須有 CONFIG_SYSCTL 選項。在 2.4 系列的核心中這是預設開啟的。

原始碼 9.1: 丟棄 ping 封包

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

這將讓您忽略 icmp type 0 (也就是 ping) 的封包。因為 icmp 會包括讓您意想不到的資 訊。系統管理員使用 ping 作為診斷系統的工具,而且他們可能會抱怨不能 ping。沒有理 由讓個陌生人來 ping 內部的機器,不過有時候讓內部的人可以 ping 也是蠻方便的,這可 以用從防火牆端將 icmp type 0 的封包取消來解決。

原始碼 9.2: 忽略廣播探測

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

這會停止回應廣播封包以及防止增幅攻擊。增幅攻擊的運作方法是傳送一個 ICMP type 0 (ping) 訊息至網路的廣播位置。通常攻擊者會偽裝成某個來源位置,所有網路上的電腦會回應這個 ping 訊息,然後被偽裝的來源就會收到一大堆 ping 訊息。

原始碼 9.3: 忽略來源路由 (source route) 封包

# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route

不要接受來源路由 (source route) 的封包。攻擊者可以使用源頭路由來產生假裝本來就在 您內部網路產生的封包,不過將會從他來的路徑路由回去,所以攻擊者可以危害您的網路。 源頭路由很少在正當的狀況下被使用,所以關閉它。

原始碼 9.4: 取消允許重新導向

# /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects

取消允許 ICMP 重新導向。ICMP 重導向可以被用來更改您的路由表,可能轉到一條死胡同。

原始碼 9.5: 防備爛錯誤訊息

# /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

啟動針對無效錯誤訊息的防禦。

原始碼 9.6: 啟動反轉路徑過濾

# for i in /proc/sys/net/ipv4/conf/*; do /bin/echo "1" > $i/rp_filter done

注意: 如果您啟動了 IP 轉送,這個也會自動被開啟。

啟動反轉路徑過濾。這可以幫助確認封包來自合法的源頭,經由自動捨棄那些網路位置不符 合應該進入的網路介面的封包。這有安全上的優點因為它防止 IP 偽造 (IP spoofing)。

警告: 但是它也可能在您使用不對稱路由 (封包從您的機器到另一個機器的路徑與從它來到您的路徑不同) 的時候造成問題,或您在建設一台有多個 IP 位置來自不同介面的非路由機器。

原始碼 9.7: 紀錄騙人的封包、源頭路由封包以及重新導向封包

# /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

紀錄騙人的封包、源頭路由封包以及重新導向封包。

原始碼 9.8: 關閉 IP 轉送

# /bin/echo "0" > /proc/sys/net/ipv4/ip_forward

確認 IP 轉送是關閉的。我們只在 multi-homed 機器上需要這個東西。

全部這些設定都會在重新開機後被重設。所以我們建議您在 /etc/sysctl.conf 這個開機自動被 /etc/init.d/bootmisc 啟動稿啟用的檔案中加入它們。

/etc/sysctl.conf 的語法很直接,將之前提到的目錄中的 /proc/sys 拿掉,然後將 / 換成 .:

原始碼 9.9: 相對 sysctl.conf 的翻譯

(使用 echo 的手動設定:) /bin/echo "0" > /proc/sys/net/ipv4/ip_forward (自動的 sysctl.conf:) net.ipv4.ip_forward = 0