張永剛(定西師范高等專科學(xué)校 計(jì)算機(jī)系,甘肅 定西 743000)
一種新型系統(tǒng)安全檢測(cè)軟件的設(shè)計(jì)與實(shí)現(xiàn)
張永剛
(定西師范高等??茖W(xué)校 計(jì)算機(jī)系,甘肅 定西 743000)
基于SDK平臺(tái),采用內(nèi)核檢測(cè)技術(shù),設(shè)計(jì)開(kāi)發(fā)了一種監(jiān)視注冊(cè)表值的變化;檢測(cè)病毒、木馬等惡意軟件隱藏的文件、進(jìn)程及內(nèi)核模塊等主要功能的新型的系統(tǒng)安全檢測(cè)軟件。通過(guò)進(jìn)程端口映射查找系統(tǒng)打開(kāi)的端口信息有效地查找木馬及NTFS流文件中的流病毒;通過(guò)查看BHO、LSP防止瀏覽器和網(wǎng)絡(luò)被劫持;通過(guò)查看HOOK的SSDT及SSDT Shadow恢復(fù)被修改的內(nèi)容。經(jīng)實(shí)際系統(tǒng)測(cè)試與比較表明,系統(tǒng)能有效地保障系統(tǒng)軟件的安全。
SDK平臺(tái);安全檢測(cè);設(shè)計(jì);實(shí)現(xiàn);系統(tǒng)服務(wù)描述表;輸入輸出請(qǐng)求包;根權(quán)限工具
隨著計(jì)算機(jī)在各領(lǐng)域的廣泛運(yùn)用,計(jì)算機(jī)病毒攻擊與防范技術(shù)也在不斷拓展。近年來(lái), “熊貓燒香”、“德芙”、“QQ木馬”、“灰鴿子”等木馬病毒日益猖獗,以盜取用戶密碼賬號(hào)、隱私、商業(yè)秘密為目的。調(diào)查顯示,趨利性成為計(jì)算機(jī)病毒發(fā)展的新趨勢(shì)。網(wǎng)上制作、販賣(mài)病毒、木馬的活動(dòng)日益猖獗,利用病毒、木馬技術(shù)進(jìn)行網(wǎng)絡(luò)盜竊、詐騙的網(wǎng)絡(luò)犯罪活動(dòng)呈快速上升趨勢(shì),網(wǎng)上治安形勢(shì)非常嚴(yán)峻。在2007年爆發(fā)的“熊貓燒香”,讓大量的網(wǎng)民受害。而實(shí)際上,從今天的技術(shù)角度來(lái)講,它的編程技術(shù)并不好,主要是利用一些常規(guī)的手段,比如通過(guò)U盤(pán)autorun.inf,感染.exe,.com等文件,感染后一般都不能運(yùn)行,感染共享文件夾,枚舉局域網(wǎng)電腦中的弱密碼進(jìn)行傳播,根本就沒(méi)有使用先進(jìn)的隱藏技術(shù)。而今天,還有很多技術(shù)高超,隱藏性好的病毒現(xiàn)在正在大量的電腦里呆著,監(jiān)視著電腦上的一舉一動(dòng),比如“灰鴿子”產(chǎn)生的危害就遠(yuǎn)大于“熊貓燒香”,而一般的普通用戶很難發(fā)現(xiàn)。隨著病毒的變化越來(lái)越多,病毒產(chǎn)業(yè)鏈的活動(dòng)越來(lái)越猖獗,這個(gè)現(xiàn)象變得更嚴(yán)重了,由此引發(fā)了用戶對(duì)殺毒軟件的不信任[1-2]。為了解決這些問(wèn)題,殺毒廠商一方面采用傳統(tǒng)的特征識(shí)別、加強(qiáng)引擎脫殼、加強(qiáng)樣本的收集、加快病毒特征的更新等等。這仍然是最主要的應(yīng)對(duì)方法。另一方面,就是開(kāi)發(fā)新的病毒識(shí)別技術(shù)。比如行為識(shí)別、注冊(cè)表保護(hù)、應(yīng)用程序保護(hù)等等。由于現(xiàn)在病毒木馬不像以前那樣修改特征碼來(lái)被動(dòng)的躲避殺毒軟件,他們采用RootKit技術(shù)或者其他的技術(shù)來(lái)主動(dòng)的防止被殺毒軟件發(fā)現(xiàn),或者直接把殺毒軟件關(guān)閉,就算發(fā)現(xiàn)了病毒的蹤影也很難完全清除。
由于殺毒軟件面向的是普通用戶,只能讓殺毒軟件自己去處理病毒,由于現(xiàn)在殺毒軟件的技術(shù)還沒(méi)有達(dá)到自身可以準(zhǔn)確判斷病毒,所以造成了很多的病毒逃脫了查殺。對(duì)于有一定的計(jì)算機(jī)基礎(chǔ)的用戶,需要一款軟件可以查看系統(tǒng)可疑信息,然后自己去判斷它是不是病毒,去恢復(fù)那些被病毒改變的內(nèi)核數(shù)據(jù)或者結(jié)構(gòu),通過(guò)工具和人的結(jié)合來(lái)手動(dòng)殺毒,彌補(bǔ)現(xiàn)在殺毒軟件在判斷可疑文件上的不足,從而做到真正的主動(dòng)防御。讓大部分普通用戶的軟件系統(tǒng)是不安全的,因此,急需更為高效的系統(tǒng)安全監(jiān)測(cè)軟件系統(tǒng)。
系統(tǒng)安全檢測(cè)主要是對(duì)系統(tǒng)安全有影響的關(guān)鍵位置進(jìn)行檢測(cè),如進(jìn)程、注冊(cè)表、文件等。由于病毒為了讓自己不被輕易的發(fā)現(xiàn),一般都是用了隱藏技巧,比如注入到關(guān)鍵系統(tǒng)進(jìn)程中,不創(chuàng)建進(jìn)程,并且這樣也能夠穿越防火墻。還有使用在一些HOOK技術(shù),可以在Ring3 HOOK也可以在Ring0 HOOK,可以修改IAT表,也可以修改EAT表,或者使用inline Hook。因?yàn)轵?qū)動(dòng)是分層,IRP是一層一層的傳下去的,所以可以讓設(shè)備驅(qū)動(dòng)掛接到一些關(guān)鍵驅(qū)動(dòng)(比如文件系統(tǒng))上來(lái)過(guò)濾掉對(duì)自己有危害的IRP,這樣用戶就不能檢測(cè)到自己的存在。為了能有效的檢測(cè)到一些關(guān)鍵信息,必須直接和系統(tǒng)的底層打交道,這樣就可以避免被病毒所蒙騙[3-4]。
隨著大量的Rootkit技術(shù)的出現(xiàn),HIPS(Host Intrusion Prevent System)技術(shù)也隨之出現(xiàn)。HIPS是一種能監(jiān)控電腦中文件的運(yùn)行和文件運(yùn)用了其它的文件以及文件對(duì)注冊(cè)表的修改,并報(bào)告請(qǐng)求允許的軟件。HIPS能解決病毒變種使得殺毒軟件跟不上病毒的腳步的問(wèn)題。HIPS是系統(tǒng)安全發(fā)展的一種趨勢(shì),但是HIPS并不能稱為防火墻,最多只能叫做系統(tǒng)防火墻,它不能阻止網(wǎng)絡(luò)上其他計(jì)算機(jī)對(duì)你計(jì)算機(jī)的攻擊行為。
隨著病毒制作技術(shù)水平的提高和對(duì)Windows內(nèi)核研究的進(jìn)一步的深入,現(xiàn)在的病毒技術(shù)的研究發(fā)展方向是都采用了RootKit技術(shù)來(lái)讓自己消失在用戶電腦中進(jìn)行盜號(hào),或者采用內(nèi)核技術(shù)直接把AntiAv清除掉,然后再暢通無(wú)阻地執(zhí)行自己的操作。
本文設(shè)計(jì)的系統(tǒng)正是基于此模式而進(jìn)行的,要實(shí)現(xiàn)的主要功能:
(1) ring 3下進(jìn)程管理。
(2) ring 0查看進(jìn)程,包括那些被病毒隱藏的進(jìn)程,能夠強(qiáng)制結(jié)束進(jìn)程。
(3) 直接向NTFS驅(qū)動(dòng)發(fā)送IRP來(lái)查看隱藏文件或者文件夾。
(4) 強(qiáng)制刪掉文件。
(5) 查看和恢復(fù)SSDT。
(6) 查看和恢復(fù)SSDT Shadow。
(7) 能檢測(cè)出NTFS文件流進(jìn)行。
(8) 查看系統(tǒng)打開(kāi)的TCP/UDP端口,顯示打開(kāi)這些端口的進(jìn)程。
(9) 查看LSP。
(10) 查看BHO。
(11) 系統(tǒng)內(nèi)核模塊查看。
(12) 系統(tǒng)服務(wù)管理。
(13) 系統(tǒng)監(jiān)控。
(14) 系統(tǒng)自身的主動(dòng)防御。
開(kāi)發(fā)平臺(tái)采用:Microsoft Windows XP [版本 5.1.2600]+VS2008+WDK 6001.18002。
2.1 總體思路設(shè)計(jì)
首先設(shè)計(jì)一個(gè)程序界面用來(lái)和用戶交互,對(duì)于LSP,BHO,注冊(cè)表,NTFS文件流驅(qū)動(dòng)和服務(wù)啟動(dòng),進(jìn)程的ring3查詢都直接調(diào)用SDK函數(shù),不使用驅(qū)動(dòng)。對(duì)于SSDT,SSDT Shadow,進(jìn)程的強(qiáng)殺,進(jìn)程的ring0枚舉,軟件自身的主動(dòng)防御,隱形文件的查找都設(shè)計(jì)對(duì)應(yīng)的驅(qū)動(dòng),在驅(qū)動(dòng)中進(jìn)行操作。
圖1 系統(tǒng)架構(gòu)圖
2.2 系統(tǒng)架構(gòu)圖
由于該程序要實(shí)現(xiàn)是在Ring0和Ring3下共同實(shí)現(xiàn)的,所以可以分為兩個(gè)大的模塊,一個(gè)為Ring0,Ring3.他們之間通過(guò)IOCTL來(lái)進(jìn)行同步和通信。在ring 3下又分為進(jìn)程管理,注冊(cè)表管理,網(wǎng)絡(luò)管理,系統(tǒng)模塊查詢,服務(wù)和加載驅(qū)動(dòng)的查詢,BHO管理。在Ring0下包括進(jìn)程管理,隱形文件查詢,SSDT管理,SSDT Shadow管理,系統(tǒng)的主動(dòng)防御功能模塊,該系統(tǒng)的架構(gòu)圖如圖1所示。
(1) 進(jìn)程管理:進(jìn)程管理包括常規(guī)列舉進(jìn)程,結(jié)束進(jìn)程,驅(qū)動(dòng)列舉進(jìn)程,強(qiáng)殺進(jìn)程。
(2) 注冊(cè)表管理:注冊(cè)表實(shí)現(xiàn)了和Windows自帶注冊(cè)表的操作,主要是防止系統(tǒng)注冊(cè)表被病毒IEOF,并且直接提供了查看IEOF信息和系統(tǒng)的自啟動(dòng)信息,這樣能夠方便用戶的使用。
(3) 隱藏文件查看:該功能主要是通過(guò)直接向NTFS文件系統(tǒng)發(fā)送IRP來(lái)實(shí)現(xiàn)文件的枚舉和刪除功能。
(4) 網(wǎng)絡(luò)管理:網(wǎng)絡(luò)管理分為端口進(jìn)程映射和LSP查看,端口進(jìn)程映射的功能是查看系統(tǒng)的端口,并能顯示打開(kāi)這個(gè)端口的進(jìn)程,實(shí)現(xiàn)了fport的功能。
(5) 系統(tǒng)模塊信息查詢:該功能主要是查詢加載到系統(tǒng)內(nèi)核的模塊信息,讓用戶查看病毒加載到內(nèi)核的驅(qū)動(dòng)模塊。它是通過(guò)調(diào)用系統(tǒng)未公布的NtQuerySystemInformation函數(shù)來(lái)查詢內(nèi)核空間中的模塊。
(6) NTFS流文件查看:由于Windows資源管理器的設(shè)計(jì)缺陷不能查看綁定在文件或者文件夾的流文件,是病毒常用的隱藏地方,該功能就是針對(duì)這種情況設(shè)計(jì)的,它可以顯示文件或者文件夾的流文件名。
(7) SSDT:由于SSDT是ring 3進(jìn)入ring 0的門(mén)戶,所以也是病毒和殺毒軟件的必爭(zhēng)之地。SSDT管理主要是查看那些被改變的SSDT表項(xiàng),并從NtDll.dll讀取原始SSDT,并通過(guò)重定位來(lái)得到正確的SSDT表項(xiàng)地址,用它來(lái)選擇性的恢復(fù)那些被HOOK的地方。SSDT Shadow和SSDT差不多,只是它沒(méi)有導(dǎo)出。
(8) SSDT Shadow:這個(gè)功能和SSDT差不多,只是SSDT Shadow是系統(tǒng)的另外一張表,只有在應(yīng)用程式是窗口的形式才需要使用。
(9) 主動(dòng)防御:系統(tǒng)的主動(dòng)防御主要是HOOK ZwOpenProcess函數(shù)來(lái)實(shí)現(xiàn)的,這樣可以防止別的進(jìn)程打開(kāi)被保護(hù)的進(jìn)程。
(10) 服務(wù)和驅(qū)動(dòng)加載信息:服務(wù)和驅(qū)動(dòng)加載信息主要是查看系統(tǒng)的服務(wù)程序信息,病毒經(jīng)常把自己注冊(cè)為系統(tǒng)服務(wù)程序,從而實(shí)現(xiàn)隨系統(tǒng)主動(dòng)啟動(dòng)。
(11) BHO:BHO是瀏覽器輔助對(duì)象,它屬于COM組件,安裝后,它們會(huì)成為瀏覽器的一部分,可以直接控制瀏覽器進(jìn)行指定的操作。“瀏覽器劫持”就是通過(guò)BHO的技術(shù)手段進(jìn)入系統(tǒng)的。
BHO管理是通過(guò)讀取HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorer Browser Helper Objects下的子鍵名,在通過(guò)讀取對(duì)應(yīng)CLSID的DLL來(lái)讀取DLL文件的路徑。服務(wù)和加載驅(qū)動(dòng)查看是查看系統(tǒng)中的服務(wù)程序的路徑,DisplayNa-me,自啟動(dòng)選項(xiàng),現(xiàn)在很多的病毒都把自己注冊(cè)成系統(tǒng)服務(wù),這樣就達(dá)到和系統(tǒng)一起啟動(dòng)。
由于篇幅所限,本文只列出Ring 3層查看進(jìn)程的實(shí)現(xiàn)過(guò)程見(jiàn)圖2。
該功能通過(guò)::CreateToolhelp32Snapshot(如果函數(shù)前面加了::表示API函數(shù)或者內(nèi)核函數(shù),文章的以后部分按照該約定)得到進(jìn)程快照,再調(diào)用::Process32First和::Process32Next枚舉進(jìn)程快照得到進(jìn)程的PID,和進(jìn)程名.因?yàn)閷?duì)于系統(tǒng)進(jìn)程如果不把進(jìn)程的權(quán)限D(zhuǎn)ebug權(quán)限,那么執(zhí)行打開(kāi)進(jìn)程的操作將失敗,所以調(diào)用::AdjustTokenPrivileges把本進(jìn)程提權(quán)到Debug權(quán)限,然后再調(diào)用::OpenProcess打開(kāi)進(jìn)程得到進(jìn)程句柄,最后通過(guò)進(jìn)程的句柄調(diào)用::GetModuleFileNameEx得到路徑名。
相關(guān)代碼實(shí)現(xiàn)如下:
(1) 得到進(jìn)程快照
hProcessSnap = ::CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
(2) 把本程序進(jìn)程提權(quán)到Debug權(quán)限
……
if (!::OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))//打開(kāi)進(jìn)程token
return FALSE;
Privileges.PrivilegeCount = 1;
Privileges.Privileges[0].Attributes = eable?SE_PRIVILEGE_ENABLED:0;
if (!::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&Privileges.Privileges[0].Luid))//根據(jù)PrivilegeName查詢luid
……
bResult = ::AdjustTokenPrivileges(hToken,FALSE,&Privileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL);//將權(quán)限設(shè)置到token中
(3) 枚舉進(jìn)程快照得到進(jìn)程PID和進(jìn)程名
……
if( !::Process32First( hProcessSnap, &processEntry ))
return;
……
do {……//把PID,進(jìn)程名顯示到ListView上
hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,processEntry.th32ProcessID);//打開(kāi)進(jìn)程,得到進(jìn)程句柄
::GetModuleFileNameEx(hProcess,NULL,ProcessPath,MAX_PATH);//得到進(jìn)程的路徑
……//把進(jìn)程程序的路徑顯示到ListView上
::CloseHandle(hProcess);//關(guān)掉進(jìn)程句柄
}
while( ::Process32Next( hProcessSnap, &processEntry ));//枚舉下一個(gè)進(jìn)程
::CloseHandle (hProcessSnap);//關(guān)掉進(jìn)程快照句柄
效果如下:
筆者特意選了國(guó)內(nèi)外幾款比較著名的殺毒軟件與本系統(tǒng)進(jìn)行了對(duì)比測(cè)試,其測(cè)試內(nèi)容主要包括進(jìn)程管理測(cè)試、隱形文件查找測(cè)試、SSDT檢測(cè)、主動(dòng)防御測(cè)試。其詳細(xì)測(cè)試內(nèi)容與測(cè)試結(jié)果如表1所示。
表1 本系統(tǒng)與國(guó)內(nèi)外常用軟件在4大核心功能的測(cè)試結(jié)果對(duì)比
本文設(shè)計(jì)的一種新型系統(tǒng)安全檢測(cè)軟件主要是使用大量的驅(qū)動(dòng)編程技術(shù)和Windows核心編程技術(shù),對(duì)于應(yīng)用層軟件直接使用SDK編寫(xiě)界面,驅(qū)動(dòng)使用WDK編寫(xiě)。該軟件主要的優(yōu)點(diǎn)是能夠查看隱藏進(jìn)程,隱藏文件夾,并能強(qiáng)制結(jié)束進(jìn)程,強(qiáng)制刪除文件夾,能夠查看恢復(fù)SSDT,LSP,端口進(jìn)程的映射等等,其中最大的特點(diǎn)就是能活查看和恢復(fù)SSDT Shadow,對(duì)BHO,注冊(cè)表和系統(tǒng)監(jiān)控模塊沒(méi)有進(jìn)行詳細(xì)的介紹,是因?yàn)樗麄兊脑砗蛯?shí)現(xiàn)都比較簡(jiǎn)單,BHO和注冊(cè)表就是通過(guò)一些注冊(cè)表API函數(shù)進(jìn)行讀取修改就可以,在系統(tǒng)監(jiān)控方面主要也是HOOK ZwCreateKey和ZwOpenKey,使用 PsSetCreateProcessNotifyRoutine來(lái)達(dá)到系統(tǒng)監(jiān)控的目的,原理和主動(dòng)防御,防止文件被刪除的原理一樣。
[1] 孫莉,李洋,李繼云. 基于CEP的分布式IT資源監(jiān)控事件關(guān)聯(lián)方案[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(8):303-306.
[2] 阮曉迅,劉曉玲,劉閔華,等.計(jì)算機(jī)病毒的通用防護(hù)技術(shù)[J].電氣自動(dòng)化,1998,20(2):53-54.
[3] 王斌君, 王靖亞, 杜凱選.驗(yàn)證碼技術(shù)的攻防對(duì)策研究[J].計(jì)算機(jī)應(yīng)用研究,2013.30(9):2776-2779.
[4] QU XI LONG,LIN LIN FENG,HAO ZHONG XIAO. MD3 model loading in game[J].Journal of Computers, 2012,7(2):521-527.
Design and Implementation of a New System Security Detection Software
ZHANG Yong-gang
(Department of Computer, Dingxi Teachers’ Junior College, Dingxi Gansu 743000, China)
Based on the SDK platform, by adopting kernel inspection technology, this paper designs and develops a new system security detection software for monitoring changes of registry value and detecting files, processes and kernel modules hidden by malicious software like virus and cockhorse. Port messages opened by the system are found by means of process port mapping for effective search of stream virus in cockhorse and NTFS stream files. BHO and LSP are examined to prevent hijacking of browsers and networks. HOOK’s SSDT and SSDT Shadow are checked to recover modified items. Actual system tests and comparison indicate that this system can effectively guarantee the safety of the system software.
SDK platform;security detection; design; implementation; system service descriptor table (SSDT); I/O request packet (IRP); rootkit
國(guó)家自然科學(xué)基金(60971297)及定西師范高等??茖W(xué)校校級(jí)項(xiàng)目基金(13JJ9022)資助
10.3969/j.issn.1000-3886.2015.05.010
TP311
A
1000-3886(2015)05-0027-03
張永剛(1976-)男,甘肅定西人,副教授,從事計(jì)算機(jī)教學(xué)及信息處理方面的研究工作。
定稿日期: 2014-12-03