AWS Pentesting

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

AWS ortamını pentest etmeye başlamadan önce, ne yapmanız gerektiğini, yanlış yapılandırmaları nasıl bulacağınızı ve nasıl sömüreceğinizi anlamak için AWS'nin nasıl çalıştığı hakkında birkaç temel bilgiye ihtiyacınız vardır.

Organizasyon hiyerarşisi, IAM ve diğer temel kavramlar gibi kavramlar şu adreste açıklanmıştır:

pageAWS - Basic Information

Öğrenmek için Lablar

Saldırıları simüle etmek için araçlar:

AWS Pentester/Red Team Metodolojisi

Bir AWS ortamını denetlemek için çok önemli olan şeyler: hangi hizmetlerin kullanıldığı, neyin açığa çıkarıldığı, kimin ne tür erişimi olduğu ve iç AWS hizmetlerinin harici hizmetlerle nasıl bağlantılı olduğudur.

Kırmızı Takım bakış açısından, bir AWS ortamını ele geçirmenin ilk adımı bazı kimlik bilgilerini elde etmeyi başarmaktır. İşte bunu nasıl yapabileceğinize dair bazı fikirler:

  • Github (veya benzeri) sızıntıları - OSINT

  • Sosyal Mühendislik

  • Parola yeniden kullanımı (parola sızıntıları)

  • AWS'de barındırılan Uygulamalardaki Zayıflıklar

  • Sunucu Tarafı İstek Sahtekarlığı (SSRF) - meta veri uç noktasına erişimle

  • Yerel Dosya Okuma

  • /home/USERNAME/.aws/credentials

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

    1. tarafların ihlal edilmesi

  • İç Çalışan

  • Cognito kimlik bilgileri

Veya kimlik doğrulaması yapılmamış bir hizmeti ele geçirerek:

pageAWS - Unauthenticated Enum & Access

Veya bir inceleme yapıyorsanız, bu rollerle kimlik bilgilerini isteyebilirsiniz:

pageAWS - Permissions for a Pentest

Kimlik bilgilerini elde etmeyi başardıktan sonra, bu kimlik bilgilerinin kime ait olduğunu ve ne tür erişime sahip olduklarını bilmek için bazı temel numaralandırmalar yapmanız gerekmektedir:

Temel Numaralandırma

SSRF

AWS içindeki bir makinede SSRF bulduysanız, hileler için bu sayfaya bakın:

Kimim

Bilmeniz gereken ilk şeylerden biri kim olduğunuzdur (hangi hesapta olduğunuz, AWS ortamı hakkında diğer bilgiler):

# 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

Şirketler, token'ların çalındığını ve kullanıldığını tespit etmek için canary token'lar kullanabilir. Kullanmadan önce bir token'ın bir canary token olup olmadığını kontrol etmek önerilir. Daha fazla bilgi için bu sayfayı kontrol edin.

Org Enumerasyonu

pageAWS - Organizations Enum

IAM Enumerasyonu

Yeterli izinlere sahipseniz, AWS hesabındaki her bir varlık için ayrıcalıklarını kontrol etmek, sizin ve diğer kimliklerin ne yapabileceğini ve nasıl ayrıcalıkları yükseltebileceğinizi anlamanıza yardımcı olacaktır.

IAM'yi numaralandırmak için yeterli izniniz yoksa, bunları belirlemek için brute force yöntemiyle çalabilirsiniz. Numaralandırma ve brute force yapmanın nasıl yapılacağını kontrol edin:

pageAWS - IAM, Identity Center & SSO Enum

Şimdi kimlik bilgileriniz hakkında bazı bilgilere sahipsiniz (ve eğer bir kırmızı takım iseniz umarım tespit edilmemişsinizdir). Şimdi ortamda hangi hizmetlerin kullanıldığını anlamaya çalışmanın zamanı geldi. Aşağıdaki bölümde, bazı yaygın hizmetleri numaralandırmak için bazı yöntemleri kontrol edebilirsiniz.

Hizmetlerin Numaralandırılması, Saldırı Sonrası ve Kalıcılık

AWS, inanılmaz miktarda hizmete sahiptir, aşağıdaki sayfada bazılarının temel bilgilerini, numaralandırma hilelerini, tespit engelleme yöntemlerini, kalıcılık sağlama yöntemlerini ve diğer saldırı sonrası hileleri bulabilirsiniz:

pageAWS - Services

Elbette tüm çalışmayı manuel olarak yapmanıza gerek yok, bu gönderinin altında otomatik araçlar hakkında bir bölüm bulabilirsiniz.

Ayrıca, bu aşamada kimlik doğrulaması yapılmamış kullanıcılara daha fazla hizmetin açığa çıktığını keşfedebilirsiniz, bunları sömürebilirsiniz:

pageAWS - Unauthenticated Enum & Access

Ayrıcalık Yükseltme

Farklı kaynaklar üzerinde en az kendi izinlerinizi kontrol edebiliyorsanız, daha fazla izin elde edebilip edemeyeceğinizi kontrol edebilirsiniz. En azından aşağıdaki izinlere odaklanmalısınız:

pageAWS - Privilege Escalation

Kamuya Açık Hizmetler

AWS hizmetlerini numaralandırırken, bazılarının İnternet'e öğeleri açığa çıkardığını (VM/Container portları, veritabanları veya kuyruk hizmetleri, anlık görüntüler veya kovalar...) fark etmiş olabilirsiniz. Pentester/kırmızı takım olarak, bunlarda hassas bilgileri/zaafiyetleri bulup bulamayacağınızı her zaman kontrol etmelisiniz, çünkü bunlar size AWS hesabına daha fazla erişim sağlayabilir.

Bu kitapta, açığa çıkarılmış AWS hizmetlerini nasıl bulacağınızı ve kontrol edeceğinizi bulacaksınız. Açığa çıkarılmış ağ hizmetlerinde zaafiyetleri nasıl bulacağınız hakkında bilgi için, özel hizmeti aramak için aşağıdaki siteyi aramanızı öneririm:

Kuruluşu Ele Geçirme

Kök/Yönetim hesabından

Yönetim hesabı, kuruluşta yeni hesaplar oluşturduğunda, yeni bir rol oluşturur, varsayılan olarak OrganizationAccountAccessRole adını alır ve yönetim hesabının yeni hesaba erişim için AdministratorAccess politikasını verir.

Bu nedenle, bir alt hesaba yönetici olarak erişmek için şunlara ihtiyacınız vardır:

  • Yönetim hesabını ele geçirin ve çocuk hesapların kimliklerini ve yönetim hesabının yönetici olarak erişmesine izin veren rolün adlarını (varsayılan olarak OrganizationAccountAccessRole) bulun.

  • Çocuk hesaplarını bulmak için aws konsolunda organizasyonlar bölümüne gidin veya aws organizations list-accounts komutunu çalıştırın.

  • Rollerin adını doğrudan bulamazsınız, bu yüzden tüm özel IAM politikalarını kontrol edin ve önceden keşfedilen çocuk hesapları üzerinde sts:AssumeRole izni veren herhangi bir politikayı arayın.

  • Yönetim hesabındaki bir temsilciyi ele geçirin ve çocuk hesaplardaki role sts:AssumeRole izni verin (hesap yönetim hesabından herkese kimlik taklit etmeye izin veriyor olsa bile, harici bir hesap olduğu için belirli sts:AssumeRole izinleri gereklidir).

Otomatik Araçlar

Keşif

  • aws-recon: Ruby ile yazılmış çoklu iş parçacıklı bir AWS güvenlik odaklı envanter toplama aracı.

# 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, Bulut Sağlayıcılardan Varlıkları (Ana Bilgisayar Adları, IP Adresleri) almak için çoklu bulut aracıdır.

  • cloudmapper: CloudMapper, Amazon Web Services (AWS) ortamlarınızı analiz etmenize yardımcı olur. Artık güvenlik sorunları için denetim gibi çok daha fazla işlev içermektedir.

# 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, bir Neo4j veritabanı tarafından desteklenen sezgisel bir graf görünümünde altyapı varlıklarını ve aralarındaki ilişkileri birleştiren bir Python aracıdır.

# 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, Neo4j veritabanı tarafından desteklenen sezgisel bir grafik görünümüne sahip olacak şekilde bulut altyapısı, SaaS uygulamaları, güvenlik kontrolleri ve daha fazlasından varlıkları ve ilişkileri toplar.

  • aws-inventory: (Python2 kullanır) Bu, bir hesapta oluşturulan tüm AWS kaynaklarını keşfetmeye çalışan bir araçtır.

  • aws_public_ips: AWS hesabıyla ilişkilendirilmiş tüm genel IP adreslerini (IPv4/IPv6) almak için bir araçtır.

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), bir AWS hesabı veya bir AWS organizasyonunun AWS Kimlik ve Erişim Yönetimi (IAM) yapılandırmasındaki riskleri belirlemek için bir betik ve kütüphanedir. Farklı IAM Kullanıcılarını ve Rolleri bir hesapta yönlendirilmiş bir graf olarak modeller ve bu, AWS'de bir kaynağa veya eyleme erişmek için bir saldırganın izleyebileceği alternatif yolları ve ayrıcalık yükseltme kontrollerini sağlar. https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing adresinde _edges.py ile biten dosya adlarında bulunan izinleri kontrol edebilirsiniz.

# 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, AWS IAM Güvenlik Değerlendirme aracıdır ve en az ayrıcalığın ihlallerini belirler ve risk öncelikli bir HTML raporu oluşturur. Potansiyel olarak aşırı ayrıcalıklı müşteriyi, satır içi ve aws politikalarını ve onlara erişimi olan prensipleri gösterecektir. (Sadece ayrıcalık yükseltme kontrolü yapmaz, aynı zamanda diğer ilginç izinleri de kontrol eder, kullanılması önerilir).

# 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, AWS hesaplarını, ayrılmış Route53 ve CloudFront yapılandırmalarının bir sonucu olarak alt alan adı ele geçirme açıklıkları için değerlendirir.

  • ccat: ECR depolarını listele -> ECR deposunu çek -> Arkasına zararlı yazılım yerleştir -> Zararlı yazılımı geri yükle

  • Dufflebag: Dufflebag, yanlışlıkla bırakılmış olabilecek genel Elastic Block Storage (EBS) anlık görüntülerindeki gizli bilgileri arar.

Denetim

  • cloudsploit: Aqua tarafından geliştirilen CloudSploit, Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) ve GitHub gibi bulut altyapı hesaplarında güvenlik risklerinin tespitine izin vermek için tasarlanmış açık kaynaklı bir projedir (ShadowAdmin'leri aramaz).

./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 güvenlik en iyi uygulamaları değerlendirmeleri, denetimler, olay yanıtı, sürekli izleme, sıkılaştırma ve adli hazırlık yapmak için bir Açık Kaynak güvenlik aracıdır.

# 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, sizi tanıdık olmayan bulut ortamlarında durumsal farkındalık kazanmanıza yardımcı olur. Bulut altyapısında sömürülebilir saldırı yollarını bulmak için oluşturulmuş açık kaynaklı bir komut satırı aracıdır. Bu araç, sızma testçileri ve diğer saldırgan güvenlik profesyonellerine yardımcı olmak için tasarlanmıştır.

cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite, açık kaynaklı bir çoklu bulut güvenlik denetimi aracıdır ve bulut ortamlarının güvenlik durumunu değerlendirmeyi sağlar.

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

# Get info
scout aws -p dev
  • cs-suite: Cloud Security Suite (python2.7 kullanır ve bakımsız görünüyor)

  • Zeus: Zeus, AWS EC2 / S3 / CloudTrail / CloudWatch / KMS için en iyi sertleştirme uygulamaları için güçlü bir araçtır (bakımsız görünüyor). Sadece sistem içinde varsayılan olarak yapılandırılmış kimlik bilgilerini kontrol eder.

Sürekli Denetim

  • cloud-custodian: Cloud Custodian, genel bulut hesaplarını ve kaynaklarını yönetmek için bir kurallar motorudur. Kullanıcılara, hem güvenli hem de maliyet optimize edilmiş bir bulut altyapısı sağlamak için politikaları tanımlama imkanı sunar. Cloud Custodian, organizasyonların birçok ad hoc komut dosyasını hafif ve esnek bir araçta birleştirir ve birleşik metrikler ve raporlama sağlar.

  • pacbot: Policy as Code Bot (PacBot), sürekli uyumluluk izleme, uyumluluk raporlama ve bulut için güvenlik otomasyonu için bir platformdur. PacBot'ta, güvenlik ve uyumluluk politikaları kod olarak uygulanır. PacBot tarafından keşfedilen tüm kaynaklar, bu politikalara uygunluğu değerlendirmek için değerlendirilir. PacBot'un otomatik düzeltme çerçevesi, önceden tanımlanmış eylemlerle politika ihlallerine otomatik olarak yanıt verme yeteneği sağlar.

  • streamalert: StreamAlert, gerçek zamanlı veri analizi çerçevesidir ve tanımladığınız veri kaynakları ve uyarı mantığı kullanarak herhangi bir ortamdan veri almanıza, analiz etmenize ve uyarı almanıza olanak tanır. Bilgisayar güvenlik ekipleri, olay tespiti ve yanıtı için her gün terabaytlarca günlük veriyi tarayabilmek için StreamAlert'i kullanır.

DEBUG: AWS cli isteklerini yakalama

# 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 ...

Referanslar

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'i desteklemenin diğer yolları:

Last updated