Linux的漏洞, 防駭

OuTian’s 芭樂閣 » mail server issue

mail server issue

某朋友的 mail server 被黑掉 , 順手寫了一些建議給他.

===========================================================================

1. 首先是發現異常時的檢查動作 :

a. 確認系統工具的正確性 –
如果之前有裝 tripwire 的話 , 直接完整檢查一遍.
沒有的話 , 至少也手動把下面用到的工具和原始的binary(去安裝時用的rpm解出來)
做一下比對 ,
因為如果系統工具都已經被換掉的話 , 下面的檢查都是白做工.

b. 檢查 log –
檢查所有的系統 log , 並用 w 、 last 等檢查一下登入紀錄.
(但不要完全相信 , 畢竟這都是可以被竄改的)

c. 檢查帳號
看看 /etc/passwd 是否有多出異常的帳號、或是從沒有 shell 被改成有

d. 檢查是否有異常的 process –
”不要”信任 ps 出來的結果 , 因為那是可以在程式裡改的
例如明明是一隻叫 backdoor 的後門程式 , 但可以把自己改名成 bash 或 httpd ,
一般人就容易忽略 …
所以要用心檢查一下每個 process , 發現有可疑的話 ,
可以到 /proc/process_id 看看細節
並用 strace -p 看看它在做什麼 , 用 lsof -p 看一下它開了哪些檔and連線

e. 檢查是否有異常的檔案 –
近年來最多的入侵例子都是從 web application 進入
所以要特別注意跑 httpd 的 user 可以寫入的地方
例如 documentroot、/tmp、/var/tmp 等
我曾看過不少人會另外建一個「…」的目錄來放後門 , 所以眼睛要尖一點 …
另外可以搭配 find 來檢查一下最近 create / modify 的檔案.

f. 檢查是否有異常的連線
用 netstat -nlutp 檢查是否有啟開異常的 port ,
並用 netstat -nutp 檢查所有的連線狀況 ,
例如正常的 http connection 應該是 local.80 <=> remote.client
但近來常見的 reverse connect 手法則會成為 local.client <=> remote.xx
一台專職的 server 不應該會有這種主動對外的連線.

g. 檢查是否有被種 rootkit
用 chkrootkit、rkhunter 等程式檢查看看是否有被種 rootkit
但也不用太相信檢查的結果 , 畢竟要躲過這些工具的檢查是很簡單的事

(以上是我所想到最最基本的 , 當然還有更多的檢查可以做)

===========================================================================

2. 當發現有異常時的處理動作 :

a. 發現異常的檔案時 , 千萬不要馬上砍了它 !!
因為從檔案中可以得到很多資訊 ,
從 create time 可以知道是何時進入的 ,
從 owner 可以知道是從哪個 daemon 進入的 ,
例如透過 web application 進入的話 , 一般會是 www 或 nobody .
(反過來說 , 你若看到某個後門程式的 owner 是 root 的話 , 那 ……. )

應該先收集這些資料後 ,
把程式備份下來 ( 以後要用時 … 啊不是! 以後要追查時方便) 再砍.
(備份時記得保留原來的 timestamp 和 permission )

b. 發現異常的連線時 , 循線追查出 pid , 然後追查出 program
用 starce 查一下該 process 在做什麼、
並用 ethereal 把該 connection 的動作全 dump 下來
(要完整的packet, 不是只有header)
收集到一些資訊、或久久沒有動作時 , 再把該 process 砍掉
然後循 a. 處理該 program.

(註: 若看到連線的另一端是6667或6668 port , 則有很高的機率該程式是 IRC bot )

c. 當發現有被新增帳號時 , 代表很可能已經被拿到 root 了
該機器是一定要重灌的 , 只是在重灌之前可以做一些分析 –

/etc/rc.local、/etc/rc.d/ 裡看看有沒有加或改什麼開機啟動檔
/etc/crontab、/etc/cron.*、/var/spool/cron 看看有沒有放什麼定時跑的程式
/etc/modprobe.conf、/proc/modules 看看有沒有掛什麼特殊的 module ,
kernel module 的危害性是很大的 :p

另外 , 可以的話換掉所有使用者的密碼 ,
因為從 /etc/shadow 可以去破出一堆密碼 , 重灌完還是可以拿來 login ….

d. 做完以上所有的檢查與紀錄保留後 , 可以的話 , 立刻將 server offline 做分析.
(當然動作要熟練 , 以上所有的檢查應該在 30 min 內完成)

===========================================================================

3. 以上的 1. 2. 是針對一般性 case 做建議 , 而針對這次 mail server 的建議如下:

a. 聽說是從 gallery 的洞進來的 ?
老師有在說 , 平常就要特別留意這類 open source 的 web application 是否有
release vulnerability
你有沒有在聽 ? 你沒有嘛 ! (丟筆!) …. XD

我所記得的 DC 裡有用到的像
awstats、cacti、phpbb、phpldapadmin、phpmyadmin、gallery、openwebmail…etc
內部用用的話還好 (https+鎖ip+鎖auth)
如果有開放外界使用的話 , 公佈的三天沒 patch 就是管理者的責任了 .

這類被廣泛應用的 open source web application 一旦有 critical vulnerability
被發現 , 通常 exploit 很快就出來了, 然後就會有機器人拿來到處掃.
像之前的 awstats、openwebmail、phpbb… 等等都是災情慘重.

其實我倒覺得如果有勤留意、補洞的話 , 倒不一定要完全把 gallery 整個停掉 .

b. 檢察一下 apache 的 log , 看看後門程式是從那個地方種進來的 ,
不管是不是跳板 , 有一就可能有二 , 直接永久擋掉其 ip.

c. 聽說該php的後門程式被編碼過了 ?
請公司出錢 , 去把它還原回來看看內容 .
( ex : http://www.qinvent.com/cyrj/deZender/index.php 、
http://www.phpdecode.com/ )

d. 聽說 openwebmail 有被塞了一些 code ?
那就算不重灌系統 , 最少最少也應該把 openwebmail 整個重裝 ,
不然難保中間有被塞了其他 code 而沒檢查到的 …..

另外 , 被塞 code 的檔案 owner 是不是 root ?
是的話 , 大概代表已經被拿到 root 了 .

===========================================================================

4. 一般性的增進 security 建議

(這類的文章很多了不贅述 , 底下只提一些個人覺得比較實用的)

a. 找個 harden system 的軟體來做一下 , 不無小補.
ex : Bastille … etc (這類程式的動作都差不多, 找一個做就差不多了)

b. 如該機器不會主動對外連線的話 ,
從 iptables 把主動對外的連線全擋掉 (防止 reverse connect)

c. 要開 mail / ftp 帳號的話 , 用其他的認證方式 ( ldap / mysql / … etc ) ,
不要開在系統帳號 , 開系統帳號會提高很多危險性 .

d. 要跑 php 的話 ,
關register_global、開safe_mode、設safe_mode_exec_dir/safe_mode_include_dir
disable_functions 關掉所有 system 類的 (passthru…etc)
如此可以擋掉一大堆的 php web application 洞.

e. 有跑 apache 的話 , 加掛 mod_security (要設定的好).

f. 除了 /、/usr 外 , 把其他 partition ( /var、/tmp、/home、… ) 都 mount 成
nosuid, noexec
(防止 elf 後門程式的執行)

g. 一般 user 不跑 perl 的話 , 把 perl 改成只限 root 執行(或直接移掉) ,
因為 perl 的後門也很多 , 而且可以避過 noexec partition 的檢查.

h. 開 SElinux (當然要會設定), 可以擋掉一些 kernel exploit、和一些不允許的行為

j. 加掛一些 kernel module 做額外的限制 , 例如 grsecurity … etc

以上是個人的一些經驗分享 , 有疑問的話歡迎來信與我討論 .
(只是最近在忙考試 , 可能不會那麼快回就是了 :p )

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

What is 11 + 13 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)