Device Update 보안 모델

IoT Hub에 대한 Device Update를 통해 디바이스 펌웨어, 이미지, 애플리케이션에 업데이트를 IoT 디바이스에 안전하게 배포할 수 있습니다. 해당 워크플로는 디바이스에서 업데이트가 신뢰할 수 있으며 수정되지 않았고 의도적이라는 것을 증명하는 데 활용할 수 있는 완전한 관리 연속성 모델을 사용하는 엔드투엔드 보안 채널을 제공합니다.

Device Update 워크플로의 각 단계는 파이프라인의 모든 단계에서 다음 단계에 안전하게 전달을 수행할 수 있도록 다양한 보안 기능 및 프로세스를 통해 보호됩니다. Device Update 에이전트 참조 코드는 불법적인 업데이트 요청을 식별하고 적절하게 관리합니다. 참조 에이전트는 또한 콘텐츠가 신뢰할 수 있고 수정되지 않았으며 의도적인지 확인하기 위해 모든 다운로드를 확인합니다.

요약

업데이트를 디바이스 업데이트 인스턴스로 가져오면 서비스는 업데이트 이진 파일을 업로드하고 확인하여 악의적인 사용자가 파일을 수정하거나 교체하지 않았는지 확인합니다. 확인이 완료되면 Device Update 서비스는 가져오기 매니페스트 및 기타 메타데이터의 파일 해시를 사용하여 내부 업데이트 매니페스트를 생성합니다. 그러면 Device Update 서비스가 해당 업데이트 매니페스트에 서명합니다.

서비스로 가져오고 Azure에 저장되면 업데이트 이진 파일 및 관련 고객 메타데이터가 Azure Storage 서비스에 의해 미사용 시 자동으로 암호화됩니다. Device Update 서비스는 추가 암호화를 자동으로 제공하지 않지만 콘텐츠가 Device Update 서비스에 도달하기 전에 개발자가 콘텐츠를 직접 암호화할 수 있습니다.

디바이스 업데이트 서비스에서 디바이스에 업데이트가 배포되면 보호된 IoT Hub 채널을 통해 디바이스로 서명된 메시지가 전송됩니다. 해당 디바이스의 Device Update 에이전트가 요청 서명의 유효성을 검사합니다.

그 결과 발생하는 모든 이진 다운로드는 업데이트 매니페스트 서명에 대한 유효성 검사를 통해 보안이 유지됩니다. 업데이트 매니페스트에는 이진 파일 해시가 포함되어 있으므로, 매니페스트를 신뢰할 수 있는 경우 Device Update 에이전트는 해시 또한 신뢰하여 이진 파일과 일치시킵니다. 업데이트 이진 파일의 다운로드와 확인이 완료되면 디바이스의 설치 관리자에 전달됩니다.

구현 세부 정보

단순하면서도 성능이 낮은 디바이스에서도 Device Update 서비스를 사용할 수 있도록 스케일 다운하기 위해, 보안 모델은 원시 비대칭 키와 원시 서명을 사용합니다. JSON Web Token 및 JSON Web Key와 같은 JSON 기반 형식을 사용합니다.

업데이트 매니페스트를 통해 업데이트 콘텐츠 보안

두 개의 서명을 사용하여 업데이트 매니페스트의 유효성을 검사합니다. 서명은 ‘서명’ 키와 ‘루트’ 키로 구성된 구조체를 사용하여 생성됩니다.

Device Update 에이전트에는 모든 Device Update 호환 디바이스에 사용되는 퍼블릭 키가 포함되어 있습니다. 이러한 공개 키는 루트 키입니다. 해당하는 프라이빗 키는 Microsoft에서 제어합니다.

또한 Microsoft는 Device Update 에이전트에 포함되지 않거나 디바이스에 저장된 퍼블릭/프라이빗 키 쌍을 생성합니다. 이 키가 서명 키입니다.

IoT Hub에 대한 Device Update로 업데이트를 가져오고 서비스가 업데이트 매니페스트를 생성하면, 서비스는 서명 키를 사용하여 매니페스트에 서명한 다음 루트 키로 서명된 서명 키 그 자체를 포함합니다. 업데이트 매니페스트가 디바이스로 전송되면 Device Update 에이전트는 다음 서명 데이터를 수신합니다.

  1. 서명 값 그 자체.
  2. #1 생성에 사용된 알고리즘.
  3. #1 생성에 사용된 서명 키의 퍼블릭 키 정보.
  4. #3에 있는 퍼블릭 서명 키의 서명.
  5. #3 생성에 사용된 루트 키의 퍼블릭 키 ID.
  6. #4 생성에 사용된 알고리즘.

Device Update 에이전트는 위에 정의된 정보를 사용하여 퍼블릭 서명 키의 서명이 루트 키로 서명되었는지 확인합니다. 그러면 Device Update 에이전트에서 업데이트 매니페스트 서명이 서명 키로 서명되었는지 확인합니다. 모든 서명이 올바른 경우 Device Update 에이전트는 업데이트 매니페스트를 신뢰합니다. 업데이트 매니페스트에는 업데이트 파일 자체에 해당하는 파일 해시가 포함되어 있으므로, 해시가 일치하는 경우에도 업데이트 파일을 신뢰할 수 있습니다.

루트 키 및 서명 키를 사용하면 Microsoft에서 주기적으로 서명 키를 롤링할 수 있습니다(보안 모범 사례).

JWS(JSON 웹 서명)

updateManifestSignatureupdateManifest에 포함된 정보가 변조되지 않았는지 확인하는 데 사용됩니다. updateManifestSignature는 JSON 웹 키가 포함된 JSON 웹 서명을 사용하여 생성되므로 소스를 확인할 수 있습니다. 서명은 “.”로 구분되는 세 개의 섹션이 있는 Base64Url로 인코딩된 문자열입니다. JSON 키 및 토큰을 파싱하고 확인하려면 jws_util.h 도우미 메서드를 참조하세요.

JSON 웹 서명은 JSON 기반 데이터 구조를 사용하여 콘텐츠에 서명하는 데 널리 사용되는 제안된 IETF 표준입니다. 데이터의 서명을 확인하여 데이터 무결성을 보장할 수 있는 방법 중 하나입니다. 자세한 내용은 JWS(JSON 웹 서명) RFC 7515에서 확인할 수 있습니다.

JSON Web Token

JSON Web Token은 두 당사자 간에서 클레임을 안전하게 표현할 수 있는 개방형 산업 표준 메서드입니다.

루트 키

모든 디바이스 업데이트 디바이스에는 루트 키 집합이 있어야 합니다. 해당 키는 모든 Device Update 서명을 신뢰하는 근거가 됩니다. 합법적인 서명으로 간주되려면 해당 루트 키 중 하나로 연결되어야 합니다.

루트 키 집합은 시간이 지남에 따라 변경됩니다. 이는 주기적으로 서명 키를 순환하는 것이 보안 측면에서 안전하기 때문입니다. 결과적으로 Device Update 에이전트 소프트웨어는 디바이스 업데이트 팀에서 지정한 간격으로 최신 루트 키로 업데이트해야 합니다. 다음으로 계획된 루트 키 회전은 2025년 5월에 발생합니다.

디바이스 업데이트 에이전트의 버전 1.1.0부터 에이전트는 해당 디바이스에 대한 업데이트 배포가 발생할 때마다 루트 키에 대한 변경 내용을 자동으로 확인합니다. 가능한 변경 내용:

  • 새 루트 키를 사용할 수 있습니다.
  • 기존 루트 키가 비활성화되어(사실상 "해지됨") 트러스트를 설정하는 데 더 이상 유효하지 않습니다.

위의 두 가지 중 하나 또는 둘 다 true인 경우 디바이스 업데이트 에이전트는 DU 서비스에서 새 루트 키 패키지를 자동으로 다운로드합니다. 이 패키지에는 모든 루트 키의 전체 집합뿐만 아니라 더 이상 유효하지 않은 루트 키 및/또는 서명 키에 대한 정보가 포함된 비활성화된 목록이 포함되어 있습니다. 루트 키 패키지 자체는 각 루트 키로 서명되므로 패키지에 대한 신뢰는 DU 에이전트 자체의 일부인 원래 루트 키와 이후에 다운로드한 루트 키 모두에서 설정할 수 있습니다. 유효성 검사 프로세스가 완료되면 새 루트 키는 지정된 업데이트 매니페스트에 대한 서명 키로 트러스트의 유효성을 검사하기 위해 신뢰할 수 있는 것으로 간주되는 반면, 비활성화된 목록에 나열된 루트 키 또는 서명 키는 더 이상 해당 용도로 신뢰할 수 없습니다.

시그니처

모든 서명에는 루트 키 중 하나로 서명된 서명(퍼블릭) 키가 따릅니다. 서명은 서명 키에 서명하는 데 사용된 루트 키를 식별합니다.

Device Update 에이전트는 먼저 서명(퍼블릭) 키의 서명이 적절하고 유효한지, 그리고 승인된 루트 키 중 하나로 서명되었는지 확인하여 서명 유효성을 검사해야 합니다. 서명 키의 유효성 검사를 성공적으로 완료한 후에는 현재 신뢰할 수 있는 서명 퍼블릭 키를 사용하여 서명 자체의 유효성을 검사할 수 있습니다.

서명 키는 루트 키보다 훨씬 더 빠른 주기로 순환되므로 메시지는 다양한 서명 키로 서명되어 있을 수 있습니다.

서명 키의 해지는 Device Update 서비스에 의해 관리되므로 사용자는 서명 키를 캐시하려는 시도를 해서는 안 됩니다. 항상 서명이 포함된 서명 키를 사용하세요.

디바이스 보안

Device Update 관련 보안 자산이 디바이스에서 적절히 보호되고 있는지 확인하는 것이 매우 중요합니다. 루트 키와 같은 자산은 수정되지 않도록 보호해야 합니다. 보안 디바이스(TPM, SGX, HSM, 기타 보안 디바이스)의 사용이나, 참조 구현에서 지금 수행하는 것과 같은 Device Update 에이전트에서의 하드 코딩 등, 다양한 방법으로 루트 키를 보호할 수 있습니다. 후자의 경우 Device Update 에이전트 코드가 디지털 서명되어 있어야 하며 시스템의 코드 무결성 지원을 사용 설정하여 에이전트 코드가 악의적으로 수정되지 않도록 보호해야 합니다.

한 구성 요소에서 다른 구성 요소로의 전달이 안전한 방식으로 수행되도록 하는 등의 다른 보안 조치를 도입할 수도 있습니다. 예를 들어 다양한 구성 요소를 실행하기 위해 특정 격리 계정을 등록하고 네트워크 기반 통신(예: REST API 호출)을 localhost로만 제한합니다.

다음 단계

Device Update에서 Azure 역할 기반 액세스 제어를 사용하는 방법에 대해 알아봅니다.