web-dev-qa-db-ja.com

未知のマルウェアの検出と分析

疑わしいバイナリがあるとしましょう。それが悪意のあるものであるかどうかを判断するにはどうすればよいですか?悪意のある場合は、それがどのように機能し、何をするかをリバースエンジニアリングしますか?たとえば、おそらく静的分析を使用していますか?

文書化された悪意のあるAPI呼び出しはどこかにありますか?読んだ書類には何も見つかりませんでした。サンドボックスに送信することはできますが、悪意のあるPEバイナリを分析する方法を学びたいです。

12
talfiq

文書化された悪意のあるAPI呼び出しはどこかにありますか。紙では見つかりませんでした。

いいえ。コンテキストによっては、すべてのAPI呼び出しが有効で悪意のあるものになる可能性があるためです。マルウェアの分析に関しては、これは通常手作業で行うものです。

Windows実行可能ファイルの概要は次のようになります。API呼び出しを行うすべてのWindows実行可能ファイルは、システムDLLからそれらのアドレスをインポートする必要があります。これは2つのレベルで発生します。静的、つまり、実行可能ファイルがDLLをその場でロードする場合、インポートは動的にコーディングされます。したがって、分析を開始する1つの場所は、API呼び出しに関して実行可能ファイルがインポートするものを調べることです。これは次の方法で行うことができます。

dumpbin /IMPORTS executablename.(exe|dll|ocx|scr|anything executable)

(または、逆アセンブラーは出力逆アセンブリでこの情報を提示します)。

もう1つの便利な手法は、すべての印刷可能なASCII文字列をダンプして、それらを確認することです。マルウェアの記述が不十分な場合、ハードコードされたURLがそこにある疑わしい場所や他のデータに見つかる可能性があります。そこにcmd.exeという文字列が見つかった場合、それはかなり疑わしいものです。

実行可能ファイルの他の疑わしいプロパティには、ヘッダーの不正使用など、PE形式の悪用が含まれます。すべてではないにしてもほとんどのリンカーはフォーマットのすべてのヘッダーを尊重しますが、一部は不要であり、Windowsは 実際にはヘッダーにコードを含む画像を実行します 慎重にアセンブリします。このような小さな実行可能ファイル、特にネットワーク機能を呼び出す実行可能ファイルは、疑わしいものと見なす必要があります。

画像の末尾を超えるデータを含む画像(これは許可されます-これは、Winzipセルフエクストラクタとexeのさまざまなインストーラが通常どのように機能するかです)にもデータペイロードがあるため、疑わしいと見なされる可能性があります。

ただし、優れたマルウェア作成者はこれを知っており、実際のサイズのコストがそれほど高くないため、これらの文字列を難読化して有効な実行可能ファイルを提供する以上の能力があります。この時点では、静的に、コードを分解してそれを読むことはしばしば価値があります。この時点では、アセンブリの完全な知識が必要です。リンクがどのように機能するか、ABIレベルで使用しているオペレーティングシステムと対話する方法についても同様です。ラッキーは人でいっぱいの実験室に言及します-これが彼らがやって来る場所です。

これは、画像を(実行せずに)静的に分析するために実行できる簡単なセットです。犠牲にするシステム(仮想マシンなど)がある場合は、それを実行して何が起こるかを分析することも検討してください。 Windows用のいくつかのツール:

  • DDKのdepends.exeは、実行可能ファイルをプロファイルして、インポートするすべてのDLLを処理します。
  • windbg.exeを使用すると、実行中のライブイメージをデバッグし、実行時にレジスターのさまざまな値、実行されている呼び出しを通知できます。一部の人はollydbgを好みますが、執筆時点ではx64のサポートがないため、使用しません。
  • SysInternalsのさまざまなツール アプリケーションが対話しようとしているレジストリキー、ファイルなどを見つけるのに役立ちます。 Mark Russinovichの writeup を参照して、このツールセットでソニールートキットを検出してください。
  • IDA Pro 。私は自分でこのツールを買う余裕はありませんが、それはこの業界のtheツールの1つです。

これらは、Linuxでのstraceltraceなどのコマンドと、pmapに相当します。これらは、プロセスが実際に何を試みたかに関する情報を提供し、そこにあるデバッグツールを使用して、ステップスルーすることができます。これは非常に危険であり、管理された環境でのみ実行する必要があります。

実際に実行中のプロセスに関しては、一般的に常に疑わしいと思われることがいくつかあります。これらは必ずしもプロセス自体が悪意があることを意味するわけではありません。悪用され、コードが挿入された可能性があります。彼らです:

  • mmap(0)。どのプロセスもゼロにmmapする必要はありません。オペレーティングシステムは、通常、標準的な使用状況では他のアドレススペースにマップされます。 0は簡単な参照アドレスなので、0へのmmapingはアセンブラベースのプログラムに役立ちます。たとえば、Jonesforthはこれを行うので、デバッガーの下の0バイトフィールドは、組み込み関数ではなく4番目の構文からコードが解釈されることを示します。これは便利なトリックです。ただし、概して、実行可能ファイルが完全にアセンブリで記述されていない限り、これは決して行われません。マルウェアの作者は、おそらく何もマップされていないので、簡単な参照ポイントとしてそれを使用するかもしれません。
  • 実行可能スタック。スタックは実際にはデータのみを含む必要があるため、スタック上のページは通常実行可能ではありません。
  • 他の場所でデータページを実行する。カスタムコードを読み込んで実行する必要があるプログラムはほとんどありません。
  • \Device\PhysicalMemoryまたはLinuxの同等の/dev/kmemなどの特定のオペレーティングシステムリソースへのアクセス。
  • ドライバーの場合、システムサービステーブルを変更します(Linuxではこれをsys呼び出しテーブルと呼びます)。 Linuxでは、2.6.24ish以降、sys呼び出しテーブルはデフォルトで読み取り専用としてマークされています。 Windowsでは、ドライバーベースのAPIが正当なコードが必要とする可能性のあるすべての機能を提供するため、Microsoftはそれらを約束しました システムサービステーブルを直接変更しないように継続的に試みます
  • 無差別DLLインジェクション、つまりシステム全体のdllインジェクション。シェル拡張のインストール、パスを起動するためのコードの追加、ブート実行の変更も参照-何でも autoruns 公開は両方とも正当である可能性がある操作またはマルウェアが再起動を持続させようとしています。プロセスを静的または動的に調べている場合、ここに何かが置かれている場合は、その動作を調査してください。

AVが署名を認識する方法については Rakkhi がカバーしています。特に、ウイルス対策の実装はマルウェアのように機能する(ただし、何をするのかではない)との彼の観察。シグネチャは、マルウェアを一意に識別するために(できれば、誤検知は発生しますが)ファイルの主要なプロパティ(サイズなど)とファイルの主要な特性(命令の特定の組み合わせとそれに続く圧縮データ例)。

キャリアの観点から、私はこの分野に入る方法について助言することはできません。私はアマチュアです。ただし、技術的には、バイナリを調べる方法を検討している場合は、安全なものを選ぶと思います。システムにあるプログラムを選択し、notepad.exeと言って、その機能と動作を確認します。次に、より複雑なものに進みます。これは、システムを一度セットアップすれば、この方法で損傷しないことがわかっているため、システムを再構築しなくても作業を改善できるためです。動的分析がうまくいかなくなった後、マルウェアが使用できなくなったためです。システムを破壊します。

うまくいけば、それを開始する方法のアイデアが得られます。本当に、これは巨大な分野であり、それを完全に説明するには、何冊かの本が必要です。最後に、マルウェアの取り扱いに注意してください

まだ言及されていないいくつかの本当に素晴らしいリソース:

  • x86アセンブリ ウィキブック。あなたが読んでいるものについての驚くほど良いリソース。
  • Agner Fog のアセンブリリソース。卓越したディテール。ここでobjconvを使用してプログラムを逆アセンブルします。これは、これまでに見た中で最高の無料の逆アセンブラーの1つであるためです(x64、SSE4などのサポートも含まれます)。
  • Windows PE形式 、興味があるだけです。
  • Windows SDKWindows DDK
  • stuxnetのマークR(再度)、パート1 。 SysInternalsを使用してstuxnetウイルスを分析します。
  • The Old New Thing -これは、MSDNのメンバーによるWin32レベルでのプログラミングに関するブログです。 Windowsプログラミングのさまざまな部分がどのように機能するかを実行します。時間をかけてそれに従っていくと、ひどいことがたくさんわかります。
  • Linux用の本当に小さいELFファイル 。それがクールだからといって。 PEのものとうまくいきます。
23
user2213

これを行うウイルス対策ベンダーの人々の研究室がすべてあります。それを1つ提出するのが最も簡単です。ソフォス、マカフィー、シマンテックなど

私が見たいくつかのプレゼンテーションから、分析では通常、バイナリの異常な動作やコンテンツを探すことが含まれます。皮肉なことに、行動はAV行動のように見えます。システムコールへのフック、ブラウザオブジェクトのハイジャック、自宅への電話など。コンテンツを非表示にすると、実行可能ファイルをExcelファイルやムービーなどに挿入できます。バイナリを逆コンパイルして、これらを確実に識別します。

AVは同様の方法で動作し、異常なアクティビティがないかプロセスとメモリを監視し、既知の署名がないかファイルを調べます(通常、これはすべてのバイナリのすべての行ではなく、個々のファイルレベルです)。

特定のマルウェアフォーラムは、フィールドに入るのを検討している場合、調査のためのより多くの情報とリソースを提供します

3
Rakkhi

アセンブリレベルでプログラムを静的に分析して、悪意のあるプログラムかどうかを判断することは、非常に困難なことです。それができれば、実行可能ファイルのバグも見つけることができると思います。ファイルシステムへのアクセスなど、危険な呼び出しを検索するだけの場合、悪意を持たずにそれを実行する多くのプログラムが見つかります。ファイルシステムの使用は、ほとんどのプログラムで一般的です。したがって、プログラムが実際に何をしているかを分析し、悪意のあるアクションを特定する別のレベルが必要になります。しかし、ソースコードは簡単に絡み合う可能性があり、コンパイラーはコードをシフトして分析がイベントのチェーンを見つけるのを難しくするため、この分析は複雑な深さでも機能する必要があります悪意のある攻撃の場合。次のステップとして、どのような悪意のある攻撃を検索する必要がありますか?そして、そのような精巧な分析方法で見つかるように、どのようにしてすべての攻撃を定義することができるでしょうか。

私が正しく理解していれば、現在のすべてのウイルス対策方法は、特定されたウイルスのパターンを認識することに基づいています。これは、悪意のあるプログラムを見つけるためのはるかに簡単な方法です。

この質問は、Douglas R. Hofstadterの Gödel-Escher-Bach の記述、およびself-replicating部。それは「何か強力なシステムがあれば、それ自体を破壊することができる」というものだったと思います。

要するに。逆アセンブルレベルで見ただけで(新しい)悪意のあるプログラムを見つけることができれば、OSや開発ツールはシステムが使いにくくなるように簡略化されると思います。十分に高度なOSと開発ツールが、システムとツールが悪意のある可能性がある場合、限られた知識では見つけられません(初期)。

3
epatel

シンプルで簡単な解決策は、サンプルを Virus Total に送信して、彼らの発言を確認することです。彼らはその上で何十ものアンチウイルス製品を実行し、結果をあなたと共有します。

Webベースのマルウェア(PDFファイルを含む)の場合、 Wepawet をお勧めします。

2
D.W.

おかしい私はちょうどベルリンのDAI労働者からのオーブリー-デリックシュミットによって与えられた講演に出席していた。私はそれが役立つことを100%確信していませんが、試してみてチェックアウトしてください 静的なスマートフォンの男性ウェア検出

基本的に、Aubreyは、IDA Proをさまざまなマルウェア(piratebayからダウンロード)の大規模なセットで使用し、統計比較を適用しました。

1
joecks