macOS 10.15 から有効な EndpointSecurity API(SystemExtension.framework)
https://developer.apple.com/jp/system-extensions/
macOS 10.15 から、従来のカーネル拡張(KEXT)を使わずに、ユーザーランドで動作するソフトでシステムイベントを監視(おそらくイベントの許可/禁止も)できるようになった。
https://developer.apple.com/contact/request/system-extension/
まず Apple に SystemExtension.framework / EndpointSecurity API の使用リクエストを出し、許可される必要がある。
https://developer.apple.com/documentation/endpointsecurity
プロジェクトで Endpoint Security API を使用するには、以下の2つをリンクする。
- SystemExtension.framwork
- libEndpointSecurity.tdb
entitlements に com.apple.developer.endpoint-security.client = YES を設定する。
※Apple に API リクエストが許可されていないと、アプリがただしく起動しない。
従来の KEXT を使用してシステム監視(アンチウィルスソフトなど)する場合より SystemExtension.framework を使用するメリット
- Kernel extension で機能を実現した場合、ソフトはカーネルランドで実行されるため、ソフトの処理が遅いと OS 全体も遅くなってしまうなど OS の安定性に関わる現象が起きる。その分、実装もシビアになる。
- ユーザランド実行になるとここが、そこまでシビアではなくなる?
- Kernel extension 由来のセキュリティ問題がある場合、カーネル空間でその問題は発生するので OS デベロッパ(Apple)、ソフトデベロッパの責務の線引きが不明瞭になる。
不明な点
https://developer.apple.com/documentation/endpointsecurity/client?language=objc