999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Rootkit進程隱藏與檢測技術研究

2016-05-14 22:04:23孟晨宇阮陽王佳偉周潔康曉鳳
軟件導刊 2016年5期

孟晨宇 阮陽 王佳偉 周潔 康曉鳳

摘要:進程(Process)是操作系統進行資源分配和調度的基本單位,是Windows系列操作系統結構的基礎。進程隱藏雖然能夠為計算機取證提供便利,但是增加了檢測系統中運行的惡意代碼的難度。在深入研究Windows進程隱藏技術的基礎上,針對常用進程隱藏技術的特點,提出幾種Windows操作系統下檢測隱藏進程的方法。這些方法能夠準確、快速地檢測操作系統中隱藏的進程。

關鍵詞:系統內核安全;進程隱藏;進程檢測;Rootkit

DOIDOI:10.11907/rjdk.161009

中圖分類號:TP306+.2

文獻標識碼:A 文章編號:1672-7800(2016)005-0188-03

0 引言

Rootkit是一個功能強大的工具包。它由一些小程序組成,能夠使攻擊者持續隱蔽地訪問計算機上的“root”用戶。即Rootkit是能夠持久、隱蔽、且可靠地運行于計算機上的一組程序或代碼。在上述Rootkit描述中關鍵詞是“隱蔽”,即隱藏代碼和數據,其中進程隱藏是Windows Rootkit技術中典型的一種。對于一些計算機取證工具來說,進程隱藏能夠為其帶來便利,同時將系統中的防護進程隱藏起來,也可以阻止惡意程序對于殺毒軟件的干擾,使防護效果更加有效。但是進程隱藏技術也是一把雙刃劍,它能夠使惡意代碼潛行在內核中,不被發現,當隱藏技術被用于惡意代碼時,會給安全帶來毀滅性的打擊。所以,準確檢測出系統隱藏進程十分必要。

1 進程隱藏技術

Rootkit所采用的大部分技術和技巧都用于在計算機上隱藏代碼和數據。絕大多數Rootkit都可實現文件、目錄和進程等信息的隱藏[1]。從隱藏時采用的手段看,進程隱藏技術機理主要歸結為兩類:一是通過修改程序執行,截獲所有訪問隱蔽資源的請求,稱為修改程序執行路徑(Modify Execution Path,MEP)技術;二是直接修改操作系統用于監控系統資源的數據,稱為直接內核對象操作(Direct Kernel Object Manipulation DKOM)技術。這兩種機理分別對應攔截掛鉤隱藏技術及直接修改內核數據隱藏技術。

1.1 攔截掛鉤(MEP)隱藏技術

所謂攔截掛鉤技術即通過掛鉤系統函數或相關處理例程,使其先轉向事先編寫好的函數處理,實現過濾參數、修改目標函數處理結果、刪除特定進程信息,從而實現進程隱藏。按照掛鉤位置不同,掛鉤攔截技術可分為用戶態掛鉤和內核態掛鉤兩類。用戶態鉤子屬于Windows操作系統3環(用戶態)下的攔截。一般情況下,3環進程使用CreateToolhelp32Snapshot等函數查詢進程列表信息。Rootkit針對此類函數設置API鉤子,在API鉤子中刪除被掛鉤函數返回的特定進程信息,從而隱藏特定進程[2]。Windows平臺下的應用程序一般都會調用Kernel32.dll中的相應函數,接著再跳轉到Ntdll.dll中的相關函數,最后由Sysenter 或 int 2E指令使調用跳轉到內核層,具體執行過程如圖1實線部分所示。通過分析Windows API調用過程得知,也可以通過掛鉤Ntdll.dll中的ZwQuerySystemInformation更好地實現進程隱藏[3]。在Windows系統中,要列出系統正在運行的所有進程信息,3環下的程序最終都會調用Ntdll.dll中的ZwQuerySystemInformation,因此在所有進程中均對Ntdll.dll中的該函數掛鉤即可實現進程隱藏。該方法幾乎是用戶態掛鉤最有效的進程隱藏方式。

內核態掛鉤常用的方法是掛鉤系統服務調用表(System Service Dispatch Table)即Hook SSDT,SSDT[4]表中的第一項是系統服務的索引號,第二項是索引對應系統服務函數在Ntoskrnl.exe 進程空間中的地址。ZwQuerySystemInformation在SSDT中的索引號為0xAD,通過該索引找到對應的函數地址,并將其修改為可過濾特定進程信息的函數地址,即可實現進程隱藏。

1.2 修改內核數據(DKOM)隱藏技術

掛鉤的隱藏技術非常容易被檢測到,而DKOM直接操縱內核數據隱藏進程極難檢測,是現階段隱藏進程最有效的方法。正常環境下,更改進程或者令牌等內核對象時需要深入到內核對象管理器中,而DKOM繞過對象管理器,從而繞過所有關于對象的常規檢測。Windows NT系列的操作系統利用可執行對象EPROCESS[5]描述進程信息。進程對象EPROCESS中有LIST_ENTRY結構成員,它包含指針FLINK和BLINK。這兩個指針分別指向當前進程描述符的前方進程和后方進程,該結構將所有進程的EPROCESS結構連接成一個雙向鏈表。通過遍歷EPROCESS結構中的雙向鏈表,將需要隱藏進程的EPROCESS從鏈表中摘去,即可實現特定進程在操作系統中的隱藏[1]。從圖2定位進程鏈表路徑圖中可以看出PsGetCurrentProcess找到當前正在運行進程的ETHREAD指針,從ETHREAD結構沿著KTHREAD結構中的指針可以找到當前進程的EPROCESS結構,然后遍歷雙向鏈表,通過進程標識符(Process Identifier,PID)或進程名定位特定進程的EPROCESS結構,以達到定位進程路徑的目的,然后再將此進程的EPROCESS從雙向鏈表中摘除,摘除后該特定進程的運行不會受到特殊影響,直接使用操作系統提供的服務已無法發現該進程。

無論是掛鉤隱藏技術,還是直接操縱內核數據隱藏方式,都有一定弊端。現階段,高效的進程隱藏方案往往結合掛鉤和直接操縱內核數據兩種方法,通過交叉使用用戶態與內核態的技術,并利用其它輔助手段,如抹掉窗口標題等,從而實現進程隱藏。總之,隱藏進程技術的最終目的是使進程隱匿于系統之中,并對進程檢測造成一定干擾。

2 隱藏進程檢測技術

對于Windows平臺下的進程隱藏檢測技術,常用的檢測方法有枚舉進程窗口、遍歷當前進程的句柄表、遍歷csrss.exe進程句柄指針和遍歷PspCidTable的句柄表等。

2.1 常規檢測技術

2.1.1 直接調用內核函數

用戶態掛鉤技術通過掛鉤系統API函數或者Ntdll.dll中導出的函數,消除相應進程信息,從而實現特定進程隱藏。所以不調用系統在3環下設置的API來發送調用請求就能排除其掛鉤干擾[3]。3環直接調用內核API是指不通過Ntdll.dll的跳轉直接進入內核,調用相應查詢函數,用戶態內核請求在Ntdll.dll中通過Sysenter或int 2E指令進入內核。用戶態需要使用內核函數枚舉系統進程時,可以直接通過Sysenter或int 2E指令偽造請求傳入內核,其具體實現方式如圖1虛線所示。該方法可以檢測所有通過用戶態掛鉤技術隱藏的進程,但對于內核掛鉤及直接操縱內核數據隱藏方法并沒有明顯效果。

2.1.2 遍歷當前進程的句柄表

EPROCESS的地址加上0x0c4,就可以得到當前進程的句柄表。進程句柄表中包含HandleTableList雙鏈指針,遍歷雙鏈可以枚舉出除 Idle以外的所有進程信息,因此可以通過遍歷當前進程 EPROCESS中的句柄表雙鏈指針得到一組進程的映像。

2.1.3 遍歷PspCidTable的句柄表

PspCidTable是獨立的句柄表,不屬于任何進程,是內核未導出的HANDLE_TABLE結構,通過它可以訪問系統的任何對象,它保存著所有進程對象指針。該句柄表在NT操作系統下采用動態分配的三層表結構。首先使用一層表結構,如果線程和進程過多,則會啟用兩層表或三層表結構。定位該表常用的方法是通過PsLookupProcessByProcessId。該函數內部會引用PspCidTable,通過查找此函數的前幾十個字節找到 PspCidTable變量,即可找到PspCidTable的地址。此后,可通過EnumHandleProcedure或PsLookupProcessByProcessId遍歷該表直接枚舉進程,從而檢測出被隱藏的進程。

2.2 其它檢測技術

2.2.1 掛鉤SwapContext函數

Windows系統中每個線程上下文的切換都由內核中的SwapContext函數來實現[6]。執行函數時,ESI中存放的是即將被換出的當前線程指針,EDI中存放的是當前即將被換入的線程的指針。根據該原理,掛鉤此函數,在鉤子函數中確認EDI所指向的線程中的KTHREAD是否指向一個位于正常雙向鏈表中的EPROCESS結構。若不是,則表明該進程是一個被DKOM隱藏的進程。因為系統切換所有線程上下文都要使用SwapContext函數,所以只要對該函數掛鉤,即可檢測隱藏進程。

2.2.2 遍歷csrss.exe進程句柄指針

Windows操作系統下子進程的服務進程Csrss.exe包含除 Idle、system、smss 以及 csrss 以外的所有進程信息。動態鏈接庫 Csrsvr.dll是其核心,幾乎所有與初始化進程相關的工作都是在其中執行的[7]。Csrsvr.dll中擁有一個指針成員CsrRootProcess,該指針指向一個包含ListLink指針成員的結構體CSR_PROCESS,指針ListLink將系統內進程連接起來形成鏈表,遍歷整個鏈表即可得到所有進程的列表。獲取未導出指針CsrRootProcess的一種有效方法是通過函數CsrLockProcessByClientId,執行時會在寄存器ESI中存入其值。導出函數的入口地址可以直接得到,在此基礎上加上相應的偏移量就能讀出 CsrRootProcess 的地址。

3 結語

Windows平臺下的進程隱藏與檢測技術是相輔相成的。進程隱藏技術一直致力于抹除操作系統中的進程信息,同時干擾進程檢測的正常工作。由于進程與系統之間存在各種各樣的內在聯系,通過挖掘這種聯系,進程檢測技術也能夠采用相應的解決方案找到隱藏的進程。這兩種技術就是在這種矛盾中互相促進,逐步發展完善的。

參考文獻:

[1]GREG HOGLUND,JAMES BUTLER.Rootkits——Windows內核的安全防護[M].韓志文,譯. 北京:清華大學出版社,2007.

[2]王雷,凌翔. Windows Rootkit進程隱藏與檢測技術[J].計算機工程,2010,36(5):144-142.

[3]潘愛民. Windows內核原理與實現[M].北京:電子工業出版社,2010.

[4]BORATE M, DABAK P, PHADKE S. Undocumented Windows NT[M].New York, NY, USA: John Wiley & Sons, Inc., 1999.

[5]RUSSINOVICH M, SOLOMON D. Microsoft Windows internals[M].New York:Microsoft Press, 2005.

[6]林衛亮,王軼駿,薛質.Win32 Rootkit 的進程隱藏檢測技術[J].信息安全與通信保密,2009(3):62-63.

[7]張登銀,陳召國.Windows平臺下Rootkit進程檢測[J].計算機技術與發展,2011,21(7):141-144.

(責任編輯:陳福時)

主站蜘蛛池模板: 最新午夜男女福利片视频| 成人午夜视频在线| 亚洲无码高清视频在线观看| 欧美亚洲一二三区| 亚洲欧美极品| 久久综合亚洲鲁鲁九月天| 69视频国产| 国产超碰在线观看| 欧美成人区| 国产人人射| 白丝美女办公室高潮喷水视频| 亚洲最黄视频| 国产精品香蕉在线观看不卡| 久久人与动人物A级毛片| 波多野结衣AV无码久久一区| 国产精品偷伦视频免费观看国产 | 久久久成年黄色视频| 在线观看精品国产入口| 天天干天天色综合网| 99精品影院| 精品无码一区二区三区电影| 国产精品无码久久久久久| 九九热视频在线免费观看| 亚洲资源站av无码网址| 亚洲日韩AV无码精品| 国产乱人乱偷精品视频a人人澡| 18禁黄无遮挡网站| 亚洲成aⅴ人在线观看| 天天操天天噜| 久久久久久久97| 亚洲男人天堂2020| 人妻熟妇日韩AV在线播放| 久久这里只有精品8| 在线a视频免费观看| 在线观看无码a∨| 99热线精品大全在线观看| 九九热视频精品在线| 国产亚洲高清在线精品99| 99久久免费精品特色大片| 国产一级一级毛片永久| 久久永久精品免费视频| 91丨九色丨首页在线播放| 青青青视频蜜桃一区二区| 日韩精品一区二区三区swag| 久久香蕉国产线看观看亚洲片| 久久精品国产精品一区二区| 久久综合色视频| 国产欧美精品午夜在线播放| 久青草国产高清在线视频| 91香蕉视频下载网站| 亚洲aaa视频| 丰满人妻一区二区三区视频| 91午夜福利在线观看精品| 欧美亚洲综合免费精品高清在线观看 | 国产素人在线| 午夜日b视频| 久久久久久高潮白浆| 国产欧美精品一区aⅴ影院| 精品无码一区二区三区在线视频| 亚洲人妖在线| 国产小视频免费| 免费在线a视频| 亚洲熟女偷拍| 九九香蕉视频| 国产欧美在线| 久久久久中文字幕精品视频| 青青青视频免费一区二区| 国产乱论视频| 欧美天堂在线| 99re热精品视频中文字幕不卡| 99激情网| 国产99视频免费精品是看6| 国产门事件在线| 成人午夜网址| 亚洲综合欧美在线一区在线播放| 国产福利观看| 国产成人91精品| 久久精品国产电影| 亚洲一区波多野结衣二区三区| 国产丰满成熟女性性满足视频| 国产av色站网站| 亚洲AV电影不卡在线观看|