DHCP
廣播
確認(rèn)分配IP成功
DHCP
廣播
表 2 TFTP報(bào)文類型
類 型功 能操作碼
讀文件請(qǐng)求報(bào)文
(Read ,RRQ) | 用于建立客戶端到服務(wù)器讀數(shù)據(jù)的連接 | 1 |
| 寫文件請(qǐng)求報(bào)文
(Write ,WRQ) | 用于建立客戶端到服務(wù)器寫數(shù)據(jù)的連接 | 2 |
| 文件數(shù)據(jù)報(bào)文
(Data,DATA) | 用于客戶端和服務(wù)器間傳遞數(shù)據(jù)塊 | 3 |
| 回應(yīng)報(bào)文
(,ACK) | 用于確認(rèn)已收到的數(shù)據(jù)塊 | 4 |
| 錯(cuò)誤報(bào)文
(Error,ERROR) | 用于RRQ、WRQ的錯(cuò)誤響應(yīng) | 5 |
| 選項(xiàng)確認(rèn)報(bào)文
( ,OACK) | 用于服務(wù)器超時(shí)通知客戶端 | 6 |
圖 3 TFTP報(bào)文格式
圖 4 DHCP服務(wù)器實(shí)現(xiàn)活動(dòng)圖
圖 5 TFTP服務(wù)器實(shí)現(xiàn)活動(dòng)圖
2.3 啟動(dòng)程序編譯配置
是一個(gè)功能強(qiáng)大的主引導(dǎo)記錄啟動(dòng)程序套裝,它包含幾個(gè)獨(dú)立的系統(tǒng),比如用來從CD-ROM ISO 9660文件系統(tǒng)啟動(dòng)的,用來從搭建了PXE預(yù)啟動(dòng)執(zhí)行環(huán)境的網(wǎng)絡(luò)服務(wù)器啟動(dòng)的,用來從Linux的ext2/ext3/ext4或Btrfs文件系統(tǒng)啟動(dòng)的等。系統(tǒng)編譯生成的.0啟動(dòng)程序是網(wǎng)絡(luò)啟動(dòng)過程所需的必備文件。
(1)編譯啟動(dòng)程序:本文采用 4.04版本編譯生成.0啟動(dòng)程序,通過閱讀說明文件,在 6.4系統(tǒng)基礎(chǔ)上安裝了NASM(v2.07)工具,使用make指令,完成了.0啟動(dòng)程序(./core/.0)的編譯過程。
(2)配置啟動(dòng)程序:通過分析源代碼,跟蹤定位屏蔽了.0在執(zhí)行過程中的輸出代碼,實(shí)現(xiàn)了較好的隱蔽執(zhí)行,同時(shí)修改配置文件的默認(rèn)路徑和名稱,提高了該系統(tǒng)的隱蔽性。其中涉及到的關(guān)鍵文件包括pxe.c、.asm和.inc。
2.4 啟動(dòng)程序配置文件
啟動(dòng)程序配置文件是.0啟動(dòng)程序執(zhí)行時(shí)所需的重要文件。參考配置介紹,通過反復(fù)測(cè)試精簡(jiǎn),確定如下配置內(nèi)容(假設(shè)將Linux內(nèi)核命名為,Linux系統(tǒng)封裝文件命名為pxe.bin)。
默認(rèn)啟動(dòng)LABEL為update中標(biāo)記的內(nèi)容:
Default update
配置名稱為update的啟動(dòng)選項(xiàng):
LABEL update
啟動(dòng)內(nèi)核名稱為update:
KERNEL update
追加給內(nèi)核的參數(shù):
APPEND initrd=pxe.bin
定制操作系統(tǒng)
定制操作系統(tǒng)是實(shí)施文件替換的關(guān)鍵,定制過程需要解決的主要問題:一是屏蔽啟動(dòng)過程中的屏幕提示信息;二是提供對(duì)磁盤的讀寫訪問支持;三是自動(dòng)化完成關(guān)鍵服務(wù)文件替換。
3.1 屏蔽提示信息
在網(wǎng)絡(luò)啟動(dòng)過程中屏幕顯示的內(nèi)容有:PXE客戶端提示信息(PXE客戶端代碼嵌入在主機(jī)芯片,無法控制修改),.0啟動(dòng)程序提示信息(屏蔽方法已經(jīng)在2.3節(jié)介紹)和定制操作系統(tǒng)啟動(dòng)運(yùn)行信息。其中定制操作系統(tǒng)啟動(dòng)運(yùn)行信息可以通過重新定制編譯Linux內(nèi)核實(shí)現(xiàn)。
(1)編譯內(nèi)核:內(nèi)核編譯過程在 6.4系統(tǒng)上完成,所需要的內(nèi)容包括內(nèi)核源代碼(linux-3.8.13-.txz)和編譯選項(xiàng)配置文件(-3.8.13-),兩者都可以從官方網(wǎng)站()下載。通過查閱官方資料和源代碼說明文件,按如圖 6所示步驟完成編譯過程。
圖 6 內(nèi)核編譯過程活動(dòng)圖
(2)定制內(nèi)核:定制操作系統(tǒng)在啟動(dòng)過程中的屏幕顯示又可以劃分成兩個(gè)階段,一是內(nèi)核啟動(dòng)的提示信息,二是內(nèi)核啟動(dòng)后操作系統(tǒng)的提示信息。針對(duì)不同的階段需要采取不同的措施進(jìn)行修改定制。對(duì)于內(nèi)核啟動(dòng)的提示信息,采用跟蹤定位刪除內(nèi)核源代碼輸出代碼(./ /misc.c)進(jìn)行屏蔽;對(duì)于內(nèi)核啟動(dòng)后的系統(tǒng)提示信息,采用禁用Linux內(nèi)核中顯示驅(qū)動(dòng)進(jìn)行屏蔽。
3.2 磁盤讀寫支持
NTFS(New File ,新技術(shù)文件系統(tǒng))是 NT以及之后操作系統(tǒng)的標(biāo)準(zhǔn)文件系統(tǒng)。NTFS取代了文件分配表(FAT)文件系統(tǒng),對(duì)FAT和高性能文件系統(tǒng)(HPFS)作了若干改進(jìn),例如,支持元數(shù)據(jù),使用高級(jí)數(shù)據(jù)結(jié)構(gòu)改善性能、可靠性和磁盤空間利用率等。NTFS的詳細(xì)定義屬于商業(yè)秘密,且已經(jīng)將其注冊(cè)為知識(shí)產(chǎn)權(quán)產(chǎn)品,因此Linux系統(tǒng)無法對(duì)NTFS直接提供良好的讀寫支持。
文件替換攻擊需要對(duì)目標(biāo)主機(jī)原操作系統(tǒng)中的關(guān)鍵文件進(jìn)行替換,這就要求實(shí)施攻擊的Linux系統(tǒng)必須提供對(duì)NTFS的讀寫支持。采用第三方提供的ntfs-3g驅(qū)動(dòng)軟件可以滿足該需求。為了整合ntfs-3g驅(qū)動(dòng)程序,還必須了解 Linux系統(tǒng)基本情況和解壓封裝方法。
(1)系統(tǒng)解壓封裝
Tiny Core Linux系統(tǒng)主要由Linux內(nèi)核和使用CPIO(CPIO是UNIX操作系統(tǒng)的一個(gè)文件備份程序及文件格式)歸檔的系統(tǒng)文件構(gòu)成。通過參考Tiny Core Linux官方文檔,使用如圖 7所示過程可以對(duì)CPIO歸檔文件進(jìn)行解壓和重新封裝。
圖 7 解壓和封裝CPIO活動(dòng)圖
(2)驅(qū)動(dòng)程序加載
驅(qū)動(dòng)程序加載的基礎(chǔ)是對(duì)Tiny Core Linux系統(tǒng)文件啟動(dòng)腳本進(jìn)行修改。該啟動(dòng)腳本名稱為.sh,位于系統(tǒng)文件根目錄的opt目錄下。該啟動(dòng)腳本是Tiny Core Linux系統(tǒng)為用戶靈活擴(kuò)展系統(tǒng)功能而設(shè)計(jì)的,系統(tǒng)啟動(dòng)后會(huì)自動(dòng)調(diào)用該腳本執(zhí)行。通過該腳本不僅可以直接安裝驅(qū)動(dòng),同時(shí)可以自動(dòng)化運(yùn)行預(yù)定的命令。
通過將ntfs-3g驅(qū)動(dòng)文件添加進(jìn)操作系統(tǒng)中指定目錄,配合以下命令可以完成驅(qū)動(dòng)程序自動(dòng)加載。
su -C “tce-load -i /tmp/ntfs-3g.tcz” tc
su -C “tce-load -i /tmp/samba-client.tcz” tc
3.3 文件替換實(shí)現(xiàn)
文件替換的基本原理與3.2中的驅(qū)動(dòng)程序加載相同,只需將待替換的任意程序添加進(jìn)操作系統(tǒng)中指定目錄,配合以下命令(以為例)可以完成文件替換操作和自動(dòng)關(guān)機(jī)。
# 提權(quán)加載磁盤
sudo mount /dev/sda1
# 刪除目標(biāo)文件,被劫持服務(wù)后文有介紹
rm -rf /mnt/sda1/Windows/System32/spoolsv.exe
# 實(shí)現(xiàn)文件替換
cp /tmp/spoolsv.exe /mnt/sda1/Windows/System32/spoolsv.exe
# 植入木馬服務(wù)程序
cp /tmp/svchost.exe /mnt/sda1/Windows/svchost.exe
# 系統(tǒng)自動(dòng)關(guān)機(jī)
sudo poweroff -d 5
劫持服務(wù)程序
服務(wù)(以前的NT服務(wù))是由系統(tǒng)管理的在后**成任務(wù)的應(yīng)用程序。與一般應(yīng)用程序最大的區(qū)別是它們都是在“后臺(tái)”運(yùn)行的,且一般具有更高(甚至最高)的系統(tǒng)權(quán)限本地打印機(jī)后臺(tái)處理程序服務(wù)沒有運(yùn)行,因此惡意程序經(jīng)常將自己寫成一個(gè)服務(wù)安裝在系統(tǒng)中,對(duì)操作系統(tǒng)進(jìn)行更持久的控制。
典型的服務(wù)程序由三部分組成,第一部分是 (SCM)。SCM存在于.exe中,在啟動(dòng)的時(shí)候會(huì)自動(dòng)運(yùn)行。SCM包含一個(gè)儲(chǔ)存著已安裝的服務(wù)和驅(qū)動(dòng)程序信息的數(shù)據(jù)庫(kù),通過SCM可以統(tǒng)一地、安全地管理這些信息,因此一個(gè)服務(wù)程序的安裝過程就是將自身的信息寫入這個(gè)數(shù)據(jù)庫(kù)。第二部分是服務(wù)本身。一個(gè)服務(wù)擁有能從SCM收到信號(hào)和命令所必須的特殊代碼,并且能夠在處理后將它的狀態(tài)回傳給SCM。第三部分是 (SCP)。它是一個(gè)擁有用戶界面,允許用戶開始、停止、暫停、繼續(xù),并且控制一個(gè)或多個(gè)安裝在計(jì)算機(jī)服務(wù)的Win32應(yīng)用程序。
4.1 服務(wù)劫持基本原理
服務(wù)安裝的本質(zhì)是將服務(wù)信息記錄在注冊(cè)表指定路徑下,在該路徑下還保存了若干個(gè)子鍵,每個(gè)子鍵對(duì)應(yīng)一個(gè)服務(wù)。子鍵名就是服務(wù)名,該子鍵下存在很多鍵值,不同鍵值表示服務(wù)的類型、啟動(dòng)方式、關(guān)聯(lián)程序等信息,在 7 32位系統(tǒng)上打印后臺(tái)處理服務(wù)的鍵值信息如圖 8所示。
圖 8 打印后臺(tái)處理服務(wù)注冊(cè)表鍵值信息
注冊(cè)表中的一個(gè)服務(wù)通常包含如表 3所示鍵值。其中比較重要的是、Start和Type三項(xiàng)。Start指定的服務(wù)啟動(dòng)方式通常有四個(gè)值。值為1表示由系統(tǒng)加載器啟動(dòng),通常用于啟動(dòng)內(nèi)核驅(qū)動(dòng)服務(wù);值為2表示伴隨系統(tǒng)啟動(dòng)由SCM自動(dòng)啟動(dòng);值為3表示手動(dòng)啟動(dòng),通常需要人工使用服務(wù)管理器啟動(dòng);值為4表示服務(wù)被禁用。Type指定了服務(wù)的類型,用戶層獨(dú)立進(jìn)程的服務(wù)該值為16,用戶層共享進(jìn)程的服務(wù)該值為32,內(nèi)核驅(qū)動(dòng)服務(wù)該值為1,文件過濾驅(qū)動(dòng)服務(wù)該值為2。
表 3 服務(wù)關(guān)鍵鍵值信息
鍵值名稱信 息
服務(wù)管理器中顯示的名字
描述信息
對(duì)應(yīng)的應(yīng)用程序路徑
Start
啟動(dòng)方式
Type
服務(wù)類型
服務(wù)劫持的基本原理就是將服務(wù)對(duì)應(yīng)的應(yīng)用程序替換成惡意程序,將啟動(dòng)方式設(shè)置為自啟動(dòng),再修正服務(wù)類型,即可實(shí)現(xiàn)每次系統(tǒng)啟動(dòng),惡意程序隨之啟動(dòng)。由于操作系統(tǒng)對(duì)運(yùn)行中的服務(wù)程序,尤其是系統(tǒng)關(guān)鍵服務(wù)程序保護(hù)的十分嚴(yán)格,通常意義的服務(wù)劫持只能采用修改注冊(cè)表中的鍵值信息來實(shí)現(xiàn)。而修改注冊(cè)表又有兩種具體實(shí)現(xiàn)方法:一是利用注冊(cè)表操作函數(shù)(函數(shù)),二是利用服務(wù)API(函數(shù))。兩種方法的執(zhí)行不僅需要管理員權(quán)限,同時(shí)還會(huì)觸發(fā)常見安全防護(hù)軟件報(bào)警。
筆者利用發(fā)送到目標(biāo)主機(jī)的Tiny Core Linux實(shí)施對(duì)原系統(tǒng)關(guān)鍵服務(wù)程序的直接替換劫持,由于原操作系統(tǒng)始終未啟動(dòng),被劫持的服務(wù)程序默認(rèn)啟動(dòng)方式為自啟動(dòng),因此劫持過程不會(huì)觸發(fā)任何報(bào)警、留下任何痕跡,劫持服務(wù)程序可以隨系統(tǒng)啟動(dòng)而啟動(dòng)。通過精心構(gòu)造劫持服務(wù)程序的服務(wù)信息,文件大小可以進(jìn)一步提高劫持過程的隱蔽性。
4.2 被劫持服務(wù)選擇
基于功能性和隱蔽性的雙重考慮,被劫持服務(wù)的選擇依據(jù)包括以下三個(gè)方面:一是該服務(wù)默認(rèn)啟動(dòng)方式為自啟動(dòng);二是該服務(wù)使用率非常低或幾乎不會(huì)被使用;三是該服務(wù)是系統(tǒng)安裝服務(wù),不是用戶安裝服務(wù);
打印后臺(tái)處理服務(wù)(Print )位于C:\\\目錄下,進(jìn)程名為.exe。該服務(wù)用于管理所有本地和網(wǎng)絡(luò)打印隊(duì)列及控制所有的打印工作,是 XP和 7系統(tǒng)默認(rèn)安裝服務(wù),且啟動(dòng)方式為自啟動(dòng)。當(dāng)主機(jī)不使用打印機(jī)進(jìn)行打印作業(yè)時(shí),該服務(wù)將不會(huì)被調(diào)用。因此打印后臺(tái)處理服務(wù)可以較好的滿足新型服務(wù)劫持要求,筆者選擇打印后臺(tái)處理服務(wù)為被劫持服務(wù)。
4.3 劫持服務(wù)實(shí)現(xiàn)
服務(wù)程序一般包含最基本的三個(gè)重要函數(shù):服務(wù)程序入口函數(shù)、服務(wù)入口回調(diào)函數(shù)和服務(wù)控制回調(diào)函數(shù)。服務(wù)程序入口函數(shù)的作用主要是負(fù)責(zé)初始化整個(gè)過程,通知SCM在可執(zhí)行文件中包含幾個(gè)服務(wù),并且給出每一個(gè)服務(wù)入口回調(diào)函數(shù)的地址。服務(wù)入口回調(diào)函數(shù)就是入口函數(shù)通知給SCM的每個(gè)服務(wù)啟動(dòng)的函數(shù)。服務(wù)控制回調(diào)函數(shù)的作用是配合SCM改變服務(wù)狀態(tài)。劫持服務(wù)程序?qū)崿F(xiàn)活動(dòng)圖如圖 9所示。
圖 9 劫持服務(wù)程序?qū)崿F(xiàn)活動(dòng)圖
會(huì)話隔離機(jī)制
在 XP, 2003或者更早期的操作系統(tǒng)中,所有的服務(wù)和應(yīng)用程序都是運(yùn)行在與第一個(gè)登錄到控制臺(tái)的用戶會(huì)話()中。在 Vista以后,服務(wù)的運(yùn)行從用戶會(huì)話中獨(dú)立出來,由會(huì)話0統(tǒng)一管理運(yùn)行,而用戶登錄系統(tǒng)創(chuàng)建的會(huì)話位于會(huì)話0之后(如會(huì)話1、會(huì)話2等),會(huì)話之間的資源訪問處于隔離狀態(tài),所以服務(wù)與其他用戶應(yīng)用程序?qū)o法實(shí)現(xiàn)直接通信(如圖 10所示)。當(dāng)該內(nèi)網(wǎng)滲透系統(tǒng)攻擊 Vista以后的操作系統(tǒng)時(shí),由于劫持服務(wù)啟動(dòng)的木馬服務(wù)端也處于會(huì)話0上,這將導(dǎo)致木馬服務(wù)端無法正常訪問部分用戶資源。通過查閱資料,筆者確定采用查找用戶會(huì)話ID、獲取用戶令牌,在用戶環(huán)境注入應(yīng)用程序等方案解決上述問題。會(huì)話隔離機(jī)制穿透實(shí)現(xiàn)活動(dòng)圖如圖 11所示。
圖 10 會(huì)話結(jié)構(gòu)示意圖
圖 11 會(huì)話隔離機(jī)制穿透實(shí)現(xiàn)活動(dòng)圖
存在不足
本文設(shè)計(jì)的方法繞過了操作系統(tǒng)和安全防護(hù)機(jī)制對(duì)系統(tǒng)關(guān)鍵服務(wù)的層層保護(hù)本地打印機(jī)后臺(tái)處理程序服務(wù)沒有運(yùn)行,但是也存在諸多限制:
網(wǎng)絡(luò)啟動(dòng)順序由BIOS設(shè)置,一般品牌主機(jī)默認(rèn)情況下,光盤啟動(dòng)和磁盤啟動(dòng)優(yōu)先,網(wǎng)絡(luò)啟動(dòng)只有在出現(xiàn)啟動(dòng)錯(cuò)誤時(shí)才會(huì)優(yōu)先啟動(dòng),而IBM和聯(lián)想品牌主機(jī)BIOS配置在主要啟動(dòng)順序之外,增加了自動(dòng)啟動(dòng)順序和出錯(cuò)啟動(dòng)順序,在自動(dòng)和出錯(cuò)啟動(dòng)順序中,默認(rèn)配置網(wǎng)絡(luò)啟動(dòng)優(yōu)先。這種情況下配合局域網(wǎng)遠(yuǎn)程喚醒(會(huì)觸發(fā)自動(dòng)啟動(dòng)順序)可以實(shí)現(xiàn)對(duì)IBM和聯(lián)想品牌主機(jī)的網(wǎng)絡(luò)啟動(dòng)劫持,進(jìn)而實(shí)現(xiàn)內(nèi)網(wǎng)滲透,對(duì)于其他品牌主機(jī)默認(rèn)的不支持情況,目前還沒有很好的應(yīng)對(duì)策略。另外攻擊過程需要運(yùn)行一個(gè)DNS服務(wù)器,當(dāng)網(wǎng)內(nèi)已經(jīng)存在DNS服務(wù)器時(shí),很可能導(dǎo)致攻擊失敗。由此可見,以上方法還有很多不足,需要配合其他技術(shù)予以彌補(bǔ)。
應(yīng)對(duì)措施建議
關(guān)閉遠(yuǎn)程喚醒,同時(shí)降低PXE網(wǎng)絡(luò)啟動(dòng)的優(yōu)先級(jí),從源頭上控制該攻擊的后續(xù)利用。
*本文原創(chuàng)作者:,本文屬于原創(chuàng)獎(jiǎng)勵(lì)計(jì)劃,未經(jīng)許可禁止轉(zhuǎn)載