AWS Pentesting

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Основна інформація

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

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

pageAWS - Basic Information

Лабораторії для вивчення

Інструменти для симуляції атак:

Методологія пентестера/червоної команди AWS

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

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

  • Витоки в github (або подібне) - OSINT

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

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

  • Вразливості в застосунках, розміщених в AWS

  • Підроблення запиту на бік сервера з доступом до кінцевої точки метаданих

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

  • /home/USERNAME/.aws/credentials

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

  • 3-ті сторони вкрали

  • Внутрішній співробітник

  • Cognito підтвердження

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

pageAWS - Unauthenticated Enum & Access

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

pageAWS - Permissions for a Pentest

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

Базова Енумерація

SSRF

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

Хто я

Одне з перших речей, які вам потрібно знати, - це хто ви (в якому обліковому записі ви знаходитесь та інша інформація про середовище 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

Зверніть увагу, що компанії можуть використовувати канарські токени для виявлення, коли токени були вкрадені та використані. Рекомендується перевірити, чи є токен канарським, перш ніж використовувати його. Для отримання додаткової інформації перегляньте цю сторінку.

Перелік організацій

pageAWS - Organizations Enum

Перелік IAM

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

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

pageAWS - IAM Enum

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

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

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

pageAWS - Services

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

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

pageAWS - Unauthenticated Enum & Access

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

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

pageAWS - Privilege Escalation

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

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

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

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

Від кореневого/управлінського облікового запису

Коли управлінський обліковий запис створює нові облікові записи в організації, в новому обліковому записі створюється нова роль, за замовчуванням названа 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
  • картографія: Картографія - це інструмент на 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.

Підвищення привілеїв та експлуатація

  • SkyArk: Виявлення найбільш привілейованих користувачів у сканованому середовищі AWS, включаючи адміністраторів AWS Shadow. Використовує 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. Ви можете перевірити дозволи, використані для пошуку шляхів привілеїв у файлах, які закінчуються на _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 політики та ті суб'єкти, які мають до них доступ. (Він не лише перевіряє підвищення привілеїв, але й інші цікаві дозволи, рекомендується використовувати).

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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated