hacktricks/macos-hardening/macos-red-teaming
2024-09-04 13:38:57 +00:00
..
macos-mdm Translated ['crypto-and-stego/cryptographic-algorithms/unpacking-binarie 2024-07-19 04:58:21 +00:00
macos-keychain.md Translated ['README.md', 'crypto-and-stego/hash-length-extension-attack. 2024-09-04 13:38:57 +00:00
README.md Translated ['macos-hardening/macos-red-teaming/README.md', 'macos-harden 2024-08-21 15:06:36 +00:00

macOS Red Teaming

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Зловживання MDM

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

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

Для червоного тестування в середовищах MacOS настійно рекомендується мати певне розуміння того, як працюють MDM:

{% content-ref url="macos-mdm/" %} macos-mdm {% endcontent-ref %}

Використання MDM як C2

MDM матиме дозвіл на установку, запит або видалення профілів, установку додатків, створення локальних облікових записів адміністратора, встановлення пароля прошивки, зміну ключа FileVault...

Щоб запустити свій власний MDM, вам потрібно підписати свій CSR у постачальника, що ви можете спробувати отримати за допомогою https://mdmcert.download/. А для запуску свого власного MDM для пристроїв Apple ви можете використовувати MicroMDM.

Однак, щоб встановити додаток на зареєстрованому пристрої, вам все ще потрібно, щоб він був підписаний обліковим записом розробника... однак, під час реєстрації MDM пристрій додає SSL сертифікат MDM як довірений CA, тому тепер ви можете підписувати що завгодно.

Щоб зареєструвати пристрій в MDM, вам потрібно встановити mobileconfig файл як root, який можна доставити через pkg файл (ви можете стиснути його в zip, і коли його завантажать з safari, він буде розпакований).

Mythic agent Orthrus використовує цю техніку.

Зловживання JAMF PRO

JAMF може виконувати кастомні скрипти (скрипти, розроблені системним адміністратором), рідні корисні навантаження (створення локальних облікових записів, встановлення пароля EFI, моніторинг файлів/процесів...) та MDM (конфігурації пристроїв, сертифікати пристроїв...).

Самостійна реєстрація JAMF

Перейдіть на сторінку, таку як https://<company-name>.jamfcloud.com/enroll/, щоб перевірити, чи мають вони увімкнену самостійну реєстрацію. Якщо так, можливо, попросить облікові дані для доступу.

Ви можете використовувати скрипт JamfSniper.py для виконання атаки на підбор паролів.

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

Аутентифікація пристрою JAMF

Бінарний файл jamf містив секрет для відкриття ключниці, який на момент виявлення був спільним серед усіх, і це було: jk23ucnq91jfu9aj.
Більше того, jamf постійно як LaunchDaemon в /Library/LaunchAgents/com.jamf.management.agent.plist

Захоплення пристрою JAMF

JSS (Jamf Software Server) URL, який буде використовувати jamf, знаходиться в /Library/Preferences/com.jamfsoftware.jamf.plist.
Цей файл в основному містить URL:

plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist

[...]
<key>is_virtual_machine</key>
<false/>
<key>jss_url</key>
<string>https://halbornasd.jamfcloud.com/</string>
<key>last_management_framework_change_id</key>
<integer>4</integer>
[...]

{% endcode %}

Отже, зловмисник може встановити шкідливий пакет (pkg), який перезаписує цей файл, встановлюючи URL на Mythic C2 слухача з агента Typhon, щоб тепер мати можливість зловживати JAMF як C2.

{% code overflow="wrap" %}

# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0

# TODO: There is an ID, maybe it's possible to have the real jamf connection and another one to the C2

{% endcode %}

JAMF Імітація

Щоб імітувати комунікацію між пристроєм і JMF, вам потрібно:

  • UUID пристрою: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'
  • JAMF ключ з: /Library/Application\ Support/Jamf/JAMF.keychain, який містить сертифікат пристрою

З цією інформацією, створіть ВМ з викраденим апаратним UUID і з вимкненим SIP, скиньте JAMF ключ, підключіть агент Jamf і викрадіть його інформацію.

Викрадення секретів

a

Ви також можете моніторити місце /Library/Application Support/Jamf/tmp/ для кастомних скриптів, які адміністратори можуть захотіти виконати через Jamf, оскільки вони розміщуються тут, виконуються і видаляються. Ці скрипти можуть містити облікові дані.

Однак, облікові дані можуть передаватися цим скриптам як параметри, тому вам потрібно буде моніторити ps aux | grep -i jamf (навіть не будучи root).

Скрипт JamfExplorer.py може слухати нові файли, що додаються, і нові аргументи процесу.

macOS Дистанційний доступ

А також про MacOS "спеціальні" мережеві протоколи:

{% content-ref url="../macos-security-and-privilege-escalation/macos-protocols.md" %} macos-protocols.md {% endcontent-ref %}

Active Directory

В деяких випадках ви виявите, що комп'ютер MacOS підключений до AD. У цьому сценарії вам слід спробувати перерахувати активний каталог, як ви звикли. Знайдіть деяку допомогу на наступних сторінках:

{% content-ref url="../../network-services-pentesting/pentesting-ldap.md" %} pentesting-ldap.md {% endcontent-ref %}

{% content-ref url="../../windows-hardening/active-directory-methodology/" %} active-directory-methodology {% endcontent-ref %}

{% content-ref url="../../network-services-pentesting/pentesting-kerberos-88/" %} pentesting-kerberos-88 {% endcontent-ref %}

Деякий локальний інструмент MacOS, який також може вам допомогти, це dscl:

dscl "/Active Directory/[Domain]/All Domains" ls /

Також є кілька інструментів, підготовлених для MacOS, щоб автоматично перераховувати AD та працювати з kerberos:

  • Machound: MacHound - це розширення до інструменту аудиту Bloodhound, що дозволяє збирати та імпортувати відносини Active Directory на MacOS хостах.
  • Bifrost: Bifrost - це проект на Objective-C, призначений для взаємодії з API Heimdal krb5 на macOS. Мета проекту - забезпечити кращий тестування безпеки навколо Kerberos на пристроях macOS, використовуючи рідні API без необхідності в будь-яких інших фреймворках або пакетах на цільовому пристрої.
  • Orchard: Інструмент JavaScript для автоматизації (JXA) для перерахунку Active Directory.

Інформація про домен

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Користувачі

Три типи користувачів MacOS:

  • Локальні користувачі — Керуються локальною службою OpenDirectory, вони не пов'язані жодним чином з Active Directory.
  • Мережеві користувачі — Витратні користувачі Active Directory, які потребують з'єднання з сервером DC для аутентифікації.
  • Мобільні користувачі — Користувачі Active Directory з локальною резервною копією своїх облікових даних та файлів.

Локальна інформація про користувачів та групи зберігається у папці /var/db/dslocal/nodes/Default.
Наприклад, інформація про користувача на ім'я mark зберігається у /var/db/dslocal/nodes/Default/users/mark.plist, а інформація про групу adminу /var/db/dslocal/nodes/Default/groups/admin.plist.

На додаток до використання країв HasSession та AdminTo, MacHound додає три нові краї до бази даних Bloodhound:

  • CanSSH - сутність, якій дозволено SSH до хоста
  • CanVNC - сутність, якій дозволено VNC до хоста
  • CanAE - сутність, якій дозволено виконувати скрипти AppleEvent на хості
#User enumeration
dscl . ls /Users
dscl . read /Users/[username]
dscl "/Active Directory/TEST/All Domains" ls /Users
dscl "/Active Directory/TEST/All Domains" read /Users/[username]
dscacheutil -q user

#Computer enumeration
dscl "/Active Directory/TEST/All Domains" ls /Computers
dscl "/Active Directory/TEST/All Domains" read "/Computers/[compname]$"

#Group enumeration
dscl . ls /Groups
dscl . read "/Groups/[groupname]"
dscl "/Active Directory/TEST/All Domains" ls /Groups
dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"

#Domain Information
dsconfigad -show

Більше інформації в https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/

Computer$ пароль

Отримати паролі за допомогою:

bifrost --action askhash --username [name] --password [password] --domain [domain]

Можливо отримати пароль Computer$ всередині системного ключа.

Over-Pass-The-Hash

Отримати TGT для конкретного користувача та служби:

bifrost --action asktgt --username [user] --domain [domain.com] \
--hash [hash] --enctype [enctype] --keytab [/path/to/keytab]

Якщо TGT зібрано, його можна ввести в поточну сесію за допомогою:

bifrost --action asktgt --username test_lab_admin \
--hash CF59D3256B62EE655F6430B0F80701EE05A0885B8B52E9C2480154AFA62E78 \
--enctype aes256 --domain test.lab.local

Керберостинг

bifrost --action asktgs --spn [service] --domain [domain.com] \
--username [user] --hash [hash] --enctype [enctype]

З отриманими сервісними квитками можна спробувати отримати доступ до спільних ресурсів на інших комп'ютерах:

smbutil view //computer.fqdn
mount -t smbfs //server/folder /local/mount/point

Доступ до Keychain

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

{% content-ref url="macos-keychain.md" %} macos-keychain.md {% endcontent-ref %}

Зовнішні сервіси

MacOS Red Teaming відрізняється від звичайного Windows Red Teaming, оскільки зазвичай MacOS інтегровано з кількома зовнішніми платформами безпосередньо. Загальна конфігурація MacOS полягає в доступі до комп'ютера за допомогою синхронізованих облікових даних OneLogin та доступу до кількох зовнішніх сервісів (як-от github, aws...) через OneLogin.

Різні техніки червоної команди

Safari

Коли файл завантажується в Safari, якщо це "безпечний" файл, він буде автоматично відкритий. Тож, наприклад, якщо ви завантажите zip, він буде автоматично розпакований:

Посилання

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}