システム拡張機能 - 概要とガイド

システム拡張機能とは何ですか?

システム拡張は、 macOS Catalinaのカーネル拡張(kext)に代わる最新のものです。システム拡張機能により、Appleは、開発者が以前はkexts用に予約されていたタスクを実行するための新しいフレームワークを提供します。システム拡張の主な新しい利点は、カーネル空間ではなくユーザー空間で実行されることです。ユーザー空間で実行することにより、システム拡張機能は、 macOSの組み込みのセキュリティまたは安定性を損なうことはありません。 macOS Catalinaではまだkextが機能しますが、Appleは特定の種類のkextの使用を非推奨にしており、開発者は同等のフレームワークが利用可能になったときにkextをシステム拡張に移動するように努めるべきです。

現在、kextを置き換えるために利用できる3つの新しいシステム拡張フレームワークがあります。

  • DriverKit: 新しい DriverKit フレームワークを使用して、ユーザーが macOS Catalina 以降にインストールできる USB、シリアル、NIC、および HID デバイス用のドライバーを作成します。 DriverKit の詳細については、こちらをご覧ください。

  • ネットワーク拡張機能: コンテンツフィルター、DNS プロキシ、VPN クライアントなどのネットワーク拡張機能アプリを、 macOS Catalina 以降のシステム拡張機能として配布できるようになりました。 NetworkExtension の詳細については、こちらをご覧ください。

  • エンドポイントセキュリティ:ウイルス対策ソフトウェアを含むエンドポイントセキュリティクライアントは、新しいEndpointSecurity APIを活用してシステムイベントを監視し、さらにはブロックして、セキュリティポリシーにより準拠し、 macOS Catalina以降の潜在的な悪意のあるアクティビティから保護できるようになりました。 エンドポイントセキュリティの詳細はこちらをご覧ください。

これらの新しいフレームワークの外部で動作するkext(仮想化ソフトウェアなど)は、Appleが同等のシステム拡張フレームワークを提供するまで、kextsを使用し続ける必要があります。 

システム拡張は、別の構成プロファイルを使用して許可することもできます。 

カーネル拡張をまだ使用しているアプリケーションを使用している場合は、ソフトウェアベンダーに連絡して、システム拡張への移行を奨励することをお勧めします。

追加情報:

Kernel Extensionsの概要 - Apple Developer Documentation Archive

System Extensions - Apple Developer

カーネル拡張とは何ですか?

カーネル拡張 (kext と呼ばれることもあります) を使用すると、開発者はコードを macOS カーネルに動的に読み込むことができます。また、複雑なアプリを適切に機能させるための内部カーネルインターフェースへのアクセスも提供します。このようなアプリの例としてはParallels や VMware Fusion などの仮想化アプリケーションやハイパーバイザーが挙げられます。

カーネル拡張とシステム拡張の違い

ソフトウェアがシステム拡張機能を使用しているのか kext を使用しているのかわからない場合は、いくつかの方法があります。

  • ソフトウェアの製造元に問い合わせてください。

  • ソフトウェアをインストールしたら、以下のコマンドを実行して、すべてのアクティブなシステム拡張機能を一覧表示します。システム拡張機能がリストされていない場合、ソフトウェアはレガシーkext を利用している可能性があります。

systemextensionsctl list

以下は、システム拡張機能がインストールされていない場合に表示される出力の例です。

KandjiSupport@TestMac1 ~ % systemextensionsctl list0 extension(s)

以下は、システム拡張機能がインストールされている場合に表示される出力の例です。

KandjiSupport@TestMac1 ~ % systemextensionsctl list
1 extension(s)

--- com.apple.system_extension.endpoint_security

enabled active teamID bundleID (version) name [state]

* * 9PTGMPNXZ2 com.symantec.mes.systemextension 

 

[activated enabled]

システム拡張機能プロファイルの作成

次の手順に従って、アプリケーションのシステム拡張機能を事前に承認するシステム拡張機能プロファイルを Kandji で作成します。 

  1. Kandji テナントにログインし、ナビゲーション パネルの [ライブラリ] セクションに移動します。

  2. [新規追加] をクリックします

  3. システム拡張機能をクリックします。

  4. 「追加と設定」をクリックします 。

  5. 新しいプロファイルにわかりやすい名前を付けます(「システム拡張許可」など)。

  6. Blueprint ドロップダウンから含めるBlueprintを選択します。

  7. オプション: 「ユーザにシステム機能拡張の承認を許可する」の選択を解除すると、Mac 上のすべてのユーザ (ローカル管理者を含む) が、プロファイルで承認されていない追加のシステム機能拡張を承認できなくなります。また、このオプションを選択すると、ユーザーが以前に承認したシステム拡張機能は承認されません。

  8. チーム ID を入力します。これは、前述の systemextensionsctl list コマンドによって生成されたターミナル出力の 3 列目の識別子です。

  9. 必要に応じて、チーム ID に関連付ける [名前] を指定します。

  10. [システム拡張] 部分では、オプションで [すべてのシステム拡張を承認] のデフォルト値を変更できます。 このオプションをデフォルト設定のままにしておくと、指定したチーム ID からのシステム拡張が事前承認されます。任意で、このオプションを次のいずれかに設定できます。

    • 特定のシステム拡張を許可:承認する特定のシステム拡張機能の正確なバンドル ID を指定できます。上記の systemextensionsctl list コマンドによって生成された バンドル ID を使用します。また、必要に応じて、これらの特定の拡張機能の 1 つ以上を、 Kandji やベンダー提供のパッケージなどの管理ツールによって自動的に削除できるようにすることもできます。

    • 特定のシステム拡張タイプを許可:開発者から、事前承認が必要なシステム拡張の種類 (エンドポイントセキュリティ拡張、ドライバー拡張、ネットワーク拡張など) を指定できます。Symantecの例では、上記のsystemextensionsctl listコマンドによって生成された拡張タイプと一致するため、エンドポイントセキュリティ拡張タイプを承認します。必要に応じて、[チーム ID の追加] ボタンを選択して、1 つのプロファイルで追加のシステム拡張機能を許可できます。

  11. 「保存」をクリックします。