Windows 10 IoT Core에서 보안 부팅, BitLocker 및 Device Guard 사용

Windows 10 IoT Core에는 UEFI 보안 부팅, BitLocker 디바이스 암호화 및 Device Guard와 같은 보안 기능 제품이 포함되어 있습니다. 이렇게 하면 디바이스 작성기에서 다양한 유형의 공격에 복원력이 있는 완전히 잠긴 Windows IoT 디바이스를 만들 수 있습니다. 이러한 기능을 함께 사용하면 알 수 없는 이진 파일을 잠그고 디바이스 암호화를 사용하여 사용자 데이터를 보호하면서 플랫폼이 정의된 방식으로 시작되도록 하는 최적의 보호를 제공합니다.

부팅 순서

IoT 디바이스에 대한 보안 플랫폼을 제공하는 개별 구성 요소를 살펴보려면 Windows 10 IoT Core 디바이스의 부팅 순서를 이해해야 합니다.

IoT 디바이스의 전원이 켜질 때 OS 커널 로드 및 설치된 애플리케이션 실행까지 발생하는 세 가지 기본 영역이 있습니다.

  • 플랫폼 보안 부팅
  • UEFI(Unified Extensible Firmware Interface) 보안 부팅
  • Windows 코드 무결성

Boot Order

Windows 10 부팅 프로세스에 대한 추가 정보는 여기에서 찾을 수 있습니다.

IoT 디바이스 잠금

Windows IoT 디바이스를 잠그려면 다음 사항을 고려해야 합니다.

플랫폼 보안 부팅

디바이스의 전원이 처음 켜지면 전체 부팅 프로세스의 첫 번째 단계는 펌웨어 부팅 로더를 로드하고 실행하는 것입니다. 이 로더를 실행하여 개발에서 하드웨어를 초기화하고 긴급 플래시 기능을 제공합니다. 그런 다음 UEFI 환경이 로드되고 제어가 인계됩니다.

이러한 펌웨어 부팅 로더가 SoC 관련이므로 디바이스에서 이러한 부팅 로더를 만들려면 적절한 디바이스 제조업체와 협력해야 합니다.

UEFI 보안 부팅

UEFI 보안 부팅은 첫 번째 정책 적용 지점이며 UEFI에 있습니다. 시스템은 펌웨어 드라이버, 옵션 ROM, UEFI 드라이버 또는 애플리케이션 및 UEFI 부팅 로더와 같은 지정된 기관에서 서명한 이진 파일만 실행할 수 있도록 제한합니다. 이 기능을 사용하면 알 수 없는 코드가 플랫폼에서 실행되지 않고 잠재적으로 보안 태세가 약화될 수 있습니다. 보안 부팅은 루트킷과 같은 디바이스에 대한 사전 부팅 맬웨어 공격의 위험을 줄입니다.

OEM은 제조 시 IoT 디바이스에 UEFI 보안 부팅 데이터베이스를 저장해야 합니다. 이러한 데이터베이스에는 서명 데이터베이스(db), 취소된 서명 데이터베이스(dbx) 및 KEK(키 등록 키 데이터베이스)가 포함됩니다. 이러한 데이터베이스는 디바이스의 펌웨어 비휘발성 RAM(NV-RAM)에 저장됩니다.

  • 서명 데이터베이스(db): 디바이스에 로드할 수 있는 운영 체제 로더, UEFI 애플리케이션 및 UEFI 드라이버의 서명자 또는 이미지 해시를 나열합니다.

  • 해지된 서명 데이터베이스(dbx): 더 이상 신뢰할 수 없고 디바이스에 로드할 수 없는 운영 체제 로더, UEFI 애플리케이션 및 UEFI 드라이버의 서명자 또는 이미지 해시를 나열합니다.

  • KEK(키 등록 키 데이터베이스): 서명 및 해지된 서명 데이터베이스를 업데이트하는 데 사용할 수 있는 서명 키 목록을 포함합니다.

이러한 데이터베이스가 만들어지고 디바이스에 추가되면 OEM은 펌웨어의 편집을 잠그고 PK(플랫폼 서명 키)를 생성합니다. 이 키를 사용하여 KEK에 대한 업데이트에 서명하거나 UEFI 보안 부팅을 사용하지 않도록 설정할 수 있습니다.

UEFI 보안 부팅에서 수행하는 단계는 다음과 같습니다.

  1. 디바이스 전원이 켜지면 서명 데이터베이스는 각각 PK(플랫폼 서명 키)에 대해 검사.
  2. 펌웨어를 신뢰할 수 없는 경우 UEFI 펌웨어는 OEM 관련 복구를 시작하여 신뢰할 수 있는 펌웨어를 복원합니다.
  3. Windows 부팅 관리자를 로드할 수 없는 경우 펌웨어는 Windows 부팅 관리자의 백업 복사본을 부팅하려고 시도합니다. 이 경우에도 실패하면 UEFI 펌웨어는 OEM 관련 수정을 시작합니다.
  4. Windows 부팅 관리자는 Windows 커널의 디지털 서명을 실행하고 확인합니다. 신뢰할 수 있는 경우 Windows 부팅 관리자가 제어권을 Windows 커널에 전달합니다.

키 만들기 및 관리 지침과 함께 보안 부팅에 대한 추가 세부 정보는 여기에서 확인할 수 있습니다.

Windows 코드 무결성

WCI(Windows 코드 무결성)는 메모리에 로드될 때마다 드라이버 또는 애플리케이션의 무결성을 검사하여 운영 체제의 보안을 향상시킵니다. CI에는 KMCI(커널 모드 코드 무결성) 및 UMCI(사용자 모드 코드 무결성)의 두 가지 기본 구성 요소가 포함되어 있습니다.

구성 가능한 CCI(코드 무결성)는 디바이스 작성기에서 디바이스를 잠그고 서명되고 신뢰할 수 있는 코드만 실행하고 실행할 수 있도록 하는 Windows 10의 기능입니다. 이를 위해 디바이스 작성기는 '골든' 디바이스(하드웨어 및 소프트웨어의 최종 릴리스 버전)에서 코드 무결성 정책을 만든 다음 공장 현장의 모든 디바이스에서 이 정책을 보호하고 적용할 수 있습니다.

코드 무결성 정책 배포, 감사 및 적용에 대해 자세히 알아보려면 여기에서 최신 technet 설명서를 검사.

Windows 코드 무결성에서 수행하는 단계는 다음과 같습니다.

  1. Windows 커널은 로드하기 전에 서명 데이터베이스에 대해 다른 모든 구성 요소를 확인합니다. 여기에는 드라이버, 시작 파일 및 ELAM(맬웨어 방지 조기 실행)이 포함됩니다.
  2. Windows 커널은 시작 프로세스에서 신뢰할 수 있는 구성 요소를 로드하고 신뢰할 수 없는 구성 요소의 로드를 금지합니다.
  3. 설치된 모든 애플리케이션과 함께 Windows 10 IoT Core 운영 체제가 로드됩니다.

BitLocker 디바이스 암호화

또한 Windows 10 IoT Core는 경량 버전의 BitLocker 디바이스 암호화를 구현하여 오프라인 공격으로부터 IoT 디바이스를 보호합니다. 이 기능은 필요한 측정을 수행하는 UEFI의 필수 사전 OS 프로토콜을 포함하여 플랫폼에 TPM이 있는지를 강력하게 종속합니다. 이러한 사전 OS 측정은 OS가 나중에 OS가 시작된 방법에 대한 확실한 레코드를 갖도록 합니다. 그러나 실행 제한은 적용하지 않습니다.

Windows 10 IoT Core의 BitLocker 기능을 사용하면 사용 가능한 모든 NTFS 데이터 볼륨을 바인딩하면서 NTFS 기반 OS 볼륨을 자동으로 암호화할 수 있습니다. 이를 위해 EFIESP 볼륨 GUID가 C12A7328-F81F-11D2-BA4B-00A0C93EC93B로 설정되어 있는지 확인해야 합니다.

Windows IoT Core의 Device Guard

대부분의 IoT 디바이스는 고정 함수 디바이스로 빌드됩니다. 이는 디바이스 작성기에서 지정된 디바이스에서 실행해야 하는 펌웨어, 운영 체제, 드라이버 및 애플리케이션을 정확히 알고 있음을 의미합니다. 이 정보는 알려진 코드와 신뢰할 수 있는 코드의 실행만 허용하여 IoT 디바이스를 완전히 잠그는 데 사용할 수 있습니다. Windows 10 IoT Core의 Device Guard는 잠긴 디바이스에서 알 수 없거나 신뢰할 수 없는 실행 코드를 실행할 수 없도록 하여 IoT 디바이스를 보호할 수 있습니다.

IoT Core의 턴키 보안

Microsoft는 IoT Core 디바이스에서 주요 보안 기능을 쉽게 사용할 수 있도록 디바이스 작성기에서 완전히 잠긴 IoT 디바이스를 빌드할 수 있도록 하는 턴키 보안 패키지를 제공합니다. 이 패키지는 다음을 지원합니다.

  • 보안 부팅 키 프로비전 및 지원되는 IoT 플랫폼에서 기능 사용
  • BitLocker를 사용하여 디바이스 암호화 설정 및 구성
  • 서명된 애플리케이션 및 드라이버의 실행만 허용하도록 디바이스 잠금 시작

다음 단계는 턴키 보안 패키지를 사용하여 잠금 이미지를 만드는 프로세스를 안내합니다.

Create lockdown image

필수 조건

  • Windows 10 Enterprise를 실행하는 PC(다른 Windows 버전은 제공된 스크립트에서 지원되지 않음 )
  • Windows 10 SDK - 인증서 생성에 필요
  • Windows 10 ADK - CAB 생성에 필요
  • 참조 플랫폼 - 최종 잠금을 위해 펌웨어, OS, 드라이버 및 애플리케이션을 배송하는 릴리스 하드웨어가 필요합니다.

개발 IoT 디바이스

Windows 10 IoT Core는 수백 개의 디바이스에서 사용되는 다양한 실리콘에서 작동합니다. 제안된 IoT 개발 디바이스 중에서 다음 기능은 보안 부팅, 측정 부팅, BitLocker 및 Device Guard 기능과 함께 기본적으로 펌웨어 TPM 기능을 제공합니다.

  • 퀄컴 드래곤보드 410c

    보안 부팅을 사용하도록 설정하려면 RPMB를 프로비전해야 할 수 있습니다. Windows 10 IoT Core를 사용하여 eMMC가 깜박이면(여기서 지침에 따라 전원을 켭니다. 전원이 켜지면 디바이스에서 [Power] + [Vol+] + [Vol-]을 동시에 누르고 BDS 메뉴에서 "RPMB 프로비전"을 선택합니다. 이는 되돌릴 수 없는 단계입니다.

  • Intel MinnowBoardMax

    Intel의 MinnowBoard Max의 경우 펌웨어 버전은 0.82 이상이어야 합니다(최신 펌웨어 가져오기). TPM 기능을 사용하도록 설정하려면 키보드 및 디스플레이가 연결된 보드의 전원을 켜고 F2 키를 눌러 UEFI 설정을 입력합니다. 장치 관리자 -> 시스템 설정 -> 보안 구성 -> PTT로< 이동하여 사용하도록> 설정합니다. F10 키를 눌러 변경 내용을 저장하고 플랫폼 다시 부팅을 진행합니다.

참고 항목

Raspberry Pi 2 또는 3은 TPM을 지원하지 않으므로 잠금 시나리오를 구성할 수 없습니다.

잠금 패키지 생성

다음 두 링크의 지침을 따릅니다.

잠금 패키지 테스트

여기에서 <생성된 보안 패키지를 테스트할 수 YOUR_IOT_ADD_ON_WORKSPACE>\BUILD<ARCH><OEM_NAME>. 보안.* 다음 단계에 따라 잠금 해제된 디바이스에 수동으로 설치하여 .cab> .

  1. 잠금 해제된 이미지(이전 단계에서 스캔에 사용된 이미지)를 사용하여 디바이스를 플래시합니다.

  2. 디바이스에 커넥트(SSH 사용 또는 PowerShell 사용)

  3. 디렉터리 아래의 디바이스에 다음 .cab 파일을 복사합니다. c:\OemInstall

    • Oem. Custom.Cmd.cab
    • Oem. Security.BitLocker.cab
    • Oem. Security.SecureBoot.cab
    • Oem. Security.DeviceGuard.cab
  4. 다음 명령을 실행하여 생성된 패키지의 스테이징을 시작합니다.

    applyupdate -stage c:\OemInstall\OEM.Custom.Cmd.cab
    

    사용자 지정 이미지를 사용하는 경우 이 파일을 건너뛰고 파일에서 Output\OEMCustomization\OEMCustomization.cmd 사용할 수 있는 콘텐츠를 사용하여 수동으로 편집 c:\windows\system32\oemcustomization.cmd 해야 합니다.

    applyupdate -stage c:\OemInstall\OEM.Security.BitLocker.cab
    applyupdate -stage c:\OemInstall\OEM.Security.SecureBoot.cab
    applyupdate -stage c:\OemInstall\OEM.Security.DeviceGuard.cab
    
    
  5. 마지막으로, 다음을 통해 패키지를 커밋합니다.

    applyupdate -commit
    
  6. 디바이스가 업데이트 OS(기어 표시)로 다시 부팅되어 패키지를 설치하고 기본 OS로 다시 부팅됩니다. 디바이스가 MainOS로 다시 부팅되면 보안 부팅이 활성화되고 SIPolicy가 참여해야 합니다.

  7. 디바이스를 다시 부팅하여 BitLocker 암호화를 활성화합니다.

  8. 보안 기능 테스트

    • SecureBoot: 시도 bcdedit /debug on 합니다. 보안 부팅 정책으로 값이 보호된다는 오류가 발생합니다.
    • BitLocker: ERRORLEVEL이 -2147023436 (ERROR_TIMEOUT)이면 암호화가 완료되지 않은 경우 실행start /wait sectask.exe -waitencryptcomplete:1합니다. .cmd 파일에서 sectask.exe 실행할 때는 생략합니다 start /wait.
    • DeviceGuard: SIPolicy 목록에 없는 인증서로 서명된 서명되지 않은 이진 파일 또는 이진 파일을 실행하고 실행이 실패했는지 확인합니다.

잠금 이미지 생성

잠금 패키지가 이전에 정의된 설정에 따라 작동하는지 유효성을 검사한 후 아래의 단계를 수행하여 이러한 패키지를 이미지에 포함할 수 있습니다. 사용자 지정 이미지 만들기 지침에 대한 IoT 제조 가이드를 읽어보세요.

  1. 작업 영역 디렉터리에서 위의 생성된 출력 디렉터리에서 다음 파일을 업데이트합니다.

    • SecureBoot: Copy ..\Output\SecureBoot\*.bin ..\Workspace\Common\Packages\Security.SecureBoot
      • SetVariable_db.bin
      • SetVariable_kek.bin
      • SetVariable_pk.bin
    • Bitlocker: Copy ..\Output\Bitlocker\*.* ..\Workspace\Common\Packages\Security.Bitlocker
      • DETask.xml
      • Security.Bitlocker.wm.xml
      • setup.bitlocker.cmd
    • DeviceGuard: Copy ..\Output\DeviceGuard\*.* ..\Workspace\Common\Packages\Security.DeviceGuard
      • SIPolicyOn.p7b
      • SIPolicyOff.p7b
  2. 잠금 패키지 기능 ID를 사용하여 ProductName 디렉터리 아래에 RetailOEMInput.xml 및 TestOEMInput.xml 추가

    • <Feature>SEC_BITLOCKER</Feature>
    • <Feature>SEC_SECUREBOOT</Feature>
    • <Feature>SEC_DEVICEGUARD</Feature>
  3. 이미지 다시 생성

    • buildpkg all (위의 정책 파일을 기반으로 새 잠금 패키지가 생성됨)
    • buildimage ProductName test(or)retail (새 Flash.ffu를 생성합니다.)
  4. 이 새로운 Flash.ffu를 사용하여 디바이스를 플래시하고 보안 기능의 유효성을 검사합니다.

잠금 용 보드 구성의 예로 SecureSample을 참조하세요.

CodeSigning 적용을 사용하도록 설정하여 개발

패키지가 생성되고 잠금이 활성화되면 개발 중에 이미지에 도입된 모든 이진 파일에 적절하게 서명해야 합니다. 사용자 모드 이진 파일이 *.\Keys\ **-UMCI.pfx 키로 서명되었는지 확인합니다. 드라이버와 같은 커널 모드 서명의 경우 고유한 서명 키를 지정하고 위의 SIPolicy에도 포함되어 있는지 확인해야 합니다.

암호화된 드라이브 잠금 해제

개발 및 테스트 중에 암호화된 디바이스에서 오프라인으로 콘텐츠를 읽으려고 할 때(예: MinnowBoardMax의 경우 SD 카드 또는 USB 대용량 스토리지 모드를 통해 DragonBoard의 eMMC) 'diskpart'를 사용하여 MainOS 및 데이터 볼륨에 드라이브 문자를 할당할 수 있습니다(MainOS 및 w: data의 경우 v를 가정해 보겠습니다). 볼륨이 잠긴 것처럼 나타나고 수동으로 잠금 해제해야 합니다. OEM-DRA.pfx 인증서가 설치된 모든 컴퓨터에서 이 작업을 수행할 수 있습니다(DeviceLockDown 샘플포함됨). PFX를 설치한 다음 관리 CMD 프롬프트에서 다음 명령을 실행합니다.

  • manage-bde -unlock v: -cert -cf OEM-DRA.cer
  • manage-bde -unlock w: -cert -cf OEM-DRA.cer

콘텐츠를 오프라인에서 자주 액세스해야 하는 경우 다음 명령을 사용하여 초기 잠금 해제 후 볼륨에 대해 BitLocker autounlock을 설정할 수 있습니다.

  • manage-bde -autounlock v: -enable
  • manage-bde -autounlock w: -enable

BitLocker 사용 안 림

BitLocker를 일시적으로 사용하지 않도록 설정해야 하는 경우 IoT 디바이스로 원격 PowerShell 세션을 초기화하고 다음 명령을 sectask.exe -disable실행합니다.

참고 항목

예약된 암호화 작업을 사용하지 않도록 설정하지 않으면 후속 디바이스 부팅에서 디바이스 암호화가 다시 사용하도록 설정됩니다.