
AWS Identity and Access Management ビジュアライザーと異常検出ツール
このリポジトリは活発に開発されてはいません。しかし、PRは受け付けています。Aaiaは、データ収集に使用するAWS APIに大きな変更がないため、引き続き動作します。
(A)n(a)lysis of (I)dentity and (A)ccess
注:名前が決まった後に作成された拡張です :P
Aaia(発音はこちらを参照)は、Neo4jを使用してAWS IAMとOrganizationsをグラフ形式で可視化するのに役立ちます。これにより、外れ値を簡単に特定できます。neo4jをベースにしているため、cypherクエリを使用してグラフをクエリし、異常を見つけることができます。
Aaiaは、neo4jデータベースからプログラムでデータを取得し、カスタム方式で処理するモジュールもサポートしています。これは、cypherクエリだけでは容易ではない複雑な比較やロジックを適用する必要がある場合に特に有用です。
Aaiaは当初、AWS IAMの権限昇格の可能性を列挙し、抜け穴を見つけるためのツールとして意図されていました。@JohnLaTwCの引用に触発されました。
「防御側はリストで考え、攻撃側はグラフで考える。このことが真実である限り、攻撃者が勝つ。」
Aaiaはタミル語で祖母を意味します。一般的に、おばあちゃんは家族のことを何でも知っています。誰が誰と、どのように関係しているかを簡単に結びつけ、瞬時にそのつながりを教えてくれます。彼女は生きたグラフデータベースです。 :P
i. Dockerランタイムのインストール
インストールに関する公式ドキュメントはこちらを確認してください。
ii. 次のdockerコマンドを実行します
docker run -p 7687:7687 -p 7474:7474 -v `pwd`/neo4j/data:/data -v `pwd`/neo4j/logs:/logs -e NEO4J_AUTH=neo4j/test neo4j:3.5.17
注 : 上記のコマンドはneo4jデータをディスクに永続化します。ただし、必要に応じて変更し、任意の認証情報に変更してください。ここで指定した認証情報はAaia.confファイルにも設定する必要があります。
手順はこちら
ユーザー名、パスワード、bolt接続URIをAaia.confファイルに設定します。サンプル形式は既にAaia.confファイルに記載されています。
注: Aaiaはneo4j v3.5.17でテストされています。古いバージョンでも動作する可能性があります。Neo4j v4.0以降で導入された一部の変更は、Aaiaの現在のコードベースと互換性がないことが判明しています。
apt-get install awscli jq
yum install awscli jq
これらのパッケージはAaia_aws_collector.shスクリプトに必要です。コレクタースクリプトを実行するベースシステムにこれらのパッケージが存在することを確認してください。
git clone https://github.com/rams3sh/Aaia
cd Aaia/
python3 -m venv env
source env/bin/activate
注: Aaiaはpyjqライブラリに依存していますが、現在Windowsでは安定していません。そのため、AaiaはWindows OSではサポートされていません。
python -m pip install -r requirements.txt
Aaiaは、コレクタースクリプトがAWSから関連データを収集するために、以下のAWS権限を必要とします。
iam:GenerateCredentialReport
iam:GetCredentialReport
iam:GetAccountAuthorizationDetails
iam:ListUsers
iam:GetUser
iam:ListGroups
iam:ListRoles
iam:GetRole
iam:GetPolicy
iam:GetAccountPasswordPolicy
iam:GetAccountSummary
iam:ListAccountAliases
organizations:ListAccountsForParent
organizations:ListOrganizationalUnitsForParent
organizations:DescribeOrganization
organizations:ListRoots
organizations:ListAccounts
organizations:ListTagsForResource
organizations:ListPolicies
organizations:ListTargetsForPolicy
organizations:DescribePolicy
organizations:ListAWSServiceAccessForOrganization
「Organizations」関連の権限は省略可能です。ただし、上記の「IAM」関連の権限はすべて必要です。
これらの権限が、コレクタースクリプトによるデータ収集に使用されるユーザー/ロール/その他のAWSプリンシパルに付与されていることを確認してください。
AWS認証情報が設定されていることを確認してください。設定方法はこちらを参照してください。
認証情報が設定されたら。 実行:-
./Aaia_aws_collector.sh <profile_name>
データ収集に使用するAWSプロファイルの出力形式がjsonに設定されていることを確認してください。Aaiaは収集されたデータがjson形式であることを想定しています。
データを別のインスタンスから収集する必要がある場合は、"Aaia_aws_collector.sh"ファイルをリモートインスタンスにコピーし、実行して、生成された"offline_data"フォルダをAaiaが設定されているインスタンスのAaiaパスにコピーし、次の手順を続行してください。これは、コンサルティングやクライアント監査の場合に役立ちます。
python Aaia.py -n <profile_name> -a load_data
-nは値として"all"をサポートしており、これはoffline_dataフォルダ内に収集され存在するすべてのデータをロードすることを意味します。
認証情報ファイルに"all"というプロファイルがないことを確認してください。引数と競合する可能性があります。 :P
これでAaiaを使用する準備が整いました。
現時点では、サンプルモジュールがスケルトン例として提供されています。これはカスタムモジュールを構築するための参考として使用できます。
python Aaia.py -n all -m iam_sample_audit
Aaiaはさまざまな優れたオープンソースプロジェクトの影響とインスピレーションを受けています。特に感謝を捧げます:-
ダミーAWSアカウントのIAMのサンプルビジュアル
AWS IAM内のユーザーのすべての関係を検索するcypherクエリの結果のサンプルビジュアル