
AWSのIAM権限を迅速に評価するツール
Principal Mapper (PMapper) は、AWS アカウントまたは AWS 組織に対する AWS Identity and Access Management (IAM) の設定におけるリスクを特定するためのスクリプト兼ライブラリです。アカウント内のさまざまな IAM ユーザーとロールを有向グラフとしてモデル化し、権限昇格の可能性や、攻撃者が AWS 内のリソースやアクションにアクセスするためにたどる可能性のある代替経路をチェックできるようにします。
PMapper には、AWS の認可動作をローカルでシミュレートするクエリメカニズムが含まれています。プリンシパルが特定のアクションやリソースにアクセスできるかどうかを判断するクエリを実行する際、PMapper はそのユーザーまたはロールが、そのアクションやリソースにアクセスできる他のユーザーやロールにアクセスできるかどうかもチェックします。これにより、ユーザーが S3 オブジェクトを読み取る権限はないが、S3 オブジェクトを読み取ることができる EC2 インスタンスを起動できるといったシナリオを捉えることができます。
詳細については、プロジェクトWiki を参照してください。
Principal Mapper は botocore ライブラリと Python 3.5+ を使用して構築されています。また、pydot(pip で入手可能)と graphviz(Windows、macOS、Linux で https://graphviz.org/ から入手可能)が必要です。
pip install principalmapper
リポジトリをクローンします:
git clone [email protected]:nccgroup/PMapper.git
次に Pip でインストールします:
cd PMapper
pip install .
(ソースからクローンした後)
cd PMapper
docker build -t $TAG .
docker run -it $TAG
docker run ... を呼び出す際に、-e|--env または --env-file を使用して認証情報用の AWS_* 環境変数を渡すか、-v を使用して ~/.aws/ ディレクトリをマウントし、AWS_CONFIG_FILE および AWS_SHARED_CREDENTIALS_FILE 環境変数を使用できます。現在の Dockerfile では、pmapper -h がすぐに使用できるシェルと、graphviz がすでにインストールされた状態になります。
コマンドラインで PMapper を使用する方法の詳細については、Wiki の Getting Started Page を参照してください。すべてのコマンドライン機能とライブラリコードの詳細が記載されたページもあります。
簡単な例を以下に示します:
# AWS CLI プロファイル "skywalker" を通じてアクセスされるアカウントのグラフを作成
pmapper --profile skywalker graph create
# [... グラフ作成の出力 ...]
# IAM ユーザーを作成できるユーザーを確認するクエリを実行
$ pmapper --profile skywalker query 'who can do iam:CreateUser'
# [... クエリの出力 ...]
# "admin" ユーザー以外で、大きな高価な EC2 インスタンスを起動できるユーザーを確認するクエリを実行
$ pmapper --account 000000000000 argquery -s --action 'ec2:RunInstances' --condition 'ec2:InstanceType=c6gd.16xlarge'
# [... クエリの出力 ...]
# 権限昇格のプリセットクエリを実行し、現在の "admin" ユーザーの報告をスキップ
$ pmapper --account 000000000000 query -s 'preset privesc *'
# [... 権限昇格レポート ...]
# 管理者/権限昇格/プリンシパル間アクセスの SVG 表現を作成
$ pmapper --account 000000000000 visualize --filetype svg
# [... 情報出力、ファイル作成 ...]
--profile の使用に注意してください。これは AWS CLI と同じ動作をします。また、後続の query/argquery/visualize の呼び出しでは --account 引数を使用していますが、これは操作するアカウントを確認する手間を省くためのものです(そうしないと PMapper は API コールを行ってそれを判断します)。
可視化の例:

--only-privesc を使用した場合:
大歓迎です。開始する前にイシューで調整し、プルリクエストは現在の開発ブランチ(通常 vX.Y.Z-dev の形式)を対象としてください。
Copyright (c) NCC Group and Erik Steringer 2019. This file is part of Principal Mapper.
Principal Mapper is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Principal Mapper is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with Principal Mapper. If not, see <https://www.gnu.org/licenses/>.