記錄重要的系統事件是系統安全的一個(gè)重要因素。多數U N I X 系統能夠運行三個(gè)不同的日志子系統:使用wtmp / utmp 文件的連接時(shí)間日志;使用acct 或pacct 文件的進(jìn)程統計;經(jīng)過(guò)syslog 實(shí)施的錯誤日志。本章講述了這些日志子系統以及允許系統或安全管理員監測、審計和維護日志的命令和程序。還講述了幾個(gè)額外的工具,從幫助查找侵入者的Zap 到標準UNIX syslog 的一個(gè)安全加強版本syslog-ng 。 UNIX 維護了幾個(gè)基本的日志文件來(lái)跟蹤和記錄系統中發(fā)生了什么事情,包括誰(shuí)登錄進(jìn)入,誰(shuí)退出登錄,以及他們做了些什么。較新的U N I X 版本還跟蹤其他一些信息,如超級用戶(hù)登錄的次數,通過(guò)網(wǎng)絡(luò )傳輸的文件,電子郵件以及其他更多方面。 日志文件對于維護系統安全很重要。它們?yōu)閮蓚€(gè)重要功能提供數據:審計和監測。它們通過(guò)提供一個(gè)歷史記錄—系統中關(guān)于活動(dòng)的審計軌跡—允許用戶(hù)或第三方回頭來(lái)系統地評價(jià)安全程序的效率以及確定引起安全破壞或系統功能失效的原因。如果需要,它們還能作為呈現給權威機構的證據。 它們還能用來(lái)“實(shí)時(shí)”地監測系統狀態(tài),檢測和追蹤侵入者,發(fā)現bug 以及阻止問(wèn)題發(fā)生。用戶(hù)可以通過(guò)瀏覽日志條目來(lái)查看自己的系統或使用Swatch這樣的工具來(lái)代為查看。警告日志使用戶(hù)對自己的行為負責,特別是在有較強用戶(hù)授權策略的系統中。但是,總可能有一個(gè)用戶(hù)冒充另一個(gè)。不要認為包含在一個(gè)日志中的信息是神圣不可侵犯的—在采取行動(dòng)之前要試著(zhù)通過(guò)獨立手段來(lái)確認日志記錄。 雖然一個(gè)日志的存在不能提供完全的可記錄性,但日志能使系統管理員和安全官員做到: (1)發(fā)現試圖攻擊系統安全的重復舉動(dòng)(也就是一個(gè)攻擊者試圖冒充root 登錄)。 (2)跟蹤那些想要越權的用戶(hù)(也就是那些使用sudo 命令作為root 執行命令的用戶(hù))。 (3)跟蹤異常的使用模式(Carol 從9 點(diǎn)工作到5 點(diǎn)而日志顯示在 3AM 登錄;Mallory 貪取CPU時(shí)間)。 (4)實(shí)時(shí)跟蹤侵入者。 日志能夠幫助檢測。當系統被攻擊或有人侵入時(shí),盡快知道是很重要的。雖然日志不能阻止一次侵入,但它能體現出基本帳戶(hù)安全的一個(gè)漏洞。甚至當帳戶(hù)安全失敗,一個(gè)攻擊者能夠剝奪用戶(hù)權利時(shí),也希望這件事能記錄下來(lái)。一旦知道發(fā)生了什么事,就可以采取相應的行動(dòng):切斷用戶(hù)、加強網(wǎng)絡(luò )控制,監測一個(gè)侵入者以搜索證據等等。記錄日志、維護日志、日志監測和審計等策略都是完整安全策略的重要組成部分。也許日志最重要的安全功能是制止?;A人類(lèi)心理學(xué)指出當人類(lèi)得知自己的行為被監測時(shí)會(huì )舉止異常。僅僅安裝日志是不夠的—應該公布這件事以灌輸恐懼感。應該發(fā)展通信策略以加強攻擊者可能被抓住的印象。其目的是阻止一個(gè)攻擊者或任性的用戶(hù)到達行為的危險點(diǎn)。 應該宣傳出去說(shuō)系統建立了日志。一個(gè)有效的方式是使用登錄標志警告:“警告!繼續使用本系統要同意安全監測和測試。所有的用戶(hù)行為都與用戶(hù)名、主機名和IP 地址一起記錄下來(lái)”。 不幸的是,日志文件本身易被攻擊。任何有能力的系統破壞者都試圖通過(guò)修改日志文件或更壞情況是修改日志機制本身來(lái)掩蓋自己的蹤跡。有一些防范措施可以幫助保持日志子系統的完整性和可用性。這將在本章后面講到。 提示要想知道一個(gè)破壞者在侵入UNIX 系統后怎樣掩蓋其蹤跡,可參見(jiàn)Phrack 雜志的文章“Playing Hide and Seek, Unix Style ”,可在下面地址找到: http://www.fish.com/security/hide-n-seek.html . 8.1 日志子系統 在多數UNIX 系統中,有三個(gè)主要的日志子系統: (1) 連接時(shí)間日志—由多個(gè)程序執行,把記錄寫(xiě)入到/var/log/wtmp (或/var/adm/Wtmp )和/var/run/utmp (可以是/etc/utmp 或/var/adm/utmp)。login 等程序更新wtmp 和utmp 文件,使系統管理員能跟蹤誰(shuí)在何時(shí)登錄進(jìn)入系統。 (2) 進(jìn)程統計—由系統內核執行。當一個(gè)進(jìn)程終止時(shí),為每個(gè)進(jìn)程往進(jìn)程統計文件(pacct或acct )中寫(xiě)一個(gè)記錄。進(jìn)程統計的主要目的是為系統中的基本服務(wù)提供命令使用統計。 (3) 錯誤日志—由syslogd 執行。各種系統守護程序、用戶(hù)程序和內核通過(guò)syslog 向文件/var/adm/messages 和/var/log/syslog 報告值得注意的事件。另外有許多UNIX 程序創(chuàng )建日志。像HTTP 或FTP 這樣提供網(wǎng)絡(luò )服務(wù)的服務(wù)器也保持詳細的日志。 根據不同的U N I X 版本,日志文件通常寫(xiě)到/var/log 、/var/adm 、/usr/adm 或有時(shí)/etc 目錄中。 多數Linux 系統在/var/log 中保存主要的日志—我將在多數例子中使用該習慣。常用的日志文件在表1 中總結。 表1 常用UNIX 日志文件 日志文件 目標 access-log 記錄HTTP/web的傳輸 acct/pacct 記錄用戶(hù)命令 aculog 記錄調制解調器的活動(dòng) btmp 記錄失敗的登錄 lastlog 記錄最近幾次成功登錄的時(shí)間和最后一次不成功的登錄 messages 從syslog中記錄信息(通常鏈接到syslog 文件) sudolog 記錄使用sudo 發(fā)出的命令 sulog 記錄su 命令的使用 syslog 從syslog 中記錄信息(通常鏈接到message 文件) utmp 記錄當前登錄的每個(gè)用戶(hù) wtmp 一個(gè)用戶(hù)每次登錄進(jìn)入和退出時(shí)間的永久記錄 xferlog 記錄FTP會(huì )話(huà) 8.2 登錄記錄 utmp 、wtmp 和lastlog 日志文件是多數重要UNIX 日志子系統的關(guān)鍵—保持用戶(hù)登錄進(jìn)入和退出的記錄。有關(guān)當前登錄用戶(hù)的信息記錄在文件utmp 中;登錄進(jìn)入和退出記錄在文件wtmp 中;最后一次登錄在文件lastlog 中。數據交換、關(guān)機和重啟也記錄在wtmp 文件中。所有的記錄都包含時(shí)間戳。 這些文件(除了lastlog )在具有大量用戶(hù)的繁忙系統中增長(cháng)得很迅速。例如wtmp 文件可以無(wú)限制增長(cháng),除非定期進(jìn)行截取。許多系統以一天或一周為單位把wtmp 配置成循環(huán)使用。它通常由cron 運行的腳本來(lái)刪改。這些腳本重命名并循環(huán)使用wtmp 文件,能保持一周有價(jià)值的數據。通常,wtmp 在第一天結束后重命名為wtmp.1 ;第二天后wtmp.1 變?yōu)閣tmp.2 等等,直到wtmp.7 。 警告如果/var/log/wtmp 文件不存在,則不執行登錄和連接時(shí)間統計。它必須手工進(jìn)行創(chuàng )建(touch /var/log/wtmp )。 8.2.1 基本機制 每次有一個(gè)用戶(hù)登錄時(shí),login 程序在文件lastlog 中查看用戶(hù)的UID 。如果找到了,則把用戶(hù)上次登錄、退出時(shí)間和主機名寫(xiě)到標準輸出中,然后login 程序在lastlog 中記錄新的登錄時(shí)間。 在新的lastlog 記錄寫(xiě)入后,utmp 文件打開(kāi)并插入用戶(hù)的utmp 記錄。該記錄一直到用戶(hù)登錄退出時(shí)刪除。utmp 文件被各種命令使用,包括who 、w 、users 和finger (參見(jiàn)下面講到的這些命令)。 下一步,login 程序打開(kāi)文件wtmp 附加用戶(hù)的utmp 記錄。當用戶(hù)登錄退出時(shí),具有更新時(shí)間戳的同一utmp 記錄附加到文件中。wtmp 文件被程序lost 和ac 使用(參見(jiàn)下面)。 警告在老的UNIX 版本中,/etc/utmp 文件是所有人可寫(xiě)的(- r w - r w - r w -)。這是不應該的,因為它使任何用戶(hù)能夠編輯該文件(他們可隱藏自己的存在)。新的UNIX 系統對/etc/utmp 進(jìn)行更嚴格的限制(-rw-r--r--)。 8.2.2 使用基于utmp/wtmp 的命令進(jìn)行監測 wtmp 和utmp 文件都是二進(jìn)制格式,它們不能被剪貼(使用tail 命令)或合并(使用cat 命令)。用戶(hù)需要幾個(gè)命令之一,包括who 、w 、users 、last 和ac —來(lái)使用這兩個(gè)文件包含的信息。 一個(gè)系統管理員應該通過(guò)定期檢查誰(shuí)曾登錄過(guò),以及做了些什么事來(lái)監測系統的安全,尤其是一個(gè)安全機密系統或者有許多用戶(hù)的系統。 如是否有人在假期里登錄? 是否有個(gè)業(yè)務(wù)經(jīng)理編譯程序? 是否有一個(gè)程序員在早上9 點(diǎn)進(jìn)入? 要精心觀(guān)察,就像一個(gè)店主警惕誰(shuí)進(jìn)來(lái)或離開(kāi)了商店那樣。要在每天第一次登錄和最后一個(gè)退出之前運行w 。要觀(guān)察失敗的登錄—它們可能預示有人侵入。運行ac 來(lái)看誰(shuí)偷取了系統資源,是一個(gè)電子郵件使用者在提交大量的工作嗎?不放松警惕是安全的一部分。 警告日志中的一個(gè)漏洞是su 命令。當一個(gè)用戶(hù)用一個(gè)有效的UID 代替另一個(gè)時(shí),它不更新utmp 和wtmp 。這可能導致一些奇怪地結果,例如一個(gè)使用su 的用戶(hù)運行mail 或其他使用utmp 文件的程序。幸運的是,su 維護它自己的日志(參見(jiàn)8.5.1 節)。 8.2.3 who 命令 who 命令查詢(xún)utmp 文件并報告當前每個(gè)登錄的用戶(hù)。who 的缺省輸出包括用戶(hù)名、終端類(lèi)型、登錄日期和時(shí)間以及遠程主機(如果是的話(huà))。 $who root tty1 May 15 16:09 bob console May 15 14:49 alice ttyp2 May 16 00:13 carol ttyp3 May 11 13:20 如果指明了wtmp 文件名,則who 命令查詢(xún)所有以前的登錄。命令who /var/log/wtmp 將報告自從wtmp 文件創(chuàng )建或刪改以來(lái)的每一次登錄。 對于正處于危機中的用戶(hù),特殊形式whoami 提供了一些安慰: $ whoami alice 有些UNIX 系統中包括一些擴充的who 命令。例如HP-UX 支持16 個(gè)不同的標志和選項?!?a ”標志產(chǎn)生一個(gè)“包含一切”的報告,包括用戶(hù)名、終端類(lèi)型、時(shí)間、空閑時(shí)間、進(jìn)程ID 和注釋。它還顯示最后一次系統啟動(dòng)時(shí)間及其他內容。 8.2.4 w 命令 w 命令查詢(xún)utmp 文件并顯示當前系統中每個(gè)用戶(hù)和他所運行的進(jìn)程信息。標題欄顯示當前時(shí)間、系統已運行了多長(cháng)時(shí)間、當前有多少用戶(hù)登錄以及過(guò)去1 、5 和1 5 分鐘內的系統平均負載。 uptime 命令與w 密切相關(guān)。它也輸出以上的題頭信息。 8.2.5 users 命令 users 命令用單獨一行打印出當前登錄的用戶(hù),每個(gè)顯示的用戶(hù)名對應一個(gè)登錄會(huì )話(huà)。如果一個(gè)用戶(hù)有不止一個(gè)登錄會(huì )話(huà),那他的用戶(hù)名將顯示相同的次數。 $ users alice carol dave bob 8.2.6 last 命令 last 命令往回搜索wtmp 來(lái)顯示自從文件第一次創(chuàng )建后登錄過(guò)的用戶(hù)。它還報告終端類(lèi)型和日期。 若使用“-R ”標志(BSDish 系統中為“-h ”),則last 命令顯示用戶(hù)的主機名?!?number”標志把報告的行數限制為number 。 如果指明了用戶(hù),那么last 只報告該用戶(hù)的近期活動(dòng)。 8.2.7 lastb 命令 有些UNIX 系統還支持lastb 命令,它往回搜索數據文件/var/adm/btmp 并顯示有關(guān)錯誤登錄信息(就是那些口令錯誤的登錄)。要看前面5 次錯誤登錄,可以用root 登錄并運行命令: 警告應該限制用戶(hù)以適當的權限訪(fǎng)問(wèn)btmp 文件—該文件只應由root 擁有并可讀,因為它也許包含口令信息(用戶(hù)經(jīng)常錯誤地把口令作為用戶(hù)名輸入)。 8.2.8 ac 命令 ac 命令根據當前/var/log/wtmp 文件中的登錄進(jìn)入和退出來(lái)報告用戶(hù)連接的時(shí)間(小時(shí))。如果不使用標志,則報告總的時(shí)間。 $ ac total 136.25 “-d ”標志產(chǎn)生每天的總的連接時(shí)間。 “-p ”標志報告每個(gè)用戶(hù)的總的連接時(shí)間。 8.2.9 lastlog 文件 如上面所述,lastlog 文件在每次有用戶(hù)登錄時(shí)被查詢(xún)。多數UNIX 系統報告最后一次成功登錄,并顯示日期和終端類(lèi)型。有些System V 系統還報告最后一次不成功的登錄。這看起來(lái)如下例所示(H P - U X 登錄會(huì )話(huà)): 提示每次登錄時(shí)要檢查一下有關(guān)成功和不成功登錄的報告,讓其他用戶(hù)也這么做。無(wú)需多說(shuō),用戶(hù)應確保沒(méi)有其他人以自己用戶(hù)名登錄或重復嘗試不成功的登錄。 如果運行Linux ,可以使用lastlog 命令來(lái)檢查某特定用戶(hù)上次登錄的時(shí)間,它格式化并輸出上次登錄日志/var/log/lastlog (在其他系統上也許是/var/adm/lastlog )的內容。它根據UID排序顯示登錄名、端口號(tty)和上次登錄時(shí)間。如果一個(gè)用戶(hù)從未登錄過(guò),lastlog 顯示“* * Never logged**”—這是多數系統用戶(hù)應該看到的。注意需要以root 運行該命令。 在上面例子中,lastlog 報告自lastlog 文件創(chuàng )建以來(lái)的所有用戶(hù)??梢允褂谩?u”標志限制對某個(gè)特定用戶(hù)進(jìn)行報告—lastlog -u 102 將報告UID 為102 的用戶(hù)。要限制為上一周的報告,可使用“-t”標志—lastlog -t 7 。 |
聯(lián)系客服