此仓库不再积极开发。但欢迎接受 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 文件中进行配置。
说明请见此处
在 Aaia.conf 文件中设置用户名、密码和 Bolt 连接 URI。示例格式已在 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 操作系统。
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 的可视化示例
一个 Cypher 查询结果的示例可视化,用于查找 AWS IAM 中用户的所有关系