Files
hacktricks-cloud/src/pentesting-cloud/aws-security

AWS Pentesting

{{#include ../../banners/hacktricks-training.md}}

Temel Bilgiler

AWS ortamında pentesting yapmaya başlamadan önce, AWS'nin nasıl çalıştığı hakkında bilmeniz gereken birkaç temel şey vardır. Bu, ne yapmanız gerektiğini, yanlış yapılandırmaları nasıl bulacağınızı ve bunları nasıl istismar edeceğinizi anlamanıza yardımcı olacaktır.

Organizasyon hiyerarşisi, IAM ve diğer temel kavramlar hakkında bilgiler:

{{#ref}} aws-basic-information/ {{#endref}}

Öğrenme Laboratuvarları

Saldırı simülasyonu için araçlar:

AWS Pentester/Kırmızı Takım Metodolojisi

AWS ortamını denetlemek için bilmeniz gereken çok önemli noktalar: hangi hizmetlerin kullanıldığı, neyin ık olduğu, kimin neye erişimi olduğu ve iç AWS hizmetlerinin harici hizmetlerle nasıl bağlantılı olduğudur.

Kırmızı takım açısından, bir AWS ortamını ele geçirmenin ilk adımı bazı kimlik bilgilerini elde etmektir. Bunu nasıl yapacağınıza dair bazı fikirler:

  • Github'daki sızıntılar (veya benzeri) - OSINT
  • Sosyal Mühendislik
  • Şifre tekrar kullanımı (şifre sızıntıları)
  • AWS-Hosted Uygulamalardaki Güvenlik Açıkları
  • Sunucu Tarafı İstek Sahteciliği ile metadata uç noktasına erişim
  • Yerel Dosya Okuma
  • /home/USERNAME/.aws/credentials
  • C:\Users\USERNAME\.aws\credentials
    1. tarafların ihlal edilmesi
  • İç Çalışan
  • Cognito kimlik bilgileri

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

{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}

Ya da bir gözden geçirme yapıyorsanız, bu rollerle kimlik bilgilerini isteyebilirsiniz:

{{#ref}} aws-permissions-for-a-pentest.md {{#endref}}

Note

Kimlik bilgilerini elde ettikten sonra, bu kimlik bilgilerin kime ait olduğunu ve neye erişim sağladıklarını bilmeniz gerekir, bu nedenle bazı temel sayım işlemleri yapmalısınız:

Temel Sayım

SSRF

AWS içindeki bir makinede bir SSRF bulduysanız, bu sayfayı kontrol edin:

{{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}}

Whoami

Bilmeniz gereken ilk şeylerden biri, kim olduğunuzdur (hangi hesapta olduğunuz ve 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

Caution

Şirketlerin tokenlerin çalındığını ve kullanıldığını belirlemek için canary tokenleri kullanabileceğini unutmayın. Kullanımdan önce bir tokenin canary token olup olmadığını kontrol etmeniz önerilir.
Daha fazla bilgi için bu sayfayı kontrol edin.

Org Enumeration

{{#ref}} aws-services/aws-organizations-enum.md {{#endref}}

IAM Enumeration

Yeterli izinleriniz varsa, AWS hesabındaki her varlığın ayrıcalıklarını kontrol etmek ne yapabileceğinizi ve diğer kimliklerin ne yapabileceğini anlamanıza yardımcı olacaktır ve ayrıcalıkları artırma yollarını öğrenmenizi sağlar.

IAM'yi listelemek için yeterli izniniz yoksa, bunları bruteforce ile çalabilirsiniz.
Listeleme ve brute-forcing nasıl yapılır kontrol edin:

{{#ref}} aws-services/aws-iam-enum.md {{#endref}}

Note

Artık kimlik bilgileriniz hakkında bazı bilgilere sahipsiniz (ve eğer bir kırmızı takım iseniz umarım tespit edilmemişsinizdir). Hangi hizmetlerin ortamda kullanıldığını belirleme zamanı.
Aşağıdaki bölümde bazı yaygın hizmetleri listeleme yollarını kontrol edebilirsiniz.

Services Enumeration, Post-Exploitation & Persistence

AWS, şaşırtıcı bir hizmet miktarına sahiptir, aşağıdaki sayfada temel bilgiler, listeleme kılavuzları**,** tespiti önleme, kalıcılık sağlama ve bunlardan bazıları hakkında diğer post-exploitation ipuçlarını bulacaksınız:

{{#ref}} aws-services/ {{#endref}}

Tüm çalışmaları manuel olarak yapmanıza gerek olmadığını unutmayın, bu yazıda otomatik araçlar hakkında bir bölüm bulabilirsiniz.

Ayrıca, bu aşamada kimlik doğrulaması yapılmamış kullanıcılara açık daha fazla hizmet keşfetmiş olabilirsiniz, bunları istismar edebilirsiniz:

{{#ref}} aws-unauthenticated-enum-access/ {{#endref}}

Privilege Escalation

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

{{#ref}} aws-privilege-escalation/ {{#endref}}

Publicly Exposed Services

AWS hizmetlerini listeleme sırasında, bazı hizmetlerin İnternete elemanlar açtığını bulmuş olabilirsiniz (VM/Konteyner portları, veritabanları veya kuyruk hizmetleri, anlık görüntüler veya bucketlar...).
Pentester/kırmızı takım üyesi olarak, bunlarda hassas bilgiler / zafiyetler bulup bulamayacağınızı her zaman kontrol etmelisiniz, çünkü bunlar size AWS hesabına daha fazla erişim sağlayabilir.

Bu kitapta ık AWS hizmetlerini bulma ve bunları kontrol etme hakkında bilgi bulmalısınız. ık ağ hizmetlerinde zafiyetler bulma hakkında, belirli hizmeti aramanızı öneririm:

{{#ref}} https://book.hacktricks.xyz/ {{#endref}}

Compromising the Organization

From the root/management account

Yönetim hesabı organizasyonda yeni hesaplar oluşturduğunda, yeni hesapta varsayılan olarak OrganizationAccountAccessRole adı verilen yeni bir rol oluşturulur ve yönetim hesabına yeni hesaba erişim sağlamak için AdministratorAccess politikası verilir.

Bu nedenle, bir çocuk hesaba yönetici olarak erişmek için şunları yapmanız gerekir:

  • Yönetim hesabını ele geçirmek ve çocuk hesapların ID'sini ve rolün isimlerini (varsayılan olarak OrganizationAccountAccessRole) bulmak, yönetim hesabının yönetici olarak erişmesine izin verir.
  • Çocuk hesapları bulmak için AWS konsolundaki 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 nedenle tüm özel IAM politikalarını kontrol edin ve daha önce keşfedilen çocuk hesaplar üzerinde sts:AssumeRole izni veren herhangi birini arayın.
  • Yönetim hesabındaki bir prensibi çocuk hesaplardaki rol üzerinde sts:AssumeRole izni ile ele geçirin (hesap, yönetim hesabından herhangi birinin taklit etmesine izin veriyor olsa bile, dış bir hesap olduğu için belirli sts:AssumeRole izinleri gereklidir).

Automated Tools

Recon

  • aws-recon: Ruby ile yazılmış çok iş parçacıklı 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ılarından Varlıklar (Ana Bilgisayar İsimleri, 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 de dahil olmak üzere çok daha fazla işlevsellik 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, altyapı varlıklarını ve bunlar arasındaki ilişkileri, Neo4j veritabanı tarafından desteklenen sezgisel bir grafik görünümünde 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, bulut altyapısı, SaaS uygulamaları, güvenlik kontrolleri ve daha fazlası dahil olmak üzere hizmetlerden ve sistemlerden varlıkları ve ilişkileri toplayarak Neo4j veritabanı ile desteklenen sezgisel bir grafik görünümüne dönüştürür.
  • 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: Bu, bir AWS hesabıyla ilişkili tüm genel IP adreslerini (hem IPv4/IPv6) alma aracı.

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 AWS organizasyonu için AWS Kimlik ve Erişim Yönetimi (IAM) yapılandırmasındaki riskleri belirlemek için bir script ve kütüphanedir. Farklı IAM Kullanıcıları ve Rolleri, bir hesabın yönlendirilmiş grafiği olarak modellenir; bu, yetki yükseltme ve bir saldırganın AWS'de bir kaynağa veya eyleme erişim kazanmak için alabileceği alternatif yollar için kontrolleri mümkün kılar. privesc yollarını bulmak için kullanılan izinleri kontrol edebilirsiniz, dosya adları _edges.py ile biten https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing içinde.
# 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, en az ayrıcalık ihlallerini tespit eden ve risk öncelikli bir HTML raporu oluşturan bir AWS IAM Güvenlik Değerlendirme aracıdır.
    Bu araç, potansiyel olarak ırı ayrıcalıklı müşteri, inline ve aws politikalarını ve hangi prensiplerin bunlara erişimi olduğunu gösterecektir. (Bu sadece privesc için değil, aynı zamanda diğer ilginç izinler için 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, ayrılmış Route53 ve CloudFront yapılandırmaları sonucunda AWS hesaplarındaki alt alan ele geçirme açıklarını değerlendirir.
  • ccat: ECR repo listesini al -> ECR repo çek -> Arka kapı ekle -> Arka kapılı görüntüyü it.
  • Dufflebag: Dufflebag, kamuya açık Elastic Block Storage (EBS) anlık görüntülerinde, kazara bırakılmış olabilecek gizli bilgileri arayan bir araçtır.

Denetim

  • cloudsploit: Aqua tarafından geliştirilen CloudSploit, Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) ve GitHub dahil olmak üzere bulut altyapısındaki güvenlik risklerini tespit etmeye yönelik açık kaynak bir projedir (ShadowAdmins için arama yapmaz).
./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 müdahalesi, sürekli izleme, sertleştirme ve adli analiz hazırlığı yapmak için kullanılan 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, tanıdık olmayan bulut ortamlarında durum farkındalığı kazanmanıza yardımcı olur. Bu, penetrasyon test uzmanları ve diğer saldırgan güvenlik profesyonellerinin bulut altyapısında istismar edilebilir saldırı yollarını bulmalarına yardımcı olmak için oluşturulmuş açık kaynaklı bir komut satırı aracıdır.
cloudfox aws --profile [profile-name] all-checks
  • ScoutSuite: Scout Suite, bulut ortamlarının güvenlik durumu değerlendirmesine olanak tanıyan açık kaynaklı çoklu bulut güvenlik denetim aracıdır.
# Install
virtualenv -p python3 venv
source venv/bin/activate
pip install scoutsuite
scout --help

# Get info
scout aws -p dev
  • cs-suite: Bulut Güvenliği Paketi (python2.7 kullanır ve bakımsız görünüyor)
  • Zeus: Zeus, AWS EC2 / S3 / CloudTrail / CloudWatch / KMS için güçlü bir en iyi sertleştirme uygulamaları aracıdır (bakımsız görünüyor). Sadece sistem içindeki varsayılan yapılandırılmış kimlik bilgilerini kontrol eder.

Sürekli Denetim

  • cloud-custodian: Cloud Custodian, kamu bulut hesaplarını ve kaynaklarını yönetmek için bir kurallar motorudur. Kullanıcılara iyi yönetilen bir bulut altyapısını etkinleştirmek için politikalar tanımlama imkanı verir; bu, hem güvenli hem de maliyet açısından optimize edilmiştir. Birçok kuruluşun el yapımı betiklerini hafif ve esnek bir araca dönüştürerek, birleşik metrikler ve raporlama ile birleştirir.
  • pacbot: Kod Olarak Politika Botu (PacBot), sürekli uyum izleme, uyum raporlama ve bulut için güvenlik otomasyonu platformudur. PacBot'ta, güvenlik ve uyum politikaları kod olarak uygulanır. PacBot tarafından keşfedilen tüm kaynaklar, politika uyumunu değerlendirmek için bu politikalara karşı değerlendirilir. PacBot'un otomatik düzeltme çerçevesi, önceden tanımlanmış eylemleri alarak politika ihlallerine otomatik olarak yanıt verme yeteneği sağlar.
  • streamalert: StreamAlert, herhangi bir ortamdan veri almayı, analiz etmeyi ve uyarı vermeyi sağlayan sunucusuz, gerçek zamanlı bir veri analiz çerçevesidir; veri kaynakları ve uyarı mantığını tanımlayarak kullanırsınız. Bilgisayar güvenliği ekipleri, olay tespiti ve yanıtı için her gün terabaytlarca günlük verisini taramak için StreamAlert'ı kullanır.

DEBUG: AWS cli isteklerini yakala

# 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

{{#include ../../banners/hacktricks-training.md}}