搜尋此網誌

2012年2月16日 星期四

[工具介紹] Linux 下的 rootkit scanner - rkhunter

invisible_ninja_shirt_no_2-p235142573058300273trlf_400說起 rootkit 這類惡意程式,一開始是出現在 Unix 的平台上,所以才會冠上 “root” 這個詞。一直發展到後來,各個平台都有自己專屬的 rootkit,甚至是連硬體本身也可能受到 rootkit 的感染 (透過 firmware)。 在 Linux 下,rkhunter 與 chkrootkit 算是兩個比較常用的 rootkit scanner。其實這兩個工具都已經出現超久了,但是一直沒有被收入為標準的套件,對此我覺得實在很納悶,強調安全性的 Linux,對於一些安全套件的接納,似乎還是不夠積極啊。廢話不多說,今天我們就來看看如何在 CentOS 下使用 rkhunter 這個套件:
心領神會版本
  1. 安裝 unhide 套件
  2. 安裝 rkhunter 套件
  3. 修改 rkhunter 設定檔 /etc/rkhunter.conf
  4. 更新 rkhunter 定義
  5. 建立基準資料庫
  6. 測試
  7. 修正緊急的問題
  8. 設定排程自動執行
  9. 喝咖啡聊是非去
阿婆的裹腳布版本
  1. 安裝 unhide 套件
    rkhunter 支援檢查隱藏程序與 tcp 埠號的功能,不過必須透過其他套件才可以完成這些檢查項目,而其中一個可用的套件就是 unhide。
    很不幸的是 unhide 也不包含在 CentOS 的標準套件之內,所以必須自行下載,在 pkgs.org 可以找到相關的 rpm (請點這裡)。如果你使用的是 CentOS 5.x 的版本,好消息是可以透過 rpmforge 這個 repository 來安裝 unhide。
  2. 安裝 rkhunter 套件rkhunter 的 rpm 套件除了可以自行下載並安裝外,也可以透過 epel 這個 repository 來取得。
  3. 修改 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,也就是每次產生新的日誌檔,不然累積了一大堆的檢查結果,根本無從查看起啊。
  4. 更新 rkhunter 定義
    rkhunter 可以線上更新定義資料,因此每次使用前請記得更新一下資料。指令為
    rkhunter --update
    rkhunter 除了可以線上更新定義之外,也可以檢查是否有新的版本。對於自行下載安裝的使用者,可以利用這個功能來確保版本的有效性。指令為
    rkhunter --versioncheck
  5. 建立基準資料庫
    除了標準的資料庫,rkhunter 還會根據本機的一些檔案建立專屬的資料庫,以作為日後比對的依據。初次使用前請記得建立這個資料庫,並做好相關的保護 (預設在 /var/lib/rkhunter/db/rkhunter.db)。指令為
    rkhunter --propudp
    除了初次使用前必須執行這個功能之外,如果日後相關檔案有所異動,也可以透過這個功能來更新資料庫。當然,在更新之前請務必確認這些檔案的變動都是合理的,否則一不小心把惡意的修改給更新到了資料庫,那可真的是萬劫不復了。
  6. 測試
    雖然 rkhunter 的設定與使用很簡單,幾乎不會出錯,不過一個良好的管理員還是必須保持謹慎。除了保持謹慎之外,也可以透過這次的檢查看看系統內是否有什麼需要馬上處理的問題。
  7. 修正緊急的問題
    如果你發現系統已經存在緊急的問題,請記得馬上加以處理。如有必要,重新建立系統並於新系統即刻安裝 rkhunter (以及其他安全套件) 可能是比較好的選擇。
  8. 設定排程自動執行
    測試完成後如果沒有緊急的問題需要處理 (或者已經處理完畢),此時你就可以在排程內設定定期自動進行 rkhunter 的檢查。建議可以採用下列的設定
    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; 
    首先,在開始檢查前進行線上的資料更新。此外,在檢查時加上了 --cronjob 這個參數,可以避免 rkhunter 停下來等候使用者的輸入。而 --report-warnings-only 則把螢幕的輸出精簡化,只留下警告的訊息,以減少日後追查檢查結果時所花費的時間。最後,把這個日誌檔更名以做作為保存之後。
    其實 rkhunter 套件在安裝時,也會一併設定一個每日執行的排程 (放在 /etc/cron.daily 中)。也可以選擇直接使用這個排程的設定即可,或者是像我一樣自行定義排程。如果你自行定義了排程,請記得把套件安裝的排程刪除掉,否則就會變成一天檢查兩次了。檢查兩次除了會多收到一堆內容類似的通知信,倒也沒什麼大問題。
  9. 喝咖啡聊是非去
    恭喜你,你又完成了另外一項目標,好好休息一下以便進行下一個目標吧。
最後,還有兩點心得要跟各位分享:
  • 在使用這類套件時,請務必於系統安裝完成後就馬上加以安裝並建立相關資料庫。否則等到系統已經暗藏汙垢時,即使建立資料庫,也已經不是”純潔”兩字可以形容了。
  • rkhunter 的安裝與設定很簡單,真正麻煩的是日後的追蹤。 rkhunter 的報告內容不少,其中包含了所謂的誤報 (false positive)。透過設定檔的 whitelist 相關設定,可以減少這類的誤報。但是在此之前,仔細的研讀報告並分析原因,才是讓 rkhunter 發揮功用的不二途徑

Updated (2012/03/15)

本來想針對另一個老牌的 rootkit 偵測工具 chkrootkit 另寫一篇文章的。但是 chkrootkit 不像 rkhunter 可以透過設定檔來控制其行為,所以在應用上就不是那麼方便。最大的不便之處在於無法根據現實情況調整各式各樣的白名單,所以在誤報 (False Positive) 上比較令人困擾。而這點正是這類工具一個很大的致命傷。因此,我就偷懶把 chkrootkit 這篇省下囉。

    About