構築から運用まで!脅威インテリジェンス業務を体験(インターンシップ体験記)

こんにちは、NTTコミュニケーションズの現場受け入れ型インターンシップ2024に参加した大学2年生の大堀です。X(旧:Twitter)では@LimitedChan(限界ちゃん)というハンドルネームでサイバーセキュリティに関して活動しています。 普段は大学で情報系の学習をしながら、個人的に脅威インテリジェンスをはじめとしたサイバーセキュリティに対して興味があり、さまざまな学習に取り組んでいます。

2024年8月26日〜9月6日までの2週間、「脅威インテリジェンスを生成・活用するセキュリティエンジニア/アナリスト」としてNetwork Analytics for Security(通称:NA4Sec)プロジェクトに参加しました。

この記事では、私がインターンシップで取り組んだ内容について紹介します。

Na4Secプロジェクトとは?

私が参加したNA4Secプロジェクトは「NTTがインターネットの安全性を守る社会的責任を果たす」という理念をもとに、「攻撃インフラの特定と撲滅」に挑むプロジェクトです。このプロジェクトには、NTT Comイノベーションセンターを中心に、NTTセキュリティ・ジャパンやエヌ・エフ・ラボラトリーズのメンバーが集結し、日夜攻撃インフラを追跡しています。

また、このプロジェクトのもう1つの特徴として、NTT Comグループ内における脅威インテリジェンスチームの役割を担っています。有事において脅威インテリジェンスを提供し、意思決定を支援することで、NTT Comグループのセキュリティを強化しています。

インターンシップ参加の経緯

私がこのインターシップへ応募した理由は、今までに経験したことが実務ではどのように活かせるかを体感したいと思ったためです。今までセキュリティ・キャンプ全国大会などのイベントへの参加や日々の学習、記事執筆を通じて知識を深めてきました。このインターシップを通して、自分のスキルと実務で求められるスキルのギャップを確認し、さらなる成長を目指したいという意欲もあり、応募を決めました。

インターンシップ概要

インターンシップでは1週目と2週目に大きく分けて2つの活動を経験しました。1週目では、もう1人のインターン生とともに業務をし、2週目ではそれぞれに合ったテーマを決めていただき業務をさせていただきました。

  • 1週目

    • 脅威調査(Cobalt Strikeとその悪用)
    • 脅威探索(Cobalt Strike C2サーバに関して)
    • 脅威情報発信(フィッシングサイトに関して)
  • 2週目

    • TIP + EDR + SIEMの基盤システム構築と運用

今回は2週目の業務内容について紹介していきます。

今回作成したもの

ユーザ端末が危険性のあるIPアドレスに接続してしまうなどといった事象を検知し、アラートを生成するための基盤システムを作成しました。脅威情報を登録し、収集・分析・共有するTIP(Threat Intelligence Platform)、ユーザ端末上で脅威を検知するEDR(Endpoint Detection and Response)、情報を管理しアラート通知するSIEM(Security Information and Event Management)の3つから構成されます。

環境説明

今回の環境ではTIPとしてOpenCTI、SIEMとしてElasticsearch、Kibana、Fleet Server、EDRとしてElastic Agentを使用しました。それぞれのツールについて簡単に説明します。

ツール名 説明
Elasticsearch オープンソース型の分散型検索エンジン。大量のデータから全文検索や分析、リアルタイムでのデータ処理を効率的に行う。
Kibana データの可視化ツールとして、Elasticsearchと連携し、ダッシュボードやグラフを作成してデータを視覚的に確認する(①)。
OpenCTI サイバー脅威インテリジェンス(CTI)システムで、脅威情報を収集・分析・共有するためのプラットフォーム。Elasticsearchをデータストレージとして利用する(②)。
Fleet Server Elastic Agentを中央で管理および監視する(③)。
Elastic Agent ホスト上でログなどを収集するElasticのエージェントツール。拡張機能を利用することで、EDRとしての機能を担い、ログデータをElasticsearchへ送信する(④)。

これらを利用して以下のように構築しました。

上記の環境では、Windows環境はユーザ端末、Ubuntu環境はSOC(Security Operation Center)の役割を模擬したものになります。SOC側で収集・分析した脅威情報がWindows端末のEDR機能に反映されることによって、リアルタイムで脅威を検知する仕組みとなっています。

環境構築

Elasticsearch + Kibana + Fleet Server編

GitHub上の公開リポジトリ*1にあるDocker Composeファイルを利用し、Elasticsearch + Kibana + Fleet Serverをセットアップしました。 また、環境に合わせて各種env, ymlファイルを編集し、Elasticsearchに対してHTTPS接続するために証明書を設定しました。

構築を終えたあと、実際にKibanaUI(localhost:5601)に接続をしてみると以下のような画面が表示されます。 ここから、データを可視化したり検索したりできます。

OpenCTI編

こちらもGitHub上で公開されているDockerイメージ*2を利用し、OpenCTIをセットアップしました。 また、公式ドキュメントを参考にしてenvファイルを作成し、ElasticsearchとHTTPSで連携するために証明書を設定しました。構築を終えたあと、実際にOpenCTI(localhost:8080)に接続をしてみると以下のような画面が表示されます。ここから、脅威情報を収集したり分析したりできます。

設定を終えた後、初めのうちはOpenCTIにアクセスできましたが、時間を開けると立ち上がらなくなる問題が発生しました。調査したところ、Elasticsearch + Kibana + Fleet Serverの環境を構築したときのymlファイルにElasticsearchの設定がすでに記載されていたため、OpenCTIのymlファイルに記載されているElasticsearchの設定と競合していたのが原因だと判明しました。そのため、OpenCTIのdocker-compose.ymlファイルからElasticsearchの設定を削除することで解決しました。

また、便利な機能として、OpenCTIはConnectorと呼ばれるプラグインを使うことで外部のインテリジェンスを自動で取り込むことができます。より効率的にインテリジェンスを収集したかったため、ymlファイルを編集して「mitre」「cve」「malpedia」の3つのプラグインも導入してみました。

Elastic Agent編

次にEDR機能を担うElastic Agentを構築し、Intergration(拡張機能)としてElastic Defendを導入しました。 Intergrationは必要なコマンドをWindows上で実行するだけで導入でき、設定はKibanaUI上で行えます。

Cobalt Strike - OpenCTIでの分析

おおかたの環境構築が終わったところで、1週目で得たCobalt Strikeに関する脅威情報をOpenCTIに登録し、分析をしてみました。

Cobalt Strikeとは

Cobalt Strikeは、企業のセキュリティテストを行うために作られた正規のツールです。しかし、実際に攻撃に利用できることから、不正に改造されたバージョン(クラック版)が出回っています。サイバー攻撃者はこのクラック版のCobalt Strikeを悪用している事例が多く見られており、問題になっています。

OpenCTIでの分析

1週目では、Cobalt Strikeが実際に悪用された事例をダイヤモンドモデル*3と呼ばれる手法を用いて分析しました。今回はその中の1つの事例をピックアップしてOpenCTIに登録し、さらなる分析をしてみました。

ここからは、OpenCTIでの分析を詳しく説明していきます。

OpenCTIに登録する際には、STIX2.1*4と呼ばれる脅威情報を表現するための標準化されたデータモデルを使って情報を登録する必要があるため、そのデータモデルに従って情報をSTIXオブジェクトとして登録しました。

今回はCobalt Strikeに関連したマルウェア、関連ファイル、URL、ドメイン、C2サーバなどの観測値(Observables)がSTIXオブジェクトとして登録されています。

Cobalt Strikeのレポート作成

STIXオブジェクトを登録したあとは、OpenCTIの機能を使って脅威情報をまとめた「レポート」を作成しました。

ここで説明する「レポート」とはSTIXで定義されている概念の1つで、特定のトピックに関する脅威情報の集合体を指します。「レポート」では、個々のSTIXオブジェクトのほかに、STIXオブジェクト同士の関係性を記述できます。 OpenCTIでは、それらの関係性をグラフ構造で図示できます。

以下の図は、1週目に調査したCobalt Strikeを悪用した事例の1つを「レポート」化したものになります。

図に表してみることで、Cobalt Strike単体での攻撃がメインではなく、他のマルウェアや悪意のあるファイルと組み合わせて攻撃が行われていることが俯瞰的に把握できるようになりました。

Cobalt Strike - EDRでの検知

OpenCTIに登録したCobalt Strikeに関する脅威情報をもとに、EDRであるElastic Agentを使用して脅威を検知してみました。今回は、Cobalt StrikeのC2サーバで使われたIPアドレスをインジケーターとして登録し、Windows上でそのIPアドレスに接続があった場合にアラートを出すようにKibana上から設定しました。

以下がEDRでの検知の大まかな流れです。

1.不正なIPアドレスに接続

Windows上でCobalt StrikeのC2サーバのIPアドレスに接続を試みる。このとき、登録されたインジケーターIPアドレスへの接続試行がElastic Agentで検知される。

2.イベントの収集と送信

Elastic Agentの検知がイベントデータとして記録され、Fleet Serverを介してElasticsearchに送信され、データベース上に保存される。

3.Kibanaでのアラートの発生

Elasticsearchに保存されていたイベントデータがKibanaのアラートルールにマッチし、アラートがトリガーされてダッシュボードに表示される。

(4.)OpenCTIでの脅威インテリジェンス管理

OpenCTIもUbuntu端末上で稼働しているため、Kibanaでアラートが発生した際にKibanaと同時にOpenCTIでも脅威情報を確認できる。

データ構造の変換

OpenCTI上のデータ構造とKibana上のデータ構造が異なるため、そのままでは利用できません。そのため、Kibanaのアラートルールで使用されているECS(Elastic Common Schema)*5を適用するため、OpenCTIのデータ構造をECSに変換する必要があります。この変換のために、OpenCTIにElastic Connectorを導入しました。これはOpenCTIのComposeファイルにElastic Connectorの情報を記述することで導入できます。

Streamの設定

OpenCTIとKibana間でリアルタイムにデータをやり取りするため、Streamを設定しました。StreamはOpenCTIとKibana間でのデータを送受信するための機能です。OpenCTI上で設定することで、Kibanaでデータを受信できます。

アラートルールの設定

アラートルールはKibanaUI上で設定できます。ECSのリファレンスやOpenCTIが出しているドキュメントを参考に、以下のように設定しました。

Windowsから通信を発生させてみる

以下の図に示されているのは、Windows端末からUbuntuサーバのIPアドレスに対する通信がアラートとして検知されたものとなっています。

本来は、Cobalt StrikeのC2サーバへの通信を検知することを目的としていました。しかし、検証環境がクローズドなためCobalt StrikeのC2サーバのIPアドレスへの通信を発生させにくいという問題が発生しました。そのため、代替案としてUbuntuサーバのIPを用いた検証を実施しました。この手法によりアラートの検出ロジックが正常に機能していることを確認しました。

原理的には、STIXオブジェクトとして登録したCobalt StrikeのC2サーバのIPアドレスに対する通信が発生した場合も、同様に検知可能であることが期待されます。

学んだこと

今回のインターンシップを通して、以下のようなことを学べました。

環境構築について

自分で環境を構築したり機能を追加したりすることで、システム同士の連携やデータのやり取りの仕組みを理解できました。今まで、すでに完成されている環境やツールを使用することが多かったので、自分の手を動かすことの大切さも学べました。 また、今回の場合インターネットで検索してもなかなか情報が見つからないことが多かったため、公式ドキュメントを読むことの重要性を再認識しました。

構築時には多くのトラブルシューティングに直面して、心が折れそうになることもありました。しかし、エラーログや公式ドキュメントを確認し、それでも原因がわからない場合は積極的に質問することで解決ができました。この経験を通じてコミュニケーションの重要性を学べました。さらに、セキュアな環境構築の方法も教えていただいたので、これからの環境構築で意識していきたいと思いました。

脅威インテリジェンスについて

実際に脅威インテリジェンスを用いてEDRを運用することで、脅威インテリジェンスがサイバーセキュリティにおいて重要なものであると再認識しました。

また、普段から脅威情報に関するレポートや記事を積極的に読むことは大切だと感じました。今回のインターンシップでは、特にCobalt Strikeの脅威分析に関するレポートを読むことで、その脅威に対する知識を深められました。

おわりに

普段ではなかなか経験できないようなことを体験でき、非常に充実した2週間でした。脅威インテリジェンスに関する知識を深められただけでなく、実際にその知識を活かせたことがとても嬉しかったです。

この貴重な機会を与えてくださったNA4Secプロジェクトの皆さま、本当にありがとうございました。また、神田さん、鮫嶋さん、益本さん、坪井さん、皆川さん、大変お世話になりました。ありがとうございました。

© NTT Communications Corporation 2014