快速自檢電腦是否被黑客入侵過(Linux版)

debian
之前寫了一篇快速自檢電腦是否被黑客入侵過(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章