WO2018101575A1 - 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법 - Google Patents

바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법 Download PDF

Info

Publication number
WO2018101575A1
WO2018101575A1 PCT/KR2017/008354 KR2017008354W WO2018101575A1 WO 2018101575 A1 WO2018101575 A1 WO 2018101575A1 KR 2017008354 W KR2017008354 W KR 2017008354W WO 2018101575 A1 WO2018101575 A1 WO 2018101575A1
Authority
WO
WIPO (PCT)
Prior art keywords
vulnerability
code
binary code
information
function
Prior art date
Application number
PCT/KR2017/008354
Other languages
English (en)
French (fr)
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 한국전력공사
Publication of WO2018101575A1 publication Critical patent/WO2018101575A1/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/577Assessing vulnerabilities and evaluating computer system security
    • 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

Definitions

  • the present invention relates to a binary code-based embedded software vulnerability analysis device and method thereof, and more specifically, to check the security vulnerability of the software of the embedded device by analyzing the vulnerability statically and dynamically after converting the binary code to the intermediate expression code analysis
  • the present invention relates to a binary code-based embedded software vulnerability analysis device and a method thereof.
  • security vulnerabilities in the information system refers to threats that illegal user access to the information system, threats that interfere with normal information system services, and the leakage, alteration, deletion, etc. of important data managed in the information system.
  • the security vulnerability of the conventional software can be detected as follows.
  • the binary-based known binary pattern comparison method scans a target binary and examines a pattern to detect and report a problem when a known binary pattern exists.
  • vaccine technology is exemplified.
  • Binary-based known binary pattern comparison method is difficult to analyze logical execution flows other than patterns, and thus, there is a limitation in vulnerability analysis because only binary vulnerability patterns known by existing binary scanners are used.
  • Legacy system embedded devices electronic electricity meters, remote metering, such as Feeder Remote Teminal Units (FRTUs), Supervision Control And Data Acquisition RTUs (SCADA RTUs)
  • FRTUs Feeder Remote Teminal Units
  • SCADA RTUs Supervision Control And Data Acquisition RTUs
  • DCUs data collection units
  • power IoT sensors have difficulty obtaining source code to detect security vulnerabilities in software. In this case, we have no choice but to analyze security vulnerabilities from binary code, which is an executable file, to detect software vulnerabilities.
  • An object of the present invention is to provide a binary code-based embedded software vulnerability analysis device and method for checking the security vulnerability of the software of the embedded device by analyzing the vulnerability by converting the binary code into the intermediate expression code and then analyzing the vulnerability statically and dynamically. It is.
  • Binary code-based embedded software vulnerability analysis device for checking whether it is possible to extract the architectural information from the binary code to the intermediate representation format;
  • An intermediate expression conversion unit for converting the binary code into an intermediate expression code according to the verification result;
  • An intermediate expression analyzer for extracting a function call graph and a control flow graph from the intermediate expression code to select a vulnerability analysis target function;
  • a static vulnerability analysis unit for generating a static vulnerability detection list by determining whether there is a security vulnerability corresponding to a Common Weakness Enumeration (CWE) vulnerability list for the vulnerability analysis target function;
  • a dynamic vulnerability analysis unit for generating a test case for a function having a vulnerability selected from the static vulnerability detection list and executing symbol performance.
  • the binary analyzer extracts and stores character string information and symbol information, which are binary type information, from the binary code.
  • the static vulnerability analysis unit may analyze the vulnerability analysis target function and identify an intermediate expression code of the same type as a previously known vulnerability information.
  • the binary code-based embedded software vulnerability analysis method the step of extracting the architectural information from the binary code to determine whether it can be converted to the intermediate representation format; Converting the binary code into an intermediate representation code according to the checking result; Selecting a function to be analyzed for vulnerability by extracting a function call graph and a control flow graph from the intermediate expression code; Generating a static vulnerability detection list by determining whether there is a security vulnerability corresponding to a Common Weakness Enumeration (CWE) vulnerability list for the vulnerability analysis target function; And generating a test case for a function having a vulnerability selected from the static vulnerability detection list and executing symbol performance.
  • CWE Common Weakness Enumeration
  • the abstract syntax tree is traversed to generate a function call graph and a control flow graph.
  • the present invention can check the security vulnerability of the software of the embedded device by analyzing the vulnerability by converting the binary code into the intermediate expression code and then analyzing the vulnerability statically and dynamically.
  • the present invention can detect a vulnerability from a binary that is an executable file of an embedded device without source code through binary-based vulnerability analysis.
  • FIG. 5 is a view showing a control flow graph utilizing a disassembly tool (IDA Pro),
  • the binary code-based embedded software vulnerability analysis device (hereinafter, referred to as “vulnerability analysis device” 100) according to an embodiment of the present invention is vulnerable through binary code that is an executable file rather than source code. Detect and analyze security vulnerabilities of embedded device software. That is, the vulnerability analysis apparatus 100 analyzes the security vulnerability from the binary code, which is an executable file, because it is difficult to secure source code to detect a security vulnerability for software of an embedded device in a legacy system, a commercial system, and the like.
  • the static vulnerability analysis unit 140 sequentially traverses the vulnerability analysis target function list to determine the intermediate expression code of the same type as the previously known vulnerability information.
  • the static vulnerability analysis unit 140 generates a static vulnerability detection list in which the identified vulnerability location and the identified vulnerability information are recorded according to the determination result.
  • strcmp string comparison function
  • strcmp function (1) is a function that compares two strings, and does not compare the length of the strings with the big ones, but rather the byte sizes from the first character.
  • the header of strcmp function (1) is 'string.h'.
  • strcmp function (1) is 'char * strcmp (const char * s1, const char * s2);'.
  • the argument 'char * s1' indicates the string to compare and the argument 'char * s2' indicates the string to compare.
  • Tables 1 and 2 show example codes in which the source code of FIG. 2 is converted to an intermediate representation through disassembly. That is, Tables 1 and 2 below show example codes obtained by converting the source code of FIG. 2 into a binary expression code, which is an executable file after being compiled. Here, Tables 1 and 2 below use the LLVM intermediate representation of the example code.
  • the intermediate expression analysis unit 130 analyzes a function call relationship for utilizing the intermediate expression code for static / dynamic analysis through the call relationship analysis of the binary to be analyzed and removes unnecessary analysis target information to extract a function for vulnerability analysis. . That is, the intermediate expression analysis unit 130 analyzes a function call relationship as shown in FIG. 3, removes unnecessary analysis target information 11 such as a system function, and selects a vulnerability analysis target function 12.
  • FIG. 4 is a diagram illustrating a control flow graph from an intermediate representation code
  • FIG. 5 is a diagram illustrating a control flow graph using an disassembly tool (IDA Pro). Table 3 below shows the source code used to represent the control flow graph of FIGS. 4 and 5.
  • code lines 3 to 6 declare declarations of variables used in functions or variables used in intermediate expression codes (ie i8, i32, etc.), alignment information (ie, align 8, align 4, etc.). (I.e.,% password.addr,% auth_flag) and store of initialization operations.
  • FIG. 6 is a diagram illustrating an example of static vulnerability analysis of an intermediate representation code.
  • '@ .Str' (31) on line 1 is a global constant declaration that represents the string 'brilling'00' (32) related to authentication.
  • '@strcmp' (33) is called.
  • the strcmp function is a function with a vulnerability. Also, the strcmp function is executed by taking the global constant '@ .str' (35) and the '% 0' register 36 as arguments.
  • the checking whether the buffer overflow vulnerability occurs for the two factors is performed through the dynamic vulnerability analysis by the dynamic vulnerability analysis unit 150.
  • FIG. 7 is a diagram illustrating a detailed configuration of the dynamic vulnerability analysis unit.
  • Steps S210 to S213 are performed by the dynamic vulnerability analysis unit 150 of the vulnerability analysis apparatus 100.

Landscapes

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

Abstract

본 발명은 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법에 관한 것으로, 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치는, 바이너리 코드로부터 아키텍처 정보를 추출하여 중간 표현 형식으로 변환 가능한지를 확인하기 위한 바이너리 분석부; 상기 확인 결과에 따라, 상기 바이너리 코드를 중간 표현 코드로 변환하기 위한 중간 표현 변환부; 상기 중간 표현 코드로부터 함수 호출 그래프와 제어 흐름 그래프를 추출하여 취약점 분석대상 함수를 선별하기 위한 중간 표현 분석부; 상기 취약점 분석대상 함수에 대해, CWE(Common Weakness Enumeration) 취약점 목록에 해당되는 보안 취약점이 있는지를 판단하여 정적 취약점 검출 목록을 생성하기 위한 정적 취약점 분석부; 및 상기 정적 취약점 검출 목록으로부터 선별된 취약점을 갖는 함수에 대해 테스트 케이스를 생성하여 기호 수행을 실행하기 위한 동적 취약점 분석부;를 포함한다.

Description

바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법
본 발명은 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법에 관한 것으로, 구체적으로는 바이너리 코드를 중간 표현 코드로 변환하여 분석한 후 정적 및 동적으로 취약점을 분석함으로써 임베디드 기기의 소프트웨어의 보안 취약점을 점검하기 위한, 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법에 관한 것이다.
최근에는 보안에 취약한 소프트웨어를 사용함으로 인해 해킹과 같은 사이버 공격에 노출되는 사례가 증가하고 있다. 이에, 소프트웨어 개발자들은 소프트웨어 개발단계에서부터 보안 취약점(vulnerability)을 줄이기 위한 다양한 연구들을 진행하고 있다. 이처럼 소프트웨어의 보안 취약점을 줄이는 것에 관한 중요성이 커지고 있다. 여기서, 정보시스템에서의 보안 취약점이란 정보시스템에 불법적인 사용자의 접근, 정상적인 정보시스템 서비스를 방해하는 위협, 그리고 정보시스템에서 관리되는 중요 데이터의 유출, 변조, 삭제 등에 대한 위협을 말한다.
일반적으로, 주요 정보통신기반시설 관리기관에서는 정보시스템에서의 비즈니스를 위협하는 소프트웨어의 취약점을 분석 및 관리하며 중대 위협의 발생시 이에 즉각 대응이 가능토록 하는 보안 취약점 관리 프로세스를 운영중에 있다.
최근 스마트그리드와 전력 IoT(Internet of Things)와 같이 전력설비가 점차 지능화됨에 따라, 전력산업 부분에서도 정보수집과 제어에 필요한 임베디드 기기(embeded device)가 전력계통 운영 네트워크에 연결되고 있다. 그런데, 임베디드 기기는 보안에 취약한 소프트웨어를 사용하는 경우에, 사이버 공격 위협에 노출되기 쉽다. 이에 따라, 전력산업 관리기관은 임베디드 기기에 사용되는 소프트웨어에 대한 보안 취약점을 분석 및 관리하여 중대 위협에 대한 대응 프로세스를 마련할 필요가 있다.
종래의 소프트웨어의 보안 취약점을 검출할 수 있는 방식에는 다음과 같다.
먼저, 소스코드 기반의 코딩 규칙 검사 방식은 대상이 되는 임베디드 기기 소프트웨어의 소스코드를 확보하고, 소스코드 상에 존재하는 보안 취약점과 관련이 있는 문제점들을 검출하는 방식이다. 소프트웨어의 보안 취약점은 개발단계에서 취약점을 줄이는 것이 가장 효과적이다. 하지만, 소스코드 기반의 코딩 규칙 검사 방식은 소스코드가 필수적으로 확보되어야 한다. 레거시 시스템(legacy system), 상용 시스템 등의 경우에는 소프트웨어의 소스코드를 확보할 수 없는 상황이거나, 개발 회사로부터 제공되지 않는다. 따라서, 이 경우에는 실행 파일인 바이너리 코드를 시중에 나와 있는 'IDA Pro'와 같은 바이너리 리버싱(binary reversing) 도구를 이용하여 소스코드로 리버싱한 후, 해당 소스코드에 대한 소프트웨어의 보안 취약점을 분석 및 검출해야 한다. 그런데, 이 경우에는 정부기관이나 보안업체가 보안에 취약한 부분을 발견하기 전까지 사전에 보안 패치를 요구할 수 없기 때문에 해당 디바이스에 대한 보안 사고가 발생하기 전까지는 소프트웨어의 보안 취약점에 대해 보안대책 수립 자체가 불가능하다.
다음으로, 바이너리 기반의 알려진 바이너리 패턴 비교 방식은 대상이 되는 바이너리를 스캔하고 패턴을 검사하여 알려진 형태의 바이너리 패턴이 존재하는 경우 문제점으로 발견하고 보고하는 방식이다. 대표적으로 백신 기술을 예로 들 수 있다. 바이너리 기반의 알려진 바이너리 패턴 비교 방식은 패턴 이외의 논리적인 수행 흐름 분석이 어려워 기존 바이너리 스캐너로는 알려진 바이너리 취약 패턴만 사용됨으로써 취약점 분석에 한계가 있다.
다음으로, 사람에 의한 바이너리 직접 분석 방식은 대상이 되는 임베디드 기기 소프트웨어의 바이너리 코드를 보안 전문인력이 IDA Pro와 같은 바이너리 리버싱 도구를 통해 직접 확인하고 문제가 되는 부분을 찾아내는 방식이다.
마지막으로, '모의침투 시험을 통한 동적 블랙박스 테스팅 방식'은 대상이 되는 임베디드 기기가 실제로 구동하는 환경 하에서 정해진 침입 방법들을 시도하여 문제점 유무를 확인하는 방식이다. 모의침투 시험을 통한 동적 블랙박스 테스팅 방식은 실제 구동과 유사한 구동환경이 필요함은 물론, 실행 시나리오를 기반으로 하기 때문에, 시나리오 이외에 존재하는 보안 취약점을 검출하는데는 제한적이라는 한계를 가진다.
한편, 배전자동화 현장 단말장치(Feeder Remote Teminal Unit: FRTU), 원격 감시 제어 단말장치(Supervision Control And Data Acquisition RTU : SCADA RTU)와 같은 레거시 시스템 임베디드 디바이스(legacy system embeded device), 전자식 전력량계, 원격검침 데이터수집장치(DCU)와 같은 상용 임베디드 기기, 전력 IoT 센서는, 소프트웨어의 보안 취약점을 발견하기 위한 소스코드를 확보하기 어렵다. 이 경우에는 소프트웨어의 취약점을 발견하기 위해 실행파일인 바이너리 코드(binary code)로부터 보안 취약점을 분석할 수밖에 없다.
종래에는 바이너리 코드 스캐너를 이용하여 알려진 악성 행위에 대한 바이너리 코드를 매칭하는 방법을 취하고 있다. 하지만, 임베디드 기기는 특성상 다양한 아키텍처가 존재하고 그에 따라 서로 다른 하드웨어 의존적인 명령어 코드 체계를 가진다. 따라서, 임베디드 기기는 종래의 바이너리 코드 스캐너를 이용하는 경우에, 서로 다른 아키텍처 별로 바이너리를 스캔하고 매칭하는 방법을 확보해야 한다.
또한, 바이너리 코드로부터 보안 취약점을 분석하기 위해서는 전문 인력이 필요하다. 즉, 일반인들은 바이너리 코드에 대한 이해가 부족하며, 검사하고자 하는 아키텍처들을 모두 이해하고 분석할 수 없다. 설사 전문 인력을 확보하더라도 수작업으로 바이너리 파일별 보안 취약점을 검출하기 때문에 상당한 소요 시간과 작업 비용이 필요하다.
본 발명의 목적은 바이너리 코드를 중간 표현 코드로 변환하여 분석한 후 정적 및 동적으로 취약점을 분석함으로써 임베디드 기기의 소프트웨어의 보안 취약점을 점검하기 위한, 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법을 제공하는데 있다.
또한, 본 발명의 목적은 바이너리에서 발생 가능한 취약점을 검출하고, 이 중 발생 가능성에 대한 추가적인 판단 정보를 더하는 정적 및 동적 복합 분석을 통해 취약점 검출의 정밀도를 향상시키는데 있다.
본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치는, 바이너리 코드로부터 아키텍처 정보를 추출하여 중간 표현 형식으로 변환 가능한지를 확인하기 위한 바이너리 분석부; 상기 확인 결과에 따라, 상기 바이너리 코드를 중간 표현 코드로 변환하기 위한 중간 표현 변환부; 상기 중간 표현 코드로부터 함수 호출 그래프와 제어 흐름 그래프를 추출하여 취약점 분석대상 함수를 선별하기 위한 중간 표현 분석부; 상기 취약점 분석대상 함수에 대해, CWE(Common Weakness Enumeration) 취약점 목록에 해당되는 보안 취약점이 있는지를 판단하여 정적 취약점 검출 목록을 생성하기 위한 정적 취약점 분석부; 및 상기 정적 취약점 검출 목록으로부터 선별된 취약점을 갖는 함수에 대해 테스트 케이스를 생성하여 기호 수행을 실행하기 위한 동적 취약점 분석부;를 포함한다.
상기 바이너리 분석부는, 상기 바이너리 코드로부터 바이너리 유형 정보인 문자열 정보와 심볼 정보를 추출하여 저장하는 것을 특징으로 한다.
상기 중간 표현 변환부는, 상기 바이너리 코드에 대해 디스어셈블 과정을 거쳐 디스어셈블 코드를 생성한 후, 상기 디스어셈블 코드에 대응되는 상기 중간 표현 코드으로 변환하는 것을 특징으로 한다.
상기 중간 표현 분석부는, 상기 중간 표현 코드를 파싱하여 추상 구문 트리를 생성한 후, 상기 추상 구문 트리를 순회하여 함수 호출 그래프와 제어 흐름 그래프를 생성하는 것을 특징으로 한다.
상기 중간 표현 분석부는, 함수 호출 그래프와 제어 흐름 그래프의 분석을 통해 보안 취약점 분석이 불필요한 함수목록을 제외하여 상기 취약점 분석대상 함수를 선별하는 것을 특징으로 한다.
상기 정적 취약점 분석부는, 상기 취약점 분석대상 함수를 분석하여 이전에 알려진 형태의 취약점 정보와 동일한 유형의 중간 표현 코드를 확인하는 것을 특징으로 한다.
상기 정적 취약점 검출 목록은, 취약점 위치와 취약점 정보가 기록된 것을 특징으로 한다.
상기 동적 취약점 분석부는, 상기 정적 취약점 검출 목록으로부터 선별된 취약점을 가지는 함수의 인자정보, 분기정보, 호출 관계 정보를 분석하는 것을 특징으로 한다.
또한, 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법은, 바이너리 코드로부터 아키텍처 정보를 추출하여 중간 표현 형식으로 변환 가능한지를 확인하는 단계; 상기 확인 결과에 따라, 상기 바이너리 코드를 중간 표현 코드로 변환하는 단계; 상기 중간 표현 코드로부터 함수 호출 그래프와 제어 흐름 그래프를 추출하여 취약점 분석대상 함수를 선별하는 단계; 상기 취약점 분석대상 함수에 대해, CWE(Common Weakness Enumeration) 취약점 목록에 해당되는 보안 취약점이 있는지를 판단하여 정적 취약점 검출 목록을 생성하는 단계; 및 상기 정적 취약점 검출 목록으로부터 선별된 취약점을 갖는 함수에 대해 테스트 케이스를 생성하여 기호 수행을 실행하는 단계;를 포함한다.
상기 정적 취약점 검출 목록의 분석결과와 상기 기호 수행이 실행된 결과를 종합하여 발생 가능한 취약점을 검출하는 단계;를 더 포함한다.
상기 검출 단계 이후에, 상기 검출 결과에 따라 보안 위협에 대응하는 보안 취약점 관리 프로세스를 운영하는 단계;를 더 포함한다.
상기 확인 단계는, 상기 바이너리 코드로부터 바이너리 유형 정보인 문자열 정보와 심볼 정보를 추출하여 저장하는 것을 특징으로 한다.
상기 변환 단계는, 상기 바이너리 코드에 대해 디스어셈블 과정을 거쳐 디스어셈블 코드를 생성한 후, 상기 디스어셈블 코드에 대응되는 상기 중간 표현 코드으로 변환하는 것을 특징으로 한다.
상기 선별 단계는, 상기 중간 표현 코드를 파싱하여 추상 구문 트리를 생성한 후, 상기 추상 구문 트리를 순회하여 함수 호출 그래프와 제어 흐름 그래프를 생성하는 것을 특징으로 한다.
상기 선별 단계는, 함수 호출 그래프와 제어 흐름 그래프의 분석을 통해 보안 취약점 분석이 불필요한 함수목록을 제외하여 상기 취약점 분석대상 함수를 선별하는 것을 특징으로 한다.
상기 생성 단계는, 상기 취약점 분석대상 함수를 분석하여 이전에 알려진 형태의 취약점 정보와 동일한 유형의 중간 표현 코드를 확인하는 것을 특징으로 한다.
상기 실행 단계는, 상기 정적 취약점 검출 목록으로부터 선별된 취약점을 가지는 함수의 인자정보, 분기정보, 호출 관계 정보를 분석하는 것을 특징으로 한다.
본 발명은 바이너리 코드를 중간 표현 코드로 변환하여 분석한 후 정적 및 동적으로 취약점을 분석함으로써 임베디드 기기의 소프트웨어의 보안 취약점을 점검할 수 있다.
또한, 본 발명은 바이너리 기반의 취약점 분석을 통해 소스 코드 없이 임베디드 기기의 실행 파일인 바이너리로부터 취약점을 검출할 수 있다.
또한, 본 발명은 전력설비(RTU, FRTU)와 전력 IoT 센서와 같은 임베디드 기기에 대한 보안 취약성을 점검할 수 있다.
또한, 본 발명은 바이너리에서 발생 가능한 취약점을 검출하고, 이 중 발생 가능성에 대한 추가적인 판단 정보를 더하는 정적 및 동적 복합 분석을 통해 취약점 검출의 정밀도를 향상시킬 수 있다.
또한, 본 발명은 중간 표현 변환에 대해서 지속적인 대응이 필요하며, 중간 표현 기반의 방법이 바이너리 코드 스캔 방법에 비해 지속적으로 요구되는 비용을 최소화할 수 있다.
도 1은 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치에 대한 도면,
도 2는 상기 도 1의 취약점 분석 장치에서 취약점 분석을 설명하기 위한 소스코드의 예시를 나타낸 도면,
도 3은 상기 표 1 및 2의 중간 표현 코드로부터 함수 호출 그래프를 분석한 예시를 나타낸 도면,
도 4는 중간 표현 코드로부터 제어 흐름 그래프를 나타낸 도면,
도 5는 디스어셈블 도구(IDA Pro)를 활용한 제어 흐름 그래프를 나타낸 도면,
도 6은 중간 표현 코드의 정적 취약성 분석 예시를 나타낸 도면,
도 7은 동적 취약점 분석부의 상세 구성을 나타낸 도면,
도 8은 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법에 대한 도면이다.
본 발명을 충분히 이해하기 위해서 본 발명의 바람직한 실시예를 첨부 도면을 참조하여 설명한다. 본 발명의 실시예는 여러 가지 형태로 변형될 수 있으며, 본 발명의 범위가 아래에서 상세히 설명하는 실시예로 한정되는 것으로 해석되어서는 안 된다. 본 실시예는 당업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위해서 제공 되어지는 것이다. 따라서 도면에서의 요소의 형상 등은 보다 명확한 설명을 강조하기 위해서 과장되어 표현될 수 있다. 각 도면에서 동일한 부재는 동일한 참조부호로 도시한 경우가 있음을 유의하여야 한다. 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 공지 기능 및 구성에 대한 상세한 기술은 생략된다.
도 1은 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치에 대한 도면이다.
도 1에 도시된 바와 같이, 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치(이하 "취약점 분석 장치"라 함, 100)는, 소스코드가 아닌 실행파일인 바이너리 코드를 통해 취약점을 검출하여 임베디드 기기 소프트웨어의 보안 취약점을 분석하여 발견한다. 즉, 취약점 분석 장치(100)는 레거시 시스템, 상용 시스템 등에서 임베디드 기기의 소프트웨어에 대한 보안 취약점을 검출하기 위해 소스코드를 확보하기 어렵기 때문에, 실행파일인 바이너리 코드로부터 보안 취약점을 분석한다.
이를 위해, 취약점 분석 장치(100)는 바이너리 분석부(110), 중간 표현 변환부(120), 중간 표현 분석부(130), 정적 취약점 분석부(140), 동적 취약점 분석부(150)를 포함한다. 부가적으로, 취약점 관리부(미도시)는 취약점 분석 장치(100)에 의해 분석된 취약점 분석 결과를 토대로, 중대 위협의 발생시 이에 즉각 대응이 가능토록 하는 보안 취약점 관리 프로세스를 운영한다.
바이너리 분석부(110)는 분석 대상인 바이너리 코드로부터 임베디드 기기의 아키텍처(architecture) 정보를 추출하여 중간 표현 형식(Intermediate Representation)으로의 변환 작업이 가능한지를 확인한다. 여기서, 바이너리 분석부(110)는 바이너리 코드가 중간 표현 형식으로의 변환 작업이 가능한 경우에 바이너리 유형 정보(즉, 문자열 정보, 심볼 정보 등)를 추가로 추출한다. 바이너리 분석부(110)는 아키텍처 정보, 문자열 정보, 심볼 정보를 저장하여 관리한다.
중간 표현 변환부(120)는 분석 대상인 바이너리 코드에 대해, 디스어셈블(disassemble) 과정을 거쳐 중간 표현으로 변환하는 작업을 수행한다. 구체적으로, 중간 표현 변환부(120)는 바이너리 코드에 대해 디스어셈블 과정을 수행하여 디스어셈블 코드 정보를 생성한다. 이후, 중간 표현 변환부(120)는 디스어셈블 코드 정보에 대해 변환 가능한 중간 표현을 검색하고, 디스어셈블 코드 정보를 대응되는 중간 표현으로 변환한다. 이로써, 중간 표현 변환부(120)는 분석 대상인 바이너리 코드의 중간 표현을 생성한다.
중간 표현 분석부(130)는 변환된 중간 표현을 이용하여 소스코드에 준하는 논리적 분석을 수행한다. 즉, 중간 표현 분석부(130)는 변환된 중간 표현을 기반으로 후술할 정적 취약점 분석부(140)와 동적 취약점 분석부(150)의 취약점 분석 과정에 필요한 공용정보로서, 함수 호출 그래프(Fucntion Call Graph), 제어 흐름 그래프(Control Flow Graph: CFG) 및 함수목록을 추출한다. 여기서, 중간 표현 분석부(130)는 추출된 함수목록 중 함수호출 관계정보를 분석하여 취약점 분석대상 함수목록을 선별한다. 구체적으로, 중간 표현 분석부(130)는 변환된 중간 표현을 파싱(parsing)하여 추상 구문 트리(Abstract Syntax Tree: AST)를 생성한다. 그리고, 중간 표현 분석부(130)는 추상 구문 트리의 각 노드를 순회(traversal)하여 함수 호출 그래프와 제어 흐름 그래프를 생성한다. 이 경우, 중간 표현 분석부(130)는 추상 구문 트리의 노드들을 순회할 때, 전위 순회, 중위 순회, 후위 순회 등과 같이 어느 하나의 순회 방식을 이용할 수 있다.
또한, 중간 표현 분석부(130)는 함수 호출 그래프와 제어 흐름 그래프를 분석하고, 이를 통해 보안 취약점 분석이 불필요한 함수목록을 제외하여 취약점 분석대상 함수목록을 생성한다.
정적 취약점 분석부(140)는 취약점 분석대상 함수목록을 순차적으로 순회하여 이전에 알려진 형태의 취약점 정보와 동일한 유형의 중간 표현 코드를 판단한다. 그리고, 정적 취약점 분석부(140)는 판단 결과에 따라 확인된 취약점 위치와 확인된 취약점 정보가 기록된 정적 취약점 검출 목록을 생성한다.
구체적으로, 정적 취약점 분석부(140)는 취약점 분석대상 함수의 함수 호출 관계를 분석하여 함수 호출 관계 정보를 수집하고, 취약점 분석대상 함수의 제어 흐름 그래프를 분석하여 로직 흐름 정보를 수집한다. 정적 취약점 분석부(140)는 취약점 분석대상 함수에 대해, 정적 취약점 검출을 위한 CWE(Common Weakness Enumeration) 취약점 목록에서 동일한 유형의 보안 취약점이 있는지를 판단한다. 이를 통해, 정적 취약점 분석부(140)는 정적 취약점 검출 목록을 생성한다.
동적 취약점 분석부(150)는 취약점 분석대상 함수들을 순차적으로 순회하고, 기호 수행(symbolic execution)이 가능한 함수를 판단하여 해당 함수에 대한 기호 수행을 실시한다. 동적 취약점 분석부(150)는 기호 수행된 함수들의 수행 흐름 정보를 기록한다.
구체적으로, 동적 취약점 분석부(150)는 정적 취약점 검출 목록으로부터 취약점을 가지는 함수를 선별하고, 이들의 인자정보, 분기정보, 호출 관계 정보를 분석한다. 그리고, 동적 취약점 분석부(150)는 분석된 정보를 바탕으로 취약점을 가지는 함수들에 대한 테스트 케이스를 생성한다. 동적 취약점 분석부(150)는 테스트 케이스들의 기호 수행을 실행한다.
정적 및 동적 취약점 분석부(140,150)는 중간 표현 분석을 진행하여 알려진 보안 취약점인 CWE 항목들로부터 임베디드 소프트웨어에서 발생할 가능성이 있는 항목(즉, 함수, 변수)들을 선별하기 위하여, 정적 취약점 분석과 동적 취약점 분석을 복합적으로 사용하여 취약점 검출의 폭과 정밀도를 향상시킬 수 있다. 이는 단일 취약점 검출 방법에 비해 검출할 수 있는 범위를 넓혀 주고, 검출된 취약점에 대해 동적 기호 수행에 따른 발생 가능성 가산을 통해 좀 더 신뢰도 높은 취약점 검출 정보를 제공할 수 있기 때문이다.
이와 같이, 취약점 분석 장치(100)는 일련의 수행 흐름이 완료되면 정적 취약점에서 검출된 취약점 정보와 수행 흐름 정보 종합하여 취약점의 발생 가능성을 판별하여 발생 가능하다고 여겨지는 취약점만을 선별한다. 취약점 분석 장치(100)는 이러한 과정을 통해 바이너리에서 발생 가능한 취약점을 검출하고, 이 중 발생 가능성에 대한 추가적인 판단 정보를 더하는 정적 및 동적 복합 분석을 통해 취약점 검출의 정밀도를 높일 수 있다.
전술한 바와 같이, 취약점 분석 장치(100)는 바이너리 기반의 취약점 분석을 통해 소스 코드 없이 임베디드 기기의 실행 파일인 바이너리로부터 취약점 검출이 가능하다. 즉, 취약점 분석 장치(100)는 임베디드 기기의 취약점 검출의 한계를 극복하기 위해 중간 표현 기반의 범용적인 바이너리 기반으로 취약점 분석을 가능하게 한다. 이를 통해, 취약점 분석 장치(100)는 전력설비(RTU, FRTU)와 전력 IoT 센서와 같은 임베디드 기기에 대한 보안 취약성을 점검할 수 있다.
도 2는 상기 도 1의 취약점 분석 장치에서 취약점 분석을 설명하기 위한 소스코드의 예시를 나타낸 도면이다.
도 2의 소스코드는 소프트웨어 취약점 분석을 설명하기 위한 예시코드로서, 다음 2가지 취약점을 가진 소스코드를 제시하였다.
첫번째 취약점은 문자열 길이를 고려하지 않는 문자열 비교함수(strcmp)를 사용함에 따른 취약점이다. 여기서, strcmp 함수(1)는 2개의 문자열을 비교하는 함수이며, 문자열의 길이가 크고 작음을 비교하는 것이 아니라, 첫번째 문자부터 차례로 바이트의 크기를 비교한다. strcmp 함수(1)의 헤더는 'string.h'이다. strcmp 함수(1)의 형태는 'char* strcmp(const char* s1, const char* s2);'이다. 인수 'char* s1'는 비교할 대상 문자열을 나타내고, 인수 'char* s2'는 비교할 문자열을 나타낸다. 이러한 strcmp 함수(1)는 버퍼 오버플로우(buffer overflow)라는 취약점을 가지며, 인자로 받는 정보에 대해 메모리 크기를 비교하지 않음으로써 다른 영역의 메모리를 침범하여 프로그램의 오동작 및 루트 권한 탈취 등의 취약점을 가지는 함수이다. 여기서, 버퍼 오버플로우는 메모리 오류를 이용해 타겟 프로그램의 실행흐름을 제어하고 최종적으로는 공격자가 원하는 임의의 코드를 실행하는 것을 말한다. 따라서, strcmp 함수(1)는 취약점이 있기 때문에, strncmp 함수로 대체하는 것이 바람직하다.
두번째 취약점은 패스워드(brilling)(2)가 하드 코딩되어 노출되는 취약점이다. 패스워드를 하드 코딩하는 경우에는 관리자 비밀번호가 노출되거나, 주기적인 관리자 변경 등 수정이 용이하지 않은 약점이 있다.
한편, 하기 표 1 및 2는 상기 도 2의 소스코드가 디스어셈블을 통해 중간 표현으로 변환된 예시코드를 나타낸다. 즉, 하기 표 1 및 2는 도 2의 소스코드가 컴파일된 후 실행파일인 바이너리 코드로 변환된 것을 중간 표현 코드로 변환한 예시코드를 나타낸다. 여기서, 하기 표 1 및 2는 예시코드는 LLVM 중간 표현을 사용한다.
1. ; ModuleID = 'test.c'2. target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"3. target triple = "x86_64-apple-macosx10.11.0"4.5. @.str = private unnamed_addr constant [9 x i8] c"brilling\00", align 16. @.str1 = private unnamed_addr constant [8 x i8] c"Access\0A\00", align 17. @.str2 = private unnamed_addr constant [6 x i8] c"Deny\0A\00", align 18.9. ; Function Attrs: nounwind uwtable10.define i32 @check_auth(i8* %password) #0 {11.entry:12. %password.addr = alloca i8*, align 813. %auth_flag = alloca i32, align 414. store i8* %password, i8** %password.addr, align 815. store i32 0, i32* %auth_flag, align 416. %0 = load i8** %password.addr, align 817. %call = call i32 @strcmp(i8* %0, i8* getelementptr inbounds ([9 x i8]* @.str,i320, i32 0))18. %cmp = icmp eq i32 %call, 019. br i1 %cmp, label %if.then, label %if.end20.21.if.then: ;preds = %entry22. store i32 1, i32* %auth_flag, align 423. br label %if.end24.25.if.end: ;preds = %if.then, %entry26. %1 = load i32* %auth_flag, align 427. ret i32 %128.}29.30.declare i32 @strcmp(i8*, i8*) #131.32.; Function Attrs: nounwind uwtable33.define i32 @main(i32 %argc, i8** %argv) #0 {34.entry:35. %retval = alloca i32, align 436. %argc.addr = alloca i32, align 437. %argv.addr = alloca i8**,align 838. store i32 0, i32* %retval39. store i32 %argc, i32* %argc.addr, align 440. store i8** %argv, i8*** %argv.addr, align 841. %0 = load i32* %argc.addr, align 442. %cmp = icmp slt i32 %0, 243. br i1 %cmp, label %if.then, label %if.end44.45.if.then: ;preds = %entry46. store i32 -1, i32* %retval47. br label %return48.
49.if.end: ;preds = %entry50. %1 = load i8*** %argv.addr, align 851. %arrayidx = getelementptr inbounds i8** %1, i64 152. %2 = load i8** %arrayidx, align 853. %call = call i32 @check_auth(i8* %2)54. %tobool = icmp ne i32 %call, 055. br i1 %tobool, label %if.then1, label %if.else56.57.if.then1: ;preds = %if.end58. %call2 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([8 x i8]*@.str1, i32 0, i32 0))59. br label %if.end460.61.if.else: ;preds = %if.end62. %call3 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([6 x i8]*@.str2, i32 0, i32 0))63. br label %if.end464.65.if.end4: ;preds = %if.else, %if.then166. store i32 0, i32* %retval67. br label %return68.69.return: ;preds = %if.end4, %if.then70. %3 = load i32* %retval71. ret i32 %372.}73.74.declare i32 @printf(i8*, ...) #175.76.attributes #0 = { nounwind uwtable "less-precise-fpmad"="false""no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf""no-infs-fp-math"="false" "no-nans-fp-math"="false""stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false"}77.attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="true""no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false""no-nans-fp-math"="false" "stack-protector-buffer-size"="8""unsafe-fp-math"="false" "use-soft-float"="false" }78.79.!llvm.module.flags = !{!0}80.!llvm.ident = !{!1}81.82.!0 = !{i32 1, !"PIC Level", i32 2}83.!1 = !{!"clang version 3.6.2 (https://github.com/llvm-mirror/clangc2e93b903ffee0e691757284c53e5f81615bdc55) (https://github.com/llvm-mirror/llvm19ade095e8c3ea61f84b71074433309f0c7c7b3b)"}
도 3은 상기 표 1 및 2의 중간 표현 코드로부터 함수 호출 그래프를 분석한 예시를 나타낸 도면이다.
중간 표현 분석부(130)는 중간 표현 코드를 분석대상인 바이너리의 호출 관계 분석을 통해 정적/동적 분석에 활용하기 위한 함수 호출 관계를 분석하고, 불필요한 분석 대상 정보를 제거하여 취약점 분석대상 함수를 추출한다. 즉, 중간 표현 분석부(130)는 도 3과 같이 함수 호출 관계를 분석하여, 시스템 함수 등 불필요한 분석대상 정보(11)를 제거하고, 취약점 분석대상 함수(12)를 선별한다.
도 4는 중간 표현 코드로부터 제어 흐름 그래프를 나타낸 도면이고, 도 5는 디스어셈블 도구(IDA Pro)를 활용한 제어 흐름 그래프를 나타낸 도면이다. 하기 표 3은 상기 도 4 및 도 5의 제어 흐름 그래프를 표현하기 위해 사용된 소스코드를 나타낸다.
1. int check_auth(char *password) {2. int auth_flag=0;3.4. if(strcmp(password, "brilling") == 0)5. auth_flag = 1;6.7. return auth_flag;8. }
중간 표현 분석부(130)는 표 3의 소스코드로부터 변환된 중간 표현 코드에서 도 4에 도시된 바와 같은 제어 흐름 그래프를 추출할 수 있다. 즉, 중간 표현 분석부(130)는 중간 표현 코드로부터 취약점 분석대상 함수의 제어 흐름 그래프를 생성한다. 도 4에서는 'check_auth' 함수에 대한 제어 흐름 그래프를 생성한 경우에 대한 예를 나타낸다. 이와 같이, 중간 표현 분석부(130)는 취약점 분석대상 함수 내에서의 프로그램이 실행 중에 횡단할 수 있는 모든 경로에 대한 수행 흐름을 파악하여 제공할 수 있다.
도 4 및 도 5에 도시된 바와 같이, 중간 표현 분석부(130)에 의해 생성된 제어 흐름 그래프(도 4 참조)는, 바이너리를 리버싱 도구인 IDA Pro를 사용하여 전문 인력이 분석한 제어 흐름 그래프(도 5 참조)와 비교할 때 동일한 흐름을 표현하고 있음을 알 수 있다. 이처럼 중간 표현 코드를 이용한 제어 흐름 그래프는 종래의 바이너리 리버싱을 통한 취약점 분석정보로 활용이 가능하다.
1. define i32 @check_auth(i8* %password) #0 {2. entry:3. %password.addr = alloca i8*, align 84. %auth_flag = alloca i32, align 45. store i8* %password, i8** %password.addr, align 86. store i32 0, i32* %auth_flag, align 47. %0 = load i8** %password.addr, align 88. %call = call i32 @strcmp(i8* %0, i8* getelementptr inbounds ([9 x i8]* @.str, i320, i32 0))9. %cmp = icmp eq i32 %call, 010. br i1 %cmp, label %if.then, label %if.end11.12.if.then: ;preds = %entry13. store i32 1, i32* %auth_flag, align 414. br label %if.end15.16.if.end: ;preds = %if.then, %entry17. %1 = load i32* %auth_flag, align 418. ret i32 %119.}
표 4는 취약점 분석 대상이 되는 함수의 중간 표현 코드를 나타낸다. 중간 표현 분석부(130)는 표 4와 같은 중간 표현 코드에서 취약점 분석대상 함수를 선별한다. 구체적으로, 중간 표현 분석부(130)는 함수 호출 그래프와 제어 흐름 그래프를 바탕으로 불필요한 분석대상들을 제거하여 취약점 분석대상 함수들을 선별한다. 즉, 중간 표현 분석부(130)는 전체 중간 표현 코드 중 불필요한 분석대상들을 제거한 후, 나머지를 취약점 분석대상 함수로 선별한다.
표 4의 중간 표현 코드에 대해 설명하면 아래와 같다.
먼저, 코드라인 3번 내지 6번은 함수 내에서 사용하는 변수 또는 중간표현 코드에서 사용하는 변수들의 타입(즉, i8, i32 등), 얼라인 정보(즉, align 8, align 4 등) 등에 대한 선언(즉, %password.addr, %auth_flag) 및 초기화 작업의 수행(store)을 나타낸다.
또한, 코드라인 7번 내지 19번은 실제 문자열 비교 함수 호출과 그 결과에 따른 조건 분기를 나타낸다.
구체적으로, 코드라인 7번은 패스워드(password)의 값을 '%0' 레지스터에 로드하는 것을 나타낸다. 여기서, load 명령은 해당 변수가 가리키는 주소의 값을 읽어오는 명령이다. 코드라인 8번은 문자열 비교 함수(strcmp)를 호출하는 것을 나타내며, 반환값을 '%call'에 입력하는 것을 나타낸다. 코드라인 9번은 '%call'와 상수 '0'의 값에 대한 비교 결과를 '%cmp'에 입력하는 것을 나타낸다. 여기서, icmp 명령은 비교 명령으로 조건이 'eq(즉, equal)'이다. 즉, '%call'와 상수 '0'의 값이 같을 경우 1, 아닌 경우 0을 '%cmp'에 입력된다. 코드라인 10번 내지 19번은 '%cmp'의 입력값에 따라 분기 명령을 수행한다. 여기서, br 명령은 분기 명령으로 위에서 입력받은 %cmp의 입력값에 따라 분기를 수행한다. 즉, %cmp의 입력값이 '1'인 경우 'label %if.then'으로 분기되고, 아닌 경우에 'label %if.end'로 분기된다.
도 6은 중간 표현 코드의 정적 취약성 분석 예시를 나타낸 도면이다.
정적 취약점 분석부(140)는 중간 표현 분석부(130)를 통해 선별된 대상 중간 표현 코드에 대하여 정적 취약점을 분석한다. 즉, 정적 취약점 분석부(140)는 중간 표현 분석부(130)를 통해 선별된 취약점 분석대상 함수에 대해, 정적 취약점 검출을 위한 CWE(Common Weakness Enumeration) 취약점 목록에서 동일한 유형의 보안 취약점이 있는지를 판단한다.
코드라인 1번의 '@.str'(31)은 전역 상수 선언으로 인증에 관련된 문자열 'brilling\00'(32)을 나타낸다. 코드라인 13번에서는 '@strcmp'(33)를 호출하고 있다. strcmp 함수는 취약점을 가지는 함수이다. 또한, strcmp 함수는 전역 상수 '@.str'(35)와 '%0' 레지스터(36)를 인자로 받아 수행된다. 여기서, 두 인자에 대한 버퍼 오버플로우 취약점이 발생하는지에 대한 확인은 동적 취약점 분석부(150)에 의한 동적 취약점 분석을 통해 수행된다.
도 7은 동적 취약점 분석부의 상세 구성을 나타낸 도면이다.
동적 취약점 분석부(150)는 취약점 함수 분석부(151), 기호 수행 테스트 생성부(152), 기호수행부(153), 기호 수행 결과 분석부(154)를 포함한다. 취약점 함수 분석부(151)는 기호 수행을 위한 테스트 케이스 생성을 위해 정적 취약점 분석부(140)로부터 정적 취약점 분석 결과를 입력받는다. 취약점 함수 분석부(151)는 정적 취약점 분석 결과로부터 취약점을 가지는 함수에 대한 분석을 수행한다. 기호 수행 테스트 생성부(152)는 대상 함수의 인자 정보, 분기 정보, 호출 관계 정보를 분석하여 기호 수행 테스트 케이스를 생성한다. 기호 수행부(153)는 생성된 기호 수행 테스트 케이스 정보를 이용하여 기호 수행(symbolic execution)을 실행한다. 기호 수행 결과 분석부(154)는 수행된 수행 결과를 분석하여 취약점을 가지는 정보에 대해 결과 분석을 수행하고 보고한다.
도 8은 본 발명의 일실시예에 따른 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법에 대한 도면이다.
취약점 분석 장치(100)는 분석 대상인 바이너리 코드로부터 임베디드 기기의 아키텍처 정보를 추출하여 중간 표현 형식으로의 변환 작업이 가능한지를 확인한다(S201,S202). 이때, 취약점 분석 장치(100)는 분석이 가능한 경우, 바이너리 유형 정보(즉, 문자열 정보, 심볼 정보 등)를 추가로 추출한다. 또한, 취약점 분석 장치(100)는 추출된 아키텍처 정보, 문자열 정보, 심볼 정보를 저장한다. S201 단계 및 S202 단계는 취약점 분석 장치(100)의 바이너리 분석부(110)에 의해 수행된다.
이후, 취약점 분석 장치(100)는 입력 바이너리 코드에 대해 디스어셈블을 수행하여 중간 표현으로 변환한다(S203). 이때, 취약점 분석 장치(100)는 입력 바이너리 코드에 대해 디스어셈블을 수행하여 디스어셈블 코드 정보를 생성한 후, 디스어셈블 코드에 변환 가능한 중간 표현을 검색한다. 그런 다음, 취약점 분석 장치(100)는 디스어셈블 코드에 대응되는 중간 표현 코드로 변환한다. S203 단계는 취약점 분석 장치(100)의 중간표현 변환부(120)에 의해 수행된다.
그런 다음, 취약점 분석 장치(100)는 중간 표현 코드를 파싱하여 추상 구문 트리(AST)를 생성한다(S204). 이후, 취약점 분석 장치(100)는 추상 구문 트리를 순회하여 함수 호출 그래프 및 제어 흐름 그래프를 추출하여 분석한 후(S205), 취약점 분석대상 함수목록을 선별한다(S206). S204 단계 내지 S206 단계는 취약점 분석 장치(100)의 중간표현 분석부(130)에 의해 수행된다.
이후, 취약점 분석 장치(100)는 취약점 분석대상 함수의 함수 호출 관계와 제어 흐름 관계를 분석하여 CWE 취약점 목록에 해당되는 취약점이 있는지를 확인한다(S207,S208). 이때, 취약점 분석 장치(100)는 정적 취약점 검출 목록을 생성한다(S209). S207 단계 내지 S209 단계는 취약점 분석 장치(100)의 정적 취약점 분석부(140)에 의해 수행된다.
그런 다음, 취약점 분석 장치(100)는 정적 취약점 검출 목록 중 취약점을 갖는 함수를 선별한다(S210). 그리고 취약점 분석 장치(100)는 취약점을 갖는 함수를 분석하여 테스트 케이스를 생성한다(S211). 이때, 취약점 분석 장치(100)는 취약점을 갖는 함수의 인자정보, 분기정보, 호출관계를 분석한다. 또한, 취약점 분석 장치(100)는 테스트 케이스에 대한 기호 수행을 실행하여 취약점을 갖는 정보에 대해 결과 분석을 보고한다(S212). 이후, 취약점 분석 장치(100)는 정적/동적 취약점 분석 결과를 종합하여 발생 가능한 취약점을 검출한다(S213).
S210 단계 내지 S213 단계는 취약점 분석 장치(100)의 동적 취약점 분석부(150)에 의해 수행된다.
이상에서 설명된 본 발명의 실시예는 예시적인 것에 불과하며, 본 발명이 속한 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 잘 알 수 있을 것이다. 그럼으로 본 발명은 상기의 상세한 설명에서 언급되는 형태로만 한정되는 것은 아님을 잘 이해할 수 있을 것이다. 따라서 본 발명의 진정한 기술적 보호 범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다. 또한, 본 발명은 첨부된 청구범위에 의해 정의되는 본 발명의 정신과 그 범위 내에 있는 모든 변형물과 균등물 및 대체물을 포함하는 것으로 이해되어야 한다.

Claims (17)

  1. 바이너리 코드로부터 아키텍처 정보를 추출하여 중간 표현 형식으로 변환 가능한지를 확인하기 위한 바이너리 분석부;
    상기 확인 결과에 따라, 상기 바이너리 코드를 중간 표현 코드로 변환하기 위한 중간 표현 변환부;
    상기 중간 표현 코드로부터 함수 호출 그래프와 제어 흐름 그래프를 추출하여 취약점 분석대상 함수를 선별하기 위한 중간 표현 분석부;
    상기 취약점 분석대상 함수에 대해, CWE(Common Weakness Enumeration) 취약점 목록에 해당되는 보안 취약점이 있는지를 판단하여 정적 취약점 검출 목록을 생성하기 위한 정적 취약점 분석부; 및
    상기 정적 취약점 검출 목록으로부터 선별된 취약점을 갖는 함수에 대해 테스트 케이스를 생성하여 기호 수행을 실행하기 위한 동적 취약점 분석부;
    를 포함하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  2. 제 1 항에 있어서,
    상기 바이너리 분석부는,
    상기 바이너리 코드로부터 바이너리 유형 정보인 문자열 정보와 심볼 정보를 추출하여 저장하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  3. 제 1 항에 있어서,
    상기 중간 표현 변환부는,
    상기 바이너리 코드에 대해 디스어셈블 과정을 거쳐 디스어셈블 코드를 생성한 후, 상기 디스어셈블 코드에 대응되는 상기 중간 표현 코드으로 변환하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  4. 제 1 항에 있어서,
    상기 중간 표현 분석부는,
    상기 중간 표현 코드를 파싱하여 추상 구문 트리를 생성한 후, 상기 추상 구문 트리를 순회하여 함수 호출 그래프와 제어 흐름 그래프를 생성하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  5. 제 1 항에 있어서,
    상기 중간 표현 분석부는,
    함수 호출 그래프와 제어 흐름 그래프의 분석을 통해 보안 취약점 분석이 불필요한 함수목록을 제외하여 상기 취약점 분석대상 함수를 선별하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  6. 제 1 항에 있어서,
    상기 정적 취약점 분석부는,
    상기 취약점 분석대상 함수를 분석하여 이전에 알려진 형태의 취약점 정보와 동일한 유형의 중간 표현 코드를 확인하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  7. 제 1 항에 있어서,
    상기 정적 취약점 검출 목록은, 취약점 위치와 취약점 정보가 기록된 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  8. 제 1 항에 있어서,
    상기 동적 취약점 분석부는,
    상기 정적 취약점 검출 목록으로부터 선별된 취약점을 가지는 함수의 인자정보, 분기정보, 호출 관계 정보를 분석하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치.
  9. 바이너리 코드로부터 아키텍처 정보를 추출하여 중간 표현 형식으로 변환 가능한지를 확인하는 단계;
    상기 확인 결과에 따라, 상기 바이너리 코드를 중간 표현 코드로 변환하는 단계;
    상기 중간 표현 코드로부터 함수 호출 그래프와 제어 흐름 그래프를 추출하여 취약점 분석대상 함수를 선별하는 단계;
    상기 취약점 분석대상 함수에 대해, CWE(Common Weakness Enumeration) 취약점 목록에 해당되는 보안 취약점이 있는지를 판단하여 정적 취약점 검출 목록을 생성하는 단계; 및
    상기 정적 취약점 검출 목록으로부터 선별된 취약점을 갖는 함수에 대해 테스트 케이스를 생성하여 기호 수행을 실행하는 단계;
    를 포함하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  10. 제 9 항에 있어서,
    상기 정적 취약점 검출 목록의 분석결과와 상기 기호 수행이 실행된 결과를 종합하여 발생 가능한 취약점을 검출하는 단계;
    를 더 포함하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  11. 제 10 항에 있어서,
    상기 검출 단계 이후에,
    상기 검출 결과에 따라 보안 위협에 대응하는 보안 취약점 관리 프로세스를 운영하는 단계;
    를 더 포함하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  12. 제 9 항에 있어서,
    상기 확인 단계는,
    상기 바이너리 코드로부터 바이너리 유형 정보인 문자열 정보와 심볼 정보를 추출하여 저장하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  13. 제 9 항에 있어서,
    상기 변환 단계는,
    상기 바이너리 코드에 대해 디스어셈블 과정을 거쳐 디스어셈블 코드를 생성한 후, 상기 디스어셈블 코드에 대응되는 상기 중간 표현 코드으로 변환하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  14. 제 9 항에 있어서,
    상기 선별 단계는,
    상기 중간 표현 코드를 파싱하여 추상 구문 트리를 생성한 후, 상기 추상 구문 트리를 순회하여 함수 호출 그래프와 제어 흐름 그래프를 생성하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  15. 제 9 항에 있어서,
    상기 선별 단계는,
    함수 호출 그래프와 제어 흐름 그래프의 분석을 통해 보안 취약점 분석이 불필요한 함수목록을 제외하여 상기 취약점 분석대상 함수를 선별하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  16. 제 9 항에 있어서,
    상기 생성 단계는,
    상기 취약점 분석대상 함수를 분석하여 이전에 알려진 형태의 취약점 정보와 동일한 유형의 중간 표현 코드를 확인하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
  17. 제 9 항에 있어서,
    상기 실행 단계는,
    상기 정적 취약점 검출 목록으로부터 선별된 취약점을 가지는 함수의 인자정보, 분기정보, 호출 관계 정보를 분석하는 것을 특징으로 하는 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 방법.
PCT/KR2017/008354 2016-11-29 2017-08-02 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법 WO2018101575A1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR10-2016-0160035 2016-11-29
KR1020160160035A KR101906004B1 (ko) 2016-11-29 2016-11-29 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법

Publications (1)

Publication Number Publication Date
WO2018101575A1 true WO2018101575A1 (ko) 2018-06-07

Family

ID=62242896

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/KR2017/008354 WO2018101575A1 (ko) 2016-11-29 2017-08-02 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법

Country Status (2)

Country Link
KR (1) KR101906004B1 (ko)
WO (1) WO2018101575A1 (ko)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110096764A (zh) * 2019-04-12 2019-08-06 浙江大学 一种电-气耦合系统脆弱线路辨识和优化方法
CN110909358A (zh) * 2019-10-22 2020-03-24 上海安智信息科技有限公司 一种基于动静态分析的整形漏洞检测方法
CN111310178A (zh) * 2020-01-20 2020-06-19 武汉理工大学 跨平台场景下的固件漏洞检测方法及系统
CN111752586A (zh) * 2020-06-23 2020-10-09 上海交通大学 跨架构的嵌入式设备固件未修补漏洞检测方法及系统
CN111859380A (zh) * 2019-04-25 2020-10-30 北京九州正安科技有限公司 Android App漏洞的零误报检测方法
CN112632563A (zh) * 2020-12-29 2021-04-09 北京梆梆安全科技有限公司 一种漏洞检测方法、装置、存储介质及电子设备
CN114417343A (zh) * 2020-10-28 2022-04-29 上海交通大学 二进制文件下的操作系统内核信息泄露漏洞检测方法
CN114666134A (zh) * 2022-03-23 2022-06-24 南昌大学 网络漏洞智能发现、挖掘方法与系统
RU2783152C1 (ru) * 2021-12-03 2022-11-09 Общество с ограниченной ответственностью "Солар Секьюрити" (ООО "Солар Секьюрити") Система и способ статического анализа исполняемого двоичного кода и исходного кода с использованием нечеткой логики
CN116049835A (zh) * 2023-03-08 2023-05-02 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质
KR102598691B1 (ko) * 2022-12-15 2023-11-06 이화여자대학교 산학협력단 기계학습모델을 이용한 소프트웨어의 변수 취약점을 탐지하는 방법
WO2024128456A1 (ko) * 2022-12-15 2024-06-20 이화여자대학교 산학협력단 기계학습모델을 이용한 소프트웨어의 변수 취약점을 탐지하는 방법 및 분석장치

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109525556B (zh) * 2018-10-18 2022-01-11 中国电力科学研究院有限公司 一种用于确定嵌入式系统固件中协议漏洞的轻量级方法及系统
KR101963752B1 (ko) * 2018-11-02 2019-03-29 세종대학교산학협력단 소프트웨어 취약점 분석 장치 및 방법
KR101963756B1 (ko) * 2018-11-19 2019-03-29 세종대학교산학협력단 소프트웨어 취약점 예측 모델 학습 장치 및 방법, 소프트웨어 취약점 분석 장치 및 방법
KR101972825B1 (ko) * 2019-01-18 2019-04-30 한국과학기술원 하이브리드 분석 기술을 이용한 임베디드 기기 취약점 자동 분석 방법, 장치 및 그 방법을 실행하는 컴퓨터 프로그램
KR102130945B1 (ko) 2019-11-05 2020-07-07 한국인터넷진흥원 바이너리 내의 변수 타입 식별 방법 및 장치
US11334360B2 (en) * 2020-05-06 2022-05-17 Deepbits Technology Inc. High throughput disassembly system for executable code and applications
WO2022097799A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치{security vulnerability analysis method for generating function abstract information and electronic device including the same}
WO2022097798A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
KR102265937B1 (ko) * 2020-12-21 2021-06-17 주식회사 모비젠 시퀀스데이터의 분석 방법 및 그 장치
CN112800423B (zh) * 2021-01-26 2022-10-11 北京航空航天大学 一种二进制代码授权漏洞检测方法
CN112784290B (zh) * 2021-01-28 2022-07-19 湖北宸威玺链信息技术有限公司 数据导出工具安全性分析方法及系统及数据导出方法
US11928220B2 (en) 2021-01-29 2024-03-12 Foundation Of Soongsil University-Industry Cooperation Method for evaluating risk of data leakage in application, recording medium and device for performing the method
KR102314829B1 (ko) * 2021-01-29 2021-10-18 숭실대학교산학협력단 애플리케이션 내부의 데이터 유출 위험성 평가 방법, 이를 수행하기 위한 기록 매체 및 장치

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849509B2 (en) * 2005-10-07 2010-12-07 Microsoft Corporation Detection of security vulnerabilities in computer programs
CN101551773B (zh) * 2009-03-12 2012-04-25 南京大学 符号错误和赋值截断的二进制漏洞检测定位装置
US20140298472A1 (en) * 2013-04-01 2014-10-02 The Johns Hopkins University Method and Apparatus for Automated Vulnerability Detection
KR101640479B1 (ko) * 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
US20160300063A1 (en) * 2014-08-15 2016-10-13 Securisea, Inc. Software vulnerabilities detection system and methods

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7849509B2 (en) * 2005-10-07 2010-12-07 Microsoft Corporation Detection of security vulnerabilities in computer programs
CN101551773B (zh) * 2009-03-12 2012-04-25 南京大学 符号错误和赋值截断的二进制漏洞检测定位装置
US20140298472A1 (en) * 2013-04-01 2014-10-02 The Johns Hopkins University Method and Apparatus for Automated Vulnerability Detection
US20160300063A1 (en) * 2014-08-15 2016-10-13 Securisea, Inc. Software vulnerabilities detection system and methods
KR101640479B1 (ko) * 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110096764B (zh) * 2019-04-12 2020-10-20 浙江大学 一种电-气耦合系统脆弱线路辨识和优化方法
CN110096764A (zh) * 2019-04-12 2019-08-06 浙江大学 一种电-气耦合系统脆弱线路辨识和优化方法
CN111859380A (zh) * 2019-04-25 2020-10-30 北京九州正安科技有限公司 Android App漏洞的零误报检测方法
CN110909358A (zh) * 2019-10-22 2020-03-24 上海安智信息科技有限公司 一种基于动静态分析的整形漏洞检测方法
CN111310178A (zh) * 2020-01-20 2020-06-19 武汉理工大学 跨平台场景下的固件漏洞检测方法及系统
CN111310178B (zh) * 2020-01-20 2024-01-23 武汉理工大学 跨平台场景下的固件漏洞检测方法及系统
CN111752586A (zh) * 2020-06-23 2020-10-09 上海交通大学 跨架构的嵌入式设备固件未修补漏洞检测方法及系统
CN111752586B (zh) * 2020-06-23 2024-04-02 上海交通大学 跨架构的嵌入式设备固件未修补漏洞检测方法及系统
CN114417343A (zh) * 2020-10-28 2022-04-29 上海交通大学 二进制文件下的操作系统内核信息泄露漏洞检测方法
CN112632563B (zh) * 2020-12-29 2023-11-21 北京梆梆安全科技有限公司 一种漏洞检测方法、装置、存储介质及电子设备
CN112632563A (zh) * 2020-12-29 2021-04-09 北京梆梆安全科技有限公司 一种漏洞检测方法、装置、存储介质及电子设备
RU2783152C1 (ru) * 2021-12-03 2022-11-09 Общество с ограниченной ответственностью "Солар Секьюрити" (ООО "Солар Секьюрити") Система и способ статического анализа исполняемого двоичного кода и исходного кода с использованием нечеткой логики
CN114666134A (zh) * 2022-03-23 2022-06-24 南昌大学 网络漏洞智能发现、挖掘方法与系统
CN114666134B (zh) * 2022-03-23 2023-06-16 南昌大学 网络漏洞智能发现、挖掘方法
KR102598691B1 (ko) * 2022-12-15 2023-11-06 이화여자대학교 산학협력단 기계학습모델을 이용한 소프트웨어의 변수 취약점을 탐지하는 방법
WO2024128456A1 (ko) * 2022-12-15 2024-06-20 이화여자대학교 산학협력단 기계학습모델을 이용한 소프트웨어의 변수 취약점을 탐지하는 방법 및 분석장치
CN116049835A (zh) * 2023-03-08 2023-05-02 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质

Also Published As

Publication number Publication date
KR101906004B1 (ko) 2018-10-10
KR20180060497A (ko) 2018-06-07

Similar Documents

Publication Publication Date Title
WO2018101575A1 (ko) 바이너리 코드 기반 임베디드 소프트웨어 취약점 분석 장치 및 그 방법
WO2014035043A1 (ko) 악성 애플리케이션 진단 장치 및 방법
WO2011102605A2 (ko) 웹 서비스의 실시간 취약성 진단 및 결과정보 제공 서비스 시스템
CN112134761A (zh) 基于固件分析的电力物联网终端脆弱性检测方法及系统
WO2013168913A1 (ko) 비실행 파일 검사 장치 및 방법
WO2013168951A1 (ko) 악성 파일 검사 장치 및 방법
WO2012091400A1 (en) System and method for detecting malware in file based on genetic map of file
WO2017039136A1 (ko) 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
WO2019160195A1 (ko) 파일 내 포함된 악성 위협 탐지 장치 및 방법, 그 기록매체
WO2018174486A1 (ko) 서버 보안 강화를 위한 접근통제 시스템의 비인가 명령어 통제 방법
WO2022108318A1 (ko) 스마트 컨트랙트 코드 취약점 분석 장치 및 방법
JPWO2020075335A1 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
KR101806118B1 (ko) 오픈 포트 배너 키워드 분석을 통한 취약점 정보를 식별하는 방법 및 장치
CN111382067A (zh) 一种模糊测试中高质量种子生成方法及系统
CN109325353A (zh) 一种针对家用路由器的聚类漏洞分析方法
EP2189920A2 (en) Malware signature builder and detection for executable code
CN108959936A (zh) 一种基于路径分析的缓冲区溢出漏洞自动利用方法
WO2014077615A1 (en) Anti-malware system, method of processing packet in the same, and computing device
Shi et al. Backporting security patches of web applications: A prototype design and implementation on injection vulnerability patches
Inamdar et al. A survey on web application security
US11283836B2 (en) Automatic decoy derivation through patch transformation
WO2022163908A1 (ko) 애플리케이션 내부의 데이터 유출 위험성 평가 방법, 이를 수행하기 위한 기록 매체 및 장치
CN109670317A (zh) 一种基于原子控制流图的物联网设备继承性漏洞挖掘方法
Antoniol Keynote paper: Search based software testing for software security: Breaking code to make it safer
Zhou et al. WASMOD: Detecting vulnerabilities in Wasm smart contracts

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 17877005

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 17877005

Country of ref document: EP

Kind code of ref document: A1