Amazon Inspectorで意図的に手頃な検出をいっぱい出す

Amazon Inspectorで意図的に手頃な検出をいっぱい出す

Amazon Inspectorの抑制ルールやSecurity Hubの自動化ルールを検証したいけど、手頃な検出がない…そんなお困りの方へ。 古いAMIからEC2を起動するだけで、大量の検出を意図的に出す方法をご紹介します。
2026.08.17

はじめに

皆様こんにちは、あかいけです。
Amazon Inspectorの抑制ルールや、Security Hubの自動化ルールを検証したいと思ったことはありますか?
私はあります。

ただ、いざ検証しようとすると手頃な検出がなく、困ってしまいました。

GuardDutyであればcreate-sample-findingsというサンプル検出を出すコマンドがありますが、Inspectorには同等のものがありません。
Inspectorは実際のリソースをスキャンして脆弱性を突き合わせる仕組みなので、検出が欲しければ、脆弱性のある状態を実際に作ってスキャンさせるしかないわけです。

そんなわけで今回は、EC2で意図的にInspectorの検出をいっぱい出してみます。

やること

古いAMIからEC2インスタンスを起動するだけです。

Inspectorはインスタンス上のパッケージの脆弱性(CVE)をスキャンするので、リリースから時間の経ったAMIを使うと、その分だけ未修正の脆弱性がたまっており、大量の検出を出せます。
検証用のダミー検出がほしいだけであれば、これが一番手っ取り早いです。

※ 前提として対象リージョンでInspectorのEC2スキャンを有効化しておいてください

AMIを探す

まずは古代のAMIを探します。
--include-deprecatedを付けて非推奨のAMIも対象にし、作成日の古い順に並べてみます。

aws ec2 describe-images --owners amazon --include-deprecated \
  --filters "Name=name,Values=al2023-ami-2023.*-kernel-6.1-x86_64" \
            "Name=state,Values=available" \
  --query 'sort_by(Images,&CreationDate)[].[CreationDate,ImageId,Name,DeprecationTime]' \
  --output text | head -5

2023年2月。
なかなか良さそうです。

2023-02-24T05:02:33.000Z        ami-06b9a1f1f27895002   al2023-ami-2023.0.20230222.1-kernel-6.1-x86_64  2023-03-27T22:00:00.000Z
2023-03-13T23:52:35.000Z        ami-067871d950411e643   al2023-ami-2023.0.20230315.0-kernel-6.1-x86_64  2023-08-25T17:30:00.000Z
2023-03-22T20:19:18.000Z        ami-02a2700d37baeef8b   al2023-ami-2023.0.20230322.0-kernel-6.1-x86_64  2023-08-25T17:30:00.000Z
2023-04-04T18:27:21.000Z        ami-079a2a9ac6ed876fc   al2023-ami-2023.0.20230329.0-kernel-6.1-x86_64  2023-08-25T17:30:00.000Z
2023-04-18T23:37:44.000Z        ami-01b32aa8589df6208   al2023-ami-2023.0.20230419.0-kernel-6.1-x86_64  2023-08-25T17:30:00.000Z

起動する

先ほど調べたAMIのIDをami_idに渡して、EC2を起動します。
今回は以下のTerraformを使います。
なおInspectorのエージェントベーススキャンの対象になるにはSSM管理下に入っている必要があるので、AmazonSSMManagedInstanceCoreを付けたインスタンスプロファイルもあわせて作成しています。

main.tf
terraform {
  required_version = ">= 1.15"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 6.0"
    }
  }
}

provider "aws" {
  region = var.region
}

###############################################################################
# Variables
###############################################################################

variable "region" {
  type        = string
  default     = "ap-northeast-1"
}

variable "ami_id" {
  type        = string
}

variable "instance_type" {
  type        = string
  default     = "t3.micro"
}

variable "name" {
  type        = string
  default     = "inspector-test"
}

###############################################################################
# IAM: SSM 管理下に置くためのインスタンスプロファイル
###############################################################################

data "aws_iam_policy_document" "assume_role" {
  statement {
    effect  = "Allow"
    actions = ["sts:AssumeRole"]

    principals {
      type        = "Service"
      identifiers = ["ec2.amazonaws.com"]
    }
  }
}

resource "aws_iam_role" "ssm" {
  name               = "${var.name}-ssm-role"
  assume_role_policy = data.aws_iam_policy_document.assume_role.json
}

resource "aws_iam_role_policy_attachment" "ssm_core" {
  role       = aws_iam_role.ssm.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}

resource "aws_iam_instance_profile" "ssm" {
  name = "${var.name}-ssm-profile"
  role = aws_iam_role.ssm.name
}

###############################################################################
# EC2
###############################################################################

resource "aws_instance" "this" {
  ami                  = var.ami_id
  instance_type        = var.instance_type
  iam_instance_profile = aws_iam_instance_profile.ssm.name

  metadata_options {
    http_endpoint = "enabled"
    http_tokens   = "required"
  }

  root_block_device {
    volume_size           = 8
    volume_type           = "gp3"
    encrypted             = true
    delete_on_termination = true
  }

  tags = {
    Name    = var.name
    Purpose = "amazon-inspector-detection-test"
  }
}

###############################################################################
# Outputs
###############################################################################

output "instance_id" {
  value = aws_instance.this.id
}

output "check_ssm" {
  description = "SSM 管理下になったかの確認コマンド(数分かかる)"
  value       = "aws ssm describe-instance-information --region ${var.region} --filters Key=InstanceIds,Values=${aws_instance.this.id} --query 'InstanceInformationList[].[InstanceId,PlatformName,PlatformVersion,AgentVersion]' --output table"
}

output "check_findings" {
  description = "Inspector の検出結果確認コマンド(初回スキャンまで10〜30分程度)"
  value       = "aws inspector2 list-findings --region ${var.region} --filter-criteria '{\"resourceId\":[{\"comparison\":\"EQUALS\",\"value\":\"${aws_instance.this.id}\"}]}' --query 'findings[].{Sev:severity,Title:title}' --output table"
}

applyしたら、まずはSSMの管理対象になっているかを確認します。
数分待って以下のように表示されればOKです。

aws ssm describe-instance-information \
  --region ap-northeast-1 \
  --filters Key=InstanceIds,Values=i-08846885b4c065daa \
  --query 'InstanceInformationList[].[InstanceId,PlatformName,PlatformVersion,AgentVersion]' \
  --output table
---------------------------------------------------------------
|                 DescribeInstanceInformation                 |
+----------------------+----------------+-------+-------------+
|  i-08846885b4c065daa |  Amazon Linux  |  2023 |  3.1.1927.0 |
+----------------------+----------------+-------+-------------+

しばらく待つと

SSMの管理対象になってからすぐ、Inspectorの初回スキャンが完了しました。

aws inspector2 list-coverage \
  --region ap-northeast-1
  --filter-criteria '{"resourceId":[{"comparison":"EQUALS","value":"i-08846885b4c065daa"}]}' \
  --query 'coveredResources[].{Status:scanStatus.statusCode,Reason:scanStatus.reason,Last:resourceMetadata.ec2}' \
  --output json
[
    {
        "Status": "ACTIVE",
        "Reason": "SUCCESSFUL",
        "Last": {
            "tags": {
                "Name": "inspector-test",
                "Purpose": "amazon-inspector-detection-test"
            },
            "amiId": "ami-06b9a1f1f27895002",
            "platform": "LINUX"
        }
    }
]

そして初回スキャンが終わると、大量の検出が押し寄せてきます。
今回は起動から数分で検知が発生しました。

カウントしてみたら、3340個の検出がありました。
これで抑制ルールを検証し放題です。

スクリーンショット 2026-08-17 18.21.06

Security Hub側も、ほぼ同じタイミングで検出が反映されていました。
これで自動化ルールも検証し放題ですね。

スクリーンショット 2026-08-17 18.30.11

なお今回はEC2で試しましたが、ECSなどのコンテナでも考え方は同じです。
古いイメージをもとにタスクを動かせば、コンテナイメージのスキャンで同じように検出を出せます。
コンテナ環境で検証したい場合は、そちらで試してみてください。

さいごに

以上、Inspectorで意図的に手頃な検出を出す方法でした。

古いAMIから起動するだけと非常にシンプルですが、抑制ルールや自動化ルールの検証には十分すぎるほどの検出が手に入ります。
また検証が終わったら、必ずこの脆弱なインスタンスを削除しておきましょう。

同じように検証用の検出を探している方の助けになれば幸いです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事