
AWS Identity and Access Management 시각화 및 이상 탐지 도구
이 저장소는 현재 활발히 개발되고 있지 않습니다. 그러나 PR을 수락할 의향이 있습니다. Aaia는 데이터 수집에 사용하는 AWS API에 큰 변화가 없었기 때문에 여전히 작동합니다.
(A)아이덴티티 및 (A)ccess 분(A)석(Analysis of Identity and Access)
참고: 약어는 이름이 정해진 후에 만들어졌습니다 :P
Aaia(발음은 여기에서 확인)는 Neo4j를 활용하여 AWS IAM 및 Organizations를 그래프 형태로 시각화하는 데 도움을 줍니다. 이는 이상값(outliers)을 쉽게 식별하는 데 도움이 됩니다. Neo4j 기반이기 때문에, cypher 쿼리를 사용하여 그래프를 질의하고 이상 징후를 찾을 수 있습니다.
Aaia는 또한 Neo4j 데이터베이스에서 데이터를 프로그래밍 방식으로 가져와 사용자 지정 방식으로 처리하는 모듈을 지원합니다. 이는 cypher 쿼리로는 쉽지 않은 복잡한 비교나 로직을 적용해야 할 때 특히 유용합니다.
Aaia는 처음에 AWS IAM에서 권한 상승 가능성을 열거하고 허점을 찾기 위한 도구로 고안되었습니다. @JohnLaTwC의 다음 인용문에서 영감을 받았습니다.
"방어자는 목록으로 생각한다. 공격자는 그래프로 생각한다. 이것이 사실인 한, 공격자가 이긴다."
Tamil어로 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 파일에도 구성되어야 합니다.
설치 방법은 여기를 참고하세요.
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는 현재 Windows에서 안정적이지 않은 pyjq 라이브러리에 의존합니다. 따라서 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 쿼리 결과의 샘플 시각화