コンテンツにスキップ

Admin Checker

AdminCheckerデータソースを有効にすると、AWSのIAMサービスで強い権限、または過剰に付与されたIAMリソースを抽出します

AdminCheckerとは?
  • AdminCheckerはRISKENチームが開発したチェックツールです(AWSのサービスではありません)
  • 以下のスキャナが実装されています
    • 特権ユーザチェック
    • 最小権限チェック

特権ユーザチェック

  • 特権ユーザチェックの判定はユーザまたはグループに対して管理者権限・特権を持っているかをチェックします
  • 以下の場合に特権チェックが true となります
    • AdministratorAccess(マネージドポリシー)が付与されている
    • IAMFullAccess(マネージドポリシー)が付与されている
    • インラインポリシーにてAdministratorAccess相当が付与されている
    • インラインポリシーにてIAMFullAccess相当が付与されている
  • スコアリングの考え方として特権ユーザのうちクレデンシャルが漏洩した際、悪用される可能性が高いものを高スコアとして評価します(例えばMFA設定の有無等によってスコアが変動します)
特権ユーザ判定では、いくつかの設定項目は無視されます
  • Denyルール
    • DenyルールはIAMのポリシー評価ロジック 上、最も優先されますがAdminCheckerでは無視しています
    • なのでDenyルールによって実際は特権を持っていなかったとしても特権ユーザと判定される可能性があります
  • Conditionsルール
    • Conditionsにより漏洩リスク等の低いユーザでもスコアが高い状態(特権ユーザ)で取り込まれる可能性があります
  • PermissionBoundoryルール
    • PermissionBoundoryによってリスク低減がされている場合にはスコアが下がりますが、設定内容の詳細までは見ていません(ほぼ無視)

最小権限チェック

  • 最小権限チェックは、AceessAdvisor のデータをもとに必要以上に権限が付与されているIAMユーザ、IAMロールをスキャンします
  • このスキャナは最小権限のプラクティス の思想を参考にしています
    • 許可されているAWSサービス数に対して実際にアクセス履歴があったサービスの割合を計算します
    • 上記の割合が大きいほど高スコアがつく仕組みになっています
    • IAMユーザやIAMロールの棚卸しなどのユースケースにご活用ください

フォーマット

RISKENへデータを取り込む際に、以下のメタデータを付加します

項目 説明
DataSource aws:admin-checker (固定)
ResourceName IAMユーザーのARN
Description 説明
Score スコアリング参照
Tag aws admin-checker admin (特権ユーザチェック) access-report (最小権限チェック) {アカウントID}

スコアリング

RISKENに取り込む際に、以下のロジックによって危険度を判定しスコアリングしています

特権ユーザチェック

graph TD A[Start] --> B{{No AccessKey & No Password?}}; B -->|YEW| C[Score: 0.1]:::low; B -->|No| D{{Is Admin?}}; D -->|NO| E[Score: 0.3]:::low; D -->|YES| F{{No AccessKey & Enable `MFA`?}}; F -->|YES| G[Score: 0.5]:::mid; F -->|NO| H{{Enable `PermissionBoundary`?}}; H -->|YES| I[Score: 0.7]:::mid; H -->|NO| J[Score: 0.9]:::high; classDef high fill:#FFFFFF,stroke:#C2185B,stroke-width:4px; classDef mid fill:#FFFFFF,stroke:#F57C00,stroke-width:4px; classDef low fill:#FFFFFF,stroke:#4DB6AC,stroke-width:4px;

最小権限チェック

graph TD A[Start] --> B{{Has any roles?}}; B -->|NO| C[Score: 0.1]:::low; B -->|YES| D{{AccessRate over 70%?}}; D -->|YES| E[Score: 0.1]:::low; D -->|NO| F{{AccessRate over 50%?}}; F -->|YES| G[Score: 0.3]:::low; F -->|NO| H{{AccessRate over 30%?}}; H -->|YES| I[Score: 0.4]:::low; H -->|NO| J{{AccessRate over 10%?}}; J -->|YES| K[Score: 0.5]:::low; J -->|NO| L[Score: 0.6]:::mid; classDef mid fill:#FFFFFF,stroke:#F57C00,stroke-width:4px; classDef low fill:#FFFFFF,stroke:#4DB6AC,stroke-width:4px;