
クラウド環境におけるセキュリティ対策の中でも、「脆弱性管理」は最も重要な取り組みの一つです。特にAWSのようなパブリッククラウドでは、常に最新の脆弱性情報を把握し、適切に対応することが求められます。本記事では、AWS Inspectorを活用した脆弱性管理の基本と、効果的な運用方法について解説します。
脆弱性とは何か?
まず基本的な概念として、「脆弱性(Vulnerability)」とは何かを理解しましょう。
脆弱性とは、ソフトウェアやシステムの設計や実装における欠陥や弱点のことで、攻撃者によって悪用される可能性があるものを指します。例えば:
- ソフトウェアのバグやコーディングミス
- 設定の誤り(デフォルト設定の不備など)
- 古いバージョンのソフトウェアや未適用のセキュリティパッチ
- 安全でない暗号化アルゴリズムの使用
- 不適切なアクセス制御
脆弱性が悪用されると、以下のようなセキュリティインシデントにつながる可能性があります:
- 不正アクセス
- データ漏洩
- サービス停止(DoS攻撃)
- マルウェア感染
- 権限昇格
特に重要なのは、脆弱性は日々新たに発見されるということです。ソフトウェアやOSが最新であっても、明日には新しい脆弱性が発見される可能性があります。そのため、継続的な脆弱性管理が不可欠なのです。
AWS Inspectorとは?
AWS Inspectorは、AWSワークロードの脆弱性を自動的かつ継続的に検出するセキュリティ評価サービスです。具体的には以下のような機能を提供します:
- EC2インスタンスのオペレーティングシステムとアプリケーションの脆弱性検出
- コンテナイメージの脆弱性検出
- Lambda関数の脆弱性検出
- ネットワーク到達性の分析
AWS Inspectorの最大の特徴は、継続的なスキャンです。一度設定すれば、新しいリソースが追加されたときや新しい脆弱性情報が発表されたときに自動的に評価を行います。
AWS Inspectorが検出する脆弱性の種類
AWS Inspectorは主に以下のタイプの脆弱性を検出します:
1. CVE(Common Vulnerabilities and Exposures)
CVEは、公開されている既知のセキュリティ脆弱性のデータベースです。各CVEには固有の識別番号(例:CVE-2021-44228)が割り当てられ、脆弱性の詳細情報が記録されています。
AWS Inspectorは、常に最新のCVEデータベースと照合して、以下のような情報を提供します:
- 影響を受けるパッケージやライブラリ
- 脆弱性の深刻度(CVSSスコア)
- 修正方法や対応策
2. ネットワーク到達性の問題
Inspectorは、以下のようなネットワーク構成の問題も検出します:
- インターネットに公開されている不要なポート
- セキュリティグループの設定ミス
- 潜在的な攻撃経路
3. ベストプラクティス違反
セキュリティのベストプラクティスに反する設定も検出します:
- 安全でない設定
- 不要なサービスの実行
- 過剰な権限
AWS Inspectorの仕組み
AWS Inspectorがどのように脆弱性を検出するのか、その仕組みを理解しましょう。
1. AWS Systems Managerエージェント
EC2インスタンスの場合、AWS Systems Manager(SSM)エージェントを通じてホストのソフトウェアインベントリを収集します。これにより、インスタンスにインストールされているパッケージやアプリケーションの情報を取得します。
2. コンテナイメージスキャン
ECRに保存されているコンテナイメージに対しては、プッシュ時および定期的にスキャンを実行し、イメージ内のパッケージやライブラリの脆弱性を検出します。
3. Lambda関数の評価
Lambda関数のコードパッケージを分析し、依存関係にある脆弱なライブラリを特定します。
4. 継続的なモニタリング
一度有効化すると、AWS Inspectorは以下のタイミングで自動的に評価を実行します:
- 新しいEC2インスタンスが起動されたとき
- 新しいコンテナイメージがECRにプッシュされたとき
- 新しいLambda関数がデプロイされたとき
- 新しいCVE情報が発表されたとき
- システムの構成が変更されたとき
AWS Inspectorの導入方法
AWS Inspectorの基本的な設定方法は非常にシンプルです:
- AWSマネジメントコンソールから「Inspector」サービスにアクセス
- 「インスペクターの有効化」をクリック
- スキャンするリソースタイプ(EC2、ECR、Lambda)を選択
- 「有効化」をクリック
これだけで、AWS環境内のリソースに対する継続的な脆弱性スキャンが開始されます。デフォルトでは15日間の無料トライアル期間が提供され、その後は検出された脆弱性の数に応じた従量課金となります。
実際の検出結果と対応方法
AWS Inspectorが実際にどのような検出結果を提供するのか、いくつか例を見てみましょう。
例1: EC2インスタンスの脆弱性
{
"awsAccountId": "123456789012",
"description": "The version of log4j-core in use is vulnerable to remote code execution (RCE) attacks.",
"exploitAvailable": "YES",
"fixAvailable": "YES",
"inspectorScore": 9.0,
"inspectorScoreDetails": {
"adjustedCvss": {
"baseScore": 9.0,
"scoringVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H"
}
},
"packageVulnerabilityDetails": {
"cvss": [
{
"baseScore": 10.0,
"scoringVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
"source": "NVD",
"version": "3.1"
}
],
"referenceUrls": [
"https://nvd.nist.gov/vuln/detail/CVE-2021-44228",
"https://logging.apache.org/log4j/2.x/security.html"
],
"source": "UBUNTU_CVE",
"sourceUrl": "https://ubuntu.com/security/CVE-2021-44228",
"vendorCreatedAt": "2021-12-10T00:00:00Z",
"vendorSeverity": "CRITICAL",
"vulnerabilityId": "CVE-2021-44228",
"vulnerablePackages": [
{
"arch": "X86_64",
"epoch": 0,
"fixedInVersion": "2.15.0",
"name": "log4j-core",
"packageManager": "JAVA",
"release": null,
"sourceLevelPackageId": null,
"sourcePackageId": null,
"version": "2.14.1"
}
]
},
"resources": [
{
"id": "i-0abc123def456789",
"partition": "aws",
"region": "ap-northeast-1",
"type": "AWS_EC2_INSTANCE"
}
],
"severity": "CRITICAL",
"status": "ACTIVE",
"title": "CVE-2021-44228 - log4j-core vulnerable to remote code execution",
"type": "PACKAGE_VULNERABILITY",
"updatedAt": "2025-05-21T12:34:56Z"
}
この検出結果は、EC2インスタンスにインストールされているLog4jライブラリに、有名なLog4Shell脆弱性(CVE-2021-44228)が存在することを示しています。この脆弱性は非常に深刻で、リモートコード実行(RCE)攻撃に悪用される可能性があります。
対応方法
- 緊急パッチ適用: log4j-coreを安全なバージョン(2.15.0以上)に更新
- 一時的な緩和策: 環境変数の設定(
-Dlog4j2.formatMsgNoLookups=true
) - ネットワーク分離: 脆弱なシステムを一時的に分離し、侵害の拡大を防止
- モニタリング強化: 不審なアクティビティがないか監視
例2: コンテナイメージの脆弱性
{
"awsAccountId": "123456789012",
"description": "OpenSSL is vulnerable to timing oracle attacks that could allow an attacker to recover plaintext from ciphertext in specific situations.",
"exploitAvailable": "YES",
"fixAvailable": "YES",
"inspectorScore": 7.5,
"packageVulnerabilityDetails": {
"vulnerabilityId": "CVE-2022-0778",
"vulnerablePackages": [
{
"arch": "AMD64",
"epoch": 0,
"fixedInVersion": "1.1.1n-0+deb11u1",
"name": "openssl",
"packageManager": "DPKG",
"release": null,
"version": "1.1.1k-1+deb11u1"
}
]
},
"resources": [
{
"id": "sha256:abcd1234efgh5678ijkl9012mnop3456qrst7890uvwx",
"partition": "aws",
"region": "ap-northeast-1",
"type": "AWS_ECR_CONTAINER_IMAGE"
}
],
"severity": "HIGH",
"status": "ACTIVE",
"title": "CVE-2022-0778 - openssl vulnerable to infinite loop in BN_mod_sqrt()",
"type": "PACKAGE_VULNERABILITY",
"updatedAt": "2025-05-21T13:45:56Z"
}
この検出結果は、ECRに保存されているコンテナイメージに含まれるOpenSSLライブラリに脆弱性(CVE-2022-0778)が存在することを示しています。この脆弱性により、攻撃者が特定の状況で暗号文から平文を復元できる可能性があります。
対応方法
- ベースイメージの更新: 最新のセキュリティパッチが適用されたベースイメージを使用
- コンテナの再ビルドとデプロイ: 修正済みのイメージを作成し、再デプロイ
- CI/CDパイプラインへの組み込み: ビルドプロセスにセキュリティスキャンを組み込み、脆弱性のあるイメージのデプロイを防止
AWS Inspectorの効果的な活用方法
AWS Inspectorから最大の価値を引き出すために、以下の実践方法を検討してください。
1. 優先順位付けと修正計画
すべての脆弱性を一度に修正することは現実的ではありません。以下の要素を考慮して優先順位を付けましょう:
- 深刻度(CVSSスコア): 高いスコアの脆弱性から対応
- 悪用可能性: 実際に悪用可能な脆弱性を優先
- リソースの重要度: 重要なビジネスデータを扱うシステムを優先
- 修正の容易さ: 修正が容易なものから対応し、早期に脆弱性の総数を減らす
2. 自動化された修正プロセス
AWS Inspectorの検出結果に基づいて、以下のような自動修正プロセスを構築できます:
- AWS Systems Manager Patch Manager: EC2インスタンスへのパッチ適用を自動化
- Amazon EventBridge + Lambda: 特定の脆弱性が検出されたときに自動的に対応
- AWS Security Hub: セキュリティ検出結果を一元管理し、自動修復ワークフローをトリガー
以下は、EventBridgeとLambdaを使用した自動対応の例です:
import boto3
import json
def lambda_handler(event, context):
# Inspectorの検出結果からデータを取得
finding = event['detail']
resource_id = finding['resources'][0]['id']
vulnerability_id = finding['packageVulnerabilityDetails']['vulnerabilityId']
severity = finding['severity']
# 重大な脆弱性の場合のみ対応
if severity == 'CRITICAL' and resource_id.startswith('i-'):
# EC2インスタンスのタイプの場合
ec2 = boto3.client('ec2')
ssm = boto3.client('ssm')
# セキュリティグループを変更して一時的に分離
try:
security_group_id = 'sg-quarantine123' # 隔離用セキュリティグループ
ec2.modify_instance_attribute(
InstanceId=resource_id,
Groups=[security_group_id]
)
# パッチコマンドを実行
ssm.send_command(
InstanceIds=[resource_id],
DocumentName='AWS-RunPatchBaseline',
Parameters={'Operation': ['Install']}
)
# 通知
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:ap-northeast-1:123456789012:SecurityAlerts',
Subject=f'[自動対応] 重大な脆弱性 {vulnerability_id} を検出',
Message=f'インスタンス {resource_id} で重大な脆弱性 {vulnerability_id} を検出しました。\n'
f'自動的に隔離し、パッチの適用を開始しました。\n'
f'詳細はAWS Inspectorコンソールで確認してください。'
)
return {
'statusCode': 200,
'body': json.dumps('Automatic remediation initiated')
}
except Exception as e:
print(f"Error in automatic remediation: {str(e)}")
# エラー通知
sns = boto3.client('sns')
sns.publish(
TopicArn='arn:aws:sns:ap-northeast-1:123456789012:SecurityAlerts',
Subject=f'[警告] 自動対応に失敗しました - {vulnerability_id}',
Message=f'インスタンス {resource_id} での自動対応に失敗しました。\n'
f'エラー: {str(e)}\n'
f'手動での対応が必要です。'
)
return {
'statusCode': 500,
'body': json.dumps('Automatic remediation failed')
}
3. 開発プロセスへの統合
脆弱性管理を開発ライフサイクルの早い段階で組み込むことで、本番環境での脆弱性を大幅に削減できます:
- CI/CDパイプライン: ビルドプロセスにセキュリティスキャンを組み込む
- Infrastructure as Code (IaC): テンプレートに安全な設定を定義
- 開発者トレーニング: セキュアコーディングの実践方法を教育
4. 定期的なレビューと報告
脆弱性管理の進捗状況を定期的に評価し、以下のようなメトリクスを追跡しましょう:
- 未解決の脆弱性の総数と深刻度別の内訳
- 脆弱性の平均修正時間
- 再発する脆弱性のパターン
- 特定のチームやアプリケーションに関連する脆弱性の傾向
これらのメトリクスを経営陣や関係者に定期的に報告することで、セキュリティへの投資と意識向上につながります。
AWS Inspectorとその他のセキュリティサービスの連携
AWS Inspectorを他のAWSセキュリティサービスと組み合わせることで、より包括的なセキュリティ対策を実現できます:
- AWS Security Hub: すべてのセキュリティ検出結果を一元管理
- Amazon GuardDuty: 不正アクセスや悪意のある活動の検出
- AWS Config: リソース構成の継続的な評価とコンプライアンス確認
- AWS Systems Manager: パッチ適用や設定管理の自動化
- Amazon EventBridge: 検出結果に基づく自動対応
以下は、Security HubとInspectorを連携させる方法の例です:
- AWS Security HubとInspectorを有効化
- Security Hubコンソールで、InspectorからのファインディングをCSVVスコアで並べ替え
- Security Hubのインサイト機能を使用して、最も脆弱性が多いリソースを特定
- カスタムアクションを作成し、特定の検出結果に対する自動修復を設定
Inspectorを使った脆弱性管理のベストプラクティス
AWS Inspectorを活用した効果的な脆弱性管理のために、以下のベストプラクティスを検討してください:
1. 範囲の最適化
- すべてのアカウントとリージョンでInspectorを有効化
- 本番環境だけでなく、開発環境やテスト環境も対象に含める
- 重要なビジネスデータを扱うシステムを優先的に監視
2. 検出と対応の自動化
- EventBridgeを使用して検出結果に基づくアラートを設定
- 修正プロセスをできる限り自動化
- パッチ適用の自動化(AWS Systems Manager Patch Manager)
- 自動化できない場合は、明確な手動プロセスを文書化
3. 継続的な改善
- 検出された脆弱性のパターンを分析
- 共通の問題に対する予防措置を実施
- 脆弱性のある古いAMIやコンテナイメージを定期的に廃止
- セキュアな設計原則をチーム全体で共有
4. コンプライアンスとの連携
- 業界標準やコンプライアンス要件(PCI DSS、HIPAA、GDPRなど)に沿った脆弱性管理
- コンプライアンス報告のためのダッシュボードとレポートの作成
- 監査証跡の維持(検出、分類、修正、検証のプロセスを文書化)
まとめ
AWS Inspectorは、クラウド環境における脆弱性の検出と管理を大幅に簡素化する強力なツールです。継続的なスキャンにより、新たな脆弱性や構成の問題をリアルタイムで検出し、セキュリティ体制を強化することができます。
脆弱性管理は単なる技術的な取り組みではなく、組織全体のセキュリティ文化の一部として捉えることが重要です。AWS Inspectorのような自動化ツールを活用しながら、以下の点を常に意識しましょう:
- 脆弱性は日々発見されるため、継続的な監視と対応が必要
- すべての脆弱性に同時に対処することはできないため、リスクベースの優先順位付けが重要
- 予防的なアプローチ(セキュアな設計、安全な開発慣行)と検出的なアプローチ(継続的なスキャン)を組み合わせる
- セキュリティはチーム全体の責任であり、開発者から経営陣まで全員が関与すべき
AWS Inspectorを適切に活用することで、クラウド環境のセキュリティリスクを大幅に削減し、より安全なシステムを構築・運用することができます。