macOS Files, Folders, Binaries & Memory
Last updated
Last updated
AWS ハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCP ハッキングを学び、実践する: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 ...
のような出力が得られます。最初の数字はファイルが存在するボリュームの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.dmg
: Appleディスクイメージファイルはインストーラーに非常に頻繁に使用されます。
.kext
: 特定の構造に従う必要があり、OS Xバージョンのドライバーです。(バンドルです)
.plist
: プロパティリストとしても知られ、XMLまたはバイナリ形式で情報を保存します。
XMLまたはバイナリのいずれかです。バイナリのものは次のコマンドで読み取れます:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plist
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 format)と同じです。インストーラーコマンドを使用して、これらのファイルの内容をインストールできます。
.DS_Store
: このファイルは各ディレクトリにあり、ディレクトリの属性とカスタマイズを保存します。
.Spotlight-V100
: このフォルダーはシステムのすべてのボリュームのルートディレクトリに表示されます。
.metadata_never_index
: このファイルがボリュームのルートにある場合、Spotlightはそのボリュームをインデックスしません。
.noindex
: この拡張子を持つファイルとフォルダーはSpotlightによってインデックスされません。
.sdef
: バンドル内のファイルで、AppleScriptからアプリケーションとどのように対話できるかを指定します。
バンドルはFinderでオブジェクトのように見える ディレクトリです(バンドルの例は*.app
ファイルです)。
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 バイナリを Hopper に渡すことで、Hopper はすべてのライブラリを特定し、調査したいライブラリを選択できることに注意してください。
一部のエクストラクターは、dylibs がハードコーディングされたアドレスでプリリンクされているため、未知のアドレスにジャンプする可能性があるため、機能しません。
エミュレーターを使用して 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
dyld
は、SLC がマッピングされているかどうかを知るためにシステムコール shared_region_check_np
を使用し(アドレスを返します)、SLC をマッピングするために shared_region_map_and_slide_np
を使用します。
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
ルートユーザーは フラグを削除 し、ファイルを変更できます。
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: ディレクトリはユニオンに対して不透明です。
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: ファイルはファームリンクです。
SF_DATALESS
0x40000000: ファイルはデータレスオブジェクトです。
ファイル ACLs には 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
: ユニークUUIDを持つブートエポックのlogdマーク
com.apple.decmpfs
: MacOS: 透過的ファイル圧縮 (II/7)
com.apple.cprotect
: *OS: ファイルごとの暗号化データ (III/11)
com.apple.installd.*
: *OS: installdによって使用されるメタデータ、例:installType
、uniqueInstallID
これはMacOSにおける代替データストリームを取得する方法です。file/..namedfork/rsrc内の拡張属性com.apple.ResourceForkにコンテンツを保存することができます。
あなたはこの拡張属性を含むすべてのファイルを見つけることができます:
拡張属性 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の実行を担当しています(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
: 無効化されたデーモンのリスト。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)