macOS Files, Folders, Binaries & Memory
Last updated
Last updated
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
/Applications: Zainstalowane aplikacje powinny być tutaj. Wszyscy użytkownicy będą miały do nich dostęp.
/bin: Binaria wiersza poleceń
/cores: Jeśli istnieje, jest używane do przechowywania zrzutów pamięci
/dev: Wszystko jest traktowane jako plik, więc tutaj można zobaczyć urządzenia sprzętowe.
/etc: Pliki konfiguracyjne
/Library: Można tu znaleźć wiele podkatalogów i plików związanych z preferencjami, pamięci podręcznej i logami. Istnieje folder Library w głównym katalogu i w katalogu każdego użytkownika.
/private: Nieudokumentowany, ale wiele wspomnianych folderów to łącza symboliczne do katalogu private.
/sbin: Istotne binaria systemowe (związane z administracją)
/System: Plik do uruchamiania OS X. Powinieneś tutaj znaleźć głównie pliki specyficzne dla Apple (nie firm trzecich).
/tmp: Pliki są usuwane po 3 dniach (to miękkie łącze do /private/tmp)
/Users: Katalog domowy użytkowników.
/usr: Konfiguracje i binaria systemowe
/var: Pliki dziennika
/Volumes: Zamontowane dyski pojawią się tutaj.
/.vol: Uruchamiając stat a.txt
otrzymasz coś w rodzaju 16777223 7545753 -rw-r--r-- 1 nazwa_użytkownika wheel ...
, gdzie pierwsza liczba to numer id woluminu, w którym plik istnieje, a druga to numer i-węzła. Możesz uzyskać dostęp do zawartości tego pliku poprzez /.vol/ z tymi informacjami, uruchamiając cat /.vol/16777223/7545753
Aplikacje systemowe znajdują się w /System/Applications
Zainstalowane aplikacje zazwyczaj są instalowane w /Applications
lub w ~/Applications
Dane aplikacji można znaleźć w /Library/Application Support
dla aplikacji działających jako root oraz w ~/Library/Application Support
dla aplikacji działających jako użytkownik.
Aplikacje demona firm trzecich, które muszą działać jako root, zazwyczaj znajdują się w /Library/PrivilegedHelperTools/
Aplikacje z piaskownicą są mapowane do folderu ~/Library/Containers
. Każda aplikacja ma folder nazwany zgodnie z identyfikatorem pakietu aplikacji (com.apple.Safari
).
Jądro znajduje się w /System/Library/Kernels/kernel
Rozszerzenia jądra Apple'a znajdują się w /System/Library/Extensions
Rozszerzenia jądra firm trzecich są przechowywane w /Library/Extensions
macOS przechowuje informacje takie jak hasła w kilku miejscach:
macOS Sensitive Locations & Interesting Daemons.dmg
: Pliki obrazów dysków Apple są bardzo częste dla instalatorów.
.kext
: Musi przestrzegać określonej struktury i jest to wersja sterownika dla OS X. (jest to pakiet)
.plist
: Znany również jako lista właściwości, przechowuje informacje w formacie XML lub binarnym.
Może być XML lub binarny. Binarny można odczytać za pomocą:
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
: Aplikacje Apple'a, które podążają za strukturą katalogów (jest to pakiet).
.dylib
: Biblioteki dynamiczne (podobne do plików DLL w systemie Windows)
.pkg
: Są takie same jak xar (format archiwum rozszerzalny). Polecenie instalatora może być użyte do zainstalowania zawartości tych plików.
.DS_Store
: Ten plik znajduje się w każdym katalogu, zapisuje atrybuty i dostosowania katalogu.
.Spotlight-V100
: Ten folder pojawia się w głównym katalogu każdego woluminu w systemie.
.metadata_never_index
: Jeśli ten plik znajduje się w głównym katalogu woluminu, Spotlight nie zaindeksuje tego woluminu.
.noindex
: Pliki i foldery z tym rozszerzeniem nie będą indeksowane przez Spotlight.
.sdef
: Pliki w pakietach określające, w jaki sposób można wchodzić w interakcje z aplikacją za pomocą AppleScript.
Pakiet to katalog, który wygląda jak obiekt w Finderze (przykładem pakietu są pliki *.app
).
Na macOS (i iOS) wszystkie systemowe biblioteki współdzielone, takie jak ramki i dyliby, są łączone w pojedynczy plik, zwany buforem bibliotek współdzielonych dyld. Poprawia to wydajność, ponieważ kod może być ładowany szybciej.
Znajduje się to w macOS w /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
, a w starszych wersjach możesz znaleźć bufor współdzielony w /System/Library/dyld/
.
W iOS można je znaleźć w /System/Library/Caches/com.apple.dyld/
.
Podobnie jak bufor bibliotek współdzielonych dyld, jądro i rozszerzenia jądra są również kompilowane do bufora jądra, który jest ładowany podczas uruchamiania systemu.
Aby wyodrębnić biblioteki z pojedynczego pliku bufora współdzielonych dylibów, można było użyć binarnego dyld_shared_cache_util, który obecnie może nie działać, ale można również użyć dyldextractor:
Zauważ, że nawet jeśli narzędzie dyld_shared_cache_util
nie działa, możesz przekazać wspólny binarny dyld do Hoppera i Hopper będzie w stanie zidentyfikować wszystkie biblioteki i pozwolić Ci wybrać, którą chcesz zbadać:
Niektóre ekstraktory nie będą działać, ponieważ dylibs są wstępnie połączone z twardymi adresami, dlatego mogą skakać do nieznanych adresów.
Możliwe jest również pobranie Udostępnionego Cache Bibliotek innych urządzeń *OS w systemie macOS za pomocą emulatora w Xcode. Zostaną one pobrane do: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, np.: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
dyld
używa wywołania systemowego shared_region_check_np
aby sprawdzić, czy SLC został zmapowany (co zwraca adres) oraz shared_region_map_and_slide_np
aby zmapować SLC.
Zauważ, że nawet jeśli SLC jest przesuwany przy pierwszym użyciu, wszystkie procesy używają tej samej kopii, co eliminuje ochronę ASLR, jeśli atakujący był w stanie uruchomić procesy w systemie. Faktycznie było to wykorzystywane w przeszłości i naprawione za pomocą wspólnego regionu pagera.
Pule gałęzi to małe Mach-O dylibs, które tworzą małe przestrzenie między mapowaniami obrazów, co uniemożliwia interweniowanie w funkcje.
Korzystając z zmiennych środowiskowych:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> To pozwoli na załadowanie nowego wspólnego cache bibliotek
DYLD_SHARED_CACHE_DIR=avoid
i ręczne zastąpienie bibliotek dowiązaniami symbolicznymi do cache bibliotek z rzeczywistymi (będziesz musiał je wyodrębnić)
W folderze, odczyt pozwala na wylistowanie go, zapis pozwala na usunięcie i zapis plików w nim, a wykonanie pozwala na przejście przez katalog. Na przykład użytkownik z uprawnieniem do odczytu pliku wewnątrz katalogu, w którym nie ma uprawnienia do wykonania, nie będzie w stanie odczytać pliku.
Istnieją pewne flagi, które można ustawić w plikach, które sprawią, że plik będzie zachowywał się inaczej. Możesz sprawdzić flagi plików w katalogu za pomocą ls -lO /ścieżka/do/katalogu
uchg
: Znana jako flaga uchange uniemożliwi dokonanie jakiejkolwiek zmiany lub usunięcie pliku. Aby ją ustawić, wykonaj: chflags uchg plik.txt
Użytkownik root może usunąć flagę i zmodyfikować plik
restricted
: Ta flaga sprawia, że plik jest chroniony przez SIP (nie można dodać tej flagi do pliku).
Sticky bit
: Jeśli katalog ma ustawiony bit sticky, tylko właściciel katalogów lub root mogą zmienić nazwę lub usunąć pliki. Zazwyczaj jest to ustawione w katalogu /tmp, aby zapobiec zwykłym użytkownikom usuwania lub przenoszenia plików innych użytkowników.
Wszystkie flagi można znaleźć w pliku sys/stat.h
(znajdź go za pomocą mdfind stat.h | grep stat.h
) i są:
UF_SETTABLE
0x0000ffff: Maska flag, które można zmienić właścicielowi.
UF_NODUMP
0x00000001: Nie zapisuj pliku.
UF_IMMUTABLE
0x00000002: Plik nie może być zmieniany.
UF_APPEND
0x00000004: Zapisywanie do pliku może być tylko dodawane.
UF_OPAQUE
0x00000008: Katalog jest nieprzezroczysty w stosunku do unii.
UF_COMPRESSED
0x00000020: Plik jest skompresowany (niektóre systemy plików).
UF_TRACKED
0x00000040: Brak powiadomień o usuwaniu/zmianie nazwy dla plików z tym ustawieniem.
UF_DATAVAULT
0x00000080: Wymagane uprawnienie do odczytu i zapisu.
UF_HIDDEN
0x00008000: Wskazuje, że ten element nie powinien być wyświetlany w interfejsie GUI.
SF_SUPPORTED
0x009f0000: Maska flag obsługiwanych przez superużytkownika.
SF_SETTABLE
0x3fff0000: Maska flag zmienialnych przez superużytkownika.
SF_SYNTHETIC
0xc0000000: Maska flag systemowych tylko do odczytu.
SF_ARCHIVED
0x00010000: Plik jest zarchiwizowany.
SF_IMMUTABLE
0x00020000: Plik nie może być zmieniany.
SF_APPEND
0x00040000: Zapisywanie do pliku może być tylko dodawane.
SF_RESTRICTED
0x00080000: Wymagane uprawnienie do zapisu.
SF_NOUNLINK
0x00100000: Element nie może być usunięty, zmieniony lub zamontowany.
SF_FIRMLINK
0x00800000: Plik jest łączem stałym.
SF_DATALESS
0x40000000: Plik jest obiektem bez danych.
ACL plików zawiera ACE (Access Control Entries), gdzie można przypisać różne bardziej szczegółowe uprawnienia różnym użytkownikom.
Możliwe jest przyznanie katalogowi tych uprawnień: list
, search
, add_file
, add_subdirectory
, delete_child
, delete_child
.
A plikowi: read
, write
, append
, execute
.
Gdy plik zawiera ACL, zobaczysz "+" podczas listowania uprawnień jak w:
Możesz odczytać ACL-e pliku za pomocą:
Możesz znaleźć wszystkie pliki z ACL za pomocą (to jest baaardzo wolne):
Rozszerzone atrybuty posiadają nazwę i wartość oraz można je zobaczyć za pomocą ls -@
i manipulować nimi za pomocą polecenia xattr
. Niektóre wspólne rozszerzone atrybuty to:
com.apple.resourceFork
: Zgodność z widłami zasobów. Widoczne także jako filename/..namedfork/rsrc
com.apple.quarantine
: MacOS: Mechanizm kwarantanny Gatekeepera (III/6)
metadata:*
: MacOS: różne metadane, takie jak _backup_excludeItem
lub kMD*
com.apple.lastuseddate
(#PS): Data ostatniego użycia pliku
com.apple.FinderInfo
: MacOS: Informacje Findera (np. kolorowe tagi)
com.apple.TextEncoding
: Określa kodowanie tekstu plików tekstowych ASCII
com.apple.logd.metadata
: Używane przez logd w plikach w /var/db/diagnostics
com.apple.genstore.*
: Przechowywanie generacyjne (/.DocumentRevisions-V100
w głównym katalogu systemu plików)
com.apple.rootless
: MacOS: Używane przez System Integrity Protection do oznaczania pliku (III/10)
com.apple.uuidb.boot-uuid
: Oznaczenia logd epok uruchomień z unikalnym UUID
com.apple.decmpfs
: MacOS: Transparentna kompresja plików (II/7)
com.apple.cprotect
: *OS: Dane szyfrowania plików (III/11)
com.apple.installd.*
: *OS: Metadane używane przez installd, np. installType
, uniqueInstallID
To sposób na uzyskanie Alternatywnych Strumieni Danych w systemach MacOS. Możesz zapisać zawartość wewnątrz rozszerzonego atrybutu o nazwie com.apple.ResourceFork w pliku, zapisując go w file/..namedfork/rsrc.
Możesz znaleźć wszystkie pliki zawierające ten rozszerzony atrybut za pomocą:
Rozszerzony atrybut com.apple.decmpfs
wskazuje, że plik jest przechowywany zaszyfrowany, ls -l
będzie raportować rozmiar 0 a skompresowane dane znajdują się w tym atrybucie. Za każdym razem, gdy plik jest dostępny, zostanie zdeszyfrowany w pamięci.
Ten atrybut można zobaczyć za pomocą ls -lO
oznaczonego jako skompresowany, ponieważ skompresowane pliki są również oznaczone flagą UF_COMPRESSED
. Jeśli skompresowany plik zostanie usunięty z tą flagą za pomocą chflags nocompressed </ścieżka/do/pliku>
, system nie będzie wiedział, że plik był skompresowany i dlatego nie będzie w stanie go zdekompresować i uzyskać dostępu do danych (będzie myślał, że jest pusty).
Narzędzie afscexpand może być użyte do wymuszenia dekompresji pliku.
Binarki systemu Mac OS zazwyczaj są kompilowane jako uniwersalne binarne. Uniwersalny binarny może obsługiwać wiele architektur w tym samym pliku.
macOS Universal binaries & Mach-O FormatKatalog /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
to miejsce, gdzie przechowywane są informacje o ryzyku związanym z różnymi rozszerzeniami plików. Ten katalog kategoryzuje pliki na różne poziomy ryzyka, wpływając na to, w jaki sposób Safari traktuje te pliki po pobraniu. Kategorie to:
LSRiskCategorySafe: Pliki w tej kategorii są uważane za całkowicie bezpieczne. Safari automatycznie otworzy te pliki po pobraniu.
LSRiskCategoryNeutral: Te pliki nie wyświetlają żadnych ostrzeżeń i nie są automatycznie otwierane przez Safari.
LSRiskCategoryUnsafeExecutable: Pliki w tej kategorii wywołują ostrzeżenie, wskazując, że plik jest aplikacją. Jest to środek bezpieczeństwa mający na celu poinformowanie użytkownika.
LSRiskCategoryMayContainUnsafeExecutable: Ta kategoria jest przeznaczona dla plików, takich jak archiwa, które mogą zawierać plik wykonywalny. Safari wywoła ostrzeżenie, chyba że może zweryfikować, że wszystkie zawartości są bezpieczne lub neutralne.
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: Zawiera informacje o pobranych plikach, takie jak adres URL, z którego zostały pobrane.
/var/log/system.log
: Główny dziennik systemów OSX. com.apple.syslogd.plist jest odpowiedzialny za wykonywanie sysloggingu (możesz sprawdzić, czy jest wyłączony, szukając "com.apple.syslogd" w launchctl list
.
/private/var/log/asl/*.asl
: To Apple System Logs, które mogą zawierać interesujące informacje.
$HOME/Library/Preferences/com.apple.recentitems.plist
: Przechowuje niedawno odwiedzane pliki i aplikacje za pośrednictwem "Finder".
$HOME/Library/Preferences/com.apple.loginitems.plsit
: Przechowuje elementy do uruchomienia po uruchomieniu systemu.
$HOME/Library/Logs/DiskUtility.log
: Plik dziennika dla aplikacji DiskUtility (informacje o dyskach, w tym USB).
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: Dane o punktach dostępu bezprzewodowego.
/private/var/db/launchd.db/com.apple.launchd/overrides.plist
: Lista dezaktywowanych demonów.
Dowiedz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)