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
і містив папку 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/
Файл містить чергу, номер завдання та час його запуску. Наприклад, розглянемо a0001a019bdcd2
.
a
- це черга0001a
- номер завдання у шістнадцятковій системі,0x1a = 26
019bdcd2
- час у шістнадцятковій системі. Він представляє хвилини, що минули з початку епохи.0x019bdcd2
дорівнює26991826
у десятковій системі. Якщо ми помножимо його на 60, отримаємо1619509560
, що відповідаєGMT: 2021. Квітень 27., Вівторок 7:46:00
.
Якщо ми виведемо файл завдання, ми побачимо, що він містить ту саму інформацію, яку ми отримали за допомогою at -c
.
Дії з папками
Опис: https://theevilbit.github.io/beyond/beyond_0024/ Опис: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d
Корисно для обхіду пісочниці: ✅
Але вам потрібно мати можливість викликати
osascript
з аргументами для зв'язку зSystem Events
для налаштування Дій з папкамиОбхід TCC: 🟠
Є деякі базові дозволи TCC, такі як Робочий стіл, Документи та Завантаження
Місцезнаходження
/Library/Scripts/Folder Action Scripts
Потрібні права адміністратора
Тригер: Доступ до вказаної папки
~/Library/Scripts/Folder Action Scripts
Тригер: Доступ до вказаної папки
Опис та Використання
Дії з папками - це скрипти, які автоматично викликаються змінами у папці, такими як додавання, видалення елементів або інші дії, такі як відкриття або зміна розміру вікна папки. Ці дії можуть бути використані для різних завдань і можуть бути викликані різними способами, такими як використання інтерфейсу Finder або команд терміналу.
Для налаштування Дій з папками у вас є такі варіанти:
Створення робочого процесу Дій з папками за допомогою Automator та встановлення його як службу.
Прикріплення скрипта вручну через Налаштування Дій з папками у контекстному меню папки.
Використання OSAScript для відправлення повідомлень Apple Event до
System Events.app
для програмного налаштування Дій з папками.
Цей метод особливо корисний для вбудовання дії в систему, що надає рівень стійкості.
Наведений нижче скрипт є прикладом того, що може бути виконано за допомогою Дій з папками:
Щоб зробити вищезазначений скрипт придатним для дій папки, скомпілюйте його за допомогою:
Після компіляції скрипту налаштуйте дії папки, виконавши наведений нижче скрипт. Цей скрипт увімкне дії папки глобально і конкретно прикріпить раніше скомпільований скрипт до папки Робочого столу.
Виконайте налаштування скрипта за допомогою:
Це спосіб реалізації цієї стійкості через 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
Видаліть Folder Actions, які ви щойно встановили:
Тепер, коли у нас порожня середовище
Скопіюйте резервний файл:
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
Тригер: Коли користувач клікає на додаток у доку
Опис та Експлуатація
Усі програми, які з'являються в доку, вказані всередині plist: ~/Library/Preferences/com.apple.dock.plist
Можливо додати додаток просто з:
З використанням деяких соціально-інженерних методів ви можете імітувати, наприклад, Google Chrome всередині дока та фактично виконати свій власний скрипт:
Вибір кольорів
Опис: https://theevilbit.github.io/beyond/beyond_0017
Корисно для обхідної пісочниці: 🟠
Потрібна дуже конкретна дія
Ви потрапите в іншу пісочницю
Обхід TCC: 🔴
Місце
/Library/ColorPickers
Потрібні права адміністратора
Тригер: Використання вибору кольору
~/Library/ColorPickers
Тригер: Використання вибору кольору
Опис та Використання
Скомпілюйте пакунок вибору кольору з вашим кодом (наприклад, ви можете використати цей, наприклад) та додайте конструктор (як у розділі Заставки) та скопіюйте пакунок в ~/Library/ColorPickers
.
Потім, коли вибір кольору спрацьовує, ваш код також має спрацювати.
Зверніть увагу, що бінарний файл, який завантажує вашу бібліотеку, має дуже обмежену пісочницю: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64
Плагіни синхронізації Finder
Опис: https://theevilbit.github.io/beyond/beyond_0026/ Опис: https://objective-see.org/blog/blog_0x11.html
Корисно для обхіду пісочниці: Ні, оскільки потрібно виконати власний додаток
Обхід TCC: ???
Місцезнаходження
Конкретний додаток
Опис та Використання
Приклад додатку з розширенням синхронізації Finder можна знайти тут.
Додатки можуть мати Розширення синхронізації Finder
. Це розширення буде вбудовано в додаток, який буде виконаний. Більше того, для того, щоб розширення могло виконати свій код, воно повинно бути підписане дійсним сертифікатом розробника Apple, воно повинно бути пісочницею (хоча можуть бути додані спрощені винятки) і воно повинно бути зареєстроване з чимось на зразок:
Екранна заставка
Опис: https://theevilbit.github.io/beyond/beyond_0016/ Опис: https://posts.specterops.io/saving-your-access-d562bf5bf90b
Місцезнаходження
/System/Library/Screen Savers
Потрібні права адміністратора
Тригер: Виберіть екранну заставку
/Library/Screen Savers
Потрібні права адміністратора
Тригер: Виберіть екранну заставку
~/Library/Screen Savers
Тригер: Виберіть екранну заставку
Опис та Використання
Створіть новий проект в Xcode та виберіть шаблон для створення нової екранної заставки. Потім додайте до нього свій код, наприклад, наступний код для генерації журналів.
Збудуйте його та скопіюйте пакет .saver
в ~/Library/Screen Savers
. Потім відкрийте GUI екранної заставки та просто клацніть на неї, вона повинна згенерувати багато журналів:
Зверніть увагу, що через entitlements бінарного файлу, який завантажує цей код (/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver
), ви зможете знаходитися в звичайному пісочниці додатків.
Код екранного захисника:
Плагіни Spotlight
writeup: https://theevilbit.github.io/beyond/beyond_0011/
Корисно для обхіду пісочниці: 🟠
Але ви опинитеся в пісочниці додатків
Обхід TCC: 🔴
Пісочниця виглядає дуже обмежено
Місцезнаходження
~/Library/Spotlight/
Тригер: Створюється новий файл з розширенням, керованим плагіном Spotlight.
/Library/Spotlight/
Тригер: Створюється новий файл з розширенням, керованим плагіном Spotlight.
Потрібні права адміністратора
/System/Library/Spotlight/
Тригер: Створюється новий файл з розширенням, керованим плагіном Spotlight.
Потрібні права адміністратора
Some.app/Contents/Library/Spotlight/
Тригер: Створюється новий файл з розширенням, керованим плагіном Spotlight.
Потрібно нове додаток
Опис та Використання
Spotlight - це вбудована функція пошуку macOS, призначена для забезпечення користувачам швидкого та всебічного доступу до даних на їх комп'ютерах. Для полегшення цієї швидкості пошуку, Spotlight підтримує власну базу даних та створює індекс, аналізуючи більшість файлів, що дозволяє швидко шукати як за назвами файлів, так і за їх вмістом.
Основний механізм Spotlight включає центральний процес під назвою 'mds', що означає 'сервер метаданих'. Цей процес керує всім сервісом Spotlight. Доповнюючи це, є кілька демонів 'mdworker', які виконують різноманітні завдання обслуговування, такі як індексація різних типів файлів (ps -ef | grep mdworker
). Ці завдання стають можливими завдяки плагінам імпортування Spotlight або ".mdimporter bundles", які дозволяють Spotlight розуміти та індексувати вміст у широкому спектрі форматів файлів.
Плагіни або .mdimporter
bundles розташовані в раніше згаданих місцях, і якщо з'являється новий пакет, він завантажується протягом хвилини (не потрібно перезапускати жодний сервіс). Ці пакети повинні вказувати, які типи файлів та розширення вони можуть керувати, таким чином, Spotlight буде використовувати їх, коли створюється новий файл з вказаним розширенням.
Можливо знайти всі mdimporters
, які завантажені, запустивши:
І, наприклад, /Library/Spotlight/iBooksAuthor.mdimporter використовується для аналізу цих типів файлів (розширення .iba
та .book
серед інших):
Якщо ви перевіряєте Plist іншого mdimporter
, ви, можливо, не знайдете запис UTTypeConformsTo
. Це тому, що це вбудований Uniform Type Identifiers (UTI) і не потребує вказувати розширення.
Більше того, системні плагіни завжди мають пріоритет, тому зловмисник може отримати доступ лише до файлів, які не індексуються іншими mdimporters
Apple.
Для створення власного імпортера ви можете почати з цього проекту: https://github.com/megrimm/pd-spotlight-importer і потім змінити назву, CFBundleDocumentTypes
та додати UTImportedTypeDeclarations
, щоб підтримувати розширення, яке ви хочете підтримувати, і відобразити їх у schema.xml
.
Потім змініть код функції GetMetadataForFile
, щоб виконати вашу корисну дію, коли створюється файл з обробленим розширенням.
Нарешті збудуйте та скопіюйте свій новий .mdimporter
до одного з попередніх місць, і ви можете перевірити, чи він завантажується, спостерігаючи за журналами або перевіряючи mdimport -L.
Панель уподобань
Здається, що це більше не працює.
Опис: https://theevilbit.github.io/beyond/beyond_0009/
Місцезнаходження
/System/Library/PreferencePanes
/Library/PreferencePanes
~/Library/PreferencePanes
Опис
Здається, що це більше не працює.
Обхід коробки пісочниці
Тут ви знайдете початкові місця, корисні для обходу пісочниці, які дозволяють вам просто виконати щось, записавши це в файл, бути 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, тому дуже ймовірно, що користувач отримає запит на доступ.
Плагіни авторизації
Опис: https://theevilbit.github.io/beyond/beyond_0028/ Опис: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65
Корисно для обхіду пісочниці: 🟠
Але потрібно бути root та робити додаткові налаштування
Обхід TCC: ???
Місцезнаходження
/Library/Security/SecurityAgentPlugins/
Потрібні права root
Також потрібно налаштувати базу даних авторизації для використання плагіна
Опис та Використання
Ви можете створити плагін авторизації, який буде виконуватися при вході користувача для збереження постійності. Для отримання додаткової інформації про те, як створити один з цих плагінів, перегляньте попередні описи (і будьте обережні, погано написаний плагін може заблокувати вас і вам доведеться очистити свій Mac у режимі відновлення).
Перемістіть пакет до місця завантаження:
Нарешті додайте правило для завантаження цього плагіна:
evaluate-mechanisms
повідомить фреймворку авторизації, що йому потрібно викликати зовнішній механізм для авторизації. Більше того, privileged
зробить його виконуваним користувачем root.
Запустіть його за допомогою:
І потім група персоналу повинна мати доступ sudo (прочитайте /etc/sudoers
, щоб підтвердити).
Man.conf
Опис: 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
Опис: https://theevilbit.github.io/beyond/beyond_0023/
Корисно для обхіду пісочниці: 🟠
Але вам потрібно мати права root та запущений apache
Обхід TCC: 🔴
Httpd не має привілеїв
Місце
/etc/apache2/httpd.conf
Потрібні права root
Тригер: Коли запускається Apache2
Опис та Використання
Ви можете вказати у /etc/apache2/httpd.conf
завантаження модуля, додавши рядок, наприклад:
Таким чином ваші скомпільовані модулі будуть завантажені Apache. Єдине, що потрібно, - це підписати його дійсним сертифікатом Apple, або потрібно додати новий довірений сертифікат в систему та підписати його ним.
Потім, за необхідності, щоб переконатися, що сервер буде запущено, ви можете виконати:
Приклад коду для Dylb:
Фреймворк аудиту BSM
Опис: https://theevilbit.github.io/beyond/beyond_0031/
Корисно для обхіду пісочниці: 🟠
Але вам потрібно бути root, щоб auditd працював і викликав попередження
Обхід TCC: 🔴
Місце
/etc/security/audit_warn
Потрібні права root
Тригер: Коли auditd виявляє попередження
Опис та Використання
Кожного разу, коли auditd виявляє попередження, виконується сценарій /etc/security/audit_warn
. Тому ви можете додати свій вплив до нього.
Пункти запуску
Це застаріло, тому в цих каталогах нічого не повинно бути знайдено.
StartupItem - це каталог, який повинен бути розташований у /Library/StartupItems/
або /System/Library/StartupItems/
. Як тільки цей каталог створений, в ньому повинні бути два конкретних файли:
Сценарій rc: сценарій оболонки, який виконується при запуску.
Файл 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/
Місце розташування
/opt/X11/etc/X11/xinit/privileged_startx.d
Потрібні права адміністратора
Спрацьовує: З XQuartz
Опис та Використання
XQuartz більше не встановлюється в macOS, тому якщо вам потрібна більш детальна інформація, перегляньте опис.
kext
Так складно встановлювати kext навіть як адміністратор, що я не розгляну це як можливість виходу з пісочниці або навіть для постійності (якщо у вас є експлойт)
Місце розташування
Для встановлення KEXT як елемента автозапуску, його потрібно встановити в одному з наступних місць:
/System/Library/Extensions
Файли KEXT, вбудовані в операційну систему OS X.
/Library/Extensions
Файли KEXT, встановлені стороннім програмним забезпеченням
Ви можете перелічити в даний час завантажені файли kext за допомогою:
Для отримання додаткової інформації про розширення ядра перевірте цей розділ.
amstoold
Опис: https://theevilbit.github.io/beyond/beyond_0029/
Місцезнаходження
/usr/local/bin/amstoold
Потрібні права адміністратора
Опис та експлуатація
Здається, plist
з /System/Library/LaunchAgents/com.apple.amstoold.plist
використовував цей виконуваний файл, викладаючи сервіс XPC... справа в тому, що виконуваний файл не існував, тому ви могли помістити туди щось, і коли сервіс XPC буде викликаний, буде викликаний ваш виконуваний файл.
Я більше не можу знайти це в моєму macOS.
xsanctl
Опис: https://theevilbit.github.io/beyond/beyond_0015/
Місцезнаходження
/Library/Preferences/Xsan/.xsanrc
Потрібні права адміністратора
Тригер: Коли сервіс запускається (рідко)
Опис та експлуатація
Здається, цей скрипт не дуже часто використовується, і я навіть не зміг знайти його в моєму macOS, тому якщо ви хочете отримати більше інформації, перевірте опис.
/etc/rc.common
Це не працює в сучасних версіях MacOS
Також можна помістити тут команди, які будуть виконуватися при запуску. Приклад звичайного скрипту rc.common:
Техніки та інструменти постійності
Last updated