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

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

Virus.Win9x.Sk

検出日 01/11/2002
クラス Virus
プラットフォーム Win9x
説明

技術的な詳細

これは寄生Windowsウイルスです。それはWindows95 / 98の下で広がり、そのコピーをWindowsメモリにインストールし、ファイルアクセス機能をフックし、PE(Windows Portable Executable)ファイルに感染させます。このウイルスは、Windowsのヘルプファイル(.HLP)にも影響します。これらのファイルは、起動時にウイルスコードがディスクにドロップされて実行されるように変更されます。このウイルスは、RAR、ZIP、ARJ、HAの4種類のアーカイブにドロッパを追加します。 HLPファイルとアーカイブのウイルスドロップは、DOS COMファイル形式を持ちDOSボックスで実行されますが、感染したWindows実行ファイル(下記参照)と同様にWindowsメモリにもウイルスコードをインストールできます。

ウイルスコードは、DOSドロッパとWindows PEファイルの両方で多態的なルーチンで暗号化されています。 Windowsファイルの場合、ウイルスは「Entry Point Obscuring」テクノロジも使用します。感染ファイルが実行されると、ウイルスコードはすぐに制御を取得しません。ほとんどの場合、JMP_Virus命令は、ファイルヘッダ内ではなく、ファイル起動アドレスではなく、感染したファイル本体のどこかの場所であり、対応するプログラムのブランチが制御を取ったときにのみ実行されます。

ウイルスは "低速感染"です:感染する前に、多くの条件がチェックされ、結果としてコンピュータ上のファイルにはほとんど影響しません。標準Windows95 / 98インストールでは約10個のEXEファイルのみです。 HLPファイルとアーカイブでも同じですが、ごくわずかしか感染していない可能性があります。このウイルスは、最初の感染前に1分間感染ルーチンを遅延させ、2分間にこれらのファイルにアクセスできない場合にのみ、HLPファイルとアーカイブに感染します。

ウイルスは非常に危険です。ディスクファイルにアクセスすると、その名前がチェックされ、いくつかのウイルス対策プログラム(ADINF、AVPI、AVP、VBA、DRWEB)の場合、ウイルスはすべてのディスクのすべてのディレクトリ内のすべてのファイルをC:Z: Fatal_Error_Handler VMM呼び出しによってシステムを削除してから停止することができます。

ウイルスがシステムにインストールされるたびにウイルスによって削除されるもう1つの犠牲者ファイルがあります。 WindowsディレクトリのCOMMAND.PIFファイルです。

ウイルスには、Windows95 / 98の設定によっては致命的なバグがあります。ウイルスに感染すると、標準の「一般保護違反」メッセージが表示され、「ブルースクリーン」が発生します。

システムにインストールする際に、ランダムカウンタ(48からの1つの場合)に応じて以下のメッセージが表示されます。


1997 VBA Ltd. E-mail:support@vba.minsk.by

メモリ常駐者のインストール

ウイルスの "常駐"コピーはVxD(Ring0 – Windowsカーネル)レベルで動作します。 DOSプログラムとWindowsアプリケーションは標準的な方法でこの領域にアクセスすることができないため、ウイルスはいくつかのトリックを使ってそこにコードをインストールします。

DOSドロッパーが実行されると、ウイルスチェックはWindowsがインストールされていて、DOSに戻っていない場合はDOSに戻ります。それ以外の場合は、DMPI呼び出しを使用してウイルスがローカル記述テーブル(プロセッサの保護モードメモリ割り当てテーブル)にアクセスし、パッチを適用し、DOS 16ビットコードを切り替えてモード32ビットを保護します。ウイルスコードは、Windowsカーネルの一部として機能し、必要なすべてのWindows機能にアクセスできます。

感染したPEファイルが実行されると、ウイルスはシステムメモリ割り当てテーブルにパッチを当て、そのコードをアプリケーションレベル(Ring3)からカーネルレベル(Ring0)に切り替えます。その後、ウイルスは感染したDOSドロッパと同じインストールルーチンに制御を渡します。

インストールルーチンは、制御を受け取り、システムメモリのブロックを割り当て、そこにウイルスをコピーし、Windowsの機能をフックし、制御を解放します。その後、元のウイルスコピーはDOSに戻り(DOSドロッパーの場合)、またはホストPEファイルのデータとコードを復元して返します。

ウイルスフッカー

ウイルスは3つのWindows機能をフックします。 1つは、I / Oポートトラップのコールバックプロシージャです。このウイルスはポート534Bhをフックし、それを "Are you here?"コール。感染したシステム条件下でこのポートから読み取ると、ALレジスタに21h( "!"文字)が返されます。 DOSおよびWindowsの両方のウイルスインストールルーチンは、メモリ常駐をインストールする前にそれを試します。このポートの番号はウイルスの名前に使用されました – 534BhはASCIIで "SK"です。

2番目のフックは常駐するWindows infectorsの "標準"です。これはファイルシステムのAPIフックです。ファイルのオープン、名前の変更、ファイル属性のget / set機能を傍受します。これらの呼び出しでは、ウイルスは感染ルーチンを実行します。

3番目のフックは、 "Install FileSystemApiHook"機能(前のフックをインストールするために使用される)を傍受します。この呼び出しは、ウィルスによってそのフカを隠すために使用されます。新しいフックがインストールされると、Windowsはこの関数を呼び出します。この時点で、ウイルスはそれを傍受し、独自のIFS APIフックを削除し、新しいもの(要求されたもの)をインストールしてから、ウイルスのフックを再インストールします。結果として、ウィルスフカーは常にフックのリストの一番上にあり、ディスクファイルがアクセスされたときに制御を受け取るのは最初です。

ウイルスIFS APIフカーには別のトリックがあります。ファイルシステムドライバ(FileSystem呼び出しの宛先)にアクセスするために、ウイルスは "ネイティブ"システムハンドラのアドレスを使用します。ウイルスは、呼び出し元のスタック内の純粋に文書化されたフィールドからこのアドレスを取得し、このアドレスを使用することにより、必要なファイル機能への直接呼び出しを実行します。

ファイルへの感染

IFS APIフッカーが制御を受け、感染ルーチンが初めて起動されると、Windowsシェルアプリケーション(通常はEXPLORER.EXE)に感染します。これを見つけるために、ウイルスはWindowsディレクトリのSYSTEM.INIファイルを開き、 "shell ="命令をスキャンして感染させます。

このファイルは常に実行されるため、ウイルスはそのファイルを変更できません。この問題を解決するために、ウイルスは「アップグレード」トリックを使用します。ウイルスはこのファイルを別の名前でコピーします(例:EXPLORER.EXE – > EXPLORER.EXFのファイル名の最後の文字に1つ追加します)、新しいファイルに感染し、Windowsに感染した元のファイルを "アップグレード"させます。これを行うには、ウイルスは標準的な方法を使用します.WindowsディレクトリにWININIT.INIファイルを作成し、そこに必要な「名前の変更」手順を書き込みます。

Windowsシェルが既に感染している場合、そのウイルスはアクセスされたファイルに感染します。まず、ファイル名の拡張子をチェックします。 .EXE、.SCR、.DLLファイルの場合、ウイルスはPEファイル感染ルーチンにジャンプします。 .HLPファイルの場合、ウイルスはそのコードを削除します。 .RARの場合、.ZIP、.ARJおよび.HAは、ウイルスの内容を自身の実行可能なdropperにアーカイブします。

Windows PEに感染する

PEファイルを感染させると、ウイルスは暗号化してコードを再配置(フィックスアップ)セクションに書き込み、結果としてこれらのデータを上書きします。 Windowsがアプリケーションをメモリにロードするために使用するため、ほとんどの場合、再配置には注意を払わず、すべてのアプリケーションが同じアドレスにロードされ、再配置は使用されません。アプリケーションが別のホストアプリケーションによってホストのメモリにロードされる場合は、Windowsローダーが再配置テーブルを処理し、アプリケーションのコードに必要な変更を加えます。これを修正するために、ウイルスはPEヘッダフィールドを修正します。すなわち、Characteristicフィールドの再配置フラグをクリアします(つまり、ファイルに再配置がないことを意味します)。再配置セクションのアドレスはゼロに設定されます。その結果、影響を受けるアプリケーションは別のアドレス(別のアプリケーションのアドレス空間)にロードすることはできませんが、スタンドアローンとして完全に動作します。

ウイルスは、再配置セクションヘッダーで必要な変更を行います。ランダムカウンタ(1から8まで)がセクション名をランダムに変更し、その本体を暗号化してそこに書き込むことに応じて、その特性を読み取り可能および初期化として設定します。ウイルスは、リロケーションセクションのサイズもチェックします。ウイルスコードには十分な大きさで、ウイルスコードがセクション本体に埋め込まれている場合にのみファイルに感染します。その結果、ウイルスはPEファイルのサイズを増加させることはありません。

感染したプログラムが実行されたときに制御を得るために、ウイルスはPEヘッダーのエントリアドレスを変更しません。これはもう一つのより複雑な方法を使用します – それは被害者のプログラム本体でランダムに選択されたコードをパッチし、JMP_Virusルーチンをそこに書き込みます。その結果、感染したプログラムが起動された直後にウイルスコードが実行されることはありません。パッチされたブランチが制御を取得した場合にのみ実行されます。場合によっては、このブランチがほとんど実行されない場合(例えば、エラー処理ルーチンの場合)、ウイルスはプログラムで長時間スリープしてから、何らかの余分な状況で飛び出すことがあります。

パッチを適用するプログラムの位置を特定するために、ウイルスは被害ファイルのブロックを読み取り、C / Pascalサブルーチンをスキャンします。これらのルーチンには標準のヘッダーとフッターがあり、ウイルスはそれらを見つけて、JMP_Virusコードのサブルーチンの入力と終了の指示の間に十分なスペースがあることを確認するだけです。

パッチサブルーチンからメインウィルスコードに制御を渡すJMP_Virusルーチンは、単一のJMP命令ではありません。より洗練されています。主なウイルスコードを解読して制御を渡す多形ループです。最大168バイトのコードを持っています。

要約すると、感染したプログラムは次のように実行されます。Windowsはプログラムをロードして実行し、ルーチンは何らかの作業を開始します。パッチされたサブルーチンがまだ実行されていないので、このウイルスは現時点で "スリープ"しています。このコードが制御されると、ウイルスJMP_Virusルーチンがアクティブになります。主ウイルスコード(リロケーションセクションに配置されている)を復号化し、復号化されたコードにジャンプします。ウイルスインストールルーチンは制御を取得し、Windowsメモリにウイルスをコピーし、ウイルスフックをインストールし、パッチされたホストのサブルーチンを復元し、制御を返します。

ウィルスは、Windowsシェルが感染しているか、またはC / Pascalルーチンが見つからない場合、そのJMP_Virusパッチをプログラムのエントリアドレスに直接書き込む場合があることに注意する必要があります。この場合、感染ファイルが実行されるとすぐにウイルスコードが制御されます。

感染アーカイブズ

このウイルスは、RAR、ZIP、ARJ、HAの4種類のアーカイブに影響します。ウイルスに感染すると、内部形式をアーカイブし、最後の項目としてDOSのドロッパーをアーカイブの最後に追加し、CRCフィールドを含むアーカイブ構造を慎重に変更します。 10個以上のファイルを持ち、少なくとも1つのCOMファイルまたはEXEファイルを持つアーカイブのみが感染しています。アーカイブへのウイルスの追加は、ランダムに生成された名前とCOMまたはEXE拡張子を持つDOS COMファイルです。

RARアーカイブの場合、このウイルスには他のアーカイブ感染ルーチンと比較してもう1つの分岐があります。このブランチは、RARアーカイブ内の「格納された」ファイルを検索し、ファイルに特定の日付とタイムスタンプがある場合、ウイルスは最後に実行された格納データを読み取ります。このトリックでは、ユーザーの操作なしで他のプログラムを実行することができます。ウイルスを "アップグレード"したり、スパイやその他のプログラムを実行するために使用することができます。このウイルス機能は、ウイルス作成者が他のPCを制御するために使用できる「バックドア」のように見えます。

感染したヘルプ

Windowsヘルプファイルに感染する可能性は、これらのファイルに独自のスクリプトサブプログラム(マクロ)があることに基づいています。これらのスクリプトは、WinHelpがヘルプファイルを起動すると自動的に実行され、スクリプト言語はディスクファイルにアクセスして作成して実行するのに十分強力です。

ウイルスはこの機能を使用してWindowsのヘルプファイルを感染させます。 HLPファイルの末尾にDOSドロッパーを「オーバーレイ」として書き出します(HLPファイルヘッダーはヘッダーに「ファイル長」フィールドを持ち、ウィルスドロッパーはこのデータにありません)。HLP内部構造を変更し、独自のスクリプトを追加しますそこへ。このスクリプトは、感染したヘルプファイルが起動されたときに自動的に処理される[CONFIG]セクション( "| SYSTEM"というHLPの内部構造)に書き込まれる10の命令を持っています。これらの10種類のウイルス命令は、小さな(約380バイト)ウイルスローダを抽出して実行します。ウイルススクリプトはこのローダーをDOSファイル(ランダムな名前)としてC:ドライブに作成し、コードを書き込んで実行し、ウイルスローダーが制御します。

HLPスクリプトのウイルスローダーのコードはASCII 7ビット形式に変換されます。各バイトはアルファベット2文字に変換されます。このコードが制御を受けると、バイナリコードに変換された後、ホストのHLPファイルの名前(ウイルススクリプトが引数として渡す)を取得し、HLPファイルのヘッダーを読み取り、ウイルスのオーバーレイコードのオフセットを取得し、読み取って上書きします独自のCOMファイルを作成し、再実行します。ウイルスのDOSドロッパーは制御を取得し、ウイルスは自身をメモリなどにインストールします。

このルーチンには問題を引き起こす例外が1つあります。ウイルスローダーのコードはASCII 7bitに変換されますが、このコードを復元するループには80h以内のオペコードがあります。これらの文字列がWindowsのHLPファイルからDOSファイルに保存されると、Windowsはそれらをテキスト文字列として処理し、インストールされているコードページに従って高ASCII文字を変換します。言うまでもなく、異なるコードページの下では、変換の結果は異なります。唯一のコードページが正しいコードをもたらします。これはロシア語のコードページです(ウイルス作成者がコンピュータにロシア語のサポートをインストールしていることを意味します)。システムにロシア語のサポートがインストールされていない場合、ウイルスローダーコードが破損しているか、実行されても動作しなくなり、停止します。

さらに、COMファイルを削除している間、ウイルススクリプトはNT固有のファイルC:\ NTLDRの存在をチェックし、このファイルが見つかった場合に戻ることに注意する必要があります。

Win95.SK.8699

これはウイルスのバージョンが改善されたものです。それは元のものに非常に近いですが、暗号化とより強力な多元的なエンジンでより多くの方法を使用します。また、トリックを使用してアンチウィルスモニタを無効にします。WindowsのメモリにロードされたGK95.VXDアンチウィルスコンポーネント(AVPおよびF-SECURE)を検索し、パッチで無効にします。 HLPファイルの感染ルーチンはこのウイルスのバージョンで修正されています。ロシア語のコードページではなく、どのコードページでも動作します。


オリジナルへのリンク