
Swiftで書かれたMacOS用のユーザーモードアプリケーション認可システム
Sinterは、macOS 10.15以降向けの100%ユーザーモードのエンドポイントセキュリティエージェントで、Swiftで記述されています。
Sinterは、ユーザーモードのEndpointSecurity APIを使用して、セキュリティ関連のイベントタイプセットについて、macOSカーネルからの認可コールバックを購読および受信します。現在のバージョンでは、プロセス実行の許可/拒否をサポートしています。将来のバージョンでは、ファイル、ソケット、カーネルイベントなどの他のタイプのイベントもサポートする予定です。
Sinterは開発中です。 フィードバックをお待ちしています。貢献したい、または開発を支援するためにスポンサーになりたい場合は、ご連絡ください。
今後の予定機能:
プロセスの許可/拒否を実現する最初のオープンソースmacOSソリューションはGoogle Santaでした。私たちはSantaのファンであり、過去にそのコードベースに貢献したことがあります。しかし、長い間、macOSコミュニティの多くは、プロセスイベントだけでなく、より多くの イベントを追跡および管理するためのオープンソースソリューションを求めてきました。
macOS 10.15のEndpointSecurity APIは、そのような機能を構築するための理想的なプラットフォームであると考えました。厳密にユーザーモードAPIを基盤としてゼロから始めることで、よりシンプルな設計を試み、より安全なメモリ処理と優れたパフォーマンスを備えた最新のプログラミング言語を使用することができました。そこで、Sinter(サンタクロースの別名である「Sinter Klausen」の略)の開発を開始しました。
Releasesページからpkgインストーラリンクを使用して、Sinterの最新バージョンをダウンロードしてインストールしてください。
Sinterをインストールした後、Sinter.appに対して「フルディスクアクセス」の権限を有効にする必要があります。これを行うには、システム環境設定を開き、セキュリティとプライバシー、プライバシータブ、フルディスクアクセスの順に進み、Sinter.appの項目をチェックします。MDMを使用している場合は、エンドポイントでこの権限を自動的に有効にでき、ユーザーの操作は不要です。
Sinterでは、設定ファイルを/etc/sinter/config.jsonに配置する必要があります。ソースツリーに./config/config.jsonとしてサンプルが提供されています。
{
"Sinter": {
"decision_manager": "local",
"logger": "filesystem",
"allow_unsigned_programs": "true",
"allow_invalid_programs": "true",
"allow_unknown_programs": "true",
"allow_expired_auth_requests": "true",
"allow_misplaced_applications": "true",
"config_update_interval": 600,
"allowed_application_directories": [
"/bin",
"/usr/bin",
"/usr/local/bin",
"/Applications",
"/System",
"/usr/sbin",
"/usr/libexec",
],
},
"FilesystemLogger": {
"log_file_path": "/var/log/sinter.log",
},
"RemoteDecisionManager": {
"server_url": "https://server_address:port",
"machine_identifier": "identifier",
},
"LocalDecisionManager": {
"rule_database_path": "/etc/sinter/rules.json",
}
}
決定マネージャプラグインは、decision_managerの値を変更することで選択できます。localプラグインを使用すると、LocalDecisionManager設定セクションが有効になり、Sinterは指定されたパスにあるローカルのルールデータベースを使用するようになります。代わりにsync-serverプラグインを使用すると、Santa互換の同期サーバーを使用することができ、RemoteDecisionManager設定セクションが有効になり、サーバーURLとマシン識別子を設定できます。
現在、2つのロガープラグインが実装されています。
許可されたフォルダから起動されなかったアプリケーションをログに記録し、必要に応じて拒否するようにSinterを設定できます。
sudo /Applications/Sinter.app/Contents/MacOS/Sinter --install-notification-server/Applications/Sinter.app/Contents/MacOS/Sinter --start-notification-serverSinterではモードは実装されておらず、すべてルールベースです。次の設定を調整することで、監視機能を実装できます。
ルールデータベースはJSON形式で記述します。以下は、cmake.orgのCMakeアプリケーションバンドルを許可するデータベースの例です。
{
"rules": [
{
"rule_type": "BINARY",
"policy": "ALLOWLIST",
"sha256": "BDD0AF132D89EA4810566B3E1E0D1E48BAC6CF18D0C787054BB62A4938683039",
"custom_msg": "CMake"
}
]
}
Sinterは現在、BINARYルールのみをサポートしており、ALLOWLISTまたはDENYLISTポリシーを使用します。コードディレクトリハッシュ値は、codesignツールの出力から取得できます(例:codesign -dvvv /Applications/CMake.app)。CLIツールは完全なSHA256ハッシュを取得できますが、カーネル/EndpointSecurity APIは最初の20バイトに制限されていることに注意してください。
Sinterのビルドには、Appleが組織に付与する必要がある特定のコード署名証明書と権限が必要です。ただし、SIPを無効にしたテストシステム上でローカルに実行するために、ソースからビルドすることは可能です。手順については、Sinter wikiを参照してください。
SinterはAGPLv3ライセンスの下でライセンスされ、配布されています。条件の例外をお求めの場合は、お問い合わせください。