macOS Auto Start
Цей розділ сильно ґрунтується на серії блогів Beyond the good ol' LaunchAgents, мета - додати більше місць автозапуску (якщо це можливо), вказати які техніки все ще працюють в наш час з останньою версією macOS (13.4) та уточнити необхідні дозволи.
Обхід пісочниці
Тут ви можете знайти місця автозапуску, корисні для обхіду пісочниці, що дозволяють вам просто виконати щось, записавши це в файл та чекаючи на дуже загальну дію, визначений час або дію, яку ви зазвичай можете виконати зсередини пісочниці без необхідності кореневих дозволів.
Launchd
Місця
/Library/LaunchAgents
Тригер: Перезавантаження
Потрібен корінь
/Library/LaunchDaemons
Тригер: Перезавантаження
Потрібен корінь
/System/Library/LaunchAgents
Тригер: Перезавантаження
Потрібен корінь
/System/Library/LaunchDaemons
Тригер: Перезавантаження
Потрібен корінь
~/Library/LaunchAgents
Тригер: Перезаходження
~/Library/LaunchDemons
Тригер: Перезаходження
Як цікавий факт, launchd
має вбудований список властивостей у розділі Mach-o __Text.__config
, який містить інші добре відомі служби, які повинен запустити launchd. Крім того, ці служби можуть містити RequireSuccess
, RequireRun
та RebootOnSuccess
, що означає, що вони повинні бути запущені та успішно завершені.
Звісно, його не можна змінювати через підписання коду.
Опис та Експлуатація
launchd
- це перший процес, який виконується ядром ОС macOS при запуску та останній, що завершується при вимкненні. Він завжди повинен мати 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
(див. тут приклад).
Нові файли конфігурації Демонів або Агентів будуть завантажені після наступного перезавантаження або за допомогою launchctl load <target.plist>
. Також можна завантажити файли .plist без цього розширення за допомогою launchctl -F <file>
(проте ці файли plist не будуть автоматично завантажені після перезавантаження).
Також можливо відвантажити за допомогою launchctl unload <target.plist>
(процес, на який він вказує, буде завершено),
Щоб забезпечити, що нічого (наприклад, перевизначення) не перешкоджає виконанню Агента або Демона, виконайте: sudo launchctl load -w /System/Library/LaunchDaemons/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
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
.
Файли запуску оболонки
Опис: https://theevilbit.github.io/beyond/beyond_0001/ Опис (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
як оболонка за замовчуванням. Ця оболонка автоматично доступна при запуску додатка Термінал або при доступі до пристрою через SSH. Хоча bash
та sh
також присутні в macOS, їх потрібно явно викликати для використання.
Сторінка man для zsh, яку ми можемо прочитати за допомогою man zsh
, містить довгий опис файлів запуску.
Відкриті програми
Налаштування вказаної експлуатації та виxід та вхід або навіть перезавантаження не працювали для мене для виконання програми. (Програма не виконувалася, можливо, вона повинна бути запущена, коли виконуються ці дії)
Опис: 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}'
Щоб перевірити програми, які будуть відкриті, ви можете виконати:
Для додавання програми до цього списку можна скористатися:
Налаштування терміналу
Корисно для обхідної пісочниці: ✅
Обхід TCC: ✅
Термінал використовує дозволи FDA користувача, який його використовує
Місце
~/Library/Preferences/com.apple.Terminal.plist
Тригер: Відкриття терміналу
Опис та експлуатація
У ~/Library/Preferences
зберігаються налаштування користувача в додатках. Деякі з цих налаштувань можуть містити конфігурацію для виконання інших додатків/скриптів.
Наприклад, термінал може виконати команду при запуску:
Ця конфігурація відображена у файлі ~/Library/Preferences/com.apple.Terminal.plist
наступним чином:
Отже, якщо plist установок терміналу в системі може бути перезаписаний, то функціонал open
може бути використаний для відкриття терміналу та виконання цієї команди.
Ви можете додати це з командного рядка за допомогою:
Термінальні скрипти / Інші розширення файлів
Корисно для обхідної пісочниці: ✅
Обхід TCC: ✅
Використання терміналу для отримання прав FDA користувача
Місце розташування
Будь-де
Тригер: Відкриття терміналу
Опис та Використання
Якщо ви створите .terminal
скрипт та відкриєте його, програма Terminal буде автоматично запущена для виконання команд, вказаних у ньому. Якщо додатку Terminal надані деякі спеціальні привілеї (наприклад, TCC), ваша команда буде виконана з цими спеціальними привілеями.
Спробуйте це:
Ви також можете використовувати розширення .command
, .tool
, зі звичайним вмістом оболонки shell, і вони також будуть відкриватися за допомогою Терміналу.
Якщо термінал має Повний доступ до диска, він зможе завершити цю дію (зверніть увагу, що виконана команда буде видима в вікні терміналу).
Аудіо-плагіни
Опис: https://theevilbit.github.io/beyond/beyond_0013/ Опис: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882
Місцезнаходження
/Library/Audio/Plug-Ins/HAL
Потрібні права адміністратора
Тригер: Перезапустіть coreaudiod або комп'ютер
/Library/Audio/Plug-ins/Components
Потрібні права адміністратора
Тригер: Перезапустіть coreaudiod або комп'ютер
~/Library/Audio/Plug-ins/Components
Тригер: Перезапустіть coreaudiod або комп'ютер
/System/Library/Components
Потрібні права адміністратора
Тригер: Перезапустіть 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 <файл>
Спрацьовує: Залежить від завдання cron
Опис та Використання
Перелічте завдання cron поточного користувача за допомогою:
Ви також можете побачити всі cron-завдання користувачів у /usr/lib/cron/tabs/
та /var/at/tabs/
(потрібні права root).
У MacOS кілька папок, які виконують скрипти з певною частотою, можна знайти в:
Тут ви можете знайти звичайні cron завдання, at завдання (не дуже використовується) та періодичні завдання (головним чином використовується для очищення тимчасових файлів). Щоденні періодичні завдання можна виконати, наприклад, за допомогою команди: periodic daily
.
Для додавання користувацького cron-завдання програмно можна використовувати:
iTerm2
Опис: https://theevilbit.github.io/beyond/beyond_0002/
Місця
~/Library/Application Support/iTerm2/Scripts/AutoLaunch
Тригер: Відкриття iTerm
~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
Тригер: Відкриття iTerm
~/Library/Preferences/com.googlecode.iterm2.plist
Тригер: Відкриття iTerm
Опис та Використання
Скрипти, збережені в ~/Library/Application Support/iTerm2/Scripts/AutoLaunch
, будуть виконані. Наприклад:
macOS Auto Start Locations
Launch Agents
Launch Agents are used to run processes when a user logs in. They are located in ~/Library/LaunchAgents/
and /Library/LaunchAgents/
.
Launch Daemons
Launch Daemons are used to run processes at system boot or login. They are located in /Library/LaunchDaemons/
and /System/Library/LaunchDaemons/
.
Скрипт ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt
також буде виконаний:
Файли налаштувань iTerm2 розташовані в ~/Library/Preferences/com.googlecode.iterm2.plist
можуть вказувати команду для виконання при відкритті терміналу iTerm2.
Це налаштування можна сконфігурувати в налаштуваннях iTerm2:
І команда відображається в налаштуваннях:
Ви можете встановити команду для виконання за допомогою:
Висока ймовірність того, що існують інші способи зловживання налаштуваннями iTerm2 для виконання довільних команд.
xbar
Опис: https://theevilbit.github.io/beyond/beyond_0007/
Корисно для обхіду пісочниці: ✅
Але xbar повинен бути встановлений
Обхід TCC: ✅
Він запитує дозвіл на доступність
Місце розташування
~/Library/Application\ Support/xbar/plugins/
Тригер: Після запуску xbar
Опис
Якщо встановлено популярну програму xbar, можна написати сценарій оболонки в ~/Library/Application\ Support/xbar/plugins/
, який буде виконуватися при запуску xbar:
Hammerspoon
Опис: https://theevilbit.github.io/beyond/beyond_0008/
Корисно для обхіду пісочниці: ✅
Але Hammerspoon повинен бути встановлений
Обхід TCC: ✅
Він запитує дозвіл на доступність
Місце
~/.hammerspoon/init.lua
Тригер: Після запуску Hammerspoon
Опис
Hammerspoon служить як платформа автоматизації для macOS, використовуючи мову сценаріїв LUA для своєї роботи. Зокрема, він підтримує інтеграцію повного коду AppleScript та виконання оболонкових сценаріїв, значно покращуючи свої можливості сценаріювання.
Додаток шукає один файл, ~/.hammerspoon/init.lua
, і при запуску виконується сценарій.
BetterTouchTool
Корисний для обходу пісочниці: ✅
Але BetterTouchTool повинен бути встановлений
Обхід TCC: ✅
Він запитує дозволи на автоматизацію скорочень та доступність
Місце розташування
~/Library/Application Support/BetterTouchTool/*
Цей інструмент дозволяє вказати програми або скрипти для виконання, коли деякі скорочення натиснуті. Атакувальник може налаштувати своє власне скорочення та дію для виконання в базі даних, щоб виконати довільний код (скорочення може бути просто натисканням клавіші).
Alfred
Корисний для обходу пісочниці: ✅
Але потрібно встановити Alfred
Обхід TCC: ✅
Він запитує дозволи на автоматизацію, доступність та навіть повний доступ до диска
Місце розташування
???
Це дозволяє створювати робочі процеси, які можуть виконувати код, коли виконуються певні умови. Потенційно атакувальник може створити файл робочого процесу і змусити Alfred завантажити його (потрібно оплатити преміальну версію для використання робочих процесів).
SSHRC
Опис: https://theevilbit.github.io/beyond/beyond_0006/
Корисний для обходу пісочниці: ✅
Але потрібно включити та використовувати ssh
Обхід TCC: ✅
SSH використовує доступ до повного диска
Місце розташування
~/.ssh/rc
Тригер: Вхід через ssh
/etc/ssh/sshrc
Потрібні права адміністратора
Тригер: Вхід через ssh
Для включення ssh потрібен повний доступ до диска:
Опис & Експлуатація
За замовчуванням, якщо PermitUserRC no
в /etc/ssh/sshd_config
, коли користувач входить через SSH, скрипти /etc/ssh/sshrc
та ~/.ssh/rc
будуть виконані.
Елементи входу
Опис: https://theevilbit.github.io/beyond/beyond_0003/
Місця
~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Спрацьовує: Вхід
Пейлоад експлойту зберігається за допомогою виклику
osascript
/var/db/com.apple.xpc.launchd/loginitems.501.plist
Спрацьовує: Вхід
Потрібні права адміністратора
Опис
У "System Preferences" -> "Users & Groups" -> Елементи входу можна знайти елементи, які виконуються при вході користувача. Можливо перелічити їх, додавати та видаляти з командного рядка:
Ці елементи зберігаються в файлі ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
Елементи входу також можуть бути вказані за допомогою API SMLoginItemSetEnabled, який збереже конфігурацію в /var/db/com.apple.xpc.launchd/loginitems.501.plist
ZIP як елемент входу
(Перевірте попередній розділ про Елементи входу, це розширення)
Якщо ви збережете файл ZIP як Елемент входу, Archive Utility
відкриє його, і якщо zip, наприклад, був збережений в ~/Library
і містив папку LaunchAge