ウイルス対策プログラムはどのようにしてEICARテストウイルスを検出しますか?
-
19-08-2019 - |
質問
EICARテストウイルスは、アンチウイルスプログラムの機能をテストするために使用されます。ウイルスとして検出するには、
ウイルス対策プログラムにテストウイルスのウイルス定義が含まれている場合
または
ヒューリスティックは、疑わしいパターンとして検出し、ウイルスとして検出します。
(ダウンロード中にAVプログラムがファイルを削除する場合がありますが、ウイルスをEICARテストウイルスとして識別しません。疑わしいオブジェクトとして-ウイルス名、詳細などではありませんか?)
解決
テストウイルスのポイントは、エンドユーザーがAVソフトウェアがオンになっていることを確認し、ウイルスの影響を確認できるように、無害であることがわかっているウイルスとして受け入れられることです。識別。 AVソフトウェアのファイアドリルを考えてください。
ほとんどの人が署名を持っていると想像し、それをそのように直接認識します。
実際のEICARテストのビットパターンに、疑わしいアクティビティのオペコードのような臭いのあるビットパターンが含まれていても驚かないでしょうが、そうであるかどうかはわかりません。存在する場合、単純なヒューリスティックウイルス認識エンジンの有効なテストである可能性があります。ただし、EICARテストは long の期間にわたって行われているため、これをキャッシュするヒューリスティックは、今のところ野生のものをキャッチするのに十分ではないことも想像できます。
EICARを認識することは、<!> quot; AVがインストールされ、スキャンするはずだったものをスキャンする<!> quot;よりも強力な主張の証拠になるとは思わないでしょう。また、AVシステムを開発する場合、強い主張をしようとしないでください。
更新:
実際のEICARテストウイルスは次の文字列です。
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
これは、いくつかの興味深いプロパティを持つように( Wikipediaの記事に従って)慎重に作成されました。 。
まず、印刷可能なASCII文字のみで構成されます。多くの場合、末尾に空白や改行が含まれますが、認識や機能には影響しません。
2番目のプロパティが発生します。実際には、8086 CPUの実行可能プログラムです。これは、拡張子が.COMのファイルに(たとえばメモ帳を介して)保存でき、MSDOS、MSDOSのほとんどのクローン、およびWindowsコマンドプロンプトのMSDOS互換モード(Vista、ただし、64ビットWindowsではそうではありません。16ビットリアルモードとの互換性はもはや優先事項ではないと判断したためです。)
実行すると、出力として文字列<!> quot; EICAR-STANDARD-ANTIVIRUS-TEST-FILE!<!> quot;終了します。
なぜ彼らはこの努力に行ったのですか?どうやら研究者たちは、実際にウイルスを捕獲し、実際の感染の危険を冒すことなくライブスキャナーをテストできるように、安全に実行できるプログラムを望んでいたようです。また、従来の手段と非従来の手段の両方で簡単に配布できることを望んでいました。すべてのバイトが印刷可能なASCII文字でもあるという制限を満たすx86リアルモード命令セットの有用なサブセットがあることが判明したため、両方の目標を達成しました。
wiki記事には、ブローバイブローの説明へのリンクがあります。プログラムが実際にどのように機能するかについてもお読みください。複雑さを増すのは、コンソールに印刷するか、DOSリアルモードでプログラムを終了する唯一の方法が、ソフトウェア割り込み命令を発行することであり、その命令コード(0xCD)は印刷可能な7ビットASCII文字ではありません。さらに、2つの割り込みにはそれぞれ1バイトの即値パラメーターが必要で、そのうちの1つはスペース文字である必要があります。自己課された規則はスペースを許可しないことであったため、プログラムの最後の4バイト(<!> quot; H + H * <!> quot;文字列内)はすべて、命令ポインターがそこに到達する前にその場で変更されますそれらを実行します。
XPボックスのコマンドプロンプトでDEBUGコマンドを使用してEICAR.COMを分解およびダンプすると、次のように表示されます。
0C32:0100 58 POP AX 0C32:0101 354F21 XOR AX,214F 0C32:0104 50 PUSH AX 0C32:0105 254041 AND AX,4140 0C32:0108 50 PUSH AX 0C32:0109 5B POP BX 0C32:010A 345C XOR AL,5C 0C32:010C 50 PUSH AX 0C32:010D 5A POP DX 0C32:010E 58 POP AX 0C32:010F 353428 XOR AX,2834 0C32:0112 50 PUSH AX 0C32:0113 5E POP SI 0C32:0114 2937 SUB [BX],SI 0C32:0116 43 INC BX 0C32:0117 43 INC BX 0C32:0118 2937 SUB [BX],SI 0C32:011A 7D24 JGE 0140 0C32:0110 45 49 43 41 EICA 0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV 0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$ 0C32:0140 48 DEC AX 0C32:0141 2B482A SUB CX,[BX+SI+2A]
JGE 0140
までの命令を実行した後、最後の2つの命令は次のように変更されました。
0C32:0140 CD21 INT 21 0C32:0142 CD20 INT 20
ほとんどのDOSシステムコールは、実行する機能を指定するINT 21
またはAH
レジスタの値を持つAX
を介してディスパッチされました。この場合、INT 20
は0x09です。これは、オフセット0x011Cで始まる文字列を印刷する文字列印刷関数です。ドル記号。 (純粋なDOSでは別のトリックでドル記号を印刷する必要がありました。)<=>呼び出しは、そのポイントを超える余分なバイトを実行する前にプロセスを終了します。
自己修正コードは初期のウイルストリックでしたが、ここでは文字列で使用できるバイト値の制限を維持するために使用されます。最新のシステムでは、COMファイルを実行しているMSDOS互換モードで強制されている場合、データ実行保護機能が変更をキャッチする可能性があります。