本書講述了linux安全的方方面面,并且以一問一答的方式介紹,思路清晰。文中提供了很
多有益的安全提示,是Linux系統維護人員的必備參考書。通過本書,你能了解到linux安
全的整體概念,從系統安全到應用安全,從單機安全到網絡安全。但安全問題是一個不斷變
化不斷更新的過程而不是一個解決方案,是以本書隻是提到當時為人所發現的安全問題的介
紹,新出現的安全問題可參考該書網站的更新和網上的安全警告。
第一章 linux安全問題概述
粘着位(Sticky bit)
如果使用者對目錄有寫權限,則可以删除其中的檔案和子目錄,即使該使用者不是這些檔案的所
有者,而且也沒有讀或寫許可。粘着位出現執行許可的位置上,用t表示,設定了該位後,
其它使用者就不以删除不屬于他的檔案和目錄。但是該目錄下的目錄不繼承該權限,要再設定
才可使用。
# chmod 1770 xxx
檔案屬性
chattr指令修改
lsattr指令列出檔案屬性
檔案屬性定義
A 不要更新atime檔案,當在筆記本電腦或NFS上限制磁盤I/0流量時,很有用,除2.0
系列外,這一屬性不被其它核心支援。
a 檔案僅能以追加方式打開,隻有root才能設定這個屬性。
c 檔案儲存在磁盤時,核心将自動壓縮該檔案。
d 檔案标記,使其不能被轉儲。
i 檔案不能被修改,删除或重命名,不能建立任何指向它的連結,并不能寫入任何資料。
s 删除檔案時,相應的磁盤存儲塊清零。
S 修改檔案時,對其寫入進行同步。
u 删除檔案時,儲存其内容。
Ulimit指令
設定限制 可以把指令加到profile檔案裡,也可以在/etc/security/limits.conf檔案中定義
限制。
指令參數
-a 顯示所有限制
-c core檔案大小的上限
-d 程序資料段大小的上限
-f shell所能建立的檔案大小的上限
-m 駐留記憶體大小的上限
-s 堆棧大小的上限
-t 每秒可占用的CPU時間上限
-p 管道大小
-n 打開檔案數的上限
-u 程序數的上限
-v 虛拟記憶體的上限
除可用Ulimit指令設定外,也可以在/etc/security/limits.conf檔案中定義限制。
domino type item value
domino是以符号@開頭的使用者名或組名,*表示所有使用者,type設定為hard or soft。item指
定想限制的資源。如cpu,core nproc or maxlogins
。value是相應的限制值。
信号
# kill -TERM XXXX 終止信号
# kill -HUP HTTPD 重讀配置信号
特權端口
root使用者是可綁定端口小于1024的惟一使用者。可以信任來自于遠端機器端口小于1024的連
接。
第二章 預防措施與從入侵中恢複
系統安全
簡單的FIND指令
# find / \(-perm -02000 -o -perm -4000 \) -ls 可以找出系統中所有的setuserid and setgroupid
程式。
在最嚴格的情況下,可以去掉除/bin/su外所有已安裝程式的setXid位。
系統安全掃描工具 cops tiger Nabou
掃描檢測器
黑客入侵系統前所做的第一件事就是從網絡上掃描系統,掃描檢測器能及時獲知,是一個良
好的入侵檢測系統(IDS)
Klaxon Courtney Scanlogd PortSentry
加強系統
Bastille項目建立了一組子產品來加強新近釋出的REDHAT。在安裝完系統後可運作該更新檔,
在什麼時候都可運作,不必要一定是剛安裝完系統。
加強的方法是:1、下載下傳源代碼到/root目錄并解包。以root身份動行InteractiveBastille.pl腳
本。在回答完問題後,程式将做出相應改動。配置完成後,該工具把其儲存在BackEnd.pl
中,如果希望加強同樣配置的伺服器,将它複制到新伺服器并運作AutomatedBastille.pl即可。
Openwall Linux更新檔
它是一個核心更新檔。要這些更新檔起作用,使用者必須重新編譯和安裝新的打上更新檔的核心。在
某些情況下,這些核心更新檔和标準linux不完全相容,是以在決定使用前必須确信了解其含
義。
LIDS
它包括核心級的端口掃描檢測程式和安全警告程式。是核心更新檔(現在适用于2.2.X和2.4.X,
但以後将不再支援2.2)和系統管理工具。其特性包括:
1、進階檔案保護,甚至root也不能發現和處置受LIDS保護的檔案。
2、程序保護,核心拒絕向受保護的程序發送信号(例如SIGKILL),程序也可以被完全隐
藏起來,在/proc下不會存在任何痕迹。
3、更好的通路控制,更有效地使用與特權相關的權能,包括禁止root更改這些權能。
4、内置式端口掃描檢測,内置于核心的掃描程式能夠檢測到Nmap,SATAN等工具的絕大
部分掃描。
要安裝LIDS,必須下載下傳最新的linux核心正式版和LIDS源代碼。使用LIDS給核心打上更新檔,
然後重新編譯核心。
日志檔案分析
syslogd消信可标記為特定的功能和級别,在/etc/syslog.conf檔案中可以根據這兩個選項來設
置消信的去向。
syslogd功能 描述
auth 安全性/驗證消息(負面)
authpriv 安全性/驗證消息
cron cron and at
daemon 其它系統守護程序(sshd,xinetd,pppd等)
kern 核心消息
lpr 行列印系統
mail 郵件子系統(sendmail,postfix,qmail等)
news Usenet新聞消息
syslog 内部syslog消息
user 一般使用者級消息
uucp UUCP子系統
local0-local7 自定義的級别
日志級别 描述
emerg 系統已不可用
alert 必須馬上采取行動
crit 危急
err 錯誤
warning 警告
notice 普通但重要的情形
info 通知消息
debug 調試消息
syslog.conf每一行的配置格式為
facility.loglevel logtarget,所有字段用tab隔開
例子:
daemon.notice /var/log/daemon.log 把程式發送過來的功能為daemon,優先級為notice
或更進階别的所有日志消息記錄到/var/log/daemon.log檔案中,可以使用*号表示比對所有功
能或日志級别。
目标 描述
/path/to/filename 将消息附加到所指定檔案的檔案尾,這是最常用的情形。
@loghost 寫到loghost機器上的syslog伺服器。可友善把日志發來多台機器上,
|/path/to/named_pipe 寫到指定的命名管道(便于用外部程式過濾消息)。
user1,user2 寫到所列使用者。
* 寫到所有登入使用者。
/dev/console 寫到已命名的終端。
日志檔案許可
應設定日志隻為root所有和寫入,同時能夠被log組(或你所希望的組)讀取,而其他使用者
沒有任何權限。一個使用者在輸入使用者名的地方使用了密碼,在登入失敗時,将會把使用者名(在
此例中為密碼,因為使用者失誤)記錄到日志中。然後建立一個屬于log組的虛構使用者,并讓
所有日志檢查程式以該使用者而不是root運作。日志檢查程式不應當以root使用者運作。
可以通過日志分析軟體開監控日志,如logcheck,swatch和logsurfer。但最好的工具還是管理
員自已寫的腳本。
檔案系統完整性檢查
修改檔案系統是黑客在侵入系統之後經常要做的一件事情,下面列出了經常被修改的一些文
件:
類型 例子
伺服器配置檔案 /etc/inetd.conf,/etc/ftpaccess
網絡配置檔案 /etc/host.conf,/etc/sysconfig/network
系統配置檔案 /etc/ld.so.conf,/etc/nsswitch.conf
crontab /etc/cron.daily/*,/var/spool/cron/root
setuserid程式 /bin/su,/bin/ping,usr/bin/chfn,/sbin/dump
setgroupid程式 /sbin/netreport,/usr/bin/lpr,/usr/bin/write,/usr/bin/man
如果知道機器何時被入侵,就可以判斷修改時,并了解哪些東西被修改了,例如想知道在9
月17日發生的侵入事件中被修改的所有檔案,可以執行如下指令:
# touch 09170000 /tmp/comparison
# find / \( -newer /tmp/comparison -o -cnewer /tmp/comparison \) -ls
但記住,檢查檔案時間所給出的統計結果是不可靠的,touch指令可以更改任何檔案的修改
時間(mtime)和通路時間(atime).
校驗和
校驗和是一個使用數學算法生成的字元串,可以用來判斷兩個檔案是否相同,即使在一個文
件中隻改動了一位,它們的校驗和也會不同。通常
用md5sum指令。
# md5sum xxx
檔案許可
通過檢查檔案許可,使用者可以知道修改發生的時間,并判斷其行為是合法,意外還是惡意的,
同時确定其對系統的影響。
生成校驗和與許可資料庫
在黑客入侵系統前生成檔案的校驗和,下面是一個快捷的perl腳本,能夠使使用者生成自已
的檔案許可和校驗和資料庫(文本)。
#!/usr/bin/perl
use MD5;
require 'find.pl';
$md5 = new MD5;
@dirs = @ARGV;
for $dir ( @dirs ) { find($dir);}
sub wanted { push @files,$name;}
for $name ( sort @files ) {
($uid,$gid) = (stat $name)[4,5];
$stat = sprintf "%0o",(stat _)[2];
unless ( -f $name ) {
printf "$stat\t$uid $gid\t\t\t\t\t\t$name\n";
next;
}
$md5->reset();
open FILE,$name or print(STDERR "Can't open file $name\n"),next;
$md5->addfile(FILE);
close FILE;
$checksum = $md5->hexdigest();
printf "$stat\t$uid $gid $checksum\t$name\n";
}
生成的資料庫盡量不要放在本機上,要放在其它機器上或一次寫多次讀(CDR)的機器上。
現有的檔案完整性工具 Tripwire AIDE Nabou
如何知道系統何時被黑
發現系統被入侵的方法:
1、首頁變化
2、磁盤空間的急劇減少 用df工具檢視磁盤使用情況
3、頻繁地使用網絡 使用netstat -na 或lsof輸出,檢查存在什麼連接配接
4、來自其它管理者的聯系 當你的機器被用于攻擊其它機器時
5、混雜模式的網絡接口 如果黑客想嗅探系統中可用的網絡服務,會把網絡接口設定
為混雜模式(捕獲所有的包)。請檢查 ifconfig -a輸出的promisc以确定接
口模式。
6、抹去/截斷的日志檔案 檢查syslog
7、被破壞的utmp/wtmp
8、系統中存在的新使用者 黑客通常使用與現存的使用者名相近的名稱以減少被發現的
機會,例如與lp近似的lpr或uucp1等。或者
黑客方言中的名字,如t00r and own3d.
9、正在運作的陌生程式
10、不能解釋的CPU使用情況
11、本地使用者的遠端帳号被破解
12、“看起來古怪”的事情
被入侵後應采取的措施
制止損害
1、 關閉所有網絡接口,使黑客對系統喪失了互動行為的能力,但那些正在運作的程序仍然
2、 會繼續運作。
3、 将系統切換到單使用者模式,關閉所有正式的root程序和所有使用者程序,任何剩下的程序
4、 可能就來自于黑客。
3、使用未被損害的linux啟動盤重新開機系統。以隻讀模式加載系統,檢查系統,以檢視黑客
所動的手腳。
4、進行嚴重損害的控制。
破壞估計
以隻讀模式挂上所有分區,并記錄所發現的任何事情。
1、找到可疑的檔案和目錄 密碼檔案,黑客工具和任何你沒有放置在系統中的目錄。這
些目錄在你重新開機前可能是不可見的。
2、定位新的setuserid程式 任何新的setXid程式(尤其是屬于root的)都極有可疑。
3、檢查時間戳 檢查黑客入侵之後發生變化的檔案。
4、閱讀日志檔案 檢查所有日志檔案。
5、驗證校驗和 比較黑客入侵前後的校驗和資料庫。
6、驗證所安裝的軟體包 确認正确的版本,黑客可以把軟體降級,以讓系統使用不安
全的版本。
7、手工驗證配置檔案 快速浏覽,以确定變化,如web以root使用者運作,或在
/etc/inetd.conf中出現了額外的伺服器。
8、備份檔案
9、特殊工具 有很多工具可以幫助檢查系統,最新的是元件是coroners toolkit。
10、通知權威機構。
線上恢複
在确定了黑客行為後,有兩個選擇,1、堵上漏洞并對系統被篡改部份啟用備份;2、重新安
裝系統。最安全的方法是完全重新安裝系統。
僅僅堵上發現的漏洞并繼續運作通常要快得多,但是,你可能并不能确定黑客在系統中所做
的所有事情。黑客可留下在幾個月後才發作的時間炸彈,也可能修改了系統二進制代碼,使
其運作不穩定。是以,我們建議的把黑客從系統中清除出去的最好方法如下:
1、對重要檔案進行備份。
2、完全格式化所有驅動器,(這也是對系統進行任何改變的最佳時間,例如添加硬碟或改變
分區大小,要充分利用停工期的有利條件)
3、從頭安裝linux版本,并且隻包含那此必需的東西。
4、對已安裝的軟體包進行完全更新。
5、生成校驗和并将之儲存在安全的地方。
6、對配置檔案進行必要的手工修改。不要僅僅從備份中複制這些檔案,它們可能已經被改
變。
7、從備份中複制必要的檔案。
8、重新檢查從備份中安裝的檔案,确認其沒有被破壞的迹像。
9、使用另一種方法計算檔案系統的校驗和。
10、第一次啟用網絡。
對于實際或覺察到的攻擊,常用的對策是取消發動攻擊的機器與本機通信的能力。具體做法
有如下幾種:
1、使用tcp封裝器,拒絕來自黑客ip的連接配接。
2、使用iptables規則,退回/拒絕來自該ip位址的包。
3、建立拒絕路由表以使本機不能和相應的ip位址通信,此時,仍然可以收到來自源位址的
包,但不能響應,進而破壞互相間的通信。
4、在防火牆上建立類似的拒絕通路清單。
第三章 對機器和網絡踩點
線上搜尋
新聞討論區/郵件清單搜尋
internet上有很多新聞討論區/郵件清單或論壇,是向知識淵博的人請教問題的好地方,但也可能
在完全無意識下洩露了系統資訊。比如公司的網絡拓撲結構,安全配置情況,電話号碼,管
理員名字,個人資訊等。
對策:
對所發貼子要再三審讀,删除任何有可能被黑客利用的資訊。或使用與系統不相關的帳号發
送郵件,比如申請的免費郵箱。
whois資料庫
ping掃射
ping掃射是指ping指定網絡中的所有ip,如果機器正在監聽ip位址,就會回應ping。進而
就知道它處于活動狀态。有黑客通過這種方法列出所有正在運作的機器,然後決定攻擊目标。
有兩種不同的ping主機方法:ICMP ping and echo ping。可以用一些工具加速ping。其中兩
個最有意義:Fping and Nmap
ICMP ping方法:源機器向目的機器發送icmp echo request.如果目标機器正在運作,則會響
應icmp echo reply。
# ping -c 3 target
echo ping方法:以udp or tcp包連接配接到目标機器的回顯端口(端口7),如果機器在運作狀态,
該端口直接回顯發送過來的資訊。
# telnet target.example.com echo
Fping是一個直接了當的ping工具,可以在指令行列出需要ping的機器,也可以用檔案方
式
# Fping -a < machinelist
如果要掃描整個網絡(192.168.10.X),必須提供IP清單,在指令行用perl語句可以容量實
現。
# perl -e 'for (1..254) {print "192.168.10.$_\n"}' |fping -a -q 2>/dev/null
Nmap是一種多用途的掃描工具,内置了ping掃描功能。
# nmap -sP 192.168.10.0/24
ping掃射對策
通過配置機器(iptables等)來拒絕進入的echo request包和出去的echo reply包。進而避免
響應icmp echo request。關閉本機回顯服務。在/etc/inetd.conf中注釋掉以下兩行
echo stream tcp nowait root internal
echo dgram udp wait root internal
再重新開機inetd。
dns問題
在linux上,最好的dns伺服器是bind,它有幾個版本,如果你是先鋒派,bind9.x是最佳選擇,
4.x是最穩定版本,8.x則是一個不錯的過濾,大部分站點都是用這個版本。請保持bind的
版本是最新,最為它的安全漏洞較多,而且一旦發現漏洞,就會很被黑客利用。
盡量不要在配置檔案中包含hinfo and txt資訊。
區域傳送
一般情況下,為了保證dns總是可以,每個域中,都有一個主dns機器,而其它都是次級dns,
每當dns區域發生變化時,次級dns機器就從主機器複制全部内容。系統成為次級dns的方
法是在named.conf中添加如下内容:
zone "expample.com" {
type slave;
file "slave/expample.com";
masters {xxx.xxx.xxx.xxx};
};
但是黑客也可以攫取區域檔案(如果沒有采取措施),下例給出使用host指令列出整個域中
所有NS,A和PTR記錄的方法。
# host -t ns example.com
# host -l example.com
配置主名字伺服器時,使之不允許除次級伺服器外機器的區域傳送。在全局預設選項中設定
如下:
option {
....
allow-transfer {xxx.xxx.xxx.xxx};
...
警告:必須確定在主和從伺服器上都禁止區域傳送,因為從伺服器也能接受區域傳送請求。
任何未經授權的區域傳送都會被syslog記錄下來。
反解析是指從ip到域名的過程。可以用host指令實作。如果大量使用真實的主機名,會給
黑客知道機器的功能。是以最好在PTR記錄中使用一般的反解析名如:
xxx-xxx-xxx-xxx.example.com.
端口掃描
黑客會運作一個或多個端口掃描工具來了解目标系統提供的服務。工具主要有
netcat,strobe,nmap(best)。玩轉nmap可以學到很多東西。包括自已的系統,也包括網絡方面。
網絡漏洞掃描程式
iss,satan,Nessus
加密檔案系統
CFS,TCFS,BestCrypt,PPDD,Encrypted
第四章 社交工程、特洛伊木馬和其他黑客伎倆
第五章 實體攻擊
實體攻擊小結
1、不要把密碼或通路ID記在别人可以看到的地方。
2、不要把電話本,組織結構圖,備忘錄,内部手冊,會議安排或内部安全政策遺忘在容量
被閱讀或偷竊的地方。
3、在丢棄列印文檔,電子媒體或客戶資料時必須謹慎從事,把敏感材料标記為“敏感”,在
處理前粉碎敏感的檔案和手冊。抹去電子媒體中的資料,并且把所有的垃圾箱放置在照明狀
況良好的保護區域。
4、在标記網絡設施時必須謹慎。将這些資訊記錄在清楚的網絡圖中,并将其鎖起來。
5、 使用好的螢幕保護程式,確定帶有密碼,并且在運作時隐藏螢幕内容。将延遲時間設定
6、 為合理值---在合理時間後就運作它。
6、必須離開系統時,鎖定螢幕。
7、 使用便攜機時,必須盡可能在所有時間都将其帶在身邊。對竊賊的那些把它從你身過分
8、 開的詭計保持警惕。對進入工作場所的每個便攜機貼上标簽,在帶離時對其進行安全檢查。
8、避免使用雙重新開機動系統,linux的安全性取決于機器中安裝的安全性最差的系統。
9、在啟動加載時程式中設定保護密碼,防止可能獲得root權限的非法重新開機方式。
10、設定BIOS密碼,以防止其被修改。
11,将所有敏感系統放在加鎖的房間,以防止破壞。
12、使用好的加密檔案系統可以防止那些獲得系統權限的人看到機密資料。這應當作為安全防衛的底線。
本文轉自 holy2009 51CTO部落格,原文連結:http://blog.51cto.com/holy2010/376184