パッカーは、実行可能プログラムを難読化、つまり変換する方法であり、結果は引き続き実行可能であり、実行時に同じ効果がありますが、見た目は異なります(したがって、静的アンチウイルスによって検出されません)。悪者は、カスタムパッカーを使用してマルウェアを難読化し、アンチウイルスがマルウェアを検出する可能性を低くしたり、アンチウイルスベンダーがマルウェアをリバースエンジニアリングして何をしているのかを理解したりすることを困難にします。
特定の実行可能ファイルがカスタムパッカーでパックされているかどうかを検出することはできますか?つまり、実行可能ファイルが与えられた場合、「カスタムパッカーでパックされている」か「されていない」のどちらかに分類したいと思います。既存のウイルス対策ツールは、実行可能ファイルがカスタムパッカーでパックされているかどうかを検出するのに優れていますか?
私は、以下の問題の簡単な変形について特に興味があります。悪者が使用している特定のカスタムパッカーについて知っているとします。このパッカーでパックされた実行可能ファイルを認識することは可能ですか?言い換えれば、実行可能EとパッカーPが与えられた場合、Eを「Pによってパックされた」または「されなかった」として分類したいと思います。そうするための既知のテクニックはありますか?それらはどの程度効果的ですか?
パッカーを識別する方法は数多く知られています。 「最も一般的な」 packer UPX とそのバリエーションは、EXeでのシグネチャ検出のため、通常、ウイルス対策エンジンによって「疑わしい」としてフラグが付けられます。
便利なツールがいくつかあります:
RDG Packer Detector 署名チェックに基づいて特定のパッカーを検出します(おそらくAVが行う方法と同じです)
PEiD PEファイルの最も一般的なパッカー、クリッパー、コンパイラーを検出し、逆アセンブルも可能(ソフトペディアからダウンロード可能)
簡単な signature DBチェッカー in pythonで遊ぶために(ただし、どこからDBを取得するかわからない( ここで試してみる) )
ここにリスト もあり、パッカーのいくつかのバリエーションがあります
パッカーの種類を検出したら、自動アンパッカー(既に使用可能な場合)を使用するか、手動でアンパックを開始できます。
既存のウイルス対策ツールは、実行可能ファイルがカスタムパッカーでパックされているかどうかを検出するのに優れていますか?
いいえ、実際にはそうではありません。(上記のツールと同様に)署名を探します。ブラックハットフォーラムで時間を費やしたことがある場合、人々は「FUDクリプター/パッカー」を宣伝します。つまり、通常はパッカーの動作方法を変更して、AVがシグネチャを取得しないようにし、マルウェアが侵入するのを防ぎます。
Symantectによると( この論文 で引用)
シマンテックは、200を超えるファミリの2000を超える亜種である多数のパッカーを収集しました。
上記の論文には、使用されているテクニック、採用されているカウンターテクニックなど、質問の2番目の部分に答える多くの情報が含まれています。
パックされた実行可能ファイルを自動的に検出するための可能な技術を提供するいくつかの科学論文があります。
例えば。 Perdisci、LanziおよびLee link パターン認識を適用して、パックされたファイルとパックされていないファイルを区別します。彼らがパターン認識に使用する機能は、それがどのように機能するかについての洞察を与えます:
標準セクションと非標準セクションの数
パックされた実行可能ファイルは、多くの場合、標準名に従っていません。
実行可能セクションのみの数
パックされた実行可能ファイルには、実行可能ファイルのみのセクションがないことがよくあります。
読み取り可能/書き込み可能/実行可能セクションの数
パックされた実行可能ファイルには、読み取り、書き込み、および実行可能なセクションが少なくとも1つ必要です。パックされていないファイルの実行可能セクションは、書き込み可能である必要はありません。
IATのエントリ数
通常、パックされた実行可能ファイルはインポートが少なくなります。
PEヘッダー、コード、データ、およびファイルエントロピー
暗号化されたコードはランダムに見えます。
LydaとHamrockは、エントロピーのみを使用する手法について説明しています。 リンク
Exeファイルがパックされているかどうかを識別するのは非常に簡単です
1)PEView
でファイルを開き、セクション名を確認します。多くの場合、セクションはUPX0
、UPX1
、MPRESS1
として表示されます。
2)PEView
でファイルを開き、テキストセクションに移動して、行データのサイズと仮想サイズを確認します。 2つの値の差が非常に大きい場合は、ファイルがパックされていると考えてください。テキストセクションのすべてのコンテンツがゼロになる場合があります。