本ブログ記事は、2019年7月31日に米国で公開された抄訳版です。 原文はからご覧頂けます。 はじめに この記事では、Ghidraを使用して悪意のあるコードを解析する場合のアプローチについて説明します。 Ghidraは、米国国家安全保障局(NSA)が開発したソフトウェアリバースエンジニアリング(SRE)フレームワークであり、無料で利用できます。 この強力なリバースエンジニアリングツールは、2019年3月にオープンソースソフトウェアとしてリリースされて、予算の多寡に関係なく誰でも利用できるようになりました。 NSAの開発者は、GitHubでGhidra用のを管理して、数百件のバグ、質問、および拡張リクエストに対処しています。 Ghidraがリリースされてから、その寄稿者コミュニティは拡大し続けており、4つのマイナーリリースが公開されています。 ブログ記事では、Ghidraのリリースを取り上げて、その主な機能について説明しています。 Ghidraによるファイルの解析 実行可能ファイルのロード Ghidraの最新リリースは、から入手できます。 インストール手順は簡単で、zipアーカイブをダウンロードして解凍するだけです。 最初に、Ghidraバッチファイルを起動します。 リバースエンジニアリングの作業対象はマルチコンポーネントマルウェアサンプルであることが多いことを反映して、Ghidraは、個々のファイルではなく、プロジェクトに重点を置いています。 プロジェクトには、シングルユーザーで解析する非共有オプションおよびコラボレーションで解析する共有オプションがあります。 共有の場合、サーバー上のプロジェクトリポジトリに複数のユーザーがアクセスできます。 このブログ記事ではシングルユーザー解析に重点を置いていますが、共有機能はチームでリバースエンジニアリングする場合に重要であり、試してみる価値があります。 プロジェクトオプションを選択したら、次はプロジェクトの名前を指定します。 図1:プロジェクトの新規作成 この図の例では、の解析に重点を置きます。 Remcosは、Breaking-Security. netで販売されているリモート管理ツール(RAT)であり、感染したマシンをさまざまな方法で監視および制御できます。 次に、ファイルサンプルをプロジェクトウィンドウにドラッグアンドドロップします。 これにより、ダイアログボックスが開きます。 ここでは、デフォルトをそのまま使用できます。 「OK」をクリックして、次に進みます。 図2:ファイルのインポート インポートが完了すると、サマリー情報が表示されます。 図3:「Import Results Summary」 プロジェクトウィンドウでインポートしたファイルをダブルクリックすると、CodeBrowserが起動されて、ファイルを解析するかどうかを確認するプロンプトが表示されます。 ここで解析オプションを変更して、「WindowsPE x86 Propagate External Parameters」を追加できます。 このオプションを選択すると、関数の引数がコメントに追加されます。 次に、「Analyze」ボタンをクリックします。 図4:ファイル解析の開始 表示要素の変更 CodeBrowserでターゲットファイルをレビューしている間に、バックグラウンドでGhidraが解析を実行します。 「Listing」ウィンドウ(アセンブリコードが表示されます)を少し変更して見やすくすると、便利な場合があります。 図5:CodeBrowserのオプションの表示 環境に関する以下のオプションを変更することをお勧めします(この記事のスクリーンショットにはこれらの変更が反映されています)。 Listing Display: 読みやすくするために、フォントサイズを大きくして、太字の書式を有効にします。 左マウスボタンをクリックすると、選択されているテキスト全体が強調表示されます(他の逆アセンブラと同様)。 API参照の調査 興味のあるコードは、Windows APIの参照を手掛かりにして調査するのが一般的なやり方です。 Ghidraのインターフェイスでは、さまざまな方法でAPI参照を表示できます。 興味のあるAPIを選択して、その関数の呼び出し元を特定します。 たとえば、the CreateProcessA APIは、このプログラムからどんなプロセスが生成されるのかを理解するために調査する価値があります。 API名をクリックして右側で参照を選択するだけで、このAPIを参照している場所を特定できます。 以下の図では、2番目のCreateProcessAの参照をクリックしています。 図6:CreateProcessA API参照の特定 参照をクリックすると、該当する逆アセンブリが「Listing」ビューに表示されます。 図7:CreateProcessA API参照の追跡 仮想アドレス0x40A0DAのCALLで、CreateProcessAを参照していることがわかります。 CALLの前にある複数のPUSH命令は、CreateProcessAの引数を参照しています。 右側に、この関数のパラメータを示す自動生成コメントが表示されます を参照)。 dwCreationFlagsパラメータは、プロセス作成フラグを指定します。 このフラグが生成されるプロセスの特性になります。 全フラグのリストは、を参照してください。 値0x8000000は、記号定数を表します。 これをもっと人間が読みやすい表現に変換するために、この値を右クリックして「Set Equate…」を選択します。 ウィンドウが開いて、選択されている16進数値に対する複数のオプションが表示されます。 このフラグは、生成されたプロセスはコンソールウィンドウを起動してはいけないことを指定するものであり、正しい選択肢であると考えられます。 この値を選択して、「OK」をクリックします。 図8:16進数値を記号定数に変換 これで、アセンブリには、作成フラグが16進数値ではなくテキスト表現で表示されます。 図9:作成フラグのテキスト表現の表示 逆コンパイラ出力の表示 Ghidraで非常に役立つのが、逆コンパイラ出力という組み込み機能です。 これは、アセンブリコードの上位レベルのC言語表現を表示する機能です。 CreateProcessAの呼び出しを選択すると、「Decompile」ウィンドウが開きます(右端に表示されます)。 アセンブリに慣れているアナリストなら図9のコードを解読できますが、図10の逆コンパイラ出力のほうが明らかにこの関数呼び出しを短時間で解析できます。 逆コンパイラ出力は、「Listing」ビューで行われる変更との同期を維持していることに注意してください。 同様に、「Listing」ビューまたは「Decompile」ビューの一方で関数、変数、または引数の名前を変更すると、もう一方のウィンドウが更新されます。 文字列参照の調査 悪意のあるコードを特定するもう1つのアプローチとして、疑わしい文字列の参照を追跡する方法があります。 このサンプルは豊富な機能を備えており、難読化されているので、調査する価値のある文字列が多数存在します。 たとえば、「[Following text has been copied to clipboard]」という文字列が見つかっています(図11)。 これは、マルウェアがその監視アクティビティの一部としてクリップボードのテキストをコピーしていることを示しているのでしょうか。 それを確認するために、コード内でこの文字列の参照を探してみましょう。 図11:文字列を表示 この文字列が表示されている行をクリックすると、「Listing」ウィンドウにアドレス0x414CCCのデータが表示されます。 図12:文字列の参照の検索 表示されるウィンドウには、この文字列の参照が1つだけ表示されています。 図13:文字列参照の表示 この参照をクリックすると、0x406AF8に移動します。 上下にスクロールしても、クリップボードデータを収集するコードがあるのかどうか、あるのならそれはどのコードなのかはすぐにはわかりません。 関数呼び出しグラフには関数間の関係が表示されるので、関数呼び出しの概要を大まかに把握できます。 具体的には、OpenClipboard、GetClipboardData、およびCloseClipboardが実行されます。 あるいは、「Listing」ビューまたは「Decompile」ビューをクリックして「g」キーを押した後、関数のラベル名またはアドレスを入力して「OK」をクリックすると、そのコードにジャンプします。 逆アセンブリテキストを単純にレビューする以外に、関数内の判断ポイントを視覚的に表示すると、役に立つことがよくあります。 図15:関数グラフの表示 最初のコードブロックには、OpenClipboardの呼び出しと、それに続くTEST命令とJZ命令(0の場合にジャンプ)があります。 これらは、EAXに格納されている戻り値を評価します。 JZ命令は、EAXが0の場合にコードの実行が0x406A55にジャンプすることを示します。 戻り値0は、OpenClipboardの呼び出しが失敗したことを意味します。 EAXが0以外の場合、OpenClipboardの呼び出しは成功しています。 この場合、ジャンプは実行されません。 実行は右側のコードブロックに移り、そこでクリップボードデータを収集するための別のAPI呼び出しが行われます。 言い換えると、クリップボードを正常に開くことができた場合はそのデータを収集し、できなかった場合はクリップボード情報を収集するコードを実行しません。 実行は、条件(EAXが0)が真の場合は緑の矢印に従い、偽の場合は赤の矢印に従うことに注意してください。 スクリプティング Ghidraは、解析を自動化するためのJavaスクリプトとPythonスクリプト(Jython経由)の作成機能をサポートしています。 これにより200を超えるスクリプトが表示されますが、このほかにもオンラインでさらに多くのスクリプトが公開されています。 たとえば、特定の関数内のすべてのCALL命令を出力する単純なPythonスクリプトを作成します。 このスクリプトを作成するには、Script Managerの右上で「Create New Script」を選択します。 スクリプトの種類として「Python」を選択して、スクリプトの名前を指定します。 図16:Pythonスクリプトの作成を選択 スクリプトエディタ内で、以下のコードを追加します。 description: Print all CALLs within a function. getNext どのスクリプトでも同じですが、同じ目標を達成するにもさまざまな方法があります。 ここでは、Pythonスクリプトで関数、命令、およびオペランドにアクセスする方法の一端を示しています。 このスクリプトをテストするために、クリップボードAPIを呼び出していた関数からスクリプトを実行します。 それには、以下のアクションを実行します。 「Listing」ウィンドウで「g」キーを押して、0x00406A29にジャンプする。 Script Managerに戻る。 新しいスクリプトをダブルクリックする。 コンソールウィンドウが開いて、クリップボードAPIの呼び出しを示す出力が表示されます。 図17:テストスクリプトの実行 最後に Ghidraのリリースによって、多くの人が無償で強力なリバースエンジニアリング機能を利用できるようになりました。 マルウェア解析の初心者にとっては、リバースエンジニアリングを試してみる絶好のツールです。 経験を積んだアナリストは、代替的なこのフレームワークを見てびっくりするかもしれません。 うまくいけば、REによる対応力を高める新しいツールと手法が手に入ります。 最悪のケースでも、現在使用しているツールを愛用する理由が増えるだけです。 Ghidraについて詳しく学ぶには、公式のzipファイルに含まれているトレーニング資料を読んでください。 Twitterで Ghidraで検索すると、GhidraのTwitter公式アカウント 注:このアカウントは、NSAとの関連はありません など、他の役立つリソースが見つかります。 GhidraがGithubで管理している ページも優れたリソースです。
次のはじめに これはの22日目の記事です 今夏ののチューターをやったときあたりから、本格的に解析に興味が湧いてきたので、色々調べたことを公開するエントリを書くことにしました。 解析というものは独学でやるには敷居もリスクも高く、企業や研究機関に所属していないと本格的に行うことは難しいと思います。 そこで、ここでは趣味でやる解析と称して、出来るだけ敷居を下げられるように色々と解析関連の資料をまとめました。 ただ、私は解析については全くの初心者で、このエントリで私が解析について指南することは基本的にありませんし、載せているリンクも質を保証するものではありません。 ここでまとめているものは私がぱっと見で良さそうと思ったものであり、私自身に対するこれからの課題でもあります。 環境構築 解析をするにあたって環境構築は重要な項目になります。 間違っても(少なくとも趣味の範囲では)実機でを動作させるのはいけませんし、仮想環境上でも適切な設定を行わなければなりません。 この辺りの注意事項については暗黙の了解なのか詳しく書いてあるところはあまりなく、私がみた中ではこちらの書籍の環境構築の部分に詳しく書いてあります。 解析の環境は主にになると思います。 そのほかのOSのももちろん存在しますが、一般的なのシェアからか、も主に上で動作するものが多い印象です。 これから始めるならの用意が必須になります。 しかしは有料で安くはないので私はこちらのサービスを使いました。 前はmodern. と呼ばれていたものですが、名前だけ変わっています。 のバージョンも選べるので便利。 解析では非常に多様なツールを使用します。 ツールなどの用意はこのツールで簡単にできてしまいます。 簡単な手順で主要なツールを導入してくれます。 インストール方法など詳細はこちらにも書いてありますが、インストールはのREADMEに従ってやるのが良いと思います。 動画でも紹介されていますが、この動画と同じようにできるかどうかは保証できません 実際私は失敗した ので、実際にやるときには公式のサイトを参考にすると良いです。 でも、ツールの紹介などをしてくれるので一度見ておくと良いと思います。 しかし、解析系のツールは非常に多く、似たようなものもいろいろあります。 その中で選ぶのは本当に好みに左右されることもあり、FLAREVMではその全てを導入してくれるわけではありません。 慣れてきたらいろいろ使ってみて自分の環境を揃えて行くと良いかもしれません。 PEフォーマット のを解析する際、の実行可能ファイルの形式であるPEフォーマットについての知識は必須です。 日本語の資料だと、上記のや、以下のものが良いと思います。 解析系の記事や資料には冒頭にPEの解説が入ることがよくありますので、これだけをずっと読むよりは色々見ていく方が良いと思います。 またこれはよく言われていることなのですが、PEフォーマットはかなり複雑なものになっていて、全てを暗記して理解している人は少ないらしいです。 なので全体をざっと理解して、よく参照される部分(インポートテーブルなど)の繋がりを理解しておけば、良いと思います。 ちなみに、PEフォーマットの全体像を一枚にまとめたPDFがあります。 眺める程度に一度見ておくと面白いです。 解析 を解析するには表層解析、静的解析、動的解析があると言われていますが、基本的に何をするにしてもの知識は必須だと思っています。 また、私がツールなどを用いて解析するよりもを読んだりする方が好きなことから、の方をまとめていくことにしました。 まず、のの入門にはこちらの書籍が良かったです。 ソフトウェアの実行の仕組みからの解説、簡易デバッガの作成やシリアルコード抽出まで色々とやっているので結構楽しんで読めると思います。 次に、解析全般的に解説してくれているサイトです。 このサイトはかなり読みやすくて、絵やGIFも多用されていてわかりやすいと思います。 また、海外では動画で解析関連の動画がよく上がっています。 チャンネルをいくつか載せておきます。 解析というよりはライブアンパッキングという感じですが面白いです。 その他解析系の様々な技術の紹介をしてくれたりします。 最後に、結構有名なものだとは思いますが、OPEN SECURITY TRANINGがあります。 こちらはコンピュータセキュリティに関する様々な技術の資料や講義がフリーで公開されています。 解析だと以下のようなものが良いと思います。 資料も講義の動画も全部英語の上、ボリュームもすごいことになっているので全部すぐに理解するのは難しいとは思いますが、いろんなところからリンクを貼られているので、質はお墨付きではないかと思います。 また、OpenSecurityのトグに載っているこちらの画像によると、解析のスキルツリーはこのようになっているらしく、この通りに技術をつけていきたいですね。 解析は実際に手を動かして経験を積むのが一番なのですが、いきなりを読み始めたりするのは億劫になる人もいると思うので、こういうCrackMeと呼ばれるようなトグで色々触ってみると良いと思います。 あとは、CTFのbinaryやreversingといったカテゴリーの問題を解くのも良いと思います。 検体 を解析しようと思っても肝心のがなければ話になりません。 を建てて自分で集めるのも良いですが、すでに公開されている検体をもらってくるのが最も簡単な方法です。 こちらで色々公開されています。 普通になので取り扱いには重々注意してください。 ファイルをアップロードしたら色々解析してくれるサービスですが、課金ユーザーになるとアップロードされたファイルをダウンロードできるようになります。 こちらも同じようなサービスですが、無料でもアップロードされたファイルをダウンロードできます。 以下、がまとめられているサイトなどです。 I mainly collect APT variants among other types. — 0xffff0800 0xffff0800 news などの動向は絶えず変化し続けていくので、最新の情報を常に取得することが大切だと思います。 プロの方々は人それぞれ情報網を持っていたり、選別したサイトなどを見てキャッチアップしていると思います。 この辺りは僕も本当に知りたいところなのですが、個人的に良いなと思ったニュースサイトを上げていきます。 この辺りは有名ですし、日本語で書いてあって読みやすいし良いと思います。 英語ですが、関連のニュースを多く扱っているサイトです。 のセキュリティ系のチャンネルです。 その他、自分はここを見ている、こうやって情報収拾しているというものあれば、コメントなどで教えていただけると嬉しいです! おわりに 本来は全く別の技術的な記事を書くつもりだったのですが進捗が全然間に合わず、急遽別の候補であるこの記事を書きました。 まともな文章も書かず、ムラだらけのリンク集みたいな記事になってしまい すみません。 はじめにでも書いたようにこれは私自身への課題という側面があるのですが、こういう記事を見て解析に興味を持って、一緒に勉強してくれる人が出てきてくれたら嬉しいなという思いもあります。 来年の今頃にはもっと技術的に面白い記事が書けるように頑張ります。 attox.
次の本当にマルウェアに感染している? そもそも、なぜマルウェア感染を疑うようになったのでしょうか? 場合によっては、感染したとウソの警告を表示する詐欺広告の場合があります。 その部分を確認してください。 導入済のセキュリティソフトに「ウイルスを検出」と表示 パソコンやスマホにセキュリティソフト(アプリ)を入れてあり、そのソフトが起動して 「ウイルスを検出しました」などと表示されたなら、画面の指示に従って操作するだけで駆除できます。 サイト閲覧中に「ウイルスを検出」と表示 セキュリティソフトを入れておらず、パソコンやスマホで 「マルウェア感染しました」と表示が出た場合、ほぼ100%ウソの警告表示です。 ソフトを入れていないのに警告が出るはずがありません。 このウソの警告で表示されたソフトをインストールしたり、URLをクリックしたりすると、本物のウイルスに感染する可能性があります。 以下の記事で詳しく解説しているので、参考にしてください。 仮にウソだとしても、本当に感染していないか心配ということであれば、第2項から紹介している手順で、感染チェックを実施してみてはいかがでしょうか。 パソコン・スマホの動作が重いなど症状がおかしい セキュリティソフトを入れておらず、あるときから勝手に電源がオン・オフする、動作が重くなった・・・など感染が疑われる症状があるときは、ソフトを使ってチェック・駆除する必要があります。 第2項からマルウェアに感染しているかチェックできるツール、駆除の方法について解説しているので、そちらを読み進めてください。 無料のマルウェア検出・駆除ツールでスキャン! マルウェアの感染有無は、検出・駆除ツールを使うとカンタンにチェックできます。 無料、インストール不要のソフトも多いので、いくつかご紹介します。 【パソコン版】おすすめ検出・駆除ツール5選 検出・駆除できる無料オンラインスキャン 1. Kaspersky Virus Removal Tool• 提供元:NortonMobile• 言語:日本語• 備考:30日間無料 マルウェアが検出された際の駆除方法 前項のチェックツールを使って実際にマルウェアが検出された場合、どのように対処すればよいかを解説します。 マルウェアが検出されたときの対処方法 前項では、駆除もできるツールを紹介しました。 どのツールもマルウェア検出後、「駆除しますか?」などのメニューが表示されると思われます。 画面の指示に従って操作すれば駆除が完了するはずです。 ただ、インストール型の有料ソフトのほうが、より多種類のマルウェアを検出・駆除できます。 無料のスキャンツールは応急処置と考えたほうがよいかもしれません。 大体のソフトが有料版を30日間無料で利用できるので、「本当にすべて駆除できたのだろうか?」「このソフトでは駆除できていないかもしれない」と思うとき、そちらを使ってみてもよいでしょう。 それでも駆除できないときは? 場合によっては、スキャンしたソフトで駆除できないこともあります。 そのときは、つぎのように対処していってください。 初期化する(ただし、データが消えるので注意) パソコンの場合 パソコンのリカバリー方法は以下の記事で紹介しています。 マルウェアの感染を予防する方法 そもそもマルウェア感染しないためには、どのようなことに注意すればよいのでしょうか。 いくつか紹介していきます。 セキュリティソフトを入れる あらかじめセキュリティソフトが入っていれば、もしものときにすぐ検出・駆除できるので安心です。 ソフトによって機能や操作性などが違うので、さまざまなソフトの試用をしてみるとよいでしょう。 なかには、ソフトをひとつ買えばパソコン・スマホの両方で使えるものもあります。 どちらもマルウェア感染しないか心配、という方はこのようなソフトを利用してみてはいかがでしょうか。 メールに注意する 近年は標的型攻撃と呼ばれる「なりすましメール」でのサイバー攻撃が流行っています。 手口としては添付ファイルやメール本文のURLに、マルウェアを仕込むというものです。 場合によってはセキュリティソフトで検出できない、新種のマルウェアを添付してくるというさらに悪質なケースもあります。 本当に差出人に間違いないのか、注意してメールを開くようにしてください。 ソフトを最新版にアップデート OSのアップデートやよく使うソフトの新たなバージョンが公開されたら、できるだけ早めの更新をおすすめします。 古いバージョンはセキュリティの問題があるので、いつまでも更新しないのは危険です。 ブラウザやFlashなど、各ソフトのアップデート方法は以下の記事で解説しています。 定期的におこないましょう。 リムーバブルメディアの接続に注意する パソコンにUSBメモリをさすとき、パソコンでスマホの充電をするとき、マルウェア感染のリスクがあります。 もし、USBにマルウェアが入っていたらパソコンに感染しますし、パソコンからスマホも伝染します。 USBメモリは安全なものか?パソコンはマルウェアに感染していないのか?これらを確認したうえで、問題ないときだけ接続するようにしましょう。 まとめ マルウェアは多くの場合、セキュリティソフトで検知・駆除することができます。 しかし、なかにはインストールしてあるソフトで駆除できない場合もあるでしょう。 とくに会社のパソコンで感染してしまえば、社内機密の情報漏えいなど大事故につながりかねません。 ふだんからネット、メールの利用にはよく注意してください。
次の