KR20240014248A - 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치 - Google Patents

주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치 Download PDF

Info

Publication number
KR20240014248A
KR20240014248A KR1020220091770A KR20220091770A KR20240014248A KR 20240014248 A KR20240014248 A KR 20240014248A KR 1020220091770 A KR1020220091770 A KR 1020220091770A KR 20220091770 A KR20220091770 A KR 20220091770A KR 20240014248 A KR20240014248 A KR 20240014248A
Authority
KR
South Korea
Prior art keywords
firmware
access
peripheral device
response value
fuzzing
Prior art date
Application number
KR1020220091770A
Other languages
English (en)
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 KR1020220091770A priority Critical patent/KR20240014248A/ko
Publication of KR20240014248A publication Critical patent/KR20240014248A/ko

Links

Classifications

    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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/3692Test management for test results analysis
    • 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/3696Methods or tools to render software testable
    • 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/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Debugging And Monitoring (AREA)

Abstract

일 실시예에 따른 펌웨어 퍼징 방법은, MCU(Micro Controller Unit)의 펌웨어에서, 상기 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별하는 단계; 상기 펌웨어를 에뮬레이션하는 단계; 상기 에뮬레이션된 펌웨어에 대해 상기 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 상기 하나 이상의 실행 경로를 통해 상기 데이터 레지스터에 접근하기 위한 응답 값을 생성하는 단계; 상기 응답 값을 포함하는 주변 장치 접근 모델을 생성하는 단계; 상기 에뮬레이션된 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행하는 단계; 및 상기 퍼징 테스트 중 상기 하나 이상의 주변 장치 중 하나에 대한 접근이 발생한 경우, 상기 주변 장치 접근 모델에 기초하여 상기 접근을 처리하는 단계를 포함한다.

Description

주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치{METHOD AND APPARATUS FOR FIRMWARE FUZZING THROUGH PERIPHERAL DEVICE MODELING}
본 발명의 실시예들은 펌웨어에 대한 취약점 탐지 기술과 관련된다.
많은 임베디드(embedded) 장치의 핵심 구성 요소는 MCU(Micro Controller Unit) 칩이며, MCU의 급속한 발전은 상당히 많은 수의 취약한 제품을 도입하고 있다. 예를 들어, FreeRTOS TCP/IP 스택 취약점을 가진 MCU는 원격 코드 실행이 가능하기 때문에 개인 정보를 탈취하는데 사용될 수 있다.
따라서, MCU의 핵심 구성인 펌웨어에 대한 취약점 점검이 필요하지만 펌웨어는 실행 환경과 작업 코드에 의해 호출되는 주변 장치 드라이버 함수에 의존하기 때문에 펌웨어 내부에 작업 코드를 동적으로 분석하는 것은 쉽지 않다. 일반적으로 드라이버 함수는 주변 장치 레지스터에 접근하며, 레지스터는 영향을 받는 하드웨어의 동작을 유발한다. 예를 들어, 주변 장치인 GPIO(General Purpose Input Output) 핀을 나타내는 레지스터를 읽어 외부 장치인 버튼(button)이 눌렸는지 확인할 수 있다.
이처럼 임베디드 장치의 취약점을 분석하기 위해서는 하드웨어 의존성 문제를 우선적으로 해결해야 한다. 이에 최근 연구는 지원되지 않는 외부 장치와의 상호 작용을 실제 하드웨어로 포워딩하는 접근법을 제안했지만, 대상 펌웨어마다 실제 외부 장치를 사용해야 하므로 대규모 자동화 동적 분석에 적합하지 않으며, 계속되는 시스템 전환에 성능 오버헤드가 발생한다. 또한, 주변 장치 상호 작용을 처리하기 위해 주변 장치 접근 패턴을 기반으로 학습하고 모델링하는 접근법도 있지만, 이는 펌웨어 내부 논리에 대한 통찰력이 부족하기 때문에 주변 장치 레지스터에 대한 오분류 가능성이 높다.
대한민국 등록특허공보 제10-2323621호 (2021. 11. 05. 공고)
본 발명의 실시예들은 펌웨어 취약점 탐지를 위한 펌웨어 퍼징 방법 및 장치를 제공하기 위한 것이다.
일 실시예에 따른 펌웨어 퍼징 방법은, MCU(Micro Controller Unit)의 펌웨어에서, 상기 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별하는 단계; 상기 펌웨어를 에뮬레이션하는 단계; 상기 에뮬레이션된 펌웨어에 대해 상기 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 상기 하나 이상의 실행 경로를 통해 상기 데이터 레지스터에 접근하기 위한 응답 값을 생성하는 단계; 상기 응답 값을 포함하는 주변 장치 접근 모델을 생성하는 단계; 상기 에뮬레이션된 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행하는 단계; 및 상기 퍼징 테스트 중 상기 하나 이상의 주변 장치 중 하나에 대한 접근이 발생한 경우, 상기 주변 장치 접근 모델에 기초하여 상기 접근을 처리하는 단계를 포함한다.
상기 식별하는 단계는, 상기 MCU의 메모리 맵 및 상기 복수의 주변 장치 각각의 데이터 레지스터의 주소를 포함하는 구성 정보에 기초하여 상기 실행 경로를 식별할 수 있다.
상기 식별하는 단계는, 상기 펌웨어에 대한 제어 흐름 그래프(control flow graph)를 생성하는 단계; 상기 구성 정보에 기초하여, 상기 제어 흐름 그래프에서 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 기본 블록(basic block)을 식별하는 단계; 및 상기 제어 흐름 그래프에서 상기 기본 블록으로부터 엔트리 포인트(entry point)까지의 경로를 역추적하여 상기 하나 이상의 실행 경로를 식별하는 단계를 포함할 수 있다.
상기 응답을 생성하는 단계는, 동적 기호 실행을 통해 상기 에뮬레이션된 펌웨어를 상기 하나 이상의 실행 경로로 실행시키고, 상기 동적 기호 실행 결과에 기초하여 상기 응답 값을 생성할 수 있다.
상기 응답 값은, 상기 하나 이상의 실행 경로를 통해 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위해 요구되는 상기 하나 이상의 주변 장치의 상태 레지스터 값 및 제어 레지스터 값 중 적어도 하나를 포함할 수 있다.
상기 처리하는 단계는, 상기 하나 이상의 주변 장치 중 특정 주변 장치에 대한 접근이 발생한 경우, 상기 주변 장치 모델에서 상기 특정 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 획득하는 단계; 상기 획득된 응답 값을 상기 에뮬레이션된 펌웨어로 반환하여 상기 특정 주변 장치에 대한 접근을 처리하는 단계를 포함할 수 있다.
상기 펌웨어 퍼징 방법은, 상기 퍼징 테스트 중 상기 MCU의 알려지지 않은 주변 장치에 대한 접근이 발생한 경우, 상기 동적 분석을 수행하여 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성하는 단계; 및 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 포함하도록 상기 주변 장치 접근 모델을 갱신하는 단계를 더 포함할 수 있다.
일 실시예에 따른 펌웨어 퍼징 장치는, MCU(Micro Controller Unit)의 펌웨어에서, 상기 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별하는 경로 식별부; 상기 펌웨어를 에뮬레이션하는 에뮬레이션부; 상기 에뮬레이션된 펌웨어에 대해 상기 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 상기 하나 이상의 실행 경로를 통해 상기 데이터 레지스터에 접근하기 위한 응답 값을 생성하고, 상기 응답 값을 포함하는 주변 장치 접근 모델을 생성하는 모델 생성부; 및 상기 에뮬레이션된 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행하고, 상기 퍼징 테스트 중 상기 하나 이상의 주변 장치 중 하나에 대한 접근이 발생한 경우, 상기 주변 장치 접근 모델에 기초하여 상기 접근을 처리하는 테스트 수행부를 포함한다.
상기 경로 식별부는, 상기 MCU의 메모리 맵 및 상기 복수의 주변 장치 각각의 데이터 레지스터의 주소를 포함하는 구성 정보에 기초하여 상기 실행 경로를 식별할 수 있다.
상기 경로 식별부는, 상기 펌웨어에 대한 제어 흐름 그래프(control flow graph)를 생성하고, 상기 구성 정보에 기초하여, 상기 제어 흐름 그래프에서 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 기본 블록(basic block)을 식별하고, 상기 제어 흐름 그래프에서 상기 기본 블록으로부터 엔트리 포인트(entry point)까지의 경로를 역추적하여 상기 하나 이상의 실행 경로를 식별할 수 있다.
상기 모델 생성부는, 동적 기호 실행을 통해 상기 에뮬레이션된 펌웨어를 상기 하나 이상의 실행 경로로 실행시키고, 상기 동적 기호 실행 결과에 기초하여 상기 응답 값을 생성할 수 있다.
상기 응답 값은, 상기 하나 이상의 실행 경로를 통해 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위해 요구되는 상기 하나 이상의 주변 장치의 상태 레지스터 값 및 제어 레지스터 값 중 적어도 하나를 포함할 수 있다.
상기 테스트 수행부는, 상기 하나 이상의 주변 장치 중 특정 주변 장치에 대한 접근이 발생한 경우, 상기 주변 장치 모델에서 상기 특정 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 획득하고, 상기 획득된 응답 값을 상기 에뮬레이션된 펌웨어로 반환하여 상기 특정 주변 장치에 대한 접근을 처리할 수 있다.
상기 모델 생성부는, 퍼징 테스트 중 상기 MCU의 알려지지 않은 주변 장치에 대한 접근이 발생한 경우, 상기 동적 분석을 수행하여 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성하고, 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 포함하도록 상기 주변 장치 접근 모델을 갱신할 수 있다.
개시되는 실시예들에 따르면, 동적 분석을 통해 주변 장치 접근 모델을 생성하고, 생성된 주변 장치 접근 모델을 이용하여 펌웨어 실행 및 퍼징 중에 하드웨어 의존성 문제를 안정적으로 해결할 수 있다.
나아가, 주변 장치 접근 모델 생성을 위해 동적 분석 수행 시 펌웨어의 모든 경로가 아닌 사전에 추출된 실행 경로로 안내되기 때문에 경로 폭발 문제가 자연스럽게 완화되며 시간 소모적인 제약 조건 해결기(constraints solver)의 호출이 최소화된다.
도 1은 일 실시예에 따른 펌웨어 퍼징 장치의 구성도
도 2는 일 실시예에 따른 응답 값 생성을 설명하기 위한 도면
도 3은 일 실시예에 따른 펌웨어 퍼징 방법의 순서도
도 4는 예시적인 실시예들에서 사용되기에 적합한 컴퓨팅 장치를 포함하는 컴퓨팅 환경을 예시하여 설명하기 위한 블록도
이하, 도면을 참조하여 본 발명의 구체적인 실시형태를 설명하기로 한다. 이하의 상세한 설명은 본 명세서에서 기술된 방법, 장치 및/또는 시스템에 대한 포괄적인 이해를 돕기 위해 제공된다. 그러나 이는 예시에 불과하며 본 발명은 이에 제한되지 않는다.
본 발명의 실시예들을 설명함에 있어서, 본 발명과 관련된 공지기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략하기로 한다. 그리고, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다. 상세한 설명에서 사용되는 용어는 단지 본 발명의 실시예들을 기술하기 위한 것이며, 결코 제한적이어서는 안 된다. 명확하게 달리 사용되지 않는 한, 단수 형태의 표현은 복수 형태의 의미를 포함한다. 본 설명에서, "포함" 또는 "구비"와 같은 표현은 어떤 특성들, 숫자들, 단계들, 동작들, 요소들, 이들의 일부 또는 조합을 가리키기 위한 것이며, 기술된 것 이외에 하나 또는 그 이상의 다른 특성, 숫자, 단계, 동작, 요소, 이들의 일부 또는 조합의 존재 또는 가능성을 배제하도록 해석되어서는 안 된다.
도 1은 일 실시예에 따른 펌웨어 퍼징 장치의 구성도이다.
도 1을 참조하면, 일 실시예에 따른 펌웨어 퍼징 장치(100)는 경로 식별부(110), 에뮬레이션부(120), 모델 생성부(130) 및 테스트 수행부(140)를 포함한다.
경로 식별부(110)는 MCU(Micro Controller Unit)의 펌웨어(이하, 대상 펌웨어)에서 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별한다.
이때, MCU에 포함된 주변 장치는 MCU 칩 상에 구현되어 있는 온-칩 주변 장치(on-chip peripheral)를 의미할 수 있다. 구체적으로, 주변 장치는 실행 중인 대상 펌웨어가 MCU와 유/무선을 통해 연결된 외부 장치와 인터페이스할 수 있도록 하기 위해 MCU 내부에 구비된 구성 요소를 의미할 수 있다. 구체적으로, 각 주변 장치는 외부 장치로부터 수신된 데이터를 주변 장치의 데이터 레지스터에 저장하고, 대상 펌웨어는 주변 장치의 데이터 레지스터에 접근하여 데이터 레지스터에 저장된 데이터를 읽을 수 있다. 또한, 대상 펌웨어는 실행 중 발생한 출력 데이터를 주변 장치의 데이터 레지스터에 저장하고, 외부 장치는 데이터 레지스터에 저장된 데이터를 읽을 수 있다.
예를 들어, 주변 장치는 GPIO(General Purpose Input Output), ADC(Analog-Digital Converter), DAC(Digital-Analog Converter), 타이머(Timer), SPI(Sereal Peripheral Interface), I2C(Inter-Integrated Circuit), UART(Universal Asynchronous Receiver/Transmitter), USART(Universal Synchronous/Asynchronous Receiver/Transmitter) 등을 포함할 수 있다. 그러나, 주변 장치는 반드시 상술한 예에 한정되는 것은 아니며, MCU의 종류나 구성에 따라 다양하게 변동될 수 있다.
일 실시예에 따르면, 경로 식별부(110)는 MCU의 메모리 맵(Memory map) 및 주변 장치의 데이터 레지스터 주소를 포함하는 구성 정보에 기초하여 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별할 수 있다. 이때, 구성 정보는 예를 들어, MCU에 대한 데이터 시트 등에 기초하여 사전 생성될 수 있다.
일 실시예에 따르면, 경로 식별부(110)는 대상 펌웨어에 대한 제어 흐름 그래프(control flow graph)를 생성하고, 구성 정보에 기초하여 제어 흐름 그래프에서 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 기본 블록을 식별할 수 있다. 구체적으로, 경로 식별부(110)는 구성 정보에 기초하여 각 주변 장치의 데이터 레지스터 주소를 식별하고, 식별된 데이터 레지스터 주소를 호출하는 기본 블록(basic block)을 제어 흐름 그래프에서 식별할 수 있다.
한편, 일 실시예에 따르면, 경로 식별부(110)는 식별된 각 기본 블록에서 대상 펌웨어의 엔트리 포인트(entry point)까지의 경로를 역추적하여 엔트리 포인트에서 각 기본 블록까지의 경로를 각 주변 장치의 데이터 레지스터에 접근하는 실행 경로로 식별할 수 있다. 구체적으로, 경로 식별부(110)는 제어 흐름 그래프에서 식별된 기본 블록의 부모 노드를 식별하고, 식별된 부모 노드에 대한 부모 노드를 식별하는 방식으로 엔트리 포인트까지의 경로를 역추적할 수 있다.
한편, 경로 식별부(110)는 식별된 각 실행 경로를 따라 순차적으로 실행되는 기본 블록들의 주소를 실행 경로에 대한 정보로서 지식 베이스에 저장할 수 있다.
에뮬레이션부(120)는 대상 펌웨어를 에뮬레이션한다. 일 실시예에 따르면, 에뮬레이션부(120)는 예를 들어, QEMU(Quick EMUlator)와 같은 공지된 에뮬레이터를 이용하여 대상 펌웨어를 에뮬레이션할 수 있으나, 반드시 이에 한정되는 것은 아니다.
모델 생성부(130)는 에뮬레이션된 대상 펌웨어에 대해 경로 식별부(110)에 의해 식별된 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 식별된 하나 이상의 실행 경로를 통해 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성하고, 생성된 응답 값을 포함하는 주변 장치 접근 모델을 생성한다.
일 실시예에 따르면, 모델 생성부(130)는 동적 기호 실행(concolic execution)을 통해 에뮬레이션된 대상 펌웨어를 식별된 각 실행 경로로 실행시키고, 동적 기호 실행 결과에 기초하여 응답 값을 생성할 수 있다. 이때, 응답 값은 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위해 요구되는 하나 이상의 주변 장치의 상태 레지스터 값 및 제어 레지스터 값 중 적어도 하나를 포함할 수 있다.
구체적으로, 모델 생성부(130)는 지식 베이스에 저장된 정보에 기초하여 각 실행 경로 상의 기본 블록들이 순차적으로 실행되도록 동적 기호 실행을 수행하고, 특정 주변 장치의 데이터 레지스터에 대한 접근이 발생하는 기본 블록에서 대상 펌웨어가 해당 주변 장치의 데이터 레지스터에 접근하여 데이터를 읽거나 쓰기 위해 필요한 응답 값을 생성할 수 있다.
도 2는 일 실시예에 따른 응답 값 생성을 설명하기 위한 도면이다.
구체적으로, 도 2에 도시된 예는 대상 펌웨어의 코드 중 일부로서 I2C라는 주변 장치로부터 입력을 받는 코드의 일 예를 도시하고 있다. 도 2에 도시된 예에 따르면, 대상 펌웨어는 조건문(210)에서 I2C의 상태 레지스터(SR)에 저장된 값이 2인지 여부를 판단한다. 이때, 상태 레지스터(SR)에 저장된 값이 2인 경우 에러를 반환하고, 2가 아닌 경우 I2C의 데이터 레지스터(DR)에 접근하여 데이터 레지스터(DR)에 저장된 값을 읽어 들인다(220).
즉, 도 2에 도시된 예에서, 대상 펌웨어는 I2C의 상태 레지스터(SR)에 저장된 값이 2가 아닌 경우에만 I2C의 데이터 레지스터(DR)에 접근할 수 있다. 따라서, 모델 생성부(130)는 대상 펌웨어가 I2C의 상태 레지스터(SR)의 값을 읽었을 때 2가 아닌 값을 응답 값으로 반환할 수 있도록, 2가 아닌 값을 대상 펌웨어가 I2C의 상태 레지스터(SR)의 값을 읽었을 때의 응답 값으로 주변 장치 접근 모델에 저장할 수 있다.
테스트 수행부(140)는 에뮬레이션부(120)에 의해 에뮬레이션된 대상 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행한다. 구체적으로, 테스트 수행부(140)는 퍼징 테스트를 위한 테스트 케이스를 생성하고, 에뮬레이션된 펌웨어가 테스트 케이스에 따른 입력을 이용하여 실행되는 과정에서 발생하는 취약점을 탐지할 수 있다.
한편, 퍼징 테스트 수행 시 테스트 케이스에 따른 입력은 각 주변 장치의 데이터 레지스터를 통해 에뮬레이션된 대상 펌웨어로 전달되므로, 에뮬레이션된 대상 펌웨어가 각 주변 장치의 데이터 레지스터에 접근하여 퍼징 테스트를 위해 해당 데이터 레지스터에 저장된 값을 읽을 수 있어야 한다. 따라서, 테스트 수행부(140)는 에뮬레이션된 대상 펌웨어에 대한 퍼징 테스트 중 주변 장치에 대한 접근이 발생한 경우, 주변 장치 접근 모델에 기초하여 해당 주변 장치에 대한 접근을 처리한다.
일 실시예에 따르면, 테스트 수행부(140)는 퍼징 테스트 중 특정 주변 장치에 대한 접근이 발생한 경우, 주변 장치 모델에서 해당 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 획득하고, 획득한 응답 값을 에뮬레이션된 대상 펌웨어로 반환하여 해당 주변 장치에 대한 접근을 처리할 수 있다. 예를 들어, 퍼징 테스트 중 도 2에 도시된 코드가 실행되는 경우, 대상 펌웨어는 조건문(210)에 따라 I2C의 상태 레지스터(SR)에 접근하여 상태 레지스터(SR)에 저장된 값이 2인지 여부를 확인하게 된다. 이 경우, 테스트 수행부(140)는 해당 조건문(210)을 통과하여 I2C의 데이터 레지스터(DR)에 저장된 값을 읽는 코드(220)를 실행하기 위한 상태 레지스터(SR)의 값을 주변 장치 접근 모델로 요청하며, 주변 장치 접근 모델은 상술한 동적 분석을 통해 사전 결정된 I2C의 상태 레지스터 값(즉, 2가 아닌 값)을 요청에 대한 응답 값으로 제공할 수 있다.
한편, 일 실시예에 따르면, 모델 생성부(130)는 테스트 수행부(140)에 의한 퍼징 테스트 중 MCU의 알려지지 않은 주변 장치에 대한 접근이 발생한 경우, 동적 분석을 수행하여 해당 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성한 후, 생성된 응답 값을 포함하도록 주변 장치 접근 모델을 갱신할 수 있다. 구체적으로, 에뮬레이션된 대상 펌웨어에 대한 퍼징 테스트 중 특정 주변 장치에 대한 접근이 발생하여 주변 장치 접근 모델로 응답 값을 요청하였으나, 주변 장치 접근 모델에서 요청된 응답 값을 포함하고 있지 않은 경우, 모델 생성부(130)는 해당 주변 장치가 알려지지 않은 주변 장치인 것으로 판단할 수 있다.
도 3은 일 실시예에 따른 펌웨어 퍼징 방법의 순서도이다.
도 3에 도시된 방법은 예를 들어, 펌웨어 퍼징 장치(100)에 의해 수행될 수 있다.
도 3을 참조하면, 펌웨어 퍼징 장치(100)는 대상 펌웨어에서 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별한다(310).
이후, 펌웨어 퍼징 장치(100)는 대상 펌웨어를 에뮬레이션한다(320).
이후, 펌웨어 퍼징 장치(100)는 에뮬레이션된 대상 펌웨어에 대해 식별된 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 각 실행 경로를 통해 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성한다(330).
이후, 펌웨어 퍼징 장치(100)는 생성된 응답 값을 포함하는 주변 장치 접근 모델을 생성한다(340).
이후, 펌웨어 퍼징 장치(100)는 에뮬레이션된 대상 펌웨어에 대한 퍼징 테스트를 수행한다(350).
이후, 펌웨어 퍼징 장치(100)는 퍼징 테스트 중 하나 이상의 주변 장치 중 하나에 대한 접근이 발생하였는지 여부를 판단한다(360).
이때, 접근이 발생한 경우, 펌웨어 퍼징 장치(100)는 주변 장치 접근 모델에 기초하여 해당 주변 장치에 대한 접근을 처리한다(370).
한편, 펌웨어 퍼징 장치(100)는 퍼징 종료 조건이 만족되었는지 여부를 판단하고(380), 퍼징 종료 조건이 만족될 때까지 350 내지 380 단계를 반복 수행한다.
한편, 실시예에 따라, 알려지지 않은 주변 장치에 대한 접근이 발생하여 370 단계에서 접근에 대한 처리가 불가능한 경우, 펌웨어 퍼징 장치(100)는 동적 분석을 수행하여 해당 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성한 후, 생성된 응답 값이 포함되도록 주변 장치 접근 모델을 갱신할 수 있다.
한편, 도 3에 도시된 순서도에서 적어도 일부의 단계들은 순서를 바꾸어 수행되거나, 다른 단계와 결합되어 함께 수행되거나, 생략되거나, 세부 단계들로 나뉘어 수행되거나, 또는 도시되지 않은 하나 이상의 단계가 부가되어 수행될 수 있다.
도 4는 예시적인 실시예들에서 사용되기에 적합한 컴퓨팅 장치를 포함하는 컴퓨팅 환경을 예시하여 설명하기 위한 블록도이다.
도 4에 도시된 실시예에서, 각 컴포넌트들은 이하에 기술된 것 이외에 상이한 기능 및 능력을 가질 수 있고, 이하에 기술된 것 이외에도 추가적인 컴포넌트를 포함할 수 있다.
컴퓨팅 환경(10)은 컴퓨팅 장치(12)를 포함한다. 일 실시예에서, 컴퓨팅 장치(12)는 펌웨어 퍼징 장치(100)에 포함되는 하나 이상의 컴포넌트일 수 있다.
컴퓨팅 장치(12)는 적어도 하나의 프로세서(14), 컴퓨터 판독 가능 저장 매체(16) 및 통신 버스(18)를 포함한다. 프로세서(14)는 컴퓨팅 장치(12)로 하여금 앞서 언급된 예시적인 실시예에 따라 동작하도록 할 수 있다. 예컨대, 프로세서(14)는 컴퓨터 판독 가능 저장 매체(16)에 저장된 하나 이상의 프로그램들을 실행할 수 있다. 상기 하나 이상의 프로그램들은 하나 이상의 컴퓨터 실행 가능 명령어를 포함할 수 있으며, 상기 컴퓨터 실행 가능 명령어는 프로세서(14)에 의해 실행되는 경우 컴퓨팅 장치(12)로 하여금 예시적인 실시예에 따른 동작들을 수행하도록 구성될 수 있다.
컴퓨터 판독 가능 저장 매체(16)는 컴퓨터 실행 가능 명령어 내지 프로그램 코드, 프로그램 데이터 및/또는 다른 적합한 형태의 정보를 저장하도록 구성된다. 컴퓨터 판독 가능 저장 매체(16)에 저장된 프로그램(20)은 프로세서(14)에 의해 실행 가능한 명령어의 집합을 포함한다. 일 실시예에서, 컴퓨터 판독 가능 저장 매체(16)는 메모리(랜덤 액세스 메모리와 같은 휘발성 메모리, 비휘발성 메모리, 또는 이들의 적절한 조합), 하나 이상의 자기 디스크 저장 디바이스들, 광학 디스크 저장 디바이스들, 플래시 메모리 디바이스들, 그 밖에 컴퓨팅 장치(12)에 의해 액세스되고 원하는 정보를 저장할 수 있는 다른 형태의 저장 매체, 또는 이들의 적합한 조합일 수 있다.
통신 버스(18)는 프로세서(14), 컴퓨터 판독 가능 저장 매체(16)를 포함하여 컴퓨팅 장치(12)의 다른 다양한 컴포넌트들을 상호 연결한다.
컴퓨팅 장치(12)는 또한 하나 이상의 입출력 장치(24)를 위한 인터페이스를 제공하는 하나 이상의 입출력 인터페이스(22) 및 하나 이상의 네트워크 통신 인터페이스(26)를 포함할 수 있다. 입출력 인터페이스(22) 및 네트워크 통신 인터페이스(26)는 통신 버스(18)에 연결된다. 입출력 장치(24)는 입출력 인터페이스(22)를 통해 컴퓨팅 장치(12)의 다른 컴포넌트들에 연결될 수 있다. 예시적인 입출력 장치(24)는 포인팅 장치(마우스 또는 트랙패드 등), 키보드, 터치 입력 장치(터치패드 또는 터치스크린 등), 음성 또는 소리 입력 장치, 다양한 종류의 센서 장치 및/또는 촬영 장치와 같은 입력 장치, 및/또는 디스플레이 장치, 프린터, 스피커 및/또는 네트워크 카드와 같은 출력 장치를 포함할 수 있다. 예시적인 입출력 장치(24)는 컴퓨팅 장치(12)를 구성하는 일 컴포넌트로서 컴퓨팅 장치(12)의 내부에 포함될 수도 있고, 컴퓨팅 장치(12)와는 구별되는 별개의 장치로 컴퓨팅 장치(12)와 연결될 수도 있다.
이상에서 대표적인 실시예를 통하여 본 발명에 대하여 상세하게 설명하였으나, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 전술한 실시예에 대하여 본 발명의 범주에서 벗어나지 않는 한도 내에서 다양한 변형이 가능함을 이해할 것이다. 그러므로 본 발명의 권리범위는 설명된 실시예에 국한되어 정해져서는 안 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.
10: 컴퓨팅 환경
12: 컴퓨팅 장치
14: 프로세서
16: 컴퓨터 판독 가능 저장 매체
18: 통신 버스
20: 프로그램
22: 입출력 인터페이스
24: 입출력 장치
26: 네트워크 통신 인터페이스
100: 펌웨어 퍼징 장치
110: 경로 식별부
120: 에뮬레이션부
130: 모델 생성부
140: 테스트 수행부

Claims (14)

  1. MCU(Micro Controller Unit)의 펌웨어에서, 상기 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별하는 단계;
    상기 펌웨어를 에뮬레이션하는 단계;
    상기 에뮬레이션된 펌웨어에 대해 상기 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 상기 하나 이상의 실행 경로를 통해 상기 데이터 레지스터에 접근하기 위한 응답 값을 생성하는 단계;
    상기 응답 값을 포함하는 주변 장치 접근 모델을 생성하는 단계;
    상기 에뮬레이션된 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행하는 단계; 및
    상기 퍼징 테스트 중 상기 하나 이상의 주변 장치 중 하나에 대한 접근이 발생한 경우, 상기 주변 장치 접근 모델에 기초하여 상기 접근을 처리하는 단계를 포함하는, 펌웨어 퍼징 방법.
  2. 청구항 1에 있어서,
    상기 식별하는 단계는, 상기 MCU의 메모리 맵 및 상기 복수의 주변 장치 각각의 데이터 레지스터의 주소를 포함하는 구성 정보에 기초하여 상기 실행 경로를 식별하는, 펌웨어 퍼징 방법.
  3. 청구항 2에 있어서,
    상기 식별하는 단계는, 상기 펌웨어에 대한 제어 흐름 그래프(control flow graph)를 생성하는 단계;
    상기 구성 정보에 기초하여, 상기 제어 흐름 그래프에서 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 기본 블록(basic block)을 식별하는 단계; 및
    상기 제어 흐름 그래프에서 상기 기본 블록으로부터 엔트리 포인트(entry point)까지의 경로를 역추적하여 상기 하나 이상의 실행 경로를 식별하는 단계를 포함하는, 펌웨어 퍼징 방법.
  4. 청구항 1에 있어서,
    상기 응답을 생성하는 단계는, 동적 기호 실행을 통해 상기 에뮬레이션된 펌웨어를 상기 하나 이상의 실행 경로로 실행시키고, 상기 동적 기호 실행 결과에 기초하여 상기 응답 값을 생성하는, 펌웨어 퍼징 방법.
  5. 청구항 1에 있어서,
    상기 응답 값은, 상기 하나 이상의 실행 경로를 통해 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위해 요구되는 상기 하나 이상의 주변 장치의 상태 레지스터 값 및 제어 레지스터 값 중 적어도 하나를 포함하는, 펌웨어 퍼징 방법.
  6. 청구항 1에 있어서,
    상기 처리하는 단계는, 상기 하나 이상의 주변 장치 중 특정 주변 장치에 대한 접근이 발생한 경우, 상기 주변 장치 모델에서 상기 특정 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 획득하는 단계;
    상기 획득된 응답 값을 상기 에뮬레이션된 펌웨어로 반환하여 상기 특정 주변 장치에 대한 접근을 처리하는 단계를 포함하는, 펌웨어 퍼징 방법.
  7. 청구항 1에 있어서,
    상기 퍼징 테스트 중 상기 MCU의 알려지지 않은 주변 장치에 대한 접근이 발생한 경우, 상기 동적 분석을 수행하여 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성하는 단계; 및
    상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 포함하도록 상기 주변 장치 접근 모델을 갱신하는 단계를 더 포함하는, 펌웨어 퍼징 방법.
  8. MCU(Micro Controller Unit)의 펌웨어에서, 상기 MCU에 포함된 복수의 주변 장치 중 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 실행 경로를 식별하는 경로 식별부;
    상기 펌웨어를 에뮬레이션하는 에뮬레이션부;
    상기 에뮬레이션된 펌웨어에 대해 상기 하나 이상의 실행 경로에 기초한 동적 분석을 수행하여 상기 하나 이상의 실행 경로를 통해 상기 데이터 레지스터에 접근하기 위한 응답 값을 생성하고, 상기 응답 값을 포함하는 주변 장치 접근 모델을 생성하는 모델 생성부; 및
    상기 에뮬레이션된 펌웨어에 대한 퍼징(fuzzing) 테스트를 수행하고, 상기 퍼징 테스트 중 상기 하나 이상의 주변 장치 중 하나에 대한 접근이 발생한 경우, 상기 주변 장치 접근 모델에 기초하여 상기 접근을 처리하는 테스트 수행부를 포함하는, 펌웨어 퍼징 장치.
  9. 청구항 8에 있어서,
    상기 경로 식별부는, 상기 MCU의 메모리 맵 및 상기 복수의 주변 장치 각각의 데이터 레지스터의 주소를 포함하는 구성 정보에 기초하여 상기 실행 경로를 식별하는, 펌웨어 퍼징 장치.
  10. 청구항 9에 있어서,
    상기 경로 식별부는, 상기 펌웨어에 대한 제어 흐름 그래프(control flow graph)를 생성하고,
    상기 구성 정보에 기초하여, 상기 제어 흐름 그래프에서 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하는 하나 이상의 기본 블록(basic block)을 식별하고,
    상기 제어 흐름 그래프에서 상기 기본 블록으로부터 엔트리 포인트(entry point)까지의 경로를 역추적하여 상기 하나 이상의 실행 경로를 식별하는, 펌웨어 퍼징 장치.
  11. 청구항 8에 있어서,
    상기 모델 생성부는, 동적 기호 실행을 통해 상기 에뮬레이션된 펌웨어를 상기 하나 이상의 실행 경로로 실행시키고, 상기 동적 기호 실행 결과에 기초하여 상기 응답 값을 생성하는, 펌웨어 퍼징 장치.
  12. 청구항 8에 있어서,
    상기 응답 값은, 상기 하나 이상의 실행 경로를 통해 상기 하나 이상의 주변 장치의 데이터 레지스터에 접근하기 위해 요구되는 상기 하나 이상의 주변 장치의 상태 레지스터 값 및 제어 레지스터 값 중 적어도 하나를 포함하는, 펌웨어 퍼징 장치.
  13. 청구항 8에 있어서,
    상기 테스트 수행부는, 상기 하나 이상의 주변 장치 중 특정 주변 장치에 대한 접근이 발생한 경우, 상기 주변 장치 모델에서 상기 특정 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 획득하고,
    상기 획득된 응답 값을 상기 에뮬레이션된 펌웨어로 반환하여 상기 특정 주변 장치에 대한 접근을 처리하는, 펌웨어 퍼징 장치.
  14. 청구항 8에 있어서,
    상기 모델 생성부는, 퍼징 테스트 중 상기 MCU의 알려지지 않은 주변 장치에 대한 접근이 발생한 경우, 상기 동적 분석을 수행하여 상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 생성하고,
    상기 알려지지 않은 주변 장치의 데이터 레지스터에 접근하기 위한 응답 값을 포함하도록 상기 주변 장치 접근 모델을 갱신하는, 펌웨어 퍼징 장치.
KR1020220091770A 2022-07-25 2022-07-25 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치 KR20240014248A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220091770A KR20240014248A (ko) 2022-07-25 2022-07-25 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220091770A KR20240014248A (ko) 2022-07-25 2022-07-25 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20240014248A true KR20240014248A (ko) 2024-02-01

Family

ID=89859413

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220091770A KR20240014248A (ko) 2022-07-25 2022-07-25 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치

Country Status (1)

Country Link
KR (1) KR20240014248A (ko)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102323621B1 (ko) 2021-05-03 2021-11-05 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102323621B1 (ko) 2021-05-03 2021-11-05 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법

Similar Documents

Publication Publication Date Title
Clements et al. {HALucinator}: Firmware re-hosting through abstraction layer emulation
Johnson et al. Jetset: Targeted firmware rehosting for embedded systems
US8666723B2 (en) System and methods for generating and managing a virtual device
US9152540B2 (en) System and methods for generating and managing a virtual device
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
CN109634869B (zh) 二进制翻译中间表示正确性测试方法及装置
CN113497809B (zh) 基于控制流和数据流分析的mips架构漏洞挖掘方法
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
Eisele et al. Embedded fuzzing: a review of challenges, tools, and solutions
KR102273135B1 (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
US20240086310A1 (en) What-if analysis for notebooks
WO2012027886A1 (en) Platform specific application test
CN112579373A (zh) 用于分支预测器的验证方法、系统、设备以及存储介质
US9218442B2 (en) Firmware and hardware verification using Opcode comparison
CN111385661B (zh) 语音控制全屏播放的方法、装置、终端及存储介质
KR20240014248A (ko) 주변 장치 모델링을 통한 펌웨어 퍼징 방법 및 장치
CN114428642B (zh) 一种基于新型处理器架构的随机指令生成环境
Casinghino et al. Using binary analysis frameworks: The case for BAP and angr
CN115374017A (zh) 一种仿真运行可执行文件时抓取现场的方法及计算设备
Farrelly et al. SplITS: Split Input-to-State Mapping for Effective Firmware Fuzzing
Letychevskyi et al. Fuzz Testing Technique and its Use in Cybersecurity Tasks
Greco et al. Firmware Dynamic Analysis Through Rewriting
Gustafson Discovery and Remediation of Vulnerabilities in Monolithic IoT Firmware
CN112580282B (zh) 用于集成电路设计验证的方法、装置、设备以及存储介质
Fortino et al. Enabling Faster Security Assessment of Re-hosted Firmware