macOS TCC Bypasses
За функціональністю
Пропуск запису
Це не пропуск, це просто те, як працює TCC: Він не захищає від запису. Якщо Термінал не має доступу до читання Робочого столу користувача, він все ще може записувати в нього:
Розширений атрибут com.apple.macl
додається до нового файлу, щоб надати додатку-створювачу доступ до читання його.
Обман користувача TCC
Можливо покласти вікно над вікном запиту TCC, щоб змусити користувача прийняти його, не помічаючи. Ви можете знайти PoC в TCC-ClickJacking.
Запит TCC за довільною назвою
Атакувальник може створювати додатки з будь-якою назвою (наприклад, Finder, Google Chrome...) у Info.plist
і змушувати їх запитувати доступ до деякої захищеної TCC локації. Користувач подумає, що це легітимний додаток, який запитує цей доступ.
Більше того, можливо видалити легітимний додаток з Дока та поставити фейковий, тому коли користувач клікає на фейковий (який може мати той самий іконка), він може викликати легітимний, запитати дозволи TCC та виконати шкідливе ПЗ, змушуючи користувача вважати, що легітимний додаток запитав доступ.
Додаткова інформація та PoC:
pagemacOS Privilege EscalationSSH Bypass
За замовчуванням доступ через SSH мав "Повний доступ до диска". Щоб вимкнути це, вам потрібно мати його перераховано, але вимкнено (видалення зі списку не забере ці привілеї):
Тут ви можете знайти приклади того, як деякі шкідливі програми змогли обійти цей захист:
Зверніть увагу, що тепер, щоб мати можливість увімкнути SSH, вам потрібен Повний доступ до диска
Обробка розширень - CVE-2022-26767
Атрибут com.apple.macl
надається файлам, щоб дати певному додатку дозволи на читання. Цей атрибут встановлюється, коли користувач перетягує файл на додаток або коли користувач подвійно клацкає на файл, щоб відкрити його за допомогою типового додатка.
Отже, користувач може зареєструвати шкідливий додаток, щоб обробляти всі розширення та викликати Служби запуску для відкриття будь-якого файлу (таким чином, шкідливому файлу буде надано доступ до читання).
iCloud
За допомогою entitlement com.apple.private.icloud-account-access
можливо спілкуватися з сервісом XPC com.apple.iCloudHelper
, який надасть токени iCloud.
iMovie та Garageband мали цей entitlement та інші, які дозволяли.
Для отримання більш інформації про експлойт для отримання токенів iCloud з цього entitlement перегляньте виступ: #OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula
kTCCServiceAppleEvents / Automation
Додаток з дозволом kTCCServiceAppleEvents
зможе керувати іншими додатками. Це означає, що він може зловживати дозволами, наданими іншим додаткам.
Для отримання додаткової інформації про Apple Scripts перегляньте:
pagemacOS Apple ScriptsНаприклад, якщо додаток має дозвіл на Automation над iTerm
, наприклад у цьому прикладі Terminal
має доступ до iTerm:
Над iTerm
Terminal, який не має FDA, може викликати iTerm, який має це, і використовувати його для виконання дій:
Над Finder
Або якщо додаток має доступ до Finder, він може виконати такий сценарій:
За поведінкою додатку
CVE-2020–9934 - TCC
Демон tccd у користувацькому просторі використовує змінну HOME
env для доступу до бази даних користувачів TCC з: $HOME/Library/Application Support/com.apple.TCC/TCC.db
Згідно з цим постом на Stack Exchange і оскільки демон TCC працює через launchd
в межах поточного домену користувача, можливо контролювати всі змінні середовища, які передаються йому.
Отже, зловмисник може встановити змінну середовища $HOME
в launchctl
для вказівки на контрольований каталог, перезапустити демона TCC, а потім безпосередньо змінити базу даних TCC, щоб надати собі всі доступні привілеї TCC без будь-якого запиту до кінцевого користувача.
PoC:
CVE-2021-30761 - Примітки
Примітки мали доступ до захищених місць TCC, але коли створюється примітка, це створюється в незахищеному місці. Таким чином, ви могли б попросити примітки скопіювати захищений файл у примітку (тобто в незахищеному місці) і потім отримати доступ до файлу:
CVE-2021-30782 - Транслокація
Бінарний файл /usr/libexec/lsd
з бібліотекою libsecurity_translocate
мав entitlement com.apple.private.nullfs_allow
, що дозволяло створювати nullfs монтування, та entitlement com.apple.private.tcc.allow
з kTCCServiceSystemPolicyAllFiles
для доступу до кожного файлу.
Було можливо додати атрибут карантину до "Library", викликати службу XPC com.apple.security.translocation
, і тоді б він відобразив би Library на $TMPDIR/AppTranslocation/d/d/Library
, де всі документи всередині Library можна було отримати доступ.
CVE-2023-38571 - Музика та ТБ
Музика
має цікаву функцію: коли вона працює, вона імпортує файли, що були перетягнуті до ~/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 - CVE-2023-32422
Якщо SQLITE_SQLLOG_DIR="шлях/папка"
, це в основному означає, що будь-яка відкрита db копіюється в цей шлях. У цьому CVE цей контроль було зловживано для запису всередині бази даних SQLite, яка буде відкрита процесом з FDA бази даних TCC, а потім зловживати SQLITE_SQLLOG_DIR
з символічним посиланням у назві файлу, так що коли ця база даних відкривається, користувач TCC.db перезаписується відкритою.
Додаткова інформація у викладці та у виступі.
SQLITE_AUTO_TRACE
Якщо змінна середовища SQLITE_AUTO_TRACE
встановлена, бібліотека libsqlite3.dylib
почне логувати всі SQL-запити. Багато додатків використовували цю бібліотеку, тому було можливо логувати всі їхні запити SQLite.
Декілька додатків Apple використовували цю бібліотеку для доступу до захищеної інформації TCC.
MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
Цей змінний середовища використовується фреймворком Metal
, який є залежністю для різних програм, зокрема Music
, яка має FDA.
Встановлюючи наступне: MTL_DUMP_PIPELINES_TO_JSON_FILE="шлях/ім'я"
. Якщо шлях
є дійсною директорією, помилка спрацює, і ми можемо використовувати fs_usage
, щоб побачити, що відбувається в програмі:
файл буде відкритий за допомогою
open()
, з назвоюшлях/.dat.nosyncXXXX.XXXXXX
(X - випадковий)одне або кілька
write()
записують вміст у файл (ми не контролюємо це)шлях/.dat.nosyncXXXX.XXXXXX
буде перейменовано за допомогоюrename()
нашлях/ім'я
Це тимчасове записування файлу, за яким слідує 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
, програми не запустяться
Apple Remote Desktop
Як root ви можете увімкнути цю службу, і агент ARD матиме повний доступ до диска, який потім може бути зловживаний користувачем для копіювання нової бази даних користувача TCC.
За допомогою NFSHomeDirectory
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.
CVE-2021-30970 - Powerdir
Перший POC використовує dsexport та dsimport для зміни HOME папки користувача.
Отримати csreq блоб для цільової програми.
Розмістити фальшивий файл TCC.db з необхідним доступом та блобом csreq.
Експортувати запис служб каталогу користувача за допомогою dsexport.
Змінити запис служб каталогу для зміни домашньої папки користувача.
Імпортувати змінений запис служб каталогу за допомогою dsimport.
Зупинити tccd користувача та перезавантажити процес.
Другий POC використовував /usr/libexec/configd
, який мав com.apple.private.tcc.allow
зі значенням kTCCServiceSystemPolicySysAdminFiles
.
Було можливо запустити configd
з опцією -t
, атакуючий міг вказати власний пакет для завантаження. Отже, експлойт замінює методи dsexport
та dsimport
зміни домашньої папки користувача на ін'єкцію коду configd.
Для отримання додаткової інформації перегляньте оригінальний звіт.
За допомогою ін'єкції процесів
Існують різні техніки для впровадження коду в процес та зловживання його привілеями TCC:
pagemacOS Proces AbuseБільше того, найпоширеніша ін'єкція процесів для обходу TCC здійснюється через плагіни (завантаження бібліотек). Плагіни - це додатковий код зазвичай у формі бібліотек або plist, який буде завантажено основною програмою та виконуватиметься в її контексті. Тому, якщо основна програма мала доступ до обмежених файлів TCC (через надані дозволи або entitlements), власний код також його матиме.
CVE-2020-27937 - Directory Utility
Додаток /System/Library/CoreServices/Applications/Directory Utility.app
мав entitlement kTCCServiceSystemPolicySysAdminFiles
, завантажував плагіни з розширенням .daplug
та не мав жорсткого режиму виконання.
Для збройовиковування цього CVE, NFSHomeDirectory
змінюється (зловживаючи попереднім entitlement) для можливості захоплення бази даних TCC користувача для обходу TCC.
Для отримання додаткової інформації перегляньте оригінальний звіт.
CVE-2020-29621 - Coreaudiod
Бінарний файл /usr/sbin/coreaudiod
мав entitlements com.apple.security.cs.disable-library-validation
та com.apple.private.tcc.manager
. Перший дозволяв ін'єкцію коду, а другий надавав доступ до керування TCC.
Цей бінарний файл дозволяв завантажувати сторонні плагіни з папки /Library/Audio/Plug-Ins/HAL
. Тому було можливо завантажити плагін та зловжити дозволами TCC за допомогою цього PoC:
Для отримання додаткової інформації перевірте оригінальний звіт.
Плагіни рівня абстракції пристрою (DAL)
Системні додатки, які відкривають потік камери через Core Media I/O (додатки з kTCCServiceCamera
), завантажують у процес ці плагіни, розташовані в /Library/CoreMediaIO/Plug-Ins/DAL
(не обмежені SIP).
Просто зберігаючи там бібліотеку зі звичайним конструктором, можна впровадити код.
Декілька додатків Apple були вразливі до цього.
Firefox
Додаток Firefox мав entitlements com.apple.security.cs.disable-library-validation
та com.apple.security.cs.allow-dyld-environment-variables
:
Для отримання додаткової інформації про те, як легко використовувати це перевірте оригінальний звіт.
CVE-2020-10006
Бінарний файл /system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl
мав entitlements com.apple.private.tcc.allow
та com.apple.security.get-task-allow
, що дозволяло впроваджувати код всередині процесу та використовувати привілеї TCC.
CVE-2023-26818 - Telegram
У Telegram були entitlements com.apple.security.cs.allow-dyld-environment-variables
та com.apple.security.cs.disable-library-validation
, тому було можливо зловживати цим, щоб отримати доступ до його дозволів, таких як запис з камери. Ви можете знайти навантаження в описі.
Зверніть увагу на те, як використовувати змінну середовища для завантаження бібліотеки, було створено власний plist для впровадження цієї бібліотеки, і launchctl
був використаний для її запуску:
За допомогою відкритих викликів
Можливо викликати open
навіть під час роботи в пісочниці
Сценарії терміналу
Досить поширено надавати терміналу Повний доступ до диска (FDA), принаймні на комп'ютерах, які використовують технічні спеціалісти. І можливо викликати сценарії .terminal
за допомогою цього.
Сценарії .terminal
- це файли plist, такі як цей, з командою для виконання у ключі CommandString
:
Додаток може написати термінальний скрипт у такому місці, як /tmp, і запустити його за допомогою команди:
Шляхом монтування
CVE-2020-9771 - обхід TCC та підвищення привілеїв через mount_apfs
Будь-який користувач (навіть непривілейований) може створити та змонтувати знімок часу та отримати доступ до УСІХ файлів цього знімка.
Єдине, що потрібно привілейоване, це щоб застосунок, який використовується (наприклад, Terminal
), мав доступ Повного доступу до диска (FDA) (kTCCServiceSystemPolicyAllfiles
), який повинен бути наданий адміністратором.
Докладніше пояснення можна знайти в оригінальному звіті.
CVE-2021-1784 & CVE-2021-30808 - Монтування над файлом TCC
Навіть якщо файл бази даних TCC захищений, було можливо монтувати над каталогом новий файл TCC.db:
Перевірте повний експлойт у оригінальному описі.
asr
Інструмент /usr/sbin/asr
дозволяв копіювати весь диск і монтувати його в іншому місці, обхід захисту TCC.
Служби місцезнаходження
Є третя база даних TCC у /var/db/locationd/clients.plist
для вказівки клієнтів, яким дозволено доступ до служб місцезнаходження.
Папка /var/db/locationd/
не була захищена від монтування DMG, тому було можливо монтувати власний plist.
За допомогою програм автозапуску
pagemacOS Auto StartЗа допомогою grep
У деяких випадках файли зберігають чутливу інформацію, таку як електронні адреси, номери телефонів, повідомлення... в незахищених місцях (що вважається уразливістю в Apple).
Синтетичні кліки
Це вже не працює, але це працювало раніше:
Ще один спосіб використання подій CoreGraphics:
Посилання
Last updated