KR20240066072A - 프로그램 정적 분석 방법 및 시스템 - Google Patents
프로그램 정적 분석 방법 및 시스템 Download PDFInfo
- Publication number
- KR20240066072A KR20240066072A KR1020230139890A KR20230139890A KR20240066072A KR 20240066072 A KR20240066072 A KR 20240066072A KR 1020230139890 A KR1020230139890 A KR 1020230139890A KR 20230139890 A KR20230139890 A KR 20230139890A KR 20240066072 A KR20240066072 A KR 20240066072A
- Authority
- KR
- South Korea
- Prior art keywords
- vulnerability
- public
- program
- vulnerabilities
- static analysis
- Prior art date
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 111
- 230000003068 static effect Effects 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 title claims description 17
- 238000011109 contamination Methods 0.000 claims abstract description 32
- 238000012545 processing Methods 0.000 claims abstract description 31
- 239000000284 extract Substances 0.000 claims abstract description 15
- 239000013598 vector Substances 0.000 claims description 88
- 238000011524 similarity measure Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 14
- 230000015654 memory Effects 0.000 description 13
- 230000014509 gene expression Effects 0.000 description 9
- 238000013459 approach Methods 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 230000003252 repetitive effect Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005293 physical law Methods 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
-
- 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/552—Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Debugging And Monitoring (AREA)
Abstract
유사하게 반복되는 소프트웨어의 취약점을 탐지하기 위한 시그니쳐 기반 프로그램 정적 분석 방법 및 시스템이 개시된다. 프로그램 정적 분석 시스템은, 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하는 공개 취약점 처리부; 및 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 시그니쳐와 비교하는 신규 취약점 처리부를 포함한다.
이에 따라, 알려진 공개 취약점 추적을 추출하여 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하고, 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 알려진 공개 취약점 시그니쳐와 비교한 후, 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고함으로써, 개발자가 기존의 취약점 코드를 재사용하거나 동일한 논리를 구현하더라도 유사하게 반복되는 소프트웨어의 취약점을 탐지할 수 있다.
Description
본 발명은 프로그램 정적 분석 방법 및 시스템에 관한 것으로, 보다 상세하게는 반복되는 소프트웨어의 취약점을 탐지하기 위한 시그니쳐 기반 프로그램 정적 분석 방법 및 시스템에 관한 것이다.
일반적으로, 프로그램 개발자가 기존의 취약점 코드를 재사용하거나 동일한 논리를 구현할 때 유사한 실수를 하기 때문에 유사한 소프트웨어 취약점이 반복된다. 최근에는 코드 재사용을 통해 구문적으로 반복되는 소프트웨어의 취약점을 찾기 위한 다양한 분석 기법이 제안되었다.
소프트웨어의 취약점(또는 오류)를 검출하는 테스트 방법에는 동적 분석과 정적 분석이 있다.
동적 분석은 소프트웨어를 직접 실행하여 실행 과정에 존재하는 취약점을 검출해내는 테스트 방법으로, 특정 데이터를 소프트웨어에 입력한 후 실제 결과값과 기대했던 결과값이 일치하는지 여부를 판단하는 방식이다.
한편, 정적 분석은 소프트웨어를 실행시키지 않고 취약점을 검출하는 테스트 방법으로서, 소프트웨어 취약점에 대한 기준을 정하고 검사 결과와 기준을 비교해 취약점을 검출하는 방식이다.
한편, 유사한 소프트웨어 취약점(또는 결함)은 프로그램 간에도 시간이 지남에 따라 반복된다. 잘 알려진 이유 중 하나는 재사용된 코드의 보안 취약점이 확산될 수 있는 코드 재사용이 널리 퍼져 있기 때문이다.
이러한 구문 반복 외에도 독립적으로 개발된 관련 없는 코드베이스에서 의미상 유사한 취약점이 자주 발생한다. 그 이유 중 하나는 개발자가 수학 공식, 물리 법칙, 프로토콜 또는 언어 해석기와 같은 동일한 표준 개념을 구현할 때, 유사한 실수를 저지르는 경우가 많기 때문이다.
이처럼, 반복되는 보안 취약점을 탐지하기 위한 많은 기술들이 제안되었지만, 여러 측면에서 한계가 있다.
코드 유사성에 기반한 접근 방식은 코드 재사용을 통해 반복되는 취약점을 탐지한다. 사전 정의된 경계(예를 들어, 파일 또는 함수) 내에서 알려진 취약점의 시그니쳐를 생성하고 새 프로그램의 구문 패턴을 시그니쳐와 비교한다. 이러한 접근 방식은 구문 일치를 기반으로 하기 때문에 매우 정확하고 확장 가능하며 일반적이다. 그러나 일반적으로 구문 구조는 완전히 다르지만 근본 원인은 동일한 알려진 취약점의 변형을 탐지할 수 없다.
한편, 패턴 기반 정적 분석은 타깃 프로그램의 의미를 추정하고 구문 패턴을 고려한다. 이를 통해 분석기는 알려진 취약점이 있는 프로그램과 구문 및 의미론적 특성이 유사한 취약점을 검색할 수 있다. 그러나 이러한 분석을 설계하려면 정적 분석 전문 지식이 필요하며 적지 않은 엔지니어링 부담이 발생한다.
이에 본 발명의 기술적 과제는 이러한 점에 착안한 것으로, 본 발명의 목적은 개발자가 기존의 취약점 코드를 재사용하거나 동일한 논리를 구현하더라도 유사하게 반복되는 소프트웨어의 취약점을 탐지하기 위한 시그니쳐 기반 프로그램 정적 분석 방법을 제공하는 것이다.
본 발명의 다른 목적은 상기한 프로그램 정적 분석 방법을 수행하기 위한 프로그램 정적 분석 시스템을 제공하는 것이다.
상기한 본 발명의 목적을 실현하기 위하여 일 실시예에 따른 프로그램 정적 분석 방법은, (a) 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하는 단계; 및 (b) 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 시그니쳐와 비교하는 단계를 포함한다.
일 실시예에서, 상기 취약점 추적은 취약점의 시그니쳐를 형성하는 특징 벡터로 인코딩될 수 있다.
일 실시예에서, 단계(a)는, (a-1) 공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하고 분석 결과에서 실제 취약점을 식별하는 단계; (a-2) 소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 특징 벡터로 파생하는 단계; 및 (a-3) 특징 벡터를 시그니쳐 데이터베이스에 구축하는 단계를 포함할 수 있다.
일 실시예에서, 단계(b)는, (b-1) 신뢰할 수 없는 입력(소스)에서 보안에 민감한 특징(싱크)으로의 잠재적인 취약점 데이터 흐름을 감지하는 단계; (b-2) 신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터를 파생하는 단계; 및 (b-3) 유사도 척도를 사용하여 알람의 특징 벡터를 공개 취약점 추적의 특징 벡터와 비교하는 단계를 포함할 수 있다.
일 실시예에서, 상기 유사도 척도는 코사인 유사도를 포함할 수 있다.
일 실시예에서, 상기 코사인 유사도는 두 특징 벡터의 곱을 분모로 하고 두 특징 벡터의 합을 분자로 하여 계산될 수 있다.
일 실시예에서, 상기한 프로그램 정적 분석 방법은 (c) 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고하는 단계를 더 포함할 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위하여 일 실시예에 따른 프로그램 정적 분석 시스템은, 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하는 공개 취약점 처리부; 및 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 시그니쳐와 비교하는 신규 취약점 처리부를 포함한다.
일 실시예에서, 상기 취약점 추적은 취약점의 시그니쳐를 형성하는 특징 벡터로 인코딩될 수 있다.
일 실시예에서, 상기 공개 취약점 처리부는, 공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하고 분석 결과에서 실제 취약점을 식별하는 공개 취약점 분석기; 소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 특징 벡터로 파생하는 공개 특징 벡터 생성기; 및 상기 공개 특징 벡터 생성기의 의해 파생된 특징 벡터를 저장하는 시그니쳐 데이터베이스를 포함할 수 있다.
일 실시예에서, 상기 신규 취약점 처리부는, 신뢰할 수 없는 입력(소스)에서 보안에 민감한 특징(싱크)으로의 잠재적인 취약점 데이터 흐름을 감지하는 신규 취약점 분석기; 신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터를 파생하는 신규 특징 벡터 생성기; 및 상기 신규 특징 벡터 생성기에 의해 파생된 알람의 특징 벡터를 유사도 척도를 사용하여 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 추적의 특징 벡터와 비교하는 유사도 체크기를 포함할 수 있다.
일 실시예에서, 상기 유사도 척도는 코사인 유사도를 포함할 수 있다.
일 실시예에서, 상기 코사인 유사도는 두 특징 벡터의 곱을 분모로 하고 두 특징 벡터의 합을 분자로 하여 계산될 수 있다.
일 실시예에서, 상기한 프로그램 정적 분석 시스템은, 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고하는 취약점 보고부를 더 포함할 수 있다.
이러한 프로그램 정적 분석 방법 및 시스템에 의하면, 알려진 공개 취약점 추적을 추출하여 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하고, 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 알려진 공개 취약점 시그니쳐와 비교한 후, 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고함으로써, 개발자가 기존의 취약점 코드를 재사용하거나 동일한 논리를 구현하더라도 유사하게 반복되는 소프트웨어의 취약점을 탐지할 수 있다.
도 1a는 이미지 처리 도구 gimp 프로그램의 일례를 설명하기 위한 도면이고, 도 1b는 이미지 처리 도구 smp2p 프로그램의 일례를 설명하기 위한 도면이고, 도 1c는 libXcursor 프로그램의 일례를 설명하기 위한 도면이다.
도 2는 본 발명의 일 실시예에 따른 프로그램 정적 분석 시스템을 설명하기 위한 개략도이다.
도 3a는 이미지 처리 도구 gimp에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이고, 도 3b는 이미지 처리 도구 libXcursor에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이다.
도 4는 본 발명에 따른 프로그램 정적 분석 시스템의 전반적인 절차를 나타낸 알고리즘을 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 프로그램 정적 분석 방법을 설명하기 위한 흐름도이다.
도 6은 도 5에 도시된 단계 S110을 설명하기 위한 흐름도이다.
도 7은 도 5에 도시된 단계 S120을 설명하기 위한 흐름도이다.
도 2는 본 발명의 일 실시예에 따른 프로그램 정적 분석 시스템을 설명하기 위한 개략도이다.
도 3a는 이미지 처리 도구 gimp에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이고, 도 3b는 이미지 처리 도구 libXcursor에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이다.
도 4는 본 발명에 따른 프로그램 정적 분석 시스템의 전반적인 절차를 나타낸 알고리즘을 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시예에 따른 프로그램 정적 분석 방법을 설명하기 위한 흐름도이다.
도 6은 도 5에 도시된 단계 S110을 설명하기 위한 흐름도이다.
도 7은 도 5에 도시된 단계 S120을 설명하기 위한 흐름도이다.
이하, 첨부한 도면들을 참조하여, 본 발명을 보다 상세하게 설명하고자 한다. 본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다. 첨부된 도면에 있어서, 구조물들의 치수는 본 발명의 명확성을 기하기 위하여 실제보다 확대하여 도시한 것이다.
제1, 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
또한, 다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서, 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
본 발명을 설명하기에 앞서, 본 발명의 동기가 되는 프로그램들의 예를 먼저 설명한다.
도 1a는 이미지 처리 도구 gimp 프로그램의 일례를 설명하기 위한 도면이고, 도 1b는 이미지 처리 도구 smp2p 프로그램의 일례를 설명하기 위한 도면이고, 도 1c는 libXcursor 프로그램의 일례를 설명하기 위한 도면이다.
도 1a, 도 1b, 및 도 1c에 나타낸 세 가지 프로그램 모두 특정 종류의 보안 취약점과 관련된 유사한 문제를 가지고 있다. 오버플로된 정수는 메모리 할당 함수(예: malloc)의 크기 인수로 사용될 수 있다. 이러한 정수 오버플로로 인해 프로그램이 의도치 않게 작은 메모리 청크를 할당하게 되어 잠재적으로 버퍼 오버플로가 발생할 수 있다.
도 1a에 표시된 gimp 프로그램은 주어진 파일에서 바이트 문자열을 읽고(라인 10), 문자열을 정수로 변환한다(라인 12). 이 값은 입력 파일의 내용에 따라 달라지므로 정수는 임의로 클 수 있다. 13행의 정수 값도 같은 이유로 임의로 커질 수 있다. 그런 다음, 프로그램은 정수를 곱하여 정수 오버플로로 이어진다(라인 14). 마지막으로, 오버플로된 정수(rowbytes)는 ReadImage 함수에 전달되어 malloc의 인수로 사용된다(라인 21). 할당된 버퍼의 크기는 개발자가 예상한 것보다 훨씬 작을 수 있다. 따라서, 나중에 입력 파일의 데이터를 저장하기 위해 버퍼를 사용할 때 잠재적인 버퍼 오버플로가 발생할 수 있다.
도 1b에 표시된 sam2p라는 다른 프로그램에서도 유사한 취약점이 발견되었다.
sam2p도 이미지 처리 도구이므로 BMP 파일을 읽는 비슷한 코드 조각이 있다. gimp와 똑같은 이유로 이 프로그램도 취약하다. 코드 조각은 gimp의 코드 조각과 매우 유사하다. 개념적으로, 코드 복제 감지를 기반으로 하는 기존 방법은 gimp의 취약점을 시그니쳐로 제공하여 반복되는 소프트웨어의 취약점을 포착하는 데 도움이 될 수 있다. 그러나, 실제로는 어려울 때도 있다.
클론 기반 접근 방식은 일반적으로 미리 정의된 구문 경계(예: 함수 또는 블록) 내에서 두 개의 코드 조각을 비교한다. 이는 예에서와 같이 취약점 동작이 여러 특징과 관련된 경우 취약점 감지를 방해한다. 최첨단 도구는 알려진 공개 취약점의 패치(gimp의 경우 ReadBMP)가 포함된 취약점 시그니쳐 특징을 경험적으로 선택한다. 그러나, 함수가 크고 상당한 구문 차이가 있는 경우 이는 여전히 취약하다. 예를 들어 gimp의 ReadBMP는 382개 라인으로 구성되어 있지만 samp2p의 bmp_load_image는 151개 라인만 있다. 취약점의 본질은 동일하지만 다른 부분에서는 많은 차이가 있다. 예를 들어 두 프로그램의 7~8번째 라인은 전혀 다르며, C++ 프로그램인 sam2p는 malloc 대신 new를 사용한다. 게다가 코드 복제로 인해 반복되는 소프트웨어의 취약점이 항상 발생하는 것은 아니다.
개발자는 낮은 수준(예: 파일에서 데이터 읽기 또는 힙 메모리 블록 할당)과 높은 수준(예: 사각형 면적 계산 또는 처리) 모두에서 일반적이거나 표준적인 동작을 갖는 프로그램을 작성할 때 비슷한 실수를 저지르는 경우가 많다.
도 1c에 나타낸 libXcursor 프로그램은 이전 예제와 유사하게 입력 파일에서 데이터를 읽고(라인 3), 입력 바이트 문자열을 정수로 변환하고(라인 5), 두 개의 임의의 큰 정수의 곱셈을 계산한다(라인 21). 또한 곱셈은 나중에 버퍼 오버플로를 일으킬 수 있는 동일한 라인에서 정수 오버플로로 이어진다. 취약점의 근본 원인은 다른 예와 동일하다.
그러나, libXcursor는 완전히 다른 구문 구조를 가지고 있다. 예를 들어, libXcursor는 다른 프로그램이 함수를 직접 호출하는 동안 3행에서 간접 호출을 사용하여 fread를 수행한다. 기존 접근 방식은 의미론적으로 반복되는 소프트웨어의 취약점을 탐지하는 데 적합하지 않다. gimp 또는 sam2p의 취약점이 시그니쳐로 존재하므로 복제 기반 접근 방식은 이 취약점을 탐지하는 데 효과적이지 않다.
취약점의 본질은 여전히 동일하지만 libXcursor의 다른 코드 구조는 근본적으로 도구의 탐지 가능성을 방해한다. 일반적인 정수 오버플로를 목표로 하는 정적 버그 찾기 도구는 이 취약점을 감지할 수 있지만 많은 오탐(false positive)이 발생할 수도 있다.
각 패턴에 대한 전문적인 정적 분석을 설계할 수도 있다. 그러나, 최적이 아닌 솔루션을 생산하는 동안 높은 엔지니어링 부담이 부과된다. 예를 들어, 최첨단 패턴 기반 분석기인 Github CodeQL의 TaintedAllocationSize 검사기는 도 1a, 도 1b, 및 도 1c의 특정 취약점을 감지하지 못한다.
도 2는 본 발명의 일 실시예에 따른 프로그램 정적 분석 시스템을 설명하기 위한 개략도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 프로그램 정적 분석 시스템은 공개 취약점 처리부(110), 신규 취약점 처리부(120), 및 취약점 보고부(130)를 포함한다. 본 실시예에서, 프로그램 정적 분석 시스템은 공개 취약점 처리부(110), 신규 취약점 처리부(120), 및 취약점 보고부(130)로 구성된 것으로 설명하였으나, 이는 설명의 편의를 위해 논리적으로 구분하였을 뿐 하드웨어적으로 구분한 것은 아니다.
공개 취약점 처리부(110)는, 공개 취약점 분석기(112), 공개 특징 벡터 생성기(114), 및 시그니쳐 데이터베이스(signature database)(116)를 포함하고, 알려진 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 이에 대한 시그니쳐 데이터베이스(116)를 구축한다.
공개 취약점 분석기(112)는 알려진 공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하여 분석 결과에서 실제 취약점을 식별한다. 즉, 공개 취약점 분석기(112)는 취약점이 이미 알려짐 특정 프로그램 집합에 대해 오염 분석을 실행한다. 알려진 각 공개 취약점에 대해, 공개 취약점 분석기(112)는 정적 분석 결과를 기반으로 소스 포인트 및 싱크 포인트에서 취약점 가능한 추적을 추출한다. 본 실시예에서, 취약점과 관련이 없는 기재를 최대한 필터링하기 위해 제어 흐름 그래프가 아닌 데이터 종속성 그래프에서 취약점 추적을 도출한다.
오염 분석에서 잠재적인 악성 흐름이 감지되면, 소스 포인트에서 싱크 포인트로 취약점 추적을 추출하여 데이터 종속성 그래프를 추출한다. 이러한 추적은 취약점의 시그니쳐로 사용된다.
신규 타겟 프로그램에도 동일한 절차가 적용된다. 특히 프로그램 정적 분석 시스템은 각 루프를 한 번만 풀면서 보고된 알람의 소스에서 싱크까지 가능한 모든 추적을 추출한다. 이러한 추적은 시그니쳐 추적과 비교된다.
공개 특징 벡터 생성기(114)는 소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 공개 특징 벡터로 파생한다. 즉, 공개 특징 벡터 생성기(114)는 각 추적을 정수 특징 벡터로 인코딩한다. 본 실시예에서, 공개 특징 벡터 생성기(114)는 취약점에 대해 전달 가능한 지식을 나타낼 수 있는 프로그램-독립적이고 공통 특징 공간을 설계한다. 여기서, 특징 벡터는 낮은 수준의 특징과 높은 수준의 특징의 두 부분으로 구성된다.
낮은 수준의 특징은 추적에서 기본 연산자 X(예: *, <<) 및 일반 API X(예: strlen)의 빈도를 나타낸다.
도 3a는 이미지 처리 도구 gimp에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이고, 도 3b는 이미지 처리 도구 libXcursor에서 취약점 추적의 특징 벡터의 일례를 보여주는 도면이다.
반면, 높은 수준의 특징은 낮은 수준의 특징만으로는 눈에 띄지 않는 추적의 세부 동작을 설명한다. 일반적으로, 이는 타겟 취약점에 영향을 미칠 수 있는 프로그램의 중요한 동작을 특성화한다. 예를 들어, IfSmallerThanConst 특징 중 하나는 추적에 조건이 x < c 형식인 조건문이 있는지 확인한다. 여기서, x는 변수이고 c는 상수이다. 이 패턴은 프로그램이 정수 오버플로를 방지할 때 일반적이다. 타겟 프로그램의 추적에는 이러한 표현식이 있지만 시그니쳐 추적에는 없다고 가정한다. 그러면, 타겟 추적은 안전한 것으로 간주되어 유사도 점수가 낮아진다.
시그니쳐 데이터베이스(116)는 공개 특징 벡터 생성기(114)의 의해 파생된 공개 특징 벡터를 저장한다.
신규 취약점 처리부(120)는 신규 취약점 분석기(122), 신규 특징 벡터 생성기(124), 및 유사도 체크기(126)를 포함하고, 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 알려진 공개 취약점 시그니쳐와 비교한다.
신규 취약점 분석기(122)는 신뢰할 수 없는 입력(소스 포인트)에서 보안에 민감한 특징(싱크 포인트)으로의 잠재적인 취약점 데이터 흐름을 감지한다. 즉, 신규 취약점 분석기(122)는 신규 프로그램에 대해 오염 분석을 통해 취약점 추적을 추출한다. 본 실시예에서, 다양한 유형의 보안 취약점에 대한 버그 탐지기로 인스턴시에이션될 수 있는 일반적인 오염 분석을 기반으로 한다. 오염 분석은 오염된 값 에 대한 간단한 추상 도메인을 사용하여 신뢰할 수 없는 입력(소스 포인트)에서 민감한 함수(싱크 포인트)로의 잠재적인 데이터 흐름을 계산한다. 여기서, 각 요소는 값이 오염되지 않음()을 나타낼 수도 있고, 오염됨()을 나타낼 수도 있다. 보다 정확한 오염 분석을 위해, 기본 오염 도메인과 함께 다른 추상 도메인을 사용하여 오염 분석을 정교화할 수 있다. 정수 값이 잠재적으로 오버플로 되는지() 또는 그렇지 않은지()를 추정하기 위한 간단한 추상 도메인 이 있다.
예를 들어, 신뢰할 수 없는 입력 값은 처음에는 오염되었지만(), 오버플로되지 않았다(). 상기한 값이 잠재적으로 정수 오버플로(예: +, <<)를 일으킬 수 있는 연산자의 피연산자로 사용되면 결과가 오염되고() 오버플로된다().
신규 특징 벡터 생성기(124)는 새로운 신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터(즉, 신규 특징 벡터)를 파생한다.
유사도 체크기(126)는 신규 특징 벡터 생성기(124)에 의해 파생된 알람의 특징 벡터를 유사도 척도를 사용하여 시그니쳐 데이터베이스(116)에 저장된 알려진 공개 취약점 추적의 특징 벡터와 비교한다. 즉, 유사도 체크기(126)는 신규 특징 벡터 생성기(124)에 의해 파생된 특징 벡터와 시그니쳐 데이터베이스(116)에 저장된 특징 벡터를 비교하여 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 사용자(즉, 프로그램 개발자)에게 보고한다.
이처럼, 신규 취약점 처리부(120)는, 신규 프로그램이 분석되면, 모든 알람 추적을 추출하고 이를 알려진 공개 취약점 시그니쳐와 비교한다. 모든 추적은 벡터로 인코딩되므로 일반적인 유사도 측정을 사용할 수 있다. 프로그램의 구현시, 두 벡터에 대한 잘 알려진 공개 유사도 척도인 코사인 유사도를 사용한다.
상기 코사인 유사도는 두 특징 벡터의 곱을 분모로 하고 두 특징 벡터의 합을 분자로 하여 계산될 수 있다. 예를 들어 도 3a 및 도 3b의 두 특징 벡터의 코사인 유사도는 다음과 같이 계산된다.
따라서, 프로그램 정적 분석 시스템은 높은 유사도 점수로 의미론적으로 반복되는 소프트웨어의 취약점을 정확하게 탐지할 수 있다.
취약점 보고부(130)는 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 사용자(즉, 프로그램 개발자)에게 보고한다. 사용자는 보고된 잠재적 취약점 목록에 기초하여 취약점을 시그니쳐 데이터베이스(116)에 구축한다.
이하에서 본 발명의 프로그램 정적 분석을 위한 프레임워크에 대해서 설명한다.
도 4는 본 발명에 따른 프로그램 정적 분석 시스템의 전반적인 절차를 나타낸 알고리즘을 설명하기 위한 도면이다.
도 4를 참조하면, 프로그램 정적 분석 시스템은 먼저 타겟 프로그램을 정적 분석하고 일련의 알람을 도출한다(라인 1). 다음으로, 프로그램 정적 분석 시스템은 프로그램의 데이터 종속성 그래프를 계산한다(라인 2). 이어, 프로그램의 각 알람에 대해, 프로그램 정적 분석 시스템은 추적 집합(라인 5)을 추출하고, 이를 특징 벡터(라인 6)로 인코딩한다. 마지막으로, 생성된 알람 ω의 각 특징 벡터를 취약점 시그니쳐 추적과 비교한다. 상기 알람 점수는 이들의 최대 유사도 점수로 결정된다(라인 7).
그러면, 이하에서 프로그램 정적 분석 시스템의 각 구성 요소에 대한 세부 정보를 설명한다.
- 프로그램
프로그램은 제어 흐름 그래프(control flow graph) 로 표현된다. 여기서, 는 제어 포인트의 집합이고, 는 제어-흐름 관계(control-flowrelation)이다. 각 제어 포인트는 명령과 연관되어 있다. 그림 4에 정의된 간단한 명령형 언어를 가정한다. 표현식은 정수, 변수, 더하기 연산, 빼기 연산 또는 소스 함수에 대한 호출이다. 명령은 싱크 특징에 대한 할당, 가정 또는 호출이다. 소스와 싱크는 각각 신뢰할 수 없는 입력(예: fread)을 읽고 민감한 컨텍스트(예: malloc)에서 인수를 사용하는 함수를 나타낸다. 각 소스 포인트가 고유한 라벨 l과 연관되어 있다고 가정한다.
- 오염 분석
오염 추적을 위한 일반적인 정적 분석을 제안한다. 상기 정적 분석의 목표는 소스 포인트에서 싱크 포인트까지의 잠재적인 데이터 흐름을 추정하는 것이다. 상기 정적 분석은 정수 오버플로, 형식 문자열 또는 명령 주입과 같은 일반적인 유형의 취약점에 적용할 수 있는 일련의 오염 분석으로 인스턴시에이션될 수 있다.
추상 도메인(Abstract domains)은 아래와 같다.
주어진 프로그램에 대해, 프로그램 정적 분석 장치는 제어 포인트에서 해당 추상 메모리(abstract memories)로의 매핑인 추상 상태를 계산한다. 추상 메모리는 변수에서 해당 추상 값으로의 매핑이다. 추상 값(abstract value)은 오염 정보와 값 정보에 대한 추상 도메인의 두 부분으로 구성된다. 오염 도메인은 소스 레이블의 강력한 집합이다. 오염 확인을 위해 값으로 이어지는 가능한 모든 소스 포인트를 수집한다.
값 도메인은 변수의 일반적인 정보를 나타낸다. 예를 들어, 값이 오버플로되었는지 여부만 나타내는 간단한 추상 도메인을 정의하거나 간격 도메인과 같은 보다 정교한 도메인을 정의할 수 있다.
값 도메인은 필수는 아니지만 분석의 정밀도를 향상시키는 데 사용된다.
추상 의미론(Abstract semantics)은 아래와 같이 정의되어 있다.
표현식 의 추상 의미는 추상 메모리가 주어진 표현식의 추상 값을 계산한다.
값 도메인 에는 표현식의 추상 값을 계산하는 평가 함수 가 수반된다고 가정한다.
상수 값(n)은 오염되지 않으며 에 따라 추상 값을 도입한다.
이항 연산(+ 및 -)의 경우 두 피연산자의 오염 정보를 결합하고 해당 추상 연산자의 결과를 계산한다.
소스 포인트의 경우, 프로그램 정적 분석 장치는 오염 검사에 사용될 레이블을 수집하고 추상 값을 계산한다.
명령 [[c]]에 대한 추상 의미는 주어진 추상 메모리에서 c실행 후 추상 메모리를 계산한다.
프로그램 정적 분석 시스템은 분석 결과에서 일련의 알람을 도출한다.
오염 분석 알람 는 이 소스 포인트이고 가 소스 의 신뢰할 수 없는 데이터를 사용하는 싱크 포인트인 두 개의 제어 포인트 쌍이다.
분석에는 알람 검사 함수 가 수반된다고 가정한다.
분석 결과에서 싱크 포인트 와 에 있는 추상 메모리 m가 주어지면 은 취약점 데이터 흐름이 싱크 포인트 에서 시작되는 소스 포인트 집합이다.
프로그램 p에 대한 분석 가 완료되면 알람 검사 함수를 사용하여 알람 Ω 집합이 파생된다.
정의 1(알람(Alarm))
을 프로그램의 모든 싱크 포인트 집합이라고 가정한다. 프로그램의 알람 Ω 집합은 다음과 같이 정의된다.
여기서, m는 분석 결과에 따른 의 추상 메모리이다.
- 데이터 종속성 그래프 및 오염된 추적
다음으로, 입력 프로그램에 대한 데이터 종속성 그래프를 작성한다. 프로그램의 제어 흐름 그래프 가 주어지면 데이터 종속성 그래프는 튜플 로 정의된다. 데이터 종속성 그래프에는 동일한 노드 집합이 있지만 제어 흐름 관계가 아닌 데이터 종속성 관계를 기반으로 한다. 데이터 종속성의 표준 개념을 따른다. 즉, 이고, 에서 x는 정의되고, 에서 x는 사용되며, x는 과 사이의 어떤 포인트에서도 다시 정의되지 않는다. 여기서, x는 프로그램 변수이다. 이러한 데이터 종속 관계는 정의 및 사용 포인트에 대한 추가 정보를 기록하여 정적 분석 중에 계산할 수 있다.
제어 종속성은 고려되지 않지만, 조건식을 특별히 처리하여 중요한 분기 조건을 캡처한다(상술된 추상 의미론의 정의에서 가정).
조건식에 사용되는 변수도 정의된 변수로 간주한다. 이러한 경험적 선택을 통해, 프로그램 정적 분석 시스템은 실제로 바운드 검사와 같은 중요한 단계를 캡처할 수 있다.
데이터 종속성 그래프가 구축되면, 오염된 알람 추적을 추출한다. 각 알람에 대해, 프로그램 정적 분석 시스템은 데이터 종속성 그래프의 소스 포인트에서 싱크 포인트까지의 모든 경로를 파생한다.
정의 2(오염된 추적(Tainted Trace))
알람이 주어지면 , 오염된 추적 집합 은 다음과 같이 정의된다.
루프가 존재하면, 알람의 흔적이 무한히 많이 존재할 수 있다. 구현에서, 프로그램 정적 분석 시스템은 각 루프를 한 번 펼친다.
- 특징 벡터와 유사도 점수
프로그램 정적 분석 시스템은 오염된 각 추적을 추적의 특성을 인코딩하는 특징 벡터로 변환한다. 다양한 프로그램에서 재사용할 수 있는 취약점 추적에 대한 필수 지식을 캡처하기 위한 일련의 특징을 정의한다. 프로그램 정적 분석 시스템은 숫자 특징을 사용한다 . n특징 집합 , 프로그램 정적 분석 시스템은 추적 의 특징 벡터를 파생한다. 그러면, 알람 ω의 특징 벡터 집합 은 다음과 같이 정의된다.
마지막으로, 프로그램 정적 분석 시스템은 프로그램 p의 알람 특징 벡터를 알려진 공개 취약점의 사전 계산된 모든 특징 벡터 집합인 와 비교한다. 집합 는 알려진 공개 실제 알람만 고려한다는 점을 제외하고 이전 섹션에서 설명한 것과 동일한 단계를 사용하여 파생될 수 있다. 또한 두 특징 벡터의 유사도를 계산하는 함수 을 가정한다.
유사도 함수를 사용하여, 알람 점수는 알람 추적과 시그니쳐 추적 간의 최대 유사도 점수로 정의된다.
정의 3(알람 점수)
알람 ω과 시그니쳐 의 특징 벡터 집합이 주어지면 알람 점수는 다음과 같이 정의된다.
여기서, 는 알람 ω의 특징 벡터 집합이다.
도 5는 본 발명의 일 실시예에 따른 프로그램 정적 분석 방법을 설명하기 위한 흐름도이다.
도 5를 참조하면, 알려진 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축한다(단계 S110). 단계 S110의 동작은 도 2에서 설명된 공개 취약점 처리부(110)에 의해 수행될 수 있다.
신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 알려진 공개 취약점 시그니쳐와 비교한다(단계 S120). 단계 S120의 동작은 도 2에서 설명된 신규 취약점 처리부(120)에 의해 수행될 수 있다.
상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고한다(단계 S130). 단계 S130의 동작은 도 2에서 설명된 취약점 보고부(130)에 의해 수행될 수 있다.
도 6은 도 5에 도시된 단계 S110을 설명하기 위한 흐름도이다.
도 5 및 도 6을 참조하면, 알려진 공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하고 분석 결과에서 실제 취약점을 식별한다(단계 S112). 단계 S112의 동작은 도 2에서 설명된 공개 취약점 분석기(112)에 의해 수행될 수 있다.
소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 특징 벡터로 파생한다(단계 S114). 단계 S114의 동작은 도 2에서 설명된 공개 특징 벡터 생성기(114)에 의해 수행될 수 있다.
특징 벡터를 시그니쳐 데이터베이스에 구축한다(단계 S116). 단계 S116의 동작은 도 2에서 설명된 시그니쳐 데이터베이스(116)에 의해 수행될 수 있다.
도 7은 도 5에 도시된 단계 S120을 설명하기 위한 흐름도이다.
도 5 및 도 7을 참조하면, 신뢰할 수 없는 입력(소스)에서 보안에 민감한 특징(싱크)으로의 잠재적인 취약점 데이터 흐름을 감지한다(단계 S122). 단계 S122의 동작은 도 2에서 설명된 신규 취약점 분석기(122)에 의해 수행될 수 있다.
신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터를 파생한다(단계 S124). 단계 S124의 동작은 도 2에서 설명된 신규 특징 벡터 생성기(124)에 의해 수행될 수 있다.
유사도 척도를 사용하여 알람의 특징 벡터를 알려진 공개 취약점 추적의 특징 벡터와 비교한다(단계 S126). 단계 S126의 동작은 도 2에서 설명된 유사도 체크기(126)에 의해 수행될 수 있다.
본 발명에 따른 프로그램 정적 분석 방법들은 다양한 컴퓨터 수단을 통해 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 컴퓨터 판독 가능 매체에 기록되는 프로그램 명령은 본 발명을 위해 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공개되어 사용 가능한 것일 수도 있다.
컴퓨터 판독 가능 매체의 예에는 롬(ROM), 램(RAM), 플래시 메모리(flash memory) 등과 같이 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함될 수 있다. 프로그램 명령의 예에는 컴파일러(compiler)에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터(interpreter) 등을 사용해서 컴퓨터에 의해 실행될 수 있는 고급 언어 코드를 포함할 수 있다. 상술한 하드웨어 장치는 본 발명의 동작을 수행하기 위해 적어도 하나의 소프트웨어 모듈로 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다. 또한, 상술한 방법 또는 장치는 그 구성이나 특징의 전부 또는 일부가 결합되어 구현되거나, 분리되어 구현될 수 있다.
이상에서 설명된 바와 같이, 본 발명에 따르면, 알려진 공개 취약점 추적을 추출하여 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하고, 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 알려진 공개 취약점 시그니쳐와 비교한 후, 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고함으로써, 개발자가 기존의 취약점 코드를 재사용하거나 동일한 논리를 구현하더라도 유사하게 반복되는 소프트웨어의 취약점을 탐지할 수 있다.
한편, 본 개시에서 사용된 용어 "부"는 하드웨어, 소프트웨어 또는 펌웨어로 구성된 유닛을 포함하며, 예를 들면, 로직, 논리 블록, 부품, 또는 회로 등의 용어와 상호 호환적으로 사용될 수 있다. "부"는 일체로 구성된 부품 또는 하나 또는 그 이상의 기능을 수행하는 최소 단위 또는 그 일부가 될 수 있다. 예를 들면, "부"는 ASIC(application-specific integrated circuit)으로 구성될 수 있다.
본 발명의 다양한 실시예들은 기기(machine)(예: 컴퓨터)로 읽을 수 있는 저장 매체(machine-readable storage media)에 저장된 명령어를 포함하는 소프트웨어로 구현될 수 있다. 기기는, 저장 매체로부터 저장된 명령어를 호출하고, 호출된 명령어에 따라 동작이 가능한 장치로서, 개시된 실시예들에 따른 전자 장치를 포함할 수 있다. 명령이 프로세서에 의해 실행될 경우, 프로세서가 직접, 또는 상기 프로세서의 제어 하에 다른 구성요소들을 이용하여 상기 명령에 해당하는 기능을 수행할 수 있다. 명령은 컴파일러 또는 인터프리터에 의해 생성 또는 실행되는 코드를 포함할 수 있다. 기기로 읽을 수 있는 저장매체는, 비일시적(non-transitory) 저장매체의 형태로 제공될 수 있다. 여기서, '비일시적'은 저장매체가 신호(signal)를 포함하지 않으며 실재(tangible)한다는 것을 의미할 뿐 데이터가 저장매체에 반영구적 또는 임시적으로 저장됨을 구분하지 않는다.
일 실시예에 따르면, 본 명세서에 개시된 다양한 실시예들에 따른 방법은 컴퓨터 프로그램 제품(computer program product)에 포함되어 제공될 수 있다. 컴퓨터 프로그램 제품은 상품으로서 판매자 및 구매자 간에 거래될 수 있다. 컴퓨터 프로그램 제품은 기기로 읽을 수 있는 저장 매체(예: compact disc read only memory (CD-ROM))의 형태로, 또는 어플리케이션 스토어(예: 플레이 스토어TM)를 통해 온라인으로 배포될 수 있다. 온라인 배포의 경우에, 컴퓨터 프로그램 제품의 적어도 일부는 제조사의 서버, 어플리케이션 스토어의 서버, 또는 중계 서버의 메모리와 같은 저장 매체에 적어도 일시 저장되거나, 임시적으로 생성될 수 있다.
다양한 실시예들에 따른 구성 요소(예: 부 또는 프로그램) 각각은 단수 또는 복수의 개체로 구성될 수 있으며, 전술한 해당 서브 구성 요소들 중 일부 서브 구성 요소가 생략되거나, 또는 다른 서브 구성 요소가 다양한 실시예에 더 포함될 수 있다. 대체적으로 또는 추가적으로, 일부 구성 요소들(예: 부 또는 프로그램)은 하나의 개체로 통합되어, 통합되기 이전의 각각의 해당 구성 요소에 의해 수행되는 기능을 동일 또는 유사하게 수행할 수 있다. 다양한 실시예들에 따른, 부, 프로그램 또는 다른 구성 요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱하게 실행되거나, 적어도 일부 동작이 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다.
이상에서는 실시예를 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 도메인으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
110 : 공개 취약점 처리부
112 : 공개 취약점 분석기
114 : 공개 특징 벡터 생성기 116 : 시그니쳐 데이터베이스
120 : 신규 취약점 처리부 122 : 신규 취약점 분석기
124 : 신규 특징 벡터 생성기 126 : 유사도 체크기
130 : 취약점 보고부
114 : 공개 특징 벡터 생성기 116 : 시그니쳐 데이터베이스
120 : 신규 취약점 처리부 122 : 신규 취약점 분석기
124 : 신규 특징 벡터 생성기 126 : 유사도 체크기
130 : 취약점 보고부
Claims (14)
- (a) 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하는 단계; 및
(b) 신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 시그니쳐와 비교하는 단계를 포함하는 것을 특징으로 하는 프로그램 정적 분석 방법. - 제1항에 있어서, 상기 취약점 추적은 취약점의 시그니쳐를 형성하는 특징 벡터로 인코딩되는 것을 특징으로 하는 프로그램 정적 분석 방법.
- 제1항에 있어서, 단계(a)는,
(a-1) 공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하고 분석 결과에서 실제 취약점을 식별하는 단계;
(a-2) 소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 특징 벡터로 파생하는 단계; 및
(a-3) 특징 벡터를 시그니쳐 데이터베이스에 구축하는 단계를 포함하는 것을 특징으로 하는 프로그램 정적 분석 방법. - 제1항에 있어서, 단계(b)는,
(b-1) 신뢰할 수 없는 입력(소스)에서 보안에 민감한 특징(싱크)으로의 잠재적인 취약점 데이터 흐름을 감지하는 단계;
(b-2) 신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터를 파생하는 단계; 및
(b-3) 유사도 척도를 사용하여 알람의 특징 벡터를 공개 취약점 추적의 특징 벡터와 비교하는 단계를 포함하는 것을 특징으로 하는 프로그램 정적 분석 방법. - 제4항에 있어서, 상기 유사도 척도는 코사인 유사도를 포함하는 것을 특징으로 하는 프로그램 정적 분석 방법.
- 제5항에 있어서, 상기 코사인 유사도는 두 특징 벡터의 곱을 분모로 하고 두 특징 벡터의 합을 분자로 하여 계산되는 것을 특징으로 하는 프로그램 정적 분석 방법.
- 제1항에 있어서,
(c) 상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고하는 단계를 더 포함하는 것을 특징으로 하는 프로그램 정적 분석 방법. - 공개 취약점 집합에 대해 오염 분석을 통해 취약점 추적을 추출하고, 추출된 공개 취약점 시그니쳐로 시그니쳐 데이터베이스를 구축하는 공개 취약점 처리부; 및
신규 프로그램에 대한 오염 분석을 통해 보고된 모든 잠재적인 취약점 추적을 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 시그니쳐와 비교하는 신규 취약점 처리부를 포함하는 것을 특징으로 하는 프로그램 정적 분석 시스템. - 제8항에 있어서, 상기 취약점 추적은 취약점의 시그니쳐를 형성하는 특징 벡터로 인코딩되는 것을 특징으로 하는 프로그램 정적 분석 시스템.
- 제8항에 있어서, 상기 공개 취약점 처리부는,
공개 취약점이 있는 코드베이스에 대해 프로그램 정적 분석을 수행하고 분석 결과에서 실제 취약점을 식별하는 공개 취약점 분석기;
소스 포인트에서 싱크 포인트까지 취약점의 데이터 종속 관계에 대한 추적을 추출한 뒤 특징 벡터로 파생하는 공개 특징 벡터 생성기; 및
상기 공개 특징 벡터 생성기의 의해 파생된 특징 벡터를 저장하는 시그니쳐 데이터베이스를 포함하는 것을 특징으로 하는 프로그램 정적 분석 시스템. - 제10항에 있어서, 상기 신규 취약점 처리부는,
신뢰할 수 없는 입력(소스)에서 보안에 민감한 특징(싱크)으로의 잠재적인 취약점 데이터 흐름을 감지하는 신규 취약점 분석기;
신규 프로그램이 분석되면 프로그램에서 보고된 모든 알람의 추적을 추출하고 동일한 방식으로 해당 특징 벡터를 파생하는 신규 특징 벡터 생성기; 및
상기 신규 특징 벡터 생성기에 의해 파생된 알람의 특징 벡터를 유사도 척도를 사용하여 상기 시그니쳐 데이터베이스에 저장된 공개 취약점 추적의 특징 벡터와 비교하는 유사도 체크기를 포함하는 것을 특징으로 하는 프로그램 정적 분석 시스템. - 제11항에 있어서, 상기 유사도 척도는 코사인 유사도를 포함하는 것을 특징으로 하는 프로그램 정적 분석 시스템.
- 제12항에 있어서, 상기 코사인 유사도는 두 특징 벡터의 곱을 분모로 하고 두 특징 벡터의 합을 분자로 하여 계산되는 것을 특징으로 하는 프로그램 정적 분석 시스템.
- 제8항에 있어서,
상기 비교에 의한 유사도 점수에 따라 순위가 매겨진 잠재적 취약점 목록을 보고하는 취약점 보고부를 더 포함하는 것을 특징으로 하는 프로그램 정적 분석 시스템.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220144456 | 2022-11-02 | ||
KR20220144456 | 2022-11-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240066072A true KR20240066072A (ko) | 2024-05-14 |
Family
ID=91076039
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020230139890A KR20240066072A (ko) | 2022-11-02 | 2023-10-18 | 프로그램 정적 분석 방법 및 시스템 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20240066072A (ko) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102021383B1 (ko) | 2017-08-21 | 2019-09-16 | 주식회사 스패로우 | 동적 분석과 정적 분석을 연계한 프로그램을 분석하기 위한 방법 및 장치 |
-
2023
- 2023-10-18 KR KR1020230139890A patent/KR20240066072A/ko active Search and Examination
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102021383B1 (ko) | 2017-08-21 | 2019-09-16 | 주식회사 스패로우 | 동적 분석과 정적 분석을 연계한 프로그램을 분석하기 위한 방법 및 장치 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11087002B2 (en) | Using the same query language for static and dynamic application security testing tools | |
Walden et al. | Predicting vulnerable components: Software metrics vs text mining | |
US11983094B2 (en) | Software diagnostic context selection and use | |
CN104899147B (zh) | 一种面向安全检查的代码静态分析方法 | |
JPWO2006087780A1 (ja) | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 | |
US8850405B2 (en) | Generating sound and minimal security reports based on static analysis of a program | |
CA2522605A1 (en) | Method and system for detecting vulnerabilities in source code | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
CN112560043A (zh) | 一种基于上下文语义的漏洞相似性度量方法 | |
Dewey et al. | Uncovering use-after-free conditions in compiled code | |
CN118051920B (zh) | 一种漏洞验证请求包生成方法、装置、设备及存储介质 | |
US7624304B2 (en) | Defect detection for integers | |
US10387288B2 (en) | Interactive analysis of a security specification | |
CN112131573A (zh) | 安全漏洞的检测方法、装置及存储介质 | |
CN111919214A (zh) | 针对安全性违反的补丁的自动生成 | |
Ferrara et al. | : Backward Context-Sensitive Flow Reconstruction of Taint Analysis Results | |
Suneja et al. | Towards reliable AI for source code understanding | |
JP5077455B2 (ja) | 脆弱性監査プログラム、脆弱性監査装置、脆弱性監査方法 | |
Amankwah et al. | Bug detection in Java code: An extensive evaluation of static analysis tools using Juliet Test Suites | |
CN116738436B (zh) | 一种漏洞可达性分析方法、系统、计算机设备和处理器 | |
Harzevili et al. | Automatic Static Vulnerability Detection for Machine Learning Libraries: Are We There Yet? | |
US20230141948A1 (en) | Analysis and Testing of Embedded Code | |
US11880470B2 (en) | System and method for vulnerability detection in computer code | |
KR20240066072A (ko) | 프로그램 정적 분석 방법 및 시스템 | |
US8458523B2 (en) | Meta attributes in functional coverage models |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |