Spanish Telecom

Jim Bates

B85506043 賴勝華

B85506050 江至軒

我最近從西班牙弄到一個病毒似乎想表達某些政治觀點?(此病毒由兩個不同的學術機構所鑑定出199012月由英國倫敦的Oxford University and City University,雖然現實生活中對此感染事件沒有進一步的報導)從本文繼續的分析 ,為什麼此病毒被稱為Spanish Telecom將會越來越清楚。

 

Multi-Partite Structure

此病毒真的是一個多型病毒,因為它既具有寄生型病毒感染.COM檔,且有啟動磁區病毒感染第1部硬碟的MBS或是任何軟碟的啟動磁區的能力。此病毒碼具有特別邪惡的Trigger Routine會把第1部和第2部硬碟上的全部資料給複寫。這個Trigger Routine將會根據啟動程式碼區域所記錄感染的次數,如果這是第四百次的感染則啟動。此寄生程式碼經過編碼並且在程式碼的尾端包含純文字如下:

Virus Anti – C.T.N.E. (c)1990 Grupo Holokausto.

Kampaya Anti-Telefonica.Menos tarifas y mas servicios.Programmed in Barcelona (Spain).23-8-90. -666-

 

最後的”666”也許是參考到”666”(兇殘的數字)病毒因為某些第一次在”666”所用到的技巧在此處也被採用!句子的部分看起來大概是更低的關稅更多的服務。在Trigger Routine覆寫活動期間所顯示令一個經過分開編碼的訊息,如下:

Campana Anti-TELEFONICA (Barcelona)

進行程式碼的分析最好把寄生和啟動部分分開討論。

 

Parasitic Analysis

這無疑是我所檢查過最不整齊的程式碼,早在Trigger Routine啟動之前,此病毒出現了很多重複部分和一些錯誤。

病毒程式碼被附在.COM檔的尾端介於長度128~60999位元組之間(包括的)COMMAND.COM就如同其他以IBM(IBM的系統檔)字串做為開頭的檔案一樣不會被感染。寄主檔案的前4 Bytes隨著病毒碼儲存並且用適當的跳躍指令覆寫跳過執行這病毒碼。

具有感染性的寄生程式碼大小是3700 Bytes(包括啟動程式碼)。此病毒程式碼以85 Bytes包含用來偵測除錯軟體的保護程式碼及某些被認為是為了防止可信賴搜尋字串的萃取所做的指令亂數化為開頭。

用這85 Bytes做為”Header” Routine有兩種版本,實際上只有一種在感染檔案過程中是有害的。於是,對於此寄生程式有兩種不同的搜尋字串雖然都是為了確定同一種病毒的存在。

這兩種”Header” code Routines有相同的做用:檢查除錯的存在,在寄主檔案部分放置病毒碼並且將剩餘的程式碼解碼。

再來檢查此病毒是否常駐,這是藉由搜集低記憶體中Offset 1BChByte並與13hXOR運算所完成的,得到的結果再跟位於Offset 1BDh的下個位元比較。假如它們是相同的則病毒常駐,處理程序交還給寄主程式。在攔截的過程中,病毒使這兩個Bytes的值規律的變化。但把兩者做XOR運算,即始是病毒常駐在記憶體中,無論初始值為何,結果都將會是13h

假如病毒沒有常駐,目前的Int 21h將會藉由直接存取記憶體第0(中斷向量儲存的地方)來儲存到記憶體中。3984 Bytes從系統記憶體移除為了使病毒碼安置在高記憶體中,。

下一個指令從系統時鐘收集假的亂數並且用它做出位元組位址的索引表。所選出來的位元組會被插入到低記憶體中Int 21h向量的Offset部分,就是在高記憶體中被設為病毒節區的地方。隨機選擇處理使得在中斷表中實際的Offset

值隨著每次感染而不同。每個位置雖然不同,但都指到處理病毒碼內單一的jInt 21h Handlerjumper指令。

14entries在位置表中,然而只有7個有用到和程式碼其他部分一起暗示有其他的技巧被嘗試(或者準備)。一旦此中斷被安置,一個特殊的呼叫會完成此安置程序。此呼叫是由把4B21h放入AX並且送出Int 21h要求所組成的。

此特別的呼叫是由病毒的安裝routine handler所安排的,此routineflip病毒(VB, SEPT 90)同手法,都是用單步的INT 01h去把任何外部的handles從目標中斷鏈結(Targeted interrupt chain)給分離出來。

遭受殘害的中斷有13h21h40h並且當此程序完成,在檔案感染和修復過程中,把抽離出來的向量暫時安裝。因此任何用安裝handlersTSR監控軟體必須含有可靠的自我測試Routines來防止此種病毒巔復的手法。

INTRRUPT HANDLING

此病毒中斷Handler攔截6個在DOS SERVICE INTERRUPT不同的功能呼叫:4B21h已經講過,而另一個比較特別的是用4B20h但什麼都沒做。這使我們猜測病毒是否有更進一步的打算。伴隨副函式02(檔案的結尾)Seek Function(42h)被截斷。此步檢查這檔案是否已被感染;如果是,在傳回檔案結尾位置之前,藉由改變指標來減去病毒碼的長度。這兩個改變的FindFirstFindNext函式(11h - 12h4Eh - 4Fh)同樣都被截斷,對被感染的檔案傳回改變後的大小。然而這主要的截斷並不適用於LoadExcute函式(4B00h)。這通常被用來選擇和感染有COM副檔名的檔案(受限於名稱和大小,除非先前提過的情形)。一旦合適的檔案被確認,INT 13hINT 40h向量暫時用病毒的對等抽離向量取而代之而一個屬於重要錯誤中斷定(24h)的簡單Handler將被安置。

通常檔案感染的過程是藉由收集和儲存目標檔案的日期、時間和屬性所觸發,為了存取檔案而開檔(需要的話屬性會被改變)。然後計算正確的初始跳躍並且在被病毒碼的跳躍指令覆寫之前先拷貝和儲存目標檔案的4 Bytes。病毒碼的某些部分跟據系統時間讀取的隨機資料值做加法來改變。

下一部用兩者之一的資料值做為這兩個85 Bytes解碼Headers(隨機取樣的編碼鍵值)Header(未編碼的)寫入寄主檔案的檔尾。然後全部的病毒碼經編碼後一次1 Byte地寫入寄主檔案的檔尾個別地把每Byte收集,編碼和寫入。這步驟解除了對特殊緩衝區和解碼 / 重新編碼週期的需要。

最後一步關檔並重設日期,時間和屬性回原值。當記號暗示這個檔案被感染,日期的設定就藉由把年份加一百來篡改4 K(Frodo)病毒相同。在傳回呼叫Routine之前把改變的中斷向量重設回它們先前的值。

Handlers安置的過程中,會檢查第一個被感染的硬碟的MBS是否有病毒的啟動程式碼。如果磁碟尚未被感染,就把病毒碼啟動磁區部分安置在第1磁區第0面第0磁軌。病毒碼第二個磁區存在同一磁軌的第6磁區,而原來的啟動磁區被儲存在第7磁區。這會對把這些磁區用來做別的用途的電腦造成問題。

Boot Sector Analysis

病毒函式的啟動部份和寄生部分完全的不相干但可確定幾乎同時存在於記憶體中。這可以說明關於寄生檔案感染過程中對中斷向量的重新導向是很惱人的。然而當寄生程式碼包含全部的病毒Routines,啟動部分被限制在獨立程式碼的兩個磁區中。因此電腦只受到啟動程式碼感染並不會感染檔案,只會去感染其他磁片。

在啟動程式碼中唯一值得注意的是它的Trigger Routine,軟碟感染Routine和中斷的重新導向。中斷的重新導向攔截對軟碟和硬碟兩者的INT 13h要求。對第一或第二軟碟機的存取要求會造成檢查磁片是否感染並可能真的感染。此Routine並不尋常因為只有在兩個軟碟機啟動時才會完成檢查和感染的動作。

對第一個硬碟的INT 13h要求被截斷及測試來看看是否有讀取動作。一個對第一個硬碟MBS寫入要求將會被改為一個驗證呼叫,如果病毒已常駐才不會覆寫磁區。測試在第0面第0磁軌的磁區有讀取要求並重新安排。第1磁區要求改為第7磁區間(原來啟動磁區儲存處),對第67磁區要求改為第5磁區。和Brain病毒相同手法,當Spanish Telecom常駐時,會嘗試去防止一般工具程式對真正啟動磁區的關察。

Floopy Infection

若發現有被感染的軟碟片,病毒會試圖去感染它並且用來當儲存磁區(程式碼的第2個磁區),會根據病毒碼所維護的參考表做改變。記住,無論是第1或第2軟碟機(A:和B)都會受到影響。

軟碟片的感染暗示病毒碼在磁片上HeadSector位置如下所示:

 

Floopy Type Virus Location

Head Sector

160K - 5.25” 0 6

180K - 5.25” 0 8

320k - 5.25” 1 1

360K - 5.25” 1 2

720K - 5.25” or 3.5” 1 4

  1. 2M - 5.25” 1 0Dh
  2. 44M - 3.5” 1 0Eh

 

從上表得知,當病毒碼覆寫FAT或根目錄的磁區時,將會造成被感染磁片的無法讀取。得知此項資訊你應該注意到病毒碼會占據硬碟的第1和第6磁區,以及原來的啟動磁區副本會被存到第7磁區(全部都在第0面第0磁軌)[這是第一隻VB所知到會感染無論任何密度的所有磁片的病毒上表提示我們對軟碟片要做防寫工作,即使是純粹對資料的傳輸。]

Trigger Routine

PC從受感染的硬碟開機後,在啟動程式碼中的計數器開始增加並檢查是否傳回值為400(190h)。假如不是,程式碼再度被寫回啟動磁區並繼續正常作業。然而當計數器達到了這數字,立即引發Trigger Routine來處理。這是我所見過最卑劣最具破壞性的Triggers;它將第1和第2個硬碟(如果有的話)的所有磁區,用在低記憶體中的開機時間這項隨機資訊來覆寫。這覆寫Routine將會根據磁碟機上(每一個)磁面的數目做數次動作。每傳一次,在22頁所產生的編碼訊息將會被顯示。

Detection

對於每 一個版本的寄生程式碼需要粹取出不同的辨識字串如下:Head 1 - 8B1D B200 83FB 0074 18BF 5500 B2Offset 034h Header 2 - 83ED 09BE 2001 03F5 FCB6Offset 024h

我們應該注意任何字串在適當位置Offset (病毒碼中)出現都意味著可能受到感染。寄生感染部分的大小有3700 Bytes(添加在LoadExcute之後)。辨認啟動病毒程式碼是比較容易但應該注意以上所述中斷重新導向的部分。此程式碼為經過編碼而其辨識字串如下所示:

8A0E EC00 BE70 0003 F18A 4C02 8A74 03C3Offset 0B3h