Linux 系統深度安全強化

來源:互聯網
上載者:User
【簡 介】
Linux 的系統安全不容忽視.然而系統加固又不是一件很容易的事.本文作者簡單介紹了一下 Linux 系統深度安全強化.

★ Linux 系統深度安全強化

author : ayazero drdos@163.com
Personal web -- http://overflow.nease.net
Team's site -- http://ph4nt0m.net

註:以下內容可能不適用於某些場合,請對號入座

1. 安裝和升級
盡量選用最新的 Linux 發行版本,安裝前拔掉網線,斷開物理串連,
安裝時建議用 custom 自訂方式安裝軟體包,數量以少為好,
一般來說伺服器沒有必要安裝 X-windows,
在 lilo/grub 引導器中加入口令限制,防止能夠物理接觸的惡意使用者
因為 Linux 安裝光碟片的 rescue 模式可以跳過這個限制,所以還要給bios加上密碼或伺服器機箱上鎖
/var, /home, /usr, /root 等目錄用獨立的物理分區,防止垃圾資料和日誌填滿硬碟而導致 D.o.S 攻擊.

root 帳號給予強壯的口令.

安裝完畢立即用 up2date 或 apt 升級系統軟體,有時升級核心也是必要的,因為核心出現問題同樣會給攻擊者提供機會
Apt 是 Debian GNU Linux 下的一個強大的包管理工具,也可用於其他版本的 Linux.

2. 帳號
如果系統中的使用者比較多,可以編輯 /etc/login.defs,更改密碼原則

刪除系統中不必要帳戶和組,
[root@ayazero /]# userdel -r username

如果不開匿名 ftp 則可以把 ftp 帳號也刪了

最安全的方式是本地維護,可惜不太現實,但還是需要限制 root 的遠端存取,管理員可以用普通賬戶遠程登入,
然後 su 到 root,我們可以把使用 su 的使用者加到 wheel 組來提高安全性

在 /etc/pam.d/su 檔案的頭部加入下面兩行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

然後把可以執行 su 的使用者放入 wheel 組
[root@ayazero /]# usermod -G10 admin

編輯 /etc/securetty,注釋掉所有允許 root 遠程登入的控制台,然後禁止使用所有的控制台程式,
[root@ayazero /]# rm -f /etc/security/console.apps/servicename

登入採用加密的 ssh,如果管理員只從固定的終端登陸,還應限制合法 ssh 用戶端的範圍
防止嗅探及中間人攻擊

將命令曆史紀錄歸為零,儘可能的隱藏你做過的事情
[root@ayazero /]# unset HISTFILESIZE

3. 服務
最少服務原則,凡是不需要的服務一律注釋掉
在 /etc/inetd.conf 中不需要的服務前加 "#",較高版本中已經沒有 inetd 而換成了 Xinetd;
取消開機自動運行服務,把 /etc/rc.d/rc3.d 下不需要啟動並執行服務第一個字母大寫改稱小寫,
或者由 setup 命令啟動的 GUI 介面中的 service 更改

如果你希望簡單一點,可以使用 /etc/host.allow,/etc/host.deny 這兩個檔案,
但是本文計劃用 iptables 防火牆,所以不在此詳述.

4. 檔案系統許可權
找出系統中所有含 "s" 位的程式,把不必要得 "s" 位去掉,或者把根本不用的直接刪除
[root@ayazero /]# find / -type f ( -perm -04000 -o -perm -02000 ) -exec ls -lg {}
[root@ayazero /]# chmod a-s filename

防止使用者濫用及提升許可權的可能性

把重要檔案加上不可改變屬性
[root@ayazero /]# chattr +i /etc/passwd
[root@ayazero /]# chattr +i /etc/shadow
[root@ayazero /]# chattr +i /etc/gshadow
[root@ayazero /]# chattr +i /etc/group
[root@ayazero /]# chattr +i /etc/inetd.conf
[root@ayazero /]# chattr +i /etc/httpd.conf
...............................
具體視需要而定,我懷疑現在的入侵者都知道這個命令,
有些 exploit 溢出後往 inetd.conf 寫一條語句綁定 shell 在一個連接埠監聽,
此時這條命令就起了作用,淺薄的入侵者會以為溢出不成功.

找出系統中沒有屬主的檔案:
[root@ayazero /]# find / -nouser -o -nogroup

找出任何人都有寫入權限的檔案和目錄:
[root@ayazero /]# find / -type f ( -perm -2 -o -perm -20 ) -exec ls -lg {}
[root@ayazero /]# find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {}

防止入侵者向其中寫入木馬語句(諸如一個shell的拷貝)或繼承屬主許可權而非法訪問

找出並加固那些曆來被入侵者利用的檔案,比如 .rhosts

編輯 /etc/security/limits.conf,加入或改變如下行:
* hard core 0
* hard rss 5000
* hard nproc 20

5. Banner 偽裝
入侵者通常通過作業系統,服務及應用程式版本來攻擊,
漏洞列表和攻擊程式也是按此來分類,所以我們有必要作點手腳來加大入侵的難度

更改 /etc/issue,因為 reboot 後重新載入,所以編輯 /ect/rc.d/rc.local
# This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
把以上行前的 "#" 去掉

Apache 不回顯版本:
apache 的設定檔,找到 ServerTokens 和 ServerSignature 兩個 directive,修改預設屬性:
#ServerTokens Full
ServerTokens Prod #ServerSignature On
ServerSignature Off
修改 uname
拿出 uname.c 的源碼,找到如下行
print_element (PRINT_SYSNAME, name.sysname);//作業系統名如 linux
print_element (PRINT_NODENAME, name.nodename);//主機名稱
print_element (PRINT_RELEASE, name.release);//發行版本,如:2.4.20-18
print_element (PRINT_VERSION, name.version);//
print_element (PRINT_MACHINE, name.machine);//機器類型,如i686
print_element (PRINT_PROCESSOR, processor);//處理器類型

可以修改為
print_element (PRINT_SYSNAME,"HP-UX");
.......
編譯後替換 /bin/uname

其他服務及程式的修改可以查看其設定檔或者源碼
不要改太多,否則會給系統管理帶來大麻煩。

6. Iptales 防火牆規則
假設我們的伺服器 server1 運行 apache,sshd (sshd 可以不運行在標準連接埠,設定檔中能修改)
eth0 網卡接 Internet,eth1 串連 LAN,管理員在家中撥號登陸到 server2 (其私用網路 IP 為 192.168.0.12),再登陸 server1
[roor@ayazero root]# iptables -A INPUT -i eth1 -s 192.168.0.12 -p tcp --dport 22 -j ACCEPT
為防止 IP spoofing 的可能,還可以綁定 server2 的網卡地址:
sh-2.05b# iptables -A INPUT -i eth1 -s 192.168.0.12 --mac-source 01:68:4B:91:CC:B7 -p tcp --dport 22 -j ACCEPT
不過好像也很少有入侵者能夠做到這種地步,而且沒什麼利用的價值

[root@ayazero root]# iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
[root@ayazero root]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@ayazero root]# iptables -A INPUT -j DROP

對攻擊有所瞭解的人都知道“連接埠重新導向+反向管道”的美妙結合來穿越防火牆的例子吧
這種技巧已經運用太廣,而危害很大
為了對抗這種難以防禦的攻擊,我們必須以犧牲一定的易用性為代價
[root@ayazero root]# iptables -A OUTPUT -o eth0 -p tcp --syn -j DROP
以上規則將阻止由內而外的 TCP 主動串連
另外,用 tftp 或其他用戶端反向攫取檔案的攻擊行為也很普遍,
由於 tftp 以及其他一些工具依賴 UDP,所以現在要把它徹底抹煞掉
[root@ayazero root]# iptables -A OUTPUT -o eth0 -p udp -j DROP
PS: 在更新系統和調試網路時需要把這兩條規則臨時去掉
因為入侵的本質就是通過文本或圖形介面在標準或非標準連接埠得到目標作業系統的 shell,
所以,這不僅能阻止反向管道本身,還能免疫很多入侵技巧
不過對一般的系統管理員而言,這太苛刻了!

iptables 的一些攻擊對策
Syn-flood protection:
[root@ayazero foo]# iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT

Furtive port scanner:
[root@ayazero foo]# iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

Ping of death:
[root@ayazero foo]# iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

此外,iptables 還能配置出讓一些掃描行為比如 nmap 失效的規則,應當注意:
防火牆不是萬能的,當一個攻擊者足夠瘋狂時,不要指望你的防火牆能抵擋得住 DDoS 的洪水。
關於 iptables 得更多細節,請參閱 Rusty Russell 的 Packet Filtering HOWTO

7. 完整性校正
tripwire 是一個比較有名的工具,它能幫你判斷出一些重要系統檔案是否被修改過
現在的 Linux 發行版中一般都帶有他的開源版本,在預設的校正對象設定檔中加入一些敏感檔案就可以使用

RPM MD5 校正
[root@ayazero rpm]# rpm -V
用 "man rpm" 查看命令協助,"-V" 參數用於 MD5 校正,
注意要把 rpm 校正產生的位元據檔案作一個硬備份,以防止其本身被修改

8. 自行掃描
普通的安全強化基本上是做完了,現在讓我們來對自己做的系統做一個風險評估,
推薦使用 nessus latest version [homepage:http://www.nessus.org]
(既然從頭到尾用的都是開源的東西,這裡也繼續節約成本,呵呵)
也許你覺得自己的系統沒有問題了,但有時 nessus 還是能報告出一些問題,
比如一個第三方的 webmail 有某些安全缺陷,
如果沒有問題最好,有問題我們再回去修補

9. 進階技巧
以上的措施已經足以讓大多數入侵者望而卻步,接下來的部分給那些對安全極度敏感的偏執狂
緩衝區溢位對策中有: stackgurad,stackshield,formatguard,heapguard,pointguard 等編譯技術,
但他們需要重新編譯源碼,不僅麻煩而且會使系統效能有所下降.
所以這裡打算用防止緩衝區溢位的核心補丁.

比較熟知的是 PaX 核心補丁,它主要通過資料區 [heap/bss/stack] 不可執行代碼來防禦直接覆蓋返回地址後跳轉到資料區執行 shellcode 的一些exploit
PaX的網站好像訪問不了,但用google可以找到很多對應較新核心的PaX下載
http://home.hetnet.nl/~ottolander/pax/pax.html

謗跺囀瞄硃間:
Openwall Project
http://www.openwall.com/linux/

grsecurity
http://www.grsecurity.net

眕奻硃間甜祥夔滅郘垀衄腔祛堤馴擊,但卻可以擋住市面上相當數量的 exploit,
現在那些關於如何繞過補丁的進階 exploit 技巧已經很不神秘,但是書寫那樣的攻擊程式通常要滿足一定的條件,
即使那樣的程式被寫出來,函數,檔案指標被成功覆蓋,可能在這個系統上還是無法把那“溢出成果”傳遞給攻擊者--仍然沒有辦法得到 shell 或是建立一個串連

lids
Linux 上的入侵檢測和防護系統,核心補丁,通過一個比 root 更大的 ring0 許可權來提供增強存取控制,
甚至連 root 都不能改變,已有現成資料,不在此討論。
網站:http://www.lids.org

lids 和緩衝區溢位補丁可能不相容,歡迎知道真相的朋友告訴我

10. 日誌策略
主要就是建立對入侵相關的重要日誌的硬拷貝,不至於應急響應的時候連最後的黑匣子都沒有
可以把他們重新導向到印表機,管理員郵件,獨立的Log Service器及其熱備份

11. Snort 入侵偵測系統
對入侵響應和安全日誌要求較高的系統有此必要;
對於一般的系統而言,如果管理員根本不會去看一大堆日誌,
那麼它白白佔用系統資源就如同雞肋一樣

12. 最後的建議
關心 bugtraq 上的漏洞列表
訂閱廠商的資訊安全諮詢
勤打補丁
站在攻擊者的角度去思考如何防禦

小結
對攻擊的思考:
假設有一個技術高超的入侵者,擁有自行挖掘系統底層漏洞的能力,
他發現了 apache 的一個漏洞,並書寫了 remote exploit,
這個漏洞暫時還沒有出現在 bugtraq 上,處於“未知”狀態,
如果入侵者試圖攻擊我們的系統,
他必須能挖掘一個 apache 並且是 root 級的遠程溢出,
在 shellcode 中植入代碼殺死 httpd 進程,並且把 sh 綁定在 80 連接埠
在 80 連接埠複用
讓 shellcode 執行 iptables -F OUTPUT/INPUT,前提是他猜到有這麼回事
以上均需要溢出後是 root 許可權,並且是能繞過 PaX 的進階 exploit,另外 apach e殺掉後會自動重啟
如果想攻擊 sshd,因為 iptables 將丟棄所有來自外網訪問 sshd 的包,所以即使有遠程溢出 (當然別忘了 PaX),此路不通
其他的方法,如果指令碼攻擊可以獲得允許遠程登入 ssh 使用者的明文口令,或是利用指令碼缺陷直接添加系統帳號,
這不僅需要系統 root 許可權,而且 /etc/passwd 已經被 chattr 過,
滿足以上條件,並且攻破 server2,就有希望得到 shell
但提升許可權的機會不大!普通指令碼攻擊在此無效,當然如果該系統並不運行 CGI 的話,此路更是不通
誠然入侵者很可能在 http 上破壞你的指令碼,不過第三方的 web 安全強化暫不在本文討論之列
以上條件對大多數入侵者足夠苛刻,可以說幾乎不可能實現.
但是我們為此也犧牲了不少,並且這些措施依賴一定的環境而實現
安全性和易用性,需要讀者站在自己的角度尋找他們的平衡點。

全文出自 : 矽谷動力

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.