macOS Installers Abuse
Pkgの基本情報
macOSのインストーラーパッケージ(または.pkg
ファイルとしても知られる)は、macOSがソフトウェアを配布するために使用するファイル形式です。これらのファイルは、ソフトウェアがインストールおよび正常に実行するために必要なすべてのものを含む箱のようなものです。
パッケージファイル自体は、ターゲットコンピューターにインストールされるファイルとディレクトリの階層を保持するアーカイブです。また、設定ファイルのセットアップやソフトウェアの古いバージョンのクリーンアップなど、インストール前およびインストール後のタスクを実行するスクリプトも含めることができます。
階層
Distribution(xml): カスタマイズ(タイトル、ウェルカムテキストなど)およびスクリプト/インストールチェック
PackageInfo(xml): 情報、インストール要件、インストール場所、実行するスクリプトへのパス
Bill of materials(bom): ファイルのリスト、ファイルのアクセス許可とともにインストール、更新、または削除する
Payload(CPIOアーカイブgzip圧縮): PackageInfoから
install-location
にインストールするファイルScripts(CPIOアーカイブgzip圧縮): インストール前およびインストール後のスクリプトおよび実行用に一時ディレクトリに展開されるその他のリソース。
解凍
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として何かを実行するために呼び出す公開関数です。この関数は、実行するファイルのパスをパラメータとして受け入れますが、攻撃者がこのファイルを変更できれば、特権を昇格させるためにその実行を悪用することができます。
マウントによる実行
もしインストーラが/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