KR102089435B1 - 안전한 usb 장치를 보장하는 부트 방법 - Google Patents

안전한 usb 장치를 보장하는 부트 방법 Download PDF

Info

Publication number
KR102089435B1
KR102089435B1 KR1020180042337A KR20180042337A KR102089435B1 KR 102089435 B1 KR102089435 B1 KR 102089435B1 KR 1020180042337 A KR1020180042337 A KR 1020180042337A KR 20180042337 A KR20180042337 A KR 20180042337A KR 102089435 B1 KR102089435 B1 KR 102089435B1
Authority
KR
South Korea
Prior art keywords
usb device
integrity verification
firmware
boot
hash value
Prior art date
Application number
KR1020180042337A
Other languages
English (en)
Other versions
KR20190118894A (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 KR1020180042337A priority Critical patent/KR102089435B1/ko
Publication of KR20190118894A publication Critical patent/KR20190118894A/ko
Application granted granted Critical
Publication of KR102089435B1 publication Critical patent/KR102089435B1/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/575Secure boot
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/565Static detection by checking file integrity
    • 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/21Employing a record carrier using a specific recording technology
    • G06F2212/214Solid state disk
    • G06F2212/2146Solid state disk being detachable, e.g.. USB memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Bioethics (AREA)
  • Stored Programmes (AREA)

Abstract

USB 규격을 가지는 장치는 저장 장치에서의 스토리지 영역과 같이 사용자가 사용 가능한 영역이 아닌, 장치의 정보 및 기능을 담고 있는 영역에 대해 무결성 검증을 수행하는 것이 안전하다. 이에 따라 USB 장치에서 사용자가 정보를 저장하는 영역이 아닌 장치의 정보와 기능을 담고 있는 영역에 대하여, 두 개의 단계의 무결성 검증 부트 체인 방식이 개시된다. 일 실시예에 따른 안전한 USB 장치를 보장하는 부트 방법은, 호스트에 연결이 시도됨에 따라 USB 장치를 인식하는 단계; 및 상기 USB 장치가 인식됨에 따라 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계를 포함할 수 있다.

Description

안전한 USB 장치를 보장하는 부트 방법{A SECURE BOOT METHOD FOR SECURE USB DEVICE}
아래의 설명은 USB 장치가 호스트에 연결되어 부팅 시에 스토리지 영역 이외의 펌웨어 영역이 변조되지 않았는지 무결성을 검증하는 보안에 관련된 기술이다.
Universal Serial Bus(USB또는 범용 직렬 버스)는 컴퓨터와 전자 장치간의 연결, 통신, 전원 공급 등을 위한 표준 규격으로, 대용량 저장 장치나 키보드, 마우스, 프린터 등의 컴퓨터 주변 기기를 호스트(PC)와 연결하는데 사용된다. 특히 USB 플래시 드라이브는 플래시 메모리를 포함한 USB 인터페이스를 가지는 데이터 저장 장치로 사용된다.
이러한 USB 저장 장치에, 사용자가 데이터를 저장하기 위해 사용하는 스토리지 영역이 아닌 USB 장치의 기능을 가지는 펌웨어 영역이 변조되어, 각종 보안 위협을 일으키는 USB의 취약점에 대한 보안문제가 되었다(BadUSB 라 한다). BadUSB 취약점은 호스트의 DNS 설정 정보나 중요 파일을 변조 및 유출할 수 있으며, 키보드 에뮬레이션이나 키보드 입력 값 저장(키로깅) 등의 다양한 보안 위협을 초래한다. 이 취약점으로 변조된 BadUSB 장치는 펌웨어 수정을 통해 장치의 기능을 수정하거나 추가하여 악의적인 행위를 수행한다. BadUSB 취약점은 이렇게 변조되는 영역에 대해 USB장치가 부팅할 때에 해당 영역의 무결성에 대해 검사하지 않기 때문에 USB 장치가 호스트에 연결되었을 때 임의로 수정된 내용이 수행되는 설계상의 취약점이 존재한다.
안전한 USB 장치를 보장하는 부트 방법 및 시스템을 제공할 수 있다. 구체적으로, USB 장치가 호스트와 연결되었을 때에 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 통해 BadUSB를 차단하는 방법을 제공하고자 한다.
또한, USB 장치의 구조에 적합한 펌웨어 업데이트 프로토콜을 제시할 수 있다.
안전한 USB 장치를 보장하는 부트 방법은, 호스트에 연결이 시도됨에 따라 USB 장치를 인식하는 단계; 및 상기 USB 장치가 인식됨에 따라 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 USB 장치의 부트로더에서 상기 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 상기 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행하는 단계; 및 상기 USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교하여 상기 USB 장치의 부트로더에서 1차 무결성 검증을 수행하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기1차 무결성 검증이 완료됨에 따라 상기 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화화여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 상기 가변 영역에 대해 계산한 해시 값을 비교하여 상기 USB 장치의 펌웨어의 2차 무결성 검증을 수행하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 USB 장치의 펌웨어에 저장된 가변 영역에 대한 서명 값에서 공개키를 이용하여 복호화하여 추출한 해시 값과 상기 2차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교한 비교 결과가 일치할 경우, 2차 무결성 검증을 완료하고, 상기 비교 결과가 비일치할 경우, 2차 무결성 검증에 실패한 것으로 판단하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 2차 무결성 검증이 완료됨에 따라 메인 함수로 분기하여 상기 USB 장치의 부팅이 수행되어 상기 USB 장치가 저장 장치로 인식되는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 1차 무결성 검증 및 상기 2차 무결성 검증을 완료함에 따라 상기 USB 장치의 펌웨어를 부팅시키고 상기 USB 장치의 펌웨어에 대한 업데이트의 존재 유무를 확인하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 USB 장치의 부트로더에 존재하는 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 서버와 연결하고, 상기 연결된 서버와 통신함에 따라 상기 업데이트 정보가 존재할 경우, 상기 업데이트 정보에 기초하여 업데이트하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 업데이트 정보가 제공하는 서버의 주소가 변경될 경우, 상기 USB 장치의 펌웨어 영역의 일부분에 상기 변경된 서버의 주소를 저장하는 단계를 포함할 수 있다.
상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는, 상기 USB 장치의 펌웨어에 저장된 공개키와 상기 서버에 저장되어 있는 상기 서버의 개인키를 이용하여 상기 업데이트 정보를 상기 USB 장치에 업데이트하고, 상기 업데이트 정보에 대한 무결성 검증을 수행하는 단계를 포함할 수 있다.
안전한 USB 장치를 보장하는 부트 시스템은, 호스트에 연결이 시도됨에 따라 USB 장치를 인식하는 인식부; 및 상기 USB 장치가 인식됨에 따라 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 검증 수행부를 포함할 수 있다.
상기 검증 수행부는, 상기 USB 장치의 부트로더에서 상기 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 상기 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행하고, 상기 USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행할 수 있다.
상기 검증 수행부는, 상기 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교하여 상기 USB 장치의 부트로더에서 1차 무결성 검증을 수행할 수 있다.
상기 검증 수행부는, 상기1차 무결성 검증이 완료됨에 따라 상기 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 상기 가변 영역에 대해 계산한 해시 값을 비교하여 상기 USB 장치의 펌웨어의 2차 무결성 검증을 수행할 수 있다.
상기 검증 수행부는, 상기 1차 무결성 검증 및 상기 2차 무결성 검증을 완료함에 따라 상기 USB 장치의 펌웨어를 부팅시키고 상기 USB 장치의 펌웨어에 대한 업데이트의 존재 유무를 확인하고, 상기 USB 장치의 부트로더에 존재하는 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 서버와 연결하고, 상기 연결된 서버와 통신함에 따라 상기 업데이트 정보가 존재할 경우, 상기 업데이트 정보에 기초하여 업데이트할 수 있다.
일 실시예에 따른 부트 시스템은 호스트와 연결되었을 때에 무결성 검증을 통하여 악의적으로 변조된 BadUSB 장치를 인식 및 차단함에 따라 보안을 유지할 수 있다.
일 실시예에 따른 부트 시스템은 대용량 저장 장치, 키보드, 마우스 등의 USB 규격을 가지며, 장치의 기능을 위해 저장할 수 있는 영역을 가지는 모든 USB 장치에서 안전하게 부트를 실행할 수 있다. 더 나아가, USB 통신 규격이 아닌 모든 임베디드 장치의 무결성 검증에도 적용이 가능하다.
도 1은 USB 플래시 드라이브의 개념을 설명하기 위한 내부 구조이다.
도 2는 일 실시예에 따른 부트 시스템의 구조를 설명하기 위한 블록도이다.
도 3은 일 실시예에 따른 USB 장치의 정보를 담고 있는 자료구조인 디스크립터의 계층적인 구조를 나타낸 도면이다.
도 4는 일 실시예에 따른 부트 시스템에서 USB 장치의 무결성 검증과 업데이트 방법을 설명하기 위한 흐름도이다.
도 5는 일 실시예에 따른 USB 장치의 컨트롤러와 플래시 메모리 내의 부트로더와 펌웨어의 구조를 설명하기 위한 도면이다.
도 6는 일 실시예에 따른 USB 장치가 서버에게 새로운 업데이트 파일들의 존재 유무를 확인하는 방법을 설명하기 위한 흐름도이다.
도 7은 일 실시예에 따른 USB 장치의 업데이트를 위하여 서버에서 업데이트 정보를 유지하는 데이터베이스의 구조를 설명하기 위한 도면이다.
도 8은 일 실시예에 따른 USB 장치에서 서버로부터 전달받은 파일들을 업데이트하는 방법을 설명하기 위한 흐름도이다.
이하, 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
아래의 실시예에서는 USB 규격의 장치뿐만 아니라 임베디드 장치에서 경량의 환경을 고려하여 데이터에 대한 무결성을 검증할 수 있는 방법을 제안한다. 1차 무결성 검증 방식은 데이터 저장 용량이 작고 한 번 기록한 뒤 수정 불가능한 마스크롬에 저장하는 기존의 부트로더 내에, 주체가 되어 장치 제조 후 값이 변경되지 않아야 하는 펌웨어의 고정 영역에 대하여 암호학적 해시 함수를 이용해 무결성을 검증하는 방식이다. 2차 무결성 검증 방식은 펌웨어 내에 2차 무결성 검증 함수가 주체가 되어 업데이트를 통해 수정될 수 있는 가변 영역에 대해 코드 서명 기법을 사용하여 무결성을 검증하는 방식이다. 업데이트 시에는 펌웨어 내에 있지만, 고정되어 있는 펌웨어 업데이트 함수가 수행하는데, 가변 영역에 대한 해시 값을 제조사가 서명 값을 생성하여 전송하기 때문에, 안정적인 업데이트가 가능하다. 또한 공개키방식을 사용하여, 업데이트 프로토콜에 사용한다. 이하, BadUSB 취약점을 분석하고, USB 장치 기반에서 USB 장치의 무결성을 검증하는 보안 방법 및 시스템을 구체적으로 설명하기로 한다.
도 1은 USB 플래시 드라이브의 개념을 설명하기 위한 구조이다.
USB 규격은 장치의 전원 공급이나 전자 장치들을 연결하여 통신하기 위해 다양한 용도로 사용되고 있다. USB 장치(100)의 내부는 호스트(예를 들면, PC)를 통해 사용자가 사용할 수 있다. USB 장치(100)는 컴퓨터 백신으로 탐지할 수 있는 스토리지 및 USB 장치의 정보 및 기능을 담고 있는 펌웨어 영역이 있다. BadUSB 취약점은 펌웨어 영역을 변조하여 안티 바이러스를 통한 탐지나 USB 포맷으로 해결이 어렵다는 설계상의 취약점이 존재한다.
도 1을 참고하면, USB 플래시 드라이브의 구조를 나타낸 것으로, USB 단자(110)는 USB장치(100)와 호스트 간에 전원 공급 및 데이터 전송을 담당한다. 컨트롤러(120)는 USB 장치(100)의 동작을 제어하는 기능을 수행한다. 플래시 메모리(130)는 전기적으로 데이터를 지우고 기록할 수 있는 비휘발성 저장 장치로서, 사용자가 사용 가능한 데이터 영역인 스토리지 영역과 USB 장치의 정보 및 기능 등의 내용이 저장되어 있는 펌웨어 영역을 포함한다.
도 2는 일 실시예에 따른 부트 시스템의 구조를 설명하기 위한 블록도이다.
부트 시스템(200)은 호스트에 연결되는 USB 장치의 무결성을 검증하기 위한 것으로, 인식부(210) 및 검증 수행부(220)를 포함할 수 있다. 이때, 부트 시스템(200)에서 USB 장치의 종류는 다양하게 존재할 수 있으나, 호스트(예를 들면, PC)에 USB 규격을 통하여 연결 가능한 디바이스면 모두 적용 가능하다. 구체적으로, 부트 시스템(200)은 BadUSB 취약점을 분석하고, 이에 대해 대응책을 마련하기 위하여 USB 장치 기반에서 USB 장치의 무결성을 검증하여 보안을 유지할 수 있다.
인식부(210)는 호스트에 연결이 시도됨에 따라 USB 장치를 인식할 수 있다.
검증 수행부(220)는 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행할 수 있다. 검증 수행부(220)는 USB 장치의 부트로더에서 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행하는 1차 검증부(221), USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행하는 2차 검증부(220)를 포함할 수 있다. 또한, 검증 수행부(220)는 1차 무결성 검증 및 2차 무결성 검증을 완료함에 따라 USB 장치의 펌웨어에 대한 업데이트의 존재 유무를 확인하는 업데이트부(223)를 더 포함할 수 있다.
1차 검증부(221)는 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 고정 영역에 대해 계산한 해시 값을 비교하여 USB 장치의 부트로더에서 1차 무결성 검증을 수행할 수 있다.
2차 검증부(222)는 1차 무결성 검증이 완료됨에 따라, 상기 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 가변 영역에 대해 계산한 해시 값을 비교하여 USB 장치의 펌웨어의 2차 무결성 검증을 수행할 수 있다. 2차 검증부(222)는USB 장치의 펌웨어에 저장된 가변 영역에 대한 서명 값에서 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교한 비교 결과가 일치할 경우, 2차 무결성 검증을 완료하고, 비교 결과가 비일치할 경우, 2차 무결성 검증에 실패한 것으로 판단할 수 있다. 이때, 2 차 무결성 검증이 완료됨에 따라 메인 함수로 분기하여 USB장치의 부팅이 수행되어 USB 장치가 저장 장치로 인식될 수 있다.
업데이트부(223)는 USB 장치의 부트로더에 존재하는 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 서버와 연결하고, 연결된 서버와 통신함에 따라 업데이트 정보가 존재할 경우, 업데이트 정보에 기초하여 업데이트할 수 있다. 업데이트부(223)는 업데이트 정보가 제공하는 서버의 주소가 변경될 경우, USB 장치의 펌웨어 영역의 일부분에 변경된 서버의 주소를 저장할 수 있다. 업데이트부(223)는 USB 장치의 펌웨어에 저장된 공개키와 서버에 저장되어 있는 서버의 개인키를 이용하여 업데이트 정보를 USB 장치에 업데이트하고, 업데이트 정보에 대한 무결성 검증을 수행할 수 있다.
도 3은 일 실시예에 따른 USB 장치의 정보를 담고 있는 자료구조인 디스크립터의 계층적인 구조를 나타낸 도면이다.
USB 장치의 종류나 기능 등의 정보를 정해져 있는 양식으로 담고 있는 자료구조인 디바이스 디스크립터(Device Descriptor)(이하, 디스크립터로 기재하기로 함)(310)의 계층적 구조를 나타낸 것으로, USB 장치가 논리적으로 USB 장치와 다른 디바이스에 연결될 때에, 가장 먼저 일어나는 과정을 열거 과정이라 한다. 이때, 디스크립터(310)가 호스트로 가장 먼저 전송된다. 디스크립터(310)가 변조되어 있으면, 호스트는 기존의 제조사가 기능을 부여한 장치 이외의 다른 장치로 인식할 수도 있다. 가장 먼저 전달되는 디스크립터(310)는 디스크립터(310)의 계층적인 구조에서 가장 상위에 존재하며, 장치의 버전과 제조사 번호, USB 통신 규격 등의 정보를 포함한다.
하위의 컨피규레이션 디스크립터(Configuration Descriptor)(320)는 USB 장치의 기능과 전원 관련 정보 등의 설정 정보를 포함한다.
인터페이스 디스크립터(Interface Descriptor)(330)는 USB 장치의 실질적인 기능 관련 정보를 포함한다. 인터페이스 디스크립터(330)는 대용량 저장 장치나 키보드, 마우스와 같은 종류의 Human Interface Device(HID) 정보를 포함한다. 이러한 인터페이스 디스크립터(330)의 수정을 통해 기존과 다른 장치로 인식시킬 수 있다. 인터페이스 디스크립터의 하위 디스크립터들(340), 다시 말해서, HID Descriptor, Endpoint Descriptor 등을 이용하여 USB 장치의 기능 관련 정보에 기초하여 USB 장치의 기능을 수행한다.
인터페이스 디스크립터(330) 및 인터페이스 디스크립터의 하위 디스크립터들(340)에 해당하는 디스크립터를 변조하여 기존과 다른 장치로 인식시킬 수 있으며, 또한 펌웨어 내의 내장 함수 영역의 소프트웨어 프로그램을 수정하여 악의적인 기능을 수행할 수 있다. 이때, 기존의 함수의 내용을 수정하거나 임의의 함수를 추가 및 페이로드(Payload, 데이터)를 삽입하여 임의의 동작을 수행하도록 함으로써 각종 보안 위협을 초래할 수 있다. 이를 방지하기 위하여, USB 장치가 호스트에 연결될 때, 기존의 부팅 과정 전에 도 4의 프로세스가 수행될 수 있다.
도 4는 일 실시예에 따른 USB 장치의 무결성 검증과 업데이트 방법을 설명하기 위한 흐름도이다.
USB 장치가 호스트에 연결이 시도됨에 따라 부팅(boot)된다(410). USB 장치는 부팅 시에, 제조 이후 변경되지 않아야 하는 고정 영역에 대한 검증(1차 무결성 검증)(420)과 펌웨어 업데이트를 통해 수정될 수 있는 가변 영역에 대한 검증(2차 무결성 검증)(440)을 순차적으로 수행할 수 있다.
먼저, 부트 시스템은 USB 장치에 전원이 공급된 이후에, USB 장치의 부트로더에서 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행할 수 있다(420). 부트 시스템은 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교할 수 있다. 이때, 부트 시스템은 1차 해시 값이 일치하는지 여부를 판단할 수 있다(430). 다시 말해서, 부트 시스템은 USB 장치의 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값이 일치하는지 여부를 판단할 수 있다(430). 부트 시스템은 USB 장치의 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값이 일치하지 않을 경우, 프로세스를 종료할 수 있다. 다시 말해서, 부트 시스템은 USB 장치의 접속을 불허하여 USB 장치가 호스트에 연결되는 것이 차단될 수 있다.
부트 시스템은 USB 장치의 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값이 일치할 경우, 1차 무결성 검증을 통과할 수 있다. 부트 시스템은 USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행할 수 있다(440). 부트 시스템은 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교하여 USB 장치의 펌웨어의 2차 무결성 검증을 수행할 수 있다. 이때, 부트 시스템은 2차 해시값이 일치하는지 여부를 판단할 수 있다(450). 다시 말해서, 부트 시스템은 USB 장치의 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 계산된 해시 값이 일치하는지 여부를 판단할 수 있다(450). 검증방법은 아래 1번 수식과 같은 방법을 사용한다.
수학식 1:
hash(data) ? D pk (E sk (data))
이때, D pk pk키를 사용한 비대칭 복호화 함수, pk는 공개키, E sk sk 키를 사용한 비대칭 암호화 함수, sk는 개인키를 의미한다. 수학식 1의 "?" 는 양측 값(좌측의 수식과 우측의 수식의 계산 결과)을 비교하는 함수이다. 여기서 data는 검증하려는 대상이다. 여기서, 암/복호화 함수는 비대칭 함수로써, RSA나 타원 곡선 알고리즘 등을 사용하며, 일반적으로 경량의 장치에서는 저장하는 키 길이가 짧고 빠른 처리 속도를 가지는 ECDSA(타원 곡선 전자 서명 알고리즘)을 많이 사용한다.
부트 시스템은 USB 장치의 펌웨어에 저장된 가변 영역에 대한 서명 값에서 공개키를 이용하여 복호함에 따라 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교한 비교 결과가 일치할 경우, 2차 무결성 검증을 통과할 수 있다. 또한, 부트 시스템은 비교 결과가 비일치할 경우, 가변 영역이 악의적으로 변조된 것으로 간주하여 2차 무결성 검증에 실패한 것으로 판단할 수 있다. 이에 따라 부트 시스템은 USB 장치의 부팅을 종료할 수 있다.
부트 시스템은 1차 무결성 검증 및 2차 무결성 검증이 모두 통과됨에 따라 통상의 부트 프로세스를 시작할 수 있다. 부트 시스템은 USB 펌웨어에 대한 업데이트 정보가 존재하는지 확인한다(470). 이때, USB 장치는 업데이트 정보가 존재하는지 확인하기 위하여 업데이트 정보가 저장되어 있는 서버(외부의 서버)에 연결되어야 한다. 업데이트 정보를 제공하는 서버의 주소는 도 5에 표시된 부트로더(501)의 일부분에 저장되어 있을 수 있다. 부트 시스템은 USB 장치의 부트로더에 존재하는 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 서버와 연결할 수 있다. 이때, 서버의 주소를 포함하는 정보는 제조사가 USB 장치를 제조할 때 미리 저장해놓을 수 있다. 만약, 서버의 주소가 변경될 여지가 있는 경우에, USB 의 펌웨어 영역의 일부분에 변경될 서버의 주소를 저장할 수 있다. 펌웨어 영역에 변경된 서버의 주소를 저장할 경우, 업데이트 과정에서 변경이 가능하다.
부트 시스템은 업데이트 정보를 제공하는 서버와 연결하기 위하여, USB 장치에 통상의 부팅 프로세스가 수행되도록 제어할 수 있다. USB 장치에서 통상의 부팅 프로세스를 마치면 USB 장치는 업데이트 정보가 존재하는지 확인할 수 있다(470). 이러한 과정은 USB 장치가 호스트를 숙주로 사용하여, 서버와 통신하며 확인하게 된다. 업데이트 정보가 존재하면 USB 장치에 업데이트를 수행할 수 있다(471). USB 장치에 업데이트를 완료한 후, 다시 USB 장치의의 초기 검증 과정(boot)으로 돌아가게 된다. 업데이트가 존재하지 않을 경우, 펌웨어 내장 함수의 메인 함수로 분기한다(472). 다시 말해서, 완전히 USB장치가 호스트에 논리적으로 연결되어 이동식 저장 장치로써 작동을 시작한다.
도 5는 일 실시예에 따른 USB 장치의 컨트롤러와 플래시 메모리 내의 부트로더와 펌웨어의 구조를 설명하기 위한 도면이다.
USB 장치 내의 컨트롤러(120)와 플래시 메모리(130)의 구조를 나타낸 것이다. 컨트롤러(120) 내의 부트로더(501) 영역은 Read Only Memory(ROM)에 설치되어 있어서, USB 장치의 제작 시 정보를 저장하면 추후에는 내용을 변경하는 것이 불가능하다. 이때, 실시예에서는 다양한 종류의 ROM이 적용될 수 있으나, 마스크롬을 예를 들어 설명하기로 한다. 부트로더(501) 영역은 USB 저장 장치의 본래의 기능을 위한 부트 기능과, 실시예에서 제시하는 추가 기능인 1차 무결성 검증 함수(502)와 1차 검증에 비교하기 위하여 사용되는 고정 영역에 대한 해시 정보(해시 값)(503)이 저장되어 있다. 이와 같이, 1차 무결성 검증 함수(502)와 1차 검증에 비교하기 위하여 사용되는 고정 영역에 대한 해시 정보(503)를 이용하여 부팅의 맨 처음 단계에서 1차 무결성 검증을 수행할 수 있다. 또한, 업데이트 서버의 주소가 해시 값이 저장된 부트로더(501) 영역의 일정 영역에 저장될 수 있다.
플래시 메모리 영역(130)은 USB 장치의 제작이 완료된 이후에 언제든지 적절한 소프트웨어를 사용하면, 내용의 변경이 가능한 영역이다. 펌웨어(510) 내의 고정 영역은 펌웨어 내의 펌웨어를 업데이트하는 함수(512), 2차 무결성을 검증하는 함수(513), 디스크립터(515)와 2차 무결성 검증 시에 사용되는 공개키 값(516)을 포함할 수 있다. 펌웨어의 고정 영역의 대한 해시 값은 부트로더 내의 해시 정보(503) 영역에 이미 보관되어 있다.
구체적으로, 1차 무결성 검증 함수(502)는 펌웨어(510) 내의 고정 영역에 대해 무결성 검증을 수행할 수 있다. 1차 무결성 검증의 역할은, 펌웨어(510) 내의 고정 영역에 특정의 해시 함수를 적용하여 해시 값을 계산하고, 부트로더(501)의 해시 정보(503) 영역에 보관된 값과 동일한지 비교하여 판정하는 것이다. 이때, USB 장치의 제조사에서 펌웨어(510)의 고정 영역을 설치할 때, 1차 무결성 검증 함수를 사용하여, 고정 영역을 미리 계산하고, 해시 정보(503) 영역에 해시 정보를 저장할 수 있다. 1단계 무결성 검증 함수는 암호학적 해시 함수를 이용하여 수행할 수 있다. 암호학적 해시 함수는 일 방향 해시 함수의 일종이며, 제 1 역상 저항성과 제 2 역상 저항성, 충돌 저항성을 만족시킨다. 특히, 제 2 역상 저항성은 해시 알고리즘과 입력 값을 알더라도 같은 해시 값을 가지는 입력 값을 찾는 것이 계산적으로 불가능한 성질로, 역공학을 통해 실시예에서 사용된 해시 함수를 알아내더라도 해당 해시 값을 만족하는 입력 값을 생성할 수 없기 때문에 해시 값의 무결성을 보장할 수 있다면 고정 영역의 무결성 또한 보장한다. 실시예에서 해시 함수는 국제적으로 공인되어 사용되고 있는 다양한 해시 함수 중에 하나를 사용하며, 주로 사용하는 해시 알고리즘은 예를 들면, MD5, SHA-1, SHA-2 등이 있으며, 이 발명에서는 해시 알고리즘의 종류에 제한되지 않는다.
2단계 무결성 검증 함수(513)는 펌웨어의 내의 가변 영역에 대해 무결성 검증을 수행할 수 있다. 펌웨어(510)의 가변 영역은 펌웨어 업데이트 시에 사용되는 정보가 저장되는 헤더(511) 영역, 업데이트를 통해 내용이 수정될 수 있는 내장 함수(514) 영역을 포함할 수 있다. 헤더(511) 영역에 존재하는 헤더 정보는 가장 최근에 발생한 업데이트(업데이트가 한 번도 없었을 경우, 제조자가 지정한 초기 정보)정보를 가지고 있는데, 업데이트 정보의 버전 번호 또는 업데이트 데이터에 대한 제조 날짜(시간 포함) 같은, 제조사가 지정한 업데이트 고유 정보를 포함하고 있다. 또한, 헤더(511) 영역에 존재하는 헤더 정보에 USB의 모델 정보나, 기기 일련번호(Serial number)같은 정보가 포함될 수 있다. 추후, 업데이트가 필요할 때, 서버는 헤더 정보를 사용하여, 업데이트용 파일들을 USB 장치로 전송할 수 있다.
내장 함수(514) 영역은 USB 장치가 호스트에 연결되었을 때, 저장 장치로써의 기능을 수행하는 함수로, USB 제작을 하는 제조사에서 제조 또는 제공하는 함수이다. 서명 값(517) 영역은 가변 영역인 헤더 정보와 내장 함수(기능 함수)(514)의 정보에 대하여 코드 서명 기법을 사용하여 도출한 서명 값을 포함할 수 있다. 서명 값은 USB 장치의 제조 시에는 제조사에서 직접 계산해서 저장되고, 업데이트가 발생할 경우에는 서버가 업데이트할 업데이트 정보와 함께, USB 장치로 전송될 수 있다.
2차 무결성 검증은 USB 펌웨어 내의 가변 영역에 대해 2차 무결성 검증 함수(해시 함수)(513)를 이용하여 계산한 해시 값과 서명 값에서 공개키를 이용하여 복호화하여 추출한 해시 값을 비교할 수 있다. 이때, 비교한 비교 결과가 동일할 경우, 내용이 변경되지 않았음을 보장하며, 또한 정상적인 제조사로부터 생성됨을 보장할 수 있다. 이 방법은 전술한 바와 같이 수학식 1을 사용하여 검증할 수 있다. 수학식 1에서 사용하는 비대칭 복호화 함수와 해시 함수는 2차 무결성 검증 함수(513) 영역에 존재하며, 2차 무결성 검증 함수의 핵심부분이다.
USB 장치에서 1차 무결성 검증이 통과된 후, 2차 무결성 검증을 수행하고 메인 함수로 분기할 수 있다. 메인 함수는 기존의 USB 장치의 부팅 과정을 의미한다. 이러한 정상적인 부팅 과정을 거치면, USB 장치는 이동식 저장 장치로 인식될 수 있다. USB 장치가 이동식 저장 장치로 인식됨에 따라 펌웨어(520) 내의 펌웨어 업데이트 함수(512)가 아래의 도 6과 같이 동작될 수 있다.
도 6을 참고하면, USB 장치가 서버에게 새로운 업데이트 파일들의 존재 유무를 확인하는 방법을 설명하기 위한 흐름도이다. USB 장치(100)와 서버(업데이트 정보를 제공하는 서버)(601)는 호스트(602)를 경유하여 통신을 수행할 수 있다. 이때, 도 5에서 설명한 펌웨어의 펌웨어 업데이트 함수(512)에서 수행될 수 있다.
1차 무결성 검증을 수행할 때 검증 대상이 되었던 펌웨어에 저장된 공개키와 제조사의 서버 내의 개인키를 이용하여 USB 장치(100)의 업데이트에 사용될 수 있다. 이때, 공개키와 개인키는 제조 시에 제조사로부터 제공될 수 있으며, 공개키는 USB 장치의 내(516)에, 개인키는 서버에 저장해놓을 수 있다. 또한, 동일한 모델 제품의 USB 장치에 대하여, 동일한 공개키를 사용하거나, 또는 USB 장치의 각각에 대하여, 각각 다른 (개인키, 공개키) 쌍으로 사용하거나, 일련번호 구간 별로 (개인키, 공개키)로 사용하여도 무방하다.
펌웨어 업데이트 함수(512)는 호스트를 통하여 업데이트의 존재 유무를 확인하기 위해 업데이트 정보가 담겨있는 펌웨어의 헤더(도 5의 511) 영역의 헤더 정보를 공개키(도 5의 516, pk 라 칭한다)를 이용하여 암호화하여 서버로 전송할 수 있다(610). USB 장치의 펌웨어 내의 헤더 영역의 헤더 정보는 펌웨어에 저장되어 있는 각종 기능을 담당하는 함수가 어느 정도 업데이트 되었는지를 판가름 할 수 있는 정보로, 서버에서 저장되어 있는 각종 업데이트용 파일 세트의 제조 날짜 또는 업데이트용 파일들의 특정하는 버전 정보(번호)가 포함될 수 있으며, 실시예에서는 특정하지 아니한다. 다만, 모델에 따른 업데이트를 유일하게 확인할 수 있는 정보면 된다.
서버는 USB장치로부터 전송받은 헤더 정보를 서버가 가지고 있는 개인키(sk라 칭한다)로 복호화한 뒤, USB 장치(대상 장치)에 업데이트가 필요한 지 판단할 수 있다. 다시 말해서, 서버는 USB 장치의 헤더 정보를 사용하여, 서버에서 USB 장치의 헤더 정보보다 더 최신의 업데이트 정보가 존재하는지 확인함에 따라 획득된 결과를 개인키로 암호화하여, USB 장치로 전송한다(620). 이때, "Check"란 신호를 같이 전달함으로써, 서버는 USB가 최신 버전인지 확인을 요청하는 것을 알게 된다. 서버는 USB 장치로 최신의 업데이트 정보가 존재하는지 여부(Yes/NO), 최신의 업데이트 정보가 존재할 경우, 최신의 업데이트 정보(예를 들면, 업데이트 버전번호나, 업데이트제조 날짜 등)를 전송할 수 있다. 이때, 서버가 각종 USB 장치의 펌웨어를 최신으로 업데이트하기 위하여 서버 내의 업데이트 정보를 데이터베이스에 유지해야 한다. 도 7을 참고하면, 서버에서 업데이트 정보를 유지하는 데이터베이스의 개념적인 구조를 나타낸 것이다.
도 7의 테이블은 각 열(row)별로 하나의 업데이트 정보를 나타낸다. 테이블의 내용은 설명을 위한 가상의 데이터이다. 예를 들면, 모델번호가 "U00X1", 대상 기기(USB 장치)의 일련번호가 00123과 01245 사이에 있는 기기의 경우, 최신 업데이트 정보는 버전이 "2", 이 기기에 적용해야 할 개인키가 "e231"를 의미한다. 그리고, 대상 파일들은, "업데이트 대상 파일들 포인트" 항목을 통해(701), 데이터베이스의 다른 위치(702)에 파일들의 리스트와 내용들이 존재할 수 있다. 가변 영역의 서명 값(703)은 USB 장치가 업데이트 되고 나면, 가변 영역 전체에 대해서 해시 값을 추출하고, 추출된 해시 값을 개인키로 암호화한 값이다. 헤더 정보(705)는 USB 장치가 업데이트 되고 나면, 헤더 정보(705)를 USB 장치가 가지고 있어야 하며, 헤더 정보의 서명 값(706)은 헤더 정보(705)의 해시 값을 계산한 후에, 개인키로 암호화한 값을 의미한다. 가변 영역 서명 값의 해시 값(704)은 업데이트 이후의 가변 영역 서명 값(703)에 대한 해시 값이다.
따라서, 최신 업데이트인지 파악은 복호화한 헤더 정보 내에서, 모델번호, 일련번호 또는, 버전 번호 중 적어도 하나 이상을 추출하여, 서버에 전술한 데이터베이스의 테이블 내에서 동일한 모델번호와 일련번호의 항목에 해당하는 열의 버전 번호와 비교하여 확인할 수 있다.
도 8은 일 실시예에 따른 USB 장치에서 서버로부터 전달받은 파일들을 업데이트하는 방법을 설명하기 위한 흐름도이다.
새로운 업데이트가 존재할 때, USB 장치(100)가 서버에게 최신 업데이트 정보를 요청하고, 서버(601)로부터 업데이트 정보를 전송받을 수 있다. 업데이트 과정은 도 6에서 설명한 바와 같이, USB 장치(100)가 호스트(602)를 경유하여, 서버(업데이트 서버)(601)와 정보를 송수신한다. USB 장치(100)는 업데이트 정보가 존재하는지 여부를 확인하는 과정에서 서버로부터 전송받은 업데이트 정보(전술한 도 6의 620)를 공개키로 복호화하여 업데이트 정보의 존재 여부를 확인할 수 있다. 이때, 업데이트 파일이 존재할 경우, 최신의 업데이트 정보를 USB 장치의 공개키로 암호화하여 서버에게 업데이트를 요청한다(810). 이때, 업데이트 확인과 구별하기 위해, 서버는 "Request" 신호를 같이 요청하게 된다.
구체적으로, 서버(601)는 USB 장치(100)로부터 업데이트가 요청됨에 따라 변경될 헤더 정보(도 7의 705), 업데이트 데이터(도 7의 702), 헤더 정보의 해시 값을 서버의 개인키로 서명한 값(도 7의 706), 업데이트될 대상 USB의 전체 가변 영역에 대한 해시 값을 서버의 개인키로 서명한 값(도 7의 703), 가변 영역 서명 값의 해시 값(도 7의 704) 및 업데이트 대상 파일들에 대한 해시 값(도 7의 707)들을 포함하는 업데이트 정보를 USB 장치로 전송할 수 있다(820). 여기서 업데이트 데이터(702)는, 변경되는 USB 장치의 펌웨어에 장착될 예정인 함수의 내용(프로그램)들과 관련 정보들(예, 변경될 함수들의 리스트)을 통칭한다. 또한, 서버에서 사용하는 해시 함수는, USB 장치에서 사용하는 해시 함수와 동일해야 한다. 이러한 과정을 수행함에 따라 서버와의 통신 세션이 종료된다.
USB 장치(100)는 서버(601)로부터 전송받은 업데이트 정보를 사용하여 펌웨어의 내용을 변경하기 위하여, 다음의 세 가지의 과정을 수행할 수 있다. 첫 번째는, 업데이트 정보의 전송도중 무결한 지 확인할 수 있다. 이때, 확인 대상은 헤더 정보, 헤더 정보의 서명 값, 가변 영역의 서명 값, 그리고 업데이트 대상 파일들이다. 이러한 헤더 정보의 무결성 검증 과정을 수학식 2와 같이 나타낼 수 있다.
수학식 2:
hash(header) ? D pk (E sk (header))
hash(data) ? D pk (E sk (data))
x = D pk (E sk (hash(가변영역))), E sk (hash(가변영역))는 전송받은 정보
y = hash(가변영역), (가변영역)는 전송받은 정보.
x ? y
이때, D pk pk키를 사용한 비대칭 복호화 함수, pk는 공개키, E sk sk 키를 사용한 비대칭 암호화 함수, sk는 개인키, 수학식 2의 "?" 는 양측 값(좌측의 수식과 우측의 수식의 계산 결과)을 비교하는 함수를 의미한다.
서버의 개인키로 암호화되어 있는 헤더 정보의 서명 값(도 7의 706)을 USB 장치의 공개키를 사용하여 복호화함에 따라 서버로부터 전송받은 헤더 정보의 해시 값이 추출될 수 있다. 서버로부터 전송받은 헤더 정보(도 7의 705)를 해시 함수를 사용하여 계산한 값과 전술한 복호화한 헤더 정보의 서명값을 비교할 수 있다.
업데이트 대상 파일에 대한 무결성 검증은 다음과 같다. 가변 영역에 대한 무결성 검증은 다음과 같다. 전송받은 가변 영역(702)을 해시 함수로 계산한 후에, 전송받은 가변 영역의 서명 값(도 7의 703)을 해시로 계산한 값이 동일하면 가변 영역은 무결하다고 판단한다. 이에 따라 헤더 정보와 업데이트 대상 파일들과 가변 영역 서명 값이 무결하다고 판명되면, 전송 단계에서는 무결하다고 판정한다. 다음 단계로 진행한다.
두 번째로, USB 장치로 전송 도중의 변경없이 업데이트 정보가 안전하게 도달되었으면, 업데이트와 관련된 정보를 사용하여, USB 장치 내에 업데이트해야 할 부분만 업데이트를 수행할 수 있다. 다시 말해서, 헤더(511) 영역의 헤더 정보를 서버로부터 전송받은 헤더 정보(도 7의 705)로 교체하고, 내장 함수(514) 영역의 교체 대상 파일들을 서버로부터 전송받은 데이터(도 8의 820, 도 7의 702)로 교체할 수 있다.
세 번째로, USB 장치 내의 업데이트 내용이 완료되었으면, 펌웨어의 가변 영역에 대한 서명 값(도 5의 517) 영역에 서버로부터 전송받은 가변 영역 서명값(도 7의 703)을 저장할 수 있다.
실시예에 따르면, 대용량 저장 장치, 키보드, 마우스 등의 USB 규격을 가지며, 장치의 기능을 위해 저장할 수 있는 영역을 가지는 모든 USB 장치에 사용 가능하다. 또한 USB 통신 규격이 아닌 모든 임베디드 장치의 무결성 검증에 적용 가능하다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예 들에서 설명된 장치 및 구성요소는, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영체제(OS) 및 상기 운영체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (15)

  1. 안전한 USB 장치를 보장하는 부트 방법에 있어서,
    호스트에 연결이 시도됨에 따라 USB 장치를 인식하는 단계; 및
    상기 USB 장치가 인식됨에 따라 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계
    를 포함하고,
    상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는,
    상기 USB 장치의 부트로더에서 상기 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 상기 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행하고, 상기 USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행하고, 상기 1차 무결성 검증 및 상기 2차 무결성 검증을 완료함에 따라 상기 USB 장치의 펌웨어를 부팅시키고 상기 USB 장치의 펌웨어에 대한 업데이트의 존재 유무를 확인하고, 상기 USB 장치의 부트로더에 존재하는 외부의 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 외부의 서버와 연결하고, 상기 연결된 외부의 서버와 통신함에 따라 상기 업데이트 정보가 존재할 경우, 상기 업데이트 정보에 기초하여 업데이트하고, 상기 USB 장치의 펌웨어에 저장된 공개키와 상기 외부의 서버에 저장되어 있는 상기 외부의 서버의 개인키를 이용하여 상기 업데이트 정보를 상기 USB 장치에 업데이트하고, 상기 업데이트 정보에 대한 무결성 검증을 수행하고, 상기 업데이트 정보를 제공하는 외부의 서버의 주소가 변경될 경우, 상기 USB 장치의 펌웨어 영역의 일부분에 상기 변경된 외부의 서버의 주소를 저장하는 단계
    를 포함하는 안전한 USB 장치를 보장하는 부트 방법.
  2. 삭제
  3. 제1항에 있어서,
    상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는,
    상기 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교하여 상기 USB 장치의 부트로더에서 1차 무결성 검증을 수행하는 단계
    를 포함하는 안전한 USB 장치를 보장하는 부트 방법.
  4. 제1항에 있어서,
    상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는,
    상기1차 무결성 검증이 완료됨에 따라 상기 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 상기 가변 영역에 대해 계산한 해시 값을 비교하여 상기 USB 장치의 펌웨어의 2차 무결성 검증을 수행하는 단계
    를 포함하는 안전한 USB 장치를 보장하는 부트 방법.
  5. 제1항에 있어서,
    상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는,
    상기 USB 장치의 펌웨어에 저장된 가변 영역에 대한 서명 값에서 공개키를 이용하여 복호화하여 추출한 해시 값과 상기 2차 무결성 검증 함수를 이용하여 상기 가변 영역에 대해 계산한 해시 값을 비교한 비교 결과가 일치할 경우, 2차 무결성 검증을 완료하고, 상기 비교 결과가 비일치할 경우, 2차 무결성 검증에 실패한 것으로 판단하는 단계
    를 포함하는 안전한 USB 장치를 보장하는 부트 방법.
  6. 제5항에 있어서,
    상기 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 단계는,
    상기 2차 무결성 검증이 완료됨에 따라 메인 함수로 분기하여 상기 USB장치의 부팅이 수행되어 상기 USB 장치가 저장 장치로 인식되는 단계
    를 포함하는 안전한 USB 장치를 보장하는 부트 방법.
  7. 삭제
  8. 삭제
  9. 삭제
  10. 삭제
  11. 안전한 USB 장치를 보장하는 부트 시스템에 있어서,
    호스트에 연결이 시도됨에 따라 USB 장치를 인식하는 인식부; 및
    상기 USB 장치가 인식됨에 따라 무결성 검증 부트 체인 방식으로 적어도 하나 이상의 무결성 검증을 수행하는 검증 수행부
    를 포함하고,
    상기 검증 수행부는,
    상기 USB 장치의 부트로더에서 상기 USB 장치의 펌웨어의 고정 영역을 판독함에 따라 상기 USB 장치의 고정 영역에 대한 해시 값을 이용하여 1차 무결성 검증을 수행하고, 상기 USB 장치의 펌웨어의 가변 영역을 판독함에 따라 코드 서명 기법을 이용하여 2차 무결성 검증을 수행하고, 상기 1차 무결성 검증 및 상기 2차 무결성 검증을 완료함에 따라 상기 USB 장치의 펌웨어를 부팅시키고 상기 USB 장치의 펌웨어에 대한 업데이트의 존재 유무를 확인하고, 상기 USB 장치의 부트로더에 존재하는 외부의 서버의 주소에 기초하여 업데이트 정보가 저장되어 있는 외부의 서버와 연결하고, 상기 연결된 외부의 서버와 통신함에 따라 상기 업데이트 정보가 존재할 경우, 상기 업데이트 정보에 기초하여 업데이트하고, 상기 USB 장치의 펌웨어에 저장된 공개키와 상기 외부의 서버에 저장되어 있는 상기 외부의 서버의 개인키를 이용하여 상기 업데이트 정보를 상기 USB 장치에 업데이트하고, 상기 업데이트 정보에 대한 무결성 검증을 수행하고, 상기 업데이트 정보를 제공하는 외부의 서버의 주소가 변경될 경우, 상기 USB 장치의 펌웨어 영역의 일부분에 상기 변경된 외부의 서버의 주소를 저장하는
    안전한 USB 장치를 보장하는 부트 시스템.
  12. 삭제
  13. 제11항에 있어서,
    상기 검증 수행부는,
    상기 USB 장치의 부트로더에 저장된 펌웨어의 고정 영역에 대한 해시 값과 1차 무결성 검증 함수를 이용하여 계산된 해시 값을 비교하여 상기 USB 장치의 부트로더에서 1차 무결성 검증을 수행하는
    것을 특징으로 하는 안전한 USB 장치를 보장하는 부트 시스템.
  14. 제11항에 있어서,
    상기 검증 수행부는,
    상기1차 무결성 검증이 완료됨에 따라 상기 USB 장치의 펌웨어에 저장된 펌웨어의 가변 영역에 대한 서명 값으로부터 공개키를 이용하여 복호화하여 추출한 해시 값과 2차 무결성 검증 함수를 이용하여 상기 가변 영역에 대해 계산한 해시 값을 비교하여 상기 USB 장치의 펌웨어의 2차 무결성 검증을 수행하는
    것을 특징으로 하는 안전한 USB 장치를 보장하는 부트 시스템.
  15. 삭제
KR1020180042337A 2018-04-11 2018-04-11 안전한 usb 장치를 보장하는 부트 방법 KR102089435B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180042337A KR102089435B1 (ko) 2018-04-11 2018-04-11 안전한 usb 장치를 보장하는 부트 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180042337A KR102089435B1 (ko) 2018-04-11 2018-04-11 안전한 usb 장치를 보장하는 부트 방법

Publications (2)

Publication Number Publication Date
KR20190118894A KR20190118894A (ko) 2019-10-21
KR102089435B1 true KR102089435B1 (ko) 2020-03-16

Family

ID=68460628

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180042337A KR102089435B1 (ko) 2018-04-11 2018-04-11 안전한 usb 장치를 보장하는 부트 방법

Country Status (1)

Country Link
KR (1) KR102089435B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11520896B2 (en) 2020-08-25 2022-12-06 Samsung Electronics Co., Ltd. Storage device

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115827030A (zh) * 2022-12-01 2023-03-21 长城汽车股份有限公司 车辆的usb固件升级的方法、装置及车辆

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101655890B1 (ko) 2015-04-08 2016-09-08 (주)세이퍼존 배드 유에스비 방지를 위한 보안 유에스비 장치의 펌웨어 설치 방법
KR101769714B1 (ko) * 2016-07-04 2017-08-21 순천향대학교 산학협력단 Bad usb 활성화 방지 시스템 및 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060117143A (ko) * 2005-05-13 2006-11-16 엘지전자 주식회사 컴퓨터 시스템의 안전 부팅 장치 및 방법
CN102142070B (zh) * 2005-09-14 2013-11-06 桑迪士克科技公司 存储卡控制器固件的硬件驱动器完整性检查

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101655890B1 (ko) 2015-04-08 2016-09-08 (주)세이퍼존 배드 유에스비 방지를 위한 보안 유에스비 장치의 펌웨어 설치 방법
KR101769714B1 (ko) * 2016-07-04 2017-08-21 순천향대학교 산학협력단 Bad usb 활성화 방지 시스템 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11520896B2 (en) 2020-08-25 2022-12-06 Samsung Electronics Co., Ltd. Storage device

Also Published As

Publication number Publication date
KR20190118894A (ko) 2019-10-21

Similar Documents

Publication Publication Date Title
US11741230B2 (en) Technologies for secure hardware and software attestation for trusted I/O
EP3458999B1 (en) Self-contained cryptographic boot policy validation
US10931451B2 (en) Securely recovering a computing device
US9288155B2 (en) Computer system and virtual computer management method
US8832457B2 (en) Methods and apparatus for authenticating components of processing systems
US8254568B2 (en) Secure booting a computing device
EP1944712B1 (en) Methods and apparatus for protecting data
CN101657792B (zh) 可信部件更新***和方法
EP3637297A1 (en) Securing firmware
US20210012008A1 (en) Method of initializing device and method of updating firmware of device having enhanced security function
US8068614B2 (en) Methods and apparatus for batch bound authentication
KR101190479B1 (ko) 티켓 인증 보안 설치 및 부트
US20130081124A1 (en) Trusting an unverified code image in a computing device
US11336444B2 (en) Hardware security module for verifying executable code, device having hardware security module, and method of operating device
KR102286794B1 (ko) 통합 보안 SoC를 이용한 IoT 디바이스의 안전한 부트 방법
CN112699419A (zh) 安全执行可延伸固件应用程序的方法及计算器设备
KR102256249B1 (ko) 통합 보안 SoC를 이용한 IoT 디바이스의 안전한 펌웨어 업데이트 방법
KR102089435B1 (ko) 안전한 usb 장치를 보장하는 부트 방법
KR20150089696A (ko) 접근제어와 우선순위기반 무결성 검증 시스템 및 그 방법
KR20180110432A (ko) 어플리케이션의 무결성 검증 방법 및 장치
US20240037216A1 (en) Systems And Methods For Creating Trustworthy Orchestration Instructions Within A Containerized Computing Environment For Validation Within An Alternate Computing Environment
WO2021015204A1 (ja) アクセス制御装置、アクセス制御方法及びプログラム
KR101611104B1 (ko) 인터넷 인증 및 2차 생성 파일 암호화를 이용한 소프트웨어 부정 사용 방지 방법
WO2020027159A1 (ja) 情報処理装置、検証方法および検証プログラム
KR20230121382A (ko) 반도체 칩 및 이를 이용한 소프트웨어 보안 실행 방법

Legal Events

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