KR102513435B1 - 펌웨어의 보안 검증 - Google Patents

펌웨어의 보안 검증 Download PDF

Info

Publication number
KR102513435B1
KR102513435B1 KR1020217015033A KR20217015033A KR102513435B1 KR 102513435 B1 KR102513435 B1 KR 102513435B1 KR 1020217015033 A KR1020217015033 A KR 1020217015033A KR 20217015033 A KR20217015033 A KR 20217015033A KR 102513435 B1 KR102513435 B1 KR 102513435B1
Authority
KR
South Korea
Prior art keywords
firmware
recovery
processor
computing system
verification
Prior art date
Application number
KR1020217015033A
Other languages
English (en)
Other versions
KR20210080463A (ko
Inventor
랜달 스팽글러
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Priority to KR1020237009400A priority Critical patent/KR20230043235A/ko
Publication of KR20210080463A publication Critical patent/KR20210080463A/ko
Application granted granted Critical
Publication of KR102513435B1 publication Critical patent/KR102513435B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Quality & Reliability (AREA)
  • Pure & Applied Mathematics (AREA)
  • Power Engineering (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Abstract

제조업체의 고유한 검증 프로세스, 하드웨어별 키 또는 시스템 메모리의 고유한 쓰기 방지 기능에 의존하지 않고 시스템 무결성을 보장하기 위해 시스템 펌웨어 및 복구 펌웨어를 안전하게 검증하는 컴퓨팅 시스템에 대해 설명한다. 컴퓨팅 시스템은 집적 회로 제조업체의 마스크 ROM(읽기 전용 메모리) 검증 프로세스와 관계없이 펌웨어 및 복구 펌웨어를 검증하기 위한 프로세스를 정의하는 펌웨어 관리 파라미터를 유지하는 보안 프로세서에 의존한다. 보안 프로세서는 펌웨어 또는 복구 펌웨어가 적절하게 서명되고 이전에 실행된 버전과 일치하는지 검증하거나, 다른 경우 컴파일시 펌웨어에 포함된 예상 결과와 일치하는 검증 결과(예: 생성된 해시 값)를 생성한다. 이러한 방식으로 컴퓨팅 시스템은 컴퓨팅 시스템 내에서 실행되는 펌웨어 및 복구 펌웨어에 대한 유용성, 사용자 정의 및 사용자 제어를 향상시킨다.

Description

펌웨어의 보안 검증
본 명세서는 펌웨어의 보안 검증에 관한 것이다.
일부 컴퓨팅 시스템은 전원을 켜거나 재설정 한 후 "부팅" 프로세스의 일부로 시스템 펌웨어를 실행한다. 일부 컴퓨팅 시스템은 안정된 복구 상태로 돌아가기 위해 시스템 펌웨어 대신 "복구" 펌웨어를 실행할 수 있다. 보안을 위해 컴퓨팅 시스템은 시스템 메모리에 대한 동시 물리적 액세스로만 재정의할 수 있는 시스템 메모리의 쓰기 방지된 영구 영역에 시스템 펌웨어 및 복구 펌웨어의 일부를 유지할 수 있다. 일부 컴퓨팅 시스템은 펌웨어 및 복구 펌웨어 무결성을 검증하기 위해 제조업체의 검증 프로세스를 추가로 실행하며, 경우에 따라 하드웨어별 검증 키를 사용하여(예: 애플리케이션 프로세서의 퓨즈가 버닝됨) 시스템 펌웨어가 공식 소스에서 제공되는지 검증한다.
따라서 보안 및 무결성은 하드웨어별 검증 키를 관리하는 기능과 컴퓨팅 시스템의 시스템 메모리 쓰기 방지 기능을 포함한 제조업체의 독점적인 검증 프로세스에 달려 있다. 예를 들어, 쓰기 방지 기능은 시스템 메모리에 대한 물리적 액세스 권한이 있는 사용자에 의해 손상될 수 있다. 제조 과정에서 하드웨어에 할당된 쓰기 방지 기능과 하드웨어별 검증 키에 지나치게 의존하면 시스템 펌웨어 및 컴퓨팅 시스템에서 실행되는 복구 펌웨어에 대한 사용성, 사용자 지정 및 사용자 제어가 불필요하게 제한될 수 있다.
제조업체의 고유한 검증 프로세스, 하드웨어별 키 또는 시스템 메모리의 고유한 쓰기 방지 기능에 의존하지 않고 시스템 무결성을 보장하기 위해 시스템 펌웨어 및 복구 펌웨어를 안전하게 검증하는 컴퓨팅 시스템에 대해 설명한다. 컴퓨팅 시스템은 집적 회로 제조업체의 마스크 ROM(읽기 전용 메모리) 검증 프로세스와 관계없이 펌웨어 및 복구 펌웨어를 검증하기 위한 프로세스를 정의하는 펌웨어 관리 파라미터를 유지하는 보안 프로세서에 의존한다. 보안 프로세서는 펌웨어 또는 복구 펌웨어가 적절하게 서명되고 이전에 실행된 버전과 일치하는지 검증하거나, 다른 경우 컴파일 시간에 펌웨어에 포함된 예상 결과와 일치하는 검증 결과(예: 생성된 해시 값)를 생성한다. 이러한 방식으로 컴퓨팅 시스템은 컴퓨팅 시스템 내에서 실행되는 펌웨어 및 복구 펌웨어에 대한 유용성, 사용자 정의 및 사용자 제어를 향상시킨다.
일 예에서, 컴퓨팅 시스템이 설명되며, 이는 애플리케이션 프로세서; 펌웨어 및 해당 복구 펌웨어를 포함하는 메모리; 펌웨어 또는 복구 펌웨어를 실행하는 애플리케이션 프로세서에 대한 조건으로 동작들을 수행함으로써 펌웨어 또는 복구 펌웨어를 검증하도록 구성된 보안 프로세서를 포함하며, 상기 동작들은, 펌웨어에 의해 유지되는 펌웨어 또는 복구 펌웨어의 예상 해시를 결정하는 동작; 그리고 예상 해시가 펌웨어 또는 복구 펌웨어의 생성된 해시와 일치하는지 여부에 따라 펌웨어 또는 복구 펌웨어를 검증하는 동작을 포함한다.
다른 예에서, 방법이 설명되며, 이는 컴퓨팅 시스템의 보안 프로세서에 의해 그리고 컴퓨팅 시스템의 메모리에 저장된 펌웨어로부터 펌웨어에 대한 예상 해시를 결정하는 단계; 메모리에 저장된 펌웨어에 대해 생성된 해시를 결정하는 단계; 그리고 보안 프로세서에 의해, 예상 해시가 생성된 해시와 일치하는지 결정하는 데 응답하여 펌웨어를 검증하는 단계를 포함한다.
또 다른 예에서, 컴퓨터 판독 가능 저장 매체가 설명되며, 이는 실행될 때 컴퓨팅 시스템의 보안 프로세서를 동작들을 수행하도록 구성하는 명령어를 포함하며, 상기 동작들은, 컴퓨팅 시스템의 메모리에 저장된 펌웨어로부터 펌웨어에 대한 예상 해시를 결정하는 동작; 메모리에 저장된 펌웨어에 대해 생성된 해시를 결정하는 동작; 그리고 예상 해시가 상기 생성된 해시와 대응한다는 결정에 응답하여 펌웨어를 검증하는 동작을 포함한다.
하나 이상의 구현의 세부 사항은 첨부된 도면 및 다음의 설명에서 설명된다. 다른 특징 및 이점은 설명 및 도면, 그리고 청구 범위로부터 명백해질 것이다. 이 요약은 자세한 설명 및 도면에 자세히 설명된 요약을 소개하기 위해 제공된다. 따라서 이 요약은 필수 기능을 설명하는 데 사용되거나 청구된 주제의 범위를 제한하는 데 사용되어서는 안된다.
복구 펌웨어의 보안 검증에 대한 하나 이상의 양태에 대한 세부 정보는 아래에 설명되어 있다. 설명과 도면에서 서로 다른 경우에 동일한 참조 번호를 사용하는 것은 유사한 요소를 나타낸다.
도 1은 펌웨어 및 복구 펌웨어를 검증하도록 구성된 예시적인 컴퓨팅 시스템을 나타내는 개념도이다.
도 2는 펌웨어를 검증하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다.
도 3은 복구 펌웨어를 검증하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다.
도 4는 펌웨어 또는 복구 펌웨어의 확률적 또는 부분적 검증을 수행하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다.
도 5는 펌웨어 및 복구 펌웨어의 보안 검증을 수행하도록 구성된 컴퓨팅 장치를 나타내는 개념도이다.
일부 컴퓨팅 시스템에서 애플리케이션 프로세서는 운영 체제(OS)를 로드하고 실행하기 위한 조건으로 시스템 펌웨어를 실행한다. 시스템 메모리의 쓰기 방지된 부분은 시스템 펌웨어의 읽기 전용 부분을 저장할 수 있고 시스템 메모리의 읽기-쓰기 가능한 부분은 시스템 펌웨어의 읽기-쓰기 가능(또는 보호되지 않은) 부분을 저장할 수 있다. 시스템 메모리의 쓰기 방지된 부분에는 컴퓨팅 시스템이 복구 모드에서 작동할 때 실행하는 특수 "복구 펌웨어"가 더 포함될 수 있다. 복구 펌웨어는 복구 이벤트 중에 시스템 펌웨어 대신 실행되어 안정적인 복구 모드에서 작동하도록 컴퓨팅 시스템을 구성하기 위한 것이다.
검증된 부팅 프로세스 동안, 컴퓨팅 시스템의 보안 프로세서는 보안 프로세서가 보안 프로세서의 내부 메모리에 저장된 자체 보안 프로세서 펌웨어(예: "Cr50")를 검증할 수 있을 때까지 애플리케이션 프로세서가 시스템 펌웨어를 실행하는 것을 방지할 수 있다. 보안 프로세서 펌웨어를 검증하고 실행한 후 보안 프로세서는 애플리케이션 프로세서가 검증된 부팅 프로세스를 수행할 수 있도록 한다.
일단 수행되면, 애플리케이션 프로세서는 시스템 메모리의 쓰기 방지된(Write-Protected) 부분에서 시스템 펌웨어의 읽기 전용 부분을 찾고 검색하기 위해 "마스크 ROM"(예: 애플리케이션 프로세서 내부에 있고 제조 과정에서 사전 프로그래밍된 읽기 전용 메모리 유형)에 내장된 명령어를 실행한다. 마스크 ROM은 시스템 펌웨어의 읽기 전용 부분을 실행하기 전에 독점(독점적인) 검증 프로세스를 실행하도록 애플리케이션 프로세서를 구성할 수 있다. 예를 들어, 독점적인 검증 프로세스로 인해 애플리케이 프로세서가 시스템 펌웨어의 읽기 전용 부분이 애플리케이 프로세서 내에서 하드 코딩된(예: 애플리케이 프로세서의 퓨즈로 버닝됨) 고유한 하드웨어 특정 키를 사용하여 서명되었는지 검증할 수 있다. 마스크 ROM이 고유한 하드웨어별 키를 사용하여 시스템 펌웨어의 읽기 전용 부분을 검증할 수 있는 경우, 애플리케이션 프로세서는 읽기 전용 시스템 펌웨어를 실행한다. 마스크 ROM을 사용하여 시스템 펌웨어를 검증하면 사용자가 "unofficial(비공식)" 타사 또는 사용자 지정 펌웨어를 설치하지 못할 수 있으며, 이 경우 고유한 하드웨어 관련 키를 사용하여 검증할 수 없다.
시스템 펌웨어의 읽기-쓰기 가능 부분을 실행하기 위한 조건으로, 읽기 전용 부분은 컴파일(compilation) 중에 "official(공식)" 루트 키를 사용하여 읽기-쓰기 가능 부분이 서명되었는지 검증한다. 컴퓨팅 시스템은 시스템 메모리의 쓰기 방지된 부분에 루트 키를 저장할 수 있다. 시스템 메모리의 쓰기 방지된 부분이 손상되지 않는다는 가정하에, 애플리케이션 프로세서는 읽기-쓰기 가능한 부분이 루트 키로 서명되었다는 결정에 응답하여 시스템 펌웨어의 읽기-쓰기 가능한 부분을 로드하고 실행한다.
비슷한 방식으로, 컴퓨팅 시스템이 복구 모드에서 실행되는 경우, 시스템 펌웨어의 읽기 전용 부분은 복구 펌웨어를 실행하기 전에 복구 펌웨어가 루트 키로 서명되었는지 검증하여 시스템 무결성을 유지한다. 시스템 메모리의 쓰기 방지된 부분이 손상되지 않았다는 가정을 유지함으로써, 애플리케이션 프로세서는 복구 펌웨어가 루트 키로 서명되었다는 결정에 응답하여 복구 펌웨어를 로드하고 실행한다. 복구 펌웨어가 복구 키를 생성할 수 없는 경우, 컴퓨팅 시스템은 복구 키를 생성할 수 있는 공식 버전의 복구 펌웨어가 설치 및 실행될 때까지 복구 펌웨어 실행을 자제한다.
일부 컴퓨팅 시스템은 이러한 방식으로 검증할 수 없는 시스템 펌웨어 및 복구 펌웨어의 실행을 방지할 수 있지만 이 검증된 부팅 프로세스는 사용성, 사용자 지정 및 사용자 제어를 방해한다. 하드웨어별 및 "공식" 루트 키는 인증된 개발자 만 검색할 수 있다. 또한 컴퓨팅 시스템의 보안 및 무결성은 하드웨어별 키뿐만 아니라 시스템 메모리의 쓰기 방지된 부분이 "공식적인"루트 키를 보호할 수 있다는 암시적 신뢰에 따라 달라진다. 그러나 공식 루트 키는 시스템 메모리에 물리적으로 액세스할 수 있거나 시스템 메모리의 쓰기 방지된 부분을 손상시킬 방법을 찾는 정교한 사용자에 의해 손상될 수 있다. 따라서 이러한 유형의 검증된 부팅은 안전하지 않을뿐만 아니라 권한이 부여된 개발자가 아니지만 타사 또는 사용자 지정 펌웨어를 실행하려는 합법적인 사용자가 이를 수행하지 못하도록 차단될 수 있으므로, 따라서 컴퓨팅 시스템의 유용성, 사용자 정의 및 사용자 제어를 불필요하게 제한한다.
보안 및 무결성을 희생하지 않고 펌웨어에 대한 사용자 정의 및 사용자 제어를 촉진하기 위해, 제조업체의 고유한 검증 프로세스, 하드웨어별 키 또는 시스템 메모리의 고유한 쓰기 방지 기능에 의존하지 않고 시스템 펌웨어 및 복구 펌웨어를 검증하도록 구성된 보안 프로세서 및 애플리케이션 프로세서에 의존하는 컴퓨팅 시스템에 대해 설명한다. 대신, 보안 프로세서는 집적 회로 제조업체의 마스크 ROM(읽기 전용 메모리) 검증 프로세스(예를 들어, 하드웨어 특정 키를 포함)와 관계없이 펌웨어 및 복구 펌웨어를 검증하기 위해 철저한 정도(degree of thoroughness)를 포함하여 프로세스를 정의하는 펌웨어 관리 파라미터를 부분적으로 기반으로 펌웨어를 검증한다. 일례로, 펌웨어 관리 파라미터는 부분적 또는 확률적 검증 수행, 완전 또는 전체 검증, 또는 전혀 검증 없음(비검증)을 지정할 수 있다.
시스템 펌웨어의 헤더 서명 및/또는 바디(body) 서명을 검증한 후 보안 프로세서는 시스템 메모리에 저장된 시스템 펌웨어의 각 블록과 관련된 해시(예: SHA-256) 값을 생성한다. 보안 프로세서는 생성된 해시 값을 보안 프로세서가 펌웨어 바디의 읽기 전용 부분에서 파생하는 예상 해시 값과 비교한다.
복구 펌웨어는 일반적으로 시스템 펌웨어에서 지원하지 않는 저수준 드라이버와 사용자 인터페이스를 지원하기 때문에 복구 펌웨어는 일반적으로 시스템 펌웨어보다 크기가 더 크다. 따라서 보안 프로세서는 복구 펌웨어를 검증하기 위해 고성능 애플리케이션 프로세서에 의존할 수 있다. 복구 펌웨어의 헤더 및/또는 바디 서명을 검증한 후, 애플리케이션 프로세서는 시스템 메모리에 저장된 복구 펌웨어의 각 블록과 관련된 해시 값을 생성한다. 애플리케이션 프로세서는 복구 펌웨어에 대한 해시 값을 자동으로 생성하고(예: 운영 체제에서 수행하는 백그라운드 태스크로) 저장할 수 있다(예: 시스템 펌웨어의 초기 성공적인 부팅 및 실행 후).
애플리케이션 프로세서는 생성된 해시 값을 애플리케이션 프로세서가 펌웨어 바디의 읽기 전용 부분에서 파생하는 예상 해시 값과 비교한다. 예상 및 생성된 해시 값이 일치하지 않으면 애플리케이션 프로세서는 복구 펌웨어가 검증에 실패했음을 보안 프로세서에 알리고 복구 펌웨어 실행을 자제한다. 복구 펌웨어의 예상 및 생성된 해시 값이 일치하면 애플리케이션 프로세서가 복구 펌웨어를 실행한다.
복구 펌웨어가 애플리케이션 프로세서의 검사에 실패하면 보안 프로세서는 펌웨어 관리 파라미터에 따라 복구 펌웨어를 검증하려고 시도할 수 있다. 보안 프로세서는 생성된 해시 값 중 일부만 예상 해시 값에 대해 검증하여 복구 펌웨어를 부분적으로 검증할 수 있다. 또는 보안 프로세서는 전체 검증을 수행하고 생성된 해시 값을 예상 해시 값과 비교하여 검증하거나 전혀 검증을 수행하지 않고 블록 검증을 모두 무시할 수 있다.
이러한 방식으로 컴퓨팅 시스템은 하드웨어별 키에 의존하지 않고 집적 회로 제조업체의 마스크 ROM 검증 프로세스와 관계없이 펌웨어 및 복구 펌웨어를 검증할 수 있다. 대신 컴퓨팅 시스템은 보안 프로세서에 의존하여 시스템 펌웨어가 적절하게 서명되고 이전에 실행된 버전과 일치하는지 검증하거나, 다른 경우 컴파일 시간에 펌웨어에 포함된 예상 결과와 일치하는 검증 결과(예: 생성된 해시 값)를 생성한다. 이러한 방식으로, 컴퓨팅 시스템은 컴퓨팅 시스템 내에서 실행되는 펌웨어 및 복구 펌웨어에 대한 유용성, 사용자 정의 및 사용자 제어를 향상시킬 수 있다. 공식 펌웨어 버전이나 미리 결정된 하드웨어 키에 얽매이지 않고, 예시 컴퓨팅 시스템은 시스템 무결성을 희생하지 않고 사용자 지정 또는 타사(제3자) 펌웨어를 안전하게 실행할 수 있다.
프로세서 고유의 하드웨어 키에 대한 지식으로부터 펌웨어 검증을 분리함으로써, 본 개시의 기술은 컴퓨팅 시스템이 보다 다양한 펌웨어 및 복구 펌웨어 프로그램을 실행할 수 있도록할 수 있다. 펌웨어 개발자는 더 이상 하드웨어 관련 검증 키에 대한 자세한 제품 지식과 의존이 필요하지 않다. 하드웨어 제조업체가 펌웨어 개발자와 협력할 수도 있고 조정하지 않을 수도 있는 이 키를 제어할 수 있다.
또한, 본 개시의 기술은 컴퓨팅 시스템이 이전에 노출되었을 수 있는 것보다 더 광범위하거나 다른 범위의 공격에 대해 방어할 수 있도록할 수 있다. 예를 들어, 이전 시스템은 시스템 메모리의 쓰기 방지에 의존했으며 공격자가 시스템 메모리를 무시할 수 있는 유일한 방법은 메모리 칩이나 마더 보드를 포함한 컴퓨팅 시스템에 대한 물리적 액세스를 통해서 였다. 이를 "evil maid(이블 메이드)" 공격이라고 하며, 누군가가 오랫동안 감독없이 장치를 두는 시나리오를 나타낸다(예: 장치에 액세스하기 위해 호텔 메이드로 가장하는 공격자가 있는 경우). 그러나 일부 컴퓨팅 시스템은 장치에 장기간 액세스할 수 있는 권한이 부여된 사용자와 같은 추가 유형의 공격을 방어해야 한다. 예를 들어, 일부 학교에서는 사용과 관련된 엄격한 정책을 통해 학생에게 컴퓨팅 장치를 발급한다. 학교에서는 기업(enterprise) 정책을 사용하여 학생이 이러한 장치에서 수행할 수 있는 작업을 제한한다(경우에 따라 법적 요구 사항으로 인해 발생한다). 일부 학생들은 이러한 제한을 좋아하지 않아 기업 정책을 우회하려고할 수 있다. 학생들은 장기간 장치에 액세스할 수 있으므로 쓰기 보호에 의존하여 정책 제한을 적용하는 것은 비현실적일 수 있다. 다른 정부 기관이나 민간 기업은 자신의 물리적 보안에 공백이 있어 공격자가 이블 메이드 공격을 전파할 수 있을 만큼 오랫동안 장치를 물리적으로 제어할 수 있다.
두 경우 모두 장치 소유자는 공격을 감지하고 공격이 발생할 경우 장치 기능을 제한할 수 있다. 제한은 디스크의 사용자 데이터 암호 해독 거부, 웹 사이트 또는 무선 액세스 포인트에 이전에 저장된 자격 증명(credentials) 제공 거부, 부팅 거부 등과 같은 다양한 형태를 취할 수 있다. 소유자는 추가 보호가 부팅 속도에 미치는 영향에 대해 다양한 허용 오차를 가질 수도 있다. 일반 사용자는 일부 사용자가 짧고 쉽게 추측할 수 있는 암호를 사용하는 것과 같이 보안이 다소 감소된 대신 더 빠른 부팅을 선호할 수 있다. 기업 사용자는 보안으로 인해 부팅 시간이 몇 초 증가하더라도 보다 안전한 부팅을 선호할 수 있다.
또 다른 시나리오에서 공격자는 펌웨어를 수정한 후(예: 장치에 악성 코드 삽입) 장치를 다시 스토어(store)로 되돌릴 수 있다. 스토어는 장치를 새 고객에게 재판매하기 전에 장치의 펌웨어가 수정되지 않았는지 검증해야 한다. 마찬가지로 장치는 학교, 정부 및 기업에 반환할 수 있다. 소위 "인-스토어 리턴(in-store returns)"에 대한 펌웨어를 검증하는 기존 프로세스는 느리고 수동이며 두 번째(제2) 장치가 필요할 수 있다.
위의 각 시나리오에 대해 이 공개 기술을 사용하면 상점, 학교, 기업 등이 컴퓨팅 시스템에 의존하여 펌웨어 또는 복구 펌웨어를 실행하기 전에, 펌웨어 및 복구 펌웨어를 자동으로 검증함으로써 이러한 광범위하거나 다른 범위의 공격을 방어할 수 있다. 이렇게 하면 권한이 부여된 사용자와 달리 장치의 진정한 소유자가 시스템의 무결성을 수동으로 검증하지 않고도 제어하는 컴퓨팅 시스템의 무결성을 보장할 수 있다.
도 1은 복구 펌웨어의 보안 검증을 수행하도록 구성된 예시적인 컴퓨팅 시스템(100)을 예시하는 개념도이다. 컴퓨팅 시스템(100)은 임의의 유형의 모바일 또는 비 모바일 컴퓨팅 시스템의 일부를 형성할 수 있다. 모바일 컴퓨팅 시스템에서, 컴퓨팅 시스템(100)은 모바일 폰, 랩톱 컴퓨터, 웨어러블 장치(예: 시계, 안경, 헤드폰, 의류), 태블릿, 자동차/차량 장치, 휴대용 게임 장치, 전자 판독기 장치 및 원격 제어 장치의 하나 이상의 컴포넌트를 나타낼 수 있다. 모바일 컴퓨팅 시스템에서, 컴퓨팅 시스템(100)은 서버, 네트워크 장치(예: 라우터, 스위치, 방화벽), 데스크탑 컴퓨터, 텔레비전 장치, 엔터테인먼트 셋톱 장치, 자동 온도 조절 장치, 차고 문 개폐 장치, 기타 가정용 장치 또는 가전 제품, 탁상용 보조 장치, 스피커 장치, 비 휴대용 게임 장치 및 비즈니스 회의 장비 중 하나 이상의 컴포넌트를 나타낼 수 있다.
컴퓨팅 시스템(100)은 SoC(system-on-chip)의 일부일 수 있다. 예를 들어, 컴퓨팅 시스템(100)은 전통적인 중앙 처리 장치(CPU) 또는 중앙 제어기 처리 아키텍처를 대체하는 이동 전화의 처리(프로세싱) 컴포넌트일 수 있다. 이동 전화기(모바일 폰)가 CPU 성능 병목 현상을 겪게하기보다는, 컴퓨팅 시스템(100)의 분산 처리 아키텍처는 이동 전화기가 단일 CPU에 의해 수행될 필요가 있는 작업을 오프로드하게할 수 있다.
도 1의 컴퓨팅 시스템(100)은 애플리케이션 프로세서(102), 스토리지(저장소)(104), 메모리(106) 및 보안 프로세서(108)를 포함한다. 컴퓨팅 시스템(100)의 이들 및 다른 컴포넌트는 버스(110, 112 및 114) 및 제어 링크(116A 및 116B)를 통해 다양한 방식으로 통신 가능하게 결합된다. 컴퓨팅 시스템(100)은 도 1에 도시된 것보다 추가 또는 더 적은 컴포넌트, 버스 또는 링크를 포함할 수 있다.
컴퓨팅 시스템(100)은 버스(110, 112, 114)를 포함한다. 애플리케이션 프로세서(102)는 스토리지 버스(110)를 통해 데이터를 교환함으로써 스토리지(104)의 제어기와 통신하여 애플리케이션 프로세서(102)가 스토리지(104)로부터 읽거나 기록할 수 있게 한다. 유사한 방식으로, 애플리케이션 프로세서(102) 및 보안 프로세서(104)는 각각 메모리 버스(112)를 통해 데이터를 교환함으로써 메모리(106)의 제어기와 통신하여 보안 프로세서(108) 및 애플리케이션 프로세서(102)가 메모리(106)를 읽을 수 있도록 하거나 메모리(106)에 기록할 수 있도록 한다. 또한, 보안 프로세서(108) 및 애플리케이션 프로세서(102)는 호스트 버스(114)를 통해 데이터를 교환함으로써 직접 통신할 수 있다. 애플리케이션 프로세서(102)는 펌웨어, 커널 프로그램, 운영 체제 소프트웨어, 운영 체제 내에서 실행되는 애플리케이션 등을 포함하는 소프트웨어를 실행하도록 구성된다.
보안 프로세서(108)는 애플리케이션 프로세서(102) 및 메모리(106)에 대한 제어를 용이하게 하기 위한 제어 링크(116A 및 116B)를 포함한다. 보안 프로세서(108)는 제어 링크(116A)를 통해 제어 신호를 출력함으로써 메모리(106)의 쓰기 방지 기능을 제어할 수 있다. 일부 경우에, 보안 프로세서(108)는 예를 들어 공격자가 제어 링크(116A)를 차단하려고 시도하는 경우 쓰기 방지 기능을 모니터링할 수 있다. 제어 링크(116B)를 통해 제어 신호를 출력함으로써, 보안 프로세서(108)는 애플리케이션 프로세서를 리셋 상태로 놓거나 리셋으로부터 애플리케이션 프로세서(102)를 해제할 수 있다. 예를 들어, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어가 검증될 때까지 애플리케이션 프로세서를 리셋 상태로 유지할 수 있으며, 이때 보안 프로세서는 검증된 펌웨어 또는 복구 펌웨어를 후속적으로 실행하기 위해 리셋 상태로부터 애플리케이션 프로세서(102)를 해제한다.
버스(110, 112, 114) 및 제어 링크(116A 및 116B)는 도 1에 도시되어 있으며, 컴퓨팅 시스템(100)이 애플리케이션 프로세서(102), 스토리지(저장소)(104), 메모리(106) 및 보안 프로세서(108) 사이에 포함할 수 있는 상호 접속의 일부 예일 뿐이다. 컴퓨팅 시스템(100)의 다른 예들에서, 컴퓨팅 시스템(100)의 컴포넌트들 사이의 추가 또는 더 적은 인터페이스, 링크 및 연결이 사용될 수 있다. 각각의 버스(110, 112, 114) 및 제어 링크(116A 및 116B)는 메모리 버스 구조, 주변(peripheral) 버스 구조, 범용 직렬 버스 구조, 프로세서 또는 다양한 버스 아키텍처 중 임의의 컴포넌트 간 통신을 용이하게 하는 로컬 버스 구조와 같은 다른 버스 구조 중 하나 또는 조합을 포함할 수 있다. 저장소(스토리지)(104)는 실행 가능한 명령(명령어)의 실행을 지원하기 위해 실행 가능한 명령(예: 펌웨어, 복구 펌웨어, 소프트웨어, 애플리케이션, 모듈, 프로그램, 기능) 및 데이터(예: 사용자 데이터, 운영 데이터)의 영구 저장소를 컴퓨팅 시스템(100)에 제공하도록 구성된다. 스토리지(104)의 제어기는, 예를 들어 애플리케이션 프로세서(102)의 명령에 따라 스토리지(104)에 데이터를 읽거나 쓰기 위해 스토리지 버스(110)상에서 통신한다. 도 1의 예에서 스토리지(104)는 운영 체제 커널(OS Kernel)과 운영 체제 파일 시스템의 두 가지 복사본(A 및 B)과 운영 체제 커널 및 운영 체제 파일 시스템의 설치 및 실행을 지원하는 데 필요한 기타 데이터를 포함한다.
저장소(104)의 예는 휘발성 메모리 및 비 휘발성 메모리, 고정 및 이동 가능한 미디어 장치, 실행 가능한 명령 및 지원 데이터를 유지하는 임의의 적절한 메모리 장치 또는 전자 데이터 저장소를 포함한다. 저장소(104)는 다양한 메모리 장치 구성에서 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 플래시 메모리, 및 다른 유형의 저장 메모리의 다양한 구현을 포함할 수 있다. 저장소(104)는 전파 신호를 제외한다. 스토리지(104)는 솔리드 스테이트 드라이브(SSD) 또는 하드 디스크 드라이브(HDD)일 수 있다.
메모리(106)는 스토리지(104)와는 별개로, 보안 부팅 및 펌웨어/복구 펌웨어 검증 기술을 수행하는 데 필요한 데이터를 저장하도록 구성된 시스템 메모리(예를 들어, 비 휘발성)인 보안 메모리 장치를 나타낸다. 메모리는 직렬 주변 장치 인터페이스(SPI: serial peripheral interface) 버스일 수 있는 메모리 버스(112)의 보안 프로세서(108) 및 애플리케이션 프로세서(102)와 통신하도록 구성된 플래시 메모리 칩일 수 있으며, 이 경우 메모리(106)는 SPI 플래시 칩이 될 수 있다. 컴퓨팅 시스템(100)의 다른 예들에서, 다른 유형의 비 휘발성 메모리가 메모리(106)에 사용될 수 있다.
메모리(106)는 쓰기 방지된 영역뿐만 아니라 보호되지 않은 또는 "쓰기 방지되지 않은" 영역을 포함한다. 쓰기 방지된 영역에서, 메모리(106)는 부트 디스크립터(Boot Descriptor), 시스템 펌웨어의 읽기 전용 부분(RO Firmware), 복구 펌웨어(Recov. Firmware) 및 루트 키(Root Key)(뿐만 아니라 복구 펌웨어에 서명하기 위한 복구 키와 같은 잠재적으로 다른 정보)를 포함한다. 비보호 영역(쓰기 비방지(Not Write-Protected))에서, 메모리(106)는 펌웨어의 읽기-쓰기 가능 부분의 2 개의 상이한 사본(복사본 또는 카피)(RW Firmware A, RW Firmware B) 및 기타 데이터(Other Data)를 포함한다.
펌웨어 및 복구 펌웨어를 유지하는 것은 메모리(106)의 넓은 영역을 차지할 수 있다. 메모리(106)는 "블록"으로 분할될 수 있다. 메모리(106)의 넓은 영역이 다수의 블록으로 분할되는 것이 바람직할 수 있다. 펌웨어 이미지는 여러 블록에 걸쳐있을 수 있다. 보안 프로세서(108)는 펌웨어 및 복구 펌웨어의 바디에 내장된 펌웨어 및 복구 펌웨어, 펌웨어 및 복구 펌웨어의 각 블록에 대한 예상 해시를 포함하여 메모리에서 펌웨어 및 복구 펌웨어를 유지할 수 있으며, 보안 프로세서(108)는 해당 블록에 대해 생성된 각각의 해시에 대해 차례로 검증할 수 있다. 일부 경우에, 전체 검증을 수행하는지 여부에 따라, 펌웨어 또는 복구 펌웨어가 복수의 블록을 포함할 때, 보안 프로세서(108) 및/또는 애플리케이션 프로세서(102)는 복수의 블록의 서브세트 각각에 대한 해시 값을 생성할 수 있다.
메모리(106)의 제어기는 메모리(106)의 비보호 영역에 저장된 데이터를 수정하거나 삭제할 수 있다. 그러나, 제어기는 메모리(106)에 대한 쓰기 방지가 인에이블되는 동안 메모리의 보호 영역에 저장된 데이터를 수정하거나 삭제할 수 없다. 메모리(106)는 물리적 버튼, 물리적 핀 또는 물리적 스위치와 같은 쓰기 보호를 비활성화하는 물리적 특징을 포함할 수 있다. 메모리(106)는 특수 프로그래밍 인터페이스 등과 같은 쓰기 방지를 비활성화하기 위한 전자 인터페이스를 포함할 수 있다. 보안 프로세서(108)는 보안 프로세서(108)와 메모리(106) 사이의 제어 링크(116A)를 사용하여, 예를 들어 컴퓨팅 시스템(100)이 펌웨어의 읽기 전용 부분의 새로운 버전을 설치할 수 있도록 메모리(106)의 쓰기 방지를 비활성화하는 신호를 전송할 수 있다.
메모리(106)에 저장된 시스템 펌웨어의 읽기 전용 부분은 바디 섹션과 헤더 섹션을 포함할 수 있다. 헤더 섹션에는 다음과 같은 정보가 포함될 수 있다.
● 식별 바이트 시퀀스(예: "magic number(매직 넘버)"), 보안 프로세서(108)에서 실행되는 펌웨어는 메모리(106)의 다른 블록들 중에서 헤더를 식별 할 수 있고 헤더 및 펌웨어가 여러 다른 가능한 주소 중 하나에 저장될 수 있게 한다.
● 펌웨어를 특정 장치 모델과 연결하고 시스템 펌웨어를 다른 장치 모델에서 실행하기 위한 다른 버전과 구별하기 위한 버전 넘버.
● 검증 키의 PH(public half)을 사용하여 헤더 섹션에 적용된 헤더 서명(예: 보안 프로세서 펌웨어에 저장됨). PrH(private half)은 하드웨어 제조업체, 운영 체제 개발자, 또는 컴퓨팅 시스템(100)이 검증 가능한 펌웨어만 실행하도록 작업하는 다른 엔티티와 같은 원격 엔티티에서 제어될 수 있다. PrH는 보안 프로세서 펌웨어에 저장될 수 있다.
● 보안 프로세서(108)가 시스템 펌웨어의 바디 섹션을 검증하기 위해 사용하는 검증 서브키. PrH는 하드웨어 제조업체, 운영 체제 개발자, 또는 컴퓨팅 시스템(100)이 검증 가능한 펌웨어만 실행하도록 작업하는 다른 엔티티와 같은 원격 엔티티에서 제어될 수 있다. PrH는 보안 프로세서 펌웨어에 저장될 수 있다.
펌웨어 이미지의 바디 섹션에는 다음이 포함될 수 있다.
● 시스템 펌웨어를 다른 버전과 구별하기 위해 증가하는 바디 버전 넘버
● 검증 서브키를 사용하여 바디 섹션에 적용된 바디 서명(예: 시스템 펌웨어의 헤더 섹션에 저장됨). PrH는 하드웨어 제조업체, 운영 체제 개발자, 또는 컴퓨팅 시스템(100)이 검증 가능한 펌웨어만 실행하도록 작업하는 다른 엔티티와 같은 원격 엔티티에서 제어될 수 있다.
● 메모리(106)의 쓰기 방지가 인에이블될 때 쓰기 방지되는 메모리(106) 부분을 제어하는 메모리(106)의 제어 레지스터에 대한 예상 값
● 펌웨어 또는 복구 펌웨어의 일부가 저장되는 메모리(106)의 다른 블록에 대응하는 각 엔트리를 갖는 예상 해시 값의 테이블
● 테이블의 엔티티 수
펌웨어 바디 섹션에 포함된 예상 해시 값 테이블의 각 엔티티는 다음을 지정할 수 있다.
● 블록의 메모리(106)에 있는 주소(또는 오프셋)
● 블록의 크기(예: 바이트)
● 검증에 사용하기 위해 블록에 할당된 가중치. 가중치는 고정 소수점 값, 로그 값 또는 기타 유형의 파라미터로 표현할 수 있다. 최대 가중치는 블록이 항상 확률적 검증 체계로 검증되도록 할 수 있다. 최소 가중치로 인해 확률적 검증 체계에서 블록이 검증되지 않을 수 있다. 최대 가중치와 최소 가중치 사이의 가중치는 가중치가 최대 가중치에 가까운 값인지 또는 최소 가중치에 가까운 값인지에 따라 블록이 더 자주 또는 덜 자주 검증되도록 한다.
● 블록에 저장된 펌웨어 또는 복구 펌웨어 부분의 예상 해시(예: SHA-256)
애플리케이션 프로세서(102)는 컴퓨팅 시스템(100)의 메인 프로세싱 콤플렉스이고 보안 프로세서(108)는 컴퓨팅 시스템(100)의 특수 프로세싱 유닛이다. 애플리케이션 프로세서(102)는 주로 컴퓨팅 시스템(100)이 다양한 동작을 수행하게 하기 위한 명령(예를 들어, 펌웨어, 복구 펌웨어, 커널 소프트웨어, 운영 체제 소프트웨어)을 실행하도록 구성되는 반면, 보안 프로세서(108)는 보안 및 검증 동작을 수행하도록 구성된 지원 프로세서이다. 예를 들어, 컴퓨팅 시스템(100)이 모바일 컴퓨터(예: 모바일 폰)에서 SoC 인 경우, 애플리케이션 프로세서(102)는 운영 체제에 의해 제공되는 운영 환경에서 실행되는 애플리케이션 및 운영 체제와 관련된 명령을 실행할 수 있다. 보안 프로세서(108)는 운영 체제의 보안 부팅을 관리하기 위해 애플리케이션 프로세서(102)와 상호 작용할 수 있고, 애플리케이션 프로세서(102)가 펌웨어를 실행하기 전에 펌웨어의 검증을 수행할 수 있거나, 컴퓨팅 시스템(100)이 복구 모드에 진입하는 경우 애플리케이션 프로세서(102)가 복구 펌웨어를 실행하기 전에 복구 펌웨어를 검증할 수 있다.
애플리케이션 프로세서(102) 및 보안 프로세서(108)는 각각 하나 이상의 제어기, 마이크로 제어기, 프로세서, 마이크로 프로세서, 하드웨어 프로세서, 하드웨어 처리 장치, 디지털 신호 프로세서, 그래픽 프로세서, 그래픽 처리 장치 등의 임의의 조합을 포함할 수 있다. 애플리케이션 프로세서(102) 및 보안 프로세서(108)는 각각 컴퓨팅 시스템(100)의 동작을 제어하기 위해 컴퓨터 실행 가능 명령을 처리하는 통합 프로세서 및 메모리 서브 시스템(예를 들어, SoC로서 구현됨)일 수 있다. 일부 예들에서, 컴퓨팅 시스템(100)은 일반적으로 애플리케이션 프로세서(102) 및 보안 프로세서(108)로 식별되는 처리 및 제어 회로와 관련하여 구현되는 하드웨어 또는 고정 논리 회로 중 어느 하나 또는 이들의 조합으로 구현될 수 있다.
보안 프로세서(108)의 내부 비 휘발성 메모리 영역에서, 보안 프로세서는 펌웨어 관리 파라미터(FWMP), 보안 프로세서 펌웨어(SPFW), 생성된 해시 값(Generated hash) 및 기타 데이터를 유지한다. 보안 프로세서(108)는 보안 프로세서 펌웨어를 실행하기 전에 내부 검증 프로세스를 사용하여 보안 프로세서 펌웨어(예를 들어, 일부 시스템에서 "Cr50"로 지칭 됨)를 검증한다.
펌웨어 관리 파라미터는 애플리케이션 프로세서(102)에 의해 설정되는 구성 파라미터를 나타낸다. 일부 예에서, 컴퓨팅 시스템(100)은 펌웨어 관리 파라미터를 변경하기 위해 애플리케이션 프로세서(102)에 대한 패스워드(암호)를 요구할 수 있다. 일부 예들에서, 패스워드는 컴퓨팅 시스템(100)의 초기 설정 후에 컴퓨팅 시스템(100)에 의해 삭제되거나 "forgotten(잊혀질)"수 있고, 이에 의해 펌웨어 관리 파라미터가 정적(static)이거나 한 번에 기록되게 한다.
펌웨어 관리 파라미터는 운영 체제 개발자 모드 활성화 여부, 보안 칩 펌웨어 디버깅 모드 활성화 여부 등 다양한 보안 관련 설정을 포함할 수 있다. 펌웨어 및 복구 펌웨어 검증을 활성화하려면, 펌웨어 관리 파라미터는 "확률적 검증" 또는 "부분 검증" 또는 "검증 없음(비검증)"(예: 검증을 완전히 비활성화하는 옵션)이 아닌 컴퓨팅 시스템(100)의 각 부팅에서 "전체 검증(full verification)"을 강제하는 옵션을 포함하여 하나 이상의 다른 옵션 또는 보안 관련 설정을 포함할 수 있다. 전체 검증 및 확률적 검증을 포함하는 다양한 검증 모드에 대한 세부 사항은 다른 도면들을 참조하여 설명된다.
일부 예에서, 보안 프로세서(108)는 펌웨어 관리 파라미터를 통해 더 많은 옵션 또는 설정을 처리하는 것을 지원할 수 있다. 예를 들어, 펌웨어 관리 파라미터에는 검증 프로세스의 복잡성과 유용성에 대해 보안을 절충할 수 있는 엔터프라이즈 및 개발자 유연성을 가능하게 하는 추가 옵션이 포함될 수 있다. 예를 들어 전체 검증, 확률 검증 또는 검증 없음을 선택하는 옵션만 포함하는 대신, 펌웨어 관리 파라미터는 사용자 또는 보안 관리자가 가중치를 조정하기 위한 옵션을 포함할 수 있으며 따라서 확률적 검증 중에 특정 블록을 검증할 확률을 조정할 수 있다.
일부 예에서, 펌웨어 관리 파라미터는 보안 프로세서(108)의 추가 구성을 제공할 수 있다(예: 기업과 개발자가 보안과 유용성을 절충할 수 있는 유연성을 높이기 위한 설정). 예를 들어, 하나의 추가 설정은 특정 펌웨어 또는 복구 펌웨어 블록에 첨부된 할당된 가중치에 대한 수정자가 될 수 있어 부분 또는 확률적 검증 중에 블록이 검사될 가능성을 조정할 수 있다. 다른 펌웨어 관리 파라미터는 보안 프로세서(108)가 (예: 펌웨어의 헤더 섹션 내의) 모델별 검증 데이터를 검증하도록 요구하고, 선택적으로 모델별 검증 데이터가 있는 경우 검증하고 존재하지 않는 경우 검증을 무시하거나 모델별 검증 검증을 모두 무시하도록 하는(예: 개발자에게 유용할 수 있음) 설정일 수 있다.
보안 프로세서(108)는 보안 프로세서(108) 및/또는 애플리케이션 프로세서(102)가 펌웨어 또는 복구 펌웨어 검증을 수행하기 위해 액세스할 수 있는 보안 프로세서(108)의 내부 비 휘발성 메모리에 검증 상태 정보를 유지할 수 있다. 예를 들어, 보안 프로세서(108)는 새로운 상태로 업데이트되도록 증가될 수 있지만 감소되지 않는(전원을 제거하지 않고) 하나 이상의 플랫폼 구성 레지스터(Platform Configuration Registers)를 가질 수 있다. 예를 들어, 보안 프로세서는 다음을 포함하는 검증 상태 정보를 유지할 수 있다.
● 펌웨어 또는 복구 펌웨어의 하나 이상의 블록에 적용된(예를 들어, 애플리케이션 프로세서(102) 또는 보안 프로세서(108)에 의해) 보안 해시 함수로부터 출력된 값을 나타내는 "생성된 해시"
● 생성된 해시를 사용하여 펌웨어 또는 복구 펌웨어를 검증할 수 있는지 여부에 대한 상태 표시기(indicator)
전술한 바와 같이, 보안 프로세서 펌웨어 내에서, 보안 프로세서(108)는 시스템 펌웨어의 헤더 섹션에 적용된 헤더 서명을 검증하기 위한 검증 키를 유지할 수 있다. 예를 들어, 보안 프로세서 펌웨어의 헤더 섹션으로부터, 보안 프로세서(108)는 컴파일 동안 시스템 펌웨어에 적용된 헤더 서명을 검증하기 위한 검증 키(또는 저장 공간을 절약하기 위한 해시)를 결정할 수 있다(예 : 시스템 펌웨어 검증 키의 PH(private half)가 컴파일러에 알려지고 컴파일 중에 시스템 펌웨어에 적용됨). 보안 프로세서(108)는 시스템 펌웨어의 바디를 계속 검증하기 전에 보안 프로세서 펌웨어(예를 들어, Cr50의 헤더 섹션에 내장됨)에 저장된 검증 키에 대해 시스템 펌웨어에 적용된 헤더 서명을 초기에 검증(체크)할 수 있다. 보안 프로세서(108)는 시스템 펌웨어를 계속 검증하기 전에 시스템 펌웨어의 바디 섹션에 저장된 검증 서브키에 대해 시스템 펌웨어에 적용된 바디 서명을 후속적으로 검증(체크)할 수 있다.
애플리케이션 프로세서(102), 보안 프로세서(108) 및 메모리(106)는 호스트 버스(114) 및 메모리 버스(112)에서 데이터를 교환하여 메모리(106)에 로드된 펌웨어 및 복구 펌웨어를 검증한다. 애플리케이션 프로세서(102)는 보안 프로세서(108)에 의해 유지되는 펌웨어 관리 파라미터를 초기화할 수 있고, 펌웨어 관리 파라미터에 따라, 보안 프로세서(108)는 펌웨어의 해시를 생성하고 생성된 해시를 보안 프로세서(108)가 메모리(106)에 저장된 펌웨어의 바디 섹션으로부터 추출한 예상 해시와 비교하는 것을 포함하여 펌웨어를 검증할 수 있다. 보안 프로세서(108)는 복구 펌웨어의 해시를 생성하고(또는 복구 펌웨어의 해시를 생성하기 위해 애플리케이션 프로세서(102)에 의존) 생성된 해시를 보안 프로세서(108)가 메모리(106)에 저장된 복구 펌웨어의 바디 섹션으로부터 추출한 예상 해시와 비교하는 것을 포함하여 복구 펌웨어를 검증할 수 있다.
동작시에, 보안 프로세서(108)는 보안 프로세서(108)에 의해 유지되는 시스템 펌웨어 검증 키(또는 그 해시)를 사용하여 펌웨어의 헤더 서명을 초기에 검증할 수 있다. 보안 프로세서(108)가 헤더의 서명이 부정확하다고 결정하면, 보안 프로세서(108)는 컴퓨팅 시스템(100)이 호환되지 않거나 손상된 시스템 펌웨어를 로딩 및 실행하는 것을 방지하기 위해 컴퓨팅 시스템(100)을 셧다운(종료)할 수 있다. 헤더 시스템 펌웨어의 서명이 검증 키를 사용하여 검증 가능하다고 가정하면, 보안 프로세서(108)는 시스템 펌웨어의 바디 섹션에 적용된 바디 서명이 검증 서브 키를 사용하여 생성되었는지 여부를 결정할 수 있다. 보안 프로세서(108)가 바디 섹션의 서명이 부정확하다고 결정하면, 보안 프로세서(108)는 컴퓨팅 시스템(100)이 호환되지 않거나 손상된 시스템 펌웨어를 로딩 및 실행하는 것을 방지하기 위해 컴퓨팅 시스템(100)을 종료할 수 있다.
바디 섹션의 서명이 검증 서브키를 사용하여 검증할 수 있다고 가정하고, 보안 프로세서(108)는 펌웨어 관리 파라미터에 따라 메모리(106)에 로드된 시스템 펌웨어 또는 복구 펌웨어의 블록의 예상 해시 값을 결정한다. 예를 들어, 시스템 펌웨어의 전체 검사 동안 및 시스템 펌웨어의 헤더 또는 바디로부터, 보안 프로세서(108)는 메모리(106)에 저장된 시스템 펌웨어의 각 블록에 대한 예상 해시 값을 식별할 수 있다. 예상 해시 값은 시스템 펌웨어의 고정된 속성으로 유지될 수 있으며 컴파일 시간과 같이 미리 결정될 수 있다. 시스템 펌웨어 및 복구 펌웨어를 실행하기 위한 조건으로, 보안 프로세서(108)는 현재 메모리(106)에 저장된 시스템 펌웨어 및 복구 펌웨어의 블록의 생성된 해시 값을 시스템 펌웨어 및 복구 펌웨어에 내장된 미리 결정된 예상 해시 값과 비교한다.
보안 프로세서(108)는 메모리(106)에 로드된 시스템 펌웨어의 블록에 직접 해시 기능을 적용할 수 있거나, 보안 프로세서(108)는 백그라우드(배경) 또는 운영 체제 태스크로서 해시 기능을 적용하기 위해 애플리케이션 프로세서(102)에 의존할 수 있다. 두 경우 모두 생성된 해시 값은 예상 해시 값과 비교된다. 보안 프로세서(108)가 해시들 간의 불일치를 식별하면, 보안 프로세서(108)는 애플리케이션 프로세서(102)가 잠재적으로 손상되거나 악의적인 펌웨어 또는 복구 펌웨어를 실행하는 것을 방지하기 위해 실패한 검증을 애플리케이션 프로세서(102)에 통지할 수 있다.
후속 부팅 프로세스 동안, 보안 프로세서(108)는 시스템 펌웨어의 생성된 해시를 새로 고침하여 시스템 펌웨어의 첫 번째(제1) 생성된 해시를 시스템 펌웨어의 두 번째(제2) 생성된 해시로 대체함으로써 위의 검증 프로세스를 반복할 수 있다. 예를 들어 시스템 펌웨어가 이전에 검증에 실패한 경우, 보안 프로세서는 시스템 펌웨어와 관련된 해시를 재생성하여 후속 검증 시도를 활성화할 수 있다. 시스템 펌웨어의 예상 해시가 제2 해시와 일치하지 않는다는 결정에 응답하여, 보안 프로세서(108)는 애플리케이션 프로세서(102)가 복구 모드로 들어가도록 지시하거나 그렇지 않으면 시스템 펌웨어의 실행을 자제할 수 있다.
일부 예들에서, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어가 검증에 실패할 때를 나타내기 위해 컴퓨팅 시스템(100)의 발광 다이오드(LED) 또는 스피커와 같은 출력 컴포넌트를 제어할 수 있다. 이는 또한 예를 들어 2 단계 인증이 요청되었음을 표시하기 위해 다른 시간에 보안 프로세서(108)에 의해 사용될 수 있다. 출력 컴포넌트는 보안 프로세서(108)에 의해 사용되는 전용 출력 컴포넌트일 수 있다. 다른 경우에는 출력 컴포넌트가 이중 기능(예: 전원 또는 충전 식별자 또는 키보드 또는 디스플레이 백라이트)을 가질 수 있다. 보안 프로세서(108)는 실패한 검증, 성공적인 검증, 또는 다른 상태를 표시하도록 출력 컴포넌트를 제어할 수 있다. 이러한 출력 컴포넌트는 이중 목적(예: 전원 또는 충전 LED, 키보드 또는 디스플레이 백라이트)을 가질 수 있거나, 펌웨어 상태 및 복구 펌웨어 검증을 제공하기 위해 컴퓨팅 시스템(100)에 의도적으로 통합될 수 있다. 출력 컴포넌트에 대한 전형적인 제어 방식은 출력 컴포넌트를 제어하기 위해 애플리케이션 프로세서(102)로부터 보안 프로세서(108)로 메시지를 전송하는 것을 포함할 수 있다. 다른 예들에서, 보안 프로세서(108)는 애플리케이션 프로세서(102)의 출력을 측정하기 위해 핀(pin) 상에 펄스 폭 변조(PWM) 캡처 유닛을 가질 수 있고, 보안 프로세서(108)는 출력을 출력 컴포넌트로 복제하기 위해 자체 PWM 유닛을 가질 수 있다. 다른 예들에서, 보안 프로세서(108)는 출력 컴포넌트를 제어하기 위해 애플리케이션 프로세서(102)에 의해 제어 가능한 내부 스위치를 가질 수 있다.
컴퓨팅 시스템(100)에 물리적으로 접근하는 공격자는 출력 컴포넌트를 제거하거나 출력 컴포넌트로부터 광을 차단할 수 있다. 검증 과정에서 출력 컴포넌트를 제어함으로써, 보안 프로세서(108)는 시동 중 몇 초 동안 자동차의 체크-엔진 표시등이 즉시 표시되는 방식과 유사하게 부팅 또는 로그인 프로세스 동안 매우 일찍 출력 컴포넌트를 활성화함으로써 그러한 공격을 더 어렵게 만든다. 공격자는 그 동작을 복제하기 위해 컴퓨팅 시스템(100)의 다른 프로세서에 출력 컴포넌트를 연결할 수 있지만, 이는 영구적이고 아마도 눈에 띄는 하드웨어 수정을 포함한다.
일부 경우에, 보안 프로세서(108)는 기록 보호 신호에 연결된 단일 오픈 드레인 핀을 포함할 수 있다. 이는 레지스토(resistor)를 통해 연결되어 제조 과정에서 디버거가 해당 신호를 무시할 수 있도록 한다. 이 레지스토를 제거하는 것은 공격자가 보안 프로세서(108)가 쓰기 방지 신호를 구동할 수 있는 것과 쓰기 방지 신호의 현재 상태를 검출할 수 있는 것을 방지하기 위해 적당히 실행 가능한 방법이다. 보안 프로세서(108)는 제1 기록 보호 핀과 정확히 동일한 네트에 연결된 제2 핀을 포함할 수 있다. 추가 핀은 마더 보드의 내부 레이어 아래에 숨겨 신호를 더 어렵게 만들 수 있다. 보안 프로세서(108)는 제1 기록 보호 핀의 참 상태를 측정하기 위해 그 신호를 모니터링할 수 있다.
공격자는 보안 프로세서(108)가 쓰기 방지 핀에 대한 상태 변화를 검출하는 것을 방지하기 위해 컴퓨팅 시스템(100)의 전원을 차단할 필요가 있을 것이다. 그러나, 부팅시, 보안 프로세서(108)는 시스템 메모리(106)를 재검색하고 변경을 식별할 수 있다. 공격자는 시스템 메모리(106)를 SPI 버스의 더 많은 제어를 허용하는보다 정교한 회로로 교체하고 그 회로 위에 새로운 메모리(106)를 쌓을 수 있다. 그러나 이는 훨씬 더 어려운 공격이며 물리적 증거를 남긴다.
주로 애플리케이션 프로세서에서 실행 가능한 펌웨어를 검증하기 위해 설명되었지만 복구 펌웨어를 안전하게 검증하는 기술은 다른 프로세서에도 적용된다. 예를 들어, 애플리케이션 프로세서(102) 및 보안 프로세서(108)에 추가하여, 컴퓨팅 시스템(100)은 임베디드 제어기(EC) 지문 센서(FPMCU), 다른 하드웨어 유닛, 하드웨어 가속기 유닛 등과 같은 펌웨어를 갖는 다른 프로세서를 포함할 수 있다. 보안 프로세서(108)가 다른 프로세서의 펌웨어에 액세스할 수 있다면, 보안 프로세서(108)는 또한 보안 프로세서(108)가 애플리케이션 프로세서(102)의 펌웨어를 검증하는 방식으로 펌웨어 및 복구 펌웨어를 검증할 수 있다. 따라서 다른 프로세서는 보안 검증이 제공하는 유연성과 보안의 이점을 누릴 수 있다.
도 2는 펌웨어를 검증하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다. 도 2는 복구 펌웨어를 검증하도록 구성된 보안 프로세서의 예시적인 동작을 예시하는 흐름도이다. 동작(200)은 단계 202-214를 포함한다. 동작(200)은 도 12 도시된 것과 다른 순서로 또는 추가 또는 더 적은 동작으로 수행 될 수 있다. 보안 프로세서(108)는 동작(200)을 수행하여 메모리(106)에 유지되는 시스템 펌웨어를 검증할 수 있다.
도 2에 도시된 바와 같이, 보안 프로세서(108)는 컴퓨팅 시스템(100)의 파워-온 또는 리셋 각각 동안 동작(200)을 실행할 수 있다. 보안 프로세서(108)는 슬립 모드의 전환에 응답하여 동작(200)을 실행할 수 있다. 보안 프로세서(108)는 보안 프로세서(108)의 리셋에 응답하여(예를 들어, 사용자가 보안 프로세서(108)를 재설정하도록 트리거하는 특정 키 입력 조합을 제공하는 경우) 동작(200)을 실행할 수 있다.
202에서, 보안 프로세서(SP)(108)가 전원을 켜거나, 깨우거나, 리셋할 때, 보안 프로세서는 자신의 보안 프로세서 펌웨어를 검증,로드 및 실행한다. 204에서, 보안 프로세서(108)는 펌웨어를 검증하기 위한 옵션을 포함하는 펌웨어 관리 파라미터를 유지한다. 다시 말해, 보안 프로세서(108)는 예를 들어 컴퓨팅 시스템(100)의 각 부팅에서 복구 펌웨어의 "전체 검증", "확률적 검증" 또는 복구 펌웨어의 비검증을 수행함으로써, 펌웨어 관리 파라미터로부터 추론된 정보에 기초하여 시스템 펌웨어 또는 복구 펌웨어를 검증하도록 구성될 수 있다. 보안 프로세서(108)는, 보안 프로세서(108)가 검증 레벨(예: 전체 검증, 부분 또는 확률 검증 또는 비검증)을 결정하고 애플리케이션 프로세서(102) 및/또는 보안 프로세서(108)에 의해 수행된 이전 검증 프로세스의 결과를 결정하기 위해 사용하는 펌웨어 관리 파라미터로서 상태 정보 및 플래그를 저장할 수 있다.
펌웨어 관리 파라미터는 컴퓨팅 시스템(100)의 초기 부팅에서 애플리케이션 프로세서(102)에 의해 초기화될 수 있다. 복구 펌웨어의 전체 검증을 수행할 때, 보안 프로세서(108)는 펌웨어의 바디 섹션에 기록된 각각의 예상 해시에 대해 펌웨어의 각 블록에 대해 생성된 해시를 검증하는 것을 포함하여 전체적으로 복구 펌웨어를 검증한다. 복구 펌웨어의 검증을 수행하지 않을 때, 보안 프로세서(108)는 펌웨어에 대한 해시를 생성하는 것을 억제한다(예를 들어, 디버깅에 유용함). 펌웨어의 일부 블록은 컴퓨팅 시스템(100)의 기능에 영향을 미치지 않을 수 있다. 부팅시 또는 복구 중에 특정 블록을 건너 뛰는 것은(스킵) 컴퓨팅 시스템(100)의 보안을 크게 감소시키지 않으면서 컴퓨팅 시스템(100)이 더 넓은 범위의 시나리오에서 동작하는 것을 허용할 수 있다. 이와 같이, 펌웨어의 가중치 테이블은 각 펌웨어 블록과 관련된 가중치 계수(factor)를 지정하고 블록을 건너뛸 수 있는지 여부를 결정하는 데 사용될 수 있다.
일부 예에서, 일부 블록은 딥 슬립에서 복구할 때 또는 애플리케이션 프로세서 및/또는 보안 프로세서가 셧다운될 수 있는 저전력 일시 중지 모드에 들어갈 때 사용될 가능성이 적을 수 있다. 일반 부팅에 사용되는 일부 블록이 있는데, 이는 루트 키 또는 펌웨어의 다른 부분과 같은 저전력 일시 중지 모드로 들어가거나 딥 슬립에서 다시 시작(재개)하는 데 영향을 주지 않는다. 재개하는데 이러한 블록을 건너 뛰면 보안을 크게 저하시키지 않고 재개 시간을 향상시킬 수 있다.
206에서, 보안 프로세서는 컴퓨팅 시스템(100)이 복구 모드에 있는지 또는 정상, 비 복구 모드를 가정할지 여부를 결정한다. 예를 들어, 보안 프로세서(108)는 컴퓨팅 시스템(100)의 사용자가 키보드 또는 컴퓨팅 시스템(100)의 다른 입력 컴포넌트에서 특정 입력을 검출하는 것에 응답하여 복구 모드를 수동으로 선택하는지 여부를 검증할 수 있다. 다른 경우에, 보안 프로세서(108)는 복구 펌웨어를 검증하기 위한 애플리케이션 프로세서(102)로부터의 요청을 수신하는 것에 응답하여 복구 모드에 진입하고 복구 펌웨어의 검증을 시작할 수 있다. 애플리케이션 프로세서(102)는 실행 전에 복구 펌웨어를 검증할 수 있다. 복구 펌웨어의 생성된 해시와 예상되는 해시 간의 불일치를 감지하면, 애플리케이션 프로세서(102)는 복구 모드로 들어가기 위한 명령을 보안 프로세서(108)에(예를 들어, 호스트 버스트(114)를 통해) 전달할 수 있다.
복구 모드로 들어가는(진입하는) 결정에 응답하여, 보안 프로세서(108)는 도 3에 도시된 동작(300)을 수행한다. 대안적으로, 비 복구 모드로 들어가는 결정에 응답하여, 보안 프로세서는 단계 208을 수행하여 보안 프로세서(108)에 의해 유지되는 펌웨어 관리 파라미터에 기초하여 시스템 펌웨어를 자동으로 검증함으로써 계속된다.
208A에서, 보안 프로세서(108)는 시스템 펌웨어 검증 키 및 서브 키에 대해 시스템 펌웨어에 적용된 서명을 검증(체크)한다. 예를 들어, 보안 프로세서(108)는 펌웨어의 헤더 서명을 검증하기 위해 보안 프로세서 펌웨어의 헤더 섹션에 유지되는(또는 보안 프로세서(108) 내의 다른 곳에서 유지됨) 검증 키를 사용할 수 있다. 시스템 검증 키의 PrH(private half)는 운영 체제 개발자 또는 컴퓨팅 시스템(100)의 제조업체에 의해 유지될 수 있으며, 애플리케이션 프로세서(102)에서 실행되도록 의도된 시스템 펌웨어를 컴파일하고 서명하는 데 사용되는 공식 컴파일러에게 제공될 수 있다.
헤더 서명을 검증하는 것에 응답하여, 보안 프로세서(108)는 시스템 펌웨어에 적용된 바디 서명을 검증하기 위해 시스템 펌웨어의 헤더 섹션으로부터 검증 서브 키를 사용할 수 있다. 시스템 검증 서브 키의 PrH(private half)는 운영 체제 개발자 또는 컴퓨팅 시스템(100)의 제조업체에 의해 유지될 수 있으며, 애플리케이션 프로세서(102)에서 실행되도록 의도된 시스템 펌웨어의 바디을 컴파일하고 서명하는 데 사용되는 공식 컴파일러에게 제공될 수 있다.
보안 프로세서(108)가 적절한 검증 키 및 검증 서브 키를 사용하여 시스템 펌웨어가 서명되지 않았다고 결정하면, 보안 프로세서(108)는 시스템 펌웨어 검증 체크에 실패하고 단계 210으로 진행한다. 대안적으로, 보안 프로세서(108)는 시스템 펌웨어에 적용된 서명을 검증하는 것에 응답하여 단계 208B 내지 208D에서 펌웨어를 검증한다.
펌웨어 검증 프로세스의 일부로서 서명을 검증하는 것은 단계 208C 내지 208D에서 단순히 해시를 검증하는 것보다 보안 프로세서(108)의 자원에 더 많은 부담을 줄 수 있다. 보안 프로세서(108)는 보안 프로세서(108)가 다음에 보안 프로세서가 동작(200)을 실행할 때 더 빠른 서명 검사를 수행할 수 있도록 단계(208)에서 생성된 중간 값(예를 들어, 서명 해시)을 저장할 수 있다.
보안 프로세서(108)는 "롤백 보호(rollback protection)"를 제공할 수 있다. 보안 프로세서(108)가 검증한 검증된 복구 펌웨어의 최고 버전 넘버(번호)를 보존함으로써, 보안 프로세서(108)는 가장 높은 버전 번호보다 낮은 버전 번호를 갖는 이전 버전이 검사될 때 컴퓨팅 시스템(100)에 경고하는 통지를 출력할 수 있다. 예를 들어, 보안 프로세서(108)에 의해 검증된 이전 버전이 버전 B 였음에도 불구하고 펌웨어의 헤더 섹션이 버전 A를 나타내면, 보안 프로세서는 내부 레지스터에 플래그를 설정하거나 그렇지 않으면 펌웨어가 이전 버전으로 "롤백"되었다는 경고(예를 들어, 사용자 인터페이스를 통한 출력용)를 애플리케이션 프로세서(102)에 신호할 수 있다.
펌웨어 관리 파라미터에 기초하여, 보안 프로세서(108)는 전체 검증을 수행할 때 시스템 펌웨어의 각 블록에 대해 단계 208B 내지 208D를 수행하고, 부분 검증 또는 확률 검증을 수행할 때 시스템 펌웨어의 일부 블록만 수행하고, 펌웨어 관리 파라미터가 검증을 건너뛸 수 있음을 나타낼 때 시스템 펌웨어의 블록 중 어느 것도 수행하지 않는다.
208B에서, 보안 프로세서(108)는 시스템 펌웨어에 대해 생성된 해시를 결정하기 위해 펌웨어 관리 파라미터에 기초하여 시스템 펌웨어를 해시한다. 예를 들어, 보안 프로세서(108)는 메모리(106)로부터 시스템 펌웨어의 개별 블록 중 하나 이상을 로드하고 블록에 해시 함수를 적용할 수 있다. 보안 프로세서는 예상 해시 값에 대한 후속 비교를 위해 레지스터 또는 내부 메모리에 해시 함수의 결과를 유지할 수 있다.
208C에서 보안 프로세서(108)는 시스템 펌웨어에 대한 예상 해시를 결정한다. 예를 들어, 컴퓨팅 시스템(100)은 시스템 펌웨어가 메모리(106)에 유지되는 시스템 펌웨어의 블록의 예상 해시 값을 기록하기 위한 전용 및 발견 가능한 영역(예: 바디 섹션의 일부)을 포함하도록 요구할 수 있다. 펌웨어 및 복구 펌웨어는 일반적으로 펌웨어 및 복구 펌웨어를 펌웨어 이미지의 일부로 컴파일하는 포괄적 인 빌드 프로세스 중에 빌드되므로 시스템 펌웨어에 포함된 예상 해시 값은 일반적으로 복구 펌웨어를 검증하는 데 충분하다. 보안 프로세서(108)는 펌웨어 바디 섹션의 미리 결정된 영역에서 특정 값을 추출하여 예상 해시를 결정할 수 있다.
208D에서, 보안 프로세서(108)는 예상 해시와 생성된 해시가 일치하는지 여부를 결정한다. 해시가 일치하면, 보안 프로세서(108)는 펌웨어를 검증하고 펌웨어가 검증되었음을 반영하기 위해 보안 프로세서(108)에 의해 유지되는 상태 레지스터를 업데이트한다. 마찬가지로 해시가 일치하지 않으면 보안 프로세서가 상태 레지스터를 업데이트하여 펌웨어를 검증할 수 없음을 나타낸다.
210에서 보안 프로세서는 펌웨어가 성공적으로 검증되었는지 여부를 결정한다. 212에서, 펌웨어가 단계 208에서 검증 체크에 실패하고 검증되지 않을 때, 보안 프로세서(108)는 컴퓨팅 시스템(100)에 부팅 및 파워 다운을 종료하도록 지시한다. 214에서, 펌웨어가 단계 208에서 검증 체크를 통과하고 검증될 때, 보안 프로세서(108)는 리셋으로부터 애플리케이션 프로세서(102)를 해제하고 애플리케이션 프로세서(102)가 펌웨어를 실행할 수 있게 함으로써 부팅 프로세스를 계속하도록 컴퓨팅 시스템(100)에 지시한다.
도 3은 복구 펌웨어를 검증하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다. 동작(300)은 단계 302-308을 포함한다. 동작(300)은 도 3에 도시된 것과 다른 순서로 또는 추가 또는 더 적은 동작으로 수행될 수 있다. 보안 프로세서(108)는 메모리(106)에 유지되는 복구 펌웨어를 검증하기 위한 동작(300)을 수행할 수 있다.
도 3에 도시된 바와 같이, 보안 프로세서(108)는 동작(200)의 단계(206)에서 컴퓨팅 시스템(100)이 복구 모드에 진입하고 있다고 결정하는 보안 프로세서에 응답하여 동작(300)을 실행할 수 있다.
컴퓨팅 시스템(100)은 다양한 방식으로 복구 모드에 들어갈 수 있다. 예를 들어, 컴퓨팅 시스템(100)은 (예를 들어, 컴퓨팅 시스템(100)의 입력 컴포넌트로부터 다른 신호를 감지함으로써, 컴퓨팅 시스템(100)의 키보드에서 특정 키 누름을 감지함으로써) 사용자가 복구 모드로의 진입을 수동으로 요청하고 있다고 결정하는 애플리케이션 프로세서(102)에 응답하여 복구 모드에 들어갈 수 있다.
컴퓨팅 시스템(100)은 시스템 펌웨어의 읽기 전용 부분을 실행하는 동안, 애플리케이션 프로세서(102)가 시스템 펌웨어의 읽기 쓰기 가능 부분에 적용된 서명이 부정확하다고 결정하면 복구 모드로 들어갈 수 있다. 시스템 펌웨어의 읽기 전용 부분은 메모리(106)의 쓰기 방지된 부분에 저장된 루트 키를 사용하여 서명을 검증할 수 있다.
복구 모드로 들어가기 전에, 컴퓨팅 시스템(100)의 운영 체제는 예를 들어 백그라운드 태스크로서 복구 펌웨어를 검증하고 메모리(106)에 복구 펌웨어에 대한 예상 해시를 저장할 수 있다. 정상 부팅시, 컴퓨팅 시스템(100)은 복구 펌웨어가 초기 부팅 경로 동안 실행되지 않을 것이기 때문에 복구 펌웨어를 검증할 필요가 없다. 사용자로부터 복구 모드로 들어가라는 명령을 받지 않는 한, 애플리케이션 프로세서(102)는 복구 펌웨어를 검증하지 않고 운영 체제에 대해 부팅할 수 있다.
운영 체제는 정상적인 부팅 경로가 실패할 때까지, 컴퓨팅 시스템(100)에 의해 인식되지 않을 수 있는, 공격자가 복구 펌웨어를 비활성화하는 것을 방지하기 위해 정상 작동 중에 백그라운드에서 복구 펌웨어를 검증할 수 있다. 공격자가 컴퓨팅 시스템(100)이 검증되지 않은 코드를 실행하도록 하는 것이 반드시 방지되는 것은 아니지만, 적어도 운영 체제가 백그라운드에서 복구 펌웨어의 무결성을 검사하게 하면서, 재부팅 전에 컴퓨팅 시스템(100)이 잠재적인 공격자를 미리 탐지하도록할 수 있다. 일부 경우에, 개발자는 새로운 펌웨어 버전을 테스트할 수 있고 컴퓨팅 시스템(100)이 잠재적으로 불량하거나 검증되지 않은 펌웨어를 실행하고 있다는 것을 미리 통지 또는 경고 받기를 원할 수 있다. 이는 컴퓨팅 시스템(100)이 신뢰할 수 없는 복구 펌웨어를 실행하기 전에 사용자에게 복구 펌웨어를 실행하지 않거나 펌웨어를 수리하지 않을 수 있는 선택을 제공할 수 있다.
애플리케이션 프로세서(102)에서 실행되는 운영 체제 또는 다른 서비스 또는 스레드는 다양한 이유로 복구 펌웨어를 재검증하기 위해 보안 프로세서(108)가 복구 모드로 들어가도록 요청할 수 있다. 운영 체제 또는 다른 서비스 또는 스레드는 호스트 버스(112)를 통해 보안 프로세서(108)와 통신함으로써 재검증 요청을 전달한다.
애플리케이션 프로세서(102)는 일반적으로 보안 프로세서(108)보다 더 강력하고 빠르다. 이와 같이, 애플리케이션 프로세서(102)의 더 빠른 처리 속도, 더 큰 대역폭 및 전력은 보안 프로세서(108)가 할 수 있는 것보다 더 빨리 복구 펌웨어를 초기에 검증하기 위해 컴퓨팅 시스템(100)에 의해 활용될 수 있다.
실행 중에, 시스템 펌웨어는 이전 부팅에서 처음 결정된대로 시스템 메모리에 복구 펌웨어의 예상 해시를 유지할 수 있다. 복구 펌웨어와 시스템 펌웨어(읽기 전용 부분 포함)가 동시에 구축되기 때문에 해시는 복구 펌웨어의 무결성을 결정(예: 마지막 사용 이후 복구 펌웨어가 변경되었는지 여부)하는 데 충분한 참조 포인트(reference point)를 제공할 수 있다. 컴퓨팅 시스템(100)이 복구 모드에 진입하고 있다고 결정하면, 시스템 펌웨어는 애플리케이션 프로세서(102)에게 복구 펌웨어의 예상 해시를 메모리(106)에 로드된 복구 펌웨어의 애플리케이션 프로세서가 생성하는 해시와 비교하도록 지시한다.
예상 및 생성된 해시가 일치한다는 결정에 응답하여, 애플리케이션 프로세서(102)는 복구 펌웨어를 실행한다. 복구 펌웨어가 체크(검사)에 실패했으며 복구 펌웨어의 서명이 잘못되었거나 예상 및 생성된 해시가 일치하지 않는다는 결정에 대한 응답으로, 애플리케이션 프로세서(102)는 컴퓨팅 시스템(100)이 복구 펌웨어를 실행하고 복구 모드에서 동작할 수 있도록 보안 프로세서(108)가 복구 펌웨어를 검증하도록 요청할 것이다.
302에서, 컴퓨팅 시스템(100)이 206에서 복구 모드로 진입하고 있다는 결정에 응답하여, 보안 프로세서(108)는 선택적으로 시스템 펌웨어의 검증 동안 사용되는 펌웨어 관리 파라미터에 따라 복구 펌웨어를 자동으로 검증한다. 예를 들어, 보안 프로세서(108)는 메모리(106)에 로드된 복구 펌웨어의 각 블록을 검증하면서 복구 펌웨어의 전체 검증을 수행하도록 기본값(디폴트)을 설정할 수 있다. 다른 경우에, 복구 펌웨어의 일부 블록은 손상될 경우 문제를 일으킬 가능성이 적을 수 있으므로, 보안 프로세서(108)는 치명적인 오류를 일으킬 가능성이 가장 적은 블록을 건너뛰고 복구 펌웨어의 확률적 또는 부분적 검증을 수행할 수 있다. 보안 프로세서(108)는 펌웨어 관리 파라미터의 정보에 기초하여 복구 펌웨어의 전체 또는 부분 검사를 수행할지 여부를 결정할 수 있다.
확률적 검증을 위해, 각 블록에는 검증 프로세스 동안(예를 들어, 동작 300 또는 200 동안) 동적으로 생성된 임계값과 비교되는 가중치가 할당될 수 있다. 동적으로 생성된 임계값은 난수 생성기의 출력에 해당할 수 있다. 할당된 가중치가 블록에 대한 동적 임계값을 초과하는 경우, 보안 프로세서(108)는 단계 208A 내지 208D에 대해 위에서 설명한 것과 유사한 프로세스를 따라 해당 블록을 자동으로 검증하기 위해 단계 302A 내지 302D를 실행할 것이다. 할당된 가중치가 동적 임계값을 초과하지 않는 경우, 보안 프로세서(108)는 해당 블록을 건너 뛰고 해당 블록에 대한 예상 해시가 생성된 해시와 일치하는지 여부를 고려하지 않을 수 있다.
302A에서, 보안 프로세서(108)는 시스템 펌웨어 검증 키 및 서브 키에 대해 시스템 펌웨어에 적용된 서명을 검증한다. 헤더 서명을 검증하는 것에 응답하여, 보안 프로세서(108)는 시스템 펌웨어에 적용된 바디 서명을 검증하기 위해 시스템 펌웨어의 헤더 섹션으로부터 검증 서브 키를 사용할 수 있다. 보안 프로세서(108)가 적절한 검증 키 및 검증 서브 키를 사용하여 시스템 펌웨어가 서명되지 않았다고 결정하면, 보안 프로세서(108)는 시스템 펌웨어 검증 체크에 실패하고 단계 304로 이동한다. 대안적으로, 보안 프로세서(108)는 시스템 펌웨어에 적용된 서명을 검증하는 것에 응답하여 단계 302B 내지 302D에서 복구 펌웨어를 검증한다.
일반적으로, 보안 프로세서(108)는 복구 펌웨어의 각 블록에 대해 단계 302B 내지 302D를 수행하는데, 이는 복구 펌웨어의 임의의 손상된 블록의 검출을 최대화하기 위해 완전한 검증이 필요할 수 있기 때문이다. 그러나, 보안 프로세서(108)는 펌웨어 관리 파라미터가 아니오 또는 부분 검증만을 표시하는 경우, 복구 펌웨어의 부분 검증을 실행하거나 검증하지 않도록 구성될 수 있다. 이러한 경우, 보안 프로세서(108)는 난수에 적용될 때 난수가 임계값을 만족하게 하는 가중치가 미리 할당된 복구 펌웨어의 블록에 대해 단계 302B 내지 302D를 선택적으로 수행한다.
302B에서, 보안 프로세서(108)는 복구 펌웨어의 개별 블록을 해시하고, 예상 해시 값에 대한 후속 비교를 위해 레지스터 또는 내부 메모리에 해시 함수의 결과를 유지할 수 있다. 302C에서, 보안 프로세서(108)는 복구 펌웨어의 초기 검사 동안 애플리케이션 프로세서에 의해 초기에 결정된 바와 같이 복구 펌웨어의 개별 블록에 대한 해당 예상 해시를 결정한다. 302D에서, 보안 프로세서(108)는 예상 해시와 생성된 해시가 일치하는지 여부를 결정한다. 해시가 일치하면, 보안 프로세서(108)는 복구 펌웨어를 검증하고 펌웨어가 검증되었음을 반영하기 위해 보안 프로세서(108)에 의해 유지되는 상태 레지스터를 업데이트한다. 마찬가지로 해시가 일치하지 않으면 보안 프로세서는 상태 레지스터를 업데이트하여 복구 펌웨어를 검증할 수 없음을 나타낸다.
304에서 보안 프로세서는 복구 펌웨어가 성공적으로 검증되었는지 여부를 결정한다. 306에서, 복구 펌웨어가 단계 304에서 검증 체크에 실패하고 검증되지 않을 때, 보안 프로세서(108)는 컴퓨팅 시스템(100)에 부팅 및 파워 다운을 종료하도록 지시한다. 308에서, 복구 펌웨어가 단계 304에서 검증 체크를 통과하고 검증되면, 보안 프로세서(108)는 리셋으로부터 애플리케이션 프로세서(102)를 해제하고 애플리케이션 프로세서(102)가 복구 펌웨어를 실행할 수 있게 함으로써 복구 프로세스를 계속하도록 컴퓨팅 시스템(100)에 지시한다.
전술한 바와 같이, 메모리(106)에 대한 기록 방지는 제어 링크(116A)를 통해 보안 프로세서(108)에 의해 제어될 수 있다. 컴퓨팅 시스템(100)의 공격자가 보안 프로세서(108)에 의해 제어되는 쓰기 방지 신호를 무시하려고 시도할 수 있다(예를 들어, 메모리(106)상의 물리적, 쓰기 방지 기능에 전압을 인가함으로써, 와이어를 절단하거나 쓰기 방지 신호와 보안 프로세서(108) 사이의 링크를 끊음). 보안 프로세서(108)는 메모리(106)에 대한 쓰기 방지가 변경되었는지 여부를 모니터링할 수 있고, 그렇다면 플래그를 설정하거나 그렇지 않으면 메모리(106)의 쓰기 방지가 변경되고 메모리(106)에 저장된 정보가 변경될 수 있음을 나타낼 수 있다. 예를 들어, 보안 프로세서(108)는 애플리케이션 프로세서(102)에서 실행되는 운영 체제의 컴포넌트에 의해 모니터링되는 내부 레지스터 또는 내부 메모리의 값을 변경할 수 있다. 따라서 보안 프로세서(108)는 보안 프로세서(108)가 복구 조건을 경험할 때 동작(300)을 수행하는 것을 포함하여 복구 프로세스를 개시할 수 있다.
보안 프로세서(108)는 예를 들어 펌웨어 관리 파라미터가 블록 검사가 비활성화된 것을 나타낼 때 하위 단계(302A 내지 302D)를 포함하여 단계(302)를 모두 건너 뛸 수 있다. 이와 같이, 동작(300)을 수행하기 위한 전제 조건은 블록 검사가 비활성화되었는지, 전체 블록 검사가 활성화되었는지 또는 확률적 블록 검사가 활성화되었는지를 결정하는 것을 포함할 수 있다. 따라서, 보안 프로세서(108)는 펌웨어 관리 파라미터에 정의된 검사 방식을 준수하기 위해 하위 단계(302A 내지 302D)를 포함하는 단계(302)를 실행할 수 있다.
블록 검사가 비활성화되지 않았다고 가정하면, 보안 프로세서(108)는 복구 펌웨어를 로드하고 검사할 수 있다. 보안 프로세서는 각 블록을 예상 해시와 비교하여 복구 펌웨어의 각 블록에 대해 동작 204-210을 수행하는 등 전체 검사를 수행할 수 있다. 보안 프로세서(108)는 확률 검사를 수행할 수 있으며, 예를 들어 블록 중 일부에 대해서만 동작(204-210)을 수행할 수 있다. 보안 프로세서(108)는 블록 체크 또는 스킵(건너뛰기)을 위한 임계값을 만족하는 복구 펌웨어의 블록만을 해싱 및 비교함으로써 확률적 체크를 수행할 수 있다.
일부 경우에, 보안 프로세서(108)는 그렇게 하기 위한 요청을 수신하지 않더라도 펌웨어 및 펌웨어 검증을 수행할 수 있다. 예를 들어, 보안 프로세서(108)는 애플리케이션 프로세서(102)로부터의 신호를 기다리지 않고 동작 200 또는 300을 자동으로 실행함으로써 펌웨어 또는 복구 펌웨어를 (예: 주기적으로, 일정에 따라, 또는 다른 조건이나 규칙에 따라) 검증하도록 프로그래밍될 수 있다.
도 4는 펌웨어 또는 복구 펌웨어의 확률적 또는 부분적 검증을 수행하도록 구성된 보안 프로세서의 예시적인 동작을 나타내는 흐름도이다. 동작 400은 동작 402-416을 포함한다. 동작(400)은 도 4에 도시된 것과 다른 순서로 또는 추가 또는 더 적은 동작으로 수행될 수 있다. 보안 프로세서(108)는 메모리(106)에 유지되는 펌웨어 또는 복구 펌웨어를 확률적으로 검증하기 위한 동작(400)을 수행할 수 있다.
보안을 유지하면서 펌웨어 또는 복구 펌웨어 검증의 속도 및 효율성을 증가시키기 위해, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어를 확률적으로 검증하거나 부분적으로만 검증할 수 있다. 보안 프로세서(108)는 전체 검증을 수행하고 확률적 검증을 통해 펌웨어 또는 복구 펌웨어의 모든 블록을 검사할 수 있지만, 보안 프로세서(108)는 일반적으로 펌웨어 또는 복구 펌웨어의 일부만 검사한다.
예를 들어, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어의 각 블록에 미리 할당된(예를 들어, 펌웨어 헤더에서) 각각의 가중치에 의존할 수 있다. 보안 프로세서(108)는 각 블록에 대한 임계값을 동적으로 생성하고 블록을 검증하기 위한 조건으로서 해당 블록에 대해 미리 할당된 가중치와 임계값을 비교할 수 있다. 예를 들어, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어의 각 블록에 대해 0과 1 사이의 값을 출력하는 랜덤 생성기를 실행할 수 있다. 난수 생성기로부터 출력되는 동적 임계값이 미리 할당된 가중치(예: 이 예에서 0과 1 사이의 값)를 초과한다고 결정하는 것에 응답하여, 보안 프로세서(108)는 블록을 건너 뛰고 계속해서 후속 블록을 검사할 것이다. 동적 임계값이 미리 할당된 가중치를 초과하지 않는다는 결정에 응답하여, 보안 프로세서(108)는 (예: 블록의 예상 해시를 블록의 생성된 해시와 비교함으로써) 블록을 검사할 것이다.
402에서, 보안 프로세서(108)는 블록에 대한 확률적 검증 임계치를 결정한다. 임계값은 복구 펌웨어 블록에 할당된 최대 가중치와 최소 가중치 사이의 값을 나타낸다. 임계치는 예를 들어 컴퓨팅 시스템(100)의 컨텍스트 또는 다른 조건에 기초하여 고정되거나 동적일 수 있다. 보안 프로세서(108)는 펌웨어의 바디 섹션에있는 테이블의 모든 엔트리들 중에서 최대 및 최소 가중치를 도출하기 위해 펌웨어를 분석함으로써 임계값을 결정할 수 있다. 보안 프로세서(108)는 최대 가중치보다 크거나 같고 최소 가중치보다 작거나 같은 임의의 값으로서 동적 임계값을 결정하기 위해 난수 생성기를 사용할 수 있다.
404에서, 보안 프로세서는 블록에 대한 가중치를 결정한다. 예를 들어, 위에서 언급했듯이 펌웨어의 바디 섹션은 펌웨어 또는 복구 펌웨어의 각 블록이나 다른 로직 섹션에 할당된 가중치 테이블을 지정할 수 있다. 각각의 가중치는 다른 블록과 비교하여 검증에 대한 상대적 중요성을 나타낼 수 있다. 가중치는 고정 소수점 값, 로그 값 또는 최대 값과 최소값이 있는 다른 유형의 파라미터일 수 있다.
확률적 검증 중에, 가중치가 높을수록 가중치가 낮은 블록보다 블록이 더 자주 검증될 수 있다. 각 블록은 펌웨어가 생성될 때 가중치가 할당될 수 있거나, 예를 들어 개발자가 애플리케이션 프로세서(102)에 대한 입력을 통해 가중치에 액세스할 수 있는 디버깅 모드에서 조정될 수 있다. 일부 예(예: 특수 프로그래밍 채널을 통해)에서, 가중치는 펌웨어의 바디 섹션에 대한 가중치를 변경하여 다른 검증 체계가 실행될 수 있도록 조정될 수 있다.
406에서, 보안 프로세서(108)는 블록에 할당된 가중치가 확률적 검증 임계값을 초과하는지 여부를 결정한다. 408에서, 임계치를 초과하지 않는 가중치를 갖는 임의의 블록은 스킵되고, 410에서, 보안 프로세서(108)는 검증(체크)되는 마지막 블록인지 여부를 검증한다. 마지막 블록이 아니면 보안 프로세서는 단계 402로 돌아가고 블록이 마지막 블록이면 보안 프로세서는 C에서 확률 검사를 완료한다.
406에서, 보안 프로세서가 블록에 할당된 가중치가 블록에 대한 확률적 검증 임계값을 초과한다고 결정하면, 412에서, 보안 프로세서(108)는 블록에 대해 생성된 해시가 블록에 대해 예상되는 해시와 일치하는지 여부를 결정한다. 보안 프로세서는 블록의 생성 및 기록된 해시 값이 일치하지 않는다는 결정(414)에 응답하여 동작(400)을 종료하고 상태 레지스터를 설정하거나 그렇지 않으면 펌웨어 또는 복구 펌웨어가 검증될 수 없음을 애플리케이션 프로세서(102)에 신호한다. 416에서, 블록에 대해 생성된 해시가 예상 해시와 일치한다는 결정에 응답하여, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어가 검증 가능함을 나타내기 위해 상태 레지스터를 설정한다. 410에서 펌웨어 또는 복구 펌웨어를 검증할 수 있음을 나타내도록 상태 레지스터를 설정한 후, 보안 프로세서(108)는 블록이 검사될 마지막 블록이라고 결정하고, 보안 프로세서(108)는 펌웨어 또는 복구 펌웨어가 검증 가능하다는 것을 표시하도록 애플리케이션 프로세서(102)에 신호를 보낸다.
일부 경우에, 보안 프로세서(108)는, 보안 프로세서(108)가 펌웨어, 복구 펌웨어를 검증하는지, 딥 슬립에서 부팅하는지 또는 리셋에서 부팅하는지에 따라, 확률적 검증 임계값을 변경하거나 펌웨어 또는 복구 펌웨어의 블록에 할당된 다른 가중치를 사용할 수 있다. 예를 들어, 일부 경우에, 보안 프로세서(108)는 복구 부팅 동안 모든 복구 펌웨어 블록을 검사할 수 있으며, 해당 블록을 확인할 기회를 지정하는 각 블록에 할당된 가중치는 다른 모든 부팅 또는 재개 동작에 대해 동일할 수 있다.
루트 키(Root Key)를 포함하는 펌웨어 또는 복구 펌웨어 블록과 같이 복구 동작에 영향을 미치지 않을 수 있는 일반 부팅에서 사용되는 일부 블록이 있다. 복구 부팅에서 이러한 블록을 건너 뛰면 복구 동작(작업)의 보안을 저하시키지 않고 더 넓은 범위의 시나리오에서 복구할 수 있다. 펌웨어에 유지되는 검증 데이터 테이블은 복구 부팅시 블록을 검증할 기회를 추가로 지정하거나 블록이 복구에 사용되지 않음을 나타내는 플래그를 지정할 수 있다.
애플리케이션 프로세서(102)가 복구 펌웨어를 실행하면, 애플리케이션 프로세서(102)는 여전히 보안 프로세서(108)에 의해 건너뛴 임의의 블록을 검사하고 선택적으로 사용자에게 경고를 표시할 수 있다. 이는 복구 부팅을 차단하지 않고 정상 모드 부팅 문제를 진단하는 데 유용할 수 있다.
루트 키 또는 펌웨어의 읽기-쓰기 가능(read-writable) 부분을 검증하는 읽기 전용 펌웨어의 일부와 같이, 딥 슬립에서 재개(다시 시작)하는 데 영향을 미치지 않을 수 있는 일반 부팅에서 사용되는 일부 블록이 있다. 재개에서 이러한 블록을 건너 뛰면 보안 저하없이 재개 시간이 향상될 수 있다.
도 5는 펌웨어 및 복구 펌웨어의 보안 검증을 수행하도록 구성된 컴퓨팅 장치를 나타내는 개념도이다. 도 5는 임의의 유형의 컴퓨팅 장치, 클라이언트 장치, 모바일 폰, 태블릿, 웨어러블, 차량, 통신, 엔터테인먼트, 게임, 미디어 재생 및/또는 다른 유형의 장치일 수 있는 예시적인 컴퓨팅 장치(500)를 도시한다.
컴퓨팅 장치(500)는 WLAN에서 장치간에 통신되는 데이터, 수신중인 데이터, 방송 예정 데이터, 데이터의 데이터 패킷, 장치간에 동기화되는 데이터 등과 같은 장치 데이터(506)의 유선 및/또는 무선 통신을 가능하게 하는 통신 장치(510)를 포함한다. 장치 데이터는 장치에서 실행되는 애플리케이션에 의해 생성되는 오디오, 비디오 및/또는 이미지 데이터뿐만 아니라 모든 유형의 통신 데이터를 포함할 수 있다. 통신 장치(510)는 또한 셀룰러 전화 통신 및/또는 네트워크 데이터 통신을 위한 트랜시버(송수신기)를 포함할 수 있다.
컴퓨팅 장치(500)는 또한 디바이스, 데이터 네트워크(예를 들어, 메시 네트워크, 외부 네트워크 등), 및 기타 장치 사이의 연결 및/또는 통신 링크를 제공하는 데이터 네트워크 인터페이스와 같은 입력/출력(I/O) 인터페이스(512)를 포함한다. I/O 인터페이스는 장치를 모든 유형의 컴포넌트, 주변 장치 및/또는 액세서리 장치에 연결하는 데 사용할 수 있다. I/O 인터페이스는 장치에 대한 사용자 입력, 모든 유형의 통신 데이터, 모든 콘텐츠 및/또는 데이터 소스에서 수신된 오디오, 비디오 및/또는 이미지 데이터와 같은 모든 유형의 데이터, 미디어 콘텐츠 및/또는 입력을 수신할 수 있는 데이터 입력 포트를 포함한다.
컴퓨팅 장치(500)는 또한 오디오 장치(520)에 대한 오디오 데이터를 생성하고 및/또는 디스플레이 장치(522)에 대한 디스플레이 데이터를 생성하는 오디오 및/또는 비디오 시스템(518)을 포함한다. 오디오 장치(520) 및/또는 디스플레이 장치(522)는 디지털 사진의 이미지 콘텐츠와 같은 오디오, 비디오, 디스플레이 및/또는 이미지 데이터를 처리, 디스플레이 및/또는 달리 렌더링하는 임의의 장치를 포함한다. 구현에서, 오디오 장치 및/또는 디스플레이 장치는 예시적인 컴퓨팅 장치(500)의 통합된 컴포넌트이다. 대안적으로, 오디오 장치 및/또는 디스플레이 장치는 예시적인 장치에 대한 외부 주변 부품이다.
컴퓨팅 장치(500)는 프로세서(102)의 예로서 애플리케이션 프로세서(502) 및 보안 프로세서(108)의 예로서 보안 프로세서(508)를 포함하는 프로세싱 시스템(514)을 포함한다. 프로세싱(처리) 시스템(514)의 컴포넌트는 실행 가능한 명령을 처리하는 임의의 유형의 마이크로 프로세서, 제어기 등과 같은 하드웨어에서 적어도 부분적으로 구현될 수 있다. 프로세싱 시스템은 집적 회로의 컴포넌트, 프로그래밍 가능 논리 장치, 하나 이상의 반도체를 사용하여 형성된 논리 장치, 그리고 실리콘 및/또는 하드웨어의 다른 구현(예: 시스템 온 칩(SoC)으로 구현된 프로세서 및 메모리 시스템)을 포함할 수 있다. 이 장치는 처리 및 제어 회로로 구현될 수 있는 소프트웨어, 하드웨어, 펌웨어 또는 고정 논리 회로 중 하나 또는 조합으로 구현될 수 있다. 컴퓨팅 장치(500)는 장치 내의 다양한 컴포넌트를 결합하는 임의의 유형의 시스템 버스 또는 다른 데이터 및 명령 전송 시스템을 더 포함할 수 있다. 시스템 버스는 제어 및 데이터 라인뿐만 아니라 서로 다른 버스 구조 및 아키텍처의 조합 또는 하나를 포함할 수 있다.
컴퓨팅 장치(500)는, 또한 컴퓨팅 장치에 의해 액세스될 수 있고 데이터 및 실행 가능한 명령(명령어)(예: 소프트웨어 애플리케이션, 모듈, 프로그램, 기능 등)의 지속적인 저장을 제공하는 데이터 저장 장치와 같은 컴퓨터 판독 가능 저장 메모리(516)를 포함한다. 여기에 설명된 컴퓨터 판독 가능 저장 메모리는 전파 신호를 제외한다. 컴퓨터 판독 가능 저장 메모리의 예에는 휘발성 메모리 및 비 휘발성 메모리, 고정 및 이동식 미디어 장치, 그리고 컴퓨팅 장치 액세스를 위한 데이터를 유지하는 임의의 적절한 메모리 장치 또는 전자 데이터 저장소가 포함된다. 컴퓨터 판독 가능 저장 메모리는 다양한 메모리 장치 구성에서 RAM, ROM, 플래시 메모리 및 다른 유형의 저장 메모리의 다양한 구현을 포함할 수 있다.
컴퓨터 판독 가능 저장 메모리(516)는 저장 장치(104)의 예로서 저장 컴포넌트(504) 및 메모리(106)의 예로서 메모리 컴포넌트(506)를 포함한다. 스토리지(저장소) 컴포넌트(504)는 커널, 루트 파일 시스템, 또는 다른 운영 체제 관련 소프트웨어를 저장할 수 있다. 메모리(506)는 커널, 루트 파일 시스템 및 기타 운영 체제 관련 소프트웨어를 로드하고 실행하기 위한 전제 조건으로서 컴퓨팅 장치(500)를 부팅하기 위한 펌웨어 및 복구 펌웨어를 저장할 수 있다.
컴퓨팅 장치(500)는 메모리(506)에 저장된 펌웨어 및 복구 펌웨어의 보안 검증을 수행하도록 구성된다. 보안 프로세서(508)는 펌웨어 및 복구 펌웨어와 연관된 생성된 해시 값을 예상된 해시 값(예를 들어, 메모리(506)에 저장됨)과 비교한다. 생성되고 예상된 해시 값이 일치하는 경우, 애플리케이션 프로세서(502)는 검증된 펌웨어 또는 복구 펌웨어를 실행하도록 애플리케이션 프로세서에 지시할 수 있다. 그러나 생성되고 예상된 해시 값이 일치하지 않는 경우, 애플리케이션 프로세서(502)는 펌웨어 또는 복구 펌웨어의 실행을 자제할 수 있으며, 컴퓨팅 장치(500)는 셧다운될 수 있거나, 애플리케이션 프로세서(502)는 전술한 바와 같이 펌웨어 또는 복구 펌웨어를 재검증하도록 보안 프로세서(508)에 명령할 수 있다.
설명의 편의를 위해 다음 시나리오에서 랩탑인 컴퓨팅 장치(500)에 대한 일부 사용 사례를 고려한다. 일반 사용자는 컴퓨팅 장치(500)를 구매하고 초기에 컴퓨팅 장치(500)에 로그인할 수 있다. 사용자가 두 번째(제2) 장치(예: 휴대폰)를 통해 원격(예: 2 단계) 인증 서비스에 가입한 경우, 제2 장치는 컴퓨팅 장치(500)가 펌웨어 또는 복구 펌웨어 검증을 수행하도록 원격으로 요구하는 것에 응답하여 사용자가 완전히 검증된 랩탑에 로그인하려고 하는지 여부를 검증할 수 있다. 사용자는 "완전히 검증된 펌웨어가 있는 장치에만 로그인하도록 허용" 옵션을 등록하여 서비스에 검증이 필요한지 여부를 제어할 수 있다. 이렇게 하면 개발자 모드를 활성화한 공격자가 손상된 버전의 펌웨어를 설치하거나 컴퓨팅 장치(500)에 사용자의 보안 자격 증명을 재설정할 수 있더라도 공격후 사용자가 컴퓨팅 장치(500)에 로그인하면, 서비스는 컴퓨팅 장치(500)를 새로운 장치로 인식하고 2 단계(two-factor) 인증 프로세스를 거친다.
엔터프라이즈(enterprise) 등록 프로세스에서, 컴퓨팅 장치(500)는 설명된 검증 기술을 사용하여 장치 무결성을 보장하기 위해 다음 단계를 수행할 수 있다. 엔터프라이즈 등록 프로세스를 담당하는 등록(enrolment) 서버는 마더 보드 식별자(예를 들어, BoardID) 및 보안 프로세서(508)에 의해 획득된 검증 결과(예: 생성된 해시 값, 검증 결과)를 획득하기 위해 보안 프로세서(508)에 쿼리(query)할 수 있다.
생성된 해시 값 또는 검증 결과가 검증된 펌웨어 또는 복구 펌웨어의 모든 블록보다 적다고 표시되는 경우, 등록 서버는 전체 펌웨어 검증을 수행함으로써 재설정 및 재부팅하도록 애플리케이션 프로세서(502)에 지시할 수 있다. 이렇게 하면 완전히 검증된 펌웨어만 등록 프로세스에 참여할 수 있다.
마더 보드 식별자가 승인된 생산 번호(넘버)가 아니거나 생성된 해시 값이 등록 서버에 저장된 예상 해시 값이 아닌 경우, 등록 서버는 엔터프라이즈 네트워크에 대한 컴퓨팅 장치(500) 등록을 거부할 수 있다(예: 사전 제작 기기가 소비자에게 배송되는 경우 이러한 상황이 발생할 수 있음).
펌웨어 검증에 대한 응답으로, 등록 서버는 사용자 로그인 자격 증명을 얻고 2 단계 인증 또는 기타 인증 프로세스를 수행하여 로그인을 완료한다. 이러한 방식으로, 사용자 및 등록 서버는 컴퓨팅 장치(500)가 손상된 경우 공격자에게 스누핑 및 공유될 수 있는 로그인 자격 증명을 제공하기 전에 컴퓨팅 장치(500)가 완전히 검증된 장치인지 검증할 수 있다.
일부 예들에서, 등록 서버는 미래의 시스템 부팅이 엔터프라이즈 폴리스(enterprise police)에 따라 검증(또는 검증되지 않음)하도록 보장하기 위해 컴퓨팅 장치(500)의 펌웨어 관리 파라미터를 자동으로 구성할 수 있다. 일부 경우에, 등록 서버는 보안 프로세서(508)가 펌웨어 관리 파라미터를 정확하게 증명할 수 없는 경우 등록을 종료할 수 있다. 또한, 등록 서버는 컴퓨팅 장치(500)를 등록 해제하기 위해 펌웨어 관리 파라미터를 간단히 삭제할 수 있다. 본 개시의 다양한 바람직한 실시 예가 전술한 설명에서 설명되고 도면에 도시되었지만, 본 개시는 이에 제한되지 않고 다음의 청구항의 범위 내에서 실시되도록 다양하게 구현될 수 있다는 것이 명백하게 이해되어야 한다. 전술한 설명으로부터, 다음의 청구 범위에 의해 정의된 본 개시의 사상 및 범위를 벗어나지 않고 다양한 변경이 이루어질 수 있음이 명백할 것이다.
개발자의 경우, 컴퓨팅 장치(500)는 개발자가 운영 체제 및/또는 펌웨어를 마음대로 변경할 수 있도록 구성될 수 있다. 컴퓨팅 장치(500)는 운영 체제 태스크를 통해 자동으로 운영 체제 개발자 모드에 들어갈 수 있다. 운영 체제 개발자 모드는 운영 체제 변경을 허용할 수 있지만 펌웨어 또는 복구 펌웨어는 허용하지 않는다. 펌웨어 개발자 모드에서, 컴퓨팅 장치(500)는 기록 방지된 부분을 포함하는 메모리(506)의 내용을 소거하고 변경할 수 있다. 운영 체제 개발자 모드에서, 보안 프로세서(508)는 저장소(504)에 저장된 데이터에 대한 복호화 키를 포함하여 보안 프로세서(508)의 비 휘발성 메모리에 저장된 비밀을 삭제할 수 있다. 일부 경우에, 보안 프로세서(508)의 펌웨어 관리 파라미터는 보안 프로세서(508)에 의해 제어되는 펌웨어 또는 비밀의 변경을 방지할 수 있다. 그러나, 다른 경우에, 운영 체제 또는 펌웨어 개발자 모드가 활성화되면, 컴퓨팅 장치(500)는 맞춤형 펌웨어 관리 파라미터를 수신하고 맞춤형 펌웨어 관리 파라미터를 보안 프로세서(508)에 기록하도록 구성될 수 있다. 펌웨어 관리 파라미터의 변경으로, 컴퓨팅 장치(500)는 펌웨어 또는 복구 펌웨어의 검증을 수행하지 않도록 구성될 수 있으며(예: 전체 또는 확률적 검증 검사 우회), 그러나 보안 프로세서(508)는 펌웨어 또는 복구 펌웨어가 검증되지 않았음을보고할 수 있으므로 컴퓨팅 장치(500)에 로그인하는 새로운 사용자는 여전히 검증되지 않은 장치에 (예: 2 단계 인증을 통해) 경고를 받을 수 있다.
컴퓨팅 장치(500)의 소유자-사용자는 적어도 초기 로그인 동안 컴퓨팅 장치(500)에 대한 펌웨어 관리 파라미터를 구성할 수 있는 능력을 가질 수 있다. 이렇게 하면 일반 사용자는 운영 체제 또는 펌웨어 개발자 모드를 비활성화하고 선택적으로 다른 부팅 검증 수준에서 선택할 수 있다(예: 더 높거나 더 낮은 수준의 부팅 검증 지정).
일부 예에서, 컴퓨팅 장치(500)는 사용자가 펌웨어 관리 파라미터를 변경하는 데 필요한 암호를 지정할 수 있는 인터페이스를 제공한다. 다른 경우에, 컴퓨팅 장치(500)는 사용자에 대한 암호를 생성하고 사용자가 펌웨어 관리 파라미터를 변경하기를 원할 때 암호를 검색할 수 있도록 (예: 클라우드 컴퓨팅 환경에서) 사용자의 계정에 암호를 업로드할 수 있다.
컴퓨팅 장치(500)가 제조될 때, 제조업체는 보안 프로세서(108)의 비 휘발성 메모리에 모델 특정 "BoardID"를 저장하도록 컴퓨팅 장치(500)를 구성할 수 있다. "BoardID"는 보안 프로세서 펌웨어 릴리스를 특정 장치 모델, 원격 액세스 서버 잠금 해제 등에 잠그는 데 사용할 수 있다. 예상되는 "BoardID"는 펌웨어의 읽기 전용 부분의 헤더에 포함될 수 있다. 컴퓨팅 장치(500)는 예상되는 "BoardID"가 보안 프로세서(508)에 사전 프로그래밍된 "BoardID"와 일치하는지 검증하도록 구성될 수 있다.
메모리(506)에 저장된 다른 데이터는 장치별로 변할 수 있고 펌웨어 또는 복구 펌웨어가 검증되는 것과 유사한 방식으로 검증될 수 있다. 보안 프로세서(508)는 또한 이 데이터를 보호하도록 구성될 수 있는데, 예를 들어 보드 사이에서 보안 프로세서(508)를 스와핑하는 것을 방지하거나 하나의 장치가 잘못된 구성으로 보이도록 이 데이터를 수정하는 것을 방지하기 위해 구성될 수 있다.
이 다른 데이터에는 식별 바이트 시퀀스가 다르고 서브키가 없는 헤더 섹션과 모델별 데이터를 포함하는 바디 섹션이 포함될 수 있다. 보안 프로세서(508)는 하드웨어 식별자, 서비스 태그, 무선 액세스 노드 교정 또는 직렬 데이터 등을 검증할 수 있다. 보안 프로세서(508)는 다른 데이터의 생성된 해시를 예상된 해시와 비교하고 두 값이 일치할 때 다른 데이터를 검증할 수 있다.
제조 동안, 이 디바이스 특정 검증 데이터는 공장 종료 단계에서 쓰기 보호가 활성화되기 직전에 메모리(506)의 쓰기 보호 가능 영역에 저장될 수 있다. 이 다른 데이터는 장치별로 다르며 컴퓨팅 장치(500)가 제조된 이후 데이터가 변경되지 않았는지 검증하기 위해 검증되어야 하기 때문에 헤더 또는 바디에 대한 서명이 없을 수 있다. 이 데이터의 해시는 데이터가 메모리(506)에 기록된 후 공장 종료 단계 동안 보안 프로세서(508)에 저장 될 수 있다.
본 개시의 다양한 바람직한 실시 예가 전술한 설명에서 설명되고 도면에 도시되었지만, 본 개시는 이에 제한되지 않고 다음의 청구항의 범위 내에서 실행되도록 다양하게 구현될 수 있다는 것이 명백하게 이해되어야 한다. 전술한 설명에서, 다음의 청구 범위에 의해 정의되는 본 개시의 사상 및 범위를 벗어나지 않고 다양한 변경이 이루어질 수 있음이 명백할 것이다.

Claims (15)

  1. 컴퓨팅 시스템(100)으로서,
    애플리케이션 프로세서(102, 502);
    펌웨어 및 해당 복구 펌웨어를 포함하는 메모리(106, 506);
    펌웨어 또는 복구 펌웨어를 실행하는 애플리케이션 프로세서(102, 502)에 대한 조건으로 동작들을 수행함으로써 펌웨어 또는 복구 펌웨어를 검증하도록 구성된 보안 프로세서(108, 508)를 포함하며, 상기 동작들은,
    펌웨어에 의해 유지되는 펌웨어 또는 복구 펌웨어의 예상 해시를 결정하는 동작 -상기 예상 해시는 컴파일 시간에 상기 펌웨어 또는 복구 펌웨어에 임베딩됨(embedded)-; 그리고
    상기 예상 해시가 상기 펌웨어 또는 복구 펌웨어의 생성된 해시와 일치하는지 여부에 따라 상기 펌웨어 또는 복구 펌웨어를 검증하는 동작을 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  2. 제1항에 있어서, 상기 보안 프로세서(108, 508)는 상기 펌웨어 또는 상기 복구 펌웨어의 상기 생성된 해시를 생성하도록 더 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  3. 제1항에 있어서, 상기 애플리케이션 프로세서(102, 502)는 상기 펌웨어 또는 상기 복구 펌웨어의 상기 생성된 해시를 생성하도록 더 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  4. 제1항에 있어서, 상기 애플리케이션 프로세서(102, 502)는 상기 컴퓨팅 시스템(100)의 초기 부팅 후에 상기 복구 펌웨어를 검증하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  5. 제4항에 있어서, 상기 애플리케이션 프로세서(102, 502)에서 실행되는 운영 체제는 상기 복구 펌웨어를 백그라운드 태스크로 검증하는 것을 특징으로 하는 컴퓨팅 시스템.
  6. 제4항에 있어서, 상기 보안 프로세서는 상기 복구 펌웨어에 대한 예상 해시가 상기 복구 펌웨어의 상기 생성된 해시와 일치하지 않는다고 결정하는 애플리케이션 프로세서(102, 502)에 응답하여 상기 복구 펌웨어를 재검증하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  7. 제1항에 있어서,
    상기 펌웨어는 복수의 블록을 포함하고, 보안 프로세서(108, 508)는 복수의 블록 각각에 대해, 블록에 대한 각각의 예상 해시가 해당 블록에 대해 생성된 각각의 해시와 일치하는지 여부를 결정함으로써 상기 펌웨어를 검증하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  8. 제1항에 있어서,
    상기 펌웨어는 복수의 블록을 포함하고, 보안 프로세서(108, 508)는 복수의 블록 중 일부에 대해, 블록에 대한 각각의 예상 해시가 해당 블록에 대해 생성된 각각의 해시와 일치하는지 여부를 결정함으로써 상기 펌웨어를 검증하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  9. 제8항에 있어서,
    보안 프로세서(108, 508)는 블록에 할당된 가중치가 확률적 검증 임계값을 만족한다는 결정에 응답하여 블록에 대한 각각의 예상 해시가 해당 블록에 대해 생성된 각각의 해시와 일치하는지 여부를 결정함으로써 펌웨어를 검증하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  10. 제9항에 있어서,
    보안 프로세서(108, 508)는 난수 생성기를 사용하여 확률적 검증 임계값을 결정하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  11. 제1항에 있어서, 상기 보안 프로세서(108, 508)는 상기 펌웨어 또는 상기 복구 펌웨어를 검증할 때 상기 보안 프로세서(108, 508)를 지시하기 위한 옵션을 포함하는 펌웨어 관리 파라미터를 유지하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  12. 제11항에 있어서, 상기 보안 프로세서(108, 508)는 상기 보안 프로세서(108, 508)의 내부 메모리의 쓰기 방지된 부분에 상기 펌웨어 관리 파라미터를 유지하는 것을 특징으로 하는 컴퓨팅 시스템.
  13. 제11항에 있어서, 상기 펌웨어 관리 파라미터는 상기 펌웨어 또는 복구 펌웨어를 검증할 때 확률적 검증, 전체 검증 또는 비검증(no verification) 중 하나를 수행하도록 상기 보안 프로세서(108, 508)에 지시하는 정보를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  14. 펌웨어를 검증하는 방법으로서,
    컴퓨팅 시스템으로 하여금 청구항 제1항 내지 제13항 중 어느 한 항의 컴퓨팅 시스템의 동작들을 수행하게 하는 단계를 포함하는 것을 특징으로 하는 펌웨어를 검증하는 방법.
  15. 컴퓨팅 시스템으로 하여금 청구항 제1항 내지 제13항 중 어느 한 항의 컴퓨팅 시스템의 동작들을 수행하게 하는 명령어를 포함한 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체.
KR1020217015033A 2019-06-10 2019-06-10 펌웨어의 보안 검증 KR102513435B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237009400A KR20230043235A (ko) 2019-06-10 2019-06-10 펌웨어의 보안 검증

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/036405 WO2020251542A1 (en) 2019-06-10 2019-06-10 Secure verification of firmware

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237009400A Division KR20230043235A (ko) 2019-06-10 2019-06-10 펌웨어의 보안 검증

Publications (2)

Publication Number Publication Date
KR20210080463A KR20210080463A (ko) 2021-06-30
KR102513435B1 true KR102513435B1 (ko) 2023-03-23

Family

ID=67138049

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020217015033A KR102513435B1 (ko) 2019-06-10 2019-06-10 펌웨어의 보안 검증
KR1020237009400A KR20230043235A (ko) 2019-06-10 2019-06-10 펌웨어의 보안 검증

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020237009400A KR20230043235A (ko) 2019-06-10 2019-06-10 펌웨어의 보안 검증

Country Status (6)

Country Link
US (1) US20220179960A1 (ko)
EP (2) EP4318285A3 (ko)
JP (2) JP7425797B2 (ko)
KR (2) KR102513435B1 (ko)
CN (1) CN113168474A (ko)
WO (1) WO2020251542A1 (ko)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020263215A1 (en) * 2019-06-24 2020-12-30 Hewlett-Packard Development Company, L.P. Firmware to restore configurable option
EP4097593A4 (en) * 2020-01-27 2023-10-04 Hewlett-Packard Development Company, L.P. FIRMWARE CORRUPTION RECOVERY
US20200226260A1 (en) * 2020-03-27 2020-07-16 Intel Corporation Firmware resiliency mechanism
CN111950014A (zh) * 2020-08-27 2020-11-17 英业达科技有限公司 服务器系统启动的安全度量方法、安全度量装置及服务器
US11651077B2 (en) * 2021-01-22 2023-05-16 Dell Products L.P. Systems and methods for providing secured boot and scan for devices with limited access
US11853428B2 (en) * 2021-06-02 2023-12-26 Microsoft Technology Licensing, Llc Firmware policy enforcement via a security processor
US11669619B2 (en) * 2021-07-27 2023-06-06 Dell Products L.P. System and method of utilizing multiple information handling system firmware on an information handling system
US20240037240A1 (en) * 2022-07-27 2024-02-01 Western Digital Technologies, Inc. Decoupled External Storage Device Booting
TWI807947B (zh) * 2022-08-01 2023-07-01 精英電腦股份有限公司 多顆嵌入式控制器的更新和檢驗方法與其電子設備

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170085383A1 (en) * 2015-09-23 2017-03-23 Dell Products, L.P. Trusted support processor authentication of host bios/uefi
US20180121656A1 (en) * 2016-10-31 2018-05-03 Hewlett Packard Enterprise Development Lp Validating operating firmware of a periperhal device
US20190108347A1 (en) * 2018-12-07 2019-04-11 Intel Corporation Techniques for processor boot-up

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8209542B2 (en) * 2006-12-29 2012-06-26 Intel Corporation Methods and apparatus for authenticating components of processing systems
US7984286B2 (en) * 2008-06-25 2011-07-19 Intel Corporation Apparatus and method for secure boot environment
US8812854B2 (en) * 2009-10-13 2014-08-19 Google Inc. Firmware verified boot
US20120137137A1 (en) * 2010-11-30 2012-05-31 Brickell Ernest F Method and apparatus for key provisioning of hardware devices
US9015455B2 (en) * 2011-07-07 2015-04-21 Intel Corporation Processsor integral technologies for BIOS flash attack protection and notification
JP6130050B2 (ja) * 2013-04-15 2017-05-17 アマゾン・テクノロジーズ、インコーポレイテッド 安全な記憶装置を用いたホストリカバリ
JP2015022521A (ja) * 2013-07-19 2015-02-02 スパンション エルエルシー セキュアブート方法、組み込み機器、セキュアブート装置およびセキュアブートプログラム
EP2854066B1 (en) * 2013-08-21 2018-02-28 Nxp B.V. System and method for firmware integrity verification using multiple keys and OTP memory
US9524158B2 (en) * 2015-02-23 2016-12-20 Apple Inc. Managing firmware updates for integrated components within mobile devices
RU2635271C2 (ru) * 2015-03-31 2017-11-09 Закрытое акционерное общество "Лаборатория Касперского" Способ категоризации сборок и зависимых образов
WO2017049539A1 (en) * 2015-09-24 2017-03-30 Intel Corporation Techniques for coordinating device boot security
US10353779B2 (en) * 2017-05-05 2019-07-16 Dell Products L.P. Systems and methods for detection of firmware image corruption and initiation of recovery
JP6942601B2 (ja) * 2017-10-18 2021-09-29 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US11106796B2 (en) * 2018-11-07 2021-08-31 Dell Products L.P. Staging memory for accessory firmware update
WO2020169997A1 (en) * 2019-02-22 2020-08-27 Micron Technology, Inc. Method for improving safety of a component or system running a firmware or a finite state machine
US11809567B2 (en) * 2020-10-21 2023-11-07 Dell Products L.P. System and method of authenticating firmware for an information handling system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170085383A1 (en) * 2015-09-23 2017-03-23 Dell Products, L.P. Trusted support processor authentication of host bios/uefi
US20180121656A1 (en) * 2016-10-31 2018-05-03 Hewlett Packard Enterprise Development Lp Validating operating firmware of a periperhal device
US20190108347A1 (en) * 2018-12-07 2019-04-11 Intel Corporation Techniques for processor boot-up

Also Published As

Publication number Publication date
EP4318285A3 (en) 2024-03-13
JP2024050647A (ja) 2024-04-10
EP4318285A2 (en) 2024-02-07
EP3877883A1 (en) 2021-09-15
US20220179960A1 (en) 2022-06-09
KR20210080463A (ko) 2021-06-30
CN113168474A (zh) 2021-07-23
JP2022536817A (ja) 2022-08-19
KR20230043235A (ko) 2023-03-30
JP7425797B2 (ja) 2024-01-31
WO2020251542A1 (en) 2020-12-17

Similar Documents

Publication Publication Date Title
KR102513435B1 (ko) 펌웨어의 보안 검증
US10740468B2 (en) Multiple roots of trust to verify integrity
CN109446815B (zh) 基本输入输出系统固件的管理方法、装置和服务器
CN106855814B (zh) 管理基本输入输出系统设定的系统和方法
US9292300B2 (en) Electronic device and secure boot method
US9880908B2 (en) Recovering from compromised system boot code
US9734339B2 (en) Retrieving system boot code from a non-volatile memory
US20170308705A1 (en) System, device and method for anti-rollback protection of over-the-air updated device images
US11030347B2 (en) Protect computing device using hash based on power event
US20190236279A1 (en) Perform security action based on inventory comparison
KR20100087336A (ko) 판독전용 영역과 판독/기록 영역, 분리형 매체 구성부품, 시스템 관리 인터페이스, 네트워크 인터페이스를 가진 컴퓨터 기억장치
US10783075B2 (en) Data security for multiple banks of memory
US12001827B2 (en) System and method for system-wide firmware downgrade control
US10885196B2 (en) Executing protected code
JP2018509692A (ja) 選択的なブロックベースの完全性保護技法
US20170300692A1 (en) Hardware Hardened Advanced Threat Protection
US11347858B2 (en) System and method to inhibit firmware downgrade
TWI791244B (zh) 監控系統開機之安全裝置及其方法
US20230359741A1 (en) Trusted boot method and apparatus, electronic device, and readable storage medium
WO2021262161A1 (en) Authentication of hardware component firmware
US20240169050A1 (en) Verification and/or validation of unreversible information handling system commands
US11966748B2 (en) Dynamic boot configuration
US20240171392A1 (en) Systems and methods for digital retirement of information handling systems

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant