macOS Файли, Папки, Бінарні Файли та Пам'ять
Reading time: 11 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Структура файлової ієрархії
- /Applications: Встановлені програми повинні бути тут. Усі користувачі зможуть отримати до них доступ.
- /bin: Бінарні файли командного рядка
- /cores: Якщо існує, використовується для зберігання дампів пам'яті
- /dev: Все розглядається як файл, тому ви можете побачити апаратні пристрої, збережені тут.
- /etc: Конфігураційні файли
- /Library: Тут можна знайти багато підкаталогів і файлів, пов'язаних з налаштуваннями, кешами та журналами. Папка Library існує в кореневому каталозі та в каталозі кожного користувача.
- /private: Не задокументовано, але багато з вказаних папок є символічними посиланнями на приватний каталог.
- /sbin: Основні системні бінарні файли (пов'язані з адмініструванням)
- /System: Файл для запуску OS X. Тут ви повинні знайти в основному лише специфічні для Apple файли (не сторонні).
- /tmp: Файли видаляються через 3 дні (це м'яке посилання на /private/tmp)
- /Users: Домашній каталог для користувачів.
- /usr: Конфігураційні та системні бінарні файли
- /var: Журнальні файли
- /Volumes: Змонтовані диски з'являться тут.
- /.vol: Запустивши
stat a.txt
, ви отримаєте щось на зразок16777223 7545753 -rw-r--r-- 1 username wheel ...
, де перше число - це ідентифікатор тому, де існує файл, а друге - номер inode. Ви можете отримати доступ до вмісту цього файлу через /.vol/ з цією інформацією, запустившиcat /.vol/16777223/7545753
Папки додатків
- Системні програми розташовані в
/System/Applications
- Встановлені програми зазвичай встановлюються в
/Applications
або в~/Applications
- Дані програми можна знайти в
/Library/Application Support
для програм, що працюють від імені root, і~/Library/Application Support
для програм, що працюють від імені користувача. - Сторонні програми демони, які потрібно запускати від імені root, зазвичай розташовані в
/Library/PrivilegedHelperTools/
- Пісочниці програми відображаються в папці
~/Library/Containers
. Кожна програма має папку, названу відповідно до ідентифікатора пакету програми (com.apple.Safari
). - Ядро розташоване в
/System/Library/Kernels/kernel
- Розширення ядра Apple розташовані в
/System/Library/Extensions
- Сторонні розширення ядра зберігаються в
/Library/Extensions
Файли з чутливою інформацією
MacOS зберігає інформацію, таку як паролі, у кількох місцях:
macOS Sensitive Locations & Interesting Daemons
Вразливі установники pkg
Специфічні розширення OS X
.dmg
: Файли образу диска Apple дуже поширені для установників..kext
: Він повинен відповідати певній структурі і є версією драйвера для OS X. (це пакет).plist
: Відомий також як список властивостей, зберігає інформацію в XML або бінарному форматі.- Може бути XML або бінарним. Бінарні можна прочитати за допомогою:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plsit
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: Додатки Apple, які дотримуються структури каталогу (це пакет)..dylib
: Динамічні бібліотеки (як файли DLL Windows).pkg
: Це те ж саме, що і xar (формат розширеного архіву). Команда установника може бути використана для встановлення вмісту цих файлів..DS_Store
: Цей файл є в кожному каталозі, він зберігає атрибути та налаштування каталогу..Spotlight-V100
: Ця папка з'являється в кореневому каталозі кожного тому в системі..metadata_never_index
: Якщо цей файл знаходиться в корені тому, Spotlight не буде індексувати цей том..noindex
: Файли та папки з цим розширенням не будуть індексуватися Spotlight..sdef
: Файли всередині пакетів, що вказують, як можна взаємодіяти з програмою з AppleScript.
Пакети macOS
Пакет - це каталог, який виглядає як об'єкт у Finder (приклад пакета - це файли *.app
).
Кеш спільних бібліотек Dyld (SLC)
У macOS (і iOS) всі системні спільні бібліотеки, такі як фреймворки та dylibs, об'єднані в один файл, який називається кешем спільного dyld. Це покращує продуктивність, оскільки код може завантажуватися швидше.
Це розташовано в macOS в /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
, а в старіших версіях ви можете знайти спільний кеш в /System/Library/dyld/
.
В iOS ви можете знайти їх у /System/Library/Caches/com.apple.dyld/
.
Подібно до кешу спільного dyld, ядро та розширення ядра також компілюються в кеш ядра, який завантажується під час завантаження.
Щоб витягти бібліотеки з єдиного файлу кешу спільного dylib, можна було використовувати бінарний dyld_shared_cache_util, який, можливо, зараз не працює, але ви також можете використовувати dyldextractor:
# dyld_shared_cache_util
dyld_shared_cache_util -extract ~/shared_cache/ /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/dyld_shared_cache_arm64e
# dyldextractor
dyldex -l [dyld_shared_cache_path] # List libraries
dyldex_all [dyld_shared_cache_path] # Extract all
# More options inside the readme
tip
Зверніть увагу, що навіть якщо інструмент dyld_shared_cache_util
не працює, ви можете передати спільний двійковий файл dyld в Hopper, і Hopper зможе ідентифікувати всі бібліотеки та дозволити вам вибрати, яку саме ви хочете дослідити:
.png)
Деякі екстрактори не працюватимуть, оскільки dylibs попередньо зв'язані з жорстко закодованими адресами, тому вони можуть переходити на невідомі адреси.
tip
Також можливо завантажити кеш спільних бібліотек інших *OS пристроїв в macos, використовуючи емулятор в Xcode. Вони будуть завантажені в: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, наприклад: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
Mapping SLC
dyld
використовує системний виклик shared_region_check_np
, щоб дізнатися, чи був SLC змапований (що повертає адресу), і shared_region_map_and_slide_np
, щоб змапувати SLC.
Зверніть увагу, що навіть якщо SLC зсувається при першому використанні, всі процеси використовують ту ж саму копію, що усуває захист ASLR, якщо зловмисник зміг запустити процеси в системі. Це насправді було використано в минулому і виправлено за допомогою спільного регіонального пагера.
Пул гілок - це маленькі Mach-O dylibs, які створюють невеликі простори між відображеннями зображень, що ускладнює перехоплення функцій.
Override SLCs
Використовуючи змінні середовища:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Це дозволить завантажити новий кеш спільних бібліотек.DYLD_SHARED_CACHE_DIR=avoid
і вручну замінити бібліотеки на символічні посилання на спільний кеш з реальними (вам потрібно буде їх витягти).
Special File Permissions
Folder permissions
У папці, читання дозволяє переглядати її, запис дозволяє видаляти та записувати файли в ній, а виконання дозволяє переміщатися по директорії. Тож, наприклад, користувач з дозволом на читання файлу всередині директорії, де він не має дозволу на виконання, не зможе прочитати файл.
Flag modifiers
Є деякі прапори, які можуть бути встановлені у файлах, що змусить файл поводитися інакше. Ви можете перевірити прапори файлів всередині директорії за допомогою ls -lO /path/directory
uchg
: Відомий як uchange прапор, який запобігає будь-якій дії зміни або видалення файлу. Щоб його встановити, виконайте:chflags uchg file.txt
- Користувач root може зняти прапор і змінити файл.
restricted
: Цей прапор робить файл захищеним SIP (ви не можете додати цей прапор до файлу).Sticky bit
: Якщо директорія має sticky bit, тільки власник директорії або root можуть перейменовувати або видаляти файли. Зазвичай це встановлюється на директорії /tmp, щоб запобігти звичайним користувачам видаляти або переміщати файли інших користувачів.
Всі прапори можна знайти у файлі sys/stat.h
(знайдіть його за допомогою mdfind stat.h | grep stat.h
) і вони є:
UF_SETTABLE
0x0000ffff: Маска прапорів, що можуть змінюватися власником.UF_NODUMP
0x00000001: Не створювати дамп файлу.UF_IMMUTABLE
0x00000002: Файл не може бути змінений.UF_APPEND
0x00000004: Записи у файл можуть лише додаватися.UF_OPAQUE
0x00000008: Директорія є непрозорою щодо об'єднання.UF_COMPRESSED
0x00000020: Файл стиснутий (деякі файлові системи).UF_TRACKED
0x00000040: Немає сповіщень про видалення/перейменування для файлів з цим встановленим прапором.UF_DATAVAULT
0x00000080: Потрібно право для читання та запису.UF_HIDDEN
0x00008000: Підказка, що цей елемент не повинен відображатися в GUI.SF_SUPPORTED
0x009f0000: Маска прапорів, що підтримуються суперкористувачем.SF_SETTABLE
0x3fff0000: Маска прапорів, що можуть змінюватися суперкористувачем.SF_SYNTHETIC
0xc0000000: Маска системних синтетичних прапорів, що є тільки для читання.SF_ARCHIVED
0x00010000: Файл архівований.SF_IMMUTABLE
0x00020000: Файл не може бути змінений.SF_APPEND
0x00040000: Записи у файл можуть лише додаватися.SF_RESTRICTED
0x00080000: Потрібно право для запису.SF_NOUNLINK
0x00100000: Елемент не може бути видалений, перейменований або змонтований.SF_FIRMLINK
0x00800000: Файл є firmlink.SF_DATALESS
0x40000000: Файл є об'єктом без даних.
File ACLs
Файлові ACLs містять ACE (Записи контролю доступу), де можуть бути призначені більш деталізовані дозволи для різних користувачів.
Можна надати директорії ці дозволи: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
А для файлу: read
, write
, append
, execute
.
Коли файл містить ACLs, ви знайдете "+" при переліку дозволів, як у:
ls -ld Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
Ви можете прочитати ACL файлу за допомогою:
ls -lde Movies
drwx------+ 7 username staff 224 15 Apr 19:42 Movies
0: group:everyone deny delete
Ви можете знайти всі файли з ACL за допомогою (це дуже повільно):
ls -RAle / 2>/dev/null | grep -E -B1 "\d: "
Розширені атрибути
Розширені атрибути мають ім'я та будь-яке бажане значення, і їх можна переглядати за допомогою ls -@
та маніпулювати за допомогою команди xattr
. Деякі поширені розширені атрибути:
com.apple.resourceFork
: Сумісність з ресурсними форками. Також видно якfilename/..namedfork/rsrc
com.apple.quarantine
: MacOS: механізм карантину Gatekeeper (III/6)metadata:*
: MacOS: різні метадані, такі як_backup_excludeItem
, абоkMD*
com.apple.lastuseddate
(#PS): Дата останнього використання файлуcom.apple.FinderInfo
: MacOS: інформація Finder (наприклад, кольорові мітки)com.apple.TextEncoding
: Визначає кодування тексту файлів ASCIIcom.apple.logd.metadata
: Використовується logd для файлів у/var/db/diagnostics
com.apple.genstore.*
: Генераційне зберігання (/.DocumentRevisions-V100
у корені файлової системи)com.apple.rootless
: MacOS: Використовується захистом цілісності системи для маркування файлів (III/10)com.apple.uuidb.boot-uuid
: маркування logd епох завантаження з унікальним UUIDcom.apple.decmpfs
: MacOS: Прозоре стиснення файлів (II/7)com.apple.cprotect
: *OS: Дані шифрування для кожного файлу (III/11)com.apple.installd.*
: *OS: Метадані, що використовуються installd, наприклад,installType
,uniqueInstallID
Ресурсні форки | macOS ADS
Це спосіб отримати Альтернативні потоки даних у MacOS. Ви можете зберігати вміст всередині розширеного атрибута під назвою com.apple.ResourceFork всередині файлу, зберігаючи його в file/..namedfork/rsrc.
echo "Hello" > a.txt
echo "Hello Mac ADS" > a.txt/..namedfork/rsrc
xattr -l a.txt #Read extended attributes
com.apple.ResourceFork: Hello Mac ADS
ls -l a.txt #The file length is still q
-rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt
Ви можете знайти всі файли, що містять цей розширений атрибут за допомогою:
find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork"
decmpfs
Розширена атрибутика com.apple.decmpfs
вказує на те, що файл зберігається в зашифрованому вигляді, ls -l
повідомить про розмір 0, а стиснуті дані знаходяться всередині цього атрибута. Кожного разу, коли файл відкривається, він буде розшифрований в пам'яті.
Цей атрибут можна побачити за допомогою ls -lO
, вказаним як стиснутий, оскільки стиснуті файли також позначені прапором UF_COMPRESSED
. Якщо стиснутий файл буде видалено з цього прапора за допомогою chflags nocompressed </path/to/file>
, система не знатиме, що файл був стиснутий, і тому не зможе розпакувати та отримати доступ до даних (вона подумає, що він насправді порожній).
Інструмент afscexpand можна використовувати для примусового розпакування файлу.
Універсальні бінарні файли & Формат Mach-o
Бінарні файли Mac OS зазвичай компілюються як універсальні бінарні файли. Універсальний бінарний файл може підтримувати кілька архітектур в одному файлі.
macOS Universal binaries & Mach-O Format
macOS Процес Пам'яті
Вивантаження пам'яті macOS
Категорія ризику файлів Mac OS
Каталог /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
є місцем, де зберігається інформація про ризик, пов'язаний з різними розширеннями файлів. Цей каталог класифікує файли за різними рівнями ризику, впливаючи на те, як Safari обробляє ці файли під час завантаження. Категорії такі:
- LSRiskCategorySafe: Файли в цій категорії вважаються абсолютно безпечними. Safari автоматично відкриє ці файли після їх завантаження.
- LSRiskCategoryNeutral: Ці файли не супроводжуються попередженнями і не відкриваються автоматично Safari.
- LSRiskCategoryUnsafeExecutable: Файли в цій категорії викликають попередження, що вказує на те, що файл є додатком. Це служить заходом безпеки для попередження користувача.
- LSRiskCategoryMayContainUnsafeExecutable: Ця категорія призначена для файлів, таких як архіви, які можуть містити виконуваний файл. Safari викличе попередження, якщо не зможе підтвердити, що всі вмісти безпечні або нейтральні.
Лог файли
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Містить інформацію про завантажені файли, такі як URL, з якого вони були завантажені./var/log/system.log
: Основний журнал систем OSX. com.apple.syslogd.plist відповідає за виконання syslogging (ви можете перевірити, чи він вимкнений, шукаючи "com.apple.syslogd" уlaunchctl list
)./private/var/log/asl/*.asl
: Це журнали системи Apple, які можуть містити цікаву інформацію.$HOME/Library/Preferences/com.apple.recentitems.plist
: Зберігає нещодавно відкриті файли та програми через "Finder".$HOME/Library/Preferences/com.apple.loginitems.plsit
: Зберігає елементи для запуску під час старту системи.$HOME/Library/Logs/DiskUtility.log
: Журнал для програми DiskUtility (інформація про диски, включаючи USB)./Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Дані про бездротові точки доступу./private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Список деактивованих демонів.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.