AWS Pentesting

Support HackTricks

Basic Information

AWS 환경에서 펜테스팅을 시작하기 전에 AWS가 어떻게 작동하는지에 대한 몇 가지 기본 사항을 알아야 합니다. 이를 통해 무엇을 해야 하는지, 잘못된 구성은 어떻게 찾는지, 그리고 이를 어떻게 악용할 수 있는지 이해하는 데 도움이 됩니다.

조직 계층 구조, IAM 및 기타 기본 개념은 다음에서 설명됩니다:

AWS - Basic Information

Labs to learn

Tools to simulate attacks:

AWS Pentester/Red Team Methodology

AWS 환경을 감사하기 위해서는 어떤 서비스가 사용되고 있는지, 무엇이 노출되고 있는지, 누가 무엇에 접근할 수 있는지, 그리고 내부 AWS 서비스와 외부 서비스가 어떻게 연결되어 있는지를 아는 것이 매우 중요합니다.

Red Team 관점에서 AWS 환경을 침해하기 위한 첫 번째 단계는 일부 자격 증명을 얻는 것입니다. 다음은 이를 수행하는 방법에 대한 몇 가지 아이디어입니다:

  • github(또는 유사한 곳)의 유출 - OSINT

  • 사회적 공학

  • 비밀번호 재사용 (비밀번호 유출)

  • AWS 호스팅 애플리케이션의 취약점

  • 서버 측 요청 위조 메타데이터 엔드포인트에 접근

  • 로컬 파일 읽기

  • /home/USERNAME/.aws/credentials

  • C:\Users\USERNAME\.aws\credentials

  • 제3자 침해

  • 내부 직원

  • Cognito 자격 증명

또는 인증되지 않은 서비스를 침해하여:

AWS - Unauthenticated Enum & Access

또는 검토를 수행하는 경우 이러한 역할로 자격 증명을 요청할 수 있습니다:

AWS - Permissions for a Pentest

자격 증명을 얻은 후에는 그 자격 증명이 누구에게 속하는지그들이 무엇에 접근할 수 있는지 알아야 하므로 기본적인 열거 작업을 수행해야 합니다:

Basic Enumeration

SSRF

AWS 내부의 머신에서 SSRF를 발견한 경우 이 페이지에서 트릭을 확인하세요:

Whoami

가장 먼저 알아야 할 것 중 하나는 당신이 누구인지(어떤 계정에 있는지 및 AWS 환경에 대한 기타 정보)입니다:

# Easiest way, but might be monitored?
aws sts get-caller-identity
aws iam get-user # This will get your own user

# If you have a Key ID
aws sts get-access-key-info --access-key-id=ASIA1234567890123456

# Get inside error message
aws sns publish --topic-arn arn:aws:sns:us-east-1:*account id*:aaa --message aaa

# From metadata
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document

회사가 canary tokens를 사용하여 토큰이 도난당하고 사용될 때 식별할 수 있습니다. 사용하기 전에 토큰이 canary token인지 확인하는 것이 좋습니다. 자세한 정보는 이 페이지를 확인하세요.

조직 열거

AWS - Organizations Enum

IAM 열거

충분한 권한이 있는 경우 AWS 계정 내 각 엔터티의 권한을 확인하는 것은 당신과 다른 아이덴티티가 할 수 있는 일과 권한 상승 방법을 이해하는 데 도움이 됩니다.

IAM을 열거할 충분한 권한이 없는 경우, 무차별 대입 공격을 통해 알아낼 수 있습니다. 열거 및 무차별 대입 공격 방법은 다음에서 확인하세요:

AWS - IAM, Identity Center & SSO Enum

이제 자신의 자격 증명에 대한 정보가 있는 경우 (그리고 레드 팀이라면 발견되지 않았기를 바랍니다). 환경에서 사용 중인 서비스가 무엇인지 파악할 시간입니다. 다음 섹션에서는 일반 서비스 열거 방법을 확인할 수 있습니다.

서비스 열거, 사후 활용 및 지속성

AWS는 놀라운 양의 서비스를 제공합니다. 다음 페이지에서는 기본 정보, 열거 치트 시트**,** 탐지를 피하는 방법, 지속성 확보 및 일부 서비스에 대한 사후 활용 트릭을 찾을 수 있습니다:

AWS - Services

모든 작업을 수동으로 수행할 필요는 없으며, 이 게시물 아래에서 자동 도구에 대한 섹션을 찾을 수 있습니다.

또한 이 단계에서 인증되지 않은 사용자에게 노출된 더 많은 서비스를 발견했을 수 있으며, 이를 악용할 수 있습니다:

AWS - Unauthenticated Enum & Access

권한 상승

다양한 리소스에 대한 자신의 권한을 확인할 수 있다면 추가 권한을 얻을 수 있는지 확인할 수 있습니다. 최소한 다음에 명시된 권한에 집중해야 합니다:

AWS - Privilege Escalation

공개적으로 노출된 서비스

AWS 서비스를 열거하는 동안 일부 서비스가 인터넷에 요소를 노출하고 있는 것을 발견했을 수 있습니다 (VM/컨테이너 포트, 데이터베이스 또는 큐 서비스, 스냅샷 또는 버킷...). 펜테스터/레드 팀원으로서 민감한 정보/취약점을 찾을 수 있는지 항상 확인해야 하며, 이는 AWS 계정에 대한 추가 접근을 제공할 수 있습니다.

이 책에서는 노출된 AWS 서비스 찾기 및 확인 방법에 대한 정보를 찾을 수 있습니다. 노출된 네트워크 서비스의 취약점 찾기에 대해서는 특정 서비스를 다음에서 검색하는 것을 추천합니다:

조직 타격

루트/관리 계정에서

관리 계정이 조직 내에서 새 계정을 생성할 때, 새 역할이 새 계정에 생성되며, 기본적으로 **OrganizationAccountAccessRole**이라는 이름이 붙고 관리 계정에 새 계정에 접근할 수 있는 AdministratorAccess 정책이 부여됩니다.

따라서 자식 계정에 관리자 권한으로 접근하려면 다음이 필요합니다:

  • 관리 계정을 타격하고 자식 계정의 ID역할의 이름(기본적으로 OrganizationAccountAccessRole)을 찾아 관리 계정이 관리자 권한으로 접근할 수 있도록 합니다.

  • 자식 계정을 찾으려면 AWS 콘솔의 조직 섹션으로 이동하거나 aws organizations list-accounts를 실행합니다.

  • 역할의 이름을 직접 찾을 수 없으므로 모든 사용자 정의 IAM 정책을 확인하고 이전에 발견된 자식 계정에 대한 sts:AssumeRole을 허용하는 정책을 검색합니다.

  • 관리 계정의 주체를 타격하고 자식 계정의 역할에 대한 sts:AssumeRole 권한을 확보합니다 (계정이 관리 계정의 누구나 가장할 수 있도록 허용하더라도, 외부 계정이므로 특정 sts:AssumeRole 권한이 필요합니다).

자동화 도구

정찰

  • aws-recon: Ruby로 작성된 다중 스레드 AWS 보안 중심 인벤토리 수집 도구.

# Install
gem install aws_recon

# Recon and get json
AWS_PROFILE=<profile> aws_recon \
--services S3,EC2 \
--regions global,us-east-1,us-east-2 \
--verbose
  • cloudlist: Cloudlist는 클라우드 제공업체로부터 자산(호스트 이름, IP 주소)을 가져오는 다중 클라우드 도구입니다.

  • cloudmapper: CloudMapper는 Amazon Web Services (AWS) 환경을 분석하는 데 도움을 줍니다. 이제 보안 문제에 대한 감사 기능을 포함하여 훨씬 더 많은 기능을 포함하고 있습니다.

# Installation steps in github
# Create a config.json file with the aws info, like:
{
"accounts": [
{
"default": true,
"id": "<account id>",
"name": "dev"
}
],
"cidrs":
{
"2.2.2.2/28": {"name": "NY Office"}
}
}

# Enumerate
python3 cloudmapper.py collect --profile dev
## Number of resources discovered
python3 cloudmapper.py stats --accounts dev

# Create HTML report
## In the report you will find all the info already
python3 cloudmapper.py report --accounts dev

# Identify potential issues
python3 cloudmapper.py audit --accounts dev --json > audit.json
python3 cloudmapper.py audit --accounts dev --markdow > audit.md
python3 cloudmapper.py iam_report --accounts dev

# Identify admins
## The permissions search for are in https://github.com/duo-labs/cloudmapper/blob/4df9fd7303e0337ff16a08f5e58f1d46047c4a87/shared/iam_audit.py#L163-L175
python3 cloudmapper.py find_admins --accounts dev

# Identify unused elements
python3 cloudmapper.py find_unused --accounts dev

# Identify publivly exposed resources
python3 cloudmapper.py public --accounts dev

python cloudmapper.py prepare #Prepare webserver
python cloudmapper.py webserver #Show webserver
  • cartography: Cartography는 Neo4j 데이터베이스로 구동되는 직관적인 그래프 뷰에서 인프라 자산과 그들 간의 관계를 통합하는 Python 도구입니다.

# Install
pip install cartography
## At the time of this writting you need neo4j version 3.5.*

# Get AWS info
AWS_PROFILE=dev cartography --neo4j-uri bolt://127.0.0.1:7687 --neo4j-password-prompt  --neo4j-user neo4j
  • starbase: Starbase는 클라우드 인프라, SaaS 애플리케이션, 보안 제어 등을 포함한 서비스와 시스템에서 자산과 관계를 수집하여 Neo4j 데이터베이스에 기반한 직관적인 그래프 뷰로 제공합니다.

  • aws-inventory: (python2 사용) 이 도구는 계정에 생성된 모든 AWS 리소스발견하려고 합니다.

  • aws_public_ips: AWS 계정과 연결된 모든 공용 IP 주소(IPv4/IPv6 모두)를 가져오는 도구입니다.

Privesc & Exploiting

# Install
## Feel free to use venvs
pip3 install pacu

# Use pacu CLI
pacu
> import_keys <profile_name> # import 1 profile from .aws/credentials
> import_keys --all # import all profiles
> list # list modules
> exec iam__enum_permissions # Get permissions
> exec iam__privesc_scan # List privileged permissions
  • PMapper: Principal Mapper (PMapper)는 AWS 계정 또는 AWS 조직의 AWS Identity and Access Management (IAM) 구성에서 위험을 식별하기 위한 스크립트 및 라이브러리입니다. 이는 계정 내의 다양한 IAM 사용자 및 역할을 방향 그래프로 모델링하여 privilege escalation에 대한 검사와 공격자가 AWS에서 리소스나 작업에 접근하기 위해 취할 수 있는 대체 경로를 확인할 수 있게 합니다. privesc 경로를 찾기 위해 사용되는 permissionshttps://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing에서 _edges.py로 끝나는 파일명에서 확인할 수 있습니다.

# Install
pip install principalmapper

# Get data
pmapper --profile dev graph create
pmapper --profile dev graph display # Show basic info
# Generate graph
pmapper --profile dev visualize # Generate svg graph file (can also be png, dot and graphml)
pmapper --profile dev visualize --only-privesc # Only privesc permissions

# Generate analysis
pmapper --profile dev analysis
## Run queries
pmapper --profile dev query 'who can do iam:CreateUser'
pmapper --profile dev query 'preset privesc *' # Get privescs with admins

# Get organization hierarchy data
pmapper --profile dev orgs create
pmapper --profile dev orgs display
  • cloudsplaining: Cloudsplaining은 최소 권한 위반을 식별하고 위험 우선 순위가 매겨진 HTML 보고서를 생성하는 AWS IAM 보안 평가 도구입니다. 잠재적으로 과도한 권한을 가진 고객, 인라인 및 aws 정책과 어떤 주체가 이에 접근할 수 있는지 보여줍니다. (권한 상승을 확인할 뿐만 아니라 다른 흥미로운 권한도 확인하므로 사용을 권장합니다).

# Install
pip install cloudsplaining

# Download IAM policies to check
## Only the ones attached with the versions used
cloudsplaining download --profile dev

# Analyze the IAM policies
cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/
  • cloudjack: CloudJack는 분리된 Route53 및 CloudFront 구성으로 인해 발생하는 서브도메인 하이재킹 취약점에 대해 AWS 계정을 평가합니다.

  • ccat: ECR 리포지토리 목록 -> ECR 리포지토리 가져오기 -> 백도어 추가 -> 백도어가 추가된 이미지 푸시

  • Dufflebag: Dufflebag는 비공식적으로 남겨졌을 수 있는 비밀을 찾기 위해 공개 Elastic Block Storage (EBS) 스냅샷을 검색하는 도구입니다.

감사

  • cloudsploit: Aqua의 CloudSploit는 Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) 및 GitHub를 포함한 클라우드 인프라 계정의 보안 위험을 감지할 수 있도록 설계된 오픈 소스 프로젝트입니다 (ShadowAdmins를 찾지 않습니다).

./index.js --csv=file.csv --console=table --config ./config.js

# Compiance options: --compliance {hipaa,cis,cis1,cis2,pci}
## use "cis" for cis level 1 and 2
  • Prowler: Prowler는 AWS 보안 모범 사례 평가, 감사, 사고 대응, 지속적인 모니터링, 강화 및 포렌식 준비를 수행하기 위한 오픈 소스 보안 도구입니다.

# Install python3, jq and git
# Install
pip install prowler
prowler -v

# Run
prowler <provider>
prowler aws --profile custom-profile [-M csv json json-asff html]
  • CloudFox: CloudFox는 낯선 클라우드 환경에서 상황 인식을 높이는 데 도움을 줍니다. 이는 클라우드 인프라에서 악용 가능한 공격 경로를 찾는 데 도움을 주기 위해 만들어진 오픈 소스 명령줄 도구로, 침투 테스트 전문가 및 기타 공격 보안 전문가를 위해 설계되었습니다.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite는 클라우드 환경의 보안 태세 평가를 가능하게 하는 오픈 소스 다중 클라우드 보안 감사 도구입니다.

# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help

# Get info
scout aws -p dev
  • cs-suite: 클라우드 보안 스위트 (python2.7 사용, 유지 관리되지 않는 것으로 보임)

  • Zeus: Zeus는 AWS EC2 / S3 / CloudTrail / CloudWatch / KMS의 최상의 하드닝 관행을 위한 강력한 도구입니다 (유지 관리되지 않는 것으로 보임). 시스템 내에서 기본 구성된 자격 증명만 확인합니다.

지속적인 감사

  • cloud-custodian: Cloud Custodian은 공용 클라우드 계정 및 리소스를 관리하기 위한 규칙 엔진입니다. 사용자가 잘 관리된 클라우드 인프라를 활성화하기 위한 정책을 정의할 수 있도록 하며, 이는 안전하고 비용 최적화되어 있습니다. 이는 조직이 보유한 많은 임시 스크립트를 경량화되고 유연한 도구로 통합하며, 통합된 메트릭 및 보고서를 제공합니다.

  • pacbot**: 코드로서의 정책 봇 (PacBot)**은 클라우드를 위한 지속적인 준수 모니터링, 준수 보고 및 보안 자동화 플랫폼입니다. PacBot에서는 보안 및 준수 정책이 코드로 구현됩니다. PacBot에 의해 발견된 모든 리소스는 이러한 정책에 대해 평가되어 정책 준수 여부를 판단합니다. PacBot 자동 수정 프레임워크는 미리 정의된 조치를 취하여 정책 위반에 자동으로 대응할 수 있는 기능을 제공합니다.

  • streamalert: StreamAlert는 서버리스 실시간 데이터 분석 프레임워크로, 사용자가 정의한 데이터 소스와 경고 논리를 사용하여 데이터를 수집, 분석 및 경고할 수 있도록 합니다. 컴퓨터 보안 팀은 StreamAlert를 사용하여 매일 테라바이트의 로그 데이터를 스캔하여 사건 탐지 및 대응을 수행합니다.

DEBUG: AWS cli 요청 캡처

# Set proxy
export HTTP_PROXY=http://localhost:8080
export HTTPS_PROXY=http://localhost:8080

# Capture with burp nor verifying ssl
aws --no-verify-ssl ...

# Dowload brup cert and transform it to pem
curl http://127.0.0.1:8080/cert --output Downloads/certificate.cer
openssl x509 -inform der -in Downloads/certificate.cer -out Downloads/certificate.pem

# Indicate the ca cert to trust
export AWS_CA_BUNDLE=~/Downloads/certificate.pem

# Run aws cli normally trusting burp cert
aws ...

References

HackTricks 지원하기

Last updated