說起 rootkit 這類惡意程式,一開始是出現在 Unix 的平台上,所以才會冠上 “root” 這個詞。一直發展到後來,各個平台都有自己專屬的 rootkit,甚至是連硬體本身也可能受到 rootkit 的感染 (透過 firmware)。 在 Linux 下,rkhunter 與 chkrootkit 算是兩個比較常用的 rootkit scanner。其實這兩個工具都已經出現超久了,但是一直沒有被收入為標準的套件,對此我覺得實在很納悶,強調安全性的 Linux,對於一些安全套件的接納,似乎還是不夠積極啊。廢話不多說,今天我們就來看看如何在 CentOS 下使用 rkhunter 這個套件:
心領神會版本
- 安裝 unhide 套件
- 安裝 rkhunter 套件
- 修改 rkhunter 設定檔 /etc/rkhunter.conf
- 更新 rkhunter 定義
- 建立基準資料庫
- 測試
- 修正緊急的問題
- 設定排程自動執行
- 喝咖啡聊是非去
阿婆的裹腳布版本
- 安裝 unhide 套件
rkhunter 支援檢查隱藏程序與 tcp 埠號的功能,不過必須透過其他套件才可以完成這些檢查項目,而其中一個可用的套件就是 unhide。
很不幸的是 unhide 也不包含在 CentOS 的標準套件之內,所以必須自行下載,在 pkgs.org 可以找到相關的 rpm (請點這裡)。如果你使用的是 CentOS 5.x 的版本,好消息是可以透過 rpmforge 這個 repository 來安裝 unhide。 - 安裝 rkhunter 套件rkhunter 的 rpm 套件除了可以自行下載並安裝外,也可以透過 epel 這個 repository 來取得。
- 修改 rkhunter 設定檔 /etc/rkhunter.conf
基本上就算不修改設定檔,rkhunter 採用預設值也可以正常的執行。不過有幾個小設定,最好還是根據你的情況稍微調整一下會更為合適:- MAIL-ON-WARNING = “your email address”
這個設定是用來指定當檢查結果有”問題”時,應該通知哪個信箱。這個通知訊息其實很陽春,只要短短的”Please inspect this machine, because it may be infected.”一句話。如果想要看到完整的檢查結果,還是得回到系統中查看日誌 (預設是 /var/log/rkhunter/rkhunger.log) 才行。 - ENABLE_TESTS/DISABLE_TESTS
rkhunter 支援許多不同的檢查項目,而這兩個設定值就是用來控制要進行哪些檢查。ENABLE_TESTS的預設值是 all,也就是進行所有的檢查。但是 rkhunter 還會檢查 DISABLE_TESTS 的設定值,只要列在其中的檢查項目就會跳過去。所以請根據你的情況增減 rkhunter 的檢查項目,測試時可以把 DISABLE_TESTS 設定為 none,以便進行所有的檢查項目。 - APPEND_LOG = 1|0
是否要產生新的日誌檔,還是直接把檢查結果附加到原先的日誌檔內。我的建議是將這個設定值改為0,也就是每次產生新的日誌檔,不然累積了一大堆的檢查結果,根本無從查看起啊。
- MAIL-ON-WARNING = “your email address”
- 更新 rkhunter 定義
rkhunter 可以線上更新定義資料,因此每次使用前請記得更新一下資料。指令為
rkhunter 除了可以線上更新定義之外,也可以檢查是否有新的版本。對於自行下載安裝的使用者,可以利用這個功能來確保版本的有效性。指令為rkhunter --update
rkhunter --versioncheck
- 建立基準資料庫
除了標準的資料庫,rkhunter 還會根據本機的一些檔案建立專屬的資料庫,以作為日後比對的依據。初次使用前請記得建立這個資料庫,並做好相關的保護 (預設在 /var/lib/rkhunter/db/rkhunter.db)。指令為
除了初次使用前必須執行這個功能之外,如果日後相關檔案有所異動,也可以透過這個功能來更新資料庫。當然,在更新之前請務必確認這些檔案的變動都是合理的,否則一不小心把惡意的修改給更新到了資料庫,那可真的是萬劫不復了。rkhunter --propudp
- 測試
雖然 rkhunter 的設定與使用很簡單,幾乎不會出錯,不過一個良好的管理員還是必須保持謹慎。除了保持謹慎之外,也可以透過這次的檢查看看系統內是否有什麼需要馬上處理的問題。 - 修正緊急的問題
如果你發現系統已經存在緊急的問題,請記得馬上加以處理。如有必要,重新建立系統並於新系統即刻安裝 rkhunter (以及其他安全套件) 可能是比較好的選擇。 - 設定排程自動執行
測試完成後如果沒有緊急的問題需要處理 (或者已經處理完畢),此時你就可以在排程內設定定期自動進行 rkhunter 的檢查。建議可以採用下列的設定
首先,在開始檢查前進行線上的資料更新。此外,在檢查時加上了 --cronjob 這個參數,可以避免 rkhunter 停下來等候使用者的輸入。而 --report-warnings-only 則把螢幕的輸出精簡化,只留下警告的訊息,以減少日後追查檢查結果時所花費的時間。最後,把這個日誌檔更名以做作為保存之後。0 6 * * * rkhunter --update >> /dev/null; rkhunter --check --syslog --cronjob --nocolors --report-warnings-only --nomow; mv -f /var/log/rkhunter/rkhunter.log /var/log/rkhunter/rkhunter.`date +\%Y\%m\%e`.log;
其實 rkhunter 套件在安裝時,也會一併設定一個每日執行的排程 (放在 /etc/cron.daily 中)。也可以選擇直接使用這個排程的設定即可,或者是像我一樣自行定義排程。如果你自行定義了排程,請記得把套件安裝的排程刪除掉,否則就會變成一天檢查兩次了。檢查兩次除了會多收到一堆內容類似的通知信,倒也沒什麼大問題。 - 喝咖啡聊是非去
恭喜你,你又完成了另外一項目標,好好休息一下以便進行下一個目標吧。
最後,還有兩點心得要跟各位分享:
- 在使用這類套件時,請務必於系統安裝完成後就馬上加以安裝並建立相關資料庫。否則等到系統已經暗藏汙垢時,即使建立資料庫,也已經不是”純潔”兩字可以形容了。
- rkhunter 的安裝與設定很簡單,真正麻煩的是日後的追蹤。 rkhunter 的報告內容不少,其中包含了所謂的誤報 (false positive)。透過設定檔的 whitelist 相關設定,可以減少這類的誤報。但是在此之前,仔細的研讀報告並分析原因,才是讓 rkhunter 發揮功用的不二途徑。
Updated (2012/03/15)
本來想針對另一個老牌的 rootkit 偵測工具 chkrootkit 另寫一篇文章的。但是 chkrootkit 不像 rkhunter 可以透過設定檔來控制其行為,所以在應用上就不是那麼方便。最大的不便之處在於無法根據現實情況調整各式各樣的白名單,所以在誤報 (False Positive) 上比較令人困擾。而這點正是這類工具一個很大的致命傷。因此,我就偷懶把 chkrootkit 這篇省下囉。