はじめに
こんにちは、NTTコミュニケーションズの現場受け入れ型インターンシップに参加した奥です。
現在は大学でLinuxマルウェアの動的解析について研究しています。
今回私は2023年2月6日から2月17日の2週間、イノベーションセンターのNetwork Analytics for Security(通称NA4Sec)プロジェクトに参加し、 Cobalt Strikeを悪用した攻撃事例の調査、またCobalt Strikeのペイロード配布に利用される攻撃インフラの発見・追跡を体験しました。
この記事では、インターンシップ参加の経緯やインターンシップ期間中に取り組んだ内容について紹介します。
インターンシップ参加の経緯
私がこのインターンシップに応募したのは、夏に他社のインターンシップに参加した際に、他の学生たちがNTTのインターンシップを推していた記憶があり、応募しておけばよかった..と悔やんでいたためです。 後に調べてみると、冬季インターンシップも2週間という期間にわたって現場での業務体験ができ、セキュリティ分野だけでも様々な内容のポストがあることを知り、充実した経験ができると確信を持って応募しました。
しかし、実際に選考を受けてみると「私はただものではない」エピソードがないことに悩まされたり、インフラ関係のポストに応募したにもかかわらず、ネットワークの知識が全然ないことに不安を覚えたりしました。 そんな時、一次面接でNA4Secプロジェクトリーダーの神田さんとお話しし、とても穏やかな雰囲気の中、プロジェクトやインターンシップで取り組む内容について詳しく聞けました。一次面接は人事の方が担当することが多いイメージでしたが、初めに現場の方とお話しし、インターンシップの具体的なイメージができたことは、選考を受ける中で大きなモチベーションとなりました。
NA4Secプロジェクトとは
私が参加したNA4Secプロジェクトとは、「NTTはインターネットを安心・安全にする社会的責務がある」を理念として、攻撃インフラの解明、撲滅を目指すプロジェクトです*1。 Tier1 ISP(Internet Service Provider)であり、MSSP(Managed Security Service Provider)でもあるNTTの強みを活かし、攻撃インフラを追跡するとともに、解析のための新たな技術を開発しています。
インターンシップで取り組んだこと
2週間で体験したインターンシップの内容をまとめます。
1. Cobalt Strikeの理解
Cobalt Strikeについての知識がなかったため、そもそもCobalt Strikeがどういったもので、なぜ攻撃に使われるのかを理解することからスタートしました。
「Cobalt Strike」はサイバー攻撃を再現し、システムや組織のセキュリティを評価するために使用される商用のセキュリティツールです。 一方で、Cobalt Strikeはクラック版(不正利用のために改変されたもの)が出回ったことにより、悪意のある攻撃にも広く利用されています。 主な機能として、システム侵入後に対象システムにCobalt Strike Beacon(以下、Beacon)と呼ばれるバックドアプログラムを埋め込み、稼働させることでBeaconを介してPowerShellスクリプトの実行や、スクリーンショットの記録、ファイルのダウンロードなどの強力な攻撃モジュールを提供します。また、ネットワーク設定を調整することで通信を秘匿したり、初期アクセスのためのフィッシングメールを作成する機能も備えています。
攻撃者から見た時のCobalt Strikeの魅力として、攻撃技術の洗練度や人的・金銭的リソースの豊富さに関わらず、迅速に攻撃を行えることが挙げられます。また、広く利用されているために、正規のペネトレーションテストとの判別や、攻撃グループの特定を困難にする効果を狙っているケースもあるかもしれません。
2. Cobalt Strikeを悪用した攻撃事例の調査
次に、Cobalt Strikeを悪用した過去の攻撃事例を整理し、脅威インテリジェンスとしてまとめました。 具体的には攻撃グループや攻撃の手口、どういった行動を誰に対して行っているのかといった観点で情報を整理し、そのパターンから活動の背景や動機などを考察しました。 これらの情報を活用することにより、攻撃側が有利なサイバーセキュリティにおいて、防御側は攻撃被害が発生する前により効果的と考えられる対抗手段を取って攻撃に備えることができます。
今回は、攻撃事例の情報を整理するために、ダイヤモンドモデルというサイバー攻撃のパターン分析手法を用いました。ダイヤモンドモデルは、以下の4つの特徴でサイバー攻撃を定義づけます。
攻撃グループ(Adversary)
攻撃者に関する情報(呼称,アカウント,関連するグループなど)
被害者(Victim)
被害者に関する情報(組織名,システム名,IPアドレスなどのネットワーク資産,デバイス,アカウントなど)
攻撃基盤(Infrastructure)
攻撃に際して使われた基盤(サービスアカウント,IPアドレス,ドメイン名,メールアドレスなど)
能力(Capability)
具体的な攻撃手法やツール(マルウェアやその送信方法,悪用された脆弱性など)
実際に、Cobalt Strikeに関する直近25件の攻撃事例をダイヤモンドモデルに当てはめてみました。情報源としては、Microsoft Defender Threat Intelligenceが無償で得られる情報の範囲でも多くの攻撃事例に対するレポートをまとめてくれており、効率的な情報の収集に役立ちました。
図1 ダイヤモンドモデルに基づき作成した表の一部
調査の結果、Cobalt Strikeは国家のスパイや犯罪グループにも利用されており、大規模な攻撃に使われていることが分かりました。 また、そのような国家を背景とした犯罪グループは、政府機関や重要インフラを狙うことが多く、標的とされる国にも特徴が見られました。
侵入経路としては、フィッシングメールや侵害したWebサイト、または脆弱性を利用することで最初のペイロードをダウンロードさせ、それを使うことでCobalt Strike Beaconを標的システムに配布していました。その後は、Cobalt Strikeの機能を使うことで、権限を昇格したり、特徴的なマルウェアをダウンロードする場合が多く見られました。
3. Cobalt Strike C2サーバの探索
Cobalt Strikeを悪用する攻撃者はインターネット上にTeam Serverと呼ばれるサーバを公開し、Beaconからの通信を待ち受けています。 このようなサーバを一般的にC2(Command & Control)サーバと言います。 インターンシップ後半では、主にインターネットスキャナ系検索エンジンを用いてCobalt Strike C2サーバの発見に挑戦しました。
インターネットスキャナ系検索エンジン
世の中にはインターネット上を定期的にスキャンして得られたデータを検索可能にしている検索エンジンサービスがあります。 例えば Censys は、毎日40億以上のIPv4ホストやWebサイトを定期的にスキャンしており、インターネット上に接続されている機器の情報(OSやソフトウェアのバージョン、IPアドレス、AS、ドメイン名、SSL/TLSサーバ証明書に関する情報)等で検索できます。 今回はCensysの他にShodan、ZoomEye を加えた3つの検索エンジンを用い、それらを比較しました。
検索クエリの作成
膨大なデータベースの中からCobalt Strike C2サーバを見つけるためには、その特徴に合わせて効果的に条件を指定する必要があります。 ここでは、Censysを用いて検索する方法を紹介します。
- SSL/TLSサーバ証明書
最も誤検知を抑えてCobalt Strike C2サーバを探す方法の1つは、SSL/TLSサーバ証明書がCobalt Strikeでよく使われる証明書と一致しているものに絞ることです。 攻撃者がそれらのSSL/TLSサーバ証明書を使用している場合は、この方法で発見できます。
services.certificate: { "64257fc0fac31c01a5ccd816c73ea86e639260da1604d04db869bb603c2886e6", "87f2085c32b6a2cc709b365f55873e207a9caa10bffecf2fd16d3cf9d94d390c" } OR services.tls.certificates.leaf_data.issuer.common_name: "Major Cobalt Strike" OR services.tls.certificates.leaf_data.subject.common_name: "Major Cobalt Strike"
1~3行目 SSL/TLSサーバ証明書のFinger Print
4~5行目 SSL/TLSサーバ証明書の発行元(issuer)と主体者(subject)
実際にこの条件でフィルターをかけたところ、583件のCobalt Strike C2サーバと見られるIPv4ホストを発見できました(3月15日時点)。 図2 SSL/TLSサーバ証明書で絞った検索結果
- ポート番号とHTTPヘッダ
SSL/TLSサーバ証明書に基づく探索は、確実である反面、カスタマイズされた証明書が使われている場合や、HTTPなどのSSL/TLSで暗号化を行わない通信プロトコルの場合に発見できなくなるという弱点があります。 Cobalt Strike C2サーバのポート番号やHTTPヘッダに見られる特徴を組み合わせることで、そのような場合であってもCobalt Strike C2サーバである可能性の高いIPv4ホストを見つけられます。
services.port: 50050 AND services.http.response.status_code: 404 AND services.http.response.headers.content_type: text/plain AND services.http.response.headers.content_length: 0 AND NOT services.http.response.headers.server
1行目 使用ポートの条件はCobalt Strikeのデフォルトポートである50050ポート
2~5行目 HTTPヘッダの内容
実際に、インターンシップ用に立てられたCobalt Strike C2サーバに対してスキャンしてみたところ、図3の赤枠内のHTTPヘッダを持つレスポンスが得られました。 これは一般的なCobalt Strike C2サーバのHTTPヘッダの特徴と一致しています。 図3 Cobalt Strike C2サーバからのレスポンス
実際にこの条件でフィルターをかけたところ、294件のサーバにヒットしました(3月15日時点)。 それぞれのIPv4ホストについて詳しく見てみると、多くがCobalt Strikeの証明書や自己署名証明書を利用しているなど、攻撃インフラの可能性が十分に考えられるものでした。 図2 ポート番号とHTTPヘッダで絞った検索結果
検体の解析によるC2の発見
Censysにはない機能として、ShodanやZoomEyeはスキャン対象となるサーバからBeaconを入手し、解析することによってCobalt Strike C2サーバかどうかを判定しています。また、以下のように解析結果を得ることも可能です。
Cobalt Strike Beaconの解析結果(Shodan)
インターネットスキャナ系検索エンジンの比較
今回用いた3種類のインターネットスキャナ系検索エンジンについて、Cobalt Strike C2サーバを探索する際の長所と短所をまとめます。
情報源 | pros | cons |
---|---|---|
Censys | スキャンしているポートの数が多い(50050ポートの結果を得られる),スキャン頻度が高い | Beaconの入手と解析はしていない |
Shodan | Beaconの解析結果が得られる、スキャン頻度が比較的高い | スキャンしているポートの数が少ない |
ZoomEye | Beaconの解析結果が得られる | スキャン頻度が低い、中国サーバのスキャン結果が表示されない |
インターンシップを振り返って
サイバーセキュリティの最前線で長年戦ってきた方に、2週間の間マンツーマンで指導していただけたことは、本当に贅沢な経験だったと思います。 ネットワークの基礎的な構成技術から、研究で注目している新たな技術まで、幅広く深く触れることのできた密度の濃い2週間でした。 脅威を見定め、能動的に情報を収集して防御に活用するアクティブサイバーディフェンスという、今まで私の中になかった視点を得ることができたこと、 そのための情報収集の方法と活用の仕方を学んだことは、今後サイバーセキュリティの世界で活動していく上で、大きな助けになると思います。 NTTコミュニケーションズの皆さん、神田さん、本当にありがとうございました。