hacktricks/macos-hardening/macos-security-and-privilege-escalation/macos-protocols.md
2024-03-29 19:49:46 +01:00

13 KiB
Raw Blame History

Служби та протоколи мережі macOS

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

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

Служби віддаленого доступу

Це загальні служби macOS для віддаленого доступу до них.
Ви можете увімкнути/вимкнути ці служби в System Settings --> Sharing

  • VNC, відомий як "Screen Sharing" (tcp:5900)
  • SSH, відомий як "Remote Login" (tcp:22)
  • Apple Remote Desktop (ARD), або "Remote Management" (tcp:3283, tcp:5900)
  • AppleEvent, відомий як "Remote Apple Event" (tcp:3031)

Перевірте, чи яка-небудь з них увімкнена, запустивши:

rmMgmt=$(netstat -na | grep LISTEN | grep tcp46 | grep "*.3283" | wc -l);
scrShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.5900" | wc -l);
flShrng=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | egrep "\*.88|\*.445|\*.548" | wc -l);
rLgn=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.22" | wc -l);
rAE=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.3031" | wc -l);
bmM=$(netstat -na | grep LISTEN | egrep 'tcp4|tcp6' | grep "*.4488" | wc -l);
printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharing: %s\nFile Sharing: %s\nRemote Login: %s\nRemote Mgmt: %s\nRemote Apple Events: %s\nBack to My Mac: %s\n\n" "$scrShrng" "$flShrng" "$rLgn" "$rmMgmt" "$rAE" "$bmM";

Пентест ARD

Apple Remote Desktop (ARD) - це розширена версія Virtual Network Computing (VNC), спеціально адаптована для macOS, що пропонує додаткові функції. Значна вразливість ARD полягає в методі аутентифікації для пароля екрану керування, який використовує лише перші 8 символів пароля, що робить його вразливим до атак перебору паролів за допомогою інструментів, таких як Hydra або GoRedShell, оскільки в ньому немає обмежень за замовчуванням.

Вразливі екземпляри можна ідентифікувати за допомогою скрипта vnc-info у nmap. Служби, які підтримують VNC Authentication (2), особливо схильні до атак перебору через обрізання пароля до 8 символів.

Для активації ARD для різних адміністративних завдань, таких як підвищення привілеїв, доступ до GUI або моніторинг користувачів, використовуйте наступну команду:

sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart -activate -configure -allowAccessFor -allUsers -privs -all -clientopts -setmenuextra -menuextra yes

ARD надає різні рівні керування, включаючи спостереження, спільне керування та повне керування, з сеансами, які залишаються навіть після зміни пароля користувача. Це дозволяє надсилати команди Unix безпосередньо, виконуючи їх як root для адміністративних користувачів. Завдяки плануванню завдань та віддаленому пошуку Remote Spotlight, ARD дозволяє виконувати віддалені, маловпливові пошуки чутливих файлів на кількох машинах.

Протокол Bonjour

Bonjour, технологія, розроблена Apple, дозволяє пристроям в одній мережі виявляти послуги, які пропонуються один одному. Відомий також як Rendezvous, Zero Configuration або Zeroconf, він дозволяє пристрою приєднатися до мережі TCP/IP, автоматично вибрати IP-адресу та транслювати свої послуги іншим пристроям у мережі.

Zero Configuration Networking, наданий Bonjour, забезпечує можливість пристроям:

  • Автоматично отримувати IP-адресу навіть у відсутності DHCP-сервера.
  • Виконувати переклад імен на адреси без необхідності DNS-сервера.
  • Виявляти послуги, доступні в мережі.

Пристрої, які використовують Bonjour, призначають собі IP-адресу з діапазону 169.254/16 та перевіряють її унікальність у мережі. Mac зберігає запис у таблиці маршрутизації для цієї підмережі, який можна перевірити за допомогою netstat -rn | grep 169.

Для DNS Bonjour використовує протокол Multicast DNS (mDNS). mDNS працює через порт 5353/UDP, використовуючи стандартні запити DNS, але спрямовуючи їх на мультікаст-адресу 224.0.0.251. Цей підхід забезпечує можливість всім пристроям, які слухають мережу, отримувати та відповідати на запити, сприяючи оновленню їх записів.

При приєднанні до мережі кожен пристрій самостійно обирає ім'я, яке зазвичай закінчується на .local, яке може бути похідним від імені хоста або випадково згенерованим.

Виявлення послуг у мережі сприяє DNS Service Discovery (DNS-SD). Використовуючи формат записів DNS SRV, DNS-SD використовує записи DNS PTR для можливості переліку кількох послуг. Клієнт, який шукає певну послугу, буде запитувати запис PTR для <Service>.<Domain>, отримуючи у відповідь список записів PTR у форматі <Instance>.<Service>.<Domain>, якщо послуга доступна з декількох хостів.

Утиліта dns-sd може бути використана для виявлення та реклами послуг у мережі. Ось деякі приклади її використання:

Пошук SSH-послуг

Для пошуку SSH-послуг у мережі використовується наступна команда:

dns-sd -B _ssh._tcp

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

Рекламування служби HTTP

Для реклами служби HTTP можна використовувати:

dns-sd -R "Index" _http._tcp . 80 path=/index.html

Ця команда реєструє службу HTTP з назвою "Index" на порту 80 з шляхом /index.html.

Для пошуку служб HTTP в мережі:

dns-sd -B _http._tcp

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

Для більш зручного інтерфейсу додаток Discovery - DNS-SD Browser, доступний в Apple App Store, може візуалізувати послуги, які пропонуються в вашій локальній мережі.

Альтернативно, можна написати власні скрипти для перегляду та виявлення служб за допомогою бібліотеки python-zeroconf. Скрипт python-zeroconf демонструє створення браузера служб для служб _http._tcp.local., який виводить додані або видалені служби:

from zeroconf import ServiceBrowser, Zeroconf

class MyListener:

def remove_service(self, zeroconf, type, name):
print("Service %s removed" % (name,))

def add_service(self, zeroconf, type, name):
info = zeroconf.get_service_info(type, name)
print("Service %s added, service info: %s" % (name, info))

zeroconf = Zeroconf()
listener = MyListener()
browser = ServiceBrowser(zeroconf, "_http._tcp.local.", listener)
try:
input("Press enter to exit...\n\n")
finally:
zeroconf.close()

Вимкнення Bonjour

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

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist

Посилання

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

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