之前寫了一篇快速自檢電腦是否被黑客入侵過(Windows版), 這次就來寫寫Linux版本的.
前言
嚴謹地說, Linux只是一個內核, GNU Linux
纔算完整的操作系統, 但在本文裏還是用通俗的叫法,
把Ubuntu
,Debian
,RedHat
,CentOS
,ArchLinux
等發行版都統稱爲Linux
.
本文裏所說的方法不僅對Linux的發行版適用, 部分方法對Mac OSX
操作系統也是適用的.
異常的帳號和權限
如果黑客曾經獲得過命令運行的機會, 對方往往會想要將這個機會持續下去, 業內稱之爲持久化(persistence)
.
而創建後門帳號, 往往是一個持久化的途徑.
檢查異常帳號
搜尋用戶
cat /etc/passwd
可以看到當前系統中的所有用戶和對應的組信息, 如果帳號太多一眼看不過來,
我通常會用下述方法篩選:
cat /etc/passwd | awk -F: '{print $7}' | sort | uniq -c
改命令的作用是打印所有類型的shell和對應的數量, 對於有shell的用戶, 要仔細檢查.
檢查用戶
如果上一步獲得了某個異常的用戶名(假設爲hacker
), 可以用以下方法詳細檢查該用戶:
- 查看用戶id和組信息: id hacker
- 查看用戶最近登錄信息: lastlog -u hacker
- 查看用戶歷史登錄信息: last hacker
- 查看用戶登錄失敗信息: lastb hacker
- 查看綜合信息: finger hacker
注:
finger
命令在某些操作系統裏不是內置的, 可以自行用包管理工具安裝, 如:
Ubuntu/Debian: apt-get install finger
CentOS/RedHat: yum install finger
ArchLinux: pacman -S finger
下面提到的其他非內置命令類似
檢查異常權限
一般的Linux用戶都會用sudo
來讓普通用戶可以執行root操作, 因此對於已經存在的普通用戶,
也不可掉以輕心. sudo
所管理的權限, 在/etc/sudoers
以及/etc/sudoers.d
中可以查看,
最好經常檢查改文件以確保沒有普通用戶獲得了意外的權限. 對於每個普通用戶,
可以用命令groups username
來查詢其所屬的組, 如果是root或者sudo組,
或者該組在/etc/sudoers
文件中, 那就要格外警覺了.
異常的自啓動項
Linux下的自啓動流程根據其服務管理器的不同而不同, 常用的有以下三種:
Upstart
Upstart是基於事件的,用來取代古老的/sbin/init進程來處理任務和服務自啓動的方法.
查看該類型的自啓動文件可以用以下命令:
- 查看所有自啓動項目:
initctl list
- 查看某個自啓動項目:
initctl show-config evil
SystemV
SystemV就是常用的service start/stop/status xxx.service
命令背後的服務管理系統.
查看該類型的自啓動文件可以用以下命令:
- 查看自啓動腳本:
ls /etc/init.d/
- 查看運行級別的符號鏈接:
ls /etc/rc*.d/
SystemD
SystemD是現代的服務管理系統, 比較新的Linux版都已經遷移爲SystemD了.
有兩種方式查看所有自啓動的服務:
systemctl list-unit-files --type=service
ls /lib/systemd/system/*.service /etc/systemd/system/*.service
舊版本的Linux一般是Upstart和SystemV混用, 新版本都大多遷移到SystemD了.
其他
異常的計劃任務
除了上述的自啓動服務, Linux下還可以通過計劃任務來進行持久化運行, 檢查異常的計劃任務相對簡單,
只需要查看/etc/crontab
以及子目錄下/etc/cron.*
的計劃任務文件即可.
bash初始化
用過Linux的都知道, 在$HOME/.bashrc
文件裏可以進行初始化配置並應用於每個shell,
也就是說裏面的腳本在每次新開一個terminal的時候都是有可能被運行的.
這類配置文件包括.bashrc
, .bash_profile
, .bash_login
, .profile
等等.
其是否運行以及運行的順序由shell被調用時是否登錄, 以及是否交互運行來決定,
對於bash來說, 執行流程如下表:
腳本名稱 | 交互登錄 | 交互非登錄 | 腳本(即非交互) |
---|---|---|---|
/etc/profile |
A | ||
/etc/bash.bashrc |
A | ||
~/.bashrc |
B | ||
~/.bash_profile |
B1 | ||
~/.bash_login |
B2 | ||
~/.profile |
B3 | ||
$BASHENV |
A | ||
` | | | ~/.bash_logout ` |
C |
其中執行順序爲A->B->C
, B[123]表示只有當第一個腳本存在時候纔會執行. 用流程圖表示如下:
關於登錄/非登錄shell以及交互/非交互shell的內容可以參考網上的其他介紹, 這裏就不展開了.
只要知道自己的shell初始化所執行的文件順序, 並檢查這些文件看是否有可疑命令, 從而才能發現異常信息.
應用級別的自啓動
要找到所有可疑的自啓動項是困難的, 有經驗攻擊者可以修改現有的自啓動腳本, 額外拉起命令,
從而減少被發現的風險. 一些Linux桌面版本也會負責運行類似的自啓動命令, 比如我最愛的xfce,
在Settings -> Session Starup -> Application Autostart
就可以添加自啓動的應用.
異常的記錄
異常的命令歷史記錄
一般而言, 黑客獲取shell之後會在上面執行某些命令, 我們可以通過history
命令來查看曾經運行過的命令.
或者直接查看~/.bash_history
文件. 聰明的黑客幹完壞事也許會清理痕跡, 但如果發現history被惡意清除,
或者被異常篡改, 那也足以給我們警示的信號了.
異常的日誌記錄
日誌, 尤其是系統日誌, 是我們絕佳的幫手, 下面一些命令可以用來讀取日誌文件並輸出相關信息:
- 查看每個用戶最近的登錄時間和ip:
lastlog
- 查看每個用戶的登錄記錄:
last
- 查看每個用戶的登錄嘗試(包括失敗的)記錄:
lastb
- 查看當前登錄的用戶,ip以及正在執行的命令:
w
當然, 有心的攻擊者也會在這些命令中隱藏自己的痕跡, 比如使用小工具hidemyass.
系統日誌一般都由rsyslogd進程產生, 配置在/etc/rsyslog.conf
文件以及/etc/rsyslog.d/
目錄下,
一些常見的日誌和介紹如下:
- /var/log/messages: 一般的系統日誌
- /var/log/kern.log: 系統內核日誌
- /var/log/boot.log: 系統啓動日誌
- /var/log/auth.log: 登錄相關的日誌, 比如ssh/sudo成功失敗的日誌都在這裏
- /var/log/secure: 同上
- /var/log/cron.d: cron計劃任務的執行日誌
通過檢查上述日誌, 往往可以發現一些意想不到的痕跡(如果有的話).
犯罪現場
雖然說自檢主要是從犯罪痕跡中找到線索和指示, 但有時候攻擊者留下的惡意軟件還是會正在運行中的,
這時, 從犯罪現場來搜尋蛛絲馬跡也是一個不錯的主意.
異常的進程
查找異常進程, 可以用top
命令查看正在運行的程序所佔用的資源, 或者用ps -ef
列出當前系統所用的進程.
如果發現自己不認識的進程, 可以用以下命令進行詳細的檢查:
- 查看該進程啓動的完整命令行:
ps eho command -p $PID
- 查看該進程啓動時候所在的目錄:
readlink /proc/$PID/cwd
- 查看該進程啓動時的完整環境變量:
strings -f /proc/$PID/environ | cut -f2 -d ' '
- 列出該進程所打開的所有文件:
lsof -p $PID
- 列出該進程所打開的網絡連接:
netstat -pan | grep $PID
當然, 如果攻擊者用某種手段隱藏了進程, 也還是會留下一些線索, 比如可疑的LKM模塊, 這裏就不深入了.
異常的網絡流量
如果某個惡意進程正在活動, 很可能此時正在與外界網絡有交流, 這就需要通過抓包工具來進行分析了.
對於Linux桌面用戶, wireshark是個絕佳選擇, 而對於服務端, tcpdump是個好工具, 對其掌握也是很必要的.
以wireshark爲例, 打開抓包幾分鐘左右, 通過內置的過濾規則, 加上上面分析到的應用所打開的網絡連接,
就可以看到這個惡意應用到底在和外界做些什麼邪惡的交流, 從而及時評估損失和保護數據.
除了惡意軟件發起的網絡瀏覽, 還有一些是通過自身發起的. 比如攻擊者修改了iptables,DNS,http代理,
或者/etc/hosts
, 都可能會導致我們正常的網絡請求被攻擊者監聽並篡改. 這些小小的修改也許不是很明顯,
可一旦發現自身網絡環境'不太對勁', 就要提高警惕, 仔細排查了.
後記
使用Linux作爲日常桌面操作系統的人, 一般都是有一定的技術水平, 但道高一尺, 魔高一丈,
攻擊Linux的人對應地技術水平也會高些, 所以本文相對於Windows版的自檢略爲詳細.
正所謂'未知攻,焉知防', 本文很多自檢方法也是根據筆者日常的紅隊經驗得到的,
希望能對提高小夥伴們的安全意識和防護能力有所幫助吧.
本文首發FreeBuf, 轉載請註明出處
博客地址: PansLabyrinth