IAMの権限昇格のパスを「PMapper」を利用して可視化して注意が必要なIAM User Roleを把握してみた

2022.08.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コンサル部@大阪オフィスのTodaです。

IAMを管理する中でAssumeRoleやPassRoleによる権限昇格のパスを把握する事は注意が必要なIMAの把握に役に立つと考えております。
今回は IAMの権限昇格のパスを可視化してくれる「PMapper」を試してみます。

■ Github nccgroup / PMapper
https://github.com/nccgroup/PMapper

PMapperでできることは?

Principal Mapper (PMapper) はAWSアカウントまたはOrganizationsにて管理されているAWS Identity and Access Management (IAM)の分析をおこない権限昇格のチェックと図による可視化をおこないます。
当ツールを利用することで下記3点の把握が可能になります。

  • AdministratorsAccessやIAMFullAccess権限を所有しているIAM User or Roleの把握
  • 上記に権限昇格が可能なIAM User or Roleの把握
  • 権限昇格のパスを矢印線で把握

権限昇格の関係性(パス)の確認にて、注意が必要な権限を所有しているIAMとPassRoleとAssumeRoleにより権限を引き受けることができるIAMを把握する事ができます。

■ 可視化サンプルイメージ
コマンドによる可視化をおこなうと下記イメージが生成されて全IAMと権限昇格のパスを確認出来ます。
下記イメージはサンプルとなります実際の表示ではフォントや図の配置が変わります。

可視化サンプルイメージ1

画像内に表示される
「青枠」はAdministratorsAccessやIAMFullAccess権限を所有しているIAMを表します。
「赤枠」は「青枠」の権限を引き受けることができるIAMを表します。
「矢印」は権限昇格のパスを表します。

出力時にprivesc-onlyオプションを指定する事で権限昇格が可能なIAMと背景が青色のみを選択して出力することも可能です。
privesc-onlyオプションにて表示すると権限昇格の方法も表示されます。

可視化サンプルイメージ2

IAMの管理は全て注意を頂く必要ございますが、背景が青色と赤色のIAMは特に注意が必要というのが簡易に把握出来る点が素晴らしいですね。

導入してみる

PMapperはGithubから取得を頂きDockerにて実行いただくパターンとPython3がインストールされている環境にてご利用いただけます。
また、グラフ描写用にGraphvizの追加インストールが必要になります。
今回はAWS CloudShellに導入をおこない利用してみます。

インストール

AWSマネージメントコンソールにログインを頂き、AWS CloudShellを起動します。
下記コマンドを実行いただきPMapperを利用出来る状態にします。
CloudShellにはGraphvizが導入されていないためインストールをおこないます。

$ sudo yum install -y graphviz

インストール完了後、PMapperのgitからクローンをおこないます。

$ git clone https://github.com/nccgroup/PMapper.git
$ cd PMapper

取得した情報の中にrequirements.txt が格納されています。
requirements.txtはPythonのパッケージ管理(pip)で利用出来るファイルでインストールが必要なパッケージが記載されています。
ファイルを利用してパッケージのインストールをおこないます。

$ pip3 install --user -r requirements.txt

上記にてPMapperをご利用いただける状態になります。

利用してみる

graph

graphコマンドは可視化に必要な情報の作成、一覧、詳細表示をする機能を利用頂けます。
まずはサブコマンドのcreateを利用して必要な情報の収集をおこないます。
実行はチェックするリージョンとリソースの量で時間が変わります。

■ graph - CLI Reference
https://github.com/nccgroup/PMapper/wiki/CLI-Reference

$ python3 pmapper.py graph create
or
$ python3 pmapper.py graph create --include-regions ap-northeast-1

しばらくすると実行結果が表示されます。 表示内のadminsの項目はAdministratorsAccessやIAMFullAccess権限を所有するIAMの件数になります。

Graph Data for Account:  AWSアカウントID
  # of Nodes:              80 (4 admins)
  # of Edges:              32
  # of Groups:             1
  # of (tracked) Policies: 186

1度必要な情報の作成をおこないますとサブコマンドのdisplayにて内容の再確認も可能です。
最新の情報を取得する場合は再度createを実行する必要があります。

$ python3 pmapper.py graph display
Graph Data for Account:  AWSアカウントID
  # of Nodes:              80 (4 admins)
  # of Edges:              32
  # of Groups:             1
  # of (tracked) Policies: 186

visualize

上記graphで取得した情報はvisualizeコマンドを利用して可視化(グラフ表示)する必要があります。
出力できるファイルタイプは 標準:svg、png、dot、graphmlが選択いただけます。

■ visualize - CLI Reference
https://github.com/nccgroup/PMapper/wiki/CLI-Reference

$ python3 pmapper.py visualize    
or
$ python3 pmapper.py visualize --filetype svg

Created file ./99999999999.svg

CloudShellを利用して画像生成をした場合、表示出来ないため右上の[Actions]から[Download file]をクリックいただき生成したファイルをダウンロードします。
今回の手順の場合は、ファイルは/home/cloudshell-user/PMapper/[生成ファイル名] を指定します。

ファイルを表示しますと下記のようになっており権限昇格が可能なIAMについては矢印で関係性をわかりやすく表示されます。
また、権限昇格がないIAMは矢印のつながりがないため簡易に確認ができます。

PMapperによる可視化1

今回検証環境でIAMロール等が多く設定されているため大きな図が生成されています。
注意が必要なIAMと権限昇格の部分だけを出力する場合は下記コマンドをご利用ください。

$ python3 pmapper.py visualize --only-privesc

Created file ./99999999999-privesc-risks.svg

PMapperによる可視化2

only-privescオプションにて出力すると権限昇格の方法も表示されます。

さいごに

今回はPrincipal Mapper (PMapper) を利用してIAM権限昇格のパスを可視化してみました。
通常の可視化ではAdministratorsAccessとIAMFullAccessの権限を所有するIAMが青色で権限昇格が可能なIAMを赤色で表示をおこない注意が必要な部分を簡易に確認する事ができる事を確認しています。
また、当ツールはAWS Organizationsで利用できる orgsコマンドや指定した権限で絞り込む queryコマンドもありますので別記事でご案内させていただきます。
少しでもお客様の参考になればと考えております。

参考にさせていただいたサイト

■ IAMの権限昇格を可視化する「PMapper」 - ペネトレーションしのべくん
https://shinobe179.hatenablog.com/entry/2022/08/09/233421