macOS ファイル、フォルダー、バイナリおよびメモリ
Reading time: 20 minutes
tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
ファイル階層レイアウト
- /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 ...のような出力が得られます。最初の数字はファイルが存在するボリュームのID番号で、2番目の数字はinode番号です。この情報を使ってcat /.vol/16777223/7545753を実行することで、このファイルの内容にアクセスできます。
アプリケーションフォルダー
- システムアプリケーションは
/System/Applicationsにあります。 - インストールされたアプリケーションは通常
/Applicationsまたは~/Applicationsにインストールされます。 - アプリケーションデータは、rootとして実行されるアプリケーションのために
/Library/Application Supportに、ユーザーとして実行されるアプリケーションのために~/Library/Application Supportにあります。 - サードパーティアプリケーションのデーモンは、通常
/Library/PrivilegedHelperTools/にあります。 - サンドボックス化されたアプリは
~/Library/Containersフォルダーにマッピングされます。各アプリにはアプリケーションのバンドルID(com.apple.Safari)に基づいた名前のフォルダーがあります。 - カーネルは
/System/Library/Kernels/kernelにあります。 - Appleのカーネル拡張は
/System/Library/Extensionsにあります。 - サードパーティのカーネル拡張は
/Library/Extensionsに保存されています。
機密情報を含むファイル
MacOSはパスワードなどの情報をいくつかの場所に保存します:
macOS Sensitive Locations & Interesting Daemons
脆弱なpkgインストーラー
OS X特有の拡張子
.dmg: Apple Disk Imageファイルはインストーラーに非常に頻繁に使用されます。.kext: 特定の構造に従う必要があり、OS Xバージョンのドライバーです。(バンドルです).plist: プロパティリストとも呼ばれ、XMLまたはバイナリ形式で情報を保存します。- XMLまたはバイナリのいずれかです。バイナリのものは次のコマンドで読み取れます:
defaults read config.plist/usr/libexec/PlistBuddy -c print config.plistplutil -p ~/Library/Preferences/com.apple.screensaver.plistplutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -.app: ディレクトリ構造に従うAppleアプリケーション(バンドルです)。.dylib: 動的ライブラリ(Windows DLLファイルのようなもの).pkg: xar(eXtensible Archive format)と同じです。インストーラーコマンドを使用してこれらのファイルの内容をインストールできます。.DS_Store: このファイルは各ディレクトリにあり、ディレクトリの属性とカスタマイズを保存します。.Spotlight-V100: このフォルダーはシステムのすべてのボリュームのルートディレクトリに表示されます。.metadata_never_index: このファイルがボリュームのルートにある場合、Spotlightはそのボリュームをインデックスしません。.noindex: この拡張子を持つファイルとフォルダーはSpotlightによってインデックスされません。.sdef: バンドル内のファイルで、AppleScriptからアプリケーションとどのように対話できるかを指定します。
macOSバンドル
バンドルはFinder内のオブジェクトのように見えるディレクトリです(バンドルの例は*.appファイルです)。
Dyld Shared Library Cache (SLC)
macOS(およびiOS)では、すべてのシステム共有ライブラリ、フレームワークやdylibが単一のファイルに結合されており、これを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
エミュレーターを使用して Xcode で他の *OS デバイスの共有ライブラリキャッシュをダウンロードすることも可能です。これらは次の場所にダウンロードされます: 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
SLC のマッピング
dyld は、SLC がマッピングされているかどうかを知るためにシステムコール shared_region_check_np を使用し(アドレスを返します)、shared_region_map_and_slide_np を使用して SLC をマッピングします。
SLC が最初の使用時にスライドしても、すべての プロセス は 同じコピー を使用するため、攻撃者がシステムでプロセスを実行できる場合、ASLR 保護が 排除されます。これは過去に実際に悪用され、共有領域ページャーで修正されました。
ブランチプールは、画像マッピングの間に小さなスペースを作成する小さな Mach-O dylibs であり、関数を介入させることを不可能にします。
SLC のオーバーライド
環境変数を使用して:
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- ルートユーザーは フラグを削除し、ファイルを変更できます。
restricted: このフラグはファイルを SIP によって保護します(このフラグをファイルに追加することはできません)。Sticky bit: スティッキービットを持つディレクトリでは、所有者またはルートのみがファイルを名前変更または削除できます。通常、これは /tmp ディレクトリに設定され、通常のユーザーが他のユーザーのファイルを削除または移動するのを防ぎます。
すべてのフラグはファイル sys/stat.h に見つけることができ(mdfind stat.h | grep stat.h を使用して見つけます)、次のようになります:
UF_SETTABLE0x0000ffff: 所有者変更可能フラグのマスク。UF_NODUMP0x00000001: ファイルをダンプしない。UF_IMMUTABLE0x00000002: ファイルは変更できません。UF_APPEND0x00000004: ファイルへの書き込みは追加のみ可能。UF_OPAQUE0x00000008: ディレクトリはユニオンに対して不透明です。UF_COMPRESSED0x00000020: ファイルは圧縮されています(いくつかのファイルシステム)。UF_TRACKED0x00000040: この設定があるファイルの削除/名前変更に対する通知はありません。UF_DATAVAULT0x00000080: 読み取りおよび書き込みには権限が必要です。UF_HIDDEN0x00008000: このアイテムは GUI に表示されるべきではないというヒント。SF_SUPPORTED0x009f0000: スーパーユーザーサポートフラグのマスク。SF_SETTABLE0x3fff0000: スーパーユーザー変更可能フラグのマスク。SF_SYNTHETIC0xc0000000: システム読み取り専用合成フラグのマスク。SF_ARCHIVED0x00010000: ファイルはアーカイブされています。SF_IMMUTABLE0x00020000: ファイルは変更できません。SF_APPEND0x00040000: ファイルへの書き込みは追加のみ可能。SF_RESTRICTED0x00080000: 書き込みには権限が必要です。SF_NOUNLINK0x00100000: アイテムは削除、名前変更、またはマウントできません。SF_FIRMLINK0x00800000: ファイルはファームリンクです。SF_DATALESS0x40000000: ファイルはデータレスオブジェクトです。
ファイル 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: ASCIIテキストファイルのテキストエンコーディングを指定com.apple.logd.metadata:/var/db/diagnostics内のファイルでlogdによって使用されるcom.apple.genstore.*: 世代ストレージ(ファイルシステムのルートにある/.DocumentRevisions-V100)com.apple.rootless: MacOS: システム整合性保護によってファイルにラベル付けされる (III/10)com.apple.uuidb.boot-uuid: 一意のUUIDを持つブートエポックのlogdマークcom.apple.decmpfs: MacOS: 透過的ファイル圧縮 (II/7)com.apple.cprotect: *OS: ファイルごとの暗号化データ (III/11)com.apple.installd.*: *OS: installdによって使用されるメタデータ(例:installType、uniqueInstallID)
リソースフォーク | macOS ADS
これはMacOSマシンで代替データストリームを取得する方法です。file/..namedfork/rsrc内の拡張属性com.apple.ResourceForkにコンテンツを保存することができます。
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 の実行を担当しています(launchctl listで "com.apple.syslogd" を探すことで無効になっているか確認できます)。/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ハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:
HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks