專利名稱:計算機安全啟動的方法
技術領域:
本發(fā)明涉及一種計算機安全啟動的方法,特別是一種在計算機Windows系統(tǒng)上安全啟動的方法。
背景技術:
目前,計算機病毒泛濫,一些人為了獲取非法利益,在別人的計算機里非法安裝各種惡意程序,包括木馬后門、病毒、間諜軟件等。這些非法的惡意程序在計算機啟動的時候自動運行,監(jiān)控計算機的操作,竊取計算機用戶的私隱、銀行卡密碼和執(zhí)行其它各種有害的操作,給計算機用戶的工作和生活帶來了麻煩。由于計算機軟件存在大量的漏洞,導致計算機很容易被感染上各種惡意程序,給用戶在使用計算機時造成了不便和損失。人們想盡了各種辦法來查找自動運行的惡意程序,至今仍然沒有一個有效的方法。另一方面,判斷一個程序是否為惡意程序的方法也存在很多問題,傳統(tǒng)的殺毒軟件判斷病毒的方法采用二進制的特征碼識別,這種識別方法已經不能有效的對付新出現的惡意程序。因為現在的病毒,傳播速度快、變種多,殺毒軟件廠商都是通過收集病毒樣本提取特征碼的方法來查殺病毒,扮演著事后修補的角色。而類似木馬后門的病毒變種多、針對性強、樣本難以獲取,依賴樣本特征碼的殺毒軟件往往無法有效查殺這一類的病毒。
發(fā)明內容
本發(fā)明的目的是提供一種計算機安全啟動的方法,要解決的技術問題是識別惡意程序和防止惡意程序的運行。
本發(fā)明采用以下技術方案一種計算機安全啟動的方法,包括以下步驟一、在計算機的應用層和驅動層分別安裝主界面組件和驅動組件;二、驅動組件記錄有計算機啟動過程中運行的所有進程的名稱,主界面組件對驅動組件記錄下來的已運行進程進行掃描分析,確定安全進程;三、啟動計算機時,驅動組件被計算機的CPU優(yōu)先加載運行,不列在安全進程中的程序被判斷為惡意程序,被驅動組件攔截,不執(zhí)行運行。
本發(fā)明的方法在計算機第一次啟動時,驅動組件記錄下計算機啟動過程中運行的所有進程的名稱,并存儲;計算機啟動完成后,主界面組件對驅動組件記錄下來的已運行進程進行掃描分析,確定安全進程。
本發(fā)明的主界面組件對驅動組件記錄下來的已運行程序使用數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析的方法進行掃描分析。
本發(fā)明的驅動組件記錄下計算機啟動過程中運行的所有進程的名稱時,以名稱列表方式,存儲到硬盤中的已運行進程列表中。
本發(fā)明的方法在掃描分析時,使用打分的方法表示危險值,每個掃描分析步驟都得到一個危險分數值,主界面組件把等于0分的進程記錄到安全程序列表中。
本發(fā)明的驅動組件通過返回值攔截惡意程序。
本發(fā)明的主界面組件具有人機交互模塊、發(fā)送消息給驅動組件進行通信的模塊、掃描分析識別惡意程序模塊。
本發(fā)明的驅動組件攔截是通過創(chuàng)建進程處理來代替計算機中原有的創(chuàng)建進程處理實現的。
本發(fā)明的安全程序簽名庫驗證采用掃描分析識別惡意程序模塊把待分析程序的特征碼與安全程序簽名庫里的特征碼逐一比較,如果有相同的特征碼,就把該待分析程序名稱記錄到安全程序列表,肯定該程序是正常程序。
本發(fā)明的靜態(tài)行為特征碼分析采用分析整個待驗證程序文件的大小、資源及創(chuàng)建日期、驗證文件的可移植的執(zhí)行體信息、版本信息、可移植的執(zhí)行體結構的導入表信息、區(qū)段信息、進程信息和文件名稱,經比較給出危險值,然后把危險值累加,把最終危險值為0的程序名稱記錄到安全程序列表。
本發(fā)明與現有技術相比,驅動組件被計算機的CPU優(yōu)先加載運行,在計算機啟動過程中攔截惡意程序,對正常的程序并不攔截,主界面組件對驅動組件記錄下來的已運行程序采用數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析判斷方法判斷一個程序是否為惡意程序,保證了計算機系統(tǒng)的正常工作,又可以有效地清除計算機系統(tǒng)啟動過程中自動運行的惡意程序。
圖1是本發(fā)明實施例的流程圖。
圖2是本發(fā)明實施例計算機啟動流程圖。
圖3是本發(fā)明實施例計算機重啟動流程圖。
圖4是本發(fā)明實施例掃描識別惡意程序流程圖。
圖5是本發(fā)明實施例編輯流程圖。
圖6是本發(fā)明實施例計算機啟動過程中攔截處理流程圖。
圖7是本發(fā)明進程攔截流程圖。
圖8是本發(fā)明實施例重新啟動計算機的界面圖。
具體實施例方式
下面結合附圖和實施例對本發(fā)明作進一步詳細說明。名詞定義,進程為一個正在運行的程序的實例。惡意程序對計算機系統(tǒng)有害的程序,包括了病毒程序、木馬后門和間諜程序等。驅動組件是一個驅動程序,驅動程序運行在系統(tǒng)的底層,對系統(tǒng)有很高的控制權限,可以看作是操作系統(tǒng)的一部分。主界面組件為主界面程序,主要用來處理人機交互,在Windows系統(tǒng)中,主界面組件一般是以窗口的形式與用戶交互,使用者可以用鼠標和鍵盤操作,完成所需的任務。
本發(fā)明的計算機安全啟動的方法,使用計算機配置為CPU奔騰400MHz或者更高,內存64MB以上,顯示卡SVGA16位色以上的顯示模式,硬盤300MB以上,操作系統(tǒng)為Windows 2000/Windows XP/Windows2003,首先在計算機的應用層和驅動層分別安裝主界面組件和驅動組件。主界面組件包括(1)人機交互模塊部分,如圖8所示,采用Windows的窗口,通過窗口內的一個按鈕與用戶交互;(2)與驅動組件相互通信的模塊部分,主界面組件與驅動組件建立消息通道,以發(fā)送消息給驅動組件的方式控制驅動組件完成記錄進程信息和攔截進程啟動的的功能;(3)掃描分析識別惡意程序模塊部分,通過掃描判斷一個程序是否為惡意程序,具體的掃描方法包括了順序進行的數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析,掃描過程中使用分數表示危險值,把每一項掃描得到的分數累加,掃描完成后,根據最終的分數判斷被掃描程序的危險度。
驅動組件用于攔截所有程序的運行,并記錄所運行進程的名稱到設置在硬盤的已運行進程的列表記錄中,攔截程序運行是通過創(chuàng)建進程處理來代替計算機中原有的創(chuàng)建進程處理的功能實現的。
如圖1所示,本發(fā)明的計算機安全啟動的方法,包括以下步驟一、在計算機的應用層和驅動層分別安裝主界面組件和驅動組件;二、啟動計算機時,驅動組件以名稱列表方式記錄下計算機啟動過程中運行的所有進程的名稱,存儲到硬盤中的已運行進程列表中;三、計算機啟動完成后,主界面組件對驅動組件記錄下來的已運行程序列表順序使用數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析的方法進行掃描分析,使用打分的方法表示危險值,每個掃描分析步驟都得到一個危險分數值,主界面組件把等于0分的程序記錄到安全程序列表中;四、重新啟動計算機,不在安全程序的列表中被判斷為惡意程序,被驅動組件通過返回值攔截,不執(zhí)行運行。
本發(fā)明的計算機安全啟動的方法由于在計算機的驅動層中安裝了驅動組件,在計算機啟動過程中,驅動組件被計算機的CPU優(yōu)先加載運行,運行之后,通過替換監(jiān)控所有新的進程創(chuàng)建。如圖2所示,計算機啟動的時候,驅動組件運行,驅動組件使用自身的創(chuàng)建進程處理代替計算機原有的進程,計算機創(chuàng)建各個新的進程時,驅動組件記錄下各個被創(chuàng)建的進程名稱,以列表的方式存儲在已運行進程列表記錄里。如圖3所示,計算機重新啟動的時候,驅動組件根據硬盤中保存在安全程序列表里的進程名稱對新創(chuàng)建的進程名稱作字符串比較,不在啟動列表中的程序都直接終止該進程,通過返回值來不允許創(chuàng)建該進程,只有進程名稱在安全程序列表中的程序才允許創(chuàng)建進程。計算機系統(tǒng)啟動完成后,主界面組件發(fā)送停止攔截的命令給驅動組件,驅動組件停止阻止創(chuàng)建進程的運行,計算機系統(tǒng)的控制權通過放過被阻止的進程來交給用戶。計算機的驅動層安裝驅動組件之后,每次啟動計算機,驅動組件會記錄下運行的程序名稱到已運行進程列表記錄,完成了安全啟動的第一次啟動,這樣可以省略掉第一次啟動計算機的過程,僅僅需要執(zhí)行第二次的啟動,簡化了用戶使用安全啟動的步驟。
主界面組件掃描識別惡意程序使用的掃描方法包括了數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析。這樣做的目的是首先排除設置在計算機操作系統(tǒng)中認為正常的程序,掃描分析模塊的掃描功能,再根據靜態(tài)行為特征碼對比分析該程序,得到一個危險值,危險值是以分數來計算,分數越大,該程序的危險度就越高,然后把危險值為0的程序名稱存儲在注冊表的安全程序列表中。如圖4所示,主界面組件掃描分析惡意程序的流程是先分析數字簽名,再分析安全程序簽名庫,最后分析靜態(tài)行為特征碼。
計算機的中央處理器讀取待掃描文件,通過讀取方式進行比較,首先驗證惡意程序列表,惡意程序列表為人工收集提取的特征碼的集合,保存在硬盤中,通過讀取硬盤中的數據來進行比較,如果中央處理器讀取待掃描文件的特征碼在惡意程序列表里面,說明該程序已經是惡意程序,危險值給100分,表示比較危險,沒有必要再往下掃描,掃描結束。
數字簽名是Windows操作系統(tǒng)提供的驗證某個文件是否含有唯一確定簽名的一項功能。Windows操作系統(tǒng)里面的每一個程序的數據上都有微軟的數字簽名,數字簽名的值是唯一的,它可以證明該程序是正常的安全程序。如果待分析程序含有微軟的數字簽名,就把該程序名稱記錄到安全程序列表里面,掃描結束,如沒有數字簽名,進行安全程序簽名庫驗證。
安全程序簽名庫是由人工通過收集的安全程序的特征碼集合,以列表的方式存儲在安全程序簽名庫文件里,中央處理器把常用的軟件用文本收集起來,通過分析驗證過是正常程序之后,提取這些正常程序的文件的特征碼,集合在一起。主界面組件的掃描分析識別惡意程序模塊把待分析程序的特征碼與安全程序簽名庫里的特征碼逐一比較,如果有相同的特征碼,就把該待分析程序名稱記錄到安全程序列表,肯定該程序是正常程序,掃描結束。
掃描惡意程序方法中的靜態(tài)行為特征碼分析采用下面的規(guī)則順序,通過比較來給出危險值,然后把危險值累加,把最終危險值為0的程序名稱記錄到安全程序列表,然后掃描結束。
1、計算機的中央處理器判斷分析整個待驗證文件的大小,給出打分值并保存在內存中,然后累加,當分值超過100時判斷為惡意程序,掃描結束。一個正常的程序,或者一些大型的軟件,一般都不會太小,而只有病毒或木馬為了傳輸的方便,一般會比較小。
1.1、待驗證文件小于1KB時,加20分,記入并保存在內存中;1.2、待驗證文件小于50KB時,加15分;1.3、待驗證文件小于100KB時,加10分;1.4、待驗證文件小于200KB時,加5分;1.5、待驗證文件大于500KB時,減5分;1.6、待驗證文件大于1024KB時,減20分。
2、計算機的中央處理器判斷分析待驗證文件的資源和創(chuàng)建日期,給出打分值記入并存儲在內存中,然后累加,當分值超過100時判斷為惡意程序,掃描結束。一般的病毒程序都不會有窗體、圖標和聲音等資源,就算有,也是很少,所以在這里對資源和創(chuàng)建日期比較敏感的信息進行分析。
2.1、中央處理器判斷分析待驗證文件的資源數,將結果記入并存儲在內存中,資源數少于等于5,則加5分;2.2、中央處理器判斷分析字符串,當文件小于500K時,減10分;2.3、中央處理器判斷分析待驗證文件的創(chuàng)建日期為一天以內,加5分。
3、中央處理器判斷分析待驗證文件的可移植的執(zhí)行體PE信息,以確定待驗證文件是否被加殼,若加殼危險值加50分,記入并存儲在內存中。
3.1、中央處理器判斷待驗證程序入口點所在的段,是不是標準的段。正常程序的代碼段入口點,都在code,.code名字的代碼段中,如果不是的話,認為都是加殼;3.2、中央處理器判斷待驗證程序進口點的代碼是否與殼特征碼相同。計算機的編譯器編譯后生成的入口點的代碼都是相同的,加殼工具也是如此,因此根據一個程序的入口點代碼與特征碼庫中的殼特征進行比較,就能判斷是否被加殼的程序;3.3、中央處理器分析待驗證程序的導入函數,并確定待驗證文件是否被加殼。如分析待驗證程序敏感的四個API函數,當導入表內容中只有兩個以上,六個以下的API函數,并且與六個api函數相符合,表明待驗證程序被加殼。常見的五個敏感的API函數“VirtualAlloc”、“VirtualFree”、“LoadLibraryA”、“LoadLibraryW”和“GetProcAddress”,這五個API函數是加殼常用的,VirtualAlloc和VirtualFree用于進行內存的分配和釋放,LoadLibraryA和LoadLibraryW用于加載DLL動態(tài)鏈接庫,GetProcAddress用于從LoadLibray加載的DLL動態(tài)鏈接庫中,獲取函數的入口點指針。
4、計算機的中央處理器分析待驗證程序文件版本信息,給出打分值。一般正常的程序都會有開發(fā)商的版本信息,如公司名、版本號、版權信息和描述字符,大部分的病毒程序都不會有這些信息,僅僅有小部分病毒會偽造版本信息,中央處理器將分析判斷結果記入并存儲在內存中,然后繼續(xù)掃描。
4.1、待驗證程序文件中沒有版本信息,加8分;4.2、待驗證程序文件中沒有公司名稱的加2分;4.3、待驗證程序文件中沒有版權信息加2分;
4.4、待驗證程序文件中沒有描述信息,或描述字符少于5個,加2分;4.5、文件公司名稱為微軟件的,并且該文件被加殼,加10分。
5、計算機的中央處理器分析待驗證程序文件的可移植的執(zhí)行體PE結構的導入表信息,對動態(tài)連接庫DLL和其導入函數進行比較識別,然后將分析判斷結果記入并存儲在內存中,然后繼續(xù)掃描,給出打分值。
5.1、導入表不完整,如果中央處理器讀取文件頭或是導入表出錯,通過中央處理器判斷,直接給該程序加50分;5.2、中央處理器分析DLL信息,是否存在少于或者等于2個以上非微軟DLL導入表中加載的非微軟模,塊超過2個,每個減去20分;5.3、導入表中存在與網絡相關的模塊,加10分,中央處理器分析待驗證程序文件中是否存在網絡相關的DLL,如WPCAP,一個用于攔截數據包的開發(fā)包的DLL,加5分;5.4、中央處理器分析待驗證程序文件中是否存在文件相關的應用程序編程接口API,如CreateFile,加5分;如果程序被加殼,就不分析API導入表中含有危險接口,即寫文件、創(chuàng)建進程和網絡訪問的接口調用,每個加5分;5.5、如果待驗證程序文件是VB(Visual Basic)程序,中央處理器分析判斷是否含有文件操作,而且使用網絡控件,加10分。
6、計算機的中央處理器分析待驗證程序文件的區(qū)段信息,給出打分值。正常的程序非代碼段的大小大約是代碼段的10倍以內,如果超過10倍的話,有可能是一些打包了病毒,或是被病毒感染的程序,中央處理器把除了代碼段之外的所有段都加起來,再比較大小,即它們與代碼段的大小相差多少,這樣中央處理器將分析判斷結果記入并存儲在內存中,然后繼續(xù)掃描。
6.1、段表不完整,加10分;6.2、非代碼段是代碼段的100倍以上,加10分;6.3、非代碼段是代碼段的80倍以上,加8分;6.4、非代碼段是代碼段的60倍以上,加6分;6.5、非代碼段是代碼段的40倍以上,加4分;6.6、非代碼段是代碼段的20倍以上,加2分;6.7、非代碼段是代碼段的10倍以上,加1分。
7、計算機的中央處理器分析進程信息,將分析判斷結果記入并存儲在內存中,然后繼續(xù)掃描,給出打分值。
7.1、待驗證進程名稱如果是“svchost.exe”,“l(fā)sass.exe”,“winlogon.exe”,“services.exe”,“Msimn.exe”,“msnmsgr.exe”這六個進程中的其中一個,加5分;7.2、待驗證程序文件在操作系統(tǒng)的安裝目錄下,加10分;7.3、待驗證程序文件在%system%目錄下,加10分;7.4、待驗證程序文件的路徑是網絡路徑,加5分;7.5、中央處理器分析待驗證進程與如下關鍵進程的名字的相似度,達到80%,加10分“conime”,“svchost”,“services”,“winlogon”,“explorer”,“l(fā)sass”,“internat”,“smss”;7.6、分析創(chuàng)建的進程名稱的后綴是否是“DLL”,如果是,加20分。
8、計算機的中央處理器分析待驗證程序文件的文件名稱,給出打分值。名,對于正常的程序,一般文件名都不會超過32個,并且其中一般也不會超有2個以上的空格,也不會有中文或是#、$、@和%這些特殊字符,如果符合了下面這些條件的話,那就說明這個程序有可能是有問題的程序,中央處理器將分析判斷結果記入并存儲在內存中,然后繼續(xù)掃描。
8.1、文件名超長,對大于32個字符,加5分;8.2、文件名中含有3個以上的空格,加5分;8.3、文件名中含有特殊字符,如中文符號,每個字符加1分;8.4、文件名分析分數高于10分,則設為10分。
如圖5所示,根據計算機掃描的結果,使用者可以編輯修改主界面程序掃描的結果,使用者手動設置掃描結果列表中的某個的程序為惡意程序或者正常程序。
如圖6所示,在計算機啟動過程中,首先加載驅動組件,先給該程序創(chuàng)建進程,然后調度該進程,使進程運行起來。驅動組件替換計算機中原有的創(chuàng)建進程處理功能為驅動組件本身的處理。在計算機創(chuàng)建進程的時候,驅動組件會先對被創(chuàng)建的進程作以下處理1、啟動進程是否為操作系統(tǒng)進程,操作系統(tǒng)進程是計算機啟動必須運行的進程,絕對不能攔截,否則會使得計算機系統(tǒng)不能正常工作,所以要允許操作系統(tǒng)程序的進程運行;2、判斷是否為正常程序列表里面的程序,如果是正常程序列表里面的程序,就允許創(chuàng)建進程;3、禁止其它所有進程的直接創(chuàng)建。
在正常情況下,計算機系統(tǒng)啟動完成后,驅動組件停止自動攔截,但是考慮到有可能會出現各種問題,導致驅動組件一直處于攔截狀態(tài),這樣就會造成計算機無法正常使用,所以在驅動組件要有一個停止自動攔截的方法如果主界面程序已經運行,或者驅動組件自身運行之后定時檢測,如果驅動組件檢測到自身運行超過5分鐘,驅動組件就停止攔截,使計算機可以正常運行。
如圖7所示,本發(fā)明驅動組件實現進程攔截的方法是使用創(chuàng)建進程處理代替計算機中原有的創(chuàng)建進程處理。首先驅動組件在初始化的時候,計算機的中央處理器獲取原有處理函數的ID號,找到ID號對應的函數內存地址,然后采用修改地址屬性的方法,把函數地址設為可寫,修改函數地址,改寫該地址為驅動組件里面的處理函數地址,進行替換。驅動組件的處理函數開始做出判斷,決定阻止還是允許該進程的運行,計算機啟動完成后恢復函數地址的不可寫。要實現進程攔截可以有多種方法,本發(fā)明采用的方法是替換ZwCreateProcess、ZwCreateProcessEx、ZwCreateThread、ZwResumeThread這四個創(chuàng)建進程使用的內核處理函數。
權利要求
1.一種計算機安全啟動的方法,包括以下步驟一、在計算機的應用層和驅動層分別安裝主界面組件和驅動組件;二、驅動組件記錄有計算機啟動過程中運行的所有進程的名稱,主界面組件對驅動組件記錄下來的已運行進程進行掃描分析,確定安全進程;三、啟動計算機時,驅動組件被計算機的CPU優(yōu)先加載運行,不列在安全進程中的程序被判斷為惡意程序,被驅動組件攔截,不執(zhí)行運行。
2.根據權利要求1所述的計算機安全啟動的方法,其特征在于所述計算機第一次啟動時,驅動組件記錄下計算機啟動過程中運行的所有進程的名稱,并存儲;計算機啟動完成后,主界面組件對驅動組件記錄下來的已運行進程進行掃描分析,確定安全進程。
3.根據權利要求2所述的計算機安全啟動的方法,其特征在于所述主界面組件對驅動組件記錄下來的已運行程序使用數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析的方法進行掃描分析。
4.根據權利要求3所述的計算機安全啟動的方法,其特征在于所述驅動組件記錄下計算機啟動過程中運行的所有進程的名稱時,以名稱列表方式,存儲到硬盤中的已運行進程列表中。
5.根據權利要求4所述的計算機安全啟動的方法,其特征在于所述掃描分析時,使用打分的方法表示危險值,每個掃描分析步驟都得到一個危險分數值,主界面組件把等于0分的進程記錄到安全程序列表中。
6.根據權利要求5所述的計算機安全啟動的方法,其特征在于所述驅動組件通過返回值攔截惡意程序。
7.根據權利要求6所述的計算機安全啟動的方法,其特征在于所述主界面組件具有人機交互模塊、發(fā)送消息給驅動組件進行通信的模塊、掃描分析識別惡意程序模塊。
8.根據權利要求7所述的計算機安全啟動的方法,其特征在于所述驅動組件攔截是通過創(chuàng)建進程處理來代替計算機中原有的創(chuàng)建進程處理實現的。
9.根據權利要求8所述的計算機安全啟動的方法,其特征在于所述安全程序簽名庫驗證采用掃描分析識別惡意程序模塊把待分析程序的特征碼與安全程序簽名庫里的特征碼逐一比較,如果有相同的特征碼,就把該待分析程序名稱記錄到安全程序列表,肯定該程序是正常程序。
10.根據權利要求9所述的計算機安全啟動的方法,其特征在于所述靜態(tài)行為特征碼分析采用分析整個待驗證程序文件的大小、資源及創(chuàng)建日期、驗證文件的可移植的執(zhí)行體信息、版本信息、可移植的執(zhí)行體結構的導入表信息、區(qū)段信息、進程信息和文件名稱,經比較給出危險值,然后把危險值累加,把最終危險值為0的程序名稱記錄到安全程序列表。
全文摘要
本發(fā)明公開了一種計算機安全啟動的方法,要解決的技術問題是識別惡意程序和防止惡意程序的運行,本發(fā)明的方法包括以下步驟在計算機的應用層和驅動層分別安裝主界面組件和驅動組件,驅動組件記錄計算機啟動過程中運行的進程,主界面組件對驅動組件記錄下來的已運行進程進行掃描分析,確定安全進程,啟動計算機時驅動組件被優(yōu)先加載運行,惡意程序被驅動組件攔截,本發(fā)明與現有技術相比,驅動組件被優(yōu)先加載運行,在計算機啟動過程中攔截惡意程序,主界面組件采用數字簽名驗證、安全程序簽名庫驗證和靜態(tài)行為特征碼分析判斷方法判斷程序是否為惡意程序,保證了計算機系統(tǒng)的正常工作,又可以有效地清除計算機系統(tǒng)啟動中自動運行的惡意程序。
文檔編號G06F9/445GK1900940SQ20061006176
公開日2007年1月24日 申請日期2006年7月19日 優(yōu)先權日2006年7月19日
發(fā)明者謝朝霞 申請人:謝朝霞