ウイルス対策の主な機能の1つは、ユーザーのコンピューターを、これまで知られていない脅威、いわゆる0デイウイルスから保護することです。 本日、実際にアンチウイルスのこの機能を評価します。 これを行うには、ウイルス対策スキャナーでテストプログラムを確認し、通常どおりVirus Totalを使用します。 同時に、このようなテストではさまざまなHIPSテクノロジーなどが評価されないため、動作を分析することでファイルの悪意のある機能を即座に判断できることに注意してください。 つまり、このテストは、ウイルス対策製品での単純なファイルチェックと同じです。 始めましょう。
古典的なマルウェアである通常のTrojan-Downloaderをテストします。 アンチウイルスと呼ばれるソフトウェア製品は、脅威を問題なく認識するはずです。 最初のテストプログラムは次のとおりです。
Virus Totalに奇跡のプログラムをロードすると、次の図が表示されます。
私たちの最初のテストは、43のアンチウイルスのうち18のみによって認識されました。 Avast、Comodo、Nod32、Panda、Symantecなどの悪名高いウイルス対策ソフトウェアを直ちに放棄しました。 彼らはどのようにしてこのような原始的なウイルスをバイパスできたのでしょうか? そのような「アンチウイルス」から道徳的な報酬を要求する時ではないでしょうか?
アンチウイルスが構造的な例外を使用するなどの一般的なトリックを処理できるかどうかを確認してください。 2番目のテストは次のようになります。
ここで独自の例外ハンドラを作成し、無効な操作を実行します。その結果、ハンドラに制御を転送する必要があります。 私たちの実験的なウイルス対策ソフトはこれに対処できますか?
サンプルは43のアンチウイルスのうち19で認識されました。 それ以外の場合、結果は変更されていません。 アンチウイルスは、構造的な例外を正しく処理することはできませんが、プログラムで使用されている疑わしい行を単に誓うだけでしょうか? これを確認し、データセクションを暗号化します。
次に、何が変わったのか見てみましょう。
繰り返しますが、43個のアラームのうち同じ18個ですが、McAfeeは故障しており、SUPERAntiSpywareは再び不明なアラームを発行します。 さて、もっと複雑なものを思い付く時が来ました。 アンチウイルスが推測しそうにないものを使用します。 私の選択はCPUIDコマンドにあり、これを使用してプロセッサ名を取得できます。 これは簡単にできます:
mov edi, offset szName
mov eax, 080000002h
BYTE 0fh, 0a2h; CPUID
mov [edi], eax
add edi, 4
mov [edi], ebx
add edi, 4
mov [edi], ecx
add edi, 4
mov [edi], edx
add edi, 4
mov eax, 080000003h
BYTE 0fh, 0a2h; CPUID
mov [edi], eax
add edi, 4
mov [edi], ebx
add edi, 4
mov [edi], ecx
add edi, 4
mov [edi], edx
add edi, 4
mov eax, 080000004h
BYTE 0fh, 0a2h; CPUID
mov [edi], eax
add edi, 4
mov [edi], ebx
add edi, 4
mov [edi], ecx
add edi, 4
mov [edi], edx
このコードを実行すると、プロセッサ名がszName変数に表示されます。 どのように使用できますか? しかし、結果に基づいて、データセクションをさらに暗号化するとどうなるでしょうか? この場合に達成する必要があるのは、さまざまなプロセッサでプログラムを実行する能力を維持することだけです。 通常、そもそもプロセッサーの名前には、それを製造する会社の名前が含まれていることがわかります。 このアンチウイルスは気づいています-それが質問です)))簡単な関数を書きましょう:
unsigned int ParseName(char *str)
{
char *p=str;
while(*p==' ') p++;
unsigned int hash=p[0]*34+p[1]*344+p[2]*1152+p[3]*44233+p[4]*234321;
if(hash==29948155)
{
return p[0]+p[1]*0x100+p[2]*0x10000+p[3]*0x1000000;
}
return 0x75273451;
}
ここではすべてが簡単です。最初にスペースを省略し、最初の単語からハッシュのようなものを計算し、ハッシュが参照値と一致する場合、この最初の単語に基づいて復号化キーを計算します。 関数を任意のコンパイラでコンパイルし、そのアセンブラコードをプログラムに挿入するだけです。 コンピューターにIntelプロセッサーを搭載しているので、Intelという単語からハッシュを計算しました。 したがって、4番目のテストはすべてのプロセッサーで機能するわけではありません。 そして、それを修正し、AMDを怒らせないようにする方法は、あなた自身が推測すると思います。 その結果、次のようになります。
ファイルをダウンロードして結果を確認します。
43のウイルス対策ソフトウェアのうち5つだけがタスクを完了しました。 そして、SUPERAntiSpywareはここでウイルスを誤って明らかに見つけました)))さて、プログラムコードも暗号化するとどうなりますか? たとえば、ウィンドウを作成し、ウィンドウに含まれるテキストを見つけて、受信した情報に基づいてプログラムコードを解読します。 次のようになります。
ファイルを送信します。
現在、43のウイルス対策ソフトのうち6つが反応していますが、そのうち4つはマルウェアの種類を特定できませんでした。 この事実は、ウイルス対策ソフトウェアが単にタスクに対処しなかったことを示しています。ウイルスの本体を解読できず、ファイルが圧縮されているためにアラームを発行しただけです。 一般に、これは道徳的に間違っています。実行可能ファイルのパッケージ化に問題はありません。 ウイルス対策プログラムがパックされたファイルを正常に動作できないのは、私たちの責任ではありません。 結論ナンバーワン-不快な事件を避けるために、パッケージング後は常にソフトウェアを確認してください。 結論2番目-最後のテストを実際に管理したのは、KasperskyとMicrosoftの2つのウイルス対策だけです。 接続先は不明です。 データベースになんらかの署名を持ち込むことができたという事実でしょうか? または、署名がXOR暗号化を突破できますか? 特にカスペルスキーは私のお気に入りのウイルス対策ソフトウェアであり、Microsoft製品に関する苦情はありません(... Windows 8が登場するまで)。
グローバルな結論:今日のプロアクティブな技術はまだ完全とはほど遠いものであり、だますのはそれほど難しくありません。
PS動作を分析することにより、悪意のあるファイル機能をオンザフライで検出できるHIPSテクノロジーは、この記事では未検討のままでした。 したがって、すべてが見た目ほど悪いわけではありません-アンチウイルスでファイルをスキャンして何も見つからない場合、それを実行すると、アンチウイルスはおそらく警告を出します。 しかし、このトピックはまったく別の話です。