Windows サンドボックスの使い方(その2:構成ファイル)
前回、「Windows サンドボックスの使い方(その1:概要)」の続きです。今回は構成ファイルについてです。
構成ファイルとは?
通常 Windows サンドボックスは毎回クリーンな状態で起動しますが、 起動するたびに毎回毎回同じような設定を手作業で行うのは面倒ですね。
Windows サンドボックスには、起動時に実行して欲しい構成内容を、構成ファイルと呼ばれるファイルに記述しておくと、 そのファイルの内容に従った構成でサンドボックスを起動してくれる機能があります。
構成ファイルの作り方
構成ファイルは、拡張子 .wsb で、中身はXMLです。
テキストファイルなので、メモ帳や Visual Studio Code などのお好きなエディタで作成できます。
XMLなのでコメントも書けます。
Configuration
タグをルートとし、その中に設定内容のタグを記述していきます。
例えば、サンドボックス内のネットワークを無効にした状態でサンドボックスを起動したい場合は、下記のような記述になります。
<Configuration> <!-- ネットワーク:無効 --> <Networking>Disable</Networking> </Configuration>
構成ファイルの使い方
構成ファイルを使用するには、使用したい構成ファイルをダブルクリック(実行)するだけです。 すると、その構成ファイルの内容に従って Windows サンドボックスが起動します。
構成ファイルのタグの書き方
vGPU(仮想GPU)
仮想化されたGPUを有効または無効にします。 ホストのGPUをサンドボックスと共有するかどうかを設定します。 無効になっている場合、サンドボックスはソフトウェアレンダリングを使用します。
書式
<vGPU>value</vGPU>
サポートされている値
値 | 説明 |
---|---|
Enable | サンドボックス内の仮想GPUを有効にします。 |
Disable |
サンドボックス内の仮想GPUを無効にします。 この値が設定されている場合、サンドボックスはソフトウェアレンダリングを使用します。 これは、仮想GPUよりも遅い可能性があります。 |
Default | デフォルト値です。現時点では「Disable」と同じ意味です。 |
メモリ(MB)
サンドボックスに割り当てるメモリ量を MB 単位(メガバイト単位)で指定します。 指定されたメモリ量がサンドボックスを起動するには不十分な場合は、必要な最小量に自動的に増加します。 自動的に増加するので、特に設定する必要はないかもしれません。
書式
<MemoryInMB>value</MemoryInMB>
ネットワーク
サンドボックス内のネットワークアクセスを有効または無効にします。 有効の場合、信頼されていないアプリケーションが内部ネットワークに公開される可能性があります。 とはいえ、ネットワークが無効だとほぼ何もできない環境になってしまいます。 後述の共有フォルダーやログオンコマンド等を使用し、オフライン状態でも問題ない環境が作れるのならば、 無効にするのもありかもしれません。
書式
<Networking>value</Networking>
サポートされている値
値 | 説明 |
---|---|
Disable | サンドボックス内のネットワークを無効にします。 |
Default | デフォルト値です。サンドボックス内のネットワークが有効になります。 |
オーディオ入力
ホストのマイク入力をサンドボックスと共有するかどうかを設定します。 マイクが必要なアプリはあまり多くないので、セキュリティ上の観点から無効にしておいた方が良いかもしれません。 デフォルトでは有効になっています。
書式
<AudioInput>value</AudioInput>
サポートされている値
値 | 説明 |
---|---|
Enable |
サンドボックス内のオーディオ入力を有効にします。 この値が設定されている場合、サンドボックスはユーザーからのオーディオ入力を受信できます。 マイクを使用するアプリケーションでは、この機能が必要な場合があります。 |
Disable |
サンドボックス内のオーディオ入力を無効にします。 この値が設定されている場合、サンドボックスはユーザーからのオーディオ入力を受信できません。 マイクを使用するアプリケーションは、この設定で正しく機能しない場合があります。 |
Default | デフォルト値です。現時点では「Enable」と同じ意味です。 |
ビデオ入力
ホストの Web カメラに入力された映像を、サンドボックスと共有するかどうかを設定します。 Web カメラが必要なアプリはあまり多くないので、セキュリティ上の観点から無効にしておいた方が良いかもしれません。 デフォルトでは無効になっています。
書式
<VideoInput>value</VideoInput>
サポートされている値
値 | 説明 |
---|---|
Enable | サンドボックス内のビデオ入力を有効にします。 |
Disable |
サンドボックス内のビデオ入力を無効にします。 ビデオ入力を使用するアプリケーションは、サンドボックスで正しく機能しない可能性があります。 |
Default | デフォルト値です。現時点では「Disable」と同じ意味です。 |
プリンターリダイレクト
ホストのプリンターを、サンドボックスと共有するかどうかを設定します。 プリンターが必要なアプリはあまり多くないので、セキュリティ上の観点から無効にしておいた方が良いかもしれません。 デフォルトでは無効になっています。
書式
<PrinterRedirection>value</PrinterRedirection>
サポートされている値
値 | 説明 |
---|---|
Enable | プリンターの共有を有効にします。 サンドボックス内のビデオ入力を有効にします。 |
Disable | プリンターの共有を無効にします。 この値を設定すると、サンドボックスはホストからプリンターを表示できません。 |
Default | デフォルト値です。現時点では「Disable」と同じ意味です。 |
クリップボードリダイレクト
ホストのクリップボードを、サンドボックスと共有するかどうかを設定します。 クリップボードというのは、簡単に言えば Ctrl + C でコピーしたり Ctrl + V でペースト(貼り付け)したりしている内容のことです。 無効にすると、コピー&ペースト(貼り付け)ができなくなるので、ホストとサンドボックスの間でのファイルのやり取りが難しくなります。 そもそもファイルのやり取りが不要な場合や、後述の共有フォルダーを使ってやり取りができるのであれば、無効でも問題ないかもしれません。
書式
<ClipboardRedirection>value</ClipboardRedirection>
サポートされている値
値 | 説明 |
---|---|
Disable |
サンドボックス内のクリップボード リダイレクトを無効にします。 この値が設定されている場合、ホストとサンドボックスの間のコピー/貼り付けは制限されます。 |
Default |
デフォルト値です。サンドボックス内のクリップボード リダイレクトが有効になります。 この値が設定されている場合、ホストとサンドボックスの間のコピー/貼り付けは許可されます。 |
保護されたクライアント
ホストとサンドボックスの間ではリモートデスクトップと同じ通信方式(RDP)が使用されていますが、 その通信に追加のセキュリティ設定(証明書を使用した暗号化など)を適用し攻撃対象を減らすことができます。
書式
<ProtectedClient>value</ProtectedClient>
サポートされている値
値 | 説明 |
---|---|
Enable |
保護されたクライアントモードで実行します。 この値が設定されている場合、サンドボックスは追加のセキュリティ設定を有効にして実行されます。 |
Disable | 標準モードで実行します。 |
Default | デフォルト値です。現時点では「Disable」と同じ意味です。 |
共有フォルダー
ホストとサンドボックスの間で、フォルダを共有します。 サンドボックスからホストのフォルダにアクセスが可能になります。 フォルダを共有すると、サンドボックス内の悪意のあるアプリが、ホストに影響を与えたり、ホストのデータを盗む可能性があります。
複数のフォルダーを指定することができます。 現時点では、相対パスはサポートされていません。 絶対パスで記述する必要があります。
書式
<MappedFolders> <MappedFolder> <HostFolder>absolute path to the host folder</HostFolder> <SandboxFolder>absolute path to the sandbox folder</SandboxFolder> <ReadOnly>value</ReadOnly> </MappedFolder> <MappedFolder> ... </MappedFolder> </MappedFolders>
HostFolder
サンドボックスに共有するホスト上のフォルダーを指定します。 フォルダーがホスト上に既に存在している必要があります。 存在しない場合、サンドボックスの起動に失敗します。
SandboxFolder
サンドボックス上のフォルダーを指定します。 フォルダーが存在しない場合は作成されます。 指定されていない場合、フォルダーはサンドボックスのデスクトップに割り当てられます。
ReadOnly
サポートされている値は true もしくは false です。 true の場合、サンドボックスから共有フォルダーへのアクセスが読み込み専用になります。 false の場合、サンドボックスから共有フォルダーへ書き込むことが可能になります。 デフォルト値は false です。
ログオンコマンド
Windows サンドボックスのログオン後(つまりサンドボックス起動時)に、自動的に呼び出されるコマンドを指定します。
サンドボックス内の実行可能ファイルまたはスクリプトへのパスが指定できますが、1つしか指定できません。 非常に単純なコマンド(実行可能ファイルやスクリプトの起動など)は機能しますが、 複数の手順を含む複雑なシナリオを実行するためには、別のスクリプトファイルに記載し、共有フォルダーを介して、このログオンコマンドで実行する必要があります。
書式
<LogonCommand> <Command>command to be invoked</Command> </LogonCommand>
構成ファイルのサンプル
説明だけだとイメージしづらいと思うので、実際に構成ファイルの例を2つほど紹介します。
ちなみに、サンドボックス内でのユーザーは必ず「WDAGUtilityAccount」になります。 そのため、サンドボックス内のユーザーのディレクトリのパスは「C:\Users\WDAGUtilityAccount\~」のようになります。
例1:ダウンロードフォルダーを共有する
ホストとサンドボックスで、ダウンロードフォルダーを共有する例です。
Downloads.wsb
サンドボックスの構成ファイルです。
<Configuration> <!-- 仮想GPU:無効 --> <VGpu>Disable</VGpu> <!-- ネットワーク:無効 --> <Networking>Disable</Networking> <!-- 共有フォルダー --> <MappedFolders> <!-- ホストの「C:\Users\Public\Downloads」を共有フォルダーとして、 --> <!-- サンドボックスの「C:\Users\WDAGUtilityAccount\Downloads」に、 --> <!-- 読み込み専用で割り当て --> <MappedFolder> <HostFolder>C:\Users\Public\Downloads</HostFolder> <SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads</SandboxFolder> <ReadOnly>true</ReadOnly> </MappedFolder> </MappedFolders> <!-- サンドボックス起動時 --> <!-- エクスプローラーで、その共有フォルダーを開く --> <LogonCommand> <Command>explorer.exe C:\Users\WDAGUtilityAccount\Downloads</Command> </LogonCommand> </Configuration>
実行結果
例2:Visual Studio Code をインストール
サンドボックス起動時に、複数の手順を実行する例です。 ログオンコマンドで、別のスクリプトを実行します。
VSCodeInstall.cmd
ログオンコマンドから呼ばれる別のスクリプトです。
REM Download Visual Studio Code curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\Users\WDAGUtilityAccount\Desktop\vscode.exe REM Install and run Visual Studio Code C:\Users\WDAGUtilityAccount\Desktop\vscode.exe /verysilent /suppressmsgboxes
VSCode.wsb
サンドボックスの構成ファイルです。
<Configuration> <!-- 共有フォルダー --> <MappedFolders> <!-- ホストの「C:\SandboxScripts」を共有フォルダーとして、 --> <!-- サンドボックスのデスクトップ(C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts)に、 --> <!-- 読み込み専用で割り当てる --> <!-- VSCodeInstall.cmd を置いておく --> <MappedFolder> <HostFolder>C:\SandboxScripts</HostFolder> <ReadOnly>true</ReadOnly> </MappedFolder> </MappedFolders> <!-- サンドボックス起動時 --> <!-- 共有フォルダーの VSCodeInstall.cmd を実行 --> <LogonCommand> <Command>C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\VSCodeInstall.cmd</Command> </LogonCommand> </Configuration>