エンジニアリング

Elasticセキュリティでマルウェア分析サンドボックスを構築する

筆者はElasticの情報セキュリティチームでセキュリティアナリストとして働いています。業務上よくあるシナリオの1つに、「このファイルは安全に開けますか?」という問い合わせへの対応があります。 また別のシナリオもあります。あるユーザーから「フィッシングメールを受信したが、添付ファイルは開いていない」と報告を受けてログを確認すると、他にも10名ほどのユーザーがそのメールを受信したものの報告をしていないこと、システムが一切のアラートを発さなかったことが判明する、というものです。フィッシングメールの典型的な攻撃手法に、添付ファイルに悪意のあるコードを入れないことでアラートの発動を回避し、ソーシャルエンジニアリングを使ってパスワードを盗もうとする、というものがあります。

このような場合、セキュリティチームはファイルが実行された時システム内で起きた事象を解明し、検知や停止の機能が動作したか判断しなければなりません。検知や停止の機能が発動していない場合は、ホストでどのようなアクションが生じたかを早急に把握する必要があります。このようなケースに対しては、十分なインストルメンテーションを行った仮想マシン(VM)サンドボックスを用意しなければなりません。サンドボックス内で問題のファイルを実行し、何が生じるか観測するためです。Elasticの情報セキュリティチームはカスタマーゼロの取り組みの一環で、常時プロダクトの限界の更新に取り組んでいます。そこでチームとして、Elasticプロダクトを使ったサンドボックスを構築することにしました。

本ブログ記事は、Elastic情報セキュリティチームで、FleetとElasticセキュリティを完全にインストルメンテーションしたマルウェアサンドボックスとして活用するために実施した具体的な手法を解説します。Elasticのテクノロジーはインストルメンテーションやサンドボックスからのデータ収集に最適であり、構築も簡単で、時間も数分しかかかりません。

動的マルウェア分析を行う理由

動的マルウェア分析とは、隔離したVM内で疑わしいソフトウェアの一部を実行し、観測する行為です。動的分析の目的は、次の点を解明することです。

  • マルウェアが実行するプロセス
  • マルウェアによって生じたホストの変化
  • マルウェアが実行したネットワーク接続
  • 攻撃の第2、第3段階でマルウェアがダウンロードしたファイル

マルウェアの観測完了後は、観測で得た情報を活用して新たな検知や防御を作成したり、ネットワーク内の他の悪意あるアクティビティを追跡したりすることができます。

Elasticを使う理由

過去にマルウェアの観測や分析用のサンドボックス環境を作成した経験があれば、インストールから多種多様なソフトウェアの設定まで、サンドボックスのセットアッププロセスには長い時間がかかることもあることをご存じかもしれません。具体的にはWiresharkやRegshot、ProcMonなど一連のソフトウェアのインストール、設定にはじまり、マルウェアの実行手順を手動で進め、アクションを観測したり、ドキュメントにまとめたりします。

Cuckoo Sandboxのように、自動化をはじめ多数の機能や仕様を備えた高度な動的マルウェア分析サンドボックスシステムも存在します。しかし通常は、セットアップと設定に長時間かかり、すべての情報セキュリティチームに必須といえるものではありません。最近見られるフィッシングマルウェアのサンプルの多くは、認証情報を盗むためのソーシャルエンジニアリングを採用しており、ユーザーによる操作を必要とします。こうした場合、自動化されたシステムでは不正の兆候のすべてを収集することはできない可能性があります。

一部のマルウェアサンプルではこうしたツール類の存在を確認して実行を停止する挙動も見つかっており、分析が一層困難になっています。また別のマルウェアでは、積極的に分析ツールを検索してプロセスをキルしたり、サンドボックス内のログを上書きすることが判明しました。こうした理由で、動的マルウェア分析は、即時的な対応を必要とするアクティブなインシデントの作業に活用するには時間がかかりすぎることがあります。

一方、Elastic Endpoint Securityはシステムで起きているアクションに関する情報を収集し、分析用のプロセスツリーをすばやく可視化する単一のエージェントです。可視化によってユーザーが実際に起きていることをすばやく、簡単に調査できるほか、検知や防御の機能を向上させるために必要なインジケーターも入手できます。Elasticセキュリティに搭載された[Analyzer](アナライザー)ビューはプロセスツリー全体を可視化し、最初のマルウェアプロセスによって作成されたチャイルドプロセスとその関連インジケーターも表示します。

[Analyzer]ビューがすばやく可視化するプロセスツリーで、プロセスが実行したアクションを確認できる

独自にサンドボックスを構築する

マルウェア分析サンドボックスを使用すべき理由はいくつかあります。今回のユースケースの目標は、標準的なエンタープライズビルドを模したバーチャル環境を用意することです。かつ、マルウェアが発動するすべてのアクションを観測するために徹底的なインストルメンテーションが必要です。

サンドボックスの作成に使われる手法に、各ビルドに2つのイメージを作成するというものがあります。これは、1つにはエンタープライズに導入しているものと同じ保護機能を入れて「強化したイメージ」を構築し、もう1つではほとんどの保護機能を無効化して「脆弱なイメージ」を構築するというものです。2つのイメージを構築するメリットとして、強化したイメージではファイル実行時に環境内で起きることを確認でき、脆弱なイメージではマルウェアの完全な実行を確認できるということがあります。大規模な法人にはほぼ例外なく、一部の保護機能を無効化したシステムが存在しています。したがって、両方のメソッドを活用することが推奨されます。

テスト用システムを構築する

最初の手順は、ファイルの実行に使用するVMの作成です。イメージ構築用の仮想化ソフトウェアは、何を使用しても構いません。ここでは仮想化ソフトウェアのセットアップ手順の記述を省略しますが、マルウェアを実行する際、組織のホストとエンタープライズネットワークから可能な限りシステムを隔離することが重要です。本記事では、Windows 10 VMとMacOSイメージを構築するシナリオに沿って進めます。組織で標準的なLinuxビルドをお使いの場合は、さらにLinuxビルドを構築することもできます。

VMの作成を完了したら、MS OfficeやAdobe Reader、Pythonなど、組織で一般的に使用されているソフトウェアをすべてインストールされることをお奨めします。組織のユーザーがファイルを実行時に使用する可能性のあるソフトウェアは、すべてサンドボックスに含めておく必要があります。Windows VMでは、PowerShell ScriptBlockログ記録の有効化が推奨されます。ScriptBlockログ記録は実行されたPowerShellスクリプトの全文をWindowsイベントログに保存しており、これをElastic Agentで収集することができます。脆弱なVMの設定にあたっては複数の設定を変更し、OSに内蔵の保護をすべて無効化する必要があります。一部の高度なWindowsマルウェアは、第2段階のダウンロードの前にホストがドメインの一部であるかを確認します。そこでVMを設定する際に、組織と似たような名前のフェイクドメインを追加しておくというやり方も検討できます。

WindowsホストでSysmonデータを収集することも可能です。Elastic Endpointエージェントが収集する情報の大部分はSysmonと同じです。この場合、データの重複を回避するためにSysmonの設定をカスタマイズしてもよいでしょう。Sysmonのインストールと設定が完了すると、Elastic AgentはWindows統合機能を使ってクラスターからイベントをストリーミングします。

Elasticセキュリティクラスターを設定する

本記事ではElastic CloudでElastic 7.10を使い、テストを実行します。テスト用に新規のクラスターを作成、ホストする場合、Elastic Cloudにクラスターをセットアップする方法が最も簡単です。プラチナサブスクリプションの全機能を活用すれば、わずか数分でセットアップを完了できます。完全に隔離されたサンドボックスを構築する目的で、独自にオンプレミスのElastic Stackをセットアップすることもできます。オンプレミスで構築する場合は、こちらの手順に沿ってElastic Stackをインストールしてください。無料の“ベーシック”プランに、本記事でご紹介する手法を実践するために必要なすべての機能が含まれています。

Elastic Cloudにクラスターを作成したら、ログインしてElasticセキュリティを設定する必要があります。必要に応じて、こちらにあるセットアップ手順のウォークスルービデオをご利用ください。

セットアップ

はじめに、管理者としてKibanaにログインします。[Security](セキュリティ) > [Administration](管理者) > [Endpoints](エンドポイント)タブの順に進み、[Add Endpoint Security](Endpoint Securityを追加)を選択してください。

Endpoint Securityの管理者セットアップ画面

まず、セキュリティ統合を作成します。統合に名前を付け、[Save integration](統合を保存)を選択します。複数の統合やAgentポリシーを作成することも可能ですが、すべてのサンドボックスシステムに1つのポリシーを使用する手順が最も簡単です。1つのポリシーをLinux、Windows、MacOSシステムに適用できます。

Elastic Agentの統合追加画面

統合を選択して、[Enroll Agent](エージェントを登録)をクリックします。新たに表示された画面で、[Enroll in Fleet](Fleetに登録)を確認します。この操作で、ユーザーはKibanaのどこからでもエージェントを設定・管理することができるようになります。

Endpoint Securityでエージェントを登録する

Windowsイベントログの収集も行う場合にここで実施する手順は、[Add integration](統合を追加)を選択→既存の統合から[Windows]を指定→デフォルトの設定を使用→[Save Integration](統合を保存)を指定し、Windowsセキュリティイベント、Sysmonイベント、PowerShell Scriptblockログ記録、転送設定のあるWindowsイベントログを収集、です。

この段階で、Endpoint Security、Systemモジュール、Windowsシステムから来るWindowsイベントログをデプロイするデフォルトのポリシー設定が完了しています。

Fleetエージェントポリシービュー

いよいよ、サンドボックスシステムにエージェントをデプロイします。まず[Agents](エージェント)タブを選択しましょう。はじめてエージェントをデプロイする場合、管理者としてログインする必要があります。画面に従ってボタンを選択すると、KibanaにFleetユーザーが自動作成されます。次に[Add Agent](エージェントを追加)をクリックすると、[Elastic Agent download page](Elasticエージェントダウンロードページ)に移動します。ここで、VMにエージェントをインストールするために必要なコマンドを確認することができます。ダウンロードとインストールが完了したエージェントは、自動的に[Agents](エージェント)にリスト表示されます。

エージェントのステータスを示すビュー

Elasticセキュリティでは、Elastic Endpointエージェントの[Integration Policy](統合ポリシー)を設定する必要があります。[Agent Policy](エージェントポリシー)がElasticエージェントのポリシーを設定するのに対し、[Integration Policy](統合ポリシー)は、エージェントがデプロイするエンドポイントセキュリティ統合のポリシーを設定します。エンドポイントセキュリティ統合ポリシーは、Elasticセキュリティの[Administration](管理者)タブで設定できます。エージェントの隣にある[Integration Policy]をクリックしましょう。

エンドポイントセキュリティ統合ポリシーのビュー

Integrations Settings](統合設定)ビューが開きます。このビューで、[Malware Protections Enabled](マルウェア保護の有効化)ボタンがオンになっていることを確認します。また[Protection Level](保護レベル)を[Prevent](防御)ではなく、[Detect](検知)にセットします。マルウェア保護を有効化し、かつ検知モードに設定すると、マルウェア検知アラートは表示されるものの、Elasticセキュリティはマルウェアを停止させるためのアクションを講じなくなります。

malware-analysis-sandbox-malware-protections-detect-mode.jpg

次は、Elasticセキュリティの検知エンジンをセットアップし、事前構築済みの検知ルールをすべてインストールする作業です。この手順も1分ほどで完了できます。これはサンドボックスを構築する上で必須の手順ではありません。しかし検知エンジンは簡単にセットアップできる上、マルウェアのアクションを高い頻度で検出してユーザーによるトリアージ作業を手助けします。セットアップを行うには、Elasticセキュリティで[Detections](検知)タブ > [Manage detection rules](検知ルールを管理)の順に進みます。この画面で、[Load Elastic prebuilt rules and timeline templates](Elastic事前構築済みルールとタイムラインテンプレートを読み込む)をクリックしてください。初回のセットアップは、管理者として実行する必要があります。

検知エンジンビュー

検知エンジンに事前構築済みルールとタイムを読み込ませる

ルールの読み込みが完了した後、適用するルールを有効化する必要があります。各種のルールに目を通してから必要なルールだけ選んで有効化しても、一律にすべて有効化しても構いません。最も簡単なのは、すべて有効化する方法です。そのルールに該当するデータがなかったとしても、ルールを有効化することで不都合が生じるといったことはありません。

ネットワークトラフィックを収集する(任意)

マルウェアのホスト上でのアクティビティの確認に加えて、外部ホストからのネットワークアクティビティを収集することもできます。ネットワークアクティビティを収集することのメリットとして、(イベントが起きたという事実だけでなく)ネットワークイベント内部のデータを確認できる、ということがあります。収集方法はいくつかありますが、個別のVMを使用し、同じ仮想ネットワークでネットワークトラフィックを追跡するアプローチがおすすめです。

具体的には、Packetbeatを使って、スタックをイベントであふれさせることなく、データの有効なサマリーを収集する方法と、TSharkとFilebeatを使って完全なパケットキャプチャーをElasticsearchにストリーミングする方法のうちいずれかを実施します。Packetbeat configは、多くのプロトコルについてリクエストとレスポンスを収集するよう設定し、TLSトラフィックに関してはすべて生の証明書を収集するよう設定するとよいでしょう。マルウェアはTLS証明書を再利用することが非常に多く、その証明書は悪意のあるドメイン名を含む重要な情報源となる可能性があります。

さて、これでマルウェア分析サンドボックスの構築が完了し、テストの準備が整いました。マルウェアを実行する前に、クリーンな状態のVMのスナップショットを必ず撮影してください。

マルウェアを分析する

注:ホストシステムでは、決してライブのマルウェアを開かないでください。予期せぬ開封を防ぐため、疑わしいマルウェアはパスワード保護されたzipファイルに入れておくことをお奨めします。可能な場合は、サンドボックスシステムにマルウェアを直接ダウンロードします。

この記事用に実施したテストでは、Emotet Malwareファミリーの1つを発動させています。このマルウェアは悪意のあるOfficeドキュメントで、実行するにはユーザーがマクロを有効化する必要があります。[Endpoint Policy](エンドポイントポリシー)でマルウェア保護を無効化していない場合、マルウェアはElasticセキュリティによって即時に隔離され、テストは非常に短いものになります。

VMでEmotet Malwareを発動させたら、KibanaのElasticセキュリティ画面に戻り、打ち上がった花火を鑑賞しましょう。[Detections](検知)タブでは、ホスト上で生じたマルウェアのアクティビティに関する多数の新着アラートを確認できるはずです。下のスクリーンショットにも、初期のマルウェア検知アラートが複数表示されています。エンドポイントセキュリティの設定が[Detect](検知)ではなく[Prevent](防御)に設定されていた場合、マルウェアはこの時点で停止、および隔離されるため、このような付加的なデータを確認することはできません。

Emotet malwareにより生成された検知アラート

各アラートの隣にある[Analyze Event](イベントを分析)アイコンをクリックすると[Analyzer](アナライザー)ビューが開き、発生した事象がツリーグラフで可視化されます。

Analyze Eventアイコン

下のスクリーンショットは、この事例で見つかた奇妙なPowerShellコマンドを選択し、実行チェーンにどのように組み込まれているか確認した時の画面です。この[Analyzer](アナライザー)ビューは、ソフトウェアの実行状況をペアレントプロセスに基づく階層ビューでインタラクティブに表示します。プロセス同士を結ぶ線は、ペアレントプロセスとチャイルドプロセスの開始時間の差を示しています。1つのノードを拡大表示すると、そのプロセスに関連付けされた多数のイベントが表示されます。

Emotet Malwareを実行した際のAnalyzerビュー

このPowerShellプロセスが実行したアクションを見つけるためにノードを選択すると、この1つのプロセスに関連付けされた27の個別のイベントが表示されます。次に各カテゴリを選択すると、生成されたファイル、実行されたネットワーク接続、修正されたレジストリエントリ、プロセスによってメモリーに読み込まれたライブラリを確認できます。

一部のマルウェアでは、特定の機能を再起動の後に読み込むことも明らかになっています。したがって、VMを再起動し、増えたアラートから追加で検知された内容を確認するというのは賢明なアイデアです。

今回検知された情報はすべてElasticで既知の内容だったことから、[Dashboard]や[Discover]などKibanaの他のすべてのアプリでイベントを表示したり、可視化したりすることができました。ちなみにPacketbeatを使ってネットワークトラフィックを収集する場合も、Kibanaに搭載された多数のダッシュボードや可視化が多様なネットワークプロトコルに対応しています。

まとめ

このブログ記事では、Elasticプロダクトを使って独自のマルウェア分析サンドボックスをごく短時間にセットアップする手順をご紹介しました。わずか数分でサンドボックスを構築してファイルを安全に開き、観測することができます。また生成されたすべてのイベントをElastic Stackにストリーミングして、安全なオフライン分析を実行できます。Elasticの情報セキュリティチームでは、こうしたファイルから得た情報を新たな検知ルールの開発や、未知のネットワーク攻撃の追跡に役立てています。

はじめてみるぜひ14日間の無料トライアルをご利用ください(クレジットカード情報の入力は不要です)。または、オンプレミスのデプロイに無料でElasticの各種プロダクトをダウンロードして、お使いいただくこともできます。