Windows 沙箱設定
Windows 沙箱支援簡單的組態檔,可為沙箱提供最少的自定義參數集。 這項功能可以與 Windows 10 組建 18342 或 Windows 11 搭配使用。 Windows 沙箱組態檔會格式化為 XML,並透過 .wsb
擴展名與沙箱相關聯。
組態檔可讓使用者控制 Windows 沙箱的下列層面:
- vGPU (虛擬化 GPU) :啟用或停用虛擬化 GPU。 如果停用 vGPU,沙箱會使用 Windows 進階點陣化平臺 (WARP) 。
- 網路:啟用或停用沙箱內的網路存取。
- 對應的資料夾:使用 讀 取或 寫 入許可權從主機共享資料夾。 公開主機目錄可能會允許惡意軟體影響系統或竊取數據。
- 登入命令:Windows 沙箱啟動時所執行的命令。
- 音訊輸入:將主機的麥克風輸入共用到沙盒中。
- 影片輸入:將主機的網路攝影機輸入共用到沙盒中。
- 受保護的用戶端:將增加的安全性設定放在沙箱的遠端桌面通訊協定 (RDP) 會話上。
- 印表機重新導向:將印表機從主機共用到沙箱。
- 剪貼簿重新導向:與沙盒共用主機剪貼簿,以便來回貼上文字和檔案。
- 以 MB 為單位的記憶體:指派給沙箱的記憶體數量,以 MB 為單位。
注意
目前無法設定沙箱視窗的大小。
建立組態檔
若要建立組態檔:
開啟純文字編輯器或原始碼編輯器 (例如記事本、Visual Studio Code 等 )
插入下列幾行:
<Configuration> </Configuration>
在兩行之間新增適當的設定文字。 如需詳細資訊,請參閱 範例。
以所需的名稱儲存盤案,但請確定其擴展名為
.wsb
。 在記事本中,您應該將檔名和擴展名括在雙引號內,例如"My config file.wsb"
。
使用組態檔
若要使用組態檔,請按兩下它,根據其設定啟動 Windows 沙箱。 您也可以透過命令行叫用它,如下所示:
C:\Temp> MyConfigFile.wsb
關鍵詞、值和限制
vGPU
啟用或停用 GPU 共用。
<vGPU>value</vGPU>
支援的值:
- 啟用:在沙箱中啟用 vGPU 支援。
- 停用:停用沙箱中的 vGPU 支援。 如果設定此值,沙箱會使用軟體轉譯,這可能會比虛擬化 GPU 慢。
- 違約 此值是 vGPU 支援的預設值。 目前,此預設值表示已啟用 vGPU。
注意
啟用虛擬化 GPU 可能會增加沙箱的攻擊面。
網路功能
啟用或停用沙盒中的網路功能。 您可以停用網路存取,以減少沙箱所公開的攻擊面。
<Networking>value</Networking>
支援的值:
- 啟用:在沙箱中啟用網路功能。
- 停用:停用沙箱中的網路功能。
- 預設值:此值是網路支援的預設值。 此值可藉由在主機上建立虛擬交換器,並透過虛擬 NIC 將沙箱連線到它,來啟用網路功能。
注意
啟用網路功能可能會將不受信任的應用程式公開至內部網路。
對應的資料夾
資料夾的陣列,每個資料夾都代表主計算機上與指定路徑上的沙箱共用的位置。 目前不支持相對路徑。 如果未指定路徑,則資料夾會對應至容器使用者的桌面。
<MappedFolders>
<MappedFolder>
<HostFolder>absolute or relative 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,則會從容器內強制執行共用資料夾的唯讀存取權。 支援的值:true false/。 默認為 false。
注意
從主機對應的檔案和資料夾可能會遭到沙箱中的應用程式入侵,或可能會影響主機。
登入命令
指定在沙箱登入之後自動叫用的單一命令。 沙箱中的應用程式會在容器用戶帳戶下執行。 容器用戶帳戶應該是系統管理員帳戶。
<LogonCommand>
<Command>command to be invoked</Command>
</LogonCommand>
命令:容器內將在登入後執行之可執行檔或腳本的路徑。
注意
雖然非常簡單的命令可以 (例如啟動可執行檔或腳本) ,但涉及多個步驟的更複雜案例應該放在腳本檔案中。 此腳本檔案可以透過共用資料夾對應至容器,然後透過 LogonCommand 指示詞執行。
音訊輸入
啟用或停用沙盒的音訊輸入。
<AudioInput>value</AudioInput>
支援的值:
- 啟用:在沙箱中啟用音訊輸入。 如果設定此值,沙箱可以接收來自使用者的音訊輸入。 使用麥克風的應用程式可能需要這項功能。
- 停用:停用沙盒中的音訊輸入。 如果設定此值,沙箱就無法接收使用者的音訊輸入。 使用麥克風的應用程式可能無法使用此設定正常運作。
- 預設值:此值是音訊輸入支援的預設值。 目前,此預設值表示已啟用音訊輸入。
注意
將主機音訊輸入公開至容器可能會有安全性影響。
視訊輸入
啟用或停用沙盒的視訊輸入。
<VideoInput>value</VideoInput>
支援的值:
- 啟用:在沙箱中啟用影片輸入。
- 停用:停用沙箱中的視訊輸入。 使用視訊輸入的應用程式可能無法在沙盒中正常運作。
- 預設值:此值是視訊輸入支持的預設值。 目前,此預設值表示已停用視訊輸入。 使用視訊輸入的應用程式可能無法在沙盒中正常運作。
注意
將主機視訊輸入公開至容器可能會有安全性影響。
受保護的用戶端
啟用受保護的用戶端模式時,沙箱會在 AppContainer隔離 執行環境內執行,以新增一層新的安全性界限。
AppContainer 隔離提供認證、裝置、檔案、網路、進程和窗口隔離。
<ProtectedClient>value</ProtectedClient>
支援的值:
- 啟用:在受保護的用戶端模式中執行 Windows 沙箱。 如果設定此值,沙箱會在AppContainer隔離中執行。
- 停用:在標準模式中執行沙箱,而不需要額外的安全性防護功能。
- 預設值:此值是受保護用戶端模式的預設值。 目前,此預設值表示沙箱不會在受保護的用戶端模式中執行。
注意
此設定可能會限制使用者在沙箱中複製/貼上檔案的能力。
印表機重新導向
啟用或停用從主機到沙箱的印表機共用。
<PrinterRedirection>value</PrinterRedirection>
支援的值:
- 啟用:啟用將主機印表機共用到沙箱。
- 停用:停用沙盒中的印表機重新導向。 如果設定此值,沙箱就無法從主機檢視印表機。
- 預設值:此值是印表機重新導向支持的預設值。 此預設值目前表示印表機重新導向已停用。
剪貼簿重新導向
啟用或停用與沙箱共用主機剪貼簿。
<ClipboardRedirection>value</ClipboardRedirection>
支援的值:
- 啟用:啟用與沙箱共用主機剪貼簿。
- 停用:停用沙盒中的剪貼簿重新導向。 如果設定此值,則會限制沙箱中的複製/貼上。
- 預設值:此值是剪貼簿重新導向的預設值。 目前,默 認允許在主機和沙盒之間複製/貼上。
以 MB 為單位的記憶體
指定沙箱可以使用 MB (MB) 記憶體數量。
<MemoryInMB>value</MemoryInMB>
如果指定的記憶體值不足以啟動沙箱,則會自動增加為所需的最小數量。
範例
範例 1
下列組態檔可用來輕鬆地測試沙箱內下載的檔案。 為了達到這項測試,網路和 vGPU 會停用,而且允許沙箱只讀存取共用下載資料夾。 為了方便起見,登入命令會在啟動時開啟沙箱內的 downloads 資料夾。
Downloads.wsb
<Configuration>
<vGpu>Disable</vGpu>
<Networking>Disable</Networking>
<MappedFolders>
<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,這需要稍微複雜的LogonCommand安裝程式。
兩個資料夾會對應到沙箱中;第一個 (SandboxScripts) 包含安裝和執行 Visual Studio Code 的VSCodeInstall.cmd。 第二個資料夾 (CodingProjects) 假設包含開發人員想要使用 Visual Studio Code 修改的項目檔。
Visual Studio Code 安裝程式腳本已對應至沙盒後,LogonCommand 就可以參考它。
VSCodeInstall.cmd
將 VS Code 下載到 downloads
資料夾,並從 downloads
資料夾執行安裝。
REM Download Visual Studio Code
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\users\WDAGUtilityAccount\Downloads\vscode.exe
REM Install and run Visual Studio Code
C:\users\WDAGUtilityAccount\Downloads\vscode.exe /verysilent /suppressmsgboxes
VSCode.wsb
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\SandboxScripts</HostFolder>
<SandboxFolder>C:\Users\WDAGUtilityAccount\Downloads\sandbox</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
<MappedFolder>
<HostFolder>C:\CodingProjects</HostFolder>
<SandboxFolder>C:\Users\WDAGUtilityAccount\Documents\Projects</SandboxFolder>
<ReadOnly>false</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>C:\Users\WDAGUtilityAccount\Downloads\sandbox\VSCodeInstall.cmd</Command>
</LogonCommand>
</Configuration>
範例 3
下列組態檔會以登入命令執行 PowerShell 腳本,以交換左手使用者的主要滑鼠按鈕。
C:\sandbox
主機上的資料夾會對應至 C:\sandbox
沙箱中的資料夾,因此 SwapMouse.ps1
可以在沙箱組態檔中參考腳本。
SwapMouse.ps1
使用下列程式代碼建立 PowerShell 文稿,並將它儲存在 目錄中 C:\sandbox
作為 SwapMouse.ps1
。
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
$SwapButtons = Add-Type -MemberDefinition @'
[DllImport("user32.dll")]
public static extern bool SwapMouseButton(bool swap);
'@ -Name "NativeMethods" -Namespace "PInvoke" -PassThru
$SwapButtons::SwapMouseButton(!([System.Windows.Forms.SystemInformation]::MouseButtonsSwapped))
SwapMouse.wsb
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>C:\sandbox</HostFolder>
<SandboxFolder>C:\sandbox</SandboxFolder>
<ReadOnly>True</ReadOnly>
</MappedFolder>
</MappedFolders>
<LogonCommand>
<Command>powershell.exe -ExecutionPolicy Bypass -File C:\sandbox\SwapMouse.ps1</Command>
</LogonCommand>
</Configuration>