Windows 샌드박스 구성

Windows 샌드박스 샌드박스에 대한 최소한의 사용자 지정 매개 변수 집합을 제공하는 간단한 구성 파일을 지원합니다. 이 기능은 Windows 10 빌드 18342 또는 Windows 11 사용할 수 있습니다. Windows 샌드박스 구성 파일은 XML 형식으로 지정되며 파일 확장자를 .wsb 통해 샌드박스와 연결됩니다.

구성 파일을 사용하면 사용자가 Windows 샌드박스 다음과 같은 측면을 제어할 수 있습니다.

  • vGPU(가상화된 GPU): 가상화된 GPU를 사용하거나 사용하지 않도록 설정합니다. vGPU를 사용하지 않도록 설정하면 샌드박스에서 WARP(Windows Advanced Rasterization Platform)를 사용합니다.
  • 네트워킹: 샌드박스 내에서 네트워크 액세스를 사용하거나 사용하지 않도록 설정합니다.
  • 매핑된 폴더: 읽기 또는 쓰기 권한이 있는 호스트의 폴더를 공유합니다. 호스트 디렉터리를 노출하면 악성 소프트웨어가 시스템에 영향을 미치거나 데이터를 도용할 수 있습니다.
  • 로그온 명령: Windows 샌드박스 시작할 때 실행되는 명령입니다.
  • 오디오 입력: 호스트의 마이크 입력을 샌드박스에 공유합니다.
  • 비디오 입력: 호스트의 웹캠 입력을 샌드박스에 공유합니다.
  • 보호된 클라이언트: RDP 세션의 향상된 보안 설정을 샌드박스에 배치합니다.
  • 프린터 리디렉션: 호스트에서 샌드박스로 프린터를 공유합니다.
  • 클립보드 리디렉션: 텍스트와 파일을 앞뒤로 붙여넣을 수 있도록 호스트 클립보드를 샌드박스와 공유합니다.
  • 메모리(MB): 샌드박스에 할당할 메모리 양(MB)입니다.

참고

현재 샌드박스 창의 크기는 구성할 수 없습니다.

구성 파일 만들기

구성 파일을 만들려면 다음을 수행합니다.

  1. 일반 텍스트 편집기 또는 소스 코드 편집기(예: 메모장, Visual Studio Code 등)를 엽니다.

  2. 다음 줄을 삽입합니다.

    <Configuration>
    </Configuration>
    
  3. 두 줄 사이에 적절한 구성 텍스트를 추가합니다. 자세한 내용은 올바른 구문과 아래 예제를 참조하세요.

  4. 원하는 이름으로 파일을 저장하지만 파일 이름 확장명은 인지 확인합니다 .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 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>

지원되는 값:

  • 사용: 샌드박스에서 비디오 입력을 사용하도록 설정합니다.
  • 사용 안 함: 샌드박스에서 비디오 입력을 사용하지 않도록 설정합니다. 비디오 입력을 사용하는 애플리케이션이 샌드박스에서 제대로 작동하지 않을 수 있습니다.
  • 기본값: 이 값은 비디오 입력 지원의 기본값입니다. 현재 이 기본값은 비디오 입력이 사용하지 않도록 설정되어 있음을 나타냅니다. 비디오 입력을 사용하는 애플리케이션이 샌드박스에서 제대로 작동하지 않을 수 있습니다.

참고

호스트 비디오 입력을 컨테이너에 노출하면 보안에 영향을 미칠 수 있습니다.

보호된 클라이언트

샌드박스 원격 데스크톱 클라이언트에 더 많은 보안 설정을 적용하여 공격 표면을 줄입니다.

<ProtectedClient>value</ProtectedClient>

지원되는 값:

  • 사용: 보호된 클라이언트 모드에서 Windows 샌드박스를 실행합니다. 이 값을 설정하면 샌드박스는 추가 보안 완화를 사용하도록 설정하여 실행됩니다.
  • 사용 안 함: 추가 보안 완화 없이 표준 모드에서 샌드박스를 실행합니다.
  • 기본값: 이 값은 보호된 클라이언트 모드의 기본값입니다. 현재 이 기본값은 샌드박스가 보호된 클라이언트 모드에서 실행되지 않음을 표시합니다.

참고

이 설정은 샌드박스에서 파일을 복사/붙여넣는 사용자의 기능을 제한할 수 있습니다.

프린터 리디렉션

호스트에서 샌드박스로 프린터 공유를 사용하거나 사용하지 않도록 설정합니다.

<PrinterRedirection>value</PrinterRedirection>

지원되는 값:

  • 사용: 호스트 프린터를 샌드박스에 공유할 수 있습니다.
  • 사용 안 함: 샌드박스에서 프린터 리디렉션을 사용하지 않도록 설정합니다. 이 값을 설정하면 샌드박스가 호스트에서 프린터를 볼 수 없습니다.
  • 기본값: 이 값은 프린터 리디렉션 지원의 기본값입니다. 현재 이 기본값은 프린터 리디렉션이 사용하지 않도록 설정되어 있음을 나타냅니다.

클립보드 리디렉션

샌드박스와 호스트 클립보드 공유를 사용하거나 사용하지 않도록 설정합니다.

<ClipboardRedirection>value</ClipboardRedirection>

지원되는 값:

  • 사용: 샌드박스와 호스트 클립보드를 공유할 수 있습니다.
  • 사용 안 함: 샌드박스에서 클립보드 리디렉션을 사용하지 않도록 설정합니다. 이 값을 설정하면 샌드박스의 복사/붙여넣기가 제한됩니다.
  • 기본값: 이 값은 클립보드 리디렉션의 기본값입니다. 현재 호스트와 샌드박스 간에 복사/붙여넣기를 기본값으로 사용할 수 있습니다.

메모리(MB)

샌드박스가 MB(메가바이트)로 사용할 수 있는 메모리 양을 지정합니다.

<MemoryInMB>value</MemoryInMB>

지정된 메모리 값이 샌드박스를 부팅하기에 충분하지 않은 경우 자동으로 필요한 최소 크기로 증가합니다.

예제 1

다음 구성 파일을 사용하여 샌드박스 내에서 다운로드한 파일을 쉽게 테스트할 수 있습니다. 이 테스트를 수행하려면 네트워킹 및 vGPU가 비활성화되고 샌드박스는 공유 다운로드 폴더에 대한 읽기 전용 액세스가 허용됩니다. 편의를 위해 로그온 명령은 시작 시 샌드박스 내에 다운로드 폴더를 엽니다.

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

vscode를 폴더에 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 스크립트를 만들고 디렉터리에 로 SwapMouse.ps1저장 C:\sandbox 합니다.

[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>