LoginSignup
1
0

macOS App Sandboxについて(Flutterを書いていたら気になったので)調べた

Last updated at Posted at 2023-08-10

結論

答えはここ(公式ドキュメント)に書いてあった。
以下要約。google翻訳した。

App Sandboxは、 macOSが提供し、カーネルレベルで強制するアクセス制御テクノロジです。サンドボックスの主な機能は、ユーザーが侵害されたアプリを実行した場合に、システムとユーザーのデータへの損害を抑えることです。サンドボックスはアプリに対する攻撃を防ぐことはできませんが、アプリが適切に機能するために必要な最小限の権限セットに制限することで、攻撃が成功した場合に引き起こされる被害を軽減します。

macOSのセキュリティの1つ。
Mac App Store を通じてmacOSアプリを配布するには、App Sandbox 機能を有効にする必要がある。
つまりApp Sandbox の権限許可がないと、端末の通信、カメラやマイクなどの機能、ファイルへのアクセスなどは使えないということだ。

知っておいて損はなさそうだ。

そもそもサンドボックスとは何か

こちらに詳しく書かれていた。

引用すると、以下のようになる。

  • Sandbox とは、隔離された領域でプログラムを実行する技術のこと
    • 問題発生時においてもほかのプログラムに影響を及ぼさない
    • ファイルの読み書き、マイクやカメラへのアクセス等が要求される際、明示的許可がない場合はサンドボックス内で実行されるプログラムによるアクセスを制限する
  • 受信メールをサンドボックスで解析し、マルウェアを検知するのは代表的な例
  • モバイル端末ではiOSやAndroidといったOSが、アプリをサンドボックス内で実行するように設計されている
    • 公式のアプリストアからダウンロードしたアプリであっても、サードパーティが開発したアプリは不具合が含まれる可能性があるため、セキュリティリスクが懸念される。そのリスクをOS側で防御する、という思想となっているのだ

Flutterにおける macOS App Sandbox

Flutterプロジェクト内で記述されているファイルは2つある。

  • DebugProfile.entitlements
  • Release.entitlements
    名前の通り、DebugとReleaseでサンドボックスの設定を分けることができるらしい。
    初期の中身は今の通り。
DebugProfile.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.app-sandbox</key>
	<true/>
	<key>com.apple.security.cs.allow-jit</key>
	<true/>
	<key>com.apple.security.network.server</key>
	<true/>
</dict>
</plist>
Release.entitlements
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>com.apple.security.app-sandbox</key>
	<true/>
</dict>
</plist>

中身はxmlで記述されている。
<dict> </dict>内に記述していくようだ。
記述する内容については、こちら(公式APIドキュメント)に記載されていた。

App Sandbox API について

要約して以下にまとめた。値は全てboolean (true or false)。

必須項目

key  説明
com.apple.security.app-sandbox Sandboxそのものを使用するか

Network

key  説明
com.apple.security.network.server 受信ネットワーク接続をリッスンできるか
com.apple.security.network.client 発信ネットワーク接続を開くことができるか

Hardware

key  説明
com.apple.security.device.camera 内蔵・外部カメラを使用できるかどうか
com.apple.security.device.microphone マイクを使用できるかどうか
com.apple.security.device.usb USB デバイスを使用できるかどうか
com.apple.security.print ドキュメントを印刷できるかどうか
com.apple.security.device.bluetooth Bluetooth デバイスを使用できるかどうか

App Data

key  説明
com.apple.security.personal-information.addressbook 連絡先に読み取り/書き込みできるかどうか
com.apple.security.personal-information.location 位置情報にアクセスできるかどうか
com.apple.security.personal-information.calendars カレンダーに読み取り/書き込みできるかどうか

File Access

key  説明
com.apple.security.files.user-selected.read-only ユーザーが [開く] ダイアログまたは [保存] ダイアログを使用して選択したファイルに対してアプリが読み取り専用アクセスできるかどうか
com.apple.security.files.user-selected.read-write ユーザーが [開く] または [保存] ダイアログを使用して選択したファイルに対してアプリが読み取り/書き込みアクセスできるかどうか
com.apple.security.files.downloads.read-only downloads フォルダーへの読み取り専用アクセス権を持っているかどうか
com.apple.security.files.downloads.read-write downloads フォルダーへの読み取り/書き込みアクセス権を持っているかどうか
com.apple.security.assets.pictures.read-only pictures フォルダーへの読み取り専用アクセス権を持っているかどうか
com.apple.security.assets.pictures.read-write pictures フォルダーへの読み取り/書き込みアクセス権を持っているかどうか
com.apple.security.assets.music.read-only Music フォルダーに読み取り専用アクセスできるかどうか
com.apple.security.assets.music.read-write Music フォルダーへの読み取り/書き込みアクセスを許可できるかどうか
com.apple.security.assets.movies.read-only Movies フォルダーへの読み取り専用アクセス権を持っているかどうか
com.apple.security.assets.movies.read-write Movies フォルダーへの読み取り/書き込みアクセス権を持っているかどうか

NSAppDataUsageDescription

まだBeta版だが、下記もある。型はString。

key  説明
NSAppDataUsageDescription アプリが他のアプリのサンドボックス コンテナー内のファイルにアクセスする必要がある理由をユーザーに伝えるメッセージ

以上。また何かあれば追記します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0