那么什么是“主動(dòng)防御”,它的實(shí)現(xiàn)技術(shù)又是怎樣的呢?本人在這里簡(jiǎn)單獻(xiàn)丑一下,說(shuō)得不對(duì)的地方扔鞋砸雞蛋!
所謂“主動(dòng)防御”,就是全程監(jiān)視進(jìn)程的行為,一但發(fā)現(xiàn)“違規(guī)”行為,就通知用戶,或者直接終止進(jìn)程。它類似于警察判斷潛在罪犯的技術(shù),在成為一個(gè)罪犯之前,大多數(shù)的人都有一些異常行為,比如“性格孤僻,有暴力傾向,自私自利,對(duì)現(xiàn)實(shí)不滿”等先兆,但是并不是說(shuō)有這些先兆的人就都會(huì)發(fā)展為罪犯,或者罪犯都有這些先兆。因此“主動(dòng)防御”并不能100%發(fā)現(xiàn)病毒,它的成功率大概在60%-80%之間。如果再加上傳統(tǒng)的“特征碼技術(shù)”,幾乎可以發(fā)現(xiàn)100%的惡意程序了。在國(guó)外,諾頓,Kaspersky,McAfee等等殺毒巨頭,都已經(jīng)向“主動(dòng)防御”+“特征碼技術(shù)”過(guò)渡了,這是殺毒軟件的必然發(fā)展趨勢(shì)。
防火墻是一個(gè)運(yùn)用“主動(dòng)防御”技術(shù)的典型例子,大家都用過(guò)防火墻了,對(duì)于防火墻經(jīng)常詢問(wèn)用戶是否放行一個(gè)進(jìn)程訪問(wèn)網(wǎng)絡(luò),或者有不明連接進(jìn)入本機(jī)而發(fā)出警告是否印象深刻呢?其實(shí)防火墻就是在全程監(jiān)視進(jìn)程的網(wǎng)絡(luò)行為,一但發(fā)現(xiàn)違反規(guī)則的行為就發(fā)出警告,或者直接根據(jù)用戶設(shè)定拒絕進(jìn)程訪問(wèn)網(wǎng)絡(luò)。當(dāng)然,現(xiàn)在的防火墻一般都把系統(tǒng)網(wǎng)絡(luò)進(jìn)程(比如services.exe,svchost.exe,lsass.exe等)記在“受信名單”里,這些進(jìn)程是默認(rèn)允許訪問(wèn)網(wǎng)絡(luò)的,如果禁止的話,操作系統(tǒng)就不正常了,這也是現(xiàn)在很多病毒和木馬都喜歡遠(yuǎn)程注入這些系統(tǒng)進(jìn)程以突破防火墻而訪問(wèn)網(wǎng)絡(luò)的原因。
下面重點(diǎn)說(shuō)一下“主動(dòng)防御”的實(shí)現(xiàn)技術(shù)。大家都寫過(guò)程序,知道在一個(gè)程序里如果要實(shí)現(xiàn)自己的功能就必須要通過(guò)接口調(diào)用操作系統(tǒng)提供的功能函數(shù),在DOS里幾乎所有的系統(tǒng)功能或第三方插件都是通過(guò)中斷提供的,在WINDOWS里一般是通過(guò)DLL里的API提供,也有少數(shù)通過(guò)INT
2E或SYSENTER提供。一個(gè)進(jìn)程有怎么樣的行為,通過(guò)看它調(diào)用了什么樣的API就大概清楚了,比如它要讀寫文件就必然要調(diào)用CreateFile(),OpenFile(),NtOpenFile(),ZwOpenFile()等函數(shù),要訪問(wèn)網(wǎng)絡(luò)就必然要使用Socket函數(shù)。因此只要掛接系統(tǒng)API(盡量掛接RING0層的API,如果掛接RING3層的API將有可能被繞過(guò)),就可以知道一個(gè)進(jìn)程將有什么動(dòng)作,如果有危害系統(tǒng)的動(dòng)作該怎么樣處理等等。例如瑞星殺毒,大家可以在它的安裝目錄里找到幾個(gè)驅(qū)動(dòng)文件,其實(shí)這些驅(qū)動(dòng)就是掛接了ntoskrnl.exe,ndis.sys等系統(tǒng)關(guān)鍵模塊里的API,從而對(duì)進(jìn)程的普通行為,網(wǎng)絡(luò)行為,注冊(cè)表行為進(jìn)行監(jiān)視的。
最后讓我們?cè)O(shè)想一下一個(gè)“主動(dòng)防御”型殺毒軟件的一般流程:通過(guò)掛接系統(tǒng)建立進(jìn)程的API,殺毒軟件就在一個(gè)進(jìn)程建立前對(duì)進(jìn)程的代碼進(jìn)行掃描,如果發(fā)現(xiàn)SGDT,SIDT,自定位指令(一般正常軟件不會(huì)有這些指令),就提示,如果用戶放行,就讓進(jìn)程繼續(xù)運(yùn)行;接下來(lái)監(jiān)視進(jìn)程調(diào)用API的情況,如果發(fā)現(xiàn)以讀寫方式打開(kāi)一個(gè)EXE文件,可能進(jìn)程的線程想感染PE文件,就發(fā)出警告;如果收發(fā)數(shù)據(jù)違反了規(guī)則,發(fā)出提示;如果進(jìn)程調(diào)用了CreateRemoteThread(),則發(fā)出警告(因?yàn)镃reateRemoteThread()是一個(gè)非常危險(xiǎn)的API,正常進(jìn)程很少用到,倒是被病毒木馬用得最多)。...。可以想象,未來(lái)我們運(yùn)行程序可能要被提示多次,訪問(wèn)網(wǎng)絡(luò)也被提示多次,各種各樣的提示將大多數(shù)人搞的昏頭轉(zhuǎn)向。想安全就要管嚴(yán),放松就不安全了!