KR20190030490A - 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법 - Google Patents

프로그램 소스 코드의 보안 취약점 검출 장치 및 방법 Download PDF

Info

Publication number
KR20190030490A
KR20190030490A KR1020170117985A KR20170117985A KR20190030490A KR 20190030490 A KR20190030490 A KR 20190030490A KR 1020170117985 A KR1020170117985 A KR 1020170117985A KR 20170117985 A KR20170117985 A KR 20170117985A KR 20190030490 A KR20190030490 A KR 20190030490A
Authority
KR
South Korea
Prior art keywords
flow graph
query
graph
source code
data flow
Prior art date
Application number
KR1020170117985A
Other languages
English (en)
Other versions
KR102014266B1 (ko
Inventor
김진국
김현숙
장희진
정승훈
김희동
한경숙
표창우
김태환
Original Assignee
국방과학연구소
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 국방과학연구소 filed Critical 국방과학연구소
Priority to KR1020170117985A priority Critical patent/KR102014266B1/ko
Publication of KR20190030490A publication Critical patent/KR20190030490A/ko
Application granted granted Critical
Publication of KR102014266B1 publication Critical patent/KR102014266B1/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
    • 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
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computational Linguistics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 프로그램 소스 코드로부터 보안 취약점을 검출하는 장치 및 방법에 대한 것으로, 프로그램의 소스 코드 및 검출 대상 보안 취약점을 포함하는 질의 관련 정보를 입력받는 입력부와, 입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 각각 생성하며, 생성된 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 통합하여 합성 그래프를 생성하는 그래프 생부와, 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 보안 취약점을 검출하는 보안 약점 검출부 및, 상기 소스 코드가 입력되면, 상기 소스 코드의 각 블록을 기준으로 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합 및, 상기 소스 코드의 각 블록에 대응하는 상기 추상 구문 트리의 각 노드들을 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합 결과에 연결하여 상기 합성 그래프를 생성하도록 상기 그래프 생성부를 제어하며, 상기 합성 그래프로부터 상기 보안 취약점 정보에 따라 검출된 상기 소스 코드의 적어도 하나의 블록 또는 행을 상기 보안 취약점으로 출력하는 제어부를 포함하는 것을 특징으로 한다.

Description

프로그램 소스 코드의 보안 취약점 검출 장치 및 방법{APPARATUS AND METHOD FOR DETECTING SECURITY WEAKNESS OF PROGRAM SOURCE CODE}
본 발명은 프로그램 소스 코드로부터 보안 취약점을 검출하는 장치 및 방법에 대한 것이다.
최근에는 기술의 발달로 프로그램 상에 존재하는 보안 취약점을 통해 기밀 정보의 유출, 기밀 정보의 변경 등 다양한 형태의 공격이 이루어지고 있다. 이에 따라 요즈음에는 프로그램이 개발되는 경우에 개발된 프로그램에 대한 보안 요구가 확대되고 있다. 이에 따라 프로그램 소스 코드 상의 보안 약점이 존재하는지 여부를 검사하기 위한 연구가 활발하게 진행되고 있다.
한편 프로그램 소스 코드 상의 취약점을 이용하여 공격하려는 시도와 이러한 공격 시도를 무력화하기 위한 서로 간의 경쟁이 심화되면서, 소프트웨어 프로그램 소스 코드 상에 나타나는 보안 취약점들은 지속적으로 변화하고 있다. 즉, 소스 코드 내에서 검사가 필요한 보안 취약점들이 계속 변화하고 있으므로, 이러한 보안 취약점들을 검출하기 위한 분석 방법도 이에 맞추어 지속적으로 변화하여야 한다.
한편, 보안 취약점은 간단한 구문 요소를 검사함으로써 분석할 수 있는 단순한 형태부터 값의 흐름이나 범위를 분석해야 하는 경우에 이르기까지 다양하다. 이를 위해 현재의 보안 취약점 분석은 프로그램 소스 코드의 구문 요소를 검색하거나, 소스 코드의 각 단계에서 산출되는 중간값들의 흐름, 또는 상기 소스 코드에 따라 실행되어 제어가 수행되는 제어 흐름을 분석하는 각각의 과정으로 수행되고 있다.
한편 이처럼 구문 요소 검사, 중간값, 즉 데이터의 흐름 분석, 또는 제어 흐름을 분석하는 방법으로는 각각의 특징에 따른 보안 취약점을 분석하는 데에는 용이하나, 이러한 개별적인 특징을 벗어나는 복합적 성향의 보안 취약점 분석에는 적용하기 어렵다는 문제가 있다. 일예로 값이나 타입 정보, 사용자의 의도나 최적화 등 구문, 제어 또는 데이터의 흐름으로 표현하기 어려운 경우, 기존의 방식으로는 보안 취약점의 분석이 어렵다는 문제가 있다.
또한 현재 사용되고 있는 보안 취약점 검출 방법은 사용자가 보안 취약점 및 검출에 관련된 전문적인 지식을 가지고 있어야 한다는 문제가 있다. 즉, 상기 보안 취약점 및 검출에 전문적인 지식을 가지고 있지 않은 사용자의 경우, 실질적으로 제어 또는 데이터의 흐름 등을 분석하기 어려우며, 이에 따라 보안 취약점의 검출을 할 수 없다는 문제가 있다.
본 발명은 전술한 문제 및 다른 문제를 해결하는 것을 목적으로 하는 것으로, 프로그램 소스 코드로부터 값이나 타입 정보, 사용자의 의도나 최적화 등 구문, 제어 또는 데이터의 흐름으로 표현하기 어려운 보안 취약점을 검출할 수 있도록 하는 장치 및 방법을 제공하는 것이다.
또한 본 발명의 다른 목적은 사용자가 보안 취약점 및 검출에 관련된 전문적인 지식을 가지고 있지 않는 경우에도, 사용자가 상기 프로그램 소스 코드로부터 보안 취약점을 검출할 수 있도록 하는 장치 및 방법을 제공하는 것이다.
상술한 목적을 달성하기 위한 본 발명의 실시 예에 따른 보안 취약점 검출 장치는, 프로그램의 소스 코드 및 검출 대상 보안 취약점을 포함하는 질의 관련 정보를 입력받는 입력부와, 입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 각각 생성하며, 생성된 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 통합하여 합성 그래프를 생성하는 그래프 생성부와, 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 보안 취약점을 검출하는 보안 약점 검출부 및, 상기 소스 코드가 입력되면, 상기 소스 코드의 각 블록을 기준으로 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합 및, 상기 소스 코드의 각 블록에 대응하는 상기 추상 구문 트리의 각 노드들을 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합 결과에 연결하여 상기 합성 그래프를 생성하도록 상기 그래프 생성부를 제어하며, 상기 합성 그래프로부터 상기 보안 취약점 정보에 따라 검출된 상기 소스 코드의 적어도 하나의 블록 또는 행을 상기 보안 취약점으로 출력하는 제어부를 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 제어부는, 상기 소스 코드가 입력되면, 상기 소스 코드를 기 설정된 기준에 따라 적어도 하나의 블록 및 적어도 하나의 행으로 구분하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 그래프 생성부는, 상기 소스 코드로부터 제어 흐름 그래프를 생성하는 CFG(Control Flow Graph) 생성부와, 상기 소스 코드로부터 데이터 흐름 그래프를 생성하는 DFG(Data Flow Graph) 생성부와, 상기 소스 코드로부터 추상 구문 트리를 생성하는 AST(Abstract Syntax Tree) 생성부 및, 상기 제어 흐름 그래프, 데이터 흐름 그래프, 추상 구문 트리를 통합하여 합성 그래프를 생성하는 합성부를 포함하며, 상기 합성부는, 상기 데이터 흐름 그래프의 노드들을, 상기 제어 흐름 그래프의 대응되는 블록에 각각 표시하여, 상기 각 노드들을 각각의 블록별로 구분함으로써 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프를 통합하고, 상기 소스 코드의 각 블록들을 기준으로 상기 추상 구문 트리를 복수의 그룹으로 분해 및, 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프 통합 결과에 따라 구분된 각각의 블록에 상기 분해된 추상 구문 트리의 각 그룹들을 연결하여, 상기 합성 그래프를 생성하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 보안 약점 검출부는, 상기 질의 관련 정보에 근거하여 질의문을 생성하는 질의문 생성부 및, 상기 생성된 질의문에 근거하여, 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 소스 코드의 블록 또는 행을 검출하는 질의 처리부를 포함하며, 상기 질의문은, 상기 추상 구문 트리에 기반한 구문 오류 검출을 위한 질의어, 상기 제어 흐름 그래프에 기반한 제어 흐름의 오류를 검출하기 위한 질의어, 및 상기 데이터 흐름 그래프에 기반한 데이터 흐름의 오류를 검출하기 위한 질의어 중 적어도 두 개를 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 질의 관련 정보는, CWE(Common Weakness Enumeration) ID이며, 상기 질의문 생성부는, 입력된 CWE ID에 대응하는 보안 취약점 정보 목록(CWE)를 포함하는 체커 패키지를 더 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 질의문 생성부는, 상기 질의 관련 정보가 입력되면, 기 설정된 질의 명세 규칙에 따른 상기 입력된 질의 관련 정보에 대응하는 질의문을 생성하며, 상기 질의 관련 정보로서 질의문이 입력되는 경우, 상기 질의 명세 규칙에 근거하여 상기 입력된 질의문에 오류가 있는지 여부를 검출하는 것을 특징으로 한다.
또한 상술한 목적을 달성하기 위한 본 발명의 실시 예에 따른 보안 취약점 검출 방법은, 프로그램 소스 코드를 입력받는 단계와, 입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및, 추상 구문 트리를 생성하는 단계와, 상기 소스 코드의 각 블록을 기준으로 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합 및, 상기 소스 코드의 각 블록에 대응하는 상기 추상 구문 트리의 각 노드들을 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합 결과에 연결하여 합성 그래프를 생성하는 단계와, 검출 대상 보안 취약점을 포함하는 질의 관련 정보를 입력받는 단계와, 입력된 질의 관련 정보에 대응하는 질의문을 분석하는 단계와, 상기 질의문에 따라 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 상기 소스 코드의 적어도 하나의 블록 또는 행을 검출하는 단계 및, 검출된 적어도 하나의 블록 또는 행을 보안 취약점으로 출력하는 단계를 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 소스 코드를 입력받는 단계는, 상기 소스 코드를 기 설정된 기준에 따라 적어도 하나의 블록으로 구분하는 단계 및, 상기 소스 코드를 각각의 행으로 구분하는 단계를 더 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 합성 그래프를 생성하는 단계는, 상기 데이터 흐름 그래프의 노드들을, 상기 제어 흐름 그래프의 대응되는 블록에 각각 표시하여, 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프를 통합하는 단계와, 상기 소스 코드의 각 블록들을 기준으로 상기 추상 구문 트리를 복수의 그룹으로 분해하는 단계 및, 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프 통합 결과에 따라 구분된 각각의 블록에, 상기 분해된 추상 구문 트리의 각 그룹들을 연결하여 표시하는 단계를 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 질의 관련 정보를 입력받는 단계는, 상기 질의 관련 정보에 근거하여 기 설정된 질의 명세 규칙에 따른 질의문을 생성하는 단계를 더 포함하며, 상기 질의문은, 상기 추상 구문 트리에 기반한 구문 오류 검출을 위한 질의어, 상기 제어 흐름 그래프에 기반한 제어 흐름의 오류를 검출하기 위한 질의어, 및 상기 데이터 흐름 그래프에 기반한 데이터 흐름의 오류를 검출하기 위한 질의어 중 적어도 두 개를 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 질의 관련 정보는, CWE(Common Weakness Enumeration) ID이며, 상기 질의 관련 정보를 입력받는 단계는, 보안 취약점 정보 목록(CWE)을 포함하는 체커 패키지로부터 상기 CWE ID에 대응하는 보안 취약점 정보를 식별하는 단계를 더 포함하는 것을 특징으로 한다.
일 실시 예에 있어서, 상기 질의문 분석 단계는, 입력된 질의문을 기 설정된 질의 명세 규칙에 따라 분석하여 오류가 있는지 여부를 검출하는 단계를 더 포함하는 것을 특징으로 한다.
본 발명에 따른 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법의 효과에 대해 설명하면 다음과 같다.
본 발명의 실시 예들 중 적어도 하나에 의하면, 본 발명은 추상 구문 트리, 제어 흐름 그래프와 데이터 흐름 그래프를 통합한 합성 그래프를 이용하여 보안 취약점을 검출하도록 함으로써, 특정 구문의 오류 또는 제어 흐름이나 데이터의 흐름 중 어느 하나로는 검출하기 어려운 복합적 성향의 보안 취약점을 보다 쉽게 검출할 수 있도록 한다는 효과가 있다.
본 발명의 실시 예들 중 적어도 하나에 의하면, 본 발명은 사용자가 보안 취약점 목록(Common Weakness Enumeration, CWE)으로부터 키워드 또는 CWE 식별자(CWE ID)를 이용하여 소프트웨어의 취약점들을 분석할 수 있도록 함으로써, 사용자가 보안 취약점 및 검출에 관련된 전문적인 지식을 가지고 있지 않는 경우에도, 프로그램 소스 코드로부터 사용자가 보안 취약점을 검출할 수 있도록 한다는 효과가 있다.
도 1은 본 발명의 실시 예에 따른 보안 취약점 검출 장치의 구성을 설명하기 위한 블록도이다.
도 2는 본 발명의 실시 예에 따른 보안 취약점 검출 장치에서, 그래프 생성부의 구성을 보다 자세히 도시한 블록도이다.
도 3은 본 발명의 실시 예에 따른 보안 취약점 검출 장치에 입력되는 프로그램 소스 코드의 예를 도시한 예시도이다.
도 4는 상기 도 3에서 입력된 소스 코드로부터 생성되는 제어 흐름 그래프의 예를 도시한 예시도이다.
도 5는 상기 도 3에서 입력된 소스 코드로부터 생성되는 데이터 흐름 그래프의 예를 도시한 예시도이다.
도 6은 상기 도 3에서 입력된 소스 코드로부터 생성되는 추상 구문 트리의 예를 도시한 예시도이다.
도 7은 상기 도 6에서 생성된 추상 구문 트리에서, 각각의 소스 코드의 블록별로 구문이 구분된 예를 도시한 예시도이다.
도 8은 상기 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 합성한 합성 그래프의 예를 도시한 예시도이다.
도 9는 본 발명의 실시 예에 따른 보안 취약점 검출 장치에서, 보안 약점 검출부의 구성을 보다 자세히 도시한 블록도이다.
도 10은 본 발명의 실시 예에 따른 보안 취약점 검출 장치에서 사용되는 질의문 명세 규칙들을 도시한 예시도이다.
도 11은 본 발명의 실시 예에 따른 보안 취약점 검출 장치가, 입력된 소스 코드로부터 보안 취약점을 검출하는 동작 과정을 도시한 흐름도이다.
본 명세서에서 사용되는 기술적 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아님을 유의해야 한다. 또한, 본 명세서에서 사용되는 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "구성된다." 또는 "포함한다." 등의 용어는 명세서상에 기재된 여러 구성 요소들, 또는 여러 단계를 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 본 명세서에 개시된 기술을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 기술의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
이하, 첨부된 도면을 참조하여 본 명세서에 개시된 실시 예들을 상세히 설명하도록 한다.
먼저 본 발명의 완전한 이해를 돕기 위해, 본 발명의 기본 원리를 설명하면 본 발명에서는, 제어 흐름 분석을 위해 입력된 프로그램 소스 코드로부터 제어 흐름 그래프(Control Flow Graph, CFG)를 생성하고, 데이터 흐름 분석을 위해 상기 소스 코드로부터 데이터 흐름 그래프(Data Flow Graph, DFG)를 생성한다. 그리고 상기 소스 코드의 구문 오류를 분석하기 위해 추상 구문 트리(Abstract Syntax Tree, AST)를 생성할 수 있다.
한편 본 발명은 상기 생성된 제어 흐름 그래프와 데이터 흐름 그래프, 그리고 추상 구문 트리를 통합하여 하나의 합성 그래프를 생성하고, 생성된 합성 그래프에 사용자로부터 입력된 질의문을 통해 검출하고자 하는 보안 취약점을 상기 합성 그래프로부터 검출함으로써, 입력된 소스 코드에 대한 보안 취약점 검출이 이루어질 수 있도록 한다. 이처럼 본 발명은 제어 흐름 그래프와 데이터 흐름 그래프, 그리고 추상 구문 트리를 합성한 합성 그래프를 통해 보안 취약점 검출을 수행함으로써, 제어 흐름 분석, 데이터 흐름 분석, 및 구문 오류 분석 각각의 특성에 따른 보안 취약점 분석만으로는 검출하기 어려운 복합적인 특성을 가지는 보안 취약점의 검출이 이루어질 수 있도록 한다.
도 1은 이러한 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 구성을 설명하기 위한 블록도이다.
도 1을 참조하여 살펴보면, 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)는 제어부(110)와, 상기 제어부(110)에 의해 제어되며 상기 제어부(110)와 연결되는 입력부(120), 저장부(130), 출력부(140), 그리고 그래프 생성부(150)와 보안 약점 검출부(160)를 포함하여 구성될 수 있다. 도 1에 도시된 구성요소들은 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)를 구현하는데 있어서 필수적인 것은 아니어서, 상기 보안 취약점 검출 장치(100)는 위에서 열거된 구성요소들 보다 많거나, 또는 적은 구성요소들을 가질 수 있다.
우선 입력부(120)는 사용자로부터 입력되는 프로그램 소스 코드에 관련된 데이터 및 상기 보안 취약점 검출에 필요한 각종 데이터를 입력받을 수 있다. 예를 들어 상기 입력부(120)는 상기 소스 코드 말고도 보안 취약점 검출에 사용될 수 있은 질의어 또는 CWE ID에 관련된 정보들을 사용자로부터 입력받을 수 있다. 이를 위해 상기 입력부(120)는 다른 기기와 유선 또는 무선 통신이 가능하도록 설계될 수 있으며, 상기 유선 또는 무선 통신으로 연결된 다른 기기로부터 상기 소스 코드 데이터 및 관련된 각종 데이터들을 입력받을 수 있다.
한편 출력부(140)는 입력된 소스 코드로부터 본 발명의 실시 예에 따른 보안 취약점 검출이 완료되면 그 결과를 출력할 수 있다. 예를 들어 상기 출력부(140)는 보안 취약점이 발견된 소스 코드의 특정 구문이나 행, 또는 블록에 관련된 정보를 사용자가 식별할 수 있는 형태의 정보로 출력할 수 있다. 이를 위해 상기 출력부(140)는 화상 정보를 표시할 수 있는 디스플레이를 포함하는 적어도 하나의 표시부를 포함할 수 있으며, 음향 신호를 출력할 수 있는 오디오부를 포함할 수도 있다. 또는 상기 검출 결과를 하드 카피(hard copy) 형태로 출력하기 위한 인쇄부를 포함할 수도 있다.
한편 그래프 생성부(150)는 입력된 소스 코드로부터 보안 취약점 분석을 위한 다양한 그래프들을 생성할 수 있다. 예를 들어 상기 그래프 생성부(150)는 입력된 소스 코드를 분석한 결과로부터 제어 흐름 그래프(CFG), 데이터 흐름 그래프(DFG), 추상 구문 트리(AST)를 생성할 수 있다. 또한 생성된 각 그래프들 중 적어도 두개를 통합하여 합성 그래프를 생성할 수 있다. 이하 도 2를 참조하여 상기 그래프 생성부(150)의 구성을 보다 자세하게 살펴보기로 한다.
그리고 보안 약점 검출부(160)는 상기 입력부(120)로부터 입력된 질의어 또는 CWE ID에 관련된 정보들과 상기 그래프 생성부(150)에서 생성된 합성 그래프에 근거하여 현재 입력된 소스 코드 상에 존재하는 보안 취약점을 분석할 수 있다. 이를 위해 상기 보안 약점 검출부(160)는 입력된 CWE ID에 대응하는 보안 취약점 관련 정보를 검출하고 검출된 보안 취약점 정보를 검출하기 위한 질의문을 생성할 수 있다. 또는 사용자로부터 특정 보안 취약점에 대응하는 질의어를 입력받고 이를 기 설정된 질의 명세 규칙에 따라 질의문으로 생성할 수 있다. 그리고 생성된 질의문에 따라 상기 그래프 생성부(150)에서 생성된 합성 그래프를 분석하여 입력된 소스 코드로부터 특정 보안 취약점에 대응하는 부분이 있는지를 검출하고, 검출 결과를 제어부(110)로 전송할 수 있다. 그러면 제어부(110)는 전송된 검출 결과를 출력부(140)를 통해 출력할 수 있다. 이하 도 9를 참조하여 상기 보안 약점 검출부(160)의 구성을 보다 자세하게 살펴보기로 한다.
한편 저장부(130)는 제어부(110)의 동작과 관련된 다양한 데이터들을 저장할 수 있다. 예를 들어 저장부(130)는 입력부(120)를 통해 입력되는 데이터들, 즉 보안 취약점 검출 대상인 프로그램 소스 코드에 관련된 데이터, 상기 질의어 및 CWE ID에 관련된 데이터들, 또는 상기 CWE ID에 대응하는 보안 취약점을 식별하기 위한 보안 취약점 목록의 정보 등을 저장할 수 있다.
또한 상기 저장부(130)는 상기 그래프 생성부(150)에서 생성된 다양한 그래프들, 즉 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리 및, 상기 제어 흐름 그래프와 데이터 흐름 그래프, 그리고 추상 구문 트리를 통합한 합성 그래프를 저장할 수 있다. 그리고 상기 보안 약점 검출부(160)로부터 검출된 보안 취약점 관련 정보들을 상기 출력부(140)를 통해 출력하기 위해 저장할 수 있다.
한편 제어부(110)는 입력부(120)를 통해 프로그램 소스 코드가 입력되면 입력된 소스 코드를 분석하여 각 블록별, 각 구문 또는 각 행을 구분하여 식별할 수 있다. 그리고 연결된 다른 구성 요소들을 제어하여 상기 블록별, 구문 또는 행 별로 구분된 소스 코드로부터 보안 취약점을 검출할 수 있다.
즉, 제어부(110)는 입력부(120)를 통해 프로그램 소스 코드가 입력되면 프로그램 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 생성하고, 그 결과에 따라 합성 그래프가 생성되도록 상기 그래프 생성부(150)를 제어할 수 있다. 또한 상기 입력부(120)를 통해 질의 관련 정보, 즉 CWE ID 또는 질의어가 입력되면, 입력된 질의 관련 정보로부터 기 설정된 질의 명세 규칙에 따른 질의문이 생성되도록 하고, 상기 질의문과 상기 합성 그래프를 통해 상기 프로그램 소스 코드로부터 보안 취약점을 검출하도록 상기 보안 약점 검출부(160)를 제어할 수 있다. 그리고 검출 결과를 상기 출력부(140)를 통해 출력하도록 상기 출력부(140)를 제어할 수 있다.
도 2는 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)에서, 그래프 생성부(150)의 구성을 보다 자세히 도시한 블록도이다.
도 2를 참조하여 살펴보면 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 그래프 생성부(150)는 CFG 생성부(200), DFG 생성부(210), AST 생성부(220) 및 합성부(230)를 포함하여 구성될 수 있다.
여기서 상기 CFG 생성부(200)는 상기 제어부(110)에 의해 블록별, 구문 또는 행별로 구분된 소스 코드를 분석하여, 각 블록별로 상기 소스 코드에 따른 프로그램이 제어되는 흐름을 나타내는 그래프, 즉 제어 흐름 그래프(Control Flow Graph)를 생성할 수 있다. 예를 들어 상기 제어 흐름 그래프는 상기 구분된 각 블록에 대응하는 각 노드 간에, 상기 소스 코드에 대응하는 프로그램의 실행 순서에 따라 경유할 수 있는 모든 노드의 경로를 그래프 표기법을 사용하여 표현한 것이다.
한편 상기 DFG 생성부(210)는 데이터 흐름 그래프(Data Flow Graph)를 생성할 수 있다. 여기서 상기 데이터 흐름 그래프는 상기 소스 코드에 대응하는 프로그램이 수행하고자 하는 작업을 구분된 각각의 행별 또는 구문별 개별 연산들의 의존 관계 및 선후 관계에 따라 그래프 표기법을 사용하여 표현한 것일 수 있다. 데이터 흐름 그래프를 구성하는 각각의 노드들은 상기 구분된 행 또는 구문이 될 수 있으며, 상기 데이터 흐름 그래프는 구분된 각 구문 또는 행 별로 데이터의 출처가 다른 데이터의 갱신에 영향을 주는 영향을 추적하기 위해 사용될 수 있다.
또한 상기 AST 생성부(220)는 추상 구문 트리(Abstract Syntax Tree)를 생성할 수 있다. 여기서 추상 구문 트리는 상기 소스 코드에서 발생되는 구조체들을 트리 구조의 형태로 표현한 것이며, 상기 각 구조체들은 소스 코드의 각 값, 즉 각각의 변수 및 각 값에 대한 연산 또는 조건들이 될 수 있다.
한편 합성부(230)는 상기 CFG 생성부(200)에서 생성된 제어 흐름 그래프와, DFG 생성부(210)에서 생성된 데이터 흐름 그래프, 그리고 AST 생성부(220)에서 생성된 추상 구문 트리를 하나의 그래프로 합성할 수 있다. 여기서 합성부(230)는 소스 코드의 각 블록을 기준으로 제어 흐름 그래프를 구성하는 각각의 노드들을 구분하여 표시할 수 있다. 예를 들어 합성부(230)는 상기 제어 흐름 그래프의 각 블록에, 대응하는 데이터 흐름 그래프의 각 노드들을 표시하고 각 노드들 간의 데이터 흐름 관계를 표시할 수 있다. 즉, 제어 흐름 그래프의 각 블록들 내에 대응하는 데이터 흐름 그래프의 각 노드들을 표시함으로써 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합할 수 있다.
한편 합성부(230)는 상기 추상 구문 트리를 구성하는 각 노드들은 상기 블록에 따라 서로 다른 상태(state)로 구분할 수 있다. 그리고 구분된 각 상태 별로 상기 추상 구문 트리의 노드들을 분해하고, 분해된 각 추상 구문 트리의 각 부분들을 상기 제어 흐름 그래프와 데이터 흐름 그래프를 통합한 결과에 연결할 수 있다. 여기서 합성부(230)는 상기 분해된 각 추상 구문 트리의 각 부분들을 대응하는 소스 코드의 각 블록에 연결시킬 수 있다. 이에 따라 상기 분해된 추상 구문 트리의 각 부분들은 상기 제어 흐름 그래프를 따라 서로 연결되는 각 블록들을 따라 연결될 수 있다. 이에 따라 상기 추상 구문 트리와 상기 제어 흐름 그래프가 서로 통합될 수 있다.
한편 합성부(230)는, 상기 데이터 흐름 그래프와 상기 제어 흐름 그래프를 합성한 결과와 상기 추상 구문 트리와 상기 제어 흐름 그래프를 합성한 결과를 다시 통합할 수 있다. 예를 들어 상기 제어 흐름 그래프를 합성한 결과와 상기 추상 구문 트리와 상기 제어 흐름 그래프를 합성한 결과는 소스 코드의 각 블록을 기준으로 서로 통합될 수 있다. 즉 합성부(230)는 제어 흐름 그래프의 각 블록들 내에 대응하는 데이터 흐름 그래프의 각 노드들을 표시하고, 추상 구문 트리의 각 블록에 대응하는 부분들을 상기 데이터 흐름 그래프의 각 노드들이 표시된 제어 흐름 그래프의 블록을 따라 서로 연결함으로써, 상기 제어 흐름 그래프와 데이터 흐름 그래프, 그리고 추상 구문 트리를 통합한 합성 그래프를 생성할 수 있다.
이하 도 3 내지 도 8을 참조하여, 상기 합성부(230)가 합성 그래프를 생성하는 예를 보다 자세히 설명하기로 한다.
먼저 도 3을 참조하여 살펴보면, 도 3은 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)에서 상기 합성 그래프를 생성하는 예를 설명하기 위해 입력되는 프로그램 소스 코드의 예를 보이고 있는 것이다.
예를 들어 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 제어부(110)는 입력부(120)를 통해 프로그램 소스 코드가 입력되면, 입력된 소스 코드를 각각의 블록 별(300, 310, 320, 330)로 구분할 수 있다. 예를 들어 제어부(110)는 프로그램 소스 코드로부터 발견되는 각 조건 또는 기능에 따라 상기 소스 코드를 각각의 블록으로 구분할 수 있다.
예를 들어 제어부(110)는 도 3에서 보이고 있는 소스 코드로부터 특정 조건에 따라 서로 다른 데이터가 갱신되는 조건문(IF 구문)을 기준으로 블록을 구분할 수 있다. 즉 상기 조건문에 의해 분기가 이루어지기 이전의 부분을 제1 블록(300)으로 구분할 수 있고, 상기 조건문에 의해 지정된 조건이 충족되는 경우와 상기 조건문에 의해 지정된 조건이 충족되지 않는 경우 각각에 따른 구문들을 서로 다른 블록들로 구분할 수 있다. 이하 상기 지정된 조건이 충족되는 경우에 프로그램의 실행 순서에 따라 실행되는 구문들은 제2 블록(320)으로, 상기 지정된 조건이 충족되지 않는 경우에 프로그램의 실행 순서에 따라 실행되는 구문들은 제3 블록(320)이 될 수 있다.
한편 제어부(110)는 상기 조건문에 따른 분기가 완료된 이후에 프로그램의 실행 순서에 따라 실행되는 구문들은 상기 조건문에 따라 분기되는 블록들과는 또 다른 블록(제4 블록 : 330)으로 구분할 수 있다. 상기 구분된 각 블록들은 도 3에서 보이고 있는 바와 같이 접두사 B와 숫자의 조합으로 구분될 수 있다.
또한 제어부(110)는 상기 입력된 소스 코드의 각 구문 또는 각 행들을 구분할 수 있다. 구분된 각 구문 또는 행들(302 내지 306, 312 내지 314, 322 내지 324, 332)은 도 3에서 보이고 있는 바와 같이 접두사 I및 숫자의 조합으로 구분될 수 있다.
한편 이처럼 입력된 소스 코드가 복수의 블록 및 복수의 행 또는 구문(이하 설명의 편의상 '행'으로 통합하여 설명하기로 한다)으로 구분되면, 제어부(110)는 블록 및 행 별로 구분된 소스 코드를 그래프 생성부(150)에 입력할 수 있다. 그러면 그래프 생성부(150)는 상기 입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 생성하고, 생성된 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 합성할 수 있다.
먼저 그래프 생성부(150)는 CFG 생성부(200)를 통해 제어 흐름 그래프를 생성할 수 있다. 즉, 도 3에서 보이고 있는 바와 같이 조건문에 의해 제2 블록(310) 또는 제3 블록(320)으로 다르게 프로그램이 진행되는 분기가 있는 경우라면, CFG 생성부(200)는 도 4에서 보이고 있는 바와 같이, 제1 블록(300) 이후에 제2 블록(310), 또는 제3 블록(320)으로 분기 및, 상기 제2 블록(310) 또는 제3 블록(320) 이후에 제4 블록(330)이 진행되는 제어 흐름 그래프를 생성할 수 있다. 도 4는 이처럼 생성된 제어 흐름 그래프의 예를 보이고 있는 것이다.
한편 그래프 생성부(150)는 DFG 생성부(210)를 통해 데이터 흐름 그래프를 생성할 수 있다. 데이터 흐름 그래프는 상술한 바와 같이 데이터의 출처가 다른 데이터의 갱신에 주는 영향을 추적하기 위한 것으로, 각 데이터가 갱신되는 각 행이 각각의 노드가 될 수 있으며, 어느 한 행의 출력값이 다른 행의 변수(또는 인수)가 될 때, 상기 어느 한 행과 다른 행이 서로 연결되도록 표기될 수 있다. 이에 따라 DFG 생성부(210)는 도 5에서 보이고 있는 바와 같이, 각 행들(302 내지 306, 312 내지 314, 322 내지 324, 332)에 대응되는 노드들이 서로 연결되는 데이터 흐름 그래프를 생성할 수 있다.
한편 그래프 생성부(150)는 AST 생성부(220)를 통해 추상 구문 트리를 생성할 수 있다. AST 생성부(220)는 도 6에서 보이고 있는 바와 같이, 입력된 소스 코드의 각 변수(또는 인수) 및 상기 각 변수의 연산 과정들을 각각의 노드로 포함하는 그래프를 생성할 수 있다. 여기서 상기 연산 과정은 연산 기호로 표시될 수 있으며, 각 연산 기호에 의해 서로 연결된 복수의 변수에 따라 각각의 행이 표현될 수 있다.
한편 그래프 생성부(150)는 CFG 생성부(200), DFG 생성부(210), AST 생성부(220)를 통해 각각 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리가 생성되면, 합성부(230)를 통해 합성할 수 있다. 이를 위해 먼저 합성부(230)는 상기 추상 구문 트리를 각각의 블록 별로 구분할 수 있다.
도 7은 이와 같이 상기 도 6에서 생성된 추상 구문 트리에서, 각각의 소스 코드의 블록별로 구문이 구분된 예를 도시한 예시도이다.
도 7을 살펴보면, 합성부(230)는 먼저 제1 블록(300)에 해당하는 행들에 대응되는 노드들을 제1 스테이트(700)로 구분할 수 있다. 그리고 조건문, 즉 IF 문에 의해 분기되는 제2 블록(310) 및 제3 블록(320)을 각각 서로 다른 스테이트로 구분할 수 있다. 예를 들어 상기 조건문에 지정된 조건이 충족되는 경우에 수행되는 행들에 대응되는 노드들은 IF-Body에 대응하는 제2 스테이트(710)로, 상기 조건문에 지정된 조건이 충족되지 않는 경우에 수행되는 행들에 대응되는 노드들은 ELSE-Body에 대응하는 제3 스테이트(720)로 구분할 수 있다. 그리고 상기 조건문에 따른 분기가 완료된 이후에 프로그램의 실행 순서에 따라 실행되는 행들에 대응되는 노드들은 제4 스테이트(730)로 구분할 수 있다.
이처럼 추상 구문 트리의 각 노드들이 각각의 블록에 따라 복수의 스테이트로 분해되면, 합성부(230)는 상기 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 통합하여 합성 그래프를 생성할 수 있다. 도 8은 이처럼 합성부(230)가 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 통합한 합성 그래프의 예를 도시한 예시도이다.
먼저 합성부(230)는 제어 흐름 그래프의 블록들(300, 310, 320, 330) 각각에, 각 블록에 대응하는 데이터 흐름 그래프의 각 노드들을 표시할 수 있다. 이에 따라 도 8에서 보이고 있는 바와 같이 제1 블록(300)에는 제1 블록(300)에 대응하는 노드들(302, 304, 306)이 표시될 수 있다. 그리고 제2 블록(310) 및 제3 블록(320)에는 각각 제2 블록(310)에 대응하는 노드들(312, 314)과 제3 블록(320)에 대응하는 노드들(322, 324)이 표시될 수 있다. 그리고 제4 블록(330)에는 제4 블록(330)에 대응하는 노드(332)가 표시될 수 있다. 그리고 데이터 흐름 그래프에 따라 각 노드들 간에 연결 상태가 표시될 수 있다.
한편 이처럼 제어 흐름 그래프의 각 블록들 내에 대응하는 데이터 흐름 그래프의 각 노드들이 표시됨으로써 상기 제어 흐름 그래프와 데이터 흐름 그래프는 서로 통합될 수 있다. 그리고 이러한 상태에서 상기 도 7에서 보이고 있는 바와 같이 각 블록 별로 분해된 추상 구문 트리의 각 부분들, 즉 스테이트(700, 710, 720, 730)로 구분된 노드 그룹들을, 도 8에서 보이고 있는 바와 같이 각각의 블록에 연결하여 표시할 수 있다. 즉 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합된 그래프의 각 블록에, 소스 코드의 블록을 기준으로 분해된 추상 구문 트리의 각 노드들을 연결하여 표시함으로써, 도 8에서 보이고 있는 바와 같이 상기 제어 흐름 그래프와 데이터 흐름 그래프, 그리고 추상 구문 트리가 서로 통합된 합성 그래프를 생성할 수 있다.
한편 상기 도 8에서 보이고 있는 바와 같이 합성 그래프가 생성되면, 제어부(110)는 상기 합성 그래프를 저장할 수 있다. 그리고 입력부(120)를 통해 입력된 질의어 또는 CWE ID가 입력되면, 입력된 질의어 또는 CWE ID에 따라 생성된 질의문과 상기 합성 그래프에 근거하여 상기 프로그램 소스 코드에 존재하는 보안 취약점을 검출하도록 보안 약점 검출부(160)를 제어할 수 있다.
도 9는 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)에서, 보안 약점 검출부(160)의 구성을 보다 자세히 도시한 블록도이다.
도 9를 참조하여 살펴보면 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 보안 약점 검출부(160)는 체커 패키지(250)와 질의문 생성부(260) 및 질의 처리부(270)를 포함하여 구성될 수 있다.
여기서 상기 체커 패키지(250)는 사용자가 CWE ID를 입력하는 경우 입력된 CWE ID에 대응하는 보안 취약점 정보를 구분하기 위한 정보일 수 있다. 이를 위해 상기 체커 패키지는 CWE ID에 대응하는 다양한 보안 취약점 정보, 즉 체커(checker)들에 대한 정보를 포함할 수 있다. 예를 들어 상기 체커들은 특정 보안 취약점에 대해 체크하여야 할 다양한 정보들, 즉 오류가 발생할 수 있는 구문의 정보 또는 변수들의 연산 관계에 대한 정보를 포함할 수 있다.
이러한 체커들에 대응하는 보안 취약점에 대응되는 상세한 정보들은 저장부(130)에 저장될 수 있다. 따라서 보안 약점 검출부(160)는 사용자가 CWE ID를 입력하는 경우, 입력된 CWE ID에 대응하는 보안 취약점을 상기 체커 패키지(250)를 통해 식별할 수 있으며, 식별된 보안 취약점에 관련된 정보들을 제어부(110)의 제어에 따라 저장부(130)에 저장된 정보로부터 로드(load)할 수 있다.
한편 질의문 생성부(260)는 사용자로부터 입력된 CWE ID에 대응하는 보안 취약점 정보 또는 사용자로부터 입력되는 질의어에 대응하여, 기 설정된 질의 명세 규칙에 따른 질의문을 생성할 수 있다. 이를 위해 상기 질의문 생성부(260)는 상기 질의 명세 규칙에 대한 정보를 포함할 수 있으며, 상기 질의문 작성을 위한 보안 취약점 정보들이 사용자로부터 입력 또는 상기 저장부로부터 로드되는 경우, 상기 질의 명세 규칙에 따른 질의문을 생성할 수 있다. 또는 상기 질의문 생성부(260)는 사용자가 작성한 질의문이 상기 입력부(120)를 통해 입력되는 경우, 상기 질의 명세 규칙에 따라 오류가 있는지 여부를 검사하고, 오류가 있는 경우 검출된 오류에 대한 정보를 상기 제어부(110)의 제어에 따라 출력부(140)를 통해 출력할 수도 있다.
도 10은 이러한 질의문 명세 규칙들을 도시한 것이다.
여기서 상기 도 10에서 도시된 질의문 명세 규칙의 각 구문별 기호는 하기와 같다.
- rule: 보안약점 검출 규칙 표현. 하나의 보안약점을 검출하기 위한 규칙으로, 하나의 패턴 또는 여러 개의 패턴의 연속으로 기술할 수 있음. 검출 규칙을 위해 필요한 그룹 설정이나 노드 검출 규칙을 먼저 기술할 수 있음.
- group_def: 유사한 기능이나 성격을 가지는 함수나 이름의 그룹을 정의하기 위하여 사용. 정의한 그룹은 여러 보안약점 검출 규칙에서 사용될 수 있음.
- match_rule: 조건에 맞는 노드나 노드 사이의 관계 검출. 조건에 맞는 노드를 미리 검사하여 이름을 부여함으로써 보안약점 검사에 사용할 수 있도록 함.
- vul_pattern: 보안약점에 해당하는 규칙. 구문 트리 정보와 제어 흐름, 데이터 흐름 정보를 기반으로, 어떤 노드와 노드 사이의 관계가 존재하느냐 여부를 가지고 보안약점 패턴을 기술함.
- node_pattern: 그래프에서의 노드 표현. 노드는 이름을 지정하여 조건이나 이후 패턴에서 사용할 수 있으며, 속성 이름과 값의 쌍으로 정보 표현 가능. 속성의 이름은 언어의 요소에 따라서 다르게 지정할 수 있으므로 확장성을 가짐.
- node_attrs: 노드가 가질 수 있는 속성 표현. 예를 들어, 값이나 타입, 노드 종류 등 다양한 정보를 포함할 수 있으며, 보안약점 검출을 위한 규칙에서 조건 검사를 위하여 사용될 수 있음.
- attr_value: 속성 값. 속성 이름에 따라 값을 가짐. 정수나 실수, 문자열로 표현 가능하며, 언어에 따라, 속성의 이름에 따라 표현이 제한될 수 있음.
- num_range: 숫자의 범위 표현. 기호 기반 실행이나 요약 실행에 의해 값을 유추하는 경우 가질 수 있는 값의 범위를 표현하기 위하여 사용.
- num_kind: 값의 범위에 사용될 수 있는 표현. 숫자이거나 숫자 값을 가질 수 있는 속성 이름으로 표현.
- name: 노드와 그룹, 속성 등의 이름.
- num: 숫자 표현을 위하여 사용. 정수와 실수 표현이 가능함.
- string: 문자열을 나타냄. 영문 대소문자와 숫자, 특수문자의 조합으로 나타냄.
- rel_pattern: 노드 사이의 관계 표현. rel_kind에 따라 어떤 관계를 나타내는지 표현하며, 화살표를 이용하여 방향성을 표현할 수 있음. 필요에 따라 속성 이름과 값의 쌍으로 정보 표현 가능.
- rel_attrs: 노드 사이의 관계가 가질 수 있는 속성 표현. 관계의 종류와 속성을 기술하며, 경로에 포함되어야 하는 관계의 수를 제한하고자 할 때는 [a..b] 형태로 표현.
- rel_kind: 관계의 종류 표현. 구문에서의 자손 관계를 나타내는 것과 제어 흐름, 데이터 흐름 관계로 구분될 수 있으며, 제어/데이터 흐름 관계는 다시 반드시 존재해야 하는 것(MUST)과 존재하기만 하면 되는 것(EXIST)으로 구분됨.
- conds: 제한조건. 노드나 노드 사이의 관계에 대한 제한조건을 표현하는 것으로, 논리 연산을 통하여 여러 조건을 조합하여 사용 가능.
- cond: 각각의 제한조건 표현. 노드나 관계 이름, 혹은 노드나 관계 속성 이름에 대하여 그룹에 속하거나 특정 값의 범위를 가지거나 값을 포함하는지 여부로 표현. IN과 NOT_IN은 관계에 포함되는지 여부나 값의 범위에 포함되는지 여부를 표현하는데 사용되며, 값의 범위를 표현하기 위해 사용되는 관계 연산, 같은 이름의 속성이 여러 개인 경우 속성에 특정 값이 포함되는지 여부를 위해 사용되는 CONTAINS, NOT_CONTAINS 사용.
- cond_name: 조건에 사용되는 이름. 노드 이름인 경우 그 이름을 그대로 사용하고, 속성 이름인 경우에는 "노드이름.속성이름" 형태로 표현.
- relop: 관계연산자.
- logicalop: 논리연산자. 보안약점 검출 규칙 사이의 논리적 연결 관계 표현을 위하여 사용.
- alpha: loweralpha와 upperalpha를 사용하여 영문 대소문자 표현.
- digit: 숫자 표현을 위하여 사용. 0~9 사이의 문자로 표현.
- special: 특수문자 표현.
한편 상기 도 10에서 도시된 질의문 명세 규칙의 각 노드 표현은 하기와 같다.
- node_pattern: 노드는 구문 정보나 제어/데이터 흐름 정보를 표현하는 하나의 단위이다. 노드는 '('와 ')' 기호를 사용하여 표현하며, 이름과 속성으로 구성할 수 있다. 노드 이름은 노드를 구분하기 위하여 사용하며, match_rule에서 부여한 이름을 그대로 사용하거나, 검출 규칙에서 이름을 부여하여 사용할 수 있다. 노드 속성은 이름과 값의 쌍으로 사용할 수 있으며, ' {'와 '}' 사이에 ','로 구분된 여러 개의 값을 쓸 수 있다.
- node_attrs: 노드 속성은 이름과 값으로 구성되는데, 속성 이름은 기본적으로 구문 트리가 저장하는 정보나 정적 분석을 위해 필요한 정보들을 추가적으로 가질 수 있다. 속성에 대해서는 도구에서 사용할 자료구조에서 어떤 값을 저장하느냐에 따라 달라질 수 있다.
한편 상기 도 10에서 도시된 질의문 명세 규칙의 각 노드 속성은 하기와 같다.
속성은 동일한 이름에 여러 개의 값을 가질 수 있다. 예를 들어, 변수의 접근 지정자, 기억영역 클래스, 상수 속성 등을 모두 "qualifier"라는 이름을 사용하여 지정하는 것으로 정의했다면, "qualifier"라는 이름으로 여러 속성을 표현하는 것이 가능하다.
기본적으로 가질 수 있는 속성은 다음과 같다.
- kind: 노드의 종류를 나타내기 위한 속성으로, 구문 트리의 노드가 가지는 것과 같이 어떤 구조를 표현하는지 나타낼 수 있다. 예를 들어 선언(decl), 문장(stmt), 수식(expr), 변수(var), 상수(const), 레이블(label) 등의 값을 가지며 그 값에 따라 type이 가질 수 있는 값이 달라질 수 있다.
- name: 노드가 가지는 이름을 표현한다. 예를 들어, 변수나 함수인 경우 변수나 함수의 이름을 들 수 있다.
- value: 노드가 가지는 값을 나타낸다. 상수에 해당하는 경우 그 값을 가지며, 분석 단계에서 기호 기반 실행이나 요약해석과 같은 방법으로 추정 가능한 경우 값의 범위를 가질 수 있다.
- type: 노드 속성 kind에 따라 서로 다른 값을 가지는 속성으로 가정한다. 변수나 상수인 경우에는 실제 자료형을 나타낼 수 있는데, 일반적으로 컴파일 단계에서는 심볼 테이블을 사용하여 타입 검사를 수행하나, 의미 분석 과정을 거치면서 타입 정보를 노드에 부가한 것으로 가정한다. 예를 들어 type 속성은 kind 값에 따라 다음과 같은 값을 가진다고 가정한다.
1) kind 값이 "decl"인 경우에는 선언에 해당하므로 class(클래스 선언), func(함수 선언), method(메소드 선언), field(멤버 변수 선언), var(변수 선언)과 같은 값을 가짐.
2) kind가 "stmt"인 경우 문장의 종류 표현.
3) kind가 "expr"인 경우 연산자 종류를 구분하기 위하여 type 사용.
4) kind가 "var"인 경우 기본적으로 자료형에 해당하는 값을 표현하기 위한 것이며, 기억영역 클래스에 해당하는 자료도 포함할 수 있음. 포인터 타입인 경우 type 속성에 "pointer"라는 값과 대상 자료형을 모두 가짐. 예를 들어 지역변수이면서 "int *"인 경우는 { type: "int", type: "pointer", type: "auto" }와 같이 세 개의 type 속성 값을 가질 수 있음.
한편 상기 도 10에서 도시된 질의문 명세 규칙의 각 관계 표현은 하기와 같다.
- rel_pattern: 관계의 속성과 함께 화살표로 방향성을 표현할 수 있다. 방향성이 필요 없는 경우와 순방향/역방향을 나타내는 화살표를 표현함으로써 한 노드가 두 개의 관계를 동시에 가지도록 표현할 수 있다.
- rel_attrs: 노드 사이의 관계는 기본적으로 해당되는 관계의 종류(구문에서의 자손 관계, 제어 흐름, 데이터 흐름)와 경로의 절대성(모든 경로, 경로 존재)으로 구분해주는 kind 속성을 가진다. kind는 반드시 존재해야 하는 정보이므로 다른 속성과 구분하여 표현한다. 그 외에 관계에 속성이 필요한 경우 노드 속성과 마찬가지로 추가할 수 있다. 노드 사이의 관계 연결 횟수, 즉, 경로 수에 제한을 두어야 하는 경우를 대비하여 [a..b] 형태의 횟수 표현을 할 수 있다. AST에서 직접 연결된 자식 노드를 표현하거나 직접 데이터 흐름을 표현하는 경우 [1..1]과 같이 사용할 수 있으며, 확장 가능성을 위하여 최솟값과 최댓값으로 표현할 수 있다.
- conds: 조건은 노드와 관계에 대해서 속성에 대한 제한 조건을 나타내며, 여러 개의 조건을 논리 연산자로 연결하여 사용할 수 있다.
- cond: 각각의 조건을 표현하기 위한 것으로, 조건에 사용되는 이름은 노드 이름에 속성 이름을 연결하여 사용할 수 있고, 어떤 그룹이나 최솟값과 최댓값 사이의 범위에 속하는지 여부, 값이 가질 수 있는 범위 표현, 속성이 여러 개인 경우 어떤 값을 포함하느냐 여부 등을 표현할 수 있다.
1) IN과 NOT_IN은 그룹에 속하는지 여부를 표현하거나 속성 값이 특정 범위에 포함되는지 여부를 표현하기 위해 사용한다.
2) 관계 연산자는 속성 값의 범위를 표현하기 위하여 사용한다.
3) CONTAINS와 NOT_CONTAINS는 하나의 속성 이름에 여러 개의 값을 사용한 경우(노드의 속성 부분에서 설명) 해당 속성이 값을 포함하고 있는지 여부를 표현한다. 예를 들어, a.qualifier CONTAINS "public"이라는 조건을 사용했다면, a라는 노드의 qualifier 속성 값 중 "public"이 있으면 true 값을 가지게 된다.
한편 질의 처리부(270)는 상기 체커 패키지(250)를 통해 분석된 CWE ID에 대응하는 보안 취약점 정보, 또는 사용자가 입력한 보안 취약점 정보를 포함하는 질의어에 근거하여 질의문을 작성할 수 있다. 또는 상기 보안 취약점 정보 또는 질의어를 포함하는 질의문이 입력되는 경우 상기 질의문 명세 규칙에 따라 오류가 있는지 여부를 검출할 수 있다. 그리고 생성된 질의문에 따라 상기 그래프 생성부(150)에서 생성된 합성 그래프를 분석하여, 상기 질의문에 포함된 보안 취약점이 프로그램 소스 코드에 존재하는지 여부를 검출할 수 있다.
여기서 상기 질의 처리부(270)의 보안 약점 검출 규칙은 하기와 같다.
- rule: 보안 취약점은 그룹 정의를 위한 group_def와 조건에 맞는 노드나 노드 사이의 관계를 미리 검색하는 match_rule, 보안 취약점 검출 규칙을 표현하는 vul_rule로 이루어질 수 있다. group_def와 match_rule은 필요한 경우 정의할 수 있다.
- group_def: 유사한 함수나 이름의 그룹이 필요한 경우에 정의하여 사용할 수 있다. 숫자 표현을 위한 자료형을 묶어서 사용하고자 한다면, numeric이라는 이름의 그룹에 숫자 표현을 위한 자료형 이름을 포함시킬 수 있다. 메모리 할당과 해제 관련된 함수의 그룹이나 위험하다고 판단되어 사용을 제한하는 함수 이름을 그룹으로 묶어서 한 번에 표현할 수 있다.
- match_rule: 조건에 부합하는 노드를 찾아 해당되는 노드에 이름을 부여하기 위하여 사용하는 규칙으로, 반드시 사용해야 하는 것은 아니나 미리 이름을 부여한 노드를 사용함으로써 보안약점 검출 규칙을 간결하게 표현할 수 있다.
- vul_rule: 보안약점을 검출하기 위한 규칙을 표현하는 부분으로, 보안약점을 표현하기 위한 규칙을 논리연산으로 묶어서 표현할 수 있으며, 일부 요건은 제외하기 위하여 EX를 사용할 수 있다.
- vul_pattern: 하나의 보안약점 검출 규칙을 나타내기 위한 것으로, 노드와 노드 사이의 관계, 조건으로 이루어진다. 어떤 조건을 가진 하나의 노드로 표현할 수도 있고, 노드와 노드 사이의 관계가 일치할 때 보안약점으로 검출할 수도 있다.
하기 [예]는 상기 질의 처리부(270)가 입력된 질의문과 합성 그래프에 근거하여 보안 취약점을 검출하기 위한 예를 설명하기 위해, 상기 질의 처리부(270)에 입력될 수 있는 질의문의 예를 보이고 있는 것이다. 상기 질의문의 예에서 선행 구문은 제1 구문으로, 후행 구문은 제2 구문으로 구분하여 설명하기로 한다.
[예]
1. MATCH (a: {kind: "stmt"}) WHERE a.type = "switchStmt"
2. (a) EX (a) -{KIND:DESC}-? (b: {kind: "label"}) WHERE b.name = "default"
상기 [예]는 CWE ID가 'CWE-478'인 'Missing Default Case in Switch Statement'을 검출하기 위한 질의문이다. 이 보안 취약점은 스위치 문에 디폴트 케이스 코드가 존재하지 않는 경우에 대한 것이다. 이처럼 스위치 문에 디폴트 케이스 코드가 존재하지 않는 경우 논리 오류를 발생시킬 수 있고, 이러한 논리 오류는 결과적으로 보안 취약점이 될 수 있다. 이러한 결함은 변수에 대한 모든 가능한 값이 주어진 프로세스에 의해 고려하거나 처리하는 소프트웨어 개발의 일반적인 문제를 나타낸다. 이러한 문제들은 잘못된 정보와 연계된 실패 결과들에 기초하며, 연계된 실패들은 수 개의 보안 문제나 시스템의 오동작을 초래할 수 있다.
한편 상기 [예]에서와 같이 상기 'CWE-478'을 검출하기 위한 질의문이 입력되면, 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 질의 처리부(270)는 먼저 match rule이 명시되어 있는 제1 구문에 따라 추상 구문 트리(AST)를 통해 switch 문을 검사할 수 있다. 그리고 제2 구문에서 last child의 label 값을 검사하여 default가 아닌 case인지 여부를 상기 제1 구문에서 검출된 각 switch 문들에 대해 검출할 수 있다.
여기서 제1 구문의 'a'는 문장에 해당하는 노드로 추상 구문 트리(AST)에서 type 속성은 'switchStmt'를 가진다. 제1 구문의 질의문을 통해 AST에서의 노드가 switch 문에 해당하는 문장만을 선택할 수 있다.
제2 구문에서는 'a 노드'에서 'DESC'로 연결된 자식 노드 'b'가 이름이 'default'인 label 문장에 해당하는 것이 없을 경우, 이를 보안 취약점으로 검출할 수 있다. 즉, 상기 [예]의 제1 구문과 제2 구문을 통하여 switch 문들 중 default가 사용되지 않은 구문이 있는 경우, 해당 행 또는 해당 행을 포함하는 블록을 보안 취약점이 있는 행 또는 블록으로 검출할 수 있다.
그리고 질의 처리부(270)를 통해 검출된 보안 취약점 검출 결과는 제어부(110)로 입력될 수 있으며, 제어부(110)는 입력받은 보안 취약점 검출 결과를 출력부(140)를 통해 출력할 수 있다.
도 11은 이러한 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)가 입력된 프로그램 소스 코드로부터 보안 취약점을 검출하는 동작 과정을 도시한 흐름도이다.
먼저 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 제어부(110)는 입력된 프로그램 소스 코드를 조건 또는 기능에 따라 복수의 블록으로 구분할 수 있다(S1100). 그리고 상기 소스 코드의 각 행(또는 구문) 별로 구분할 수 있다. 예를 들어 상기 블록들은 영문자 B와 숫자의 조합으로 구분될 수 있으며, 상기 행들은 영문자 I와 숫자의 조합으로 구분될 수 있다.
그리고 제어부(110)는 상기 블록 별 및 행 별로 구분된 소스 코드를 그래프 생성부(150)에 입력할 수 있다. 그리고 그래프 생성부(150)를 제어하여 상기 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 생성할 수 있다(S1102).
그리고 상기 그래프 생성부(150)가 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 각각 생성하면, 제어부(110)는 상기 그래프 생성부(150)가 상기 생성된 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 합성하도록 제어할 수 있다(S1104). 여기서 제어부(110)는 제어 흐름 그래프의 각 블록들 내에 대응하는 데이터 흐름 그래프의 각 노드들을 표시하여 상기 제어 흐름 그래프와 데이터 흐름 그래프를 통합할 수 있다. 그리고 통합된 그래프의 각 블록에, 각 블록 별로 분해된 추상 구문 트리의 각 부분들, 즉 스테이트로 구분된 노드 그룹들을 연결하여 상기 추상 구문 트리가 더 통합된 합성 그래프를 생성할 수 있다.
한편 제어부(110)는 입력부(120)로부터 입력된 질의어 또는 CWE ID에 근거하여 질의문을 생성 및 분석할 수 있다(S1106). 그리고 제어부(110)는 질의문을 분석한 결과에 따라 상기 합성 그래프로부터 보안 취약점을 검출할 수 있다(S1108). 그리고 검출된 보안 취약점을 출력부(140)를 통해 출력할 수 있다.
상술한 바와 같이 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)는, 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리를 합성한 그래프에 근거하여 보안 취약점을 검출함으로써, 상기 제어 흐름 그래프, 데이터 흐름 그래프, 그리고 추상 구문 트리 각각을 이용한 분석들 간에 상호보완이 이루어지도록 할 수 있다. 즉, 본 발명은 보안 취약점 분석 시, 상기 합성 그래프를 통해 서로 다른 그래프들(제어 흐름 그래프, 데이터 흐름 그래프, 추상 구문 트리) 간의 접근이 가능하도록 함으로써, 프로그램의 실행 순서에 따라 각 그래프들(제어 흐름 그래프, 데이터 흐름 그래프, 추상 구문 트리)을 구성하는 각 노드들의 결합 상태 및 연결 상태가 분석될 수 있도록 한다.
이에 따라 어느 하나의 그래프를 이용한 분석만으로는 검출이 어려운 복합적인 성향을 가지는 보안 취약점 검출의 검출 가능성을 보다 높일 수 있다. 또한 상기 [예]에서 보이고 있는 바와 같이, 추상 구문 트리를 통해 특정 구문을 가지는 행을 검출하고, 검출된 행으로부터 제어 흐름 분석 또는 데이터 흐름 분석을 수행함으로써, 상호보완되는 다른 그래프를 이용할 수 있으며, 이에 따라 보다 쉽고 빠르게 보안 취약점을 검출할 수 있다.
또한 이처럼 합성 그래프를 통해 상호보완되는 다른 그래프를 이용하여 보안 취약점을 분석할 수 있도록 함으로써, 본 발명의 실시 예에 따른 보안 취약점 검출 장치(100)의 질의문에는 추상 구문 트리 방식에 따른 구문 오류 검출을 위한 질의어와, 제어 흐름 그래프 또는 데이터 흐름 그래프에 따라 제어 흐름 또는 데이터 흐름의 오류를 검출하기 위한 질의어를 함께 사용할 수 있도록 함으로써, 보안 취약점 분석을 위한 질의를 보다 쉽고 간단하게 작성할 수 있다.
한편 상술한 본 발명의 설명에서는 구체적인 실시 예에 관해 설명하였으나, 여러 가지 변형이 본 발명의 범위에서 벗어나지 않고 실시할 수 있다. 또한 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서 본 발명에 개시된 실시 예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시 예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석 되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
100 : 보안 취약점 검출 장치 110 : 제어부
120 : 입력부 130 : 저장부
140 : 출력부 150 : 그래프 생성부
160 : 보안 약점 검출부

Claims (12)

  1. 프로그램의 소스 코드 및 검출 대상 보안 취약점을 포함하는 질의 관련 정보를 입력받는 입력부;
    입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 각각 생성하며, 생성된 제어 흐름 그래프, 데이터 흐름 그래프 및 추상 구문 트리를 통합하여 합성 그래프를 생성하는 그래프 생성부;
    상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 보안 취약점을 검출하는 보안 약점 검출부; 및,
    상기 소스 코드가 입력되면, 상기 소스 코드의 각 블록을 기준으로 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합 및, 상기 소스 코드의 각 블록에 대응하는 상기 추상 구문 트리의 각 노드들을 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합 결과에 연결하여 상기 합성 그래프를 생성하도록 상기 그래프 생성부를 제어하며, 상기 합성 그래프로부터 상기 보안 취약점 정보에 따라 검출된 상기 소스 코드의 적어도 하나의 블록 또는 행을 상기 보안 취약점으로 출력하는 제어부를 포함하는 것을 특징으로 하는 보안 취약점 검출 장치.
  2. 제1항에 있어서, 상기 제어부는,
    상기 소스 코드가 입력되면, 상기 소스 코드를 기 설정된 기준에 따라 적어도 하나의 블록 및 적어도 하나의 행으로 구분하는 것을 특징으로 하는 보안 취약점 검출 장치.
  3. 제1항에 있어서, 상기 그래프 생성부는,
    상기 소스 코드로부터 제어 흐름 그래프를 생성하는 CFG(Control Flow Graph) 생성부;
    상기 소스 코드로부터 데이터 흐름 그래프를 생성하는 DFG(Data Flow Graph) 생성부;
    상기 소스 코드로부터 추상 구문 트리를 생성하는 AST(Abstract Syntax Tree) 생성부; 및,
    상기 제어 흐름 그래프, 데이터 흐름 그래프, 추상 구문 트리를 통합하여 합성 그래프를 생성하는 합성부를 포함하며,
    상기 합성부는,
    상기 데이터 흐름 그래프의 노드들을, 상기 제어 흐름 그래프의 대응되는 블록에 각각 표시하여, 상기 각 노드들을 각각의 블록별로 구분함으로써 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프를 통합하고,
    상기 소스 코드의 각 블록들을 기준으로 상기 추상 구문 트리를 복수의 그룹으로 분해 및, 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프 통합 결과에 따라 구분된 각각의 블록에 상기 분해된 추상 구문 트리의 각 그룹들을 연결하여, 상기 합성 그래프를 생성하는 것을 특징으로 하는 보안 취약점 검출 장치.
  4. 제1항에 있어서, 상기 보안 약점 검출부는,
    상기 질의 관련 정보에 근거하여 질의문을 생성하는 질의문 생성부; 및,
    상기 생성된 질의문에 근거하여, 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 소스 코드의 블록 또는 행을 검출하는 질의 처리부를 포함하며,
    상기 질의문은,
    상기 추상 구문 트리에 기반한 구문 오류 검출을 위한 질의어, 상기 제어 흐름 그래프에 기반한 제어 흐름의 오류를 검출하기 위한 질의어, 및 상기 데이터 흐름 그래프에 기반한 데이터 흐름의 오류를 검출하기 위한 질의어 중 적어도 두 개를 포함하는 것을 특징으로 하는 보안 취약점 검출 장치.
  5. 제4항에 있어서,
    상기 질의 관련 정보는,
    CWE(Common Weakness Enumeration) ID이며,
    상기 질의문 생성부는,
    입력된 CWE ID에 대응하는 보안 취약점 정보 목록(CWE)를 포함하는 체커 패키지를 더 포함하는 것을 특징으로 하는 보안 취약점 검출 장치.
  6. 제4항에 있어서, 상기 질의문 생성부는,
    상기 질의 관련 정보가 입력되면, 기 설정된 질의 명세 규칙에 따른 상기 입력된 질의 관련 정보에 대응하는 질의문을 생성하며,
    상기 질의 관련 정보로서 질의문이 입력되는 경우, 상기 질의 명세 규칙에 근거하여 상기 입력된 질의문에 오류가 있는지 여부를 검출하는 것을 특징으로 하는 보안 취약점 검출 장치.
  7. 프로그램 소스 코드를 입력받는 단계;
    입력된 소스 코드로부터 제어 흐름 그래프, 데이터 흐름 그래프 및, 추상 구문 트리를 생성하는 단계;
    상기 소스 코드의 각 블록을 기준으로 상기 제어 흐름 그래프와 데이터 흐름 그래프를 서로 통합 및, 상기 소스 코드의 각 블록에 대응하는 상기 추상 구문 트리의 각 노드들을 상기 제어 흐름 그래프와 데이터 흐름 그래프의 통합 결과에 연결하여 합성 그래프를 생성하는 단계;
    검출 대상 보안 취약점을 포함하는 질의 관련 정보를 입력받는 단계;
    입력된 질의 관련 정보에 대응하는 질의문을 분석하는 단계;
    상기 질의문에 따라 상기 합성 그래프로부터 상기 질의 관련 정보에 포함된 보안 취약점 정보에 대응하는 상기 소스 코드의 적어도 하나의 블록 또는 행을 검출하는 단계; 및,
    검출된 적어도 하나의 블록 또는 행을 보안 취약점으로 출력하는 단계를 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
  8. 제7항에 있어서, 상기 소스 코드를 입력받는 단계는,
    상기 소스 코드를 기 설정된 기준에 따라 적어도 하나의 블록으로 구분하는 단계; 및,
    상기 소스 코드를 각각의 행으로 구분하는 단계를 더 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
  9. 제7항에 있어서, 상기 합성 그래프를 생성하는 단계는,
    상기 데이터 흐름 그래프의 노드들을, 상기 제어 흐름 그래프의 대응되는 블록에 각각 표시하여, 상기 제어 흐름 그래프와 상기 데이터 흐름 그래프를 통합하는 단계;
    상기 소스 코드의 각 블록들을 기준으로 상기 추상 구문 트리를 복수의 그룹으로 분해하는 단계; 및,
    상기 제어 흐름 그래프와 상기 데이터 흐름 그래프 통합 결과에 따라 구분된 각각의 블록에, 상기 분해된 추상 구문 트리의 각 그룹들을 연결하여 표시하는 단계를 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
  10. 제7항에 있어서,
    상기 질의 관련 정보를 입력받는 단계는,
    상기 질의 관련 정보에 근거하여 기 설정된 질의 명세 규칙에 따른 질의문을 생성하는 단계를 더 포함하며,
    상기 질의문은,
    상기 추상 구문 트리에 기반한 구문 오류 검출을 위한 질의어, 상기 제어 흐름 그래프에 기반한 제어 흐름의 오류를 검출하기 위한 질의어, 및 상기 데이터 흐름 그래프에 기반한 데이터 흐름의 오류를 검출하기 위한 질의어 중 적어도 두 개를 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
  11. 제7항에 있어서,
    상기 질의 관련 정보는,
    CWE(Common Weakness Enumeration) ID이며,
    상기 질의 관련 정보를 입력받는 단계는,
    보안 취약점 정보 목록(CWE)을 포함하는 체커 패키지로부터 상기 CWE ID에 대응하는 보안 취약점 정보를 식별하는 단계를 더 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
  12. 제7항에 있어서, 상기 질의문 분석 단계는,
    입력된 질의문을 기 설정된 질의 명세 규칙에 따라 분석하여 오류가 있는지 여부를 검출하는 단계를 더 포함하는 것을 특징으로 하는 보안 취약점 검출 방법.
KR1020170117985A 2017-09-14 2017-09-14 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법 KR102014266B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170117985A KR102014266B1 (ko) 2017-09-14 2017-09-14 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170117985A KR102014266B1 (ko) 2017-09-14 2017-09-14 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20190030490A true KR20190030490A (ko) 2019-03-22
KR102014266B1 KR102014266B1 (ko) 2019-08-26

Family

ID=65949578

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170117985A KR102014266B1 (ko) 2017-09-14 2017-09-14 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법

Country Status (1)

Country Link
KR (1) KR102014266B1 (ko)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110162474A (zh) * 2019-05-10 2019-08-23 北京理工大学 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置
CN113360915A (zh) * 2021-06-09 2021-09-07 扬州大学 基于源代码图表示学习的智能合约多漏洞检测方法及系统
WO2022097798A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
CN114490313A (zh) * 2021-12-10 2022-05-13 中国科学院信息工程研究所 一种基于关键语义特征的安全检查缺陷检测方法
CN114879974A (zh) * 2022-06-09 2022-08-09 西安交通大学 一种基于cpg+图的隐式依赖模式分析方法
KR20230003985A (ko) * 2021-06-30 2023-01-06 삼성에스디에스 주식회사 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치
CN118246033A (zh) * 2024-05-28 2024-06-25 山东大学 跨平台代码异常漏洞检测方法、系统、设备、介质及产品

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110070743A (ko) * 2009-12-18 2011-06-24 한국전자통신연구원 정적 분석 도구 통합 관리 장치 및 시스템
KR101645019B1 (ko) * 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어
KR101696694B1 (ko) * 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
KR101767481B1 (ko) * 2016-04-07 2017-08-11 코드마인드(주) 프로그램 분석 장치 및 프로그램 분석 제공 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110070743A (ko) * 2009-12-18 2011-06-24 한국전자통신연구원 정적 분석 도구 통합 관리 장치 및 시스템
KR101696694B1 (ko) * 2015-08-17 2017-01-18 (주)트리니티소프트 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
KR101645019B1 (ko) * 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어
KR101767481B1 (ko) * 2016-04-07 2017-08-11 코드마인드(주) 프로그램 분석 장치 및 프로그램 분석 제공 방법

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110162474A (zh) * 2019-05-10 2019-08-23 北京理工大学 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110162474B (zh) * 2019-05-10 2020-09-15 北京理工大学 一种基于抽象语法树的智能合约重入漏洞检测方法
CN110990273A (zh) * 2019-11-29 2020-04-10 中国银行股份有限公司 克隆代码检测方法及装置
CN110990273B (zh) * 2019-11-29 2024-04-23 中国银行股份有限公司 克隆代码检测方法及装置
WO2022097798A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치
CN113360915B (zh) * 2021-06-09 2023-09-26 扬州大学 基于源代码图表示学习的智能合约多漏洞检测方法及系统
CN113360915A (zh) * 2021-06-09 2021-09-07 扬州大学 基于源代码图表示学习的智能合约多漏洞检测方法及系统
KR20230003985A (ko) * 2021-06-30 2023-01-06 삼성에스디에스 주식회사 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치
KR20230044380A (ko) * 2021-06-30 2023-04-04 삼성에스디에스 주식회사 코드 점검 인터페이스 제공 방법, 그리고 이를 구현하기 위한 장치
US12039297B2 (en) 2021-06-30 2024-07-16 Samsung Sds Co., Ltd. Code inspection interface providing method and apparatus for implementing the method
CN114490313A (zh) * 2021-12-10 2022-05-13 中国科学院信息工程研究所 一种基于关键语义特征的安全检查缺陷检测方法
CN114879974A (zh) * 2022-06-09 2022-08-09 西安交通大学 一种基于cpg+图的隐式依赖模式分析方法
CN118246033A (zh) * 2024-05-28 2024-06-25 山东大学 跨平台代码异常漏洞检测方法、系统、设备、介质及产品

Also Published As

Publication number Publication date
KR102014266B1 (ko) 2019-08-26

Similar Documents

Publication Publication Date Title
KR102014266B1 (ko) 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법
CN110908640B (zh) 实现业务功能的方法和脚本引擎
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
US9134967B1 (en) Method of providing interactive usage descriptions based on source code analysis
US8185878B2 (en) Program maintenance support device, program maintenance supporting method, and program for the same
US8516443B2 (en) Context-sensitive analysis framework using value flows
US20170308380A1 (en) Apparatus and method for detecting code cloning of software
JP5775829B2 (ja) ソフトウェアの構造可視化プログラムおよびシステム
CN109426722A (zh) Sql注入缺陷检测方法、系统、设备及存储介质
EP2257873A2 (en) Systems and methods for information flow analysis
JP7218793B2 (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
JP2006523898A (ja) ソースコードの脆弱点の検出法および検出システム
CN101739335A (zh) 建议的应用评估系统
KR101645019B1 (ko) 소프트웨어 보안취약점 검출을 위한 규칙명세언어
US20170161035A1 (en) Method of Adding Local Variables In Place of Global in JavaScript
JP5176478B2 (ja) データフロー解析装置、データフロー解析方法およびデータフロー解析プログラム
US20200242009A1 (en) Client Server Computer Code Mapping and Visualization
Nair et al. A static code analysis tool for control system software
Zhou et al. Visfuzz: Understanding and intervening fuzzing with interactive visualization
Plump et al. The semantics of graph programs
Borzykh et al. Detecting Code Security Breaches by Means of Dataflow Analysis
US10209965B1 (en) In-line function synchronization
Tamrawi et al. Projected control graph for computing relevant program behaviors
JP2004126866A (ja) 記述出力抑制プログラム解析装置及び記述出力抑制プログラム解析方法

Legal Events

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