
AWS Identity and Access Management: визуализатор и поиск аномалий
Этот репозиторий не находится в активной разработке. Однако я открыт для принятия PR. Aaia всё ещё работает, так как в AWS API, которые он использует для сбора данных, не произошло значительных изменений.
(A)нализ (и)дентичности и (д)оступа (I и A)
Примечание: Расшифровка создана уже после выбора названия :P
Aaia (произносится как показано здесь) помогает визуализировать AWS IAM и Organizations в формате графа с помощью Neo4j. Это помогает легко выявлять выбросы. Поскольку он основан на neo4j, можно запрашивать граф с помощью cypher-запросов для поиска аномалий.
Aaia также поддерживает модули для программного получения данных из базы данных neo4j и их обработки в пользовательском стиле. Это в основном полезно, когда необходимо применить сложное сравнение или логику, которые иначе было бы нелегко реализовать через cypher-запросы.
Изначально Aaia задумывался как инструмент для перечисления возможностей повышения привилегий и поиска уязвимостей в AWS IAM. Он был вдохновлён цитатой @JohnLaTwC:
"Защитники думают списками. Атакующие думают графами. Пока это так, атакующие побеждают."
Aaia на тамильском означает бабушка. В целом, Aaia знает всё о семье. Она легко может соединить, кто кому кем приходится; и как; и дать вам связь за долю секунды. Она — живая графовая база данных. :P
Поскольку "Aaia" (этот инструмент) делает примерно то же самое, отсюда и название.
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.
Инструкции здесь
Настройте имя пользователя, пароль и URI болтового соединения в файле Aaia.conf. Пример формата уже приведён в файле Aaia.conf.
Примечание: Aaia тестировался с neo4j v 3.5.17. Он может работать и с более старыми версиями. Neo4j ввёл некоторые изменения после версии 4.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 находится под влиянием и вдохновлён различными замечательными проектами с открытым исходным кодом. Огромное спасибо:
Пример визуализации IAM тестового AWS аккаунта
Пример визуализации результата cypher-запроса для поиска всех связей пользователя в AWS IAM