macOS Files, Folders, Binaries & Memory
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
/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.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.
Пакет - це каталог, який виглядає як об'єкт у Finder (приклад пакета - це файли *.app
).
У 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 в Hopper, і Hopper зможе ідентифікувати всі бібліотеки та дозволить вам вибрати, яку з них ви хочете дослідити:
Деякі екстрактори не працюватимуть, оскільки dylibs попередньо зв'язані з жорстко закодованими адресами, тому вони можуть переходити на невідомі адреси.
Також можливо завантажити кеш спільних бібліотек інших *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
dyld
використовує системний виклик shared_region_check_np
, щоб дізнатися, чи був SLC відображений (що повертає адресу) і shared_region_map_and_slide_np
, щоб відобразити SLC.
Зверніть увагу, що навіть якщо SLC зсувається при першому використанні, всі процеси використовують одну й ту ж копію, що усуває захист ASLR, якщо зловмисник зміг запустити процеси в системі. Це насправді було використано в минулому і виправлено за допомогою спільного регіонального пейджера.
Пул гілок - це маленькі Mach-O dylibs, які створюють невеликі простори між відображеннями зображень, що ускладнює перехоплення функцій.
Використовуючи змінні середовища:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> Це дозволить завантажити новий кеш спільних бібліотек.
DYLD_SHARED_CACHE_DIR=avoid
і вручну замінити бібліотеки на символічні посилання на спільний кеш з реальними (вам потрібно буде їх витягти).
У папці, читання дозволяє переглядати її, запис дозволяє видаляти та записувати файли в ній, а виконання дозволяє переміщатися по директорії. Отже, наприклад, користувач з дозволом на читання файлу всередині директорії, де він не має дозволу на виконання, не зможе прочитати файл.
Є деякі прапори, які можуть бути встановлені у файлах, що змусить файл поводитися інакше. Ви можете перевірити прапори файлів всередині директорії за допомогою 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: Файл є об'єктом без даних.
Файлові ACLs містять ACE (Записи контролю доступу), де можуть бути призначені більш деталізовані дозволи для різних користувачів.
Можна надати директорії ці дозволи: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
А для файлу: read
, write
, append
, execute
.
Коли файл містить ACLs, ви знайдете "+" при переліку дозволів, як у:
Ви можете прочитати ACL файлу за допомогою:
Ви можете знайти всі файли з ACL за допомогою (це дуже повільно):
Розширені атрибути мають ім'я та будь-яке бажане значення, і їх можна переглядати за допомогою ls -@
та маніпулювати за допомогою команди xattr
. Деякі поширені розширені атрибути:
com.apple.resourceFork
: Сумісність з ресурсними fork. Також видно як 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
: Визначає кодування тексту файлів ASCII
com.apple.logd.metadata
: Використовується logd для файлів у /var/db/diagnostics
com.apple.genstore.*
: Генераційне зберігання (/.DocumentRevisions-V100
в корені файлової системи)
com.apple.rootless
: MacOS: Використовується System Integrity Protection для маркування файлу (III/10)
com.apple.uuidb.boot-uuid
: маркування logd епох завантаження з унікальним UUID
com.apple.decmpfs
: MacOS: Прозора компресія файлів (II/7)
com.apple.cprotect
: *OS: Дані шифрування для кожного файлу (III/11)
com.apple.installd.*
: *OS: Метадані, що використовуються installd, наприклад, installType
, uniqueInstallID
Це спосіб отримати Альтернативні Потоки Даних у MacOS. Ви можете зберігати вміст всередині розширеного атрибута під назвою com.apple.ResourceFork всередині файлу, зберігаючи його в file/..namedfork/rsrc.
Ви можете знайти всі файли, що містять цей розширений атрибут за допомогою:
Розширена атрибутика com.apple.decmpfs
вказує на те, що файл зберігається в зашифрованому вигляді, ls -l
повідомить про розмір 0 і стиснуті дані знаходяться всередині цього атрибута. Кожного разу, коли файл відкривається, він буде розшифрований в пам'яті.
Цей атрибут можна побачити за допомогою ls -lO
, вказаним як стиснутий, оскільки стиснуті файли також позначені прапором UF_COMPRESSED
. Якщо стиснутий файл видалити з цього прапора за допомогою chflags nocompressed </path/to/file>
, система не знатиме, що файл був стиснутий, і тому не зможе розпакувати та отримати доступ до даних (вона подумає, що він насправді порожній).
Інструмент afscexpand можна використовувати для примусового розпакування файлу.
Бінарні файли Mac OS зазвичай компілюються як універсальні бінарні файли. Універсальний бінарний файл може підтримувати кілька архітектур в одному файлі.
macOS Universal binaries & Mach-O FormatКаталог /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
: Список деактивованих демонів.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)