macOS Files, Folders, Binaries & Memory

htARTE(HackTricks AWS Red Team Expert) を通じてゼロからヒーローまでAWSハッキングを学ぶ

HackTricks をサポートする他の方法:

ファイル階層レイアウト

  • /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 Abuse

OS 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 ファイルの例)。

pagemacOS Bundles

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_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

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でディレクトリ内のファイルのフラグを確認できます。

  • uchguchangeフラグとして知られ、ファイルの変更や削除を防止します。設定するには: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(アクセス制御エントリ)が含まれています。

これらの権限をディレクトリに付与することができます:listsearchadd_fileadd_subdirectorydelete_childdelete_child。 およびファイルに対して:readwriteappendexecute

ファイルにACLが含まれている場合、権限をリスト表示する際に「+」が表示されます。

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_excludeItemkMD*などのさまざまなメタデータ

  • 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マーキングと一意のUUID

  • com.apple.decmpfs: MacOS: 透過的なファイル圧縮 (II/7)

  • com.apple.cprotect: *OS: ファイルごとの暗号化データ (III/11)

  • com.apple.installd.*: *OS: installdによって使用されるメタデータ、例: installTypeuniqueInstallID

リソースフォーク | macOS ADS

これはMacOSマシンでAlternate Data Streamsを取得する方法です。ファイル内のcom.apple.ResourceForkという拡張属性にコンテンツを保存することで、file/..namedfork/rsrcに保存できます。

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を使用してファイルを強制的に展開することができます。

Universal binaries & Mach-o Format

Mac OSのバイナリは通常、universal binariesとしてコンパイルされます。Universal binary同じファイル内で複数のアーキテクチャをサポートできます。

pagemacOS Universal binaries & Mach-O Format

macOS プロセスメモリ

macOS メモリダンピング

pagemacOS Memory Dumping

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 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