內容源于網絡。網絡上流轉的版本實在是不易閱讀, 又不忍神作被糟蹋故稍作整理,對于內容仍然有識別不準的地方,網友可留言,我跟進修改。
????????????????????????????????????????? ?? ?雷 ???????? 軍
??? ??????????????????????????? ????(武漢大學計算機系,430072)
摘要:
????????本文詳細地描述了計軒機病毒判定專家余統的原理與具體設計方法,一定程度上解決了流行病毒的判定問題。該系統主要利用專家們研究計算機病毒所得的如識和經驗構造而成的規則庫以及已知病毒的檔案庫,運用正向不訪確的推理機制,來鑒別某一程序是否染毒。該系統不僅克服了傳統的檢測技術誤檢測率高的缺點,而且適合于鑒別病毒變種,對判定將來出現的病毒也有一定作用。
關鍵字:
????????人工智能, 專家系統, 計算機安全, 計算機病毒。
一、引言
????????目前, 人們對計算機病毒的認識極不一致。在很多情況下,只是根據某種具體病毒的特點、特性來討論病毒。要澄清病毒的實質,分析病毒的檢測與免疫,就必須從具體的病毒中解脫出來。有關文獻上關于病毒的定義很多,較為準確的如下:
????????算機病毒是隱蔽在計算機系統的數據資源中,利用系統數據資源進行繁殖并生存,能影響計算機系統正常運行的并通過系統數據共享的途徑進行傳染的程序。計算機病毒已包含了生物病毒的特點,即病毒的傳染性、潛伏性、針對性和破壞性。病毒的分類方式很多,為了敘述方便,本文主要采用按傳染方式分類。這種方式分類,主要有兩種情況:
????????(1)傳染磁盤引導區(BOOT)的計算機病毒。磁盤主要有軟盤和硬盤,軟盤只是一個BOOT區,硬盤上分主BOOT區和分區BOOT區;
????????(2)傳染可執行文件(FILE)的計算機病毒。文件主要是指可運行的程序代碼,如以.COM和,EXE為后綴的文件。
????????我國用戶主要使用的是IBM PC及其兼容機,而感染這種機型的病毒種類占總數的90%以上,所以本文選擇IBM PC機作代表,來討論計算機病毒。傳統的病毒檢測方法主要是在程序中尋找已發現病毒的特征串,如找到,則認為該程序染毒,否則,認為該程序是干凈的。目前,這種方法也是最常用的。
????????病毒的特征串是病毒標本中一段有代表性的程序代碼或數據。如果某個程序含有這個串,一般來說是染上了這種病毒,但也有可能是該程序自身也有類似的代碼。這樣,這個不帶病毒的程序很容易被判斷為染病毒(我們稱這種情況叫誤檢測)。傳統的檢測方法不但誤檢測情況多,而且對于病毒的變種無能為力。如把病毒某處兩條無相關性的指令前后換一下,這樣不影響病毒的工作,但特征串就發生了變化,使用原來特征串的檢測程序就再也檢測不到這種病毒。僅根據無相關性指令倒置的方法去修改某個病毒,這個病毒將會有成千上萬種變種,傳統的檢測方法將無法解決。傳統的檢測程序有著嚴重的不足,越來越適應不了當前形勢的需要,于是我們就提出了一種智能性的檢測方法。
二、病毒判定專家系統的基本原理
1. 病毒不可判定原理
????????馮·諾依曼提出了存儲程序的概念(stored program concept),即將程序全部存放在存儲器中,可在存儲器中修改,也可和參與運算的數據一起存儲。當今世界上的各種計算機幾乎都是根據這一原理而開發研究出來的。病毒要進行傳染、破壞,就必須掌握控制權,達到這一目的的唯一途徑是修改載體的可執行代碼。可見,病毒只有在馮·諾依曼體系的計算機中才能生存。也就是說,病毒是馮·諾依曼體系計算機的必然產物,并且只有廢除馮·諾依曼體系,病毒才徹底消除。從體系結構上我們已經認識到病毒的不可判定性。同時,Fred Cohn博士在理論上也證明了這一點。但是,在特定的機器上,運行特定的操作系統,絕大部分流行的計算機病毒都是可以判定的。對于某個具體的病毒來說,隨著時間的推移,遲早會被人們發現。在病毒對世界計算機應用產生深遠危害之時,盡早地研究一套近似判定的方法也是非常重要的。
2. 智能判定原理
????????病毒是可以認識的,因為不管怎么說,病毒總是一段程序代碼,專家們對它進行詳細分析,總能判斷這段代碼是不是具有傳染性。傳染性是病毒最主要的特征,也是決定性特征。判定某個程序是否是病毒,僅需判定它是否具有傳染性。用程序的方法對病毒進行精確判定是不可能的,但是我們可以利用專家們的知識、經驗完成一套專家系統,模擬專家工作,對特定的病毒種類進行判定。這套專家系統所使用的就是我們研制的一套智能判定方法。
????????智能判定就是用專家們的知識、經驗構成一個規則庫,在計算機里虛擬一個環境對某軟件進行安全測試,模擬運行每條指令,并監控運行結果,如有違反規則的操作,則記錄下來。運行完畢后,再一起分析推理,最后根據推理結論,判定該軟件是否帶毒。推理過程由專家系統完成,采用了正向不精確推理機。
?
在實踐中,人們經常使用的一些不精確的或不完善的資料進行工作,專家系統是模擬專家們的工作,所以在專家系統中,采用不精確推理,幾乎是難于避免的。病毒判定專家系統主要采用的是MYCIN的不精確推理。由于這個問題不是判定的關鍵問題,這里就不詳細討論了。
????????智能判定要求系統在實際使用過程中,不斷豐宮,完善自己。如發現新病毒,要自動記錄到檔案,以后遇到類似問題可以直接判定。在運用過程中,根據實際情況,可以修改規則的權值, 補充新規則。
三、病毒判定專家系統的設計方法
????????病毒主要分BOOT類病毒和FILE類病毒兩類,機理大致相同,但具體實現方法不同,BOOT類病毒相對面言要簡單一些,下面我們以BOOT類病毒為例,具體談一下這套專家系統的實現方法。軟盤,硬盤,硬盤比軟盤多一個主引導區,硬盤上的分區引導塊 BOOT類病毒是指替換磁盤上的引導塊,在DOS啟動時獲取控制權的一類病毒。磁盤包括與軟盤上的引導塊大致相同。硬盤主引導塊主要功能是判斷活動分區,并把活動分區的引導塊讀入內存。分區引導塊先判斷磁盤上是否存在系統文件,若存在則加載DOS內核IBMBIO.COM(PC DOS系統文件)或IO.SYS(MS DOS系統文件)。
????????BOOT(自舉)是DOS啟動的第一步,至關重要,但又比較脆弱,易受攻擊。每個BOOT區雖只有512個字節,但切不可忽視。BOOT中有許多提示信息,一般情況下用Debug調出查看一下,即可判斷,但這種方法并不保險。一方面很多軟件,特別是游戲,都是自啟動的,即具有自己的BOOT程序;另一方面有的病毒很隱蔽,僅占有原有的BOOT的幾十個字節,簡單的查看是無法鑒別的。另外,DOS的版本繁多,也是一個重要原因。圖2是硬盤自舉流程。
?
????????智能判定主要步驟為,首先判定未知的BOOT是否是某個版本的DOS引導塊和已知軟件的引導塊,若是,顯然不是病毒,否則到已知病毒的檔案庫中查尋,若找到,顯然是病毒,若未找到, 則在一個虛擬環境中運行這個未知BOOT,進行安全檢查,判斷是否違反規則,若有嚴重違規行為,即判定為病毒。智能判定必須先準備三個庫:合法BOOT庫、非法BOOT庫(即病毒檔案庫)和規則庫。首先窮舉BOOT,構造合法BOOT庫和非法BOOT庫。合法BOOT庫里主要是各種操作系統的引導區以及現有的流行軟件及游戲的引導區。再運行匹配法則,在這兩個庫中搜索是否有與未知BOOT類似的 BOOT。
?
在匹配過程中不能采用完全的一對一的比較。這主要是因為磁盤的種類很多,如360KB、1.2MB的軟盤,20M、40M的硬盤等,這樣每一種盤上的BOOT中關于磁盤和數據都不同。不同廠商提供的系統盤標識符不同,如IBM提供的DOS盤標識為“IBM 3.3”,Microsoft公司提供的DOS盤標識為“MS 3.3”,這些BOOT表面上不一致,而實質是相同的。如果采用完全匹配,那么必須采集一個BOOT在不同情況下的具體數據,這樣,不但增加了數據冗余度,減慢了匹配的效率,而且易于出錯。為了克服這些缺點,我們給出一種模糊匹配法。
模糊匹配的主要思想是僅比較兩個BOOT之間的代碼部分,而且只要相同率達到95%以上,即認為相同。這樣,允許用戶對BOOT稍作修改。代碼部分的5%至多有十幾個字節,不可能對系統構成威脅。
[算法]
1. 根據第一條JMP語句,找到第二條指令開始地址,如果第二條指令仍是JMP語句,就繼
續查找,直到連續幾條指令都是非JMP語句為止。然后再搜索提示信息的 開始地址,即代碼結束地址,得到代碼長度;
2. 把未知BOOT的代碼區與庫中一個已知BOOT比較,得到相同字節數;
3. 計算相同率:
?
若相同率大于95%,則退出。
4. 若庫為空,退出,提示未確診;否則,取下一個BOOT,轉到2繼續執行。
采用“模糊匹配”算法,對一個正常BOOT加上一些特定的免疫標記的系統 都可得到確診的信息。例如,有的用戶為了免疫小球病毒,把自己盤上的BOOT扇區的[IFC]處改為1357。在模糊匹配中,這些地方根本沒有比較,所以不會引起誤差。再舉一例,《計算機病毒概論>提 供的大麻免疫方法如下:
先讀出主引導區,放在200處。
?
?
?
????????2.修改內存大小字節,向高端傳送,達到高端駐留日的;
????????3. 讀入原BOOT 到 0000:7 C00:
????????4. 判尚時間標志;
????????5. 跳轉到 0000:7 C00處執行真正的BOOT。
????????系統病毒的主要特點是通過戰獲中斷向量,來取得控制權,要想接管中斷,就必須駐留在內存中。一般程序駐留方法有兩種,一種駐留在內存地址低的地方,也稱低端駐留,主要通過調用DOS中斷完成;另一種是通過修改內存控制塊,把自身放在內存地址高的地方,來進行高端駐留。這兩種方法都是在DOS裝配完畢后進行的。BOOT類病毒進入內存時,DOS還未裝人,DOS主要使用低端,所以為了避免沖突,BOOT類病毒只能使用高端。采用的方法是修改內存大小單元[40:13],將該值減小,使DOS誤認為內存只有那么大,不去覆蓋病毒體。接管敏感性中斷,如INT 13,INT 8,和高端駐留是病毒最重要的特征,任何BOOT類病毒都必須完成這一點。于是,我們總結出一個原則:
【原則?1】在DOS自舉過程中,任何企圖接管敏感性中斷和高端駐留的請求都是不允的。
????????對原則1進行詳細分析,結合典型病毒實例理解,可以把它具體化。接管中斷必須讀寫中斷向量表。高端駐留分兩步,首先是修改[0000:0413]單元的內容,再進行一次向高端的傳送。在自舉過程中,不允許讀寫[0000:0413]的內容。當出現 MOVSB,MOVSW,LODSB,LODSW,STOSB, STOSW 時要尤其注意DS的值,是否指向內存地址高端,以便準確地成獲向高端的傳送。
????????根據前面介紹的硬盤BOOT區執行的簡要流程,我們可以知道硬盤主引導區需要進行一次,向低端的傳送和一次讀盤(讀入分區引導記錄), 分區引導記錄需要讀兩次盤(一次讀目錄扇第一扇,第二次讀IBMBIO.COM,即數據區第一扇開始的連續簇), 復位一次磁盤機,共使用了三次INT 13H。有的軟件如PC Tools格式化的系統盤的BOOT中只有兩處INT 13H,這是因為兩次讀數據使用了同一處的INT 13H。還有可能其它的 BOOT 中有多于三處的 INT 13H。但有一點是明確的, BOOT 中絕對沒有寫盤操作,而且讀出來的數據只能是分區引導記錄、根目錄區第一扇和 IBMBIO.COM, 不可能是其它數據。這樣,我們得到了第二條原則。
【原則 2】磁盤引導扇中絕對不能出現寫盤指令;自舉過程中只允許讀出自舉過程需要的數據。
????????在這里,還有一點需要說明,在有些自舉的游戲中,需要讀入其它數據。這與原則2不矛盾。原則2主要討論的是DOS格式。非 DOS 格式原則2的第二句不適用。在BOOT區運行過程中, 從未取過或置過系統日期時間,更沒有對時間進行判斷。病毒具有潛伏性和可激活性,激活條件多都是采用時間的, 因此應謹防這類操作。還有的觸發條件是隨機數, 這也是要引起大家注意的。
【原則3】BOOT中判別時間和產生隨機數進行判斷, 都是可疑的。
????????在模擬運行中,違背可疑性原則,將出現警告信息。病毒最后都是裝入真正的BOOT區,再把控制權移交過去。而真正的 BOOT 總是存放在 0000:7C00 處, 最后把控制權移交給存放在70:0處的IBMBIO.COM。
【原則 4】要密切注意最后控制權的移交。
????????違反原則4將會出警告信息。對目前發現的所有BOOT類的病毒而言,它們都不可避免地同時違背了這四個原則。在將來出現的病毒中,它們有可能符合某些規則,但它們將不可避免地違背大部分原則。如某病毒不保存原來的 BOOT 區,自己完成 BOOT 功能, 這樣它就不會違背原則2, 但它肯定違背原則1。
? ? ? ? 這四條原則是針對BOOT類病毒的特點,經過反復論證得到的。在將來與病毒的對抗中, 還將不斷豐富、完善,顯示更大的威力。由這些原則即可構成所需的規則庫。由于規則庫很復雜,僅列出由原則1總結的規則供大家參考。
????????規則 01: 前提:(讀取井修改[0000:4CJ內存單元的內容)
????????????????結論,(接管敏感性中斷)
????????規則 02: 前提:(讀取并修改[0000:0020]內存單元的內容)
????????????????培論,(接管敏感性中斷)
????????規則 03: 前提:(讀取并修改[0000:0418]的內容)
????????????????結論,(分配內存)
????????規則04: 前提:(申傳送指令,且日標中位于內存地址高端)
????????????????結論:(向高端傳送)
????????規則 05: 前提:((分配內存)《向高端傳送))
????????????????結論:(高端駐留)
????????規則 06: 前提:(接蓉故莖性中斷) (?)
????????????????結論:(有可能是薪市)
? ? ? ? 規則07: 前提:(高端駐定)
????????????????結論: (有可能是病福)
?
????????Turbo Debugger 這類高級跟蹤中都有自動跟蹤功能,但達只是這類機制的雛形, 這套機制的關鍵在于虛環境。關于這套機制的具體實現就不多說了。模擬運行中判別違規的過程主要由推理機完成。利用現行的專家系統工具可以自動完成推理過程,得出結論。由于BOOT類病毒判斷規則不超過一百條,可以考慮重寫推理機。一旦得出結論,未知BOOT為病毒,智能判斷系統就會把它記錄在非法BOOT檔案中,否則記錄在合法BOOT庫中, 以后遇到類似的BOOT, 便可馬上確診。這樣病毒判定專家系統就可以在實際使用過程中不斷豐富完善自己。
? ? ? ? 這套專家系統也可用在檢測FILE類病毒上,但這樣規則庫要復雜得多,而且可靠性要差一些。買使智能判定能判斷FILE類病毒,就必須進一步對文件類病毒進行分類,保存各種病毒的“指紋”,即特征串和常用程序段,同時歸納出各種原則。如判別文件類病毒可使用這樣一條原則: 在程序開始運行不久安裝INT 21H中斷向量, 并旁路4BH功能調用, 最后還駐留內存, 可以懷疑為TSR病毒。
四、新的病毒模型及判定策略
????????我們把病毒分為兩類,FILE類和BOOT類,有沒有可能出現兩者結合的產物呢? BOOT 區已被密切注視了,但自舉過程中是否還存在薄弱環節呢?我們發現 BOOT 區執行后調入 IBMBIO.COM 執行是一個薄弱環節。以后的COMMAND.COM是人們注意的焦點, DOS加教完畢后,又有很多防御程序保護系統不受感染,所以,這些都不是薄弱環節,只有 IBMBIO,COM 及 IBMDOS.COM 不引人注目。我們設想了一個模型,把一個典型的BOOT類病毒放在IBMBIO.COM的第1扇中, 而不是BOOT中。
????????那么這個病毒具備與BOOT類完全一樣的特點和機理,但它沾染在文件上。這種病毒是極容易完成的,我們之所以公開這種設想,是想引起各位同行、專家的重視。對付這種病毒,智能判定專家系統的判定策略是收集了各個版本的系統文件進行校驗的。由于自舉環節一直是DOS的薄弱環節,要想做到完全彌補,可以使用DOS卡的方法。把所有的系統文件都固化在ROM中, 做成一塊DOS卡,就不用擔心系統文件被修改, BOOT 類病毒以及沾染 COMMAND.COM 及其它系統文件的病毒也就絕跡了。這也是對馮·諾依曼體系的計算機的一點改進,即操作系統固化。據 『計算機世界』?消息, Microsoft公司的DOS 6.0版本將放在一張硬卡中,這將有助于加強系統的安全性。
五、結束語
????????研制解決流行病毒的判定問題的專家系統,在目前具有相當大的實用價值。本文介紹的這種智能判定方法大大優于傳統的檢測方法,具有準確率高,適用性廣的優點,還可以不斷發展和擴充。關于這種方法,目前國內外文獻上尚未提及。(參考文獻略)
Theory and Experiments of Detection
Expert System of Computer Viruses
Lei Jun
Wuhan Unieeraity. 430072
Abstraet: This paper diseribes the theory and experiments about Detection Expert Syctem of Computer Viruses (VDES) and solves the problem of determining a pepular virus in some degree. In orderto determine that a given program has been infected by viruses, VDES is based on the rule set formed by knowledge and experience of experts and a forward inexact inference method is used VDES notonly overcomes shortcomings of past checking techniques, such as inexactitude in some care, but alsocan determine a virus variety, in other words, VDES can determine viruses appearing in the future.
Keywords: artificial intelligence, expert system, computer security, computer viruses.
?
快科技