[アップデート] Amazon Detectiveを利用してAWS Security Hubの検出結果(ASFF)が調査できるようになりました

Detectiveが収集できるデータソースとしてSecurity HubのASFFをサポートしました。オプトインすると有効化されます。Detective本体とは別に、オプション個別に30日間の無料トライアルがあるよ。嬉しいね。
2023.05.19

みなさん、こんにちは。

明るい笑顔がトレードマーク、ルイボスティーが大好きな芦沢(@ashi_ssan)です。


Amazon Detectiveが調査のデータソースとしてAWS Security HubのASFF(AWS Security Hub Findings Format )をサポートしました。

このアップデートにより、Amazon Detecticeは従来のGuardDutyによって検出された検出結果の調査に加えて、Security Hubの検出結果に対する調査が可能になります!

AWS What's newのブログはこちらです

また、本件に関連するAWSブログ(New – Simplify the Investigation of AWS Security Findings with Amazon Detective)も同時に公開されていました。こちらもご覧ください。

いきなりまとめ

  • ASFFの検出結果機能を有効化すると、DetectiveがSecurity Hubの検出結果をASFF形式で利用できる
  • 本機能は、2023/5/16以降の動作グラフ(検出結果)に対しデフォルトで有効になっている。2023/5/16以前の動作グラフ(検出結果)については手動で有効化させる必要がある。
  • Security HubがサポートしているすべてのASFFを取り込み可能
  • ステータスがFAILEDではないものや、クロスリージョンで集約された検出結果はDetectiveに取り込まれない
  • 30日の無料トライアル期間がある。これはコアになるDetectiveの無料期間とは別のもの。
  • 機能を有効化すると、以降に検出したSecurity HubのASFFのJSONファイル形式が変更される
    • 検出したコントロールIDやコントロールIDのARN、該当のコントロールIDの概要や修復手順のリンクが追加

まずは、AWSドキュメントから詳しいアップデート内容を確認してみましょう。

アップデート内容を確認してみる

機能の詳細については、英語版のドキュメントにSource data used in a behavior graph > security findingsという新しいページが追加されていますのでこちらを確認します。

内容を簡単にまとめたものがこちらです

  • ASFFの検出結果機能を有効化すると、DetectiveがSecurity Hubの検出結果をASFF形式で利用できる
  • 本機能は、2023/5/16以降の動作グラフ(検出結果)に対しデフォルトで有効になっている。2023/5/16以前の動作グラフ(検出結果)については手動で有効化させる必要がある
  • Security HubがサポートしているすべてのASFFを取り込み可能
  • ステータスがFAILEDではないものや、クロスリージョンで集約された検出結果はDetectiveに取り込まれない

基本的に、2023/5/16以前に検知した既存の検出結果に対しては有効にできない認識でいたほうがいいかもしれないですね。

実際に試してみた

Detectiveコンソールを確認すると、設定 - 全般タブのオプションのソースパッケージ欄にASFF の検出結果が追加されていました。

早速有効化してみます。

特に問題なく有効化できました。

ASFFの検出結果機能も、30日間のトライアルが利用できるようです。嬉しいですね。

次に新規のSecurity Hub検出結果を発生させます。

今回は、以下ブログを参考に[Lambda.1] Lambda function policies should prohibit public accessに違反するようなLambda関数を作りました。

しばらく待ってSecurity Hubの検出結果に新規のものが表示されました。

タイトルをクリックすると検出結果の詳細が確認できます。

以前のGUIの検出結果と比べると以下のフィールドが増えていることがわかります。

  • 重要度(オリジナル)
  • Amazon Detectiveの調査
  • 改善

改善の配下にあるリンクをクリックすると、コントロールIDの概要や修復手順が記載されている公式ドキュメントに飛びます。(今回はこれ

本題になりそうな、Amazon Detectiveの調査配下の調査の結果をクリックしましょう。

検出したアカウントIDの情報と、Security Hub検出結果の原因となったリソース(今回はLambda関数)が表示されていますね。

リソース側のSee Profileをクリックすると、リソースの概要やリソースに関連のある検出結果が一覧表示されます。Security Hubコンソール側でも同様のことはできそうですが、これはこれで便利そうですね。

アカウントID側のSee Profileからは、アカウント内で検出しているSecurity Hubコントロールが確認できたり、

この辺りはDetectiveの基本的な機能と変わりありませんが、検索期間を指定し、APIコールの単位でIPアドレス、APIメソッド、リソースを基準に原因となるAPIを実行したIAMリソースの特定が簡単にできます。

以下の箇所から、私の検証アカウントcm-ashizawa.hiroakiを利用してLambdaのAPIを実行し、Security Hubで検知されたことが結果からわかります。

GuardDutyの例になりますが、Detectiveを利用した検索方法は以下のブログが参考になります。

ASFFをJSONで確認してみる

ちなみに、検出結果をJSON出力したものがこちらです。

セキュリティ検出結果機能の有効化前のアカウントと有効化後のアカウントの検出結果JSONを比較したところ、内容に差分があったため(該当箇所をハイライトしています)、どうやら機能の有効化によってSecurity HubのASFFの対する変更も発生しているようです。

{
  "SchemaVersion": "2018-10-08",
  "Id": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0/Lambda.1/finding/3c9761ee-b19d-4843-b28e-d16454d7964a",
  "ProductArn": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub",
  "ProductName": "Security Hub",
  "CompanyName": "AWS",
  "Region": "ap-northeast-1",
  "GeneratorId": "aws-foundational-security-best-practices/v/1.0.0/Lambda.1",
  "AwsAccountId": "123456789012",
  "Types": [
    "Software and Configuration Checks/Industry and Regulatory Standards/AWS-Foundational-Security-Best-Practices"
  ],
  "FirstObservedAt": "2023-05-19T02:31:42.339Z",
  "LastObservedAt": "2023-05-19T02:31:45.950Z",
  "CreatedAt": "2023-05-19T02:31:42.339Z",
  "UpdatedAt": "2023-05-19T02:31:42.339Z",
  "Severity": {
    "Product": 90,
    "Label": "CRITICAL",
    "Normalized": 90,
    "Original": "CRITICAL"
  },
  "Title": "Lambda.1 Lambda function policies should prohibit public access",
  "Description": "This control checks whether the AWS Lambda function policy attached to the Lambda resource prohibits public access. If the Lambda function policy allows public access, the control fails.",
  "Remediation": {
    "Recommendation": {
      "Text": "For information on how to correct this issue, consult the AWS Security Hub controls documentation.",
      "Url": "https://docs.aws.amazon.com/console/securityhub/Lambda.1/remediation"
    }
  },
  "ProductFields": {
    "StandardsArn": "arn:aws:securityhub:::standards/aws-foundational-security-best-practices/v/1.0.0",
    "StandardsSubscriptionArn": "arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0",
    "ControlId": "Lambda.1",
    "RecommendationUrl": "https://docs.aws.amazon.com/console/securityhub/Lambda.1/remediation",
    "RelatedAWSResources:0/name": "securityhub-lambda-function-public-access-prohibited-fe3f5414",
    "RelatedAWSResources:0/type": "AWS::Config::ConfigRule",
    "StandardsControlArn": "arn:aws:securityhub:ap-northeast-1:123456789012:control/aws-foundational-security-best-practices/v/1.0.0/Lambda.1",
    "aws/securityhub/ProductName": "Security Hub",
    "aws/securityhub/CompanyName": "AWS",
    "Resources:0/Id": "arn:aws:lambda:ap-northeast-1:123456789012:function:detective-test-public-lambda",
    "aws/securityhub/FindingId": "arn:aws:securityhub:ap-northeast-1::product/aws/securityhub/arn:aws:securityhub:ap-northeast-1:123456789012:subscription/aws-foundational-security-best-practices/v/1.0.0/Lambda.1/finding/3c9761ee-b19d-4843-b28e-d16454d7964a"
  },
  "Resources": [
    {
      "Type": "AwsLambdaFunction",
      "Id": "arn:aws:lambda:ap-northeast-1:123456789012:function:detective-test-public-lambda",
      "Partition": "aws",
      "Region": "ap-northeast-1",
      "Details": {
        "AwsLambdaFunction": {
          "CodeSha256": "LK5ZQwIJWeWAC/69k3XhWXrvgQeOaoVjJv6rCfHLD2U=",
          "FunctionName": "detective-test-public-lambda",
          "Handler": "index.handler",
          "LastModified": "2023-05-19T02:30:55.731Z",
          "MemorySize": 128,
          "RevisionId": "5e36a7a5-8249-4913-9a2d-c3cb667e78f8",
          "Role": "arn:aws:iam::123456789012:role/service-role/detective-test-public-lambda-role-0qr2kni6",
          "Runtime": "nodejs18.x",
          "Timeout": 3,
          "TracingConfig": {
            "Mode": "PassThrough"
          },
          "Version": "$LATEST"
        }
      }
    }
  ],
  "Compliance": {
    "Status": "FAILED",
    "SecurityControlId": "Lambda.1",
    "AssociatedStandards": [
      {
        "StandardsId": "standards/aws-foundational-security-best-practices/v/1.0.0"
      }
    ]
  },
  "WorkflowState": "NEW",
  "Workflow": {
    "Status": "NEW"
  },
  "RecordState": "ACTIVE",
  "FindingProviderFields": {
    "Severity": {
      "Label": "CRITICAL",
      "Original": "CRITICAL"
    },
    "Types": [
      "Software and Configuration Checks/Industry and Regulatory Standards/AWS-Foundational-Security-Best-Practices"
    ]
  },
  "ProcessedAt": "2023-05-19T02:31:48.548Z"
}

今回追加/変更があったと思われる項目は以下です。

項目 内容
Severity.Product Security Hub側で設定しているものとは別の(?)重要度が追加されています
Title タイトルの先頭にコントロールIDが追加されるようになっていました
ProductFields.StandardsArn 検出したコントロールIDのARN
ProductFields.StandardsSubscriptionArn 検出したコントロールIDのサブスクリプションARN
ProductFields.ControlId 検出したコントロールID
ProductFields.RecommendationUrl 検出したコントロールの修復手順へのリンク
ProductFields.StandardsControlArn 今回検出したコントロール固有のARN(アカウント名含む)

コントロールIDが追加されたせいなのか、より多くの情報が取得できるようになっていますね。

料金について

Amazon Detectiveは取り込んだデータ量に応じて、利用料金が発生します。

2023/5/19時点の東京リージョンでの利用料金はこちらです。

取り込んだデータ量 料金
First 1,000 GB/account/region/month $2.70 per GB
Next 4,000 GB/account/region/month $1.35 per GB
Next 5,000 GB/account/region/month $0.68 per GB
Over 10,000 GB/account/region/month $0.34 per GB

後述するPricingページでは、Security HubのASFFはまだデータソースとして追記されていませんでしたが、他のデータソースと同じ扱いだと思われます。

詳しくはAmazon Detective pricing - Amazon Web Servicesをご覧ください。

ただ嬉しいことに、コアになるDetectiveデータソースとは別に、Detectiveのオプションのデータソースには無料トライアル期間があります。(参考リンク

GuardDutyの追加オプションのようで、嬉しいですね。

最後に

今回は、アップデートで実装されたDetectiveのSecurity HubのASFFサポートについて調査、検証してみました。

実際に手を動かしたことで、Detectiveの新機能検証だけでなく、トライアルが個別に設定されていること、Security HubのASFFに対する変更も発生するという新しい発見がありました。

今後もAWSのSecurityサービスのアップデートがあれば、積極的に検証していきたいです。

以上、芦沢(@ashi_ssan)でした。