Defender for Containers のバイナリ ドリフト検出
はじめに
Defender for Cloud のコンテナ保護機能である Defender for Containers でバイナリ ドリフト検出機能がパブリック プレビューになりました。
バイナリ ドリフトは、元のイメージから取得されていない実行可能ファイルをコンテナーが実行しているときに発生します。 これは意図的で正当なものである場合と、攻撃を示している場合があります。 コンテナー イメージは不変である必要があるため、元のイメージに含まれていないバイナリから起動されたプロセスは、疑わしいアクティビティとして評価する必要があります。
こちらを検証していきます。
設定
バイナリ ドリフト検出には Defender for Containers 有効化と Defender センサーが必要です。AKS の場合は [環境設定] からサブスクリプションを選択して Defender プランで Defender for Containers を有効化します。
次に [設定] をクリックし、[Defender センサー] を ON にします。左上の [続行] から前のページに戻り、[保存] をクリックします。
検出ポリシーの設定は [環境設定] > [コンテナー ドリフト ポリシー]から行います。
デフォルトは以下のように設定されており、kube-system 名前空間にあるポッドでバイナリ ドリフトが発生した場合のみアラートを作成、それ以外は無視するポリシーになっています。
今回はテスト用にすべての環境を対象とするポリシーを作成します。[Add rule] をクリックします。
Rule name を入力し、今回は検知ルールなので Action は [Drift detection alert] を指定します。また検出範囲が分かるように Scope name を入力し、Cloud scope で対象クラウドサービスや必要に応じてサブスクリプションなどを指定します。
Resource Scope の箇所で必要に応じてクラスター名や名前空間でフィルタします。今回は何もフィルタせずに設定を進めます。
最後に Allow list for porcesses に例外的に許可したいプロセスを指定します。こちらも今回は指定なしとします。[Apply] > [Save] で保存します。
検証
検証は以下のブログにあるテストコマンドを参考にします。
kubectl run ubuntu-pod --image=ubuntu --restart=Never -- /bin/bash -c "cp /bin/echo /bin/echod; /bin/echod This is a binary drift execution"
こちらは ubuntu のポッドを作成し、起動後に echo コマンドのバイナリを echod としてコピー、echod を実行して文字列を表示させています。これによってシステム内のバイナリを改変する操作を模擬しています。
認証を含む、テスト用の実行コマンドはこちらです。
az login
az aks get-credentials -g rg-aks -n aks-cus-demo01
kubectl run ubuntu-pod --image=ubuntu --restart=Never -- /bin/bash -c "cp /bin/echo /bin/echod; /bin/echod This is a binary drift execution"
成功すれば、以下のようにアラートが出力されます。
注意事項
アラートが出ない場合、AKS に Defender センサーが自動デプロイされていない場合がありますので、AKSの [ワークロード] > [Pods] から microsoft-defender-xxx のようなポッドがデプロイされているか確認ください。
デプロイされていない場合は以下を参考に設定してください。
また、今回はテスト用のためすべての環境をアラート対象としましたが、アプリの作りや開発作業、運用作業によっては過検知が大量に発生する可能性があるため、まずは意図した操作でのバイナリ ドリフトが発生する可能性が低いデフォルトの kube-system 名前空間を監視対象とし、監視のスコープを絞った形で追加していくことをお勧めします。
Discussion