macOS TCC Bypasses
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Це не обхід, це просто те, як працює TCC: Він не захищає від запису. Якщо Terminal не має доступу для читання Робочого столу користувача, він все ще може записувати в нього:
The розширений атрибут com.apple.macl
додається до нового файлу, щоб надати додатку творця доступ до його читання.
Можливо помістити вікно поверх запиту TCC, щоб змусити користувача прийняти його, не помітивши. Ви можете знайти PoC у TCC-ClickJacking.
Зловмисник може створити додатки з будь-якою назвою (наприклад, Finder, Google Chrome...) у Info.plist
і змусити його запитувати доступ до деякого захищеного місця TCC. Користувач подумає, що легітимний додаток є тим, хто запитує цей доступ.
Більше того, можливо видалити легітимний додаток з Dock і помістити фейковий, так що коли користувач натискає на фейковий (який може використовувати той же значок), він може викликати легітимний, запитати дозволи TCC і виконати шкідливе ПЗ, змушуючи користувача вірити, що легітимний додаток запитав доступ.
Більше інформації та PoC у:
macOS Privilege EscalationЗа замовчуванням доступ через SSH мав "Повний доступ до диска". Щоб вимкнути це, вам потрібно, щоб він був у списку, але вимкнений (видалення його зі списку не зніме ці привілеї):
Тут ви можете знайти приклади того, як деякі шкідливі програми змогли обійти цю захист:
Зверніть увагу, що тепер, щоб мати можливість увімкнути SSH, вам потрібен Повний доступ до диска
Атрибут com.apple.macl
надається файлам, щоб надати певному додатку дозволи на його читання. Цей атрибут встановлюється, коли перетягують файл на додаток або коли користувач двічі клацає файл, щоб відкрити його за допомогою додатку за замовчуванням.
Отже, користувач може зареєструвати шкідливий додаток для обробки всіх розширень і викликати Launch Services, щоб відкрити будь-який файл (так що шкідливий файл отримає доступ до його читання).
З правом com.apple.private.icloud-account-access
можливо спілкуватися з com.apple.iCloudHelper
XPC сервісом, який надасть токени iCloud.
iMovie та Garageband мали це право та інші, які дозволяли.
Для отримання більшої інформації про експлойт для отримання токенів icloud з цього права перегляньте доповідь: #OBTS v5.0: "Що відбувається на вашому Mac, залишається в iCloud Apple?!" - Wojciech Regula
Додаток з дозволом kTCCServiceAppleEvents
зможе контролювати інші додатки. Це означає, що він може зловживати дозволами, наданими іншим додаткам.
Для отримання додаткової інформації про Apple Scripts перегляньте:
macOS Apple ScriptsНаприклад, якщо додаток має дозвіл на автоматизацію над iTerm
, наприклад, у цьому прикладі Terminal
має доступ до iTerm:
Terminal, який не має FDA, може викликати iTerm, який має його, і використовувати його для виконання дій:
Або якщо додаток має доступ до Finder, він може використовувати скрипт, подібний до цього:
Користувацький tccd демон використовує HOME
змінну середовища для доступу до бази даних користувачів TCC з: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Згідно з цим постом на Stack Exchange і оскільки демон TCC працює через launchd
в межах домену поточного користувача, можливо контролювати всі змінні середовища, які передаються йому.
Таким чином, зловмисник може встановити змінну середовища $HOME
в launchctl
, щоб вказати на контрольовану каталогію, перезапустити демон TCC і потім безпосередньо змінити базу даних TCC, щоб надати собі всі доступні права TCC без запиту у кінцевого користувача.
PoC:
Notes мали доступ до TCC захищених місць, але коли створюється нотатка, вона створюється в незахищеному місці. Тож ви могли попросити нотатки скопіювати захищений файл у нотатку (тобто в незахищене місце), а потім отримати доступ до файлу:
Бінарний файл /usr/libexec/lsd
з бібліотекою libsecurity_translocate
мав право com.apple.private.nullfs_allow
, що дозволяло створювати nullfs монтування, і мав право com.apple.private.tcc.allow
з kTCCServiceSystemPolicyAllFiles
для доступу до кожного файлу.
Було можливим додати атрибут карантину до "Library", викликати com.apple.security.translocation
XPC сервіс, а потім він відображав Library на $TMPDIR/AppTranslocation/d/d/Library
, де всі документи всередині Library могли бути доступні.
Music
має цікаву функцію: Коли він працює, він імпортує файли, скинуті в ~/Music/Music/Media.localized/Automatically Add to Music.localized
у "медіатеку" користувача. Більше того, він викликає щось на зразок: rename(a, b);
де a
і b
є:
a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"
b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3
Ця rename(a, b);
поведінка вразлива до Race Condition, оскільки можливо помістити всередину папки Automatically Add to Music.localized
підроблений TCC.db файл, а потім, коли нова папка (b) створюється для копіювання файлу, видалити його і вказати на ~/Library/Application Support/com.apple.TCC
/.
Якщо SQLITE_SQLLOG_DIR="path/folder"
, це в основному означає, що будь-яка відкрита база даних копіюється в цей шлях. У цьому CVE цей контроль був зловжито для запису всередині SQLite бази даних, яка буде відкрита процесом з FDA TCC базою даних, а потім зловживати SQLITE_SQLLOG_DIR
з символічним посиланням у назві файлу, так що коли ця база даних відкрита, користувач TCC.db перезаписується з відкритою.
Більше інформації в описі і в доповіді.
Якщо змінна середовища SQLITE_AUTO_TRACE
встановлена, бібліотека libsqlite3.dylib
почне логувати всі SQL запити. Багато додатків використовували цю бібліотеку, тому було можливим логувати всі їхні SQLite запити.
Кілька додатків Apple використовували цю бібліотеку для доступу до TCC захищеної інформації.
Ця змінна середовища використовується фреймворком Metal
, який є залежністю для різних програм, зокрема Music
, яка має FDA.
Встановлюючи наступне: MTL_DUMP_PIPELINES_TO_JSON_FILE="path/name"
. Якщо path
є дійсним каталогом, помилка спрацює, і ми можемо використовувати fs_usage
, щоб побачити, що відбувається в програмі:
файл буде open()
ed, названий path/.dat.nosyncXXXX.XXXXXX
(X випадковий)
один або кілька write()
запишуть вміст у файл (ми не контролюємо це)
path/.dat.nosyncXXXX.XXXXXX
буде renamed()
d на path/name
Це тимчасове записування файлу, за яким слідує rename(old, new)
, яке не є безпечним.
Це не безпечно, оскільки потрібно окремо вирішити старі та нові шляхи, що може зайняти деякий час і може бути вразливим до умови гонки. Для отримання додаткової інформації ви можете ознайомитися з функцією xnu
renameat_internal()
.
Отже, в основному, якщо привілейований процес перейменовує з папки, якою ви керуєте, ви можете отримати RCE і змусити його отримати доступ до іншого файлу або, як у цьому CVE, відкрити файл, який створила привілейована програма, і зберегти FD.
Якщо перейменування отримує доступ до папки, якою ви керуєте, поки ви змінили вихідний файл або маєте до нього FD, ви змінюєте файл (або папку) призначення, щоб вказати на символічне посилання, щоб ви могли записувати, коли захочете.
Це була атака в CVE: Наприклад, щоб перезаписати TCC.db
користувача, ми можемо:
створити /Users/hacker/ourlink
, щоб вказати на /Users/hacker/Library/Application Support/com.apple.TCC/
створити каталог /Users/hacker/tmp/
встановити MTL_DUMP_PIPELINES_TO_JSON_FILE=/Users/hacker/tmp/TCC.db
викликати помилку, запустивши Music
з цією змінною середовища
зловити open()
/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX
(X випадковий)
тут ми також open()
цей файл для запису і тримаємо дескриптор файлу
атомарно переключити /Users/hacker/tmp
з /Users/hacker/ourlink
в циклі
ми робимо це, щоб максимізувати наші шанси на успіх, оскільки вікно гонки досить вузьке, але програш у гонці має незначні недоліки
почекати трохи
перевірити, чи пощастило
якщо ні, запустити знову з самого верху
Більше інформації на https://gergelykalman.com/lateralus-CVE-2023-32407-a-macos-tcc-bypass.html
Тепер, якщо ви спробуєте використовувати змінну середовища MTL_DUMP_PIPELINES_TO_JSON_FILE
, програми не запустяться
Як root ви можете увімкнути цю службу, і агент ARD матиме повний доступ до диска, що може бути зловжито користувачем, щоб змусити його скопіювати нову базу даних користувача TCC.
TCC використовує базу даних у домашній папці користувача для контролю доступу до ресурсів, специфічних для користувача, за адресою $HOME/Library/Application Support/com.apple.TCC/TCC.db. Отже, якщо користувач зможе перезапустити TCC з змінною середовища $HOME, що вказує на іншу папку, користувач може створити нову базу даних TCC у /Library/Application Support/com.apple.TCC/TCC.db і обманути TCC, щоб надати будь-який дозвіл TCC будь-якому додатку.
Зверніть увагу, що Apple використовує налаштування, збережене в профілі користувача в атрибуті NFSHomeDirectory
для значення $HOME
, тому якщо ви скомпрометуєте додаток з дозволами на зміну цього значення (kTCCServiceSystemPolicySysAdminFiles
), ви можете озброїти цю опцію за допомогою обходу TCC.
Перший POC використовує dsexport і dsimport, щоб змінити DOM папку користувача.
Отримати csreq блоб для цільового додатку.
Посадити підроблений TCC.db файл з необхідним доступом і csreq блобом.
Експортувати запис служби каталогів користувача за допомогою dsexport.
Змінити запис служби каталогів, щоб змінити домашню директорію користувача.
Імпортувати змінений запис служби каталогів за допомогою dsimport.
Зупинити tccd користувача і перезавантажити процес.
Другий POC використовував /usr/libexec/configd
, який мав com.apple.private.tcc.allow
зі значенням kTCCServiceSystemPolicySysAdminFiles
.
Було можливим запустити configd
з параметром -t
, зловмисник міг вказати кастомний пакет для завантаження. Отже, експлуатація замінює методи dsexport
і dsimport
зміни домашньої директорії користувача на впровадження коду configd.
Для отримання додаткової інформації перегляньте оригінальний звіт.
Існують різні техніки для впровадження коду в процес і зловживання його привілеями TCC:
macOS Process AbuseБільше того, найпоширеніше впровадження процесу для обходу TCC, яке було виявлено, відбувається через плагіни (завантажити бібліотеку). Плагіни - це додатковий код, зазвичай у формі бібліотек або plist, які будуть завантажені основним додатком і виконуватимуться в його контексті. Отже, якщо основний додаток мав доступ до файлів, обмежених TCC (через надані дозволи або права), кастомний код також матиме його.
Додаток /System/Library/CoreServices/Applications/Directory Utility.app
мав право kTCCServiceSystemPolicySysAdminFiles
, завантажував плагіни з розширенням .daplug
і не мав посиленого часу виконання.
Щоб озброїти цей CVE, NFSHomeDirectory
змінюється (зловживаючи попереднім правом) для того, щоб мати можливість взяти під контроль базу даних TCC користувачів, щоб обійти TCC.
Для отримання додаткової інформації перегляньте оригінальний звіт.
Бінарний файл /usr/sbin/coreaudiod
мав права com.apple.security.cs.disable-library-validation
і com.apple.private.tcc.manager
. Перше дозволяє впровадження коду, а друге надає доступ до керування TCC.
Цей бінарний файл дозволяв завантажувати плагіни сторонніх виробників з папки /Library/Audio/Plug-Ins/HAL
. Отже, було можливим завантажити плагін і зловживати дозволами TCC з цим PoC:
Для отримання додаткової інформації перегляньте оригінальний звіт.
Системні програми, які відкривають потік камери через Core Media I/O (додатки з kTCCServiceCamera
), завантажують в процесі ці плагіни, розташовані в /Library/CoreMediaIO/Plug-Ins/DAL
(не обмежено SIP).
Просто зберігання в цій папці бібліотеки з загальним конструктором дозволить інжектувати код.
Кілька додатків Apple були вразливими до цього.
Додаток Firefox мав права com.apple.security.cs.disable-library-validation
та com.apple.security.cs.allow-dyld-environment-variables
:
Для отримання додаткової інформації про те, як легко експлуатувати це перегляньте оригінальний звіт.
Бінарний файл /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
мав права com.apple.private.tcc.allow
та com.apple.security.get-task-allow
, що дозволяло інжектувати код у процес і використовувати привілеї TCC.
Telegram мав права com.apple.security.cs.allow-dyld-environment-variables
та com.apple.security.cs.disable-library-validation
, тому його можна було зловживати, щоб отримати доступ до його дозволів, таких як запис з камери. Ви можете знайти payload у звіті.
Зверніть увагу, як використовувати змінну середовища для завантаження бібліотеки, був створений кастомний plist для інжекції цієї бібліотеки, і launchctl
був використаний для її запуску:
Можливо викликати open
навіть у пісочниці
Досить поширено надавати терміналу Повний доступ до диска (FDA), принаймні на комп'ютерах, які використовують технічні спеціалісти. І можливо викликати .terminal
скрипти, використовуючи це.
.terminal
скрипти - це plist файли, такі як цей, з командою для виконання в ключі CommandString
:
Застосунок може записати термінальний скрипт у такому місці, як /tmp, і запустити його з командою, такою як:
Будь-який користувач (навіть без привілеїв) може створити та змонтувати знімок Time Machine і отримати доступ до ВСІХ файлів цього знімка.
Єдине привілейоване, яке потрібно, це щоб застосунок (наприклад, Terminal
) мав Повний доступ до диска (FDA) (kTCCServiceSystemPolicyAllfiles
), що має бути надано адміністратором.
Більш детальне пояснення можна знайти в оригінальному звіті.
Навіть якщо файл бази даних TCC захищений, було можливо монтувати новий файл TCC.db через директорію:
Перевірте повний експлойт у оригінальному описі.
Інструмент /usr/sbin/asr
дозволяв копіювати весь диск і монтувати його в іншому місці, обходячи захисти TCC.
Є третя база даних TCC у /var/db/locationd/clients.plist
, щоб вказати клієнтів, яким дозволено доступ до служб геолокації.
Папка /var/db/locationd/
не була захищена від монтування DMG, тому було можливо змонтувати наш власний plist.
У кількох випадках файли зберігатимуть чутливу інформацію, таку як електронні листи, номери телефонів, повідомлення... у незахищених місцях (що вважається вразливістю в Apple).
Це більше не працює, але працювало в минулому:
Інший спосіб, використовуючи CoreGraphics події:
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)