다음을 통해 공유


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 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(메가바이트)로 사용할 수 있는 메모리 양을 지정합니다.

<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

다음 구성 파일은 약간 더 복잡한 LogonCommand 설정이 필요한 Visual Studio Code를 샌드박스에 설치합니다.

두 개의 폴더가 샌드박스에 매핑됩니다. 첫 번째(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 스크립트를 만들고 디렉터리에 로 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>