企業資安防禦的關鍵點:暗網情資>>>立即了解>>>
技術分析

Linux 攻擊場域:常見惡意手法

2024.01.16GSS & IR Team
Share:
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/shadow

Set 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 裡面。
1_linux-attack-method-analysis-on-common-malicious-attack-methods.png
最後可以使用 ssh -i 進行登入。 2_linux-attack-method-analysis-on-common-malicious-attack-methods.png

inetd

inetd(InterNET service Daemon) 又稱 Internet 超級伺服器 (super-server daemon),是早期4.3BSD的產物,現在多數的systemd已不使用,所以需要另外安裝,裝完之後會有一個/etc/inetd.conf的設定檔,可以多加一筆記錄,這裡的daytime服務使用Port 13。
3_linux-attack-method-analysis-on-common-malicious-attack-methods.png
當連到該主機的 Port 13 將可以取得一個 root 身份的 shell。 4_linux-attack-method-analysis-on-common-malicious-attack-methods.png

xinetd

xinetd 為 Extended Internet Service Daemon,是 inetd 的擴展版本,一樣在 systemd 的環境下,已經不存在了,需要另行安裝。 這邊也可以發現原本 inetd 的設定是一個 /etc/inetd.conf 檔案,而 xinetd 的組態檔可以獨立組成每一個檔案。
5_linux-attack-method-analysis-on-common-malicious-attack-methods.png
新增一個 xinetd 服務在 /etc/xinetd.d 目錄下。 6_linux-attack-method-analysis-on-common-malicious-attack-methods.png
直接連線主機的 5900 可以取得一個 root 的 shell。 7_linux-attack-method-analysis-on-common-malicious-attack-methods.png

pam.d (auth pam_access.so)

/etc/pam.d/sshd 裡面會使用到 pam_access.so 的模組,而這個模組的組態會去讀取 /etc/security/access.conf 的設定。 8_linux-attack-method-analysis-on-common-malicious-attack-methods.png
幾乎所有的服務都會載入 common-auth,在他之前多加一行 auth [success=done default=ignore] pam_access.so 之後再到 /etc/security/access.conf 多加一組帳號。 9_linux-attack-method-analysis-on-common-malicious-attack-methods.png
使用免密碼登入,讓要將 /etc/ssh/sshd_config 裡面的 PermitEmptyPasswords 必需設為 yes (允許空密碼)。
之後登入 abc 帳號時,就可以不用輸入密碼。 10_linux-attack-method-analysis-on-common-malicious-attack-methods.png

結語

本文分享 Linux 攻擊場域的常見惡意手法「權限提升」、「遠端存取」的實務技巧,協助資安防禦方藉此洞悉攻擊者手法,增進防禦能量。 更多惡意手法分析、資安技術分析,歡迎訂閱我們的電子報。


TeamT5 杜浦數位安全提供資安事件應變服務,自主研發之威脅鑑識分析平台 ThreatSonar 可為客戶精準鎖定資安事件受害範圍。我們的團隊具備超過 20 年的資安威脅調查、分析的經驗, 並為國際最大資安事件應變組織 FIRST 的成員。
現已協助政府、金融業、科技業、製造業等廣大客戶群,迅速且有效應對資安威脅或駭客攻擊,以最小化的損失來保護關鍵資訊資產;並提供資安強化建議與事件相關威脅情資,以「知己知彼,百戰百勝」的核心概念,有效協助企業提升面對資安事件的應處能力,減少資訊系統與網路服務中斷時間,維持各項服務連續性,確保業務正常運作。
歡迎聯絡我們,了解您的企業如何進行資安防禦最佳化。 https://teamt5.org/tw/contact-us/
2024.01.16GSS & IR Team
Share:

Related Post

為提供您最佳的服務體驗,本網站使用 Cookies。當您使用本網站,即表示您同意 Cookies 技術支援。更多資訊請參閱隱私權與Cookies使用政策。