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