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
- це перший процес, який виконується ядром OX S при запуску та останній, що завершується при вимкненні. Він завжди повинен мати PID 1. Цей процес буде читати та виконувати конфігурації, вказані в ASEP plists в:
/Library/LaunchAgents
: Агенти для користувача, встановлені адміністратором/Library/LaunchDaemons
: Демони для всієї системи, встановлені адміністратором/System/Library/LaunchAgents
: Агенти для користувача, надані Apple./System/Library/LaunchDaemons
: Демони для всієї системи, надані Apple.
Коли користувач увійшов у систему, plists, розташовані в /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/LaunchDaemos/com.apple.smdb.plist
Перелічити всі агенти та демони, завантажені поточним користувачем:
Якщо plist належить користувачеві, навіть якщо він знаходиться в системних папках демонів, задача буде виконана як користувач, а не як root. Це може запобігти деяким атакам на підвищення привілеїв.
Файли запуску оболонки
Опис: 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
, містить довгий опис файлів запуску.
Відкриті програми
Налаштування вказаної експлуатації та виходу з системи та повторного входу або навіть перезавантаження не допомогли мені виконати програму. (Програма не запускалася, можливо, вона повинна бути запущена під час виконання цих дій)
Опис: 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
сценарій та відкриєте його, Додаток Термінал автоматично буде викликаний для виконання команд, вказаних там. Якщо додаток Термінал має деякі спеціальні привілеї (наприклад, TCC), ваша команда буде виконана з цими спеціальними привілеями.
Спробуйте це:
Ви також можете використовувати розширення .command
, .tool
, зі звичайним вмістом оболонки, і вони також будуть відкриватися за допомогою Терміналу.
Якщо у терміналі є Повний доступ до диска, він зможе завершити цю дію (зверніть увагу, що виконана команда буде видима у вікні терміналу).
Аудіо-плагіни
Опис: 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, розмістити його в одному з попередніх місць для завантаження і потім перейти до підтримуваного файлу та натиснути пробіл для його запуску.
Гачки входу/виходу
Це не працювало для мене, ні з гачком входу користувача, ні з гачком виходу кореневого користувача
Опис: 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
.
Для додавання користувацького cronjob програмно можна використовувати:
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 commands when a user logs in. They are stored in ~/Library/LaunchAgents/
and /Library/LaunchAgents/
.
Launch Daemons
Launch Daemons are used to run commands at system startup. They are stored in /Library/LaunchDaemons/
.
Login Items
Login Items are applications that open when a user logs in. They can be managed in System Preferences > Users & Groups > Login Items
.
Startup Items
Startup Items are legacy items that automatically launch when a user logs in. They are stored in /Library/StartupItems/
.
Скрипт ~/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, можна написати shell-сценарій в ~/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 використовує доступ до FDA
Місце
~/.ssh/rc
Тригер: Вхід через ssh
/etc/ssh/sshrc
Потрібен root
Тригер: Вхід через 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
Тригер: Вхід
Потрібні права адміністратора
Опис
У Налаштування системи -> Користувачі та групи -> Елементи входу можна знайти елементи, які виконуються при вході користувача. Можливо вивести їх, додати та видалити з командного рядка:
Ці елементи зберігаються в файлі ~/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 Sync
Опис: https://theevilbit.github.io/beyond/beyond_0026/ Опис: https://objective-see.org/blog/blog_0x11.html
Корисно для обхіду пісочниці: Ні, оскільки потрібно виконати власний додаток
Обхід TCC: ???
Місцезнаходження
Конкретний додаток
Опис та Використання
Приклад додатку з розширенням Finder Sync можна знайти тут.
Додатки можуть мати Розширення Finder Sync
. Це розширення буде вбудовано в додаток, який буде виконаний. Більше того, для того, щоб розширення могло виконати свій код, воно повинно бути підписане дійсним сертифікатом розробника 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
), ви будете в межах звичайного пісочниця додатків.
Saver code:
Плагіни 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.
Preference Pane
Здається, що це більше не працює.
Опис: 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 не має entitlements
Місце
/etc/apache2/httpd.conf
Потрібні права root
Тригер: Коли запускається Apache2
Опис та Exploit
Ви можете вказати у /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
виконується. Тому ви можете додати свій вредоносний код до нього.
Ви можете викликати попередження за допомогою sudo audit -n
.
Елементи автозапуску
Це застаріло, тому в цих каталогах не повинно бути нічого.
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