macOS Auto Start
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Цей розділ значною мірою базується на серії блогів Beyond the good ol' LaunchAgents, мета полягає в тому, щоб додати більше місць автозапуску (якщо це можливо), вказати які техніки все ще працюють сьогодні з останньою версією macOS (13.4) і вказати дозволи, які потрібні.
Sandbox Bypass
Тут ви можете знайти місця запуску, корисні для sandbox bypass, які дозволяють вам просто виконати щось, записавши це у файл і чекаючи на дуже поширену дію, визначену кількість часу або дію, яку ви зазвичай можете виконати зсередини пісочниці без необхідності в кореневих дозволах.
Launchd
Locations
/Library/LaunchAgents
Тригер: Перезавантаження
Потрібен root
/Library/LaunchDaemons
Тригер: Перезавантаження
Потрібен root
/System/Library/LaunchAgents
Тригер: Перезавантаження
Потрібен root
/System/Library/LaunchDaemons
Тригер: Перезавантаження
Потрібен root
~/Library/LaunchAgents
Тригер: Повторний вхід
~/Library/LaunchDemons
Тригер: Повторний вхід
Як цікава деталь, launchd
має вбудований список властивостей у секції Mach-o __Text.__config
, який містить інші відомі сервіси, які launchd повинен запустити. Більше того, ці сервіси можуть містити RequireSuccess
, RequireRun
і RebootOnSuccess
, що означає, що вони повинні бути запущені і завершені успішно.
Звичайно, його не можна змінити через підписування коду.
Description & Exploitation
launchd
є першим процесом, який виконується ядром OX S під час запуску, і останнім, що завершується під час вимкнення. Він завжди повинен мати PID 1. Цей процес буде читати та виконувати конфігурації, вказані в ASEP plist у:
/Library/LaunchAgents
: Агенти для користувача, встановлені адміністратором/Library/LaunchDaemons
: Деймони системи, встановлені адміністратором/System/Library/LaunchAgents
: Агенти для користувача, надані Apple./System/Library/LaunchDaemons
: Деймони системи, надані Apple.
Коли користувач входить, plist, розташовані в /Users/$USER/Library/LaunchAgents
і /Users/$USER/Library/LaunchDemons
, запускаються з дозволами увійшовшого користувача.
Головна різниця між агентами та деймонами полягає в тому, що агенти завантажуються, коли користувач входить, а деймони завантажуються під час запуску системи (оскільки є сервіси, такі як ssh, які потрібно виконати до того, як будь-який користувач отримує доступ до системи). Також агенти можуть використовувати GUI, тоді як деймонам потрібно працювати у фоновому режимі.
Є випадки, коли агент потрібно виконати до входу користувача, ці випадки називаються PreLoginAgents. Наприклад, це корисно для надання допоміжних технологій під час входу. Їх також можна знайти в /Library/LaunchAgents
(див. тут приклад).
Нові конфігураційні файли Daemons або Agents будуть завантажені після наступного перезавантаження або за допомогою launchctl load <target.plist>
Також можна завантажити .plist файли без цього розширення за допомогою launchctl -F <file>
(однак ці plist файли не будуть автоматично завантажені після перезавантаження).
Також можна вивантажити за допомогою launchctl unload <target.plist>
(процес, на який він вказує, буде завершено),
Щоб переконатися, що немає нічого (як-от переопределення), що перешкоджає Агенту або Демону в роботі, виконайте: sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist
Перерахуйте всіх агентів і демонів, завантажених поточним користувачем:
Якщо plist належить користувачу, навіть якщо він знаходиться в системних папках демонів, задача буде виконана як користувач і не як root. Це може запобігти деяким атакам підвищення привілеїв.
Більше інформації про launchd
launchd
є першим процесом у режимі користувача, який запускається з ядра. Запуск процесу повинен бути успішним і він не може завершитися або аварійно зупинитися. Він навіть захищений від деяких сигналів завершення.
Однією з перших речей, які зробить launchd
, є запуск всіх демонів, таких як:
Демони таймера, які виконуються за розкладом:
atd (
com.apple.atrun.plist
): МаєStartInterval
30 хвилинcrond (
com.apple.systemstats.daily.plist
): МаєStartCalendarInterval
, щоб почати о 00:15Мережеві демони, такі як:
org.cups.cups-lpd
: Слухає на TCP (SockType: stream
) зSockServiceName: printer
SockServiceName має бути або портом, або службою з
/etc/services
com.apple.xscertd.plist
: Слухає на TCP на порту 1640Демони шляху, які виконуються, коли змінюється вказаний шлях:
com.apple.postfix.master
: Перевіряє шлях/etc/postfix/aliases
Демони сповіщень IOKit:
com.apple.xartstorageremoted
:"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...
Mach порт:
com.apple.xscertd-helper.plist
: Вказує в записуMachServices
ім'яcom.apple.xscertd.helper
UserEventAgent:
Це відрізняється від попереднього. Він змушує launchd запускати програми у відповідь на певні події. Однак у цьому випадку основний бінарний файл, що бере участь, не є
launchd
, а/usr/libexec/UserEventAgent
. Він завантажує плагіни з обмеженої папки SIP /System/Library/UserEventPlugins/, де кожен плагін вказує свій ініціалізатор у ключіXPCEventModuleInitializer
або, у випадку старіших плагінів, у словникуCFPluginFactories
під ключемFB86416D-6164-2070-726F-70735C216EC0
йогоInfo.plist
.
shell startup files
Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/
Корисно для обходу пісочниці: ✅
Обхід TCC: ✅
Але вам потрібно знайти програму з обходом TCC, яка виконує оболонку, що завантажує ці файли
Локації
~/.zshrc
,~/.zlogin
,~/.zshenv.zwc
,~/.zshenv
,~/.zprofile
Тригер: Відкрити термінал з zsh
/etc/zshenv
,/etc/zprofile
,/etc/zshrc
,/etc/zlogin
Тригер: Відкрити термінал з zsh
Потрібен root
~/.zlogout
Тригер: Вийти з терміналу з zsh
/etc/zlogout
Тригер: Вийти з терміналу з zsh
Потрібен root
Потенційно більше в:
man zsh
~/.bashrc
Тригер: Відкрити термінал з bash
/etc/profile
(не спрацювало)~/.profile
(не спрацювало)~/.xinitrc
,~/.xserverrc
,/opt/X11/etc/X11/xinit/xinitrc.d/
Тригер: Очікується, що спрацює з xterm, але він не встановлений і навіть після встановлення виникає ця помилка: xterm:
DISPLAY is not set
Опис та експлуатація
При ініціалізації середовища оболонки, такого як zsh
або bash
, виконуються певні файли запуску. macOS наразі використовує /bin/zsh
як оболонку за замовчуванням. Ця оболонка автоматично відкривається, коли запускається програма Terminal або коли пристрій доступний через SSH. Хоча bash
і sh
також присутні в macOS, їх потрібно явно викликати для використання.
Сторінка man для zsh, яку ми можемо прочитати за допомогою man zsh
, має довгий опис файлів запуску.
Перезапущені програми
Налаштування вказаного експлуатаційного коду та виходу з системи, а також повторного входу або навіть перезавантаження не спрацювало для виконання програми. (Програма не виконувалася, можливо, вона повинна бути запущена, коли виконуються ці дії)
Writeup: https://theevilbit.github.io/beyond/beyond_0021/
Місцезнаходження
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Тригер: Перезапуск перезапущених програм
Опис та експлуатація
Всі програми для перезапуску знаходяться всередині plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
Отже, щоб перезапустити програми, які запускають вашу власну, вам просто потрібно додати вашу програму до списку.
UUID можна знайти, перерахувавши цю директорію або за допомогою ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'
Щоб перевірити програми, які будуть перезапущені, ви можете зробити:
Щоб додати додаток до цього списку, ви можете використовувати:
Terminal Preferences
Корисно для обходу пісочниці: ✅
Обхід TCC: ✅
Терминал використовує дозволи FDA користувача, який його використовує
Location
~/Library/Preferences/com.apple.Terminal.plist
Trigger: Відкрити Terminal
Description & Exploitation
У ~/Library/Preferences
зберігаються налаштування користувача в програмах. Деякі з цих налаштувань можуть містити конфігурацію для виконання інших програм/скриптів.
Наприклад, Terminal може виконати команду при запуску:
Ця конфігурація відображається у файлі ~/Library/Preferences/com.apple.Terminal.plist
ось так:
Отже, якщо plist налаштувань терміналу в системі може бути перезаписаний, то функціональність open
може бути використана для відкриття терміналу, і ця команда буде виконана.
Ви можете додати це з cli за допомогою:
Terminal Scripts / Інші розширення файлів
Корисно для обходу пісочниці: ✅
Обхід TCC: ✅
Використання терміналу для отримання дозволів FDA користувача
Місцезнаходження
Де завгодно
Тригер: Відкрити Термінал
Опис та експлуатація
Якщо ви створите .terminal
скрипт і відкриєте його, додаток Термінал буде автоматично викликаний для виконання команд, вказаних там. Якщо додаток Термінал має якісь спеціальні привілеї (такі як TCC), ваша команда буде виконана з цими спеціальними привілеями.
Спробуйте це з:
Ви також можете використовувати розширення .command
, .tool
, з вмістом звичайних оболонкових скриптів, і вони також будуть відкриті в Terminal.
Якщо термінал має Повний доступ до диска, він зможе виконати цю дію (зверніть увагу, що виконана команда буде видна у вікні терміналу).
Аудіоплагіни
Написання: https://theevilbit.github.io/beyond/beyond_0013/ Написання: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Місцезнаходження
/Library/Audio/Plug-Ins/HAL
Потрібен root
Тригер: Перезапустіть coreaudiod або комп'ютер
/Library/Audio/Plug-ins/Components
Потрібен root
Тригер: Перезапустіть coreaudiod або комп'ютер
~/Library/Audio/Plug-ins/Components
Тригер: Перезапустіть coreaudiod або комп'ютер
/System/Library/Components
Потрібен root
Тригер: Перезапустіть coreaudiod або комп'ютер
Опис
Згідно з попередніми написаннями, можливо скомпілювати деякі аудіоплагіни та завантажити їх.
Плагіни QuickLook
Написання: https://theevilbit.github.io/beyond/beyond_0028/
Місцезнаходження
/System/Library/QuickLook
/Library/QuickLook
~/Library/QuickLook
/Applications/AppNameHere/Contents/Library/QuickLook/
~/Applications/AppNameHere/Contents/Library/QuickLook/
Опис та експлуатація
Плагіни QuickLook можуть бути виконані, коли ви тригерите попередній перегляд файлу (натисніть пробіл, вибравши файл у Finder) і плагін, що підтримує цей тип файлу, встановлений.
Можливо скомпілювати свій власний плагін QuickLook, помістити його в одне з попередніх місць для завантаження, а потім перейти до підтримуваного файлу і натиснути пробіл, щоб тригерити його.
Хуки входу/виходу
Це не спрацювало для мене, ні з LoginHook користувача, ні з LogoutHook root
Написання: https://theevilbit.github.io/beyond/beyond_0022/
Місцезнаходження
Вам потрібно мати можливість виконати щось на зразок
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
Розташовано
в~/Library/Preferences/com.apple.loginwindow.plist
Вони застаріли, але можуть бути використані для виконання команд, коли користувач входить.
Ця налаштування зберігається в /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
Щоб видалити це:
Користувач root зберігається в /private/var/root/Library/Preferences/com.apple.loginwindow.plist
Умовний обхід пісочниці
Тут ви можете знайти місця запуску, корисні для обходу пісочниці, які дозволяють вам просто виконати щось, записуючи це у файл і очікуючи не надто поширені умови, такі як специфічні встановлені програми, "незвичайні" дії користувача або середовища.
Cron
Запис: https://theevilbit.github.io/beyond/beyond_0004/
Корисно для обходу пісочниці: ✅
Однак, вам потрібно мати можливість виконати бінарний файл
crontab
Або бути root
Обхід TCC: 🔴
Місцезнаходження
/usr/lib/cron/tabs/
,/private/var/at/tabs
,/private/var/at/jobs
,/etc/periodic/
Потрібен root для прямого доступу на запис. Root не потрібен, якщо ви можете виконати
crontab <file>
Тригер: Залежить від cron завдання
Опис та експлуатація
Перелічте cron завдання поточного користувача за допомогою:
Ви також можете побачити всі cron завдання користувачів у /usr/lib/cron/tabs/
та /var/at/tabs/
(потрібен root).
У MacOS кілька папок, які виконують скрипти з певною частотою, можна знайти в:
Там ви можете знайти звичайні cron завдання, at завдання (не дуже використовуються) та періодичні завдання (в основному використовуються для очищення тимчасових файлів). Щоденні періодичні завдання можна виконати, наприклад, за допомогою: periodic daily
.
Щоб додати користувацьке cron-завдання програмно, можна використовувати:
iTerm2
Writeup: https://theevilbit.github.io/beyond/beyond_0002/
Locations
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Trigger: Відкрити iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Trigger: Відкрити iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Trigger: Відкрити iTerm
Description & Exploitation
Скрипти, збережені в ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
, будуть виконані. Наприклад:
or:
Скрипт ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
також буде виконано:
Налаштування iTerm2, розташоване в ~/Library/Preferences/com.googlecode.iterm2.plist
, може вказувати команду для виконання при відкритті терміналу iTerm2.
Це налаштування можна налаштувати в параметрах iTerm2:
І команда відображається в налаштуваннях:
Ви можете встановити команду для виконання за допомогою:
Висока ймовірність, що є інші способи зловживання налаштуваннями iTerm2 для виконання довільних команд.
xbar
Writeup: https://theevilbit.github.io/beyond/beyond_0007/
Корисно для обходу пісочниці: ✅
Але xbar повинен бути встановлений
Обхід TCC: ✅
Він запитує дозволи на доступ до елементів керування
Location
~/Library/Application\ Support/xbar/plugins/
Trigger: Як тільки xbar буде виконано
Description
Якщо популярна програма xbar встановлена, можна написати shell-скрипт у ~/Library/Application\ Support/xbar/plugins/
, який буде виконано при запуску xbar:
Hammerspoon
Writeup: https://theevilbit.github.io/beyond/beyond_0008/
Корисно для обходу пісочниці: ✅
Але Hammerspoon повинен бути встановлений
Обхід TCC: ✅
Він запитує дозволи на доступ до елементів керування
Location
~/.hammerspoon/init.lua
Trigger: Як тільки hammerspoon буде виконано
Description
Hammerspoon слугує автоматизаційною платформою для macOS, використовуючи LUA для своїх операцій. Важливо, що він підтримує інтеграцію повного коду AppleScript та виконання shell-скриптів, значно розширюючи свої можливості сценаріїв.
Додаток шукає один файл, ~/.hammerspoon/init.lua
, і при запуску скрипт буде виконано.
BetterTouchTool
Корисно для обходу пісочниці: ✅
Але BetterTouchTool повинен бути встановлений
Обхід TCC: ✅
Він запитує дозволи на Автоматизацію-Шорткоти та Доступність
Location
~/Library/Application Support/BetterTouchTool/*
Цей інструмент дозволяє вказувати програми або скрипти для виконання, коли натискаються певні шорткоти. Зловмисник може налаштувати свій власний шорткат і дію для виконання в базі даних, щоб виконати довільний код (шорткат може бути просто натисканням клавіші).
Alfred
Корисно для обходу пісочниці: ✅
Але Alfred повинен бути встановлений
Обхід TCC: ✅
Він запитує дозволи на Автоматизацію, Доступність і навіть Доступ до всього диска
Location
???
Це дозволяє створювати робочі процеси, які можуть виконувати код, коли виконуються певні умови. Потенційно зловмисник може створити файл робочого процесу і змусити Alfred завантажити його (необхідно оплатити преміум-версію для використання робочих процесів).
SSHRC
Writeup: https://theevilbit.github.io/beyond/beyond_0006/
Корисно для обходу пісочниці: ✅
Але ssh потрібно увімкнути та використовувати
Обхід TCC: ✅
SSH використовує FDA доступ
Location
~/.ssh/rc
Тригер: Вхід через ssh
/etc/ssh/sshrc
Потрібен root
Тригер: Вхід через ssh
Щоб увімкнути ssh, потрібен Доступ до всього диска:
Опис та експлуатація
За замовчуванням, якщо в /etc/ssh/sshd_config
не вказано PermitUserRC no
, коли користувач входить через SSH, скрипти /etc/ssh/sshrc
та ~/.ssh/rc
будуть виконані.
Елементи входу
Запис: https://theevilbit.github.io/beyond/beyond_0003/
Локації
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Тригер: Вхід
Payload експлуатації зберігається, викликаючи
osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Тригер: Вхід
Потрібен root
Опис
У Системних налаштуваннях -> Користувачі та групи -> Елементи входу ви можете знайти елементи, які виконуються, коли користувач входить. Можна їх перерахувати, додавати та видаляти з командного рядка:
Ці елементи зберігаються у файлі ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Елементи входу також можуть бути вказані за допомогою API SMLoginItemSetEnabled, який зберігає конфігурацію у /var/db/com.apple.xpc.launchd/loginitems.501.plist
ZIP як елемент входу
(Перегляньте попередній розділ про елементи входу, це розширення)
Якщо ви зберігаєте файл ZIP як елемент входу, Archive Utility
відкриє його, і якщо zip, наприклад, зберігався у ~/Library
і містив папку LaunchAgents/file.plist
з бекдором, ця папка буде створена (вона не створюється за замовчуванням) і plist буде додано, тому наступного разу, коли користувач знову увійде, бекдор, вказаний у plist, буде виконано.
Інший варіант - створити файли .bash_profile
та `.zshenv всередині домашньої директорії користувача, тому якщо папка LaunchAgents вже існує, ця техніка все ще буде працювати.
At
Написання: https://theevilbit.github.io/beyond/beyond_0014/
Корисно для обходу пісочниці: ✅
Але вам потрібно виконати
at
і він повинен бути увімкненийОбхід TCC: 🔴
Місцезнаходження
Потрібно виконати
at
і він повинен бути увімкнений
Опис
Завдання at
призначені для планування одноразових завдань для виконання в певний час. На відміну від cron-завдань, завдання at
автоматично видаляються після виконання. Важливо зазначити, що ці завдання зберігаються між перезавантаженнями системи, що робить їх потенційними проблемами безпеки за певних умов.
За замовчуванням вони вимкнені, але користувач root може увімкнути їх за допомогою:
Це створить файл за 1 годину:
Перевірте чергу завдань за допомогою atq:
Вище ми можемо побачити два заплановані завдання. Ми можемо надрукувати деталі завдання, використовуючи at -c JOBNUMBER
Якщо завдання AT не ввімкнені, створені завдання не будуть виконані.
Файли завдань можна знайти за адресою /private/var/at/jobs/
The filename contains the queue, the job number, and the time it’s scheduled to run. For example let’s take a loot at a0001a019bdcd2
.
a
- це черга0001a
- номер завдання в шістнадцятковій системі,0x1a = 26
019bdcd2
- час у шістнадцятковій системі. Він представляє хвилини, що пройшли з епохи.0x019bdcd2
це26991826
у десятковій системі. Якщо помножити його на 60, отримаємо1619509560
, що єGMT: 2021. April 27., Tuesday 7:46:00
.
If we print the job file, we find that it contains the same information we got using at -c
.
Folder Actions
Writeup: https://theevilbit.github.io/beyond/beyond_0024/ Writeup: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Корисно для обходу пісочниці: ✅
Але вам потрібно мати можливість викликати
osascript
з аргументами, щоб зв’язатися зSystem Events
, щоб налаштувати Дії папокTCC обход: 🟠
Має деякі базові дозволи TCC, такі як Робочий стіл, Документи та Завантаження
Location
/Library/Scripts/Folder Action Scripts
Потрібен root
Тригер: Доступ до вказаної папки
~/Library/Scripts/Folder Action Scripts
Тригер: Доступ до вказаної папки
Description & Exploitation
Дії папок - це скрипти, які автоматично запускаються при змінах у папці, таких як додавання, видалення елементів або інші дії, такі як відкриття або зміна розміру вікна папки. Ці дії можуть бути використані для різних завдань і можуть бути запущені різними способами, такими як використання інтерфейсу Finder або команд терміналу.
Щоб налаштувати Дії папок, у вас є кілька варіантів:
Створення робочого процесу Дії папок за допомогою Automator та встановлення його як служби.
Прикріплення скрипта вручну через Налаштування Дій папок у контекстному меню папки.
Використання OSAScript для надсилання повідомлень Apple Event до
System Events.app
для програмного налаштування Дії папок.
Цей метод особливо корисний для вбудовування дії в систему, пропонуючи рівень стійкості.
The following script is an example of what can be executed by a Folder Action:
Щоб зробити вищезазначений скрипт придатним для Дій Папки, скомпілюйте його за допомогою:
Після компіляції скрипта налаштуйте Дії папок, виконавши нижче наведений скрипт. Цей скрипт дозволить Дії папок глобально та специфічно прикріпить раніше скомпільований скрипт до папки Робочий стіл.
Запустіть скрипт налаштування за допомогою:
Це спосіб реалізації цієї стійкості через GUI:
Це скрипт, який буде виконано:
Скомпілюйте його за допомогою: osacompile -l JavaScript -o folder.scpt source.js
Перемістіть його до:
Тоді відкрийте додаток Folder Actions Setup
, виберіть папку, яку ви хочете спостерігати і виберіть у вашому випадку folder.scpt
(в моєму випадку я назвав його output2.scp):
Тепер, якщо ви відкриєте цю папку за допомогою Finder, ваш скрипт буде виконано.
Ця конфігурація зберігалася в plist, розташованому в ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
у форматі base64.
Тепер спробуємо підготувати цю стійкість без доступу до GUI:
Скопіюйте
~/Library/Preferences/com.apple.FolderActionsDispatcher.plist
до/tmp
, щоб зробити резервну копію:
cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
Видаліть дії папок, які ви тільки що налаштували:
Тепер, коли у нас є порожнє середовище
Скопіюйте резервний файл:
cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
Відкрийте Folder Actions Setup.app, щоб використати цю конфігурацію:
open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"
І це не спрацювало для мене, але це інструкції з опису:(
Ярлики Dock
Опис: https://theevilbit.github.io/beyond/beyond_0027/
Корисно для обходу пісочниці: ✅
Але вам потрібно мати встановлений шкідливий додаток у системі
Обхід TCC: 🔴
Місцезнаходження
~/Library/Preferences/com.apple.dock.plist
Тригер: Коли користувач натискає на додаток у доку
Опис та експлуатація
Усі програми, які з'являються в Dock, вказані в plist: ~/Library/Preferences/com.apple.dock.plist
Можна додати програму просто з:
Використовуючи деякі соціальні інженерії, ви могли б видавати себе, наприклад, за Google Chrome всередині доку і насправді виконати свій власний скрипт:
Колірні вибірники
Writeup: https://theevilbit.github.io/beyond/beyond_0017
Корисно для обходу пісочниці: 🟠
Потрібно, щоб відбулася дуже специфічна дія
Ви опинитеся в іншій пісочниці
Обхід TCC: 🔴
Локація
/Library/ColorPickers
Потрібен root
Тригер: Використовуйте колірний вибірник
~/Library/ColorPickers
Тригер: Використовуйте колірний вибірник
Опис та експлуатація
Скомпілюйте пакет колірного вибірника з вашим кодом (ви можете використати цей, наприклад) і додайте конструктор (як у розділі Захисник екрану) та скопіюйте пакет до ~/Library/ColorPickers
.
Тоді, коли колірний вибірник буде активовано, ваш код також повинен бути активований.
Зверніть увагу, що двійковий файл, що завантажує вашу бібліотеку, має дуже обмежену пісочницю: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Finder Sync Plugins
Writeup: https://theevilbit.github.io/beyond/beyond_0026/ Writeup: https://objective-see.org/blog/blog_0x11.html
Корисно для обходу пісочниці: Ні, тому що вам потрібно виконати свій власний додаток
Обхід TCC: ???
Місцезнаходження
Конкретний додаток
Опис та експлуатація
Приклад програми з розширенням Finder Sync можна знайти тут.
Додатки можуть мати Finder Sync Extensions
. Це розширення буде входити в додаток, який буде виконуватись. Більше того, щоб розширення могло виконати свій код, воно повинно бути підписане дійсним сертифікатом розробника Apple, воно повинно бути пісочницею (хоча можуть бути додані пом'якшені винятки) і воно повинно бути зареєстроване з чимось на зразок:
Екранна заставка
Writeup: https://theevilbit.github.io/beyond/beyond_0016/ Writeup: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Локація
/System/Library/Screen Savers
Потрібен root
Тригер: Виберіть екранну заставку
/Library/Screen Savers
Потрібен root
Тригер: Виберіть екранну заставку
~/Library/Screen Savers
Тригер: Виберіть екранну заставку
Опис та експлуатація
Створіть новий проект в Xcode і виберіть шаблон для генерації нової екранної заставки. Потім додайте свій код, наприклад, наступний код для генерації логів.
Зберігайте його, і скопіюйте пакет .saver
до ~/Library/Screen Savers
. Потім відкрийте GUI екранної заставки, і якщо ви просто натиснете на неї, вона повинна згенерувати багато логів:
Зверніть увагу, що через те, що всередині прав, наданих бінарному файлу, який завантажує цей код (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
), ви можете знайти com.apple.security.app-sandbox
, ви будете всередині загального пісочниці додатків.
Saver code:
Spotlight Plugins
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Корисно для обходу пісочниці: 🟠
Але ви опинитеся в пісочниці програми
Обхід TCC: 🔴
Пісочниця виглядає дуже обмеженою
Location
~/Library/Spotlight/
Тригер: Створено новий файл з розширенням, яке обробляється плагіном Spotlight.
/Library/Spotlight/
Тригер: Створено новий файл з розширенням, яке обробляється плагіном Spotlight.
Потрібен root
/System/Library/Spotlight/
Тригер: Створено новий файл з розширенням, яке обробляється плагіном Spotlight.
Потрібен root
Some.app/Contents/Library/Spotlight/
Тригер: Створено новий файл з розширенням, яке обробляється плагіном Spotlight.
Потрібен новий додаток
Description & Exploitation
Spotlight — це вбудована функція пошуку macOS, призначена для надання користувачам швидкого та всебічного доступу до даних на їхніх комп'ютерах. Щоб полегшити цю швидку можливість пошуку, Spotlight підтримує приватну базу даних і створює індекс, аналізуючи більшість файлів, що дозволяє швидко шукати як за іменами файлів, так і за їх вмістом.
Основний механізм Spotlight включає центральний процес, названий 'mds', що означає 'сервер метаданих'. Цей процес координує всю службу Spotlight. Доповнюючи це, є кілька демонів 'mdworker', які виконують різноманітні завдання обслуговування, такі як індексація різних типів файлів (ps -ef | grep mdworker
). Ці завдання стають можливими завдяки плагінам імпортера Spotlight, або ".mdimporter bundles", які дозволяють Spotlight розуміти та індексувати вміст у різноманітних форматах файлів.
Плагіни або .mdimporter
пакети розташовані в місцях, згаданих раніше, і якщо з'являється новий пакет, він завантажується протягом хвилини (немає потреби перезапускати будь-яку службу). Ці пакети повинні вказувати, які типи файлів та розширення вони можуть обробляти, таким чином, Spotlight використовуватиме їх, коли створюється новий файл з вказаним розширенням.
Можливо знайти всі mdimporters
, які завантажені, запустивши:
І, наприклад, /Library/Spotlight/iBooksAuthor.mdimporter використовується для парсингу таких типів файлів (розширення .iba
та .book
серед інших):
Якщо ви перевірите Plist інших mdimporter
, ви можете не знайти запис UTTypeConformsTo
. Це тому, що це вбудовані Уніфіковані Ідентифікатори Типів (UTI), і не потрібно вказувати розширення.
Більше того, плагіни за замовчуванням системи завжди мають пріоритет, тому зловмисник може отримати доступ лише до файлів, які не індексуються власними mdimporters
Apple.
Щоб створити свій власний імпортер, ви можете почати з цього проекту: https://github.com/megrimm/pd-spotlight-importer і потім змінити назву, CFBundleDocumentTypes
та додати UTImportedTypeDeclarations
, щоб він підтримував розширення, яке ви хочете підтримувати, і відобразити їх у schema.xml
.
Потім змініть код функції GetMetadataForFile
, щоб виконати ваш payload, коли створюється файл з обробленим розширенням.
Нарешті, зберіть і скопіюйте ваш новий .mdimporter
в одне з трьох попередніх місць, і ви можете перевірити, чи він завантажується, моніторячи журнали або перевіряючи mdimport -L.
Панель налаштувань
Схоже, що це більше не працює.
Запис: https://theevilbit.github.io/beyond/beyond_0009/
Місцезнаходження
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Опис
Схоже, що це більше не працює.
Обхід пісочниці Root
Тут ви можете знайти місця запуску, корисні для обходу пісочниці, які дозволяють вам просто виконати щось, записуючи це у файл, будучи root і/або вимагаючи інших незвичайних умов.
Періодичний
Запис: https://theevilbit.github.io/beyond/beyond_0019/
Місцезнаходження
/etc/periodic/daily
,/etc/periodic/weekly
,/etc/periodic/monthly
,/usr/local/etc/periodic
Потрібен root
Тригер: Коли настане час
/etc/daily.local
,/etc/weekly.local
або/etc/monthly.local
Потрібен root
Тригер: Коли настане час
Опис та експлуатація
Періодичні скрипти (/etc/periodic
) виконуються через демони запуску, налаштовані в /System/Library/LaunchDaemons/com.apple.periodic*
. Зверніть увагу, що скрипти, збережені в /etc/periodic/
, виконуються як власник файлу, тому це не спрацює для потенційного підвищення привілеїв.
Є й інші періодичні скрипти, які будуть виконані, вказані в /etc/defaults/periodic.conf
:
Якщо вам вдасться записати будь-який з файлів /etc/daily.local
, /etc/weekly.local
або /etc/monthly.local
, він буде виконаний рано чи пізно.
Зверніть увагу, що періодичний скрипт буде виконаний від імені власника скрипта. Тому, якщо звичайний користувач є власником скрипта, він буде виконаний від імені цього користувача (це може запобігти атакам підвищення привілеїв).
PAM
Writeup: Linux Hacktricks PAM Writeup: https://theevilbit.github.io/beyond/beyond_0005/
Місцезнаходження
Завжди потрібен root
Опис та експлуатація
Оскільки PAM більше зосереджений на постійності та шкідливому ПЗ, ніж на легкому виконанні в macOS, цей блог не надасть детального пояснення, читайте написання, щоб краще зрозуміти цю техніку.
Перевірте модулі PAM за допомогою:
Техніка постійності/ескалації привілеїв, що зловживає PAM, така ж проста, як модифікація модуля /etc/pam.d/sudo, додавши на початку рядок:
Отже, це буде виглядати приблизно так:
І тому будь-яка спроба використати sudo
буде успішною.
Зверніть увагу, що цей каталог захищений TCC, тому ймовірно, що користувач отримає запит на доступ.
Ще один хороший приклад - це su, де ви можете побачити, що також можливо передавати параметри модулям PAM (і ви також можете закласти бекдор у цей файл):
Authorization Plugins
Writeup: https://theevilbit.github.io/beyond/beyond_0028/ Writeup: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Корисно для обходу пісочниці: 🟠
Але вам потрібно бути root і зробити додаткові налаштування
TCC обход: ???
Location
/Library/Security/SecurityAgentPlugins/
Потрібен root
Також потрібно налаштувати базу даних авторизації для використання плагіна
Description & Exploitation
Ви можете створити плагін авторизації, який буде виконуватись, коли користувач входить в систему, щоб підтримувати постійність. Для отримання додаткової інформації про те, як створити один з цих плагінів, перегляньте попередні звіти (і будьте обережні, погано написаний може заблокувати вас, і вам потрібно буде очистити ваш mac з режиму відновлення).
Перемістіть пакет до місця, звідки його потрібно завантажити:
Нарешті додайте правило для завантаження цього плагіна:
evaluate-mechanisms
скаже фреймворку авторизації, що йому потрібно викликати зовнішній механізм для авторизації. Більше того, privileged
змусить його виконуватися від імені root.
Запустіть його за допомогою:
І тоді група staff повинна мати доступ sudo (прочитайте /etc/sudoers
, щоб підтвердити).
Man.conf
Writeup: https://theevilbit.github.io/beyond/beyond_0030/
Корисно для обходу пісочниці: 🟠
Але вам потрібно бути root, і користувач повинен використовувати man
Обхід TCC: 🔴
Місцезнаходження
/private/etc/man.conf
Потрібен root
/private/etc/man.conf
: Коли використовується man
Опис та експлуатація
Конфігураційний файл /private/etc/man.conf
вказує на двійковий файл/скрипт, який потрібно використовувати при відкритті файлів документації man. Тому шлях до виконуваного файлу може бути змінений, так що щоразу, коли користувач використовує man для читання документації, виконується бекдор.
Наприклад, встановлено в /private/etc/man.conf
:
А потім створіть /tmp/view
як:
Apache2
Writeup: https://theevilbit.github.io/beyond/beyond_0023/
Корисно для обходу пісочниці: 🟠
Але вам потрібно бути root, і apache має бути запущений
Обхід TCC: 🔴
Httpd не має прав
Location
/etc/apache2/httpd.conf
Потрібен root
Тригер: Коли Apache2 запускається
Description & Exploit
Ви можете вказати в /etc/apache2/httpd.conf
, щоб завантажити модуль, додавши рядок, наприклад:
Таким чином, ваш скомпільований модуль буде завантажено Apache. Єдине, що вам потрібно, це підписати його дійсним сертифікатом Apple, або вам потрібно додати новий довірений сертифікат в систему і підписати його з ним.
Тоді, якщо потрібно, щоб переконатися, що сервер буде запущено, ви можете виконати:
Приклад коду для Dylb:
BSM audit framework
Writeup: https://theevilbit.github.io/beyond/beyond_0031/
Корисно для обходу пісочниці: 🟠
Але вам потрібно бути root, auditd має працювати і викликати попередження
TCC обход: 🔴
Location
/etc/security/audit_warn
Потрібен root
Trigger: Коли auditd виявляє попередження
Description & Exploit
Коли auditd виявляє попередження, скрипт /etc/security/audit_warn
є виконаним. Тож ви можете додати свій payload до нього.
Ви можете примусити попередження за допомогою sudo audit -n
.
Елементи запуску
Це застаріло, тому нічого не повинно бути знайдено в цих каталогах.
StartupItem - це каталог, який повинен бути розташований або в /Library/StartupItems/
, або в /System/Library/StartupItems/
. Після створення цього каталогу він повинен містити два специфічні файли:
rc скрипт: shell-скрипт, що виконується під час запуску.
plist файл, спеціально названий
StartupParameters.plist
, який містить різні налаштування конфігурації.
Переконайтеся, що як rc скрипт, так і файл StartupParameters.plist
правильно розміщені в каталозі StartupItem, щоб процес запуску міг їх розпізнати та використовувати.
emond
Я не можу знайти цей компонент у моєму macOS, тому для отримання додаткової інформації перевірте опис
Опис: https://theevilbit.github.io/beyond/beyond_0023/
Введений Apple, emond є механізмом ведення журналу, який, здається, недорозроблений або, можливо, покинутий, але залишається доступним. Хоча це не особливо корисно для адміністратора Mac, ця невідома служба може слугувати тонким методом стійкості для зловмисників, ймовірно, непоміченим більшістю адміністраторів macOS.
Для тих, хто знає про його існування, виявлення будь-якого зловмисного використання emond є простим. LaunchDaemon системи для цієї служби шукає скрипти для виконання в єдиному каталозі. Щоб перевірити це, можна використовувати наступну команду:
XQuartz
Writeup: https://theevilbit.github.io/beyond/beyond_0018/
Location
/opt/X11/etc/X11/xinit/privileged_startx.d
Потрібен root
Тригер: З XQuartz
Description & Exploit
XQuartz більше не встановлений в macOS, тому, якщо вам потрібна додаткова інформація, перегляньте опис.
kext
Встановити kext навіть як root настільки складно, що я не розглядатиму це як спосіб втечі з пісочниць або навіть для постійності (якщо у вас немає експлойту)
Location
Щоб встановити KEXT як елемент автозавантаження, його потрібно встановити в одне з наступних місць:
/System/Library/Extensions
KEXT файли, вбудовані в операційну систему OS X.
/Library/Extensions
KEXT файли, встановлені стороннім програмним забезпеченням
Ви можете перерахувати в даний момент завантажені kext файли за допомогою:
Для отримання додаткової інформації про розширення ядра перевірте цей розділ.
amstoold
Запис: https://theevilbit.github.io/beyond/beyond_0029/
Місцезнаходження
/usr/local/bin/amstoold
Потрібен root
Опис та експлуатація
Очевидно, що plist
з /System/Library/LaunchAgents/com.apple.amstoold.plist
використовував цей бінарний файл, відкриваючи XPC сервіс... справа в тому, що бінарний файл не існував, тому ви могли розмістити щось там, і коли XPC сервіс буде викликаний, ваш бінарний файл буде викликаний.
Я більше не можу знайти це у своєму macOS.
xsanctl
Запис: https://theevilbit.github.io/beyond/beyond_0015/
Місцезнаходження
/Library/Preferences/Xsan/.xsanrc
Потрібен root
Тригер: Коли сервіс запускається (рідко)
Опис та експлуатація
Очевидно, що не дуже поширено запускати цей скрипт, і я навіть не зміг знайти його у своєму macOS, тому якщо ви хочете більше інформації, перевірте запис.
/etc/rc.common
Це не працює в сучасних версіях MacOS
Також можливо розмістити тут команди, які будуть виконані під час запуску. Приклад звичайного скрипту rc.common:
Техніки та інструменти постійності
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated