一、Shift后門的概念
Shift后門是一種可以替換原有的sudo命令的后門,在裸機(jī)或虛擬機(jī)環(huán)境下完美工作。它可以通過惡意代碼篡改系統(tǒng)的輸入輸出,從而達(dá)到竊取密碼或者執(zhí)行其他危險的操作。
Shift后門的工作原理是在用戶執(zhí)行sudo命令時,自動按順序調(diào)用系統(tǒng)中的sudo、/usr/bin/whoami、/usr/bin/time和/bin/sh這幾個程序。而Shift后門則依靠惡意代碼將這幾個程序后門化,以達(dá)到實現(xiàn)任意命令的目的。
然而,這種后門的特點是完全不會影響sudo命令的正常功能,因此不容易被察覺和發(fā)現(xiàn),具有很高的欺騙性。
二、Shift后門的實現(xiàn)方式
Shift后門通常需要在系統(tǒng)執(zhí)行sudo命令時自動調(diào)用。這也是它被稱為"Shift"的原因,因為這個單詞在鍵盤上按下時,可以得到"sudo"的字母順序。
實現(xiàn)Shift后門的方式通常有兩種:
1. 編譯好的程序
針對特定的操作系統(tǒng)和版本,惡意攻擊者編譯出后門程序,并且將其拷貝到合適的位置。這種方式常常需要root權(quán)限才能實現(xiàn),因此很難被正常的用戶察覺到。
在實際操作中,攻擊者可以先通過其他漏洞獲取root權(quán)限,然后再執(zhí)行這個惡意程序。
2. 內(nèi)核模塊
內(nèi)核模塊是類似插件的一種機(jī)制。攻擊者可以針對特定的內(nèi)核版本編寫一個后門內(nèi)核模塊,然后配合其他工具將其插入到被攻擊目標(biāo)的系統(tǒng)中。這種方式可以避免文件被殺毒軟件查殺,從而提高攻擊者的成功率。
三、Shift后門的攻擊效果
Shift后門的攻擊效果非常顯著,它可以竊取用戶輸入的密碼,實現(xiàn)遠(yuǎn)程控制等危險操作。
1. 竊取密碼
Shift后門利用惡意代碼篡改用戶輸入的密碼,從而達(dá)到竊取密碼的目的。通常情況下,用戶輸入的密碼會在后門中被記錄下來,然后傳回到攻擊者的服務(wù)器上。攻擊者可以通過解密得到明文密碼,并且利用這些密碼完成其他的攻擊。
2. 實現(xiàn)遠(yuǎn)程控制
Shift后門在竊取密碼的同時,還能夠執(zhí)行其他惡意代碼。攻擊者可以通過這個后門直接遠(yuǎn)程操控被攻擊目標(biāo)的系統(tǒng),進(jìn)行各種危險操作。
四、Shift后門的防御方式
針對Shift后門的攻擊,有以下幾種防御方式:
1. 更新系統(tǒng)和軟件
攻擊者通常會利用系統(tǒng)或軟件中的漏洞來實現(xiàn)Shift后門的攻擊。因此,及時更新系統(tǒng)和軟件版本是最有效的防御方式之一。
2. 安裝殺毒軟件
殺毒軟件有很強(qiáng)的偵測能力,可以防御很多常見的惡意程序和后門。安裝殺毒軟件并定期對系統(tǒng)進(jìn)行全盤掃描,可以及時發(fā)現(xiàn)系統(tǒng)中的異常情況。
3. 配置sudo
在sudo的配置文件中,可以設(shè)置只允許授權(quán)用戶以某種方式執(zhí)行sudo命令。這樣可以避免未知來源的后門利用sudo命令執(zhí)行任意命令。
4. 監(jiān)控系統(tǒng)日志
及時監(jiān)控系統(tǒng)日志,可以發(fā)現(xiàn)系統(tǒng)中的異常情況。如果發(fā)現(xiàn)sudo命令經(jīng)常被執(zhí)行,但是日志中沒有對應(yīng)的用戶信息,那么很可能是被插入了Shift后門。
五、Shift后門示例代碼
#!/bin/bash
sudo(){
/usr/bin/sudo "$@"
if [ $? -ne 0 ]; then
echo "[sudo] password for $USER: "
read -s password
echo "$password" | python shift.py
/usr/bin/sudo "$@"
fi
}
上述代碼是一個簡單的Shift后門實現(xiàn)例子,它在用戶執(zhí)行sudo命令時,自動調(diào)用Python腳本,并將用戶輸入的密碼作為參數(shù)傳遞下去。對應(yīng)的Python腳本如下:
import sys
import os
SHELL_PATH = "/bin/bash"
def main():
if len(sys.argv) <= 1:
sys.exit(1)
password = sys.argv[1]
os.system("%s -c 'echo \"%s\" | /usr/bin/sudo -S /usr/bin/whoami'" % (SHELL_PATH, password))
os.system("%s -c 'echo \"%s\" | /usr/bin/sudo -S /usr/bin/time'" % (SHELL_PATH, password))
os.system("%s -c 'echo \"%s\" | /usr/bin/sudo -S /bin/sh'" % (SHELL_PATH, password))
if __name__ == '__main__':
main()