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

前言

嚴謹地說, Linux只是一個內核, `GNU Linux`纔算完整的操做系統, 但在本文裏仍是用通俗的叫法,javascript

把`Ubuntu`,`Debian`,`RedHat`,`CentOS`,`ArchLinux`等發行版都統稱爲`Linux`.html

本文裏所說的方法不只對Linux的發行版適用, 部分方法對`Mac OSX`操做系統也是適用的.java

異常的賬號和權限

若是黑客曾經得到過命令運行的機會, 對方每每會想要將這個機會持續下去, 業內稱之爲`持久化(persistence)`.git

而建立後門賬號, 每每是一個持久化的途徑.github

檢查異常賬號

搜尋用戶

`cat /etc/passwd`能夠看到當前系統中的全部用戶和對應的組信息, 若是賬號太多一眼看不過來,shell

我一般會用下述方法篩選:ubuntu

```shwindows

cat /etc/passwd | awk -F: '{print $7}' | sort | uniq -c安全

```bash

改命令的做用是打印全部類型的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][upstart]是基於事件的,用來取代古老的/sbin/init進程來處理任務和服務自啓動的方法.

查看該類型的自啓動文件能夠用如下命令:

- 查看全部自啓動項目: `initctl list`

- 查看某個自啓動項目: `initctl show-config evil`

SystemV

[SystemV][systemv]就是經常使用的`service start/stop/status xxx.service`命令背後的服務管理系統.

查看該類型的自啓動文件能夠用如下命令:

- 查看自啓動腳本: `ls /etc/init.d/`

- 查看運行級別的符號連接: `ls /etc/rc*.d/`

SystemD

[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]表示只有當第一個腳本存在時候纔會執行. 用流程圖表示以下:

![啓動順序](http://www.solipsys.co.uk/images/BashStartupFiles1.png)

關於登陸/非登陸shell以及交互/非交互shell的內容能夠參考網上的其餘介紹, 這裏就不展開了.

只要知道本身的shell初始化所執行的文件順序, 並檢查這些文件看是否有可疑命令, 從而才能發現異常信息.

 應用級別的自啓動

要找到全部可疑的自啓動項是困難的, 有經驗攻擊者能夠修改現有的自啓動腳本, 額外拉起命令,

從而減小被發現的風險. 一些Linux桌面版本也會負責運行相似的自啓動命令, 好比我最愛的xfce,

在`Settings -> Session Starup -> Application Autostart`就能夠添加自啓動的應用.

異常的記錄

異常的命令歷史記錄

通常而言, 黑客獲取shell以後會在上面執行某些命令, 咱們能夠經過`history`命令來查看曾經運行過的命令.

或者直接查看`~/.bash_history`文件. 聰明的黑客幹完壞事也許會清理痕跡, 但若是發現history被惡意清除,

或者被異常篡改, 那也足以給咱們警示的信號了.

異常的日誌記錄

日誌, 尤爲是系統日誌, 是咱們絕佳的幫手, 下面一些命令能夠用來讀取日誌文件並輸出相關信息:

- 查看每一個用戶最近的登陸時間和ip: `lastlog`

- 查看每一個用戶的登陸記錄: `last`

- 查看每一個用戶的登陸嘗試(包括失敗的)記錄: `lastb`

- 查看當前登陸的用戶,ip以及正在執行的命令: `w`

固然, 有心的攻擊者也會在這些命令中隱藏本身的痕跡, 好比使用小工具[hidemyass][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版的自檢][windows]略爲詳細.

正所謂’未知攻,焉知防’, 本文不少自檢方法也是根據筆者平常的紅隊經驗獲得的,

但願能對提升小夥伴們的安全意識和防禦能力有所幫助吧.

[windows]:https://www.pppan.net/blog/detail/2017-11-08-windows-self-check

[upstart]:http://upstart.ubuntu.com/cookbook/

[systemv]:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Installation_Guide/s1-boot-init-shutdown-sysv.html

[systemd]:https://fedoraproject.org/wiki/Systemd#systemd_documentation

[bashinit]:https://shreevatsa.wordpress.com/2008/03/30/zshbash-startup-files-loading-order-bashrc-zshrc-etc/

[hidemyass]:https://github.com/pannzh/hidemyass

相關文章
相關標籤/搜索