absmiddle 巨集病毒剖析


[解說] foolman.bbs@bach.mc.ntu (Cogito, ergo sum.): 文件導向式的病毒感染: Word 7.0 巨集病毒 到底何謂巨集呢?我們可以回溯到當年的 PE2時代,只要玩過電腦的都 知道,要 PE2執行的好,真正需要的檔案有兩個:PE2.EXE, PE2.PRO,其中 的 .PRO 定義了鍵盤哪些鍵的作用,我們可以說,這便是巨集的濫觴。 隨著套裝軟體的愈做愈大,人們逐漸發現,常用的一些對檔案編輯的動 作,事實上可以歸為一整套的指令,然而,每個人所常用的指令與常用的指 令動作都不同,於是乎,每個套裝軟體便會自己定義出一些指令供使用者發 揮使用,最明顯的例子是 Lotus 123和獨立成一套的語言 dbase,儼然因為 巨集的指令過於強大,走上命令解譯器如 BASIC 的道路。 同樣的事情發生在 Word 的身上,不過 Word 的模式不同,它定義出一 個範本模式,將檔案資料,以及該檔案所需要的巨集整合在一種名為 .dot 的範本檔案之中,這種作法已經不同於以往的套裝軟體將資料和巨集分開儲 存的方法。正因為這種是巨集亦是資料的檔案格式,便產生巨集感染的可能 性。因為,檔案資料的可攜性極高,如果巨集亦隨著檔案而被分派到不同的 工作平台,只要能被執行,不也相似於病毒的傳染過程?不過這種形式的傳 染,就會有原始碼被公開的危機,而且正因為原始碼是公開的,這個病毒的 一切行為便無所遁形了。 Word 的工作模式是只要一載入範本檔案,就先執行起始的巨集,接著 載入資料內容,這個創意本來是好的,因為隨著資料不同而需要有不同的巨 集工作。可是事實上,很少人會對巨集產生興趣,因為巨集的撰寫相當於學 習一套程式語言,儘管它的語法被撰寫的很簡單,可是大多數的人,一方面 在不知情,一方面或是知道有巨集這麼一回事,卻依然寧願多花個幾秒重複 數個動作。因此, Word 便為大眾事先定義一個共用的範本檔案(Normal.dot) ,裡面包含了基本的巨集(隨軟體不同)。 這樣子的手法,更是為巨集感染開啟大門。因為如果是一個範本一個巨 集,那麼傳染途徑就只能經由這個單一檔案而已,只要一被人發現,公開說 某某檔案是有問題的檔案,那麼這個檔案存活率勢必很小,因為沒有人會行 這種自殺的行為,除非是故意的。但是共用範本的存在,卻去除了這種憂慮 ,只要某某有心人士,要問題巨集自身複製、或撰寫感染碼進公用巨集,那 麼好玩了,以後只要一進入 Word ,公用範本一併被事先載入,只要存下任 何範本檔案,那麼該檔案就無可避免地成了問題文件。 可是畢竟巨集是儲存於範本文件裡面的啊,在 office 裡面,範本文件 是統一放置在 Template 資料夾裡面,如果我們沒有動到裡面的任何一個範 本巨集,那麼為何我們還是會感染到巨集病毒呢?關於這個問題,實際上便 牽涉到微軟公司對於 Word 檔案格式處理的矛盾。 我們以磁碟作業系統 (DOS)一個很有名的例子來看,作業系統的執行檔 案作業的程序是先從檔案的副檔名,判斷其是否為可執行檔 (.EXE) ,或者 命令檔 (.COM) 。但只要是編譯過程式的人都知道,DOS 對於這樣子的區分 並不嚴格,它只是單單對副檔名以二元分類法辨別出這個檔案可不可執行, 接著從裡面的檔案格式去選擇載入於記憶體中的方式,因此。如果我們將一 個可執行格式的檔案 (*.EXE) 改命名為命令檔 (*.COM) ,實際上它依然是 以可執行檔格式被載入記憶體中而被執行。 同理,這種包含內外兩種不同檔案格式的謬誤,在 Win 95 中並未被解 決 (事實上,它並沒有被解決的必要) 。 Word 在決定以何種方式載入文件 的時候,事實上是先到 Win95系統中的登錄項去尋找是否有此登錄,在載入 的時候,根據實際的格式決定這個文件被執行的方式。換句話說,我們可能 載入一個事實上為 .dot 格式的 .doc 檔案,只要這種情形一發生,當我們 不自覺地看見 Word 將檔案顯示在螢幕的瞬間,此文件內藏的巨集,已經經 由 Word 被載入記憶體中而執行了,如果巨集作者再聰明一點的話,他就會 侵入共用範本(Normal.dot),這麼一來,每次只要一啟動 Word ,你的電腦 中便等著被有問題的巨集騷擾了。 我們可以這樣子說,檔案式病毒警告我們不要隨便複製別人的檔案,磁 碟式病毒警告我們不要使用來路不明的磁碟,那麼,在標榜以文件導向為主 的 Win95 裡,或許類似 Taiwan NO.1 一類的巨集病毒給我們的最大的啟示 ,或許是要我們不可以隨便偷看別人文件吧!
上一層目錄