AWS Pentesting

Support HackTricks

Basic Information

Перед початком pentesting середовища AWS є кілька основних речей, які вам потрібно знати про те, як працює AWS, щоб допомогти вам зрозуміти, що потрібно робити, як знаходити неправильні налаштування та як їх експлуатувати.

Концепції, такі як ієрархія організації, IAM та інші базові концепції, пояснюються в:

Labs to learn

Tools to simulate attacks:

AWS Pentester/Red Team Methodology

Щоб провести аудит середовища AWS, дуже важливо знати: які послуги використовуються, що експонується, хто має доступ до чого, і як внутрішні AWS послуги та зовнішні послуги з'єднані.

З точки зору Red Team, перший крок для компрометації середовища AWS - це отримати деякі облікові дані. Ось кілька ідей, як це зробити:

  • Leaks в github (або подібних) - OSINT

  • Соціальна інженерія

  • Повторне використання паролів (витоки паролів)

  • Вразливості в AWS-Hosted Applications

  • Server Side Request Forgery з доступом до метаданих

  • Читання локальних файлів

  • /home/USERNAME/.aws/credentials

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

  • 3rd parties зламані

  • Внутрішній працівник

  • Cognito облікові дані

Або шляхом компрометації неавторизованої служби, що експонується:

Або, якщо ви робите огляд, ви можете просто попросити облікові дані з цими ролями:

Після того, як ви змогли отримати облікові дані, вам потрібно знати, кому належать ці облікові дані, і до чого вони мають доступ, тому вам потрібно виконати деяку базову енумерацію:

Basic Enumeration

SSRF

Якщо ви знайшли SSRF на машині всередині AWS, перевірте цю сторінку для трюків:

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, перш ніж його використовувати. Для отримання додаткової інформації перевірте цю сторінку.

Перерахування організацій

Перерахування IAM

Якщо у вас достатньо прав, перевірка привілеїв кожної сутності всередині облікового запису AWS допоможе вам зрозуміти, що ви та інші ідентичності можете робити і як підвищити привілеї.

Якщо у вас недостатньо прав для перерахування IAM, ви можете викрасти їх за допомогою брутфорсу, щоб їх з'ясувати. Перевірте як виконати перерахування та брутфорс у:

Тепер, коли ви маєте деяку інформацію про свої облікові дані (і якщо ви червона команда, сподіваюся, ви не були виявлені). Час з'ясувати, які сервіси використовуються в середовищі. У наступному розділі ви можете перевірити деякі способи перерахування деяких загальних сервісів.

Перерахування сервісів, пост-експлуатація та стійкість

AWS має вражаючу кількість сервісів, на наступній сторінці ви знайдете основну інформацію, перерахування шпаргалок**,** як уникнути виявлення, отримати стійкість та інші пост-експлуатаційні трюки про деякі з них:

Зверніть увагу, що вам не потрібно виконувати всю роботу вручну, нижче в цьому пості ви можете знайти розділ про автоматизовані інструменти.

Більше того, на цьому етапі ви могли виявити більше сервісів, доступних для неавтентифікованих користувачів, ви можете мати можливість їх експлуатувати:

Підвищення привілеїв

Якщо ви можете перевірити принаймні свої власні привілеї над різними ресурсами, ви могли б перевірити, чи можете ви отримати додаткові привілеї. Вам слід зосередитися принаймні на привілеях, зазначених у:

Публічно доступні сервіси

Під час перерахування сервісів AWS ви могли знайти деякі з них, які відкривають елементи в Інтернеті (порти VM/контейнерів, бази даних або сервіси черг, знімки або кошики...). Як пентестер/червона команда, ви завжди повинні перевіряти, чи можете ви знайти чутливу інформацію / вразливості на них, оскільки вони можуть надати вам додатковий доступ до облікового запису AWS.

У цій книзі ви повинні знайти інформацію про те, як знайти відкриті сервіси AWS та як їх перевірити. Щодо того, як знайти вразливості у відкритих мережевих сервісах, я б рекомендував вам шукати конкретний сервіс у:

Компрометація організації

З облікового запису root/управління

Коли обліковий запис управління створює нові облікові записи в організації, у новому обліковому записі створюється нова роль, за замовчуванням називана OrganizationAccountAccessRole, і надається політика AdministratorAccess для облікового запису управління для доступу до нового облікового запису.

Отже, для доступу як адміністратора до дочірнього облікового запису вам потрібно:

  • Компрометувати управлінський обліковий запис і знайти ID дочірніх облікових записів та імена ролі (за замовчуванням OrganizationAccountAccessRole), що дозволяє обліковому запису управління отримати доступ як адміністратор.

  • Щоб знайти дочірні облікові записи, перейдіть до розділу організацій у консолі aws або виконайте aws organizations list-accounts

  • Ви не можете знайти назви ролей безпосередньо, тому перевірте всі користувацькі політики IAM і шукайте будь-які, що дозволяють sts:AssumeRole над раніше виявленими дочірніми обліковими записами.

  • Компрометувати принципала в обліковому записі управління з дозволом sts:AssumeRole над роллю в дочірніх облікових записах (навіть якщо обліковий запис дозволяє будь-кому з облікового запису управління видавати себе, оскільки це зовнішній обліковий запис, специфічні дозволи sts:AssumeRole є необхідними).

Автоматизовані інструменти

Рекон

  • aws-recon: Багатопотоковий інструмент для збору інвентаризації, орієнтований на безпеку AWS, написаний на Ruby.

# 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 - це інструмент на Python, який консолідує інфраструктурні активи та відносини між ними в інтуїтивно зрозумілому графічному вигляді, що працює на базі бази даних Neo4j.

# 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: Це інструмент для отримання всіх публічних IP-адрес (як IPv4, так і IPv6), пов'язаних з обліковим записом AWS.

Privesc & Exploiting

  • SkyArk: Виявляє найбільш привілейованих користувачів у сканованому середовищі AWS, включаючи AWS Shadow Admins. Він використовує powershell. Ви можете знайти визначення привілейованих політик у функції Check-PrivilegedPolicy в https://github.com/cyberark/SkyArk/blob/master/AWStealth/AWStealth.ps1.

  • pacu: Pacu - це відкритий фреймворк експлуатації AWS, призначений для тестування безпеки в наступальних цілях проти хмарних середовищ. Він може перераховувати, знаходити неправильні конфігурації та експлуатувати їх. Ви можете знайти визначення привілейованих дозволів в https://github.com/RhinoSecurityLabs/pacu/blob/866376cd711666c775bbfcde0524c817f2c5b181/pacu/modules/iam__privesc_scan/main.py#L134 всередині словника user_escalation_methods.

  • Зверніть увагу, що pacu перевіряє лише ваші власні шляхи підвищення привілеїв (не в межах облікового запису).

# 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 Identity and Access Management (IAM) для облікового запису AWS або організації AWS. Він моделює різних IAM користувачів і ролей в обліковому записі як орієнтований граф, що дозволяє перевіряти підвищення привілеїв та альтернативні шляхи, якими зловмисник може отримати доступ до ресурсу або дії в AWS. Ви можете перевірити дозволи, використані для знаходження privesc шляхів у файлах, що закінчуються на _edges.py в https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing

# 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, який виявляє порушення принципу найменших привілеїв і генерує звіт у форматі HTML з пріоритетом ризику. Він покаже вам потенційно переповнені привілеї клієнта, вбудовані та aws політики та які принципи мають доступ до них. (Він не тільки перевіряє на privesc, але й інші види цікавих дозволів, рекомендовано використовувати).

# 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 на наявність вразливостей перехоплення піддоменів внаслідок розділених конфігурацій Route53 та CloudFront.

  • ccat: Список репозиторіїв ECR -> Витягти репозиторій ECR -> Задній доступ -> Відправити зображення з заднім доступом

  • Dufflebag: Dufflebag - це інструмент, який шукає через публічні знімки Elastic Block Storage (EBS) на наявність секретів, які могли бути випадково залишені.

Аудит

  • cloudsploit: CloudSploit від Aqua - це проект з відкритим кодом, призначений для виявлення ризиків безпеки в облікових записах хмарної інфраструктури, включаючи: 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: Cloud Security Suite (використовує python2.7 і виглядає непідтримуваним)

  • Zeus: Zeus - потужний інструмент для найкращих практик зміцнення AWS EC2 / S3 / CloudTrail / CloudWatch / KMS (виглядає непідтримуваним). Він перевіряє лише стандартно налаштовані облікові дані в системі.

Постійний аудит

  • cloud-custodian: Cloud Custodian - це механізм правил для управління обліковими записами та ресурсами публічного хмари. Він дозволяє користувачам визначати політики для забезпечення добре керованої хмарної інфраструктури, яка є як безпечною, так і оптимізованою за витратами. Він консолідує багато з тих випадкових скриптів, які мають організації, в легкий і гнучкий інструмент з єдиними метриками та звітністю.

  • pacbot: Policy as Code Bot (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 ...

Посилання

Підтримайте HackTricks

Last updated