Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2020年9月29日にVicente Herrera Garcíaが投稿したブログ(https://sysdig.com/blog/aws-threat-detection-cloudtrail/)を元に日本語に翻訳・再構成した内容となっております。
Sysdig Secureを使ったAWS脅威検知の実装は数分で完了します。AWS CloudTrailとSysdig Cloud Connectorを使用して、クラウドインフラのセキュリティを向上させる方法をご紹介します。
マイクロサービスやDevOpsプラクティスの台頭により、新たなレベルの危険なアクターが、お客様のインフラストラクチャーのすべてを支配するクラウド環境を脅かしています。悪意のある、あるいは不注意なクラウドAPIリクエストは、可用性、パフォーマンス、そして最後には課金に大きな影響を与える可能性があります。
GitOpsのプラクティスは、インフラストラクチャーの変更をコードとして扱い、同じレベルのピアレビュープロセスで処理することで、この問題を緩和するのに役立ちます。しかし、シャドーOPSのショートカットや、GitOpsリポジトリに記録されていない手動の変更は、無視できない可能性があります。悪意のあるエージェントが危殆化した認証情報を使ったり、善意の開発者が一時的なインフラリソースを緊急に必要としているにもかかわらず、そのリソースが適切なセキュリティ検査を受けずに長く放置されてしまったりすることもあるでしょう。
重要なサービスの一つが突然動かなくなったシナリオを想像してみてください。DevOps エンジニアの一人が調査を開始し、数時間の作業の後、障害が発生したサービスにとって重要なファイアウォールのルールを誰かが手動で変更したことを発見しました。しかし、さらに悪いことに、変更したのはそれだけではありませんでした。彼女は、他の多くのファイアウォール・ルールが、時間をかけて手動で追加・編集されていることを発見しました。それらの変更のうちの1つが重要なサービスをブロックし、調査の引き金となったのは運が良かっただけでした。
絶えずインフラに追加されていくAWSサービスの数をどうやって把握するのか?また、クラウドの悪用を検知するためのベストプラクティスをすべて意識しながら、組織内の複数のAWSアカウントを管理するにはどうすればよいのでしょうか。
これを運用セキュリティにおける脅威検知と呼びますが、この記事ではAWS CloudTrailを使ってそれらのイベントを監査する方法、Sysdig Cloud Connectorを使ってどのイベントが脅威であるかを検知する方法、そしてそれらのセキュリティイベントに早期に対処できるように通知を上げる方法を説明します。
AWS CloudTrailは、AWSアカウントのガバナンス、コンプライアンス、運用監査、リスク監査を可能にするサービスです。これを利用することで、AWSインフラ全体のアクション(設定変更、イベントの作成/削除/変更)に関連したアカウントのアクティビティを記録、監視、保持することができます。
インフラストラクチャーのリソースに対して行われたすべてのアクションは、CloudTrailのレジストリに記録されます。これには、すべてのAWSアカウントのアクティビティ、AWS Management Console、AWS SDK、コマンドラインツール、その他のAWSサービスを介して行われたアクションが含まれます。
このイベント履歴は、セキュリティ分析、リソース変更の追跡、トラブルシューティング、そして一般的には、AWSリソースに関連する不要なアクティビティや予期せぬアクティビティの検出に役立ちます。
インフラストラクチャーが大きくなるにつれて、イベントや運用履歴の量が膨大になり、それらを分析することが困難になることがあります。さらに、短時間で脅威に対応できなかった場合、大きな影響を及ぼす可能性があります。
これがまさにSysdig Cloud Connectorの目的です。お客様のインフラにデプロイされると、ConnectorはすべてのCloudTrailエントリをリアルタイムで分析することができ、柔軟なセキュリティルールに照らし合わせてイベントを評価することでAWSの脅威検知を提供します。
ここでは、Sysdig Cloud ConnectorがAWS CloudTrailと統合してAWSの脅威検知を提供する方法について、より技術的なレベルで説明します。
推奨されるCloud Connectorの導入方法は、ECS Fargateのサーバーレスアプローチに従っています:
CloudTrailのイベントは、AWS Simple Notification Service(SNS)トピックを介してフェッチされます。受信したイベントは、SNSトピックに定期的にプッシュされるS3バケットに格納されます。
SNSトピックのサブスクリプションは、イベントをCloud Connectorのエンドポイントに転送します。その後、Cloud Connector は、設定された Falco ルールのセットに対して各イベントを分析します。
オープンソースのクラウドネイティブランタイムセキュリティプロジェクトであるFalcoは、予期せぬアプリケーションの動作を検知し、ランタイムの脅威を警告します。Falcoルール言語は、クラウドにおける異常な動作を定義するための標準となっており、その柔軟性により、運用上のニーズに合わせて細かくカスタマイズすることができます。
CloudTrail用のFalcoルールの新しいセットは、Sysdig Cloud Connectorで利用可能です。これらのルールを使用することで、クラウドコマンドを検出するための独自のカスタムルールでこのライブラリを補完することができます。
付属のCloudTrailルールは、以下のようなイベントを検出することができます:
これらのルールは、NIST 800-190のセキュリティ標準のコントロールにもマッピングされています。この標準はコンテナのセキュリティを中心にしていますが、これらのクラウドコマンドの多くはコンテナ化されたワークロードを危険にさらす可能性もあります。PCIやCISのような追加のセキュリティ標準に対するコンプライアンスマッピングは、将来的に提供される予定です。
Sysdig Cloud Connectorでは、AWS Security Hubへのセキュリティ調査結果の送信など、いくつかの通知オプションが用意されているため、AWSコンソールから離れることなくセキュリティイベントを確認することができます。
Cloud ConnectorはCloudFormationのテンプレートを使えば、数分でデプロイすることができます。このデプロイのプロセスを掘り下げてみましょう。
Sysdig Cloud Connectorのインストール手順は、CloudFormationのテンプレートの力のおかげでかなり簡単です。ただし、テンプレートを適用する前に、アカウントのAWS Security Hubを有効にする必要があります。
まず、ブラウザでAWSアカウントにログインしていることを確認します。そして、こちらのリンクからAWS Security Hubにアクセスします。
この「Get started with Security Hub」ページに「Go to Security Hub」というボタンが表示されていたら、それを押してください。
一方、Summary Webページ(後述)が表示されている場合は、CloudFormationテンプレートのインストールの項目に飛べます。
「Welcome to AWS Security Hub」ページでは、有効にしたいセキュリティ標準のコントロールを指定することができます。これらのコントロールは、デフォルトのAWS Security Hubの仕組みの一部であり、Sysdig Cloud Connectorがお客様のために見つけようとしている検出とは関係ありません。
使用したいコントロールを選択し(後で変更することができます)、Enable Security Hubボタンを押します。
Security Hubの「Summary」ページが表示されます。AWS Configが適切に有効化されていないという一時的に赤い警告が表示されることがありますが、Security Hubが有効化を検知すると勝手に消えてしまいます。Sysdig Cloud Connectorの利用とは関係ありません。
Sysdig Cloud Connectorをインストールするには、「Sysdig Cloud Connector導入用CloudFormationテンプレート」テンプレートに移動します。CloudFormationテンプレートのプレビューが表示されます。
「スタックの作成」セクションで、「次へ」ボタンをクリックしてテンプレートの設定を開始します。
「スタックの詳細を指定する」の部分には、設定するためのパラメータがないので、次へボタンを押すだけでOKです。
「スタックオプションを設定する」では、配置にタグキーと値をオプションで追加できますが、それ以上の設定は必要ありません。
準備ができたら、[次へ]ボタンを押します。
最後のステップでは、以前に紹介したすべてのパラメータの概要が表示されます。
すべてが正しいことを確認してください。
スキャンを実行するために専用のIAMロールが作成されることに注意してください。これらのロールは、このデプロイメントが動作するために必要です。IAMはデリケートなサービスであることを知っているので、最大のセキュリティを実現するために「最低特権の原則」に従ってこれらのロールを設計しました。
プランに満足したら、チェックボックスに印をつけて確認し、スタック作成ボタンを押します。
CloudFormationダッシュボードでは、CREATE_IN_PROGRESS状態のテンプレートが表示されているはずです。作成プロセスには時間がかかる場合があります。
後日、AWSのCloudFormationセクションを再訪して、デプロイの状態を確認することができます。数分後には「CREATE_COMPLETE」と表示されます。
CloudTrailとSysdig Cloud Connectorを使ったAWSの脅威検知の例を見てみましょう。
新しいCloudTrailイベントが作成され、JSON形式では以下のようになります。
{ "eventVersion": "1.05", "userIdentity": { "type": "Root", "principalId": "999999999999", "arn": "arn:aws:iam::972909301756:root", "accountId": "999999999999", "accessKeyId": "FE1D489888F66424BBE7", "sessionContext": { "sessionIssuer": {}, "webIdFederationData": {}, "attributes": { "mfaAuthenticated": "true", "creationDate": "2020-06-18T07:52:40Z" } } }, "eventTime": "2020-06-18T09:05:23Z", "eventSource": "iam.amazonaws.com", "eventName": "AttachUserPolicy", "awsRegion": "us-east-1", "sourceIPAddress": "37.132.12.63", "userAgent": "console.amazonaws.com", "requestParameters": { "userName": "admin_test", "policyArn": "arn:aws:iam::aws:policy/AdministratorAccess" }, "responseElements": null, "requestID": "7fe1d489-550c-527f-6155-70d1522b95f0", "eventID": "dd9fe2aa-70d1-4bbf-2ac4-b4766642e73b", "eventType": "AwsApiCall", "recipientAccountId": "999999999999"
}
すべてのCloudTrailイベントには、以下のキーフィールドがあります。
リクエストに errorCode フィールドがある場合は、エラーのために処理できなかったことを意味します。例えば、要求元が変更を実行する権限を持っていなかったかもしれません。
この場合、管理者アクセス(arn:aws:iam::aws:policy/AdministratorAccess)を持つユーザ(admin_test)にポリシーがアタッチ(AttachUserPolicy)されたばかりであることがわかります。
この権限の昇格を検出するためのFalcoルールは次のようになります:
- rule: Attach Administrator Policy desc: Detect attaching an administrator policy to an user condition: jevt.value[/eventName]="AttachUserPolicy" and not jevt.value[/errorCode] exists and jevt.value[/requestParameters/policyArn] ="arn:aws:iam::aws:policy/AdministratorAccess" output: An administrator policy has been attached to an user (requesting user=%jevt.value[/userIdentity/arn], requesting IP=%jevt.value[/sourceIPAddress], AWS region=%jevt.value[/awsRegion], user attached to=%jevt.value[/requestParameters/userName]) priority: WARNING tags: [cloud, source=cloudtrail, aws]
source: k8s_audit
この特定のルールは、すでに Sysdig Cloud Connector にすぐに含まれています。
jevt.value にはイベントのJSON コンテンツが含まれており、条件で使用しています。jsonpath形式を使用して、イベントのどの部分を評価するかを指定することができます。
出力は、リクエスト元のユーザ名やIPアドレスなどのコンテキスト情報を提供します。これは、有効な通知チャネルのすべてを通じて送信されるものです。
ご覧のように、これは通常のFalcoルールです。CloudTrailとの互換性は、そのイベントをJSONオブジェクトとして扱い、JSONPathを使用してイベント情報を参照することで実現しています。
Cloud Connectorによって実装されたFalcoエンジンがこのイベントを検出すると、設定されたすべての通知チャンネルに通知が送信されます。例えば、次のような場合です。
これらのイベントは、AWS コンソールから離れることなく確認することができます。Sysdig Cloud Connectorによって報告された所見がAWS Security Hubでどのように表示されるかを示します。
これらの発見の詳細は、すぐに行動を起こすために必要なすべての情報を提供しています。
そして、それらはAWS CloudWatchのログストリームにJSON形式で表示されます。
AWSのセキュリティは、最悪のタイミングでのインフラの故障を防ぐことができます。設定ミスやセキュリティ侵害からあなたと顧客データを守り、予期せぬ料金からあなたの財布を守ることができます。
CloudTrailは、AWSアカウントで起きていることをすべて見ることができるので、真実を知ることができます。
Sysdig Cloud Connector for CloudTrailを導入し、AWS脅威検出の実装に必要なランタイムの可視性を得ることで、Sysdig Secureを活用しましょう。CloudTrail用のFalcoルールをすぐに利用できるため、セキュリティイベントの調査に必要なセットアップの手間、応答時間、リソースを最小限に抑えることができます。
Sysdigのアカウントをお持ちでない方は、今すぐトライアルに登録してください。この記事の指示に従うことで、10分以内にSysdig Cloud Connectorをデプロイし、今日からセキュアなAWSアカウントを持つことができます。