インシデント発生時のインスタンス隔離方法(その2)

はじめに

サブネット単位で隔離する場合、いくつかの方法をとることができる。
サブネットの場合、セキュリティグループを利用した場合のように単純に「Isolation」サブネットを作成し、そこにインスタンスを移動すれば良いわけではない。
やろうとすると、実行中のインスタンスのサブネット変更はできないので、インスタンスを一度シャットダウンする必要があり、せっかくの証拠が消失する恐れがある。
さて、どうすれば良いのか?
• パターン1:ネットワークACLを利用する
• パターン2:ルートテーブルを利用する
• パターン3:インターネットゲートウェイを利用する
では、順番に説明をしていこう。

ネットワークACLを利用した封じ込め

まず、ネットワークACLを理解しよう
• 外部からサブネットに対してのIPアドレス/CIDRブロックでの設定にもとづいて通信の拒否、許可を制御
• インバウンドのルールでは「通信元(サブネット外部のIPアドレス/CIDRブロック)」を指定する必要あり
• アウトバウンドのルールでは「通信先(サブネット外部のIPアドレス/CIDRブロック)」している必要あり
• 内部IPアドレスやCIDRブロック(インスタンスIPなど)にもとづく通信の拒否、許可ができない
• ステートレスである(行きと戻りの両方の設定が必要)
• 各NACL(および含まれるルール)は、一度に1つのサブネットにのみ関連付けることができる
• NACL当たり最大20ルール(IPv4ルールとIPv6ルールは別でカウントされる)
• VPCあたり最大200個のNACLが設定可能

既存のNACLを利用した封じ込め方法
1. 封じ込め対象のインスタンスが関連付けされているサブネットを識別
2. サブネットに関連付けされたNACLを識別
3. インバウンドとアウトバウンド両方のNACLルール番号の1にすべての通信(0.0.0.0/0)を拒否するルールを追加
( ルール上限に引っかかっており既存のルールの削除が必要な場合には、復元できるよう削除するルールの詳細を記録しておくこと)
新規のNACLを利用した封じ込め方法
1. 封じ込め対象のインスタンスが関連付けされているVPCとサブネットを識別
2. インスタンスが存在するVPCにNACLを新規作成
( 新規作成されるNACLには初期値でインバウンドとアウトバウンドにすべての通信(0.0.0.0/0)を拒否するルールが作成される)
3. 該当するインスタンスのサブネットに対して新しいNACLを関連付ける

ルートテーブルを利用した封じ込め

まず、ルートテーブルを理解しよう
ルートテーブルは、すべてのVPCサブネットのルーティングを定義し、制御する。
ルートテーブルの種類
• メイン・ルートテーブル
○ VPC作成時に自動作成
○ 他のルートテーブルに明示的に関連付けされていないすべてのサブネットのルーティングを制御
• カスタムルートテーブル
○ カスタマイズ可能なデフォルト以外のルートテーブル(初期値ではルートなしで作成)
VPCの各サブネットは、何かしらのルートテーブルに関連付けられている必要がある。
サブネットに複数のルートテーブルを関連付けすることはできない。
どのルートテーブルにも明示的に関連付けされていないサブネットは、メイン・ルートテーブルに暗黙的に関連付けされる。
ルートテーブルには、インターネットゲートウェイまたは仮想プライベートゲートウェイを関連付けすることができる。
メリット
• 封じ込めをするのに最小限の変更で行える
• サブネットのルートテーブルの変更というシンプルさ
• 事前に作成しておいた「Isolation」ルートテーブルをすぐに利用できる
デメリット
• ひとつのインスタンスを分離するといったターゲットを限定した方法では利用できない
• 関連するサブネット上のすべてのインスタンスが分離対象(サブネット全体を分離したい場合はメリットかも?)
• VPC(ローカル)内でのルーティングが可能(サブネット内の通信は可能なので、同一サブネット内では感染が広がる可能性がある)
ルートテーブルを利用した封じ込め方法
1. カスタムルートテーブルを作成(初期値ではルートなしで作成)
2. 対象のインスタンスが関連付けされたサブネットを識別
対象のインスタンスが関連付けさえたサブネットにカスタムルートテーブルを関連付け

インターネットゲートウェイを利用した封じ込め

まずインターネットゲートウェイを理解しよう
主に2つの目的で利用
• VPCからインターネットに抜けるための経路を提供
• パブリックIPv4アドレスが割り当てられたインスタンスに対して、ネットワークアドレス変換(NAT)を実行
IPv4とIPv6の両方をサポート
ちょっと立ち止まって考えてみよう
インターネットゲートウェイをVPCから切り離して、すべてを分離することができるか?
答えは「ノー」。
稼働している環境でこれを実行しようとすると、依存関係でエラーが発生する。
パブリックIPアドレスをもつEC2インスタンスは、IPアドレスのマッピングが削除されるまでインターネットゲートウェイを切り離せない仕様となっているため、インスタンスがシャットダウンされることになる。
分離のためにVPC内の利用可能なインスタンスをすべてシャットダウンするのは、明らかに過剰な対応といえる。
では、VPCレベルでの封じ込めはどうすれば良いか?
すべてのルートテーブルからインターネットゲートウェイのルートを削除する。
すべてのサブネットにルートを持たないカスタムルートテーブルを関連付けする。

でも、もしかすると

実際には、分離したとしても、こんなことがしたいかもしれない。
• メンテナンスのためにSSHやRDPでインスタンスに接続したい
• ウイルス対策ソフトやEDR、遠隔モニタリングとそのレポーティングが行いたい
• メモリ上の揮発性データを取得したい
• インスタンスから追加の「indicators of compromise (IOCs)*1」を収集したい
さて、どうしよう?
*1…「セキュリティ侵害インジケータ」。サイバー攻撃の痕跡をデータベース化して技術仕様として活用すること

Isolation VPCによる監視

「Isolation VPC」って何だ?
「Isolation VPC」は事前に以下のことができるよう設定されたVPCのこと
• リアルタイムのシステムアクセス
• システムとネットワークのリアルタイム監視
• 危殆化したインスタンスからの情報収集
専用に設計されたフォレンジックアカウント内にあることが理想的
なぜ「Isolation VPC」を利用するの?
インスタンスを分離するには、すべてのアクティブな接続を終了させる必要がある。
ただ、これには以下のような貴重な情報を失う可能性がある。
• アクティブに接続された攻撃者のソースIPアドレス(複数)
• C&C活動にかかわるIPアドレスやドメイン
• アクティブに転送されているネットワークデータやペイロード
• システム上で実行されているコマンドやアクティビティ
IOCs的には、以下の点で非常に価値がある。
• 追加の危険なシステムの特定
• 将来に向けた総合的な検知・予防対策の構築
メリット
• 効果的な封じ込めをしつつ、機器へのアクセスが可能
• 封じ込めや対応のためにウイルス対策ソフトやEDRが継続的に活用可能
• ホストからライブかつインタラクティブなクエリとデータ収集ができる
• 危殆化した可能性のある追加のインスタンスやインフラストラクチャを積極的に特定するための追加のIOCが収集できる
デメリット
• 通信を継続したいエンドポイントユーティリティが使用するIPアドレスとポートの組みあわせを知っている必要がある
• 対話的なといわせのため、ホストに接続するIPアドレスやサブネットの情報を知っている必要がある
• 侵害されたインスタンスの通信を適切に制限するため、セキュリティグループ、NACL、ルートを構築し、実装することに慣れている必要がある
「Isolation VPC」を活用する際の考慮点
• 「Isolation VPC」に移動する前にインスタンスをシャットダウンする必要がある
• アクティブに接続されている攻撃者のソースIPアドレスは、インスタンスのシャットダウン前に収集する必要がある
• モニタリングの有効性は、再起動してもマルウェアや攻撃活動が持続するかどうかに依存する
感染が拡大したり、不正なデータアクセスを推進する可能性がある場合は、危険なインスタンスを稼働させ続けないこと。
分離と監視のプロセスは?
「Isolation VPC」の構築例
• VPCを作成する。(専用フォレンジックアカウント内が望ましい)
• 2つのサブネットを作成
○ 「隔離(Isolation)」サブネット
○ 「解析(Analysis)」サブネット
• 「隔離」セキュリティグループを作成し、以下の通信を許可
○ マルウェアC&Cを監視するためのアウトバウンド接続(ポート53、80、443など)の通信を監視
○ 継続的な通信/ウイルスなどの検出更新のためのウイルス対策ソフトやEDRエンドポイントへのアウトバウンド接続
○ 「解析」セキュリティグループへのVXLANトラフィック(UDP4789)のアウトバウンド接続
○ ライブクエリー/モニタリングのための「解析」サブネットからのインバウンドSSH/RDP接続
• 「解析」セキュリティグループを作成し、以下の通信を許可
○ 「隔離」セキュリティグループへのアウトバウンド接続で、感染したインスタンスに接続
○ 「隔離」セキュリティグループからのVXLANトラフィック(UDP4789)のインバウンド接続
• 以下のネットワークデータ収集の構築(どちらか一方、または両方)
○ 通信のミラーリング(PCAPを利用した収集)
§ 「解析」サブネットにNitroベースの「モニタリング」インスタンスをトラフィックミラーターゲット(受信機)として設定
§ ミラーリングされたトラフィックを受信/キャプチャ/ロギングするため、適切なツールを使用してインスタンスを設定
○ VPCフローログの取得
§ 「Isolation VPC」のVPCフローログを有効化
• 解析インスタンスの設定
○ 隔離されたインスタンスを照会し、フォレンジック分析を吸うため、「解析」サブネット内の適切なインスタンスを起動し、事前に設定
• 分離と解析を実行
○ 危殆化したインスタンスに対して、以下を実施
§ 必要な揮発性データの収集
§ インスタンスをシャットダウン
§ インスタンスからイメージ(AMI)を作成(必要に応じてAMIを別のリージョンにコピー)
§ フォレンジックアカウントでAMIを共有
○ フォレンジックアカウント内で以下を実施
§ 「Isolation VPC」内の「隔離」サブネット内でNitroベースのインスタンスとしてAMIを起動
§ 以下のようにしてトラフィックミラーセッションを作成
□ トラフィックミラーターゲット:「解析」サブネット内の「モニタリング」インスタンスのENI
□ トラフィックミラーソース:「隔離」サブネット内の危殆化したインスタンスのENI
□ トラフィックミラーフィルタ:0.0.0.0/0のTCP/UDPのインバウンド、アウトバウンドルール
封じ込めの利点を最大限に活用しつつ、リアルタイムのデータソースの提供が可能
• フルパケットキャプチャから
○ 攻撃範囲を理解するため、C&C活動と発行されたコマンドを特定
○ C&Cとのやり取りや通信されたデータを復号化するための暗号鍵および復号鍵の導出または抽出
○ ネットワークIDSシグネチャ用のファイルとバイナリ(実行可能ファイル)の抽出
• システムアクセスから
○ 補足的なウイルス対策ソフト/EDRのための悪意のあるプロセス(名前とハッシュ)の特定
○ システム上で実行されている攻撃者コマンドを特定し、攻撃者の意図や目的の把握
○ ハッシュ化のために作成された悪意のあるファイルやバイナリを識別し、組織全体での検索/検出を行う
○ マルウェアを収集しリバースエンジニアリングを行い、検出のための追加のIOCsを導出

封じ込め能力を向上させるには

導入編
 1. フォレンジック専用のアカウントとテスト(サンドボックス)環境を構築する
2. 封じ込めのレベルを理解する(セキュリティグループ vs. サブネット vs. VPC)。
3. 注意喚起、資源、環境、データ等に基づいて、封じ込め手順を定義する。
4. 封じ込め技術が効果的でない場合のフェイルオーバー計画を定義する。
活用編
5. サンドボックス環境での基本的な封じ込め技術の構築とテスト
6. 基本的な封じ込め技術を生産工程内で実施する
応用編
7. サンドボックス環境でのアイソレーションVPCの構築とテスト
8. フォレンジックアカウントにアイソレーションVPCを実装する
9. 定期的に計画(と期待値)をテストする



この記事が気に入ったらサポートをしてみませんか?