本サービスには一部、Googleの支援により翻訳されたコンテンツが含まれます。Googleは、明示または黙示を問わず、市場性、特定目的への適合性、ならびに非侵害の黙示的保証を含む、翻訳の精度、信頼性、正確性に関連するあらゆる点において保証しません。

Kaspersky Labの本Webサイトは、便宜上、Google Translateを搭載した翻訳ソフトウェアを利用して翻訳されています。正確な翻訳となるよう合理的な努力を払ってはおりますが、自動翻訳の正確性は完全ではなく、翻訳者(人間)による翻訳に代わるものとして意図されているものでもありません。翻訳はKaspersky Labの本Webサイトをご利用の皆様の利便性を図るためのものであり、「翻訳結果をそのまま」ご提供するものです。英語からその他言語への翻訳における精度、信頼性、正確性に関しては、明示または黙示を問わず、いかなる保証もなされません。翻訳ソフトウェアのため、コンテンツの一部(画像、動画、フラッシュ等)は正しく翻訳されない場合があります。

Virus.Win9x.Memorial

クラス Virus
プラットフォーム Win9x
説明

技術的な詳細

このテキストは、Peter Szor、Data Fellows Ltd

メモリアルは非常に興味深いWindows 95ウイルスです。これまでWindowsウイルス作成には長い開発がなされていた[1997年末]。しかし、Windows 95感染者のリストはまだ長くはありません。 Memorialは "メモリ常駐" Windows 95ウイルスで新しいアイデアを示します。つまり、DOSベースのCOMおよびEXEファイル、およびWin32 PE(Portable Executable)ファイルにそれぞれ感染します。ウイルスの主な形式はWindows 95 VxD(仮想デバイスドライバ)です。

このウイルスはDOSベースのCOMおよびEXEファイルでは暗号化されていませんが、感染したPEファイルは多型(準多形性)ルーチンで暗号化されています。さらに、主なウイルス本体(VxDイメージ)には単純なアルゴリズムが組み込まれています。 PEファイル(Win95.Madと呼ばれる)に暗号化されたウイルスはすでに1つありますが、Memorialは確かに、同形機能を示す最初のWindows 95ウイルスです。したがって、Windows 95の多型のやり方の第一歩を踏み出します。

メモリアルも効果的なレトロウィルスです。 Windows 95レジストリを操作して、いくつかのよく知られたウイルス対策プログラムを無効にします。

幸いなことに、このウイルスにはいくつかの大きなバグがあり、これが広がりを遅くする可能性があります。しかし、Memorial.12413は、これらの問題にかかわらず、スウェーデンの "野生の"と報告されています。

感染したDOS COMファイルの実行

Windows 95のウイルス作成者は、人々がWindows 95アプリケーションよりも多くのDOSプログラムを交換しているという事実を理解し始めました。これはウイルスの観点から大きな問題になります.Windows 95のプログラムだけを感染させるだけでは感染を拡大することはできません。 MemorialはDOS実行ファイルにも感染することでこの問題を解決します。感染したファイルは、メインのVxDモジュールのドロッパーとして機能します。

Memorialに感染したCOMファイルが実行されると、VxDファイルがC:ドライブのルートにC:CLINT.VXDという名前でドロップされます。まず、Windowsが現在実行中かどうかをチェックします。そうであれば、ウイルスは単にDOSホストプログラムを実行します。それ以外の場合は、 "Are you there"コールを行います。これはINT 2Fh AX = 0です。呼び出しから戻ったとき、AXレジスタが4AB3hに設定されていると、ウイルスはそれがすでにメモリ内でアクティブであるとみなし、ホストプログラムに制御を返します。次に、隠し属性を持つC:CLINT.VXDファイルを作成し、そのファイルへの書き込みを開始します。

この書き込みルーチンは、ヒューリスティックではない機能として表示されます。しかし、この機能の目標は異なります。ウイルスの本体は7508バイトにパックされており、この機能はそれを解凍することになっています。アルゴリズムは非常に簡単ですが、効果的です。 VxDファイルはLE(Linear Executable)形式です。これらのファイルの構造には多くのゼロが含まれています。このため、これらの領域のパッキングは非常に効果的です。基本的に、フルVxDは7508バイトにパックされ、アンパック後に12413になります。 CLINT.VXDが準備完了すると、Memorialは自身からのコードを0:200でInterrupt Vector Tableにコピーし、INT 2Fh(Multiplex Interrupt)をフックします。この方法では、ウィルスはメモリの割り当て方法を心配する必要はありませんが、一部のアプリケーションと互換性がありません。

INT 2Fhハンドラは、 "Are you there call"と応答し、AXレジスタの1605hを待ってWindows初期化通知を確認します。このメッセージは、標準または386拡張モードWindowsが起動していることを示すDOSデバイスドライバとTSRを通知します。 Windowsは、INT 2FhがWindows環境で実行するための準備をする機会を監視するDOSデバイスドライバとTSRを許可するようになるので、この関数を呼び出します。

この最初の呼び出しがMemorialの割り込みハンドラに入ると、ウイルスはC:CLINT.VXDを開いてその存在をチェックします。オープニングが成功した場合、MemorialはWin386_Stratup_Info_Struc構造体を初期化して、WindowsにVxDをロードするよう指示します。すべてのデバイスドライバまたはTSRは、Windows VxDを使用してWindows環境での操作をサポートします。 VxD名を指定するには、デバイスドライバまたはTSRがSIS_Virt_Dev_File_Ptrメンバを仮想デバイスのファイル名のアドレスに設定します。したがって、MemorialはWindowsにC:CLINT.VXDをロードするよう指示する文書化された手段を使用します。これは、より複雑で成功しないSYSTEM.INIファイルのデバイスセクションを変更するよりもエレガントです。

感染したDOS EXEファイルの実行

感染したEXEファイルが実行されると、同じアンパックコードがCOMファイルと同様にウイルスのエントリポイントから制御されます。ただし、DOS EXE感染コードに大きなバグがあるため、この関数はC:CLINT.VXDに無限に書き込みます。 Memorialは、EXE感染時に誤ったポインタと不正なウイルスサイズパラメータを使用します。圧縮されたVxDコード(7508バイト)はEXEファイルには書き込まれませんが、アンパックコードの後の12413バイトはアンパックされます。したがって、アンパックするとき、ドロッパーコードは、既にアンパックされたVxDイメージを抽出する。

エクストラクターコードはこの問題を認識していないため、使用可能なハードドライブの空き領域がすべて満杯になるまでメガバイトのコードをC:CLINT.VXDに書き込みますが、その場合でもコントロールはDOSに戻りません。この操作中にCtrl-Cを使用するかマシンを再起動すると、DIRコマンドの/ AH(隠しファイルを表示)オプションが使用されている場合に限り、巨大なC:CLINT.VXDを見つけることができます。したがって、EXEファイルのウイルスは「意図された」と分類できます。幸いにも、これらのファイルの検出と駆除は可能です。

感染したPEファイルを実行する

感染したPEファイルが実行されると、ウイルス本体が暗号化されて圧縮されるため、最初にウイルスが解読されます。解読器は長さが46バイトであり、多形である(下記参照)。

COM感染の場合と同様に、ウイルスはPEファイルからC:CLINT.VXDも削除します。 DOS感染の場合、ドロッパ機能はウイルスのエントリポイントで275バイトの追加コードを必要とします。 PEファイルでは、この関数は32ビットコードであり、DOSバージョンよりも複雑です。このため、このコードの長さは1360バイトです。この関数にはメモリアルの起動ルーチンも含まれており、VxDもロードされるはずです。

まず、ウイルスはGetModuleHandleA関数のメモリ内のエントリポイントを計算します。これは本当のハックを使ってこれを行います。内部のWindows 95構造で検索を行います。これにより、PE感染は後でもっと簡単になります。ウィルスはインポートされた名前テーブルに名前を追加すべきではありません。 Memorialはこの目的のためにPE感染コードに複雑なパッチ機能を必要としません。

その後、同じトリックを使用してGetProcAddressのエントリポイントを計算します。次に、GetModuleHanldeAを使用してKERNEL32モジュールのハンドルを取得します。このハンドルを使用すると、MemorialはGetProcAddressを呼び出して、CreateFileA-、WriteFile-、ReadFile-、SetFilePointer-、CloseHandle-、GetLocalTime-、LocalAllocの各プロシージャー・アドレスを取得して保存することができます。その後、再度GetModuleHandleAを使用してUSER32のハンドルを取得します。次に、GetProcAddressを再度使用してMessageBoxプロシージャのアドレスを保存します。

この後、ウイルスはGetLocalTime関数を呼び出して日付をチェックします:4月10日にウイルスがアクティブになり、MessageBoxプロシージャを使用してメッセージボックスを表示します:


クリントン・ヘインズ記念ウイルス(Quantum / VLAD、Qark / VLAD)
クリントン・ヘインズ、ハリー・マクバンガス、ターミネーターZ、タロン
1997年4月10日の誕生日に薬物過多で死亡した。
ウイルス作家としての彼の時間の間、彼はNo Frillsファミリー、X-Fungus、
デーモンと1984年のウイルス。彼はVLADの良い友達だったので、
このウィルスは彼の名誉である。彼が正義を行うには十分に良いことを願っています。
VLADは覚えている。安らかに眠る
RIP
それ以外の場合は、\ .CLINTがすでに起動して実行中かどうかをチェックします。そうであれば、ホストプログラムが実行されます。それ以外の場合は、CreateFileAで通常のファイルとして\ .C:CLINT.VXDを作成します(今回は隠し属性を使用しません)。これが成功した場合、MemorialはLocalAllocプロシージャを呼び出してメモリを割り当てます。これは、コードをファイルに書き込む前に、パックされたウイルス本体を新しい場所に解凍する必要があるためです。したがって、VxDコード(7508バイト)をバッファに展開し、そこから12413バイトをWriteFileプロシージャでCLINT.VXDに書き込みます。その後、CloseHandleでファイルを閉じます。その後、この目的のために指定された名前形式でCreateFileAプロシージャを使用してVxDを実行します。\ c:CLINT.VXD。最後に、ホストプログラムを起動します。

初期化(IFS APIフック)

CLINT.VXDファイルが実行されると、コントロールメッセージハンドラ内の次のコントロールメッセージ(W32_DEVICEIOCONTROL、INIT_COMPLETE、SYS_DYNAMIC_DEVICE_INIT、SYS_DYNAMIC_DEVICE_EXIT)を待ちます。 W32_DEVICEIOCONTROLメッセージの場合、他のWin32アプリケーションと通信したくないため、ウイルスは0を返します。 SYS_DYNAMIC_DEVICE_EXITメッセージが到着すると、Memorialはアンロード要求を禁止するために1を返します。 SYS_DYNAMIC_DEVICE_INITおよびINIT_COMPLETEメッセージの場合、ウイルスは初期化手順を実行します。

このプロシージャは、DOS IFS(Installable File System)APIコールを最初にフックします。その後、静的にロードされたVxD名が見つかる「SystemCurrentControlSetServicesVxd」の下のWindows 95のレジストリからいくつかのキーを削除します。アンチウィルスVxDなどがあります。まず、 'VETMON95'と 'VETMACRO'キーを削除します。次に、 'NAVAP'、 'virusafe'、 'WIMMUN32'の各キーを削除します。次に、 'NORTON AUTO-PROTECT'、 'TBAV for Windows 95'、 'Anywhere Antivirus Validation'、 'Vshwin32EXE'、 'ViruSafe'の各項目を削除して、 'SOFTWAREMicrosoftWindowsCurrentVersionRun'セクションを開きます。次に 'SOFTWAREMcAfeeScreenScan'に行き、 'bEnableScreenScan'、 'bScanAllFiles'、 'bScanSubDirs'を削除します。 'ActionsInfectedAction'、 'ActionsSuspectAction'、 'MemoryEnabled'、 'ResidentFileCheck'、 'ResidentInfectedAction'、 'ResidentSuspectAction'、 'ScanningScan All Files'、 'ScanningScan Type'、 'ScanningSkip'の下にある 'SOFTWARECybecvet Antivirus for Win32'の次のキーを削除します。 ScanningSubfolders 'を設定し、' ScanningExtension List 'の値をこのリストから' bin、dll、doc、drv、ovl、sys、dot 'を削除' com、exe、おそらく 'scr'に設定します。この方法Memorialは、多くのWindows 95ウイルス対策プログラムを無効にします。

その後、ウイルスはC:CLINT.VXDの属性をクリアします。この後、ファイルを開き、サイズを取得して保存し、解凍してパックしたコピーに十分なメモリを割り当てます。その後、ファイルからメインバッファに自身を読み込みます。 MemorialはVxDファイルを閉じて削除します。

その後、VxDコードを2番目のバッファにパックします。最後に、初期化ルーチンから戻ります。

COM感染

Memorialがファイルオープンコールを傍受すると、最初にファイルの拡張子を 'COM'と最初に比較してチェックします。拡張子が「COM」の場合、Memorialはビクティムファイルの属性を取得して保存し、クリアします。したがって、読み取り専用属性は感染を防ぎません。その後、被害者を開き、そこから4バイトを読み込みます。 3番目のバイト(最初のジャンプ後)が 'Z'の場合、Memorialはファイルが既に感染していると仮定します。次に、被害者の構造がCOMでないことを確認するために 'MZ'、 'ZM'マーカーをチェックします。次に、被害者のサイズをチェックし、7168より小さいかまたは51200バイトより大きい場合には感染しません。次に、プログラムの最後の5バイトを読み込み、 'SN'で始まるかどうかを確認します。これが見つかった場合、ウイルスはファイルに感染しません。 COMフ​​ァイルの最後にこの特別なマーカーを追加することによって、特定のPC(ウィルス作者の可能性あり)に接種する以外は、この機能の他の理由はありません。

その後Memorialは、パックされたウイルスイメージ(7508)バイトと共にDOSドロッパーコード(275バイト)を被害者の末尾に追加します。最後に、最初の4バイトを初期ジャンプ+ 'Z'マーカーに変更して、被害者の募集を変更し、元の属性に属性を設定します。したがって、COM感染の場合、ウイルスのサイズは7783バイトです。

DOS EXE感染

ファイルが 'MZ'または 'ZM'マーカーで始まっている場合、ウイルスは拡張子を '.EXE'と '.SCR'と比較してチェックします。次に、IFSMgr_Get_DOSTimeを呼び出して乱数ジェネレータのベース番号を取得します。 PEファイルでは、ウイルスはPEヘッダー領域に追加されたセクション名を必要とし、それは多形になりたいので、一定のセクション名を使用することは望ましくありません。したがって、標準名は 'CLINTON'から 'garbage'文字列に最初に変更されます。

基本的には、暗号化に8ビットXORを使用します。暗号化の際にチェックバイトを計算し、それをセクション名文字列の最後の文字として保存します。この追加のバイトは、既存のPE感染をチェックするときに使用されます。 Memorialは、DOS EXE感染時にのみセクション名を変更します。これは突然変異を遅くする(遅いオリゴモルフィズム)。

これが準備ができたらメモリアルは犠牲者を開き、ヘッダーを読み、 'MZ、' ZM 'の署名をチェックします。次に、ファイルの3Chの位置から4バイトを読み込みます。このダブルワードは、Windows実行可能ファイルヘッダー領域へのポインタを保持します。このポインタが0の場合、ウイルスはそのファイルが通常のDOS EXEファイルであるとみなし、それを感染させようとします。 EXEヘッダーのチェックサムフィールドをチェックします。これが6666hの場合、ウイルスはファイルに感染せず、IPフィールドが感染していないヘッダーでも100hであればさらに感染します。

次に、ウイルスはEXEファイルのサイズを段落の境界まで拡大し、VxDドロッパーコード(275バイト)をファイルの末尾に追加します。その後、ウイルスの最大のバグが発生します。これは、解凍されたVxDをファイルの最後(12413バイト)に書き込みます。したがって、DOS EXE犠牲者ファイルの場合、ウイルスサイズは12688バイトです。最後に、実行可能ファイルのヘッダを、ウイルスエントリポイントを指すように変更します。

PE感染

EXEファイルまたはSCRファイルがWindows実行ファイルとして想定されていた場合、Memorialは最初にPE署名をチェックします。次に、読み取り専用属性に注意を払います。次に、イメージヘッダー構造から最後のセクションを読み取り、セクション名のチェックバイトを計算します。チェックサムが一致するとメモリアルは感染しません。それ以外の場合は、新しいウイルスセクションを追加してPEヘッダーを変更します。 Memorialは、多形ウイルスであるため、最初に46バイトの長さの解読器(寡集図形エンジンを参照)をその本文の先頭に変更します。次に、1360バイトのVxDドロッパーのPEバージョンを暗号化します。暗号化は、8ビットXORに基づいています。次に、デクリプタのコード+ VxDドロッパーコードを被害者の末尾に追加します(1406バイト)。最後に、パックされたVxDイメージを暗号化し、ファイルの最後に追加します(7508バイト)。その後、被害者の属性を復元して閉じます。 PE感染は準備ができています。したがって、ウイルスコードのサイズは46 + 1360 + 7508 = 8914バイトです。ただし、セクションアライメントまでファイルサイズを増やさなければならないため、これは変更される可能性があります。

擬似体型エンジン

このエンジンはシンプルですが効果的です。基本的なdecryporは11の異なる部分で構成されています。突然変異エンジンは、これらの小さなブロックのいくつかを相互に変更することによって、これらの小さなブロックの順序を変更します。したがって、ブロック1,8,8,9,6,7,3,5,5および4のブロック0は、互いに置き換えることができる。これは、2 * 2 * 2 * 2 * 6を合計96の異なるケースにまとめます。これにより、PEファイルでウイルスの検出が困難になります。

結論

メモリアルは非常に複雑なウイルスです。 Windows 95のウイルスのみで使用できるPolymorphic Mutation Enginesの後半で、Polymorphic Windows 95ウイルスが近い機能に現れることが示されています。つまり、新しい獣のための新しいスキャンエンジンを実装する時間です。


オリジナルへのリンク