KR102392394B1 - 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 - Google Patents
함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 Download PDFInfo
- Publication number
- KR102392394B1 KR102392394B1 KR1020200148944A KR20200148944A KR102392394B1 KR 102392394 B1 KR102392394 B1 KR 102392394B1 KR 1020200148944 A KR1020200148944 A KR 1020200148944A KR 20200148944 A KR20200148944 A KR 20200148944A KR 102392394 B1 KR102392394 B1 KR 102392394B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- security
- function
- vulnerability
- analysis
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3696—Methods or tools to render software testable
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
본 개시의 기술적 사상에 따른 보안 취약점 분석 방법은 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받는 단계, 분석 대상을 특정하는 단계, 특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 상기 분석 대상의 위치를 표시하고, 표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하는 단계 및 상기 함수 요약 정보 및 중간언어 코드를 가상 기계로 출력하는 단계를 포함한다.
Description
보안 취약점 분석 방법 및 이를 포함하는 전자 장치에 관한 것으로 상세하게는 보안 취약점 분석 결과를 포함하는 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치에 관한 것이다.
지난 2014년, 정보가 유출될 수 있는 Heartbleed라는 프로그램 보안 취약점이 새롭게 발견되었다. 이는 보안 시장에서 커다란 이슈가 되었다. 보안 취약점은, 이외에도 버퍼 오버플로우(buffer overflow), 정수 오버플로우(integer overflow), 메모리 익셉션(memory exception), 기형 입력(malformed-input), 레이스 컨디션(race condition), 기호 링크(symbolic link) 및 널 포인터(null pointer)등 다양한 유형이 알려져 있다. 상기 취약점으로 인하여 입력되는 코드의 일부 기능이 부적절한 목적으로 무단 수정될 수도 있고, 코드가 실행되는 시스템이 보안상 문제를 일으킬 수 있다. 특히나, 최근에는 소스 코드나 바이너리 코드를 재사용하려는 트렌드에 따라, 코드에 포함된 보안 취약점을 분석하는 기술의 필요성이 더욱 증대되고 있다.
한편, 2009년 이후 이더리움, 이오스와 같은 블록체인 2.0 시대가 열리면서 DApp 개발자의 개발능력 하향평준화된 점, 블록체인 특성상 원장에 코드가 올라가는 순간 보안약점을 수정할 수 없다는 점을 고려하면, 블록체인 분야의 DApp 보안 이슈는 일반 소프트웨어의 보안 이슈보다 심각할 수 있다.
보안 취약점 분석은 소프트웨어를 구성하는 코드 전체를 분석하는 정적 분석과 테스트 케이스를 입력하여 실행 경로를 따라 코드를 분석하는 동적 분석으로 나뉜다. 그러나, 정적 분석은 오류가 아님에도 오류로 탐지하는 오탐의 문제가 발생할 수 있으며, 동적 분석은 테스트 케이스의 실행 경로가 아닌 곳에 오류가 있는 경우 탐지를 하지 못하는 미탐의 문제가 발생할 수 있다.
본 발명은 상술한 필요성에 따른 것으로, 정적 분석에 따른 결과로써 분석 대상의 취약점 식별 정보를 포함한 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치를 제공하는 것을 목적으로 한다.
그러나 이러한 과제는 예시적인 것으로, 이에 의해 본 발명의 범위가 한정되는 것은 아니다.
본 개시의 예시적 실시예에 따른 보안 취약점 분석 방법은 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받는 단계, 분석 대상을 특정하는 단계, 특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 상기 분석 대상의 위치를 표시하고, 표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하는 단계 및 상기 함수 요약 정보 및 중간언어 코드를 가상 기계로 출력하는 단계를 포함할 수 있다.
또한, 보안 약점 리스트를 수신하는 단계를 더 포함하며, 상기 함수 요약 정보를 생성하는 단계는, 상기 분석 대상으로부터 상기 보안 약점 리스트에 대응되는 보안 약점에 관한 상기 취약점 식별 정보를 기입할 수 있다.
또한, 상기 생성하는 단계는, 코드 라인 별 순차적으로 상기 보안 취약점 분석을 수행하며, 상기 보안 약점 리스트는, 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 보안 취약점을 포함할 수 있다.
한편, 상기 취약점 식별 정보는, 상기 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 탐지 결과를 표시할 수 있다.
또한, 상기 취약점 식별 정보는, 상기 적어도 하나의 탐지 결과에 따라 서로 다른 서식으로 표시될 수 있다.
한편, 상기 함수 요약 정보는, EAT(Export Address Table) 레벨에서 분석되는 함수 시작 주소, 함수 이름 및 외부 함수 호출 목록을 포함할 수 있다.
또한, 상기 함수 요약 정보는, 타입 추론 레벨에서 분석되는 매개변수 수 및 매개변수 자료형을 포함할 수 있다.
본 개시의 예시적 실시예에 따른 전자 장치는 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받고, 분석 대상을 특정하며, 특정한 분석 대상에 대해 보안 취약점 분석을 수행하는 보안약점 분석기 및 상기 분석 대상의 위치를 표시하고, 표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하며, 상기 함수 요약 정보 및 상기 중간언어 코드를 가상 기계로 출력하는 함수 요약정보 생성기를 포함할 수 있다.
또한, 상기 함수 요약정보 생성기는, 보안 약점 리스트를 수신하며, 상기 분석 대상으로부터 상기 보안 약점 리스트에 대응되는 보안 약점에 관한 상기 취약점 식별 정보를 기입할 수 있다.
또한, 상기 보안약점 분석기는, 코드 라인 별 순차적으로 상기 보안 취약점 분석을 수행하며, 상기 보안 약점 리스트는, 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 보안 취약점을 포함할 수 있다.
또한, 상기 함수 요약정보 생성기는, 상기 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 탐지 결과를 상기 취약점 식별 정보로써 표시할 수 있다.
또한, 상기 함수 요약정보 생성기는, 상기 적어도 하나의 탐지 결과에 따라 서로 다른 서식으로 상기 취약점 식별 정보를 표시할 수 있다.
한편, 상기 함수 요약 정보는, EAT(Export Address Table) 레벨에서 분석되는 함수 시작 주소, 함수 이름 및 외부 함수 호출 목록을 포함할 수 있다.
또한, 상기 함수 요약 정보는, 타입 추론 레벨에서 분석되는 매개변수 수 및 매개변수 자료형을 포함할 수 있다.
전술한 것 외의 다른 측면, 특징, 이점은 이하의 발명을 실시하기 위한 구체적인 내용, 청구범위 및 도면으로부터 명확해질 것이다.
상기한 바와 같이 이루어진 본 발명의 일 실시예에 따르면, 가상 기계는 함수 요약 정보 및 중간언어 코드를 수신하여, 가상 기계는 정적분석 결과, 특히 중간언어 코드 중 분석 대상 함수의 취약점 식별 정보를 이용하여 효율적인 동적분석을 수행하는 하이브리드 분석을 수행할 수 있다. 또한, 입력 코드의 언어에 무관하게 하이브리드 분석을 수행할 수 있으며, 위험하다고 알려진 함수의 사용, 스택 버퍼 오버플로우 및 정수 오버플로우 등 다양한 보안 취약점을 검사할 수 있다.
물론 이러한 효과에 의해 본 발명의 범위가 한정되는 것은 아니다.
도 1은 본 개시의 예시적 실시예에 따른 전자 장치를 설명하기 위한 블록도이다.
도 2a 및 도 2b는 본 개시의 일 실시예에 따른 전자 장치의 입력코드 처리기가 입력 코드에 따라 상이하게 구현되는 실시예를 설명하기 위한 블록도이다.
도 3은 본 개시의 예시적 실시예에 따른 중간언어 변환기를 설명하기 위한 블록도이다.
도 4는 본 개시의 예시적 실시예에 따른 보안약점 분석기를 설명하기 위한 블록도이다.
도 5는 본 개시의 예시적 실시예에 따른 보안 취약점 분석 방법을 설명하기 위한 흐름도이다.
도 6은 본 개시의 예시적 실시예에 따른 중간언어 코드 상의 보안 취약점 분석 결과를 설명하기 위한 코드이다.
도 7은 본 개시의 예시적 실시예에 따른 중간언어 코드 및 함수 요약 정보를 설명하기 위한 코드이다.
도 8은 본 개시의 예시적 실시예에 따른 가상 기계를 설명하기 위한 블록도이다.
도 2a 및 도 2b는 본 개시의 일 실시예에 따른 전자 장치의 입력코드 처리기가 입력 코드에 따라 상이하게 구현되는 실시예를 설명하기 위한 블록도이다.
도 3은 본 개시의 예시적 실시예에 따른 중간언어 변환기를 설명하기 위한 블록도이다.
도 4는 본 개시의 예시적 실시예에 따른 보안약점 분석기를 설명하기 위한 블록도이다.
도 5는 본 개시의 예시적 실시예에 따른 보안 취약점 분석 방법을 설명하기 위한 흐름도이다.
도 6은 본 개시의 예시적 실시예에 따른 중간언어 코드 상의 보안 취약점 분석 결과를 설명하기 위한 코드이다.
도 7은 본 개시의 예시적 실시예에 따른 중간언어 코드 및 함수 요약 정보를 설명하기 위한 코드이다.
도 8은 본 개시의 예시적 실시예에 따른 가상 기계를 설명하기 위한 블록도이다.
이하, 본 개시의 다양한 실시예가 첨부된 도면과 연관되어 기재된다. 본 개시의 다양한 실시예는 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는바, 특정 실시예들이 도면에 예시되고 관련된 상세한 설명이 기재되어 있다. 그러나 이는 본 개시의 다양한 실시예를 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 개시의 다양한 실시예의 사상 및 기술 범위에 포함되는 모든 변경 및/또는 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용되었다.
본 개시의 다양한 실시예에서, "포함하다." 또는 "가지다." 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
본 개시의 다양한 실시예에서 "또는" 등의 표현은 함께 나열된 단어들의 어떠한, 그리고 모든 조합을 포함한다. 예를 들어, "A 또는 B"는, A를 포함할 수도, B를 포함할 수도, 또는 A 와 B 모두를 포함할 수도 있다.
본 개시의 다양한 실시예에서 사용된 "제1", "제2", "첫째", 또는 "둘째" 등의 표현들은 다양한 실시예들의 다양한 구성요소들을 수식할 수 있지만, 해당 구성요소들을 한정하지 않는다. 예를 들어, 상기 표현들은 해당 구성요소들의 순서 및/또는 중요도 등을 한정하지 않으며, 한 구성요소를 다른 구성요소와 구분하기 위해 사용될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 새로운 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
본 개시의 실시 예에서 "모듈", "유닛", "부(part)" 등과 같은 용어는 적어도 하나의 기능이나 동작을 수행하는 구성요소를 지칭하기 위한 용어이며, 이러한 구성요소는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다. 또한, 복수의 "모듈", "유닛", "부(part)" 등은 각각이 개별적인 특정한 하드웨어로 구현될 필요가 있는 경우를 제외하고는, 적어도 하나의 모듈이나 칩으로 일체화되어 적어도 하나의 프로세서로 구현될 수 있다.
일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미가 있는 것으로 해석되어야 하며, 본 개시의 다양한 실시예에서 명백하게 정의되지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하에서, 첨부된 도면을 이용하여 본 발명의 다양한 실시 예들에 대하여 구체적으로 설명한다.
도 1은 본 개시의 일 실시예에 따른 전자 장치(10)의 구성요소를 설명하기 위한 블록도이다.
본 개시의 전자 장치(10)는 프로그램의 보안 취약점이나 해킹 위험 요소를 사전에 도출할 수 있도록, 프로그램을 분석하는 컴퓨팅 장치일 수 있다. 구체적으로 전자 장치(10)는 입력 코드가 입력되면, 해당 입력 코드에 대응하는 중간언어로 작성된 중간언어 코드를 생성(또는 변환)할 수 있다. 전자 장치(10)는 중간언어 코드를 기초로 보안약점을 분석할 수 있고, 분석된 결과를 기초로 요약정보 생성 및 가상 기계(500)를 실행할 수 있다.
도 1을 참조하면, 전자 장치(10)는 입력코드 처리기(100), 중간언어 변환기(200), 보안약점 분석기(300), 함수 요약정보 생성기(400) 및 가상 기계(500)를 포함할 수 있다. 전자 장치(10)에 포함된 구성은 각각 소프트웨어, 하드웨어 또는 펌웨어로써 구현될 수 있다. 일 예로, 전자 장치(10)에 포함된 구성들 중 적어도 하나는, 소프트웨어 모듈로써 구현되어 메모리(미도시)에 저장될 수 있으며 프로세서(미도시)에 의해 실행될 수 있다.
본 개시의 선택적 실시예에 따른 입력코드 처리기(100)는 입력되는 코드(이하, 입력 코드)를 추후 용이하게 중간언어로 변환할 수 있도록 선행 처리(Preprocessing)를 수행할 수 있다.
이때, 본 개시의 일 실시예에 따른 입력 코드는 다양한 유형의 프로그래밍 언어로 작성된 소스 코드일 수도 있고, 다양한 유형의 기계어를 포함하는 바이너리 코드일 수도 있다.
즉, 본 개시의 예시적 실시예에 따른 입력코드 처리기(100)에 의해 전자 장치(10)는 입력 코드의 종류에 무관하게 보안 취약점을 탐지할 수 있다.
또한, 본 개시의 일 실시예에 따른 입력코드는 하이퍼레저 패브릭(Hyperledger Fabric) 프레임워크 하에 자바(Java), 고(Go), 노드제이에스(node.js.)와 같은 프로그래밍 언어로 작성된 체인코드(Chain Code)일 수 있다. 또한, 입력코드는 트러플(truffle)과 같은 이더리움 기반 프레임워크 하에 솔리디티(Solidity)와 같은 언어로 작성된 스마트 컨트랙트일 수 있다. 본 개시의 또 다른 실시예에 따른 입력 코드는 EVM(Ethereum Virtual Machine)과 같은 가상 머신에서의 실행을 위한 가상기계 코드일 수 있으며 이에 한정되지 않는다.
본 개시의 입력코드 처리기(100)는 입력 코드의 유형에 따라 상이하게 구현될 수 있다. 이에 대하여는 도 2a 내지 도 3을 통해 추가로 설명하기로 한다.
본 개시의 선택적 실시예에 따른 중간언어 변환기(200)는 바이너리 코드 또는 소스 코드와 같은 입력 코드를 중간언어 코드로 변환할 수 있다. 이때, 중간언어 코드는 코드 형태는 입력 코드와 상이하나, 코드의 의미는 동일하도록 명령어(Instruction) 단위로 변환된 코드일 수 있다.
본 개시의 중간언어 변환기(200)는 복잡한 구문구조의 입력 코드를 단순화된 명령어(Instruction)로 분해된 중간언어로 변환할 수 있다. 본 개시의 일 실시예에 따른 중간언어는 명령어 단위로 분해되어 변환된 것이기 때문에, 제어 흐름 분석(Control Flow Analysis), 데이터 흐름 분석(Data Flow Analysis) 등에 있어서 수월하다는 장점이 있다. 특히, 보안약점 분석기(300)에서의 데이터 흐름 분석시, 스택 영역에서 변수의 값이 바뀔 때, 다른 변수에 어떤 영향을 주는지, 최종 취합 시 변수 값 트래킹 용이하다는 장점이 있다.
상술한 바와 같이, 보안 취약점을 분석할 입력 코드는 소프트웨어에 따라 저급 프로그래밍 언어부터 고급 프로그래밍 언어까지 다양한 방식으로 작성된 것일 수 있고, 다양한 유형의 컴파일러에 따라 상이한 포맷의 기계어일 수 있다. 중간언어 변환기(200)는 다양한 유형의 입력 코드를 하나의 중간언어로 변환할 수 있고, 이를 통해 전자 장치(10)는 어떠한 입력 코드에 대하여도 보안 취약점 분석을 용이하게 수행할 수 있다는 효과가 있다.
본 개시의 선택적 실시예에 따른 보안약점 분석기(300)는 변환된 중간언어를 기반으로 코드에 포함된 보안 취약점을 분석할 수 있다. 이때, 보안 취약점을 분석하기 위한 기법으로 정적 분석 및 동적 분석이 있다.
정적 분석(Static Analysis)은 컴퓨터 소프트웨어를 분석 하는 방법 중의 하나로, 작성된 프로그램을 실제로 실행하지 않고, 작성된 프로그램 코드를 기반으로 분석, 검증하는 방법이다. 본 개시의 일 실시예에 따른 보안약점 분석기(300)는 중간언어 코드에 대한 데이터 흐름 그래프, 제어 흐름 그래프를 생성하고, 이를 기초로 정적분석을 수행할 수 있다.
동적 분석(Dynamic Analysis)은 실제 프로그램의 실행을 통해 프로그램을 분석하여 검증하는 것을 의미한다.
본 개시의 또 다른 실시예에 따른 보안약점 분석기(300)는 금지 API 리스트(Banned API List)를 참조 및/또는 API에 사용되는 변수 크기 정보를 참조함으로써 보안취약점을 분석할 수 있다. 본 개시의 보안약점 분석기(300)는 상술한 방법 중 적어도 하나를 통해, 버퍼 오버플로우(Buffer Overflow; BOF), 정수 오버플로우(Interger Overflow) 등의 보안취약점을 탐지할 수 있다.
본 개시의 선택적 실시예에 따른 함수 요약정보 생성기(400)는 입력 코드의 함수들 및 그에 대한 보안 취약점 정보를 포함하는 함수 요약정보를 생성할 수 있다. 예컨대, 함수 요약정보는 보안 취약점을 탐지하기 위한 분석 대상의 함수의 명칭, 함수의 시작주소, 보안 취약점 탐지 여부에 관한 식별 정보, 외부 함수 호출 목록, 매개변수의 수, 매개변수의 자료형, 매개변수의 위치 및 분석 대상 함수를 호출한 함수를 포함할 수 있다.
함수 요약정보 생성기(400)는 함수 요약정보를 생성함으로써 정적 분석에 대한 결과를 제공할 수 있다. 즉, 본 개시의 기술적 사상에 따른 하이브리드 분석을 달성하기 위하여, 함수 요약정보 생성기(400)가 제공한 함수 요약정보를 기반으로 가상 기계(500)는 효율적으로 동적 분석을 수행할 수 있다. 특히, 함수 요약정보 생성기(400)는 함수 요약정보에 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입할 수 있으며, 이에 따라 가상 기계(500)는 효율적인 동적 분석을 수행할 수 있다.
본 개시의 일 실시예에 따른 가상 기계(500)는 중간언어 코드를 해석하여 소프트웨어를 실행하며, 또한, 실행된 소프트웨어에 테스트 케이스(test case)들을 입력함으로써 보안 취약점을 감지(다시 말해, 동적 분석)할 수 있다. 이 때, 가상 기계(500)는 함수 요약정보를 기반으로 동적 분석을 수행하여야 할 함수 및 이를 포함하는 구문들에 대해 집중적으로 분석을 수행할 수 있다.
도 2a 및 도 2b는 본 개시의 일 실시예에 따른 전자 장치(10)의 입력코드 처리기가 입력 코드에 따라 상이하게 구현되는 실시예를 설명하기 위한 블록도이다.
도 2a를 참조하면, 본 개시의 입력코드 처리기(100)는 입력 코드가 바이너리 코드인 경우, 디스어셈블러(Disassembler)(101)로 구현될 수 있다. 본 개시의 디스어셈블러(101)는 보안 취약점 분석의 대상이 되는 바이너리 코드를 어셈블리 코드로 변환할 수 있다.
디스어셈블러(101)는 포맷 분석부(110), PE 구조 분석부(120) 및 코드 변환부(130)를 포함할 수 있다.
포맷 분석부(110)는 어셈블리 코드로 리버싱(Reversing)하기 위해 입력된 바이너리 코드의 포맷을 분석하고 특정하기 위한 구성이다.
PE 구조 분석부(120)는 입력된 바이너리 코드의 PE 구조를 분석할 수 있고, Import Directory Table, Import Lookup Table, Hint/Name Tables, Raw calculation from RVA offset, Indirect Function Call, List of each function start address와 같은 정보를 수집할 수 있다. 또한 exe, dll과 같은 실행파일을 구성하기 위한 부가적인 메타정보들을 분석할 수 있다.
코드 변환부(130)는 상술한 정보들을 기초로 입력된 바이너리 코드를 어셈블리 코드로 변환할 수 있다.
도 2b를 참조하면, 본 개시의 입력코드 처리기(100)는 입력 코드가 소스 코드 또는 기타 VM 언어인 경우, 프론트 엔드(Frontend)(102)로 구현될 수 있다.
본 개시의 프론트 엔드(102)는 소스코드를 파싱하여 구문(syntax) 에러를 체크하고 해당 언어 특성에 맞는 AST (Abstract Syntax Tree)를 생성할 수 있다. 또한, 본 개시의 일 실시예에 따른 프론트 엔드(102)는 소스코드에 포함된 각 변수들을 구별하여 표시할 수 있다.
프론트 엔드(102)는 소스 코드의 종류에 따라 구성될 수 있다. 예컨대, 소스 코드가 탈중앙화 어플리케이션(Decentralized Application)을 구성하며, 이더리움 솔리디티(Ethereum Solidity)에 의해 작성된 경우, 프론트 엔드(102)는 솔리디티 프론트 엔드(solidity front-end)로 구현될 수 있으나 이에 한정하지 않는다.
또 다른 예로, 입력코드가 하이퍼레저 패브릭(Hyperledger Fabric) 프레임워크 하에 자바(Java), 고(Go), 노드제이에스(node.js.)와 같은 프로그래밍 언어로 작성된 체인코드(Chain Code)인 경우, 각각의 프로그래밍 언어에 대응하는 프론트 엔드로 구현될 수 있다.
도 3은 본 개시의 예시적 실시예에 따른 중간언어 변환기(200)를 설명하기 위한 블록도이다.
도 3을 참조하면, 중간언어 변환기(200)는 코드 파서(code parser)(210), 코드 세그먼트 모듈(211), 분석 모듈(220) 및 중간언어 코드 생성부(230)를 포함할 수 있으며, 분석 모듈(220)은 변수 분석부(221), 데이터 타입 추론부(222), 스택/힙 분석부(223) 및 시스템 함수/라이브러리 수집부(224)를 포함할 수 있다.
본 개시의 코드 파서(code parser)(210)는 입력되는 코드(도 3에서는 어셈블리 코드)에 포함된 명령어(Instruction) 문장을 구성 성분별로 분해하고, 그들 사이의 위계 관계를 분석하여 문장 구조를 결정할 수 있다.
코드 파서(210)는 파싱된 어셈블리 코드를 이용하여 추상 구문 트리(abstract syntax tree)(AST)를 생성할 수 있다. 코드 파서(210)는 어셈블리 코드의 구문 오류(syntax error)를 검사할 수 있다.
한편, 도 3은 입력코드가 바이너리 코드로써, 입력코드 처리기(100)에서 어셈블리 코드로 변환된 코드가 중간언어 변환기(200)로 전달되는 실시예에 대하여 도시하였으나, 상술한 바와 같이 이에 한정되지 않는다.
입력코드가 소스 코드인 실시예의 경우, 중간언어 변환기(200)로 전달되는 언어는 어셈블리 코드가 아닌 소스 코드에 대한 AST(Abstract Syntax Tree)일 수 있다. 이 경우, 코드 파서(210)는 전술한 프론트 엔드(102)에 포함될 수 있다.
본 개시의 코드 세그먼트 모듈(211)은 입력되는 코드 및 AST에 대응하여 코드 세그먼트(Segment)를 생성할 수 있다. 이때, 세그먼트는 주기억장치를 효율적으로 운영하리 위해서, 코드를 일정한 크기(대개는 64kb크기)로 나누어서 할당과 할당 해제로 관리되는 논리적 단위를 의미한다.
본 개시의 분석 모듈(220)은 변수 분석부(221), 데이터 타입 추론부(222), 스택/힙 분석부(223) 및 시스템/라이브러리 수집부(224)를 포함할 수 있다.
중간언어 코드 생성부(230)는 분석 모듈(220)이 분석한 정보(INFO)를 기반으로 중간언어 코드를 생성할 수 있다. 이에 더하여, 중간언어 코드 생성부(230)는 중간언어로써 정의된 자료형 심볼 테이블(Type Symbol Table)을 기초로, 중간언어 코드를 생성할 수 있다. 이때, 자료형 심볼 테이블은 언어 변환에 있어서, 프로그램(소스 코드 또는 바이너리 코드)의 각 식별자가 중간언어 코드 생성부(230)에서의 타입 외형과 관련된 정보에 매칭되도록 기정의된 데이터 구조일 수 있다.
본 개시의 분석 모듈(220) 및 중간언어 코드 생성부(230)가 중간언어 코드를 생성하는 실시예에 대하여 도 4를 함께 참조하여 추가적으로 설명한다.
도 4는 본 개시의 예시적 실시예에 따른 보안약점 분석기(300)를 설명하기 위한 블록도이다.
도 4를 참조하면, 보안약점 분석기(300)는 데이터 흐름 생성기(310), 제어 흐름 생성기(320) 및 약점 분석 모듈(330)을 포함할 수 있다.
데이터 흐름 생성기(310)는 입력된 중간언어 코드를 기반으로 데이터 흐름 그래프(data flow graph)를 생성할 수 있다. 데이터 흐름 그래프란, 중간언어 코드가 실행되는 도중 특정 값이 매개 변수를 통해 이동하고 변하는 모든 경로를 표기한 그래프를 말한다.
제어 흐름 생성기(320)는 입력된 중간언어 코드를 기반으로 제어 흐름 그래프(control flow graph)를 생성할 수 있다. 제어 흐름 그래프는 코드의 기본 블록(basic block)을 하나의 노드라고 할 때, 중간언어 코드가 실행되는 도중 횡단할 수 있는 모든 경로를 표기한 그래프를 말한다.
약점 분석 모듈(330)은 데이터 흐름 그래프 및 제어 흐름 그래프를 기반으로 보안 취약점 분석을 수행할 수 있다.
일 예로, 약점 분석 모듈(330)은 금지 API 리스트(banned API list) 및 제어 흐름 그래프를 이용하여 보안 취약점 분석을 수행할 수 있다. 이 경우, 금지 API 리스트에 포함된 함수(예컨대, strcpy)를 보안 취약점으로 식별할 수 있다. 한편, 금지 API 리스트는 예를 들어 JAVA 1.4의 banned API List 또는 Microsoft Security Develop Lifecycle(SDL) banned APIs일 수 있으나 이에 제한되지 않으며 다양한 종류의 금지 API 리스트를 포함할 수 있다.
다른 예로, 약점 분석 모듈(330)은 제어 흐름 그래프, 제1 취약 함수 API 리스트 및 변수 크기 정보를 이용하여 보안 취약점 분석을 수행할 수 있다. 이 경우, 약점 분석 모듈(330)은 스택 버퍼 오버 플로우(stack buffer overflow)를 감지해낼 수 있다.
또 다른 예로, 약점 분석 모듈(330)은 제어 흐름 그래프를 기반으로, 정수 오버 플로우(integer overflow)를 감지해낼 수 있다. 이 경우, 약점 분석 모듈(330)은 오버플로우가 일어날 수 있는 변수의 값이 감소 또는 증가하는지에 관한 코드의 패턴을 기반으로 정수 오버플로우를 감지할 수 있다.
약점 분석 모듈(330)은 상술한 바와 같이 정적 분석을 수행할 수 있다. 정적 분석이라 함은 동적 분석의 반대되는 개념으로, 소프트웨어가 실행되지 않는 환경에서 대상 코드의 의미를 분석하는 방법을 말한다. 정적 분석의 경우, 소프트웨어가 실행가능한 환경이 아닌 것을 의미하는 오탐(false positive)이 발생할 수 있다. 한편, 가상 기계(500)를 이용한 동적 분석의 경우, 소프트웨어가 실행가능한 환경에서 보안 취약점을 분석하게 되는데 이 경우, 미탐(false negative)이 발생할 수 있다. 이를 보완하기 위해, 상기 약점 분석 모듈(330)의 정적 분석 결과를 이용하여 가상 기계(500)가 동적 분석을 수행하는 하이브리드 분석을 위해, 함수 요약정보 생성기(400)는 함수 요약정보를 생성할 수 있다.
함수 요약정보 생성기(400)는 보안약점 분석기(300)로부터 수신한 보안 취약점에 관한 정보(INFO)를 이용하여 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기임함으로써 함수 요약 정보를 생성할 수 있다. 상세한 설명은 후술하기로 한다.
도 5는 본 개시의 예시적 실시예에 따른 보안 취약점 분석 방법을 설명하기 위한 흐름도이다.
단계 S110에서, 보안약점 분석기(300)는 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받을 수 있다. 보안약점 분석기(300)가 입력받은 중간언어 코드는, 바이너리 코드의 레벨에서 복수의 함수들 각각의 단위로 분할되어 중간언어 코드로 변환된 것일 수 있다.
단계 S120에서, 보안약점 분석기(300)는 분석 대상을 특정할 수 있다. 보안약점 분석기(300)는 입력받은 중간언어 코드에 포함된 복수의 함수들 중 적어도 하나를 분석 대상으로써 특정할 수 있다.
단계 S130에서, 보안약점 분석기(300)는 특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 분석 대상의 위치를 표시하고 보안 취약점에 관한 정보(INFO)를 생성할 수 있다.
단계 S140에서, 함수 요약정보 생성기(400)는 보안 취약점에 관한 정보(INFO)에 기반하여, 표시된 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입함으로써 함수 요약 정보를 생성할 수 있다.
본 개시의 예시적 실시예에 따르면, 함수 요약정보 생성기(400)는 보안 약점 리스트를 수신할 수 있다. 예컨대, 보안 약점 리스트란 위험하다고 알려진 함수의 사용(예컨대, 금지 API 리스트에 포함된 함수의 사용), 스택 버퍼 오버플로우 및 정수 오버플로우를 포함할 수 있다. 함수 요약정보 생성기(400)는 보안 약점 리스트에 해당하는 분석 대상의 위치를 표시할 수 있다. 여기서 위치란 함수의 시작 주소를 포함할 수 있으나, 이에 제한되지는 않는다. 또한, 함수 요약정보 생성기(400)는 분석 대상의 위치가 표시된 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입할 수 있다. 예컨대, 함수의 시작 주소가 ac0로 표시된 testMain의 이름을 가진 함수가 위험하다고 알려진 함수의 사용 및 스택 버퍼 오버플로우에 노출되어 있다는 취약점 식별 정보를 기입할 수 있다.
단계 S150에서, 함수 요약정보 생성기(400)는 함수 요약 정보 및 중간언어 코드를 가상 기계(500)로 출력할 수 있다. 가상 기계(500)는 중간언어 코드를 실행(즉, 동적분석)을 수행하면서 함수 요약 정보에 포함된 취약점 식별 정보 및 그 위치를 이용하여, 취약점이 발생할 수 있는 부분에 대해 효율적으로 동적분석을 수행할 수 있다.
도 6은 본 개시의 예시적 실시예에 따른 중간언어 코드 상의 보안 취약점 분석 결과를 설명하기 위한 코드이다.
도 6을 참조하면, 분석 결과(CD)는 보안 취약점 분석을 수행하는 중간언어 코드들 및 보안 취약점이 표시된 코드(WK)를 포함할 수 있다. 전자 장치(10)는 중간언어 코드들 중 Label00252에 해당하는 strcpy 함수 호출을 보안 취약점으로 식별할 수 있다. 전자 장치(10)는 식별된 보안 취약점에 대해 다른 서식으로 표현할 수 있다.
전자 장치(10)는 식별된 보안 취약점에 대해 하이라이트 및/또는 볼드(bold)를 적용하여 표시할 수 있다. 구체적으로, 전자 장치(10)는 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 탐지 결과에 따라 서로 다른 서식으로 취약점 식별 정보를 표시할 수 있다.
일 예로, 전자 장치(10)는 제1 분석 대상이 위험하다고 알려진 함수의 사용에 해당하는 경우 제1 분석 대상을 하이라이트 표시를 하며, 다른 예로, 제2 분석 대상이 위험하다고 알려진 함수의 사용이자 스택 버퍼 오버플로우에 해당하는 경우 하이라이트 및 볼드로 제2 분석 대상을 표시할 수 있다.
이 후, 전자 장치(10)는 보안 취약점을 표시한 분석 결과(CD)를 출력할 수 있다.
도 7은 본 개시의 예시적 실시예에 따른 중간언어 코드(ILC) 및 함수 요약 정보(AFI)를 설명하기 위한 코드이다. 도시된 중간언어 코드(ILC)는 설명의 편의상 C언어로써 설명하기로 한다.
도 7을 참조하면, 중간언어 코드(ILC)는 testMain 함수에 strcpy라는 위험하다고 알려진 함수를 포함하며, test2 함수는 상기 testMain 함수를 포함할 수 있으며, test2 함수에 의해 버퍼 오버플로우가 발생할 수 있다. 전자 장치(10)는 중간언어 코드(ILC)에 대해 후술하는 바와 같은 함수 요약 정보(AFI)를 생성할 수 있다.
전자 장치(10)는 분석 대상이 되는 함수의 함수 시작주소(address) 및 명칭(functionName)을 함수 요약 정보(AFI)에 기록할 수 있다. 예컨대, 전자 장치(10)는 함수 시작주소로써 "ac0"를 표현할 수 있으며, 해당 함수의 이름은 "testMain"임을 기록할 수 있다. 여기서, 함수 시작주소 및 명칭은 EAT(Export Address Table) 수준에서 분석될 수 있다.
전자 장치(10)는 분석 대상 함수의 취약점 식별 정보(weaknessList)를 기록할 수 있다. 예컨대, 전자 장치(10)는 취약점 식별 정보로써 버퍼 오버플로우("BOF") 및 위험하다고 알려진 함수("BAC")를 기록할 수 있다. 전자 장치(10)는 수신된 보안 약점 리스트를 기반으로 위와 같은 취약점 식별 정보를 기록할 수 있다. 전술한 바와 같이, 보안 약점 리스트는 위험하다고 알려진 함수의 사용, 스택 버퍼 오버플로우 및 정수 오버플로우를 포함할 수 있으며, 따라서, 전자 장치(10)는 취약점 식별 정보로써 위험하다고 알려진 함수의 사용, 스택 버퍼 오버플로우 및 정수 오버플로우 중 적어도 하나를 취약점 식별 정보로써 기록할 수 있다.
전자 장치(10)는 분석 대상 함수가 호출한 외부 함수 호출 목록(functionCallList)을 기록할 수 있다. 예컨대, 전자 장치(10)는 testMain 함수가 외부 라이브러리에서 strcpy를 호출하였음을 기록할 수 있다. 외부 함수 호출 목록은 IAT(Import Address Table) 및 EAT 수준에서 분석될 수 있다.
전자 장치(10)는 분석 대상 함수의 매개변수의 수(paramNum), 매개변수의 자료형(paramTypes) 및 매개변수의 위치(param)를 기록할 수 있다. 예컨대, 전자 장치(10)는 분석 대상 함수의 매개변수의 자료형이 "array&class" 및 "int"임을 기록하고, 매개변수들의 수는 2개이며, 매개변수들의 위치가 각각 "ebp-0x14" 및 "ebp-0x20"에 해당함을 기록할 수 있다. 여기서, 매개변수의 수는 변수 및 파라미터 타입 추론 수준과 데이터 흐름 분석 수준에서 분석되며, 매개변수의 자료형은 변수 및 파라미터 타입 추론 수준에서 분석될 수 있다.
전자 장치(10)는 분석 대상 함수를 호출한 함수(caller)를 기록할 수 있다. 예컨대, 전자 장치(10)는 test2 함수가 분석 대상 함수인 testMain를 호출하였다는 정보를 기록할 수 있다.
본 개시의 예시적 실시예에 따르면, 함수 요약 정보(AFI)는 중간언어 코드(ILC)에 인접하여 작성될 수 있다. 예컨대, 중간언어 코드(ILC)에 포함된 분석 대상에 인접하도록, 해당 분석 대상에 대한 취약점 식별 정보가 기입될 수 있다.
도 8은 본 개시의 예시적 실시예에 따른 가상 기계(500)를 설명하기 위한 블록도이다.
가상 기계(500)는 인터프리터(interpreter)(510), 동적 분석기(520) 및 행동 모니터(530)를 포함할 수 있다.
인터프리터(510)는 중간언어 변환기(200)에 의해 변환된 중간언어 코드를 해석하여 소프트웨어를 실행할 수 있다. 동적 분석기(520)는 실행된 소프트웨어에 테스트 케이스(test case)들을 입력함으로써 보안 취약점을 감지할 수 있다.
본 개시의 예시적 실시예에 따르면, 가상 기계(500)는 함수 요약 정보(AFI) 및 중간언어 코드(ILC)를 수신할 수 있다. 인터프리터(510)는 중간언어 코드(ILC)를 기반으로 소프트웨어를 실행시키며 동적 분석기(520)는 정적분석 결과를 나타내는 함수 요약 정보(AFI)를 기반으로 동적분석을 수행할 수 있다. 즉, 가상 기계(500)는 정적분석 결과, 특히 분석 대상 함수의 취약점 식별 정보를 이용하여 효율적인 동적분석을 수행하는 하이브리드 분석을 수행할 수 있다. 가상 기계(500)는 수행된 하이브리드 분석된 결과 데이터(DO)를 출력할 수 있다.
가상 기계(500)는 다양한 런타임 환경에서 구동될 수 있으며, 런타임 환경은 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태를 의미한다. 예컨대, 운영체제 자체에 속하는 경우도 있으며, 운영체제에서 작동하는 소프트웨어를 의미할 수도 있다. 런타임 환경의 종류로써, 예컨대, 자바 런타임 환경(JRE), 윈도우(windows) 또는 리눅스(linux)를 포함할 수 있으나 이에 제한되지는 않는다.
한편, 상술한 본 개시의 다양한 실시 예들에 따른 방법들은, 기존 전자 장치에 설치 가능한 어플리케이션 형태로 구현될 수 있다.
또한, 상술한 본 개시의 다양한 실시 예들에 따른 방법들은, 기존 전자 장치에 대한 소프트웨어 업그레이드, 또는 하드웨어 업그레이드 만으로도 구현될 수 있다.
또한, 상술한 본 개시의 다양한 실시예들은 전자 장치에 구비된 임베디드 서버, 또는 전자장치의 외부 서버를 통해 수행되는 것도 가능하다.
한편, 본 개시의 일 실시예에 따르면, 이상에서 설명된 다양한 실시예들은 소프트웨어(software), 하드웨어(hardware) 또는 이들의 조합을 이용하여 컴퓨터(computer) 또는 이와 유사한 장치로 읽을 수 있는 기록매체(computer readable recording medium)에 저장된 명령어를 포함하는 소프트웨어로 구현될 수 있다. 일부 경우에 있어 본 명세서에서 설명되는 실시예들이 프로세서 자체로 구현될 수 있다. 소프트웨어적인 구현에 의하면, 본 명세서에서 설명되는 절차 및 기능과 같은 실시 예들은 별도의 소프트웨어 모듈들로 구현될 수 있다. 소프트웨어 모듈들 각각은 본 명세서에서 설명되는 하나 이상의 기능 및 동작을 수행할 수 있다.
한편, 컴퓨터(computer) 또는 이와 유사한 장치는, 저장 매체로부터 저장된 명령어를 호출하고, 호출된 명령어에 따라 동작이 가능한 장치로서, 개시된 실시 예들에 따른 장치를 포함할 수 있다. 상기 명령이 프로세서에 의해 실행될 경우, 프로세서가 직접, 또는 상기 프로세서의 제어 하에 다른 구성요소들을 이용하여 상기 명령에 해당하는 기능을 수행할 수 있다. 명령은 컴파일러 또는 인터프리터에 의해 생성 또는 실행되는 코드를 포함할 수 있다.
기기로 읽을 수 있는 기록매체는, 비일시적 컴퓨터 판독가능 기록매체(non-transitory computer readable recording medium)의 형태로 제공될 수 있다. 여기서, '비일시적'은 저장매체가 신호(signal)를 포함하지 않으며 실재(tangible)한다는 것을 의미할 뿐 데이터가 저장매체에 반영구적 또는 임시적으로 저장됨을 구분하지 않는다. 이때 비일시적 컴퓨터 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 비일시적 컴퓨터 판독 가능 매체의 구체적인 예로는, CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등이 있을 수 있다.
또한, 본 개시의 예시적 실시예에 따른 비일시적 컴퓨터 판독가능 기록매체는 도 5와 함께 설명한 단계 S110 내지 단계 S150의 보안 취약점 분석 방법 및 본 개시에서 설명된 다양한 방법들을 포함할 수 있다.
다시말해, 보안 취약점 분석 방법을 실행하기 위한 비일시적 컴퓨터 판독가능 기록 매체에 있어서, 상기 보안 취약점 분석 방법은, 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받는 단계(S110), 분석 대상을 특정하는 단계(S120), 특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 상기 분석 대상의 위치를 표시하고, 취약점 식별 정보를 생성하는 단계(S130), 표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 상기 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하는 단계(S140) 및 상기 함수 요약 정보 및 중간언어 코드를 가상 기계로 출력하는 단계(S150)를 포함할 수 있다.
이와 같이 본 개시는 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 당해 기술분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 다른 실시예가 가능하다는 점을 이해할 것이다. 따라서 본 개시의 진정한 기술적 보호 범위는 첨부된 청구범위의 기술적 사상에 의하여 정해져야 할 것이다.
Claims (15)
- 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받는 단계;
분석 대상을 특정하는 단계;
특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 상기 분석 대상의 위치를 표시하고, 취약점 식별 정보를 생성하는 단계;
표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 상기 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하는 단계; 및
상기 함수 요약 정보 및 중간언어 코드를 가상 기계로 출력하는 단계를 포함하고,
입력 받은 상기 중간언어 코드는, 소스 코드를 포함하는 입력 코드로부터 변환된 코드이고,
상기 입력 코드는, 탈중앙화 분산형 어플리케이션(Decentralized Application)의 실행 코드이고, 이더리움 솔리디티(Ethereum Solidity) 및 하이퍼레저 패브릭(Hyperledger Fabric) 중 적어도 하나의 언어로 구현된 것을 특징으로 하는 보안 취약점 분석 방법. - 제1항에 있어서,
보안 약점 리스트를 수신하는 단계를 더 포함하며,
상기 함수 요약 정보를 생성하는 단계는,
상기 분석 대상으로부터 상기 보안 약점 리스트에 대응되는 보안 약점에 관한 상기 취약점 식별 정보를 기입하는 것을 특징으로 하는 보안 취약점 분석 방법. - 제2항에 있어서,
상기 취약점 식별 정보를 생성하는 단계는,
코드 라인 별 순차적으로 상기 보안 취약점 분석을 수행하며,
상기 보안 약점 리스트는,
스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 보안 취약점을 포함하는 것을 특징으로 하는 보안 취약점 분석 방법. - 제3항에 있어서,
상기 취약점 식별 정보는, 상기 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 탐지 결과를 표시하는 것을 특징으로 하는 보안 취약점 분석 방법. - 제4항에 있어서,
상기 취약점 식별 정보는, 상기 적어도 하나의 탐지 결과에 따라 서로 다른 서식으로 표시되는 것을 특징으로 하는 보안 취약점 분석 방법. - 제1항에 있어서,
상기 함수 요약 정보는,
EAT(Export Address Table) 레벨에서 분석되는 함수 시작 주소, 함수 이름 및 외부 함수 호출 목록을 포함하는 것을 특징으로 하는 보안 취약점 분석 방법. - 제6항에 있어서,
상기 함수 요약 정보는,
타입 추론 레벨에서 분석되는 매개변수 수 및 매개변수 자료형을 포함하는 것을 특징으로 하는 보안 취약점 분석 방법. - 바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받고, 분석 대상을 특정하며, 특정한 분석 대상에 대해 보안 취약점 분석을 수행하는 보안약점 분석기; 및
상기 분석 대상의 위치를 표시하고, 표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하며, 상기 함수 요약 정보 및 상기 중간언어 코드를 가상 기계로 출력하는 함수 요약정보 생성기를 포함하고,
입력 받은 상기 중간언어 코드는, 소스 코드를 포함하는 입력 코드로부터 변환된 코드이고,
상기 입력 코드는, 탈중앙화 분산형 어플리케이션(Decentralized Application)의 실행 코드이고, 이더리움 솔리디티(Ethereum Solidity) 및 하이퍼레저 패브릭(Hyperledger Fabric) 중 적어도 하나의 언어로 구현된 것을 특징으로 하는 전자 장치. - 제8항에 있어서,
상기 함수 요약정보 생성기는,
보안 약점 리스트를 수신하며, 상기 분석 대상으로부터 상기 보안 약점 리스트에 대응되는 보안 약점에 관한 상기 취약점 식별 정보를 기입하는 것을 특징으로 하는 전자 장치. - 제9항에 있어서,
상기 보안약점 분석기는,
코드 라인 별 순차적으로 상기 보안 취약점 분석을 수행하며,
상기 보안 약점 리스트는,
스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 보안 취약점을 포함하는 것을 특징으로 하는 전자 장치. - 제10항에 있어서,
상기 함수 요약정보 생성기는, 상기 스택 버퍼 오버플로우, 정수 오버플로우 및 금지 API 리스트 중 적어도 하나의 탐지 결과를 상기 취약점 식별 정보로써 표시하는 것을 특징으로 하는 전자 장치. - 제11항에 있어서,
상기 함수 요약정보 생성기는, 상기 적어도 하나의 탐지 결과에 따라 서로 다른 서식으로 상기 취약점 식별 정보를 표시하는 것을 특징으로 하는 전자 장치. - 제8항에 있어서,
상기 함수 요약 정보는,
EAT(Export Address Table) 레벨에서 분석되는 함수 시작 주소, 함수 이름 및 외부 함수 호출 목록을 포함하는 것을 특징으로 하는 전자 장치. - 제13항에 있어서,
상기 함수 요약 정보는,
타입 추론 레벨에서 분석되는 매개변수 수 및 매개변수 자료형을 포함하는 것을 특징으로 하는 전자 장치. - 보안 취약점 분석 방법을 실행하기 위한 비일시적 컴퓨터 판독가능 기록 매체에 있어서,
상기 보안 취약점 분석 방법은,
바이너리 레벨에서 함수 단위로 분할된 중간언어 코드를 입력받는 단계;
분석 대상을 특정하는 단계;
특정한 분석 대상에 대해 보안 취약점 분석을 수행하여 상기 분석 대상의 위치를 표시하고, 취약점 식별 정보를 생성하는 단계;
표시된 상기 분석 대상의 보안 취약점 탐지 여부에 관한 상기 취약점 식별 정보를 기입하여 함수 요약 정보를 생성하는 단계; 및
상기 함수 요약 정보 및 중간언어 코드를 가상 기계로 출력하는 단계를 포함하며,
입력 받은 상기 중간언어 코드는, 소스 코드를 포함하는 입력 코드로부터 변환된 코드이고,
상기 입력 코드는, 탈중앙화 분산형 어플리케이션(Decentralized Application)의 실행 코드이고, 이더리움 솔리디티(Ethereum Solidity) 및 하이퍼레저 패브릭(Hyperledger Fabric) 중 적어도 하나의 언어로 구현된 것을 특징으로 하는 비일시적 컴퓨터 판독가능 기록 매체.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200148944A KR102392394B1 (ko) | 2020-11-09 | 2020-11-09 | 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020200148944A KR102392394B1 (ko) | 2020-11-09 | 2020-11-09 | 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR102392394B1 true KR102392394B1 (ko) | 2022-05-02 |
Family
ID=81593379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200148944A KR102392394B1 (ko) | 2020-11-09 | 2020-11-09 | 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102392394B1 (ko) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014225160A (ja) * | 2013-05-16 | 2014-12-04 | 日本電信電話株式会社 | 情報処理装置および情報処理方法 |
KR101568224B1 (ko) * | 2014-12-26 | 2015-11-11 | 고려대학교 산학협력단 | 소프트웨어 취약점 분석방법 및 분석장치 |
KR20190084468A (ko) * | 2018-01-08 | 2019-07-17 | 국방과학연구소 | 함수 정보 요약 장치 및 방법 |
-
2020
- 2020-11-09 KR KR1020200148944A patent/KR102392394B1/ko active IP Right Grant
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014225160A (ja) * | 2013-05-16 | 2014-12-04 | 日本電信電話株式会社 | 情報処理装置および情報処理方法 |
KR101568224B1 (ko) * | 2014-12-26 | 2015-11-11 | 고려대학교 산학협력단 | 소프트웨어 취약점 분석방법 및 분석장치 |
KR20190084468A (ko) * | 2018-01-08 | 2019-07-17 | 국방과학연구소 | 함수 정보 요약 장치 및 방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11157640B2 (en) | Protecting sensitive data in software products and in generating core dumps | |
Backes et al. | Artist: The android runtime instrumentation and security toolkit | |
US8850581B2 (en) | Identification of malware detection signature candidate code | |
US11983094B2 (en) | Software diagnostic context selection and use | |
Bichhawat et al. | Information flow control in WebKit’s JavaScript bytecode | |
US10078510B1 (en) | Late-stage software feature reduction tool for security and performance | |
US8667298B2 (en) | Module signing for unprivileged users to create and load trustworthy kernel modules | |
US11030074B2 (en) | Code update based on detection of change in runtime code during debugging | |
US9129137B2 (en) | Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine | |
CN112925524A (zh) | 一种检测驱动程序中不安全直接存储器访问的方法及装置 | |
US11868465B2 (en) | Binary image stack cookie protection | |
KR102209151B1 (ko) | 바이너리 취약점 패치 방법 및 장치 | |
CN111931191A (zh) | Linux平台二进制软件堆溢漏洞动态检测方法及系统 | |
KR102367196B1 (ko) | 중간언어 기반 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 | |
KR102392394B1 (ko) | 함수 요약 정보를 생성하는 보안 취약점 분석 방법 및 이를 포함하는 전자 장치 | |
KR102341137B1 (ko) | 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치 | |
US8843908B2 (en) | Compiler validation via program verification | |
CN116028061A (zh) | 字节码文件生成方法、页面跳转方法、装置及计算机设备 | |
US11886589B2 (en) | Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method | |
CN107341403B (zh) | 一种文件转换方法和装置 | |
Reynolds | Modeling the java bytecode verifier | |
KR102421394B1 (ko) | 하드웨어와 소프트웨어 기반 트레이싱을 이용한 악성코드 탐지 장치 및 방법 | |
US11403371B2 (en) | Device and method for bypassing analysis evasion technique, and recording medium for a program for performing the same | |
Wang et al. | Teaching software reuse with JavaBeans | |
Houy et al. | Lessons Learned and Challenges of Deploying Control Flow Integrity in Complex Software: the Case of OpenJDK’s Java Virtual Machine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |