macOS Installers Abuse

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

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

Pkgの基本情報

macOSのインストーラーパッケージ(または.pkgファイルとしても知られる)は、macOSがソフトウェアを配布するために使用するファイル形式です。これらのファイルは、ソフトウェアがインストールおよび正常に実行するために必要なすべてのものを含む箱のようなものです。

パッケージファイル自体は、ターゲットコンピューターにインストールされるファイルとディレクトリの階層を保持するアーカイブです。また、設定ファイルのセットアップやソフトウェアの古いバージョンのクリーンアップなど、インストール前およびインストール後のタスクを実行するスクリプトも含めることができます。

階層

  • Distribution(xml): カスタマイズ(タイトル、ウェルカムテキストなど)およびスクリプト/インストールチェック

  • PackageInfo(xml): 情報、インストール要件、インストール場所、実行するスクリプトへのパス

  • Bill of materials(bom): ファイルのリスト、ファイルのアクセス許可とともにインストール、更新、または削除する

  • Payload(CPIOアーカイブgzip圧縮): PackageInfoからinstall-locationにインストールするファイル

  • Scripts(CPIOアーカイブgzip圧縮): インストール前およびインストール後のスクリプトおよび実行用に一時ディレクトリに展開されるその他のリソース。

解凍

# Tool to directly get the files inside a package
pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir"

# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"

# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts

DMGの基本情報

DMGファイル、またはApple Disk Imagesは、AppleのmacOSで使用されるディスクイメージのファイル形式です。DMGファイルは基本的にはマウント可能なディスクイメージ(独自のファイルシステムを含む)であり、通常は圧縮され、時には暗号化された生のブロックデータを含んでいます。DMGファイルを開くと、macOSはそれを物理ディスクとしてマウントし、その内容にアクセスできるようにします。

.dmg インストーラは多くの形式をサポートしているため、過去には脆弱性を含むものが悪用され、カーネルコードの実行を取得するために使用されたことがあります。

階層

DMGファイルの階層は、内容に基づいて異なることがあります。ただし、アプリケーションのDMGの場合、通常は次の構造に従います。

  • トップレベル:これはディスクイメージのルートです。通常、アプリケーションとmacOSのApplicationsフォルダへのリンクが含まれています。

  • アプリケーション(.app):これが実際のアプリケーションです。macOSでは、アプリケーションは通常、アプリケーションを構成する多くの個々のファイルとフォルダを含むパッケージです。

  • Applicationsリンク:これはmacOSのApplicationsフォルダへのショートカットです。これは、アプリケーションをインストールしやすくするためのものです。.appファイルをこのショートカットにドラッグしてアプリをインストールできます。

pkgの悪用による特権昇格

公開ディレクトリからの実行

たとえば、事前または事後のインストールスクリプトが**/var/tmp/Installerutil**から実行されている場合、攻撃者はそのスクリプトを制御できるため、実行されるたびに特権を昇格させることができます。また、別の類似の例:

AuthorizationExecuteWithPrivileges

これは、いくつかのインストーラやアップデータがrootとして何かを実行するために呼び出す公開関数です。この関数は、実行するファイルパスをパラメータとして受け入れますが、攻撃者がこのファイルを変更できれば、特権を昇格させるためにその実行を悪用することができます。

# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig

マウントによる実行

もしインストーラが/tmp/fixedname/bla/blaに書き込む場合、/tmp/fixedname上に所有者なしでマウントを作成することが可能です。これにより、インストール中に任意のファイルを変更してインストールプロセスを悪用することができます。

これの例としては、CVE-2021-26089があり、定期スクリプトを上書きしてルートとして実行することに成功しました。詳細は以下のトークをご覧ください: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl

マルウェアとしてのpkg

空のペイロード

単に**.pkg**ファイルを生成し、事前および事後インストールスクリプトを含め、ペイロードを含めないことが可能です。

Distribution xml内のJS

パッケージのdistribution xmlファイルに**<script>タグを追加することが可能で、そのコードが実行され、system.runを使用してコマンドを実行**することができます:

参考文献

Last updated