検索
  • サポート

  • Secure the Enterprise

  • Secure the Cloud

  • Secure the Future
  • その他
  • サポート

IDAPythonを使って作業を楽に: パート6

Josh Grunzweig 6 10, 2016 at 03:00 午後

※本記事は2016年6月9日に米国で掲載されたブログ記事の抄訳を基にしています。

 IDAPythonに関するブログ シリーズのパート5では、IDAPythonを使って悪意のあるサンプルから中に埋め込まれている実行形式ファイルを抽出しました。この第6回ではIDAを高度に自動化した利用法を話題にしたいと思います。具体的には、GUIを起動せずにIDAにファイルをロードし、IDAPythonスクリプトを自動的に実行して結果を抽出する方法について見ていきます。このテクニックを使うときわめて迅速にたくさんのサンプルを処理することができ、IDAの新しいインスタンスにおいて各ファイルを手動で開いてからIDAPythonスクリプトを実行することは必要ではなくなります。

GUIを起動せずにIDAをコマンドラインだけで実行できると聞いて驚かれる読者も多いことでしょう。そうするにはIDAの実行形式ファイルを「-A」スイッチ付きで起動しなければなりません。この特別なスイッチはIDAに対して自律モードで動作するよう伝えるもので、これによりウィンドウもダイアログ ボックスも一切ユーザーの前に現れなくなります。

以下のコマンドラインの例はこのテクニックがOS XとMicrosoft Windowsのどちらにおいても利用されることを示しています。これらのサンプルにおいて、「-c」スイッチにより、すでにIDBファイルが存在している場合であってもIDBファイルが新たに生成されます。さらに、実行時に起動されるIDAPythonスクリプトが「-S」スイッチによって指定されます。この記事の後半でこれらのスイッチを使います。

 

シナリオ

この例ではCmstarマルウェア ファミリを使います。これはUnit 42が以前考察したマルウェア ファミリです。Cmstarマルウェア ファミリをご存じない読者のために付け加えますと、これは特定のURLにて提供されているファイルをHTTPで転送して被害者のシステム上でこのファイルを実行するダウンローダーです。問題のURLは次のルーチンを使って難読化を解除することができます。

 

このことを知ったうえで私たちが次に行う仕事は、このデータがCmstarサンプル内のどこに存在しているか突き止めることです。いくつかのサンプルの関連付けをした結果、memcpyの呼び出しの使用により2つの暗号化された文字列が1個の変数に格納されていると私たちは分析しました。一方の文字列にはマルウェアの接続先となるドメインまたはIPアドレスが含まれており、他方の文字列にはURIが含まれています。

memcpy命令が発生する場合に下記と同じ一連の命令が実行されることも分かっています。

mov esi, [オフセット]
pop ecx
lea edi, [変数]
rep movsd

図1 Cmstar内のエンコードされた文字列を含む関数
 

この情報があれば、IDAPythonを使用してこの一連の命令の特定を試みることができます。それを行うために、関数IDAが特定するたび順次処理し、ジャンプ関数としてマークされている関数または既知のライブラリに属する関数を無視して進みます。その後、一度に4つの命令を調べるためスライディング ウィンドウを使用して残りの関数を順次処理し、以前に特定されたマーカーを探し、一致するものがあるかどうか判別します。

 

上記の例では、一致が見つかった場合、単に、デバッグ文字列を出力しているだけです。このコードをIDA内でMD5ハッシュ「4BEFA0F5B3F981E498ACD676EB352D45」を使用してサンプルに対して実行し、次の出力を得ました。次でお分かりのとおり、私たちは両方の難読化された文字列のアドレスを特定することに成功しました。

図2 Cmstarサンプルに対するスクリプトの実行
 

この時点で、特定済みのオフセットを使用して、ポイント先の文字列を抽出できます。その後、これらの文字列は、以前に定義したdecode()関数を使用してデコードできます。

これをすべてまとめると、次のスクリプトが考えられます。

 

この段階で、非GUIモードでIDAを実行する自動化手法を使用できます。上記のスクリプトを使用します。これによって、ユーザーが介在する必要なく、このスクリプトを多数のサンプルに対して実行できます。私たちは、次のようにOSXマシンでスクリプトを実行します。

for x in ls; do /Applications/IDA\ Pro\ 6.9/idaq.app/Contents/MacOS/idaq -c -A -S/tmp/script.py $x; done

私たちは結果を保存するようにスクリプトに命令したため、数分後、/tmp/output.txt内に次のように出力されます。

図3 /tmp/output.txtの出力
 

結論

IDAPythonのパワーとIDAのコマンドライン スイッチの両方を活用することで、多数のCmstarサンプルのダウンロード場所の抽出を自動化することに成功しました。この手法は、より多くのサンプルに簡単に適用できるため、IDA内で各ファイルを手動で開く必要なく、IDAPythonアクションを実行できます。今までこのIDA機能に気付いていなかった読者の方々は、ぜひ、それを試してください。大量のファイルで作業する際に、時間を節約できるだけでなく、ものごとが遥かに容易になります。


 

ニュース

Wireshark によるパケット解析講座 2

前回は Wiresharkの列表示のカスタマイズ方法について見ていきました。本稿では脅威インテリジェンスの調査上便利なフィルタリングの設定方法について説明します。
January 20, 2019

ニュース

Wireshark によるパケット解析講座 3

前回までではWiresharkの列表示のカスタマイズ方法と表示フィルタの式について見ていきました。本稿ではトラフィックから感染ないし侵害を受けたホスト名やユーザーを特定する方法について説明します。
March 31, 2019

ニュース

Wireshark によるパケット解析講座 4

セキュリティ専門家は、不審なアクティビティのパケット キャプチャ(pcap)をレビューする際、より詳しく調べるために、オブジェクトをpcapからエクスポートしなければならない場合があります。
July 12, 2019

ニュース

Wireshark によるパケット解析講座 1

Wireshark は無料で利用できるプロトコル アナライザです。 Wireshark を使うとネットワーク トラフィックをキャプチャしたり、キャプチャしたパケットを表示させることができます。そこでパロアルトネットワークスの脅威インテリジェンス調査チーム Unit42 に所属するアナリストが、Wireshark を使ってマルウェア検体が生成したトラフィックをレビューするさいに利用している便利な使いかたをご紹介していきます。
January 17, 2019

ニュース

DNSトンネリング: 攻撃者はDNSをどう悪用するのか

悪意のある攻撃者は、ドメインネームサービス(DNS)をコマンド&コントロール(C2)用通信チャネルとして悪用してきました。またこのプロトコルはこのほかに、データを漏出させる目的でも悪用されてきました。DNS の悪用はC2に「ハートビート」接続のために通信するという用途からさらに広がっており、攻撃者はここ数年、悪意のあるデータやペイロードをDNS経由で被害者のシステムに侵入させる用途にもDNSを使っています。本稿では、DNSを悪用したデータ侵入・漏出の種類、方法、使用方法を紹介し、その防御メカニズムへの指針を示します。
March 18, 2019

ニュース

Cortex XDRの紹介

パロアルトネットワークスは、セキュリティの最先端を行く3つのイノベーションを発表しました。これらのイノベーションによって、セキュリティ業界の変革に挑もうとしています。まず1つ目は、ディテクション(検知)・調査・レスポンスSaaSアプリケーションCortex XDRです。これは、高度な攻撃をディテクションして阻止するだけでなく、将来のサイバー攻撃に備えて防御機能を絶えず進化させ、セキュリティ運用をサポートするSaaS型のアプリケーションです。
April 14, 2019

メールニュース購読

イベントへの限定招待、Unit 42の脅威アラート、サイバーセキュリティのヒントなどを配信します。

このフォームを送信すると、利用規約とプライバシーに関する声明に同意したことになります 。
Subscription Reward

リソース

  • 会社概要
  • イベント
  • リソースセンター
  • プレスリリース
  • Unit42 ブログ
  • ブログ
  • JAPAN LIVE COMMUNITY
  • Tech Docs
  • キャリア
  • お問い合わせ
  • Sitemap

法定通知

  • プライバシー
  • 個人情報保護基本方針
  • 利用規約

アカウント

  • 購読の管理
  • パートナーログイン
  • パートナーになる
脆弱性の報告
  • USA (ENGLISH)
  • AUSTRALIA (ENGLISH)
  • BRAZIL (PORTUGUÉS)
  • CANADA (ENGLISH)
  • CHINA (简体中文)
  • FRANCE (FRANÇAIS)
  • GERMANY (DEUTSCH)
  • INDIA (ENGLISH)
  • ITALY (ITALIANO)
  • JAPAN (日本語)
  • KOREA (한국어)
  • LATIN AMERICA (ESPAÑOL)
  • MEXICO (ESPAÑOL)
  • SINGAPORE (ENGLISH)
  • SPAIN (ESPAÑOL)
  • TAIWAN (繁體中文)
  • UK (ENGLISH)
  • Facebook
  • Linkedin
  • Twitter
  • Youtube

© 2020 Palo Alto Networks, Inc. All rights reserved.