TeamT5 「ThreatVision 威脅情資平台」榮獲 Computex Best Choice Award 金獎服務MDR
威脅偵測應變代管服務
IR
資安事件應變處理服務
產品ThreatSonar Anti-Ransomware
威脅鑑識分析與回應平台
ThreatSonar
威脅鑑識分析平台
ThreatVision
威脅情資平台
深暗網威脅情資
ThreatVision 最新威脅情資類別
產業方案金融機構
醫療院所
科技製造業
政府機關
關於 TeamT5TeamT5 團隊
人才招募
最新消息部落格聯絡我們聯絡我們
合作夥伴
TW
技術分析SubscribeRSSLinux 攻擊場域:常見惡意手法2024.01.16IR TeamShare: TeamT5 杜浦數位安全專精於亞太地區網路威脅研究,並提供資安事件應變服務,團隊具備超過 20 年的資安威脅調查、分析的經驗。本次深度分享在 Linux 環境中,常見的惡意手法。Linux 軟體及指令多數都是開源的,豐富程度遠超 Windows,因此攻擊者常常使用內建 (built-in) 功能或是相關套件 (package),來持續維持存取權限。權限提升Windows 主機存取最常用的方式是 RDP(3389),Linux 則是 SSH(22)。早期因為 Bot/Scanner 會在 Internet 上掃描,使用 root 當帳號進行猜測成功後登入,後來 sshd_config 裡面預設禁止 root 帳號登入。/etc/ssh/sshd_config
PermitRootLogin prohibit-password/no參數說明yes允許no不允許prohibit-password禁止以輸入密碼的方式登入forced-commands-only只允許用公鑰授權登入Windows 存取 RDP 時,該 User 必需在 Administrators 或 Remote Desktop Users 的群組裡,而 Linux 一般 User 也可以進行登入,只要 /etc/passwd 帳號裡面有設定執行 shell。/etc/passwd, /etc/shadow攻擊者有時會修改檔案權限(File Permission),這裡引用 @sysxplore 所整理的 Linux file permissions cheatsheet。可得知分別為 type | user | group | other 四個部份,可以檢視下面二種權限會存在什麼問題?個別需要怎麼利用?┌──(kali㉿kali)-[~]
└─$ ll /etc/passwd
-rw-r--rw- 1 root root 3626 Jan 10 05:46 /etc/passwd*因為 other 設 w 所以大家都可以對它做寫入,所以可以建立帳號。┌──(kali㉿kali)-[~]
└─$ ll /etc/passwd
-rw-rw-r-- 1 root root 3626 Jan 10 05:46 /etc/passwd*因為 group 設 w 所以 root 群可以對它做寫入,所以只需要將 /etc/group 的 root 群多加帳號(root:x:0:kali),使用 kali 可以建立帳號。正常情況下 /etc/passwd 所設的檔案權限:┌──(kali㉿kali)-[~]
└─$ ll /etc/passwd
-rw-r--r-- 1 root root 3235 Oct 6 11:05 /etc/passwd再談 /etc/passwd 的檔案內容,可以看到內容的格式為:格式使用者名稱加密的密碼使用者 ID 號碼 (uid)使用者的群組 ID 號碼 (gid)使用者的完整名稱 (gecos)使用者起始目錄登入 shell可以看到 root 的 uid=0,所以只要將帳號的 uid 改為 0,此帳號就會變成 root 了,而帳號後的密碼欄位,大多都是 x 是因為後來的密碼,都被移到 /etc/shadow 裡面,所以就都設為 x (相關說明)。root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
systemd-coredump:x:993:993:systemd Core Dumper:/:/usr/sbin/nologin
openldap:x:132:142:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
qoo:$1$SY5WcHLA$QCf.I6R2F2FPFa/9Ln2Es/:0:0:root:/root:/usr/bin/zsh如果想自己產一組密碼,可以使用 openssl 產生密碼,填入 x 後,就不用再去 /etc/shadow 取密碼了。┌──(kali㉿kali)-[~]
└─$ openssl passwd -6 -salt 'SaltQQ' '1234'
$6$SaltQQ$Q2SKpm12cbmN40aDpgEBhDoupRHqeBF4wtmOuHowNzxbNEYavqHp5bUxj.z5MO19syGO3R881h01UMMh66sAU0
┌──(kali㉿kali)-[~]
└─$ openssl passwd -1 '1234'
$1$zG9mHyJ8$QHFuEgbeBw5O8Ecc/a./O0知道 UID 改為 0 可以變 root 後,就可以來檢查那些是危險帳號。awk -F : '($3==0)' /etc/passwd關於密碼這裡也可以看到 /etc/shadow 的格式:格式登入名稱 (login name)加密密碼 (encrypted password)上次密碼變更日期 (date of last password change)密碼最短使用期限 (minimum password age)密碼最長使用期限 (maximum password age)密碼過期警告期限 (password warning period)密碼暫停使用期間 (password inactivity period)帳號過期時間 (account expiration date)保留欄位 (reserved field)如果加密密碼欄位是空的(不是!或*),那這個帳號就不需輸入密碼。root:*:19500:0:99999:7:::
kali:$y$j9T$dl4ti9p1KPx6HrZ59TPMJ/$drMOLlRW8BZmsDQ0riDlPnUDsfyIvRL4qfgODnuZVz4:19500:0:99999:7:::
nobody:*:19500:0:99999:7:::
nopass::19500:0:99999:7:::了解可以將帳號設為空密碼後,可以使用下列指令找出來。sudo awk -F : '($2=="")' /etc/shadowSet UID / sudo在 @sysxplore 的圖中,可以看到 chmod 為 4 個 8 進位(平常使用 3個),最前面數字是設 user / group / other ,與權限 x 一樣用到 bit 0(LSB),如果 bit 0 無設定,會以大寫方式呈現;如果被設定,會以小寫方式。┌──(kali㉿kali)-[~]
└─$ cp /usr/bin/sh .
┌──(kali㉿kali)-[~]
└─$ sudo chown root:root sh
┌──(kali㉿kali)-[~]
└─$ sudo chmod 7000 sh
┌──(kali㉿kali)-[~]
└─$ ll sh
---S--S--T 1 root root 125640 Jan 11 03:27 sh
┌──(kali㉿kali)-[~]
└─$ sudo chmod 7111 sh
┌──(kali㉿kali)-[~]
└─$ ll sh
---s--s--t 1 root root 125640 Jan 11 03:27 sh在執行 sh -p 後,可以看到會有 euid,egid=0,這表示執行的當下,是以 root 權限在執行。┌──(kali㉿kali)-[~]
└─$ ./sh -p
# id
uid=1000(kali) gid=1000(kali) euid=0(root) egid=0(root) groups=0(root),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),100(users),106(netdev),111(bluetooth),114(scanner),137(wireshark),140(kaboxer),1000(kali)假設今天被設 suid/sgid 的程式有弱點,又是以 root 身份執行,就能逹到提權的目的,可以使用 find 指令來查看 suid/sgid,執行時的權限,取決於 user/group 設定是什麼。find / -perm -u=s -type f
find / -perm -04000 -type f -ls 2>/dev/null
find / -perm /4000 -ls
find . -perm /2000 -ls早期 Linux 還沒有 sudo 的功能,所以做很多事都是以 root 身份執行,但有了 sudo 後,還是會遇到 sudo rm -fr / 天真浪漫的行為。從這邊可以知道 sudo 也是一個群組,如果被加到該群組的使用者,可以使用 sudo 切換權限。┌──(kali㉿kali)-[~]
└─$ cat /etc/group | grep sudo
sudo:x:27:kali而 sudo 的相關設定是在下列路徑
/etc/sudoers
/etc/sudoers.d可以看到 sudo 的格式格式使用者或群組主機授權身分執行指令清單可以看到 /etc/sudoers 本身設定了一些使用者,像是 kali 可以不用輸入密碼以 root 的身份執行 docker、openvpn 指令,而最後還會 includedir /etc/sudoers.d 目錄下的檔案,可以看到如果被加到 kali-trusted 群組可以執行任何指令,並且不用輸入密碼。┌──(kali㉿kali)-[/etc/sudoers.d]
└─$ sudo cat /etc/sudoers
...
# User privilege specification
root ALL=(ALL:ALL) ALL
kali ALL=(ALL) NOPASSWD:/usr/bin/docker, /usr/sbin/openvpn
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "@include" directives:
@includedir /etc/sudoers.d
┌──(kali㉿kali)-[/etc/sudoers.d]
└─$ sudo cat kali-grant-root
# Allow members of group kali-trusted to execute any command without a
# password prompt
%kali-trusted ALL=(ALL:ALL) NOPASSWD: ALL使用者空間 (user space) 大多數都是 Set UID/GID 或是 sudoers ,又或是服務 (Apache, MySQL, etc.) 弱點。如果都沒使用上述服務,就只能往核心空間 (kernel space) 去找相關權提漏洞利用了。遠端存取~/.ssh/authorized_keys可以使用 ssh-keygen 來產生 key pair,產生出來的檔案會在 .ssh 的目錄下。┌─[✗]─[parrot@parrot]─[~]
└──╼ $ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/parrot/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/parrot/.ssh/id_rsa
Your public key has been saved in /home/parrot/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:1boh4rkgN+zbx7EudESHWEeoIZmrG5y6F4rxTQH9Bm4 parrot@parrot
The key's randomart image is:
+---[RSA 3072]----+
| . o o.+o |
| . * o +... |
| o = + .. . |
| E + .. . |
| . + o..S o |
|. *....oo. o |
|.=.*=.oo o. |
|+ ++.+..+ |
|.o o.o+. |
+----[SHA256]-----+
┌─[✗]─[parrot@parrot]─[~/.ssh]
└──╼ $ls -alt
total 12
drwx------ 1 parrot parrot 54 1月 14 14:03 .
-rw------- 1 parrot parrot 2602 1月 14 14:03 id_rsa
-rw-r--r-- 1 parrot parrot 567 1月 14 14:03 id_rsa.pub
drwxr-xr-x 1 parrot parrot 666 1月 14 13:55 ..
-rw-r--r-- 1 parrot parrot 222 1月 14 13:55 known_hosts如果想使用 ssh-copy-id 複製到 root 目錄的話,需要 /etc/ssh/sshd_config 的 PermitRootLogin 設成 yes; 補充說明,預設是 prohibit-password,所以無法使用密碼輸入,所以在密碼錯誤後會出現錯誤。┌─[✗]─[parrot@parrot]─[~]
└──╼ $ssh [email protected]
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
Permission denied, please try again.
[email protected]'s password:
[email protected]: Permission denied (publickey,password).無法使用 root 密碼登入的情況,也可以使用 sudo cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys 將 public key 加到 authorized_keys 裡面。最後可以使用 ssh -i 進行登入。
inetdinetd(InterNET service Daemon) 又稱 Internet 超級伺服器 (super-server daemon),是早期4.3BSD的產物,現在多數的systemd已不使用,所以需要另外安裝,裝完之後會有一個/etc/inetd.conf的設定檔,可以多加一筆記錄,這裡的daytime服務使用Port 13。
當連到該主機的 Port 13 將可以取得一個 root 身份的 shell。
xinetdxinetd 為 Extended Internet Service Daemon,是 inetd 的擴展版本,一樣在 systemd 的環境下,已經不存在了,需要另行安裝。
這邊也可以發現原本 inetd 的設定是一個 /etc/inetd.conf 檔案,而 xinetd 的組態檔可以獨立組成每一個檔案。新增一個 xinetd 服務在 /etc/xinetd.d 目錄下。
直接連線主機的 5900 可以取得一個 root 的 shell。
pam.d (auth pam_access.so)/etc/pam.d/sshd 裡面會使用到 pam_access.so 的模組,而這個模組的組態會去讀取 /etc/security/access.conf 的設定。
幾乎所有的服務都會載入 common-auth,在他之前多加一行 auth [success=done default=ignore] pam_access.so 之後再到 /etc/security/access.conf 多加一組帳號。
使用免密碼登入,讓要將 /etc/ssh/sshd_config 裡面的 PermitEmptyPasswords 必需設為 yes (允許空密碼)。之後登入 abc 帳號時,就可以不用輸入密碼。
結語本文分享 Linux 攻擊場域的常見惡意手法「權限提升」、「遠端存取」的實務技巧,協助資安防禦方藉此洞悉攻擊者手法,增進防禦能量。
更多惡意手法分析、資安技術分析,歡迎訂閱我們的電子報。TeamT5 杜浦數位安全提供資安事件應變服務,自主研發之威脅鑑識分析平台 ThreatSonar 可為客戶精準鎖定資安事件受害範圍。我們的團隊具備超過 20 年的資安威脅調查、分析的經驗, 並為國際最大資安事件應變組織 FIRST 的成員。現已協助政府、金融業、科技業、製造業等廣大客戶群,迅速且有效應對資安威脅或駭客攻擊,以最小化的損失來保護關鍵資訊資產;並提供資安強化建議與事件相關威脅情資,以「知己知彼,百戰百勝」的核心概念,有效協助企業提升面對資安事件的應處能力,減少資訊系統與網路服務中斷時間,維持各項服務連續性,確保業務正常運作。歡迎聯絡我們,了解您的企業如何進行資安防禦最佳化。
https://teamt5.org/tw/contact-us/2024.01.16IR TeamShare: Related Post技術分析2023.12.17Linux 攻擊場域:SSH 登入攻擊手法初探incident response立即訂閱我們的電子報,獲得資安新知與技術文章立即訂閱
*按下此訂閱按鈕,即表示您同意杜浦數位安全的隱私權政策,並同意收到我們寄送的資訊
服務MDRIR產品ThreatSonar Anti-RansomwareThreatSonarThreatVision深暗網威脅情資產業方案金融機構醫療院所科技製造業政府機關關於 TeamT5TeamT5 團隊人才招募最新消息部落格聯絡我們聯絡我們合作夥伴媒體專區TeamT5 CSIRTCERTIFICATION隱私權與Cookies使用政策服務條款資訊安全政策© 2025 TeamT5, Inc. All Rights Reserved.TW
為提供您最佳的服務體驗,本網站使用 Cookies。當您使用本網站,即表示您同意 Cookies 技術支援。更多資訊請參閱隱私權與Cookies使用政策。我同意