はじめに

AWSの利用において、IAM Userのクレデンシャルについては厳正な管理を実施されていることがほとんどと思います。
(とはいえ、うっかりの事故は発生していますが…)
反面、IAM Roleについては、管理がずさんなこともあるのではないでしょうか?
本ブログでは、ずさんな管理がどれほど危険なものなのかを解説したいと思います。

IAM Roleとは?

AWS Identity and Access Management (IAM) ロールは、従業員のアイデンティティやアプリケーションなどの信頼されたアイデンティティが AWS でアクションを実行できるように、特定のアクセス許可を作成し割り当てるエンティティです。信頼できるアイデンティティが IAM ロールを引き受けると、それらの IAM ロールによってスコープされたアクセス許可のみが付与されます。ロールはローテーションする必要のない一時的な認証情報を提供するため、IAM ロールの使用はセキュリティのベストプラクティスです。
公式サイトの抜粋です。
IAM Roleはヘルメットのアイコンで表されていますが、このヘルメットを一時的に被ることによって、特定の操作が許容されます。
工事現場などに視察者がヘルメットを被ることによって、本来立ち入り禁止の場所に入っていけるようなイメージです。

詳しくは公式サイトを参照ください。
https://aws.amazon.com/jp/iam/features/manage-roles/

ハッカーの攻撃手段例

※ ここでの手順の悪用は行わないでください。実施した場合に悪意の有無にかかわらずアカウントロックなどが行われる可能性もありあす。

先に書いたように、IAM Roleは外部からも利用できます。
適当なアカウントに対して存在しないロールでアクセスした場合、以下のようなエラーメッセージが返ってきます。

An error occurred (AccessDenied) when calling the AssumeRole operation:Not authorized to perform sts:AssumeRole

一方、そのロールが存在するとエラーメッセージは以下のように変わります。

An error occurred (AccessDenied) when calling the AssumeRole operation: User: is not authorized to perform: sts:AssumeRole on resource:

このエラーメッセージの差異によって、ロールの有無が判断可能ということです。
ハッカーはロール名によく使われる名前のリストを使うことによって、辞書攻撃的に対象アカウントにアクセスを試みることで、IAM Roleを列挙することができます。
これだけで、利用しているAWSサービスや3rdパーティー製品、IAM User名などを取得できます。
さらに、ロールの設定次第では、セッションを引き受けられてしまう可能性すらあります。
そして、IAM Roleを列挙しセッション引き受け可否を判定するようなスクリプトはインターネット上で取得可能です。

攻撃から身を守るためには?

エラーメッセージに関しては現時点での仕様なため、ユーザー側では対策できません。
ただし、以下の手段で攻撃の成功を最小化することができます。

  • 最小権限の原則
  • 一般的な名称を避ける
  • Account IDも無闇に公開しない
  • GuardDutyの導入
  • 事前のペネトレーションテスト

最小権限の原則

Principalに不必要な権限まで広げない、Conditionsを活用してアクセス元を制限するなどがあります。基本にして最重要な対応です。

一般的な名称を避ける

3rdパーティー製品の設定時に、マニュアルに厳密に従ってIAM Role名なども全く同じにしてしまうことはよくあると思います。仕組みを正しく理解していないと難しいかもですが、「e.g.」などで書かれているものについては、変更することも有効です。

Account IDも無闇に公開しない

Account ID自体はそれだけでは秘匿情報とは言えないですが、所有者や所属先と合わさることでリスクが上がります。SaaSの提供時などで公開しないといけないケースもありますが、必要ない限り公開しない方が無難です。

GuardDutyの導入

どれだけ対策をしていても攻撃を成功されてしまう可能性はゼロにはなりません。何かあった場合にいち早く検知してくれる可能性があるGuardDutyは積極的に有効化しましょう。

事前のペネトレーションテスト

実際の機密データが格納前や、本番サービス開始前などでペネトレーションテストの実施を検討しましょう。
代表的なテストツールであるPacuでは、上記に書いたIAM Role列挙などについて、擬似攻撃をかけることで脆弱な設定を洗い出すことが可能です。

まとめ

本来、AWS環境に一時的な認証情報を使ってアクセスすることで安全性を高めるIAM Roleですが、正しく使わないと悪用の可能性があります。
とはいえ、IAM Role自体の機能の素晴らしさには変わりがないので、正しく活用して安全にAWSを利用しましょう!