KR102638058B1 - 펌웨어 에뮬레이션 방법 및 이를 위한 장치 - Google Patents

펌웨어 에뮬레이션 방법 및 이를 위한 장치 Download PDF

Info

Publication number
KR102638058B1
KR102638058B1 KR1020210097770A KR20210097770A KR102638058B1 KR 102638058 B1 KR102638058 B1 KR 102638058B1 KR 1020210097770 A KR1020210097770 A KR 1020210097770A KR 20210097770 A KR20210097770 A KR 20210097770A KR 102638058 B1 KR102638058 B1 KR 102638058B1
Authority
KR
South Korea
Prior art keywords
function
firmware
register
data
feature data
Prior art date
Application number
KR1020210097770A
Other languages
English (en)
Other versions
KR20230016369A (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 KR1020210097770A priority Critical patent/KR102638058B1/ko
Publication of KR20230016369A publication Critical patent/KR20230016369A/ko
Application granted granted Critical
Publication of KR102638058B1 publication Critical patent/KR102638058B1/ko

Links

Images

Classifications

    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • 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/4411Configuring for operating with peripheral devices; Loading of device drivers
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45562Creating, deleting, cloning virtual machine instances
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support

Abstract

본 발명은 펌웨어 에뮬레이션 방법에 있어서, 적어도 하나의 주변 장치에 관한 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 펌웨어의 바이너리 정보를 기초로 제2 특징 데이터를 구성하는 단계; 상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하는 단계; 상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하는 단계; 상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하는 단계; 및 상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 단계를 포함하고, 이러한 펌웨어 에뮬레이션 방법을 위한 장치를 제공한다.

Description

펌웨어 에뮬레이션 방법 및 이를 위한 장치{FIRMWARE EMULATION METHOD AND DEVICE THEREFOR}
본 발명은 펌웨어 에뮬레이션 방법 및 이를 위한 장치에 관한 발명이다. 구체적으로, 본 발명은 유사 HAL(Hardware Abstraction Layer) 함수를 탐색하여 임베디드 펌웨어를 에뮬레이션하는 방법에 관한 것이다.
실시간(Real Time) 시스템이란 정해진 시간 제약을 해결할 수 있는 시스템을 말한다. 즉, 주어진 시간 내에 어떠한 일을 처리해야 하는데, 단지 빨리 처리하는 것이 아닌 정해진 시간을 넘겨서는 안된다는 것이다. 실시간 운영체제(RTOS, Real Time Operating System)는 BAE Systems, Elbit Systems, Airbus, Boeing, Northrop Grumman 등의 다양한 국방 및 항공기 생산 업체에서 공급되는 임베디드 장비에 사용되고 있다. 이러한 실시간 운영체제와 임베디드 펌웨어는 테스트 중 오작동이 발생할 수 있으므로, 실제 운용 중인 장비를 대상으로 테스트를 진행하기는 쉽지 않다.
기존의 임베디드 펌웨어를 테스트하는 방법은 취약점 정보와 펌웨어의 함수 유사도 비교를 통해 취약한 펌웨어를 찾아내는 방법을 이용한다. 이러한 기존 방법은 다양한 임베디드 기기 펌웨어 내 함수 정보를 수집하여 데이터베이스로 구성하고, 검사를 진행할 임베디드 펌웨어 취약점 정보(PoC 코드, 취약점 공개 시 알려진 취약점 존재 함수 정보)를 입력 받아 함수 유사도 기반으로 비교한다. 이때 함수 유사도 비교 방법은 각 함수들의 n-gram 정보, 제어 흐름 그래프, 연산 코드 정보, 함수 호출 빈도 등의 함수가 가지는 특징에 기반하여 다양한 방법으로 구현될 수 있다. 예를 들어, 임베디드 기기 데이터베이스에서 해당 함수들이 포함된 펌웨어 정보를 얻어내어 검증을 진행할 펌웨어를 선별하고 선별된 펌웨어들을 에뮬레이션하여 취약점 코드 실행을 통해 검증하는 방법이 있을 수 있다.
이러한 취약점 정보와 펌웨어의 함수 유사도 비교를 통해 취약한 펌웨어를 찾아내는 기존 방법은 임베디드 펌웨어에 대한 취약점 정보를 입력 받아야 하는 한계점이 존재한다. 또한 거의 대부분의 임베디드 펌웨어가 주변장치를 필요로 하기 때문에 펌웨어 구동을 위한 에뮬레이션 수행이 어려울 수 있다. 실제 기기를 이용하여 테스트를 진행할 경우, 임베디드 장비에 탑재된 펌웨어의 성능이 제한적이므로 프로그램 실행 횟수가 줄어들어 테스트 속도가 느려지게 된다. 따라서 종래에 사용되고 있던 임베디드 펌웨어 에뮬레이션 방법은 느린 테스트 속도와 주변장치(peripheral) 확장성의 문제를 갖고 있다.
이러한 문제점을 해결하기 위해 기존의 펌웨어 에뮬레이션 방법들은 실제 장비가 아닌 가상 환경에서의 에뮬레이션 방법을 통해 테스트를 진행하는 방법을 사용하기도 한다. 예를 들어, 에뮬레이터와 실제 디바이스를 하이브리드 방식으로 사용하여 테스트하는 방법, 하드웨어 추상화 레이어인 HAL 함수를 사용하여 테스트하는 방법 등 다양한 에뮬레이션 방법이 사용되고 있다.
본 실시 예가 해결하고자 하는 과제는, HAL 함수 외에 자체 제작된 라이브러리 또는 HAL 함수와 동일한 수준에서 주변장치를 다루는 유사 HAL 함수를 탐색하는 데 있다. 또한, 유사 HAL 함수를 탐색함으로써 HAL 함수를 사용하지 않는 임베디드 펌웨어의 주변장치 관련 함수를 찾아내고, 해당 펌웨어를 에뮬레이션하는 방법을 제공하는 데 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 실시 예에 따른 펌웨어 에뮬레이션 방법은, 적어도 하나의 주변 장치에 관한 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 펌웨어의 바이너리 정보를 기초로 제2 특징 데이터를 구성하는 단계; 상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하는 단계; 상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하는 단계; 상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하는 단계; 및 상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 단계를 포함할 수 있다.
일 실시 예에 따른 펌웨어 에뮬레이션 방법을 위한 장치는, 적어도 하나의 주변 장치에 관한 레지스터에 관한 정보 및 펌웨어의 바이너리 정보를 저장하는 메모리; 및 상기 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 상기 바이너리 정보를 기초로 제2 특징 데이터를 구성하고, 상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하고, 상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하고, 상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하고, 상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 프로세서를 포함할 수 있다.
본 발명에 따르면, 주변 장치와 외부 하드웨어 기기에 대한 의존성이 큰 펌웨어에 대하여, 해당 펌웨어가 실제 장비에 배포 및 탑재되기 전에 펌웨어 안전성을 검증할 수 있는 범용적인 에뮬레이터 환경을 제공할 수 있다.
또한, 본 발명에 따르면, 실시간 운영체제나 자체 라이브러리를 사용하는 펌웨어 등 HAL 함수를 사용하지 않은 펌웨어 또한 유사 HAL 함수 단위로 탐색이 가능하므로, 더 많은 임베디드 펌웨어를 대상으로 안정성을 검증할 수 있다.
발명의 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급되지 않은 또 다른 효과들은 청구범위의 기재로부터 당해 기술 분야의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
도 1은 일 실시 예에 따른 유사 HAL 함수 탐색 방법을 나타낸 개념도이다.
도 2는 일 실시 예에 따른 제1 특징 데이터를 나타낸 도면이다.
도 3은 일 실시 예에 따른 제2 특징 데이터를 구성하는 방법을 나타낸 도면이다.
도 4는 일 실시 예에 따른 제1 특징 데이터 및 제2 특징 데이터를 비교하는 방법을 나타낸 도면이다.
도 5는 일 실시 예에 따른 비교 결과를 필터링하는 방법을 나타낸 도면이다.
도 6은 일 실시 예에 따른 펌웨어 에뮬레이션 방법을 나타낸 흐름도이다.
도 7은 일 실시 예에 따른 펌웨어 에뮬레이션 방법을 위한 장치를 개략적으로 나타낸 블록도이다.
실시 예들에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서 전체에서 기재된 "a, b, 및 c 중 적어도 하나"의 표현은, 'a 단독', 'b 단독', 'c 단독', 'a 및 b', 'a 및 c', 'b 및 c', 또는 'a, b, 및 c 모두'를 포괄할 수 있다.
펌웨어 테스트를 하기 위해선 펌웨어를 해당 디바이스의 에뮬레이터 상에서 동작시키게 된다. 임베디드 펌웨어는 그 특성상 수많은 하드웨어 주변장치에 대한 접근이 필요한데, 이들 주변장치를 전부 에뮬레이션하는 것은 너무 많은 비용을 초래하며, 몇몇 디바이스의 경우 문서화가 되어있지 않은 경우도 있어 에뮬레이션 하는데 어려움이 존재한다. 이것을 해결하기 위해 에뮬레이터와 실제 기기를 하이브리드 방식으로 함께 사용하는 부분 에뮬레이션(Partial Emulation) 방법이 제안되었다. 이 방법으로 펌웨어의 구동을 에뮬레이터를 이용하고, 펌웨어에서 주변장치를 필요로 할 경우 실제 기기를 통해 통신하는 방법으로 주변장치 에뮬레이션의 문제를 해결하였다. 그러나 부분 에뮬레이션 방법의 경우, 실제 하드웨어 기기에 종속되기 때문에 전체 에뮬레이션(Full Emulation)과 같은 소프트웨어 기법에 비해 모니터링 등의 기능 추가가 제한적이고, 새로운 주변장치의 연결이 필요할 경우 실제 기기를 직접 연결해야한다는 점에서 확장성이 떨어진다는 한계점이 존재한다.
이러한 주변장치 에뮬레이션에 대한 구현 오버헤드 문제를 해결하기 위해 HAL 함수를 활용하여 기존 에뮬레이터에서 지원하지 않는 하드웨어 장비에 대해 최소한의 코드 작성을 통해 에뮬레이션 함으로써, 임베디드 펌웨어를 실제 기기 없이 에뮬레이터 상에서 테스트 가능한 방법이 제안되었다. 이 방법은 펌웨어 구현에 있어 주변장치를 다루는 함수로 범용적인 HAL 함수가 쓰인다는 것에 착안하였다. 이 방법은 사전에 주변장치의 입출력 기능을 하는 소프트웨어 주변장치 모델을 구성 해놓고, 에뮬레이터에서 펌웨어 구동 중에 주변장치를 다루는 HAL 함수가 호출될 경우 핸들러를 통해 사전에 구현된 주변장치 모델로 연결시킴으로써 펌웨어의 구동이 가능하게 하여, 주변장치 에뮬레이션의 구현 비용을 낮춘 방법이다.
에뮬레이션을 위해서는 HAL 함수에서 핸들러를 통한 주변장치와의 연결을 적절하게 해주어야하기 때문에, 펌웨어 내에 존재하는 핸들링을 위한 HAL 함수의 주소와 해당 함수의 기능을 알아야 한다. 임베디드 펌웨어의 경우 디버깅 및 심볼 정보를 없앤 상태(스트립 된 펌웨어)로 배포하는 경우가 존재하는데, 이때 HAL 함수 정보를 알기 위해서 스트립 된 펌웨어 파일과 HAL 함수 오브젝트 파일의 매칭을 통해 HAL 함수 정보를 추출하는 매칭 방법을 이용할 수 있다. 그러나 이 매칭 방법은 사전에 제조사에서 배포한 HAL 함수의 오브젝트 파일을 사용해야하기 때문에 컴파일 환경이 다르거나 HAL 함수가 아닌 함수는 오브젝트 파일이 없을 경우 매칭을 하지 못하는 한계점이 존재한다.
예를 들어, 실시간 운영체제와 같은 일부 펌웨어는 주변장치를 제어하기 위해 HAL 함수를 사용하지 않고, 자체 라이브러리 함수나 더 낮은 레벨에서 레지스터를 직접 다루는 함수(Low Level 함수)를 사용하여 개발이 이루어지는 경우가 존재한다. 이때 Low Level 함수의 경우 HAL 함수보다 더 작은 단위이면서 인라인(inline) 함수로 구성되어 있어, 펌웨어를 구성하는 별도의 함수 형태가 아닐 수 있다. 따라서 스트립 된 펌웨어 파일과 HAL 함수 오브젝트 파일을 매칭하는 방법으로는 Low Level 함수의 정확한 위치와 기능을 찾을 수가 없다. 그러므로 오브젝트 파일을 이용한 HAL 함수 매칭 방법으로는 HAL 함수 외의 라이브러리와 함수를 사용하는 펌웨어를 대상으로 에뮬레이션 불가능하다는 한계점이 존재한다.
따라서, 기존의 펌웨어 에뮬레이션 방법들에는 여전히 다른 문제점들이 존재하며, 주변 기기와의 실제 연결을 요구하지 않으면서 HAL 함수 외의 라이브러리와 함수를 사용하는 펌웨어를 대상으로 에뮬레이션 할 수 있는 방법이 요구되었다.
아래에서는 첨부한 도면을 참고하여 본 발명의 실시 예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 이하에서는 도면을 참조하여 본 발명의 실시 예들을 상세히 설명한다.
도 1은 일 실시 예에 따른 유사 HAL 함수 탐색 방법을 나타낸 개념도이다.
본 발명의 펌웨어 에뮬레이션 방법은 유사 HAL 함수를 탐색하는 방법을 통해 펌웨어 검증을 수행할 수 있다. 보다 구체적으로, 본 발명의 펌웨어 에뮬레이션 방법은 기존 HAL 함수를 사용한 에뮬레이션 방법에서 오브젝트 파일을 사용한 HAL 함수 매칭 방법의 한계를 보완하고, HAL 함수 외에 자체 제작된 라이브러리 또는 HAL 함수와 동일한 수준에서 주변장치를 다루는 유사 HAL 함수의 탐색 방법을 제시한다. 이를 위해 본 발명의 유사 HAL 함수 탐색 방법은 다음의 과정을 통해 적어도 하나의 유사 HAL 함수를 확인할 수 있다.
먼저, 데이터베이스 구성기(110)를 통해 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성할 수 있다. 이 때의 레지스터는 적어도 하나의 주변 장치에 접근하기 위하여 주변 장치 관련 정보를 일시적으로 저장하는 기억장치일 수 있다. 또한, 제1 함수는 상기 레지스터에 접근하는 최소 단위(Low level) 함수일 수 있다. 구체적으로, 임베디드 펌웨어에서는 주변 장치를 사용하기 위해 주변 장치 관련 함수를 호출하게 된다. 이 때 주변 장치 관련 함수는 MMIO (Memory-Mapped I/O)를 설정하고 장치에 접근하게 된다. MMIO란 메모리 맵 입출력으로, 주변 장치의 메모리나 레지스터를 위하여 주소 공간을 분리하지 않고 하나의 메모리 주소 공간에서 주변 장치 관련 정보(메모리, 레지스터)을 배치하는 방식을 말한다. 이때 MMIO에는 주변 장치와 관련하여 다양한 설정을 위한 제어 레지스터(Control Register), 상태 레지스터(Status Register), 데이터 레지스터(Data Register) 등이 존재하며, 주변 장치 관련 함수에서 각 레지스터에 접근하기 위해서는 정해진 MMIO 주소와 오프셋이 사용된다.
일 실시 예에 따른 데이터베이스 구성기(110)는 대상 펌웨어 바이너리(10)가 유사 HAL 함수를 찾을 수 있도록 MMIO 레지스터에 접근하는 최소 단위(Low level) 함수에 대한 특징으로 데이터베이스(20)를 구성할 수 있다. 보다 구체적으로, 데이터베이스 구성기(110)는 함수의 이름, 함수의 MMIO 레지스터 읽기 쓰기 여부 및 함수의 MMIO 레지스터 접근 오프셋을 포함하는 Low level 함수에 대한 특징을 추출할 수 있다. 그리고 데이터베이스 구성기(110)는 추출된 특징을 취합하여 데이터베이스(20)로 구성할 수 있다.
이와 관련하여, 도 2는 일 실시 예에 따른 제1 특징 데이터를 나타낸 도면이다. 일 실시 예에 따르면, 제1 특징 데이터는 도 1의 데이터베이스(20)에 포함되는 정보일 수 있다.
일 실시 예에 따르면, 제1 특징 데이터는 제1 함수의 이름, 제1 함수의 MMIO 레지스터에 대한 읽기 또는 쓰기 여부 및 제1 함수의 MMIO 레지스터에 대한 접근 오프셋에 관한 정보 중 적어도 하나를 포함할 수 있다. MMIO 레지스터에 대한 읽기 또는 쓰기 여부의 경우, 0 값은 MMIO 레지스터를 읽은 상태(read)을 나타내고, 1 값은 MMIO 레지스터에 쓴 상태(write)를 나타낸다.
도 2를 참조하면, 제1 특징 데이터의 첫 번째 행에서 왼쪽부터 차례대로 SPI_IsActiveFlag_RXNE는 함수 이름, 0은 함수의 MMIO 레지스터 읽기 또는 쓰기 여부 및 0x8은 함수의 MMIO 레지스터 접근 오프셋을 나타낸다.
다시 도 1로 돌아와서, 데이터베이스 구성기(110)가 데이터베이스(20)를 구성하는 때에 특징 추출기(120)에서는 대상 펌웨어 바이너리(10)를 기초로 제2 특징 데이터를 구성할 수 있다. 이와 같은 과정은 데이터베이스(20)의 구성과 관계 없이 이루어질 수 있으므로, 데이터베이스(20)의 구성과 동시에 이루어질 수도 있다.
보다 구체적으로, 특징 추출기(120)는 대상 펌웨어 바이너리(10)를 입력으로 받아서 데이터베이스(20)와 비교하기 위한 비교 특징을 추출할 수 있다. 특징 추출기(120)는 데이터 의존성 그래프(DDG, Data Dependency Graph)를 정적 및 동적으로 분석하여 대상 펌웨어 바이너리(10)의 특징을 추출할 수 있다. 일 실시 예에 따르면, 특징 추출기(120)는 정적 분석을 통해 대상 펌웨어 바이너리(10)에 관한 제어 흐름 그래프(CFG, Control Flow Graph)를 추출할 수 있다. 그리고, 특징 추출기(120)는 동적 분석을 통해 제어 흐름 그래프의 노드를 기반으로 하여 기호 실행(Symbolic Execution)을 수행하고 데이터 흐름을 추출할 수 있다. 다음으로 특징 추출기(120)는 데이터 흐름을 기초로 데이터 의존성 그래프를 추출할 수 있다. 또한, 특징 추출기(120)는 추출된 데이터 의존성 그래프에서 데이터베이스(20)와의 비교에 필요한 제2 특징 데이터를 추출할 수 있다. 일 실시 예에 따르면, 제2 특징 데이터를 추출하는 과정은 사용자가 수동으로 추출하고자 하는 특징을 지정하여 데이터를 구성할 수도 있으며, 최소 단위(Low level) 함수를 바이너리로 생성한 후 추출을 자동화하는 방식으로 데이터를 구성할 수도 있다.
이와 관련하여, 도 3은 일 실시 예에 따른 제2 특징 데이터(30)를 구성하는 방법을 나타낸 도면이다. 일 실시 예에 따르면, 제2 특징 데이터(30)는 도 1의 대상 펌웨어 바이너리(10)에 기초하여 데이터 의존성 그래프를 통해 추출된 특징에 대응될 수 있다.
일 실시 예에 따르면, 제2 특징 데이터(30)는 MMIO 레지스터에 접근하는 MMIO의 주소, MMIO 레지스터에 대한 읽기 또는 쓰기 여부 및 MMIO 레지스터 접근 오프셋 중 적어도 하나를 포함할 수 있다. 또한, 제2 특징 데이터(30)는 MMIO에 접근하는 명령어 주소 및 해당 명령어의 블록 주소를 더 포함할 수 있다.
도 3을 참조하면, 제2 특징 데이터(30)의 첫 번째 행에서 왼쪽부터 차례대로 0x80006a7은 MMIO에 접근하는 명령어 주소, 0x800069d는 해당 명령어의 블록 주소 (즉, 0x80006a7 명령어의 블록 주소), 0은 MMIO 레지스터에 대한 읽기 또는 쓰기 여부, 0x40004400은 MMIO의 주소, 0x0은 MMIO의 레지스터 접근 오프셋을 나타낸다. 여기서, MMIO 레지스터에 대한 읽기 또는 쓰기 여부의 경우 0 값은 MMIO 레지스터를 읽은 상태(read)을 나타내고, 1 값은 MMIO 레지스터에 쓴 상태(write)를 나타낸다.
다시 도 1로 돌아와서, 데이터베이스 구성기(110)를 통해 구성된 데이터베이스(20)와, 대상 펌웨어 바이너리(10)로부터 특징 추출기(120)를 통해 추출된 특징 정보는 특징 비교기(130)를 통해 서로 비교될 수 있다.
일 실시 예에 따르면, 특징 비교기(130)는 펌웨어 특징 추출 결과와 데이터베이스(20)를 입력으로 받아 특징 비교를 수행할 수 있다. 데이터베이스(20)에 존재하는 정보는 주변 장치와 관련한 MMIO에 접근하는 최소 단위의 함수이기 때문에 함수의 이름이 곧 주변장치의 기능이 된다. 즉, 데이터베이스(20)에서 함수의 특징과 기능을 나타내는 정보를 포함하기 때문에, 펌웨어 바이너리가 스트립 된 정보라고 하더라도, 특징 비교기(130)에서의 특징 비교를 통해 일치하는 함수가 확인될 경우 해당 펌웨어 바이너리 함수의 기능을 파악할 수 있다.
일 실시 예에 따르면, 특징 비교기(130)는 대상 펌웨어 바이너리(10)의 MMIO 레지스터에 대한 읽기 또는 쓰기 특징과 데이터베이스(20)의 MMIO 레지스터에 대한 읽기 또는 쓰기 특징을 비교할 수 있다. 또한, 특징 비교기(130)는 대상 펌웨어 바이너리(10)의 오프셋 특징과 데이터베이스(20)의 오프셋 특징을 비교할 수 있다. 일 실시 예에 따르면, 위의 두 가지 특징이 모두 일치하는 함수가 존재할 경우, 특징이 일치하는 함수가 어떠한 기능 함수인지를 데이터베이스(20)의 Low Level 함수 이름을 기준으로 선별할 수 있다. 만일 두 가지 특징 중 어느 하나의 특징이라도 일치하지 않는 경우에는, 해당 함수는 대상 펌웨어 구현을 위한 HAL 함수와 유사한 함수 후보에서 제외될 것이다.
이와 관련하여, 도 4는 일 실시 예에 따른 제1 특징 데이터(30) 및 제2 특징 데이터를 비교하는 방법을 나타낸 도면이다. 도 4의 제1 특징 데이터(20)는 도 1의 데이터베이스(20)에 대응될 수 있고, 제2 특징 데이터(30)는 도 3의 제2 특징 데이터(30)에 대응될 수 있다.
일 실시 예에 따르면, 제1 특징 데이터(20)는 함수의 이름과 함수 별 특징을 포함할 수 있다. 이에 따라, 대상 펌웨어 바이너리(10)에서 추출한 제1 특징 데이터(20)와 제2 특징 데이터(30)가 매칭이 될 경우, 대상 펌웨어 바이너리(10)에서 특징이 일치하는 곳의 명령어 주소가 어떠한 함수인지를 확인할 수 있다. 이때 하나의 명령어 주소 또는 여러 명령어 주소에서 동일한 함수가 중복해서 선별될 수도 있다.
도 4를 참조하면, 특징 비교 결과(40)의 첫 번째 행에서 왼쪽부터 차례대로 GPIO_GetPinMode는 대상 펌웨어 바이너리(10)의 특징과 일치하는 데이터베이스(20) 함수의 이름, 0x80006a7은 대상 펌웨어 바이너리(10)의 명령어 주소, 0x800069d는 해당 명령어의 블록 주소, 0은 MMIO 레지스터에 대한 읽기 또는 쓰기 여부, 0x40004400은 MMIO의 주소 및 0x0은 MMIO의 레지스터 접근 오프셋을 나타낸다.
다시 도 1로 돌아와서, 필터기(140)는 레지스터 데이터시트를 입력으로 하여 특징 비교기(130)를 통해 추출된 특징 비교 결과 데이터를 필터링할 수 있다.
구체적으로, 필터기(140)는 특징 비교 결과와 레지스터 데이터시트를 입력으로 하여, MMIO 주소 필터링을 수행할 수 있다. 일 실시 예에 따르면, 필터기(140)는 특징 비교 결과에서 탐색된 함수의 이름을 확인하여 주변 장치 이름을 확인할 수 있다. 그리고 확인된 주변 장치 이름에 대응되는 함수의 MMIO 주소를 레지스터 데이터시트에서 확인할 수 있다. 만일 탐색된 함수의 MMIO 주소가 레지스터 데이터시트에서 MMIO의 주변장치 주소 범위에 속하지 않을 경우, 필터링이 수행될 수 있다. 예를 들어, 특징 비교 결과에서 탐색된 함수의 MMIO 주소가 0x40013800이고 함수의 이름이 GPIO_GetPinMode일 경우, 탐색된 함수의 주변 장치 이름은 GPIO로 확인될 수 있다. 그리고, 레지스터 데이터시트 내에서 GPIO의 MMIO 주소 범위가 0x40020000 내지 0x400223FF일 경우, 탐색된 함수의 MMIO 주소는 상기 주소 범위를 벗어났으므로, 해당 함수는 GPIO 관련 함수라고 잘못 분류된 것이며, 필터기(140)는 이러한 잘못 분류된 함수 리스트를 결과에서 삭제할 수 있다.
또한, 일 실시 예에 따르면, 필터기(140)는 필터링 된 특징 비교 결과에 대하여 우선순위를 기초로 최종 결과를 도출할 수 있다. 주변 장치에 관련된 함수의 기능은 크게 읽기 관련 함수, 쓰기 관련 함수 및 상태 관련 함수로 분류된다. 일 실시 예에 따르면, 필터기(140)는 1순위를 데이터 쓰기(송신) 관련 함수, 2순위를 데이터 읽기(수신) 관련 함수, 3순위를 그 외 상태 관련 함수로 하여 우선순위를 정할 수 있다. 예를 들어, 특징 비교 결과에서 동일한 명령어에 읽기, 쓰기가 둘 다 존재한다면 쓰기 기능에 우선순위를 두어 해당 명령어는 송신 관련 함수인 것으로 결정할 수 있다. 또한, 비교 결과에서 동일한 명령어에 읽기와 상태 관련이 둘 다 존재한다면 읽기 기능에 우선순위를 두어 해당 명령어는 수신 관련 함수인 것으로 결정할 수 있다. 그리고, 비교 결과에서 동일한 명령어에 상태 관련만 존재한다면 해당 명령어는 상태 관련 함수로 최종 분류될 수 있다.
이러한 우선순위를 고려하는 이유는, 함수의 기능이 MMIO 레지스터의 읽기 쓰기 여부로 판단되는데, 유사 HAL 함수 단위에서 쓰기 기능을 하는 함수일지라도 실제로는 MMIO 레지스터를 읽는 경우가 존재하기 때문이다. 즉, 송신 기능을 하는 유사 HAL 함수는 MMIO 레지스터에 대하여 읽기 및 쓰기 모두 가능하나, 수신 기능을 하는 유사 HAL 함수는 MMIO 레지스터에 대하여 읽기만이 가능하므로, 송신 관련 함수에 우선순위를 높게 둘 수 있다.
이와 관련하여, 도 5는 일 실시 예에 따른 비교 결과를 필터링하는 방법을 나타낸 도면이다.
일 실시 예에 따르면, 필터기(140)는 특징 비교기(130)를 통해 나온 비교 결과(40)에 대해 레지스터 데이터시트(50)에 따라 MMIO 주소 필터링을 수행하고, 그 결과에 대해 우선순위 분류를 하여 최종 탐색 결과(60)를 도출할 수 있다. 여기서 레지스터 데이터시트(50)는 펌웨어를 제조한 제조사에서 배포하는 데이터시트를 기준으로 필터링을 위해 사전 구성된 데이터일 수 있다. 또한, 최종 탐색 결과(60)는 대상 펌웨어 에뮬레이션을 위한 유사 HAL 함수의 탐색 결과일 수 있다. 일 실시 예에 따르면, 최종 탐색 결과(60)는 명령어 단위가 아닌 함수 단위로 구성될 수 있으며, MMIO 주소가 동일한 함수가 여러 개 존재할 경우 중복 제거가 수행될 수 있다. 다만, MMIO 주소가 동일한 하나의 함수가 여러 주변 장치를 호출하기 위해 사용되는 경우, 해당 함수는 중복되어 출력될 수도 있다.
도 5를 참조하면, 최종 탐색 결과(60)의 첫 번째 행에서 왼쪽부터 차례대로 LL_GPIO_Init은 유사 HAL 함수의 이름, 0x80007bf는 유사 HAL 함수의 시작 주소, 0x40020800은 MMIO 주소, GPIO는 주변 장치의 분류, Status는 유사 HAL 함수의 종류(예를 들어, 송신(Transmit) 또는 수신(Receive) 또는 상태(Status))를 나타낸다.
도 6은 일 실시 예에 따른 펌웨어 에뮬레이션 방법을 나타낸 흐름도이다.
단계 S601에서 방법은, 적어도 하나의 주변 장치에 관한 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 펌웨어의 바이너리 정보를 기초로 제2 특징 데이터를 구성할 수 있다. 일 실시 예에 따르면, 상기 제1 함수는 레지스터에 접근하는 최소 단위(Low level) 함수이고, 제1 특징 데이터는, 제1 함수의 이름, 제1 함수의 레지스터에 대한 읽기 또는 쓰기 여부 및 제1 함수의 레지스터에 대한 접근 오프셋에 관한 정보 중 적어도 하나를 포함할 수 있다.
일 실시 예에 따르면, 단계 S601에서 방법은 제2 특징 데이터를 구성하기 위하여, 펌웨어의 바이너리 정보에 관한 제어 흐름 그래프를 획득하고, 제어 흐름 그래프를 기초로 데이터 흐름을 확인할 수 있다. 그리고, 데이터 흐름을 기초로 데이터 의존성 그래프를 획득하고, 데이터 의존성 그래프를 기초로 제2 특징 데이터를 추출할 수 있다. 일 실시 예에 따르면, 제2 특징 데이터를 추출하는 과정은 사용자가 수동으로 추출하고자 하는 특징을 지정하여 데이터를 구성할 수도 있으며, 최소 단위 함수를 바이너리로 생성한 후 추출을 자동화하는 방식으로 데이터를 구성할 수도 있다. 이 때 제2 특징 데이터는, 레지스터의 주소, 펌웨어의 바이너리 정보에 기초한 레지스터에 대한 읽기 또는 쓰기 여부 및 펌웨어의 바이너리 정보에 기초한 레지스터에 대한 접근 오프셋에 관한 정보 중 적어도 하나를 포함할 수 있다. 또한, 제2 특징 데이터는 레지스터에 접근하기 위한 명령어 주소 및 명령어의 블록 주소 중 적어도 하나를 더 포함할 수도 있다.
단계 S602에서 방법은, 제1 특징 데이터 및 제2 특징 데이터를 비교할 수 있다. 일 실시 예에 따르면, 방법은 제1 함수 및 펌웨어의 바이너리 정보에 기초한 레지스터에 대한 읽기 또는 쓰기 여부를 비교할 수 있다. 또한, 단계 S602에서 방법은 제1 함수 및 펌웨어의 바이너리 정보에 기초한 레지스터에 대한 접근 오프셋을 비교할 수 있다. 이러한 두 가지 특징의 비교를 통해 제2 함수의 후보가 도출될 수 있다.
단계 S603에서 방법은, 레지스터에 관한 데이터를 기반으로 비교 결과를 필터링할 수 있다. 이 때 레지스터에 관한 데이터는 적어도 하나의 주변 장치에 관한 주소 범위 정보를 포함할 수 있다. 일 실시 예에 따르면, 방법은, 비교 결과에 따른 레지스터의 주소에 대응되는 주변 장치를 확인하고, 레지스터에 관한 데이터에서 대응되는 주변 장치의 주소 범위 정보를 확인하여, 대응되는 주변 장치의 주소 범위 정보를 기초로 비교 결과에 따른 레지스터의 주소를 필터링할 수 있다. 일 실시 예에 따르면, 방법은, 비교 결과에 따른 적어도 하나의 함수에 대하여 각 함수의 기능에 대한 우선순위에 기초하여 필터링할 수 있다. 이 때 함수의 기능은 송신, 수신 및 상태 관련 기능을 포함할 수 있다.
단계 S604에서 방법은, 필터링 결과를 기초로 적어도 하나의 제2 함수를 출력할 수 있다. 일 실시 예에 따르면, 방법은, 필터링 결과에 따른 적어도 하나의 함수 중 레지스터에 접근하기 위한 명령어 주소가 동일한 함수가 있는 경우 중복 제거를 수행할 수 있다.
단계 S605에서 방법은, 적어도 하나의 제2 함수를 기초로 펌웨어를 에뮬레이션 할 수 있다.
도 7은 일 실시 예에 따른 펌웨어 에뮬레이션 방법을 위한 장치(700)를 개략적으로 나타낸 블록도이다.
일 실시 예에 따르면, 장치(700)는 메모리(710) 및 프로세서(720)를 포함할 수 있으며, 장치(700)가 위에서 열거된 구성요소들 보다 많거나, 또는 적은 구성요소들을 가질 수 있음을 본 실시 예와 관련된 기술분야에서 통상의 지식을 가진 자라면 이해할 수 있다.
메모리(710)는 적어도 하나의 주변 장치에 관한 레지스터에 관한 정보 및 펌웨어의 바이너리 정보를 저장할 수 있다.
프로세서(720)는 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 바이너리 정보를 기초로 제2 특징 데이터를 구성할 수 있다. 또한, 프로세서(720)는 제1 특징 데이터 및 제2 특징 데이터를 비교하고, 레지스터에 관한 데이터를 기초로 비교 결과를 필터링할 수 있다. 또한, 프로세서(720)는 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하고, 적어도 하나의 제2 함수를 기초로 펌웨어를 에뮬레이션 할 수 있다.
이상의 설명은 본 명세서의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 명세서가 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 명세서의 본질적인 품질에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 명세서에 개시된 실시 예들은 본 명세서의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예에 의하여 본 명세서의 기술 사상의 범위가 한정되는 것은 아니다. 본 명세서의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 균등한 범위 내에 있는 모든 기술 사상은 본 명세서의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (11)

  1. 메모리 및 프로세서를 포함하는 장치에 의해 수행되는, 펌웨어 에뮬레이션 방법에 있어서,
    적어도 하나의 주변 장치에 관한 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 펌웨어의 바이너리 정보를 기초로 제2 특징 데이터를 구성하는 단계;
    상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하는 단계;
    상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하는 단계;
    상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하는 단계; 및
    상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 단계를 포함하는, 펌웨어 에뮬레이션 방법.
  2. 제1항에 있어서,
    상기 제1 함수는 상기 레지스터에 접근하는 최소 단위(Low level) 함수이고,
    상기 제1 특징 데이터는, 상기 제1 함수의 이름, 상기 제1 함수의 상기 레지스터에 대한 읽기 또는 쓰기 여부 및 상기 제1 함수의 상기 레지스터에 대한 접근 오프셋에 관한 정보 중 적어도 하나를 포함하는, 펌웨어 에뮬레이션 방법.
  3. 제1항에 있어서,
    상기 제1 특징 데이터 및 제2 특징 데이터를 구성하는 단계는,
    상기 펌웨어의 바이너리 정보에 관한 제어 흐름 그래프를 획득하는 단계;
    상기 제어 흐름 그래프를 기초로 데이터 흐름을 확인하는 단계; 및
    상기 데이터 흐름을 기초로 데이터 의존성 그래프를 획득하는 단계를 포함하는, 펌웨어 에뮬레이션 방법.
  4. 제3항에 있어서,
    상기 제1 특징 데이터 및 제2 특징 데이터를 구성하는 단계는,
    상기 데이터 의존성 그래프를 기초로 상기 제2 특징 데이터를 추출하는 단계를 더 포함하고,
    상기 제2 특징 데이터는, 상기 레지스터의 주소, 상기 펌웨어의 바이너리 정보에 기초한 상기 레지스터에 대한 읽기 또는 쓰기 여부 및 상기 펌웨어의 바이너리 정보에 기초한 상기 레지스터에 대한 접근 오프셋에 관한 정보 중 적어도 하나를 포함하는, 펌웨어 에뮬레이션 방법.
  5. 제4항에 있어서,
    상기 제2 특징 데이터는, 상기 레지스터에 접근하기 위한 명령어 주소 및 상기 명령어의 블록 주소 중 적어도 하나를 더 포함하는, 펌웨어 에뮬레이션 방법.
  6. 제1항에 있어서,
    상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하는 단계는,
    상기 제1 함수 및 상기 펌웨어의 바이너리 정보에 기초한 상기 레지스터에 대한 읽기 또는 쓰기 여부를 비교하는 단계; 및
    상기 제1 함수 및 상기 펌웨어의 바이너리 정보에 기초한 상기 레지스터에 대한 접근 오프셋을 비교하는 단계를 포함하는, 펌웨어 에뮬레이션 방법.
  7. 제1항에 있어서,
    상기 레지스터에 관한 데이터는 상기 적어도 하나의 주변 장치에 관한 주소 범위 정보를 포함하고,
    상기 비교 결과를 필터링하는 단계는,
    상기 비교 결과에 따른 레지스터의 주소에 대응되는 주변 장치를 확인하는 단계;
    상기 레지스터에 관한 데이터에서 상기 대응되는 주변 장치의 주소 범위 정보를 확인하는 단계; 및
    상기 대응되는 주변 장치의 주소 범위 정보를 기초로 상기 비교 결과에 따른 레지스터의 주소를 필터링하는 단계를 포함하는, 펌웨어 에뮬레이션 방법.
  8. 제1항에 있어서,
    상기 비교 결과를 필터링하는 단계는,
    상기 비교 결과에 따른 적어도 하나의 함수에 대하여 각 함수의 기능에 대한 우선순위에 기초하여 필터링하는 단계를 더 포함하고,
    상기 함수의 기능은 송신, 수신 및 상태 관련 기능을 포함하는, 펌웨어 에뮬레이션 방법.
  9. 제1항에 있어서,
    상기 적어도 하나의 제2 함수를 확인하는 단계는,
    상기 필터링 결과에 따른 적어도 하나의 함수 중 상기 레지스터에 접근하기 위한 명령어 주소가 동일한 함수가 있는 경우 중복 제거를 수행하는 단계를 포함하는, 펌웨어 에뮬레이션 방법.
  10. 펌웨어 에뮬레이션 방법을 위한 장치에 있어서,
    적어도 하나의 주변 장치에 관한 레지스터에 관한 정보 및 펌웨어의 바이너리 정보를 저장하는 메모리; 및
    상기 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 상기 바이너리 정보를 기초로 제2 특징 데이터를 구성하고,
    상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하고,
    상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하고,
    상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하고,
    상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 프로세서를 포함하는 것을 특징으로 하는, 펌웨어 에뮬레이션 방법을 위한 장치.
  11. 펌웨어 에뮬레이션 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터 판독 가능한 비일시적 기록매체로서,
    상기 펌웨어 에뮬레이션 방법은:
    적어도 하나의 주변 장치에 관한 레지스터에 접근하는 적어도 하나의 제1 함수에 관한 제1 특징 데이터를 구성하고, 펌웨어의 바이너리 정보를 기초로 제2 특징 데이터를 구성하는 단계;
    상기 제1 특징 데이터 및 상기 제2 특징 데이터를 비교하는 단계;
    상기 레지스터에 관한 데이터를 기초로 상기 비교 결과를 필터링하는 단계;
    상기 필터링 결과를 기초로 적어도 하나의 제2 함수를 확인하는 단계; 및
    상기 적어도 하나의 제2 함수를 기초로 상기 펌웨어를 에뮬레이션하는 단계를 포함하는, 컴퓨터 판독 가능한 비일시적 기록매체.
KR1020210097770A 2021-07-26 2021-07-26 펌웨어 에뮬레이션 방법 및 이를 위한 장치 KR102638058B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210097770A KR102638058B1 (ko) 2021-07-26 2021-07-26 펌웨어 에뮬레이션 방법 및 이를 위한 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210097770A KR102638058B1 (ko) 2021-07-26 2021-07-26 펌웨어 에뮬레이션 방법 및 이를 위한 장치

Publications (2)

Publication Number Publication Date
KR20230016369A KR20230016369A (ko) 2023-02-02
KR102638058B1 true KR102638058B1 (ko) 2024-02-20

Family

ID=85225490

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210097770A KR102638058B1 (ko) 2021-07-26 2021-07-26 펌웨어 에뮬레이션 방법 및 이를 위한 장치

Country Status (1)

Country Link
KR (1) KR102638058B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2875670B2 (ja) 1991-12-02 1999-03-31 キヤノン株式会社 出力制御装置およびその出力制御方法
JP2015094966A (ja) 2013-11-08 2015-05-18 富士通株式会社 情報処理装置、制御方法、および制御プログラム

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200056647A (ko) * 2018-11-15 2020-05-25 한국인터넷진흥원 펌웨어의 취약점 모니터링 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2875670B2 (ja) 1991-12-02 1999-03-31 キヤノン株式会社 出力制御装置およびその出力制御方法
JP2015094966A (ja) 2013-11-08 2015-05-18 富士通株式会社 情報処理装置、制御方法、および制御プログラム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
허정민 외 3명. 임베디드 디바이스 펌웨어의 웹 인터페이스 취약점 식별을 위한 에뮬레이션 기반 퍼징 기법. 2019년 12월

Also Published As

Publication number Publication date
KR20230016369A (ko) 2023-02-02

Similar Documents

Publication Publication Date Title
US10552301B2 (en) Completing functional testing
CN109359468B (zh) 漏洞检测方法、装置及设备
US8156475B2 (en) Device and method for testing embedded software using emulator
US9619373B2 (en) Method and apparatus to semantically connect independent build and test processes
US10049031B2 (en) Correlation of violating change sets in regression testing of computer software
US20070061624A1 (en) Automated atomic system testing
Pustogarov et al. Ex-vivo dynamic analysis framework for Android device drivers
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
CN110851351A (zh) 部署环境测试方法、装置、计算机设备及存储介质
US20200143061A1 (en) Method and apparatus for tracking location of input data that causes binary vulnerability
US9842044B2 (en) Commit sensitive tests
US10846206B2 (en) Adaptive software testing
CN112925524A (zh) 一种检测驱动程序中不安全直接存储器访问的方法及装置
KR102638058B1 (ko) 펌웨어 에뮬레이션 방법 및 이를 위한 장치
TW201907304A (zh) 用於一微控制器程式之程式碼涵蓋範圍追蹤
JP5967225B2 (ja) データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム
US20140298002A1 (en) Method and device for identifying a disk boot sector virus, and storage medium
JP5766650B2 (ja) 情報処理装置、監視方法および監視プログラム
KR102299640B1 (ko) 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
CN115757099A (zh) 平台固件保护恢复功能自动测试方法和装置
CN114386045A (zh) 一种Web应用程序漏洞检测方法、装置及存储介质
CN110096888B (zh) 一种加快验证及分析smm安全隐患的方法及系统
CN113342632A (zh) 仿真数据自动化处理方法、装置、电子设备及存储介质
CN113392016A (zh) 对程序异常情况处理的规约生成方法、装置、设备及介质
US20070028218A1 (en) Apparatus, system, and method for a software test coverage analyzer using embedded hardware

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