[AWS] IAM 취약점, 권한 평가 도구 분석

IAM Policy 구조

{
	"Statement":[{
		"Effect":"effect",
		"Principal":"principal",
		"Action":"action",
		"Resource":"arn",
		"Condition":{
			"condition":{
				"key":"value"}
				}
			}
		]
}
  1. Principal : 허용하거나 거부할 속성(entity)이다.
  2. Action : 접근을 허용(allow)하거나 거부(Deny)할지 여부를 명시한다.
  3. Resource : AWS에서 자원이 위치한 경로이다. arn으로 명시한다.
  4. Condition : 정책을 적용할 조건이다. 문자열 일치, IP주소 일치여부 등을 나열할 수 있다.

 

AWS가 IAM 권한 부여를 하는 과정은 매우 복잡하며 여러 단계가 있다. 특정 권한을 관리하기 위해서 리소스 기반 권한, IAM 역할 기반 권한등 평가 과정의 조건문들을 모두 통과해야 권한을 부여받을 수 있다.

아래 제시된 도표는 AWS 공식 설명서에 제시된 정책 평가 로직이다. 보안 주체가 AWS 리소스를 사용하고자 할 때 요청을 AWS에 전송한다. AWS가 요청을 받으면 다음의 순서대로 권한을 평가하여 요청을 허용할지, 거부할지 결정한다.

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_evaluation-logic.html

 

IAM 권한 상승

AWS에서 IAM 권한 설정 미흡으로 발생할 수 있는 권한 상승 시나리오는 다양하게 존재한다. 올바르게 설정된 각각의 IAM 정책(policy)이 결합되어 권한이 평가되면서 의도하지 않은 권한 상승이 발생할 수도 있다.

침투테스터, 보안 실무자로서의 목표는 일부가 아닌 의도하지 않은 모든 경로를 식별하고 조치하는 것이다.

이미 오픈소스로 공개된 많은 평가 도구가 있다.

  • Principal Mapper(PMapper)
  • AWSPX
  • Pacu
  • CloudSplain

기존에는 Pacu의 IAM 모듈을 사용하여 IAM 사용자/역할에 부여된 권한을 검사하는 방법을 사용했다. 하지만 단순히 값을 나열하는 정도에 만족하며 사용해야 했고 의심가는 정책의 이름을 직접 공식 문서에서 검색하면서 취약 여부를 판별해야했다.

새로운 오픈 소스를 접하게 되었고 소개하고자 한다.

 

PMapper

PMapper는 AWS 계정 또는 IAM 구성에서 위험을 식별하기 위한 스크립트 라이브러리이다. 계정의 서로 다른 IAM사용자 및 역할을 그래프로 제공한다. 따라서 공격자가 AWS 리소스 또는 작업에 접근하기 위해 선택할 수 있는 경로를 제시해 준다.

PMapper에는 AWS 권한 부여 동작을 시뮬레이션하는 쿼리 메커니즘이 포함되어 있다. 주체가 어떤 작업이나 자원에 접근한지 확인하기 위해 쿼리를 실행할 때 PMapper는 사용자 또는 역할이 해당 작업이나 자원에 액세스할 수 있는 다른 사용자 또는 역할에 액세스할 수 있는지도 확인한다.

공식 github 페이지는 다음과 같다.

https://github.com/nccgroup/PMapper

 

GitHub - nccgroup/PMapper: A tool for quickly evaluating IAM permissions in AWS.

A tool for quickly evaluating IAM permissions in AWS. - GitHub - nccgroup/PMapper: A tool for quickly evaluating IAM permissions in AWS.

github.com

PMapper 설치

사전 요구(Requirements)

Python3.5+ botocore로 동작한다. 그래프를 그리기 위한 pydot과 graphviz 모듈도 필요하다.

설치

pip install principalmapper

사용

AWS CLI에 저장된 인증정보의 Profile을 기반으로 프로파일을 지정해줄 수 있다.

검증이 필요한 인증정보를 등록한다.

aws configure --profile [프로파일 별칭]

~/.aws/credentials 파일에서 등록한 내용을 확인할 수 있다.

pmapper --profile [별칭] default graph create 를 통해서 관계그래프를 생성할 수 있다.

과정을 분석해 보면 계정의 정보를 가져오기 위한 API의 호출을 통해 권한을 수집하고, 권한 상승이 가능한 경로가 발견되면 쿼리 실행을 통해 검증하고 있었다.

iam:GetAccountAuthorizationDetails 등 작업에 필요한 필수 권한이 허용되어 있지 않다면 pmapper는 에러를 발생한다.

작업은 5분 정도 소요되었다. 그래프를 작성하는데 필요한 노드와 엣지, 그룹의 수가 표시된다.

pmapper --account [계정ID] visualize --filetype svg

결과는 다음과 같다.

쿼리 실행

수집한 데이터를 이용해서 쿼리를 실행시킬 수 있다.

주어진 권한과 ARN을 지정하여 접근이 가능한지 여부를 검사한다.

pmapper --account 670903390496 query --with-resource-policy --resource-owner 670903390496 'who can do s3:GetObject with arn:aws:s3:::670903390496-secrets/flag.txt

예제의 코드를 그대로 가져온 것인데 현재의 권한으로 670903390496-secrets 버킷 내에 있는 flag.txt의 읽기 (GetObject) 실행이 가능한지 여부를 검사한다.

AWS에서 Administrative한 접근이 가능하거나, S3에 한하여 ReadOnly 액세스 권한이 부여되어 있는 사용자나 역할을 조회하여 나열한다.

이외에도 EC2 인스턴스 조회, 생성 등의 실행가능 여부를 조사할 수도 있고 IAM 권한과 ARN을 사용하여 권한 검사 결과도 반환할 수 있다.

권한 상승 검사

쿼리 검사를 통한 권한 상승 가능 여부를 확인한다.

pmapper --account 670903390496 query -s 'preset privesc *'

조회 가능한 모든 역할/사용자에 대해서 "admin" 권한을 얻을 수 있는지 여부를 검사한다.

$ pmapper --account 670903390496 query -s 'preset privesc *'
user/EC2Manager can escalate privileges by accessing the administrative principal role/EC2Role-Admin:
   user/EC2Manager can use EC2 to run an instance with an existing instance profile to access role/EC2-Fleet-Manager
   role/EC2-Fleet-Manager can use EC2 to run an instance with an existing instance profile to access role/EC2Role-Admin

IAM 사용자 EC2Manager는 사용가능한 EC2Role-Admin을 통해서 관리자 권한의 사용이 가능하다고 보여주고 있다.

지원하는 권한 상승 경로는 https://labs.bishopfox.com/tech-blog/iam-vulnerable-assessing-the-aws-assessment-tools 에서 설명하고 있다.

마치며

AWS에서의 권한 상승 기반 익스플로잇은 지금도 꾸준하게 연구되고 있다. AWS 또한 새로운 서비스를 출시하면서 새로운 권한이 생겨나고 그에 따른 새로운 취약점이 발견되고 있다.

권한 상승을 허용하는 권한의 조합들이 많이 존재하며 이러한 조합들은 현재 문서화 된 것이 없다. AWS 클라우드 사용자는 최소 권한만 부여하여 적절한 권한 사용이 이루어지는지 꾸준한 모니터링이 필요하며, 침투테스터들은 더 많은 경로를 연구하여 AWS에서 제시하는 보안 모델 중 클라우드에서의 보안 향상에 집중해야한다.

References

https://labs.bishopfox.com/tech-blog/iam-vulnerable-assessing-the-aws-assessment-tools

 

IAM Vulnerable - Assessing the AWS Assessment Tools

In a follow up to his IAM Vulnerable tool, Seth Art examines the identification aspect of IAM privilege escalation and reviews IAM privesc assessment tools

labs.bishopfox.com

 

반응형