AWSの権限昇格してますか?(挨拶)
PMapperは、指定したAWSアカウントのIAMとOrganizationsを分析して、権限昇格可能なパスを可視化してくれるツールです。NCCグループ社製。
PMapperはIAMポリシー、ユーザー、グループなどをノード、権限昇格する(できる)ノードから、されるノードへのベクトルをエッジとして、有向グラフを生成します。こんな感じ。
権限昇格できるノード--昇格方法-->権限昇格されるノード
AdministratorsAccess
の他、IAMFullAccess
のように、自分自身にポリシーを割り当てられるノードをAdminと位置づけ、AssumeRole
や PathRole
によってAdminに(直接的か間接的かを問わず)なれる別のノードを探す、という感じみたいです。
実行
CloudShellを使いました。Dockerイメージもありますが、リポジトリにrequirements.txtが同梱されているのでそっちで済ませました。
$ sudo yum install -y graphviz $ git clone https://github.com/nccgroup/PMapper.git $ cd PMapper $ pip3 install --user -r requirements.txt
IAMリソースの情報を収集し、グラフを作成します。
$ python3 pmapper.py graph create
以下のコマンドで概況を把握できます。ノードが40あり、うち3つがAdminに相当するようです。これだけでは権限昇格できる・されるの関係は分かりません。
$ python3 pmapper.py graph display Graph Data for Account: omitted # of Nodes: 40 (3 admins) # of Edges: 13 # of Groups: 2 # of (tracked) Policies: 90
グラフの画像ファイルを出力します。
$ python3 pmapper.py visualize Created file ./omitted-account-id.svg
出力したファイルを、CloudShell画面右上の「Actions」から「Download file」したもの(の一部)がこちら。青がAdminノード、赤がAdminに権限昇格できるノードです。
--only-privesc
オプションを付けると、権限昇格可能な組み合わせのみが残って、その手法が表示されます。
$ python3 pmapper.py visualize --only-privesc Created file ./omitted-account-id-privesc-risks.svg
こんな感じ。
上段は「CloudFormation」とあります。赤いほうのノード(ロール)はCloudFormationスタックの作成と青いノード(ロール)をPassRoleする権限を持っているので、例えばCloudFormationでAdmin相当の権限を持ったEC2インスタンスを立てて悪いことできちゃう、ということのようです。
下段は「AssumeRole」とあります。こちらは単純に、赤いノードが青いノードを引き受けられる、ということです。
要するに、赤いロールが侵害されるとマズい、ということです。ネクストアクションとしては、IAMの設定を見直すことで改善・解消できるならそうすべきだし、そうでないなら、この赤いロールを引き受けているリソースを特定して、それらが侵害される状態になっていないかを確認する、といったところでしょうか。
おわりに
グラフ生成機能は(おそらく)AdministratorAccessなど固定的な条件のみから生成されるっぽいですが、これとは別に query
サブコマンドで任意の権限を利用できるノードを列挙する機能があるようです。
その他、Organizationsの分析もできたりするみたいですが、割愛します。
PMapperをラップしたパロアルト社の「IAM-Deescalate」も併せて紹介しようと思ったんですが、PMapperだけで結構重かったので、こちらも次回にします。