macOS Files, Folders, Binaries & Memory
ファイル階層レイアウト
/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
にインストールされますアプリケーションデータは、ルートとして実行されるアプリケーションの場合は
/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 は、パスワードなどの情報をいくつかの場所に保存します:
pagemacOS Sensitive Locations & Interesting Daemons脆弱な pkg インストーラ
pagemacOS Installers AbuseOS 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
: 動的ライブラリ(Windows の DLL ファイルのようなもの).pkg
: xar(eXtensible Archive フォーマット)と同じです。これらのファイルの内容をインストールするには、installer コマンドを使用できます。.DS_Store
: このファイルは各ディレクトリにあり、ディレクトリの属性とカスタマイズを保存します。.Spotlight-V100
: このフォルダはシステムのすべてのボリュームのルートディレクトリに表示されます。.metadata_never_index
: このファイルがボリュームのルートにある場合、Spotlight はそのボリュームをインデックスしません。.noindex
: この拡張子を持つファイルやフォルダは Spotlight によってインデックスされません。.sdef
: AppleScript からアプリケーションとのやり取りが可能である方法を指定するバンドル内のファイル
macOS バンドル
バンドルは、Finder でオブジェクトのように見える ディレクトリ です(*.app
ファイルの例)。
Dyld 共有ライブラリキャッシュ(SLC)
macOS(およびiOS)では、フレームワークや dylib などのすべてのシステム共有ライブラリが 1 つのファイル に結合され、dyld 共有キャッシュ と呼ばれています。これにより、コードを高速に読み込むことができ、パフォーマンスが向上します。
これは macOS では /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
にあり、古いバージョンでは 共有キャッシュ を /System/Library/dyld/
に見つけることができるかもしれません。
iOS では /System/Library/Caches/com.apple.dyld/
にあります。
dyld 共有キャッシュと同様に、カーネルとカーネル拡張もカーネルキャッシュにコンパイルされ、起動時に読み込まれます。
1 つのファイルからライブラリを抽出するには、以前はバイナリ dyld_shared_cache_util を使用できましたが、現在は機能しないかもしれません。代わりに dyldextractor を使用できます:
dyld_shared_cache_util
ツールが機能しなくても、共有dyldバイナリをHopperに渡すことで、Hopperはすべてのライブラリを識別し、調査したいライブラリを選択できます。
一部の抽出ツールはdylibsがハードコードされたアドレスで事前にリンクされているため、未知のアドレスにジャンプする可能性があるため機能しない場合があります。
macOSの他の*OSデバイスのShared Library CacheをXcodeのエミュレータを使用してダウンロードすることも可能です。これらは次の場所にダウンロードされます:$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
を使用し(アドレスを返す)、SLCをマップするためにshared_region_map_and_slide_np
**を使用します。
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_SETTABLE
0x0000ffff:所有者変更可能フラグのマスク。UF_NODUMP
0x00000001:ファイルをダンプしない。UF_IMMUTABLE
0x00000002:ファイルを変更できません。UF_APPEND
0x00000004:ファイルへの書き込みは追記のみ可能。UF_OPAQUE
0x00000008:ディレクトリはunionに対して不透明です。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:ファイルはデータレスオブジェクトです。
ファイルACL
ファイルのACLには、異なるユーザーに対してより細かい権限を割り当てることができるACE(アクセス制御エントリ)が含まれています。
これらの権限をディレクトリに付与することができます:list
、search
、add_file
、add_subdirectory
、delete_child
、delete_child
。
およびファイルに対して:read
、write
、append
、execute
。
ファイルにACLが含まれている場合、権限をリスト表示する際に「+」が表示されます。
ファイルのACLを次のようにして読むことができます:
あなたはこれで(これは非常に遅いですが)ACLを持つすべてのファイルを見つけることができます:
拡張属性
拡張属性には名前と任意の値があり、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
: ブートエポックのlogdマーキングと一意のUUIDcom.apple.decmpfs
: MacOS: 透過的なファイル圧縮 (II/7)com.apple.cprotect
: *OS: ファイルごとの暗号化データ (III/11)com.apple.installd.*
: *OS: installdによって使用されるメタデータ、例:installType
、uniqueInstallID
リソースフォーク | macOS ADS
これはMacOSマシンでAlternate Data Streamsを取得する方法です。ファイル内のcom.apple.ResourceForkという拡張属性にコンテンツを保存することで、file/..namedfork/rsrcに保存できます。
次のコマンドを使用して、この拡張属性を持つすべてのファイルを見つけることができます:
decmpfs
拡張属性com.apple.decmpfs
はファイルが暗号化されて保存されていることを示します。ls -l
はサイズが0と報告し、圧縮されたデータはこの属性の中にあります。ファイルにアクセスするたびに、メモリ内で復号化されます。
この属性はls -lO
で見ることができ、圧縮されたものはUF_COMPRESSED
フラグでタグ付けされるため、圧縮されたファイルは圧縮されているとして示されます。圧縮されたファイルが削除されると、chflags nocompressed </path/to/file>
でこのフラグを削除すると、システムはファイルが圧縮されていたことを認識せず、そのためデータにアクセスできなくなります(実際には空であると思われます)。
ツールafscexpand
を使用してファイルを強制的に展開することができます。
Universal binaries & Mach-o Format
Mac OSのバイナリは通常、universal binariesとしてコンパイルされます。Universal binaryは同じファイル内で複数のアーキテクチャをサポートできます。
pagemacOS Universal binaries & Mach-O FormatmacOS プロセスメモリ
macOS メモリダンピング
pagemacOS Memory DumpingMac 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 System Logsで、興味深い情報が含まれている可能性があります。$HOME/Library/Preferences/com.apple.recentitems.plist
:最近アクセスしたファイルやFinderを介してアクセスしたアプリケーションが格納されています。$HOME/Library/Preferences/com.apple.loginitems.plsit
:システム起動時に起動するアイテムが格納されています。$HOME/Library/Logs/DiskUtility.log
:DiskUtility Appのログファイル(USBを含むドライブに関する情報が含まれています)。/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
:ワイヤレスアクセスポイントに関するデータ。/private/var/db/launchd.db/com.apple.launchd/overrides.plist
:無効になっているデーモンのリスト。
Last updated