KR20200097218A - Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법 - Google Patents

Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법 Download PDF

Info

Publication number
KR20200097218A
KR20200097218A KR1020200014795A KR20200014795A KR20200097218A KR 20200097218 A KR20200097218 A KR 20200097218A KR 1020200014795 A KR1020200014795 A KR 1020200014795A KR 20200014795 A KR20200014795 A KR 20200014795A KR 20200097218 A KR20200097218 A KR 20200097218A
Authority
KR
South Korea
Prior art keywords
detection model
assembly code
unit
matrix
detection
Prior art date
Application number
KR1020200014795A
Other languages
English (en)
Other versions
KR102327026B1 (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 고려대학교 산학협력단
Publication of KR20200097218A publication Critical patent/KR20200097218A/ko
Application granted granted Critical
Publication of KR102327026B1 publication Critical patent/KR102327026B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Virology (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

어셈블리 코드(assembly code)의 보안 약점 유무를 탐지하는 탐지 모델을 생성하는 학습 장치가 개시된다. 상기 학습 장치는 학습 데이터를 이루는 어셈블리 코드(assembly code)에 대응하고 노드(node)들과 엣지(edge)들로 구성된 CFG(Control Flow Graph)를 생성하는 CFG 생성부, 상기 노드들 각각을 미리 크기가 정해진 대응 행렬로 변환하는 벡터화부, 및 각각이 상기 노드들 중 하나와 대응되는 복수의 대응 행렬과 엣지 정보를 이용하여 학습 알고리즘을 학습시킴으로써 탐지 모델을 생성하는 학습부를 포함한다.

Description

GCN 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법{DEVICE AND METHOD FOR LEARNING ASSEMBLY CODE AND DETECTING SOFTWARE WEAKNESS BASED ON GRAPH CONVOLUTION NETWORK}
본 발명은 바이너리 코드(binary code)의 보안 약점을 탐지하는 기술에 관한 것으로, 특히 바이너리 코드 또는 어셈블리 코드(assembly code)를 그래프(graph) 형식으로 벡터화시키고 이를 그래프 기반 딥러닝 모델을 통해 학습함으로써 바이너리 코드를 분석하고 보안 약점을 탐지할 수 있는 방법에 관한 것이다.
본 발명에서 사용되는 기술은 크게 word2vec와 GCN(Graph Convolution Network)이다. GCN은 딥러닝 기술 중 하나로 비선형 데이터 구조인 그래프 데이터를 학습시키는 데에 특화된 기술이다. CNN(Convolutional Neural Network)이나 RNN(Recurrent Neural Network) 등과 같은 기존의 딥러닝 기술은 대부분 선형적인 데이터를 학습시키기에 적합했다. 이에 반하여, GCN은 비선형 데이터 구조인 그래프 형식의 데이터를 학습시키기에 적합하다. 단어 임베딩 알고리즘의 하나인 Word2vec은 자연어 처리 기술 중 하나로 각 단어를 그 의미에 따른 벡터 값으로 대응시킨다.
자동화 취약점 분석은 코드를 컴퓨터가 자동으로 분석하여 취약점을 탐지하는 기술을 의미한다. 일반적으로, 코드를 실행하지 않고 분석하는 기법을 정적분석이라 하며, 그 중에서도 소스 코드가 아닌 바이너리 코드(또는 어셈블리 코드)를 분석하여 취약점을 찾는 것을 바이너리 코드 자동화 취약점 분석이라 한다. 바이너리 코드 자동화 취약점 분석은 바이너리 코드를 분석하여 미리 정의되어 있는 특정 패턴과 비교한다. 만약, 바이너리 코드 내의 임의의 패턴이 특정 패턴과 일치한다면 취약점으로 판단하고 이를 사용자에게 알린다. 하지만, 자동화 취약점 분석은 패턴을 기반으로 하기 때문에 오탐지율이 높으며, 취약점에 대한 패턴을 정의하는 것은 매우 복잡하고 시간과 노력이 필요한 작업이다. 왜냐하면, 패턴을 정의하기 위해서는 취약점 데이터셋과 새롭게 등장하는 취약점 데이터셋을 분석해야 하기 때문이다.
본 발명에서는 딥러닝 기술을 이용하여 이러한 오탐지율을 낮은 탐지 기법을 제안하고자 한다.
대한민국 공개특허 제2011-0087826호 (2011.08.03. 공개) 대한민국 공개특허 제2011-0076976호 (2011.07.06. 공개)
본 발명이 이루고자 하는 기술적인 과제는 GCN을 기반으로 어셈블리 코드를 학습하여 코드 상에 존재하는 보안 약점을 탐지하는 방법을 제공하는 것이다.
본 발명의 실시예에 따른 탐지 모델 생성 장치는 학습 데이터를 이루는 어셈블리 코드(assembly code)에 대응하고 노드(node)들과 엣지(edge)들로 구성된 CFG(Control Flow Graph)를 생성하는 CFG 생성부, 상기 노드들 각각을 미리 크기가 정해진 대응 행렬로 변환하는 벡터화부, 및 각각이 상기 노드들 중 하나와 대응되는 복수의 대응 행렬과 엣지 정보를 이용하여 학습 알고리즘을 학습시킴으로써 탐지 모델을 생성하는 학습부를 포함한다.하는 탐지 모델 생성 장치.
본 발명의 실시예에 따른 탐지 장치는 탐지 대상 어셈블리 코드에 대응하고 노드들과 엣지들로 구성된 제2 CFG를 생성하는 제2 CFG 생성부, 상기 노드들 각각을 미리 크기가 정해진 대응 행렬로 변환하는 제2 벡터화부, 및 상기 탐지 모델을 이용하여 상기 탐지 대상 어셈블리 코드의 보안 약점 유무를 결정하는 탐지부를 포함한다.
본 발명의 실시예에 따른 어셈블리 코드 학습 방법 및 보안 약점 탐지 방법에 의할 경우, 전문가 및 개발자가 직접 패턴을 정의하고 개발하는 노력을 절약할 수 있는 효과가 있다.
또한, 본 발명에 의할 경우 딥러닝 기법을 이용하여 보안 약점의 탐지 정확도를 높이고 오탐지율을 낮출 수 있는 효과가 있다.
본 발명의 상세한 설명에서 인용되는 도면을 보다 충분히 이해하기 위하여 각 도면의 상세한 설명이 제공된다.
도 1은 본 발명의 일 실시예에 따른 학습 장치의 기능 블럭도이다.
도 2는 도 1에 도시된 CFG 생성부에 의해 생성된 CFG의 일 예를 도시한다.
도 3은 도 1에 도시된 CFG 생성부에 의한 인접 행렬 생성 과정을 설명하기 위한 도면이다.
도 4는 도 1에 도시된 벡터화부에 의한 벡터 생성 동작의 전체적인 흐름을 설명하기 위한 도면이다.
도 5는 도 1에 도시된 벡터화부에 의한 벡터 생성 동작의 구체적인 설명을 위한 도면이다.
본 명세서에 개시되어 있는 본 발명의 개념에 따른 실시예들에 대해서 특정한 구조적 또는 기능적 설명들은 단지 본 발명의 개념에 따른 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 본 발명의 개념에 따른 실시예들은 다양한 형태들로 실시될 수 있으며 본 명세서에 설명된 실시예들에 한정되지 않는다.
본 발명의 개념에 따른 실시예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시예들을 도면에 예시하고 본 명세서에서 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시예들을 특정한 개시 형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 벗어나지 않은 채, 제1 구성 요소는 제2 구성 요소로 명명될 수 있고 유사하게 제2 구성 요소는 제1 구성 요소로도 명명될 수 있다.
어떤 구성 요소가 다른 구성 요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성 요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성 요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성 요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
본 명세서에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로서, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 본 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 본 명세서에 첨부된 도면들을 참조하여 본 발명의 실시예들을 상세히 설명한다. 그러나, 특허출원의 범위가 이러한 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 본 발명의 일 실시예에 따른 학습 장치의 기능 블럭도이다.
도 1을 참조하면, 어셈블리 코드 학습 장치, 어셈블리 코드 탐지 장치, 코드 탐지 장치, 보안 약점 탐지 모델 생성 장치, 탐지 모델 생성 장치, 코드 학습 및 탐지 장치 등으로 명명될 수도 있는 학습 장치(10)는 프로그램 코드(program code)를 입력받아 인공 신경망(Artificial Neural Network, ANN)을 학습시킴으로써 프로그램 코드의 보안 취약점 유무를 탐지하는 탐지 모델을 생성할 수 있다. 실시예에 따라, 학습 장치(10)는 생성된 탐지 모델을 이용하여 탐지 대상 프로그램 코드의 보안 취약점 유무를 탐지할 수도 있다.
학습 장치(10)는 수신부(110), CFG 생성부(120), 벡터화부(130), 학습부(140), 탐지부(150), 및 저장부(160) 중 적어도 하나 이상을 포함할 수 있다. 일 예로, 학습 장치(10)는 CFG 생성부(120), 벡터화부(130), 및 학습부(140)를 포함할 수 있으며, 수신부(110) 및/또는 저장부(160)를 더 포함할 수 있다. 실시예에 따라, 학습 장치(10)는 탐지부(150)를 더 포함할 수 있는데, 이 경우 학습 장치(10)는 탐지 장치로 명명될 수도 있다. 또 다른 실시예에 의하면, 학습 장치(10)는 CFG 생성부(120), 벡터화부(130), 및 탐지부(150)를 포함하고, 수신부(110) 및/또는 저장부(160)를 더 포함할 수도 있다.
수신부(110)는 학습 데이터 및/또는 탐지 데이터를 수신할 수 있다. 수신부(110)에 의해 수신된 데이터는 저장부(160)에 저장될 수 있다. 여기서, 학습 데이터는 라벨링된 프로그램 코드(program code), 예컨대 어셈블리 코드(assembly code) 또는 바이너리 코드(binary code)일 수 있다. 라벨링의 의미는 해당 프로그램 코드가 보안 취약점을 포함하고 있는지 여부를 의미할 수 있다. 즉, 학습 데이터는 보안 취약점이 존재하는 프로그램 코드들(제1 그룹의 프로그램 코드들)과 보안 취약점이 존재하지 않는 프로그램 코드들(제2 그룹의 프로그램 코드들)을 모두 포함할 수 있으며, 해당 프로그램의 보안 취약점 여부에 관한 정보는 학습 과정에서 이용된다. 탐지 데이터는 탐지 대상 프로그램 코드, 예컨대 어셈블리 코드 또는 바이너리 코드를 의미할 수 있다.
수신된 데이터가 바이너리 코드인 경우, 수신부(110)는 수신된 바이너리 코드를 어셈블리 코드로 변환할 수 있다. 또한, 수신부(110)에 의해 변환된 어셈블리 코드는 저장부(160)에 저장될 수 있다.
실시예에 따라 학습 데이터 및/또는 탐지 데이터는 저장부(160)에 미리 저장되어 있을 수도 있다. 이 경우, 탐지 장치(10)에는 수신부(110)가 포함되지 않을 수도 있다.
CFG 생성부(120)는 수신부(110)에 의해 수신된 어셈블리 코드, 수신부(110)에 의해 생성된 어셈블리 코드, 수신부(110)에 의해 저장부(160)에 저장된 어셈블리 코드, 또는 저장부(160)에 미리 저장되어 있던 어셈블리 코드에 대응하는 CFG(Control Flow Graph, 제어 흐름 그래프)를 추출(또는 생성)할 수 있다. CFG는 CFG를 이루는 노드에 관한 정보와 엣지에 관한 정보를 포함하는 개념으로 이해될 수 있다. CFG 생성부(120)에 의해 생성된 CFG, 노드 정보, 및 인접 행렬은 저장부(160)에 저장될 수 있다. CFG 생성부(120)의 구체적인 동작에 관하여는 후술하기로 한다.
벡터화부(130)는 CFG의 각 노드에 포함된 어셈블리 코드를 벡터화하여 대응되는 벡터를 생성할 수 있다. CFG가 생성된 경우, 각 노드는 미리 정해진 크기의 어셈블리 코드를 포함한다. GCN으로 생성된 노드들을 학습시키기 위해서, 각 노드는 일정한 크기를 갖는 벡터로 변환되어야 한다. 본 발명에서는 소정의 단어 임베딩 알고리즘을 이용한 룩업 데이블(lookup table, 순람표) 생성과 룩업 테이블을 이용한 어셈블리 코드 임베딩(embedding) 동작을 통해 각 노드에 대응하는 벡터를 생성한다. 벡터화부(130)에 의해 생성된 룩업 테이블, 각 노드에 대응하는 행렬 등은 저장부(160)에 저장될 수 있다. 벡터화부(130)의 구체적인 동작은 후술하기로 한다.
학습부(140)는 학습 데이터를 이용하여 소정의 학습 알고리즘, 예컨대 GCN(Graph Convolution Network)을 학습시킴으로써 목적 어셈블리 코드의 보안 취약점 유무를 탐지하는 탐지 모델을 생성할 수 있다. 또한, 학습부(140)에 의해 생성된 탐지 모델은 저장부(160)에 저장될 수 있다.
구체적으로, 학습부(140)는 학습 데이터, 예컨대 복수의 어셈블리 코드들 각각의 노드 정보(각 노드에 대응하는 행렬을 의미할 수 있음)와 엣지 정보(인접 행렬을 의미할 수 있음)를 이용하여 GCN을 학습시킬 수 있다.
탐지부(150)는 학습부(140)에 의해 생성된 탐지 모델을 이용하여 탐지 대상 어셈블리 코드의 보안 취약점 유무를 결정할 수 있다. 다시 말해, 탐지부(150)는 탐지 대상 어셈블리 코드가 제1 그룹에 포함되는지 제2 그룹에 포함되는지를 결정할 수 있다. 탐지 대상 어셈블리 코드가 제1 그룹에 포함되는 것으로 결정되는 경우 탐지 대상 어셈블리 코드에는 보안 취약점이 존재하는 것으로 볼 수 있고, 탐지 대상 어셈블리 코드가 제2 그룹에 포함되는 것으로 결정되는 경우 탐지 대상 어셈블리 코드에는 보안 취약점이 존재하지 않는 것으로 볼 수 있다. 여기서 탐지부(150)는 탐지 대상 어셈블리 코드에 대응하여 생성된 각 노드에 대응하는 행렬과 엣지 정보(예컨대, 인접 행렬)를 탐지 모델에 입력함으로써 탐지 대상 어셈블리 코드의 보안 약점 유무를 결정할 수 있다.
저장부(160)에는 수신부(110)에 의해 수신된 데이터, CFG 생성부(120)에 의해 생성된 CFG, 노드 정보, 엣지 정보, 벡터화부(130)에 의해 생성된 각 노드에 대응하는 행렬들, 학습부(140)에 의해 생성된 탐지 모델, 탐지부(150)에 의해 탐지된 탐지 결과 등이 저장될 수 있다.
학습 장치(10)는 각종 연산 처리 및 신호 생성이 가능한 적어도 하나의 전자 장치를 포함할 수 있다. 여기서, 적어도 하나의 전자 장치는 프로세서 및/또는 프로세서가 설치된 컴퓨팅 장치를 포함할 수 있다. 여기서, 프로세서는 중앙 처리 장치(CPU, Central Processing Unit), 마이크로 컨트롤러 유닛(MCU, Micro Controller Unit), 마이컴(Micom, Micro Processor), 애플리케이션 프로세서(AP, Application Processor), 전자 제어 유닛(ECU, Electronic Controlling Unit), 그래픽 처리 장치(GPU, Graphic Processing Unit) 및/또는 각종 연산 처리 및 제어 신호의 생성이 가능한 처리 장치 등을 포함할 수 있다. 이들 처리 장치는 예를 들어 하나 또는 둘 이상의 반도체 칩 및 관련 부품을 이용하여 구현될 수 있다. 또한, 컴퓨팅 장치는 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버용 컴퓨터, 스마트 폰, 태블릿 피씨, 스마트 시계, 두부 장착형 디스플레이(HMD, Head Mounted Display) 장치, 휴대용 게임기, 내비게이션 장치, 개인용 디지털 보조기(PDA, Personal Digital Assistant), 인공지능 스피커 장치, 디지털 텔레비전, 셋톱 박스, 로봇, 가전 기기, 기계 장치 및/또는 이외 정보 처리 기능을 수행할 수 있는 적어도 하나의 전자 장치를 포함할 수 있다.
학습 장치(10)는 도 1에 도시된 바와 같이 저장부(160)와 데이터 송수신이 가능하도록 직접 또는 간접적으로 연결되어 있을 수 있다. 저장부(160)는 주기억장치 및 보조기억장치 중 적어도 하나를 포함할 수 있으며, 주기억장치는 롬(ROM) 및/또는 램(RAM) 등을 포함할 수 있고, 보조기억장치는 플래시 메모리 장치, SD(Secure Digital) 카드, 솔리드 스테이트 드라이브(SSD, Solid State Drive), 하드 디스크 드라이브(HDD, Hard Disc Drive) 컴팩트 디스크(CD), 디브이디(DVD) 및/또는 레이저 디스크 등을 포함할 수 있다.
학습 장치(10)는 저장부(160)에 저장된 애플리케이션을 구동시켜, CFG 생성, CFG를 이루는 노드에 대응하는 벡터 생성, 탐지 모델 생성 등 다양한 동작을 수행할 수도 있다. 여기서, 애플리케이션은 설계자에 의해 직접 작성되어 저장부(160)에 저장 또는 갱신된 것일 수도 있고, 또는 유선 또는 무선 통신 네트워크를 통해 접속 가능한 전자 소프트웨어 유통망 등을 통하여 획득 또는 갱신된 것일 수도 있다.
도 2는 도 1에 도시된 CFG 생성부에 의해 생성된 CFG의 일 예를 도시하고, 도 3은 도 1에 도시된 CFG 생성부에 의한 인접 행렬 생성 과정을 설명하기 위한 도면이다.
CFG 생성부(120)는 어셈블리 코드에 대응하는 CFG를 생성(또는 추출)할 수 있다. CFG는 프로그램의 실행 중에 횡단할 수 있는 모든 경로를 그래프로 표현한 것으로 컴파일러와 정정 분석에 흔히 사용된다. CFG의 각 노드(node)는 어셈블리 코드를 미리 정해진 단위(예컨대, 기본 블럭(basic block))로 나눈 것을 의미하며, 엣지(edge)는 코드가 실행되는 흐름(제어 흐름)을 의미할 수 있다. 여기서, 기본 블럭은 하나의 엔트리 포인트(entry point)와 종료 지점을 갖고 분기문이 없는 직선 코드를 의미할 수 있다. 결국, CFG에 포함되는 노드에 관한 정보는 각 노드를 식별할 수 있는 정보와 각 노드에 포함되는 어셈블리 코드를 포함하고, 엣지에 관한 정보는 출발 노드, 목적 노드, 및 방향성에 관한 정보중 적어도 하나를 포함할 수 있다. 또한, 엣지에 관한 정보는 인접 행렬(adjacency matrix)로 정의될 수 있다. 인접 행렬의 각 성분은 두 노드 간의 흐름에 대한 정보를 나타낸다. 예컨대, 인접 행렬의 성분 ajk은 j번째 노드와 k번째 노드 간의 흐름에 대한 정보를 나타낸다. ajk의 성분값이 '0'인 경우 프로그램 코드의 실행 중에 j번째 노드와 k번째 노드 간에는 흐름이 존재하지 않음을 의미하고, ajk의 성분값이 '1'인 경우 프로그램 코드의 실행 중에 j번째 노드와 k번째 노드 간에 흐름이 존재함을 의미할 수 있다. 이 경우, ajk의 성분값은 '0' 또는 '1'의 값을 가질 수 있다. 또한, 실행 흐름이 j번째 노드에서 k번째 노드로 이동하지만 k번째 노드에서 j번째 노드로 이동하지 않는다면 ajk의 성분값은 '1'이지만 akj의 성분값은 '0'일 수 있다. 또 다른 실시예로, ajk의 성분값은 '0', '1', 및 '2' 중 어느 하나의 값을 가질 수 있다. 이때, ajk의 성분값이 '0'인 경우 프로그램 코드의 실행 중에 j번째 노드와 k번째 노드 간에는 흐름이 존재하지 않음을 의미하고, ajk의 성분값이 '1'인 경우 프로그램 코드의 실행 중에 j번째 노드와 k번째 노드 간에 흐름이 존재함을 의미하고, ajk의 성분값이 '2'인 경우에는 j번째 노드와 k번째 노드 간에는 양방향의 흐름이 존재함을 의미할 수 있다.
도 4는 도 1에 도시된 벡터화부에 의한 벡터 생성 동작의 전체적인 흐름을 설명하기 위한 도면이고, 도 5는 도 1에 도시된 벡터화부에 의한 벡터 생성 동작의 구체적인 설명을 위한 도면이다.
벡터화부(130)는 우선 소정의 단어 임베딩 알고리즘을 이용하여 각 노드에 포함된 어셈블리 코드의 각 단어들을 벡터로 변화함으로써, 룩업 데이블을 생성할 수 있다. 구체적으로, 벡터화부(130)는 word2vec과 같은 단어 임베딩 알고리즘을 이용하여 노드에 포함된 각 단어와 이에 대응하는 벡터로 구성된 룩업 데이블을 생성할 수 있다.
다음으로, 벡터화부(130)는 각 노드에 대응하는 고정된 크기의 행렬(생성된 행렬은 노드에 대응하는 벡터라 명명될 수 있음)을 생성할 수 있다. 예컨대, 노드가 n개의 라인(line)으로 구성된 함수라면, 벡터화부(130)는 n×k의 크기를 갖는 행렬을 생성할 수 있다. 행렬의 각 행은 순차적으로 노드에 포함된 각 라인에 대응한다. 즉, 행렬의 l(l은 1 보다 크거나 갖고 n 보다 작거나 같은 자연수)번째 행은 노드의 l번째 라인에 대응한다. 또한, 행렬의 열의 크기(k)는 노드에 포함된 명령어들 중 가장 길이가 큰 명령어의 길이를 의미할 수 있다. 여기서, 명령어의 길이는 명령어에 포함된 연산 부호(operation code, OP code) 및 피연산자(operand)의 개수를 의미할 수 있다. 하나의 피연산자가 적어도 하나의 연산자(operator)와 결합된 상수나 변수로 구성된 경우, 피연산자의 개수는 상수나 변수의 개수를 의미할 수 있다. 예컨대, 도 5에 도시된 명령어(mov ebp, esp)의 크기는 3이고, 명령어(mov [ebp+eax*4-0x2c], edx)의 크기는 6이다. 실시에에 따라, k는 어셈블리 코드에 포함된 명령어들 중 크기가 가장 큰 명령어의 크기를 의미할 수 있다. 실시예에 따라, k는 어셈블리 코드에 포함되는 명령어들 각각에 포함되는 제1 피연산자의 최대 길이(예컨대, '4')와 제2 피연산자의 최대 길이(예컨대, '4')와 연산 부호의 길이인 '1'의 합일 수도 있다(최대 길이를 갖는 제1 피연산자와 최대 길이를 갖는 제2 피연산자는 각기 다른 명령어에 포함될 수 있음). 결과적으로, 벡터화부(130)는 생성된 룩업 데이블을 이용하여 n개의 라인(또는 n개의 명령어)으로 구성된 노드를 n×k의 크기를 갖는 행렬로 변환할 수 있다.
실시예에 따라, 노드는 n 이하의 라인(또는 명령어)으로 구성될 수도 있다. 어셈블리 코드를 이루는 기본 블럭 단위의 노드들 중 가장 길이가 큰(가장 많은 명령어를 가진) 노드에 포함된 라인이 n이라면, 다른 노드들은 n 이하의 라인으로 구성될 수도 있다. 이 경우 역시 노드들에 대응하는 행렬의 크기는 n×k일 수 있다. n 미만의 명령어를 포함하는 노드의 경우, 대응 행렬에 포함되는 행들 중에서 대응되는 명령어가 없는 행의 경우에는 그 성분값은 모두 '0'으로 설정될 수 있다.
도 5를 참조하여 행렬에 포함되는 임의의 행을 생성하는 방법을 설명한다. 벡터화부(130)는 룩업 데이블을 이용하여 노드에 포함된 명령어들을 행렬로 변환한다. 이때, 노드의 명령어들은 행렬의 각 행에 대응된다. 또한, 행렬의 각 성분은 명령어를 이루는 각 단어의 벡터값일 수 있다. 여기서, 중요한 점은 어셈블리 코드의 특성상 명령어의 길이가 각각 다르기 때문에, 하나의 명령어를 미리 정해진 동일한 길이의 성분을 갖도록 변환하여야 한다. 일 예로, 명령어에 포함되는 각 단어를 행렬의 성분으로 순차적으로 변환한 후에 대응되는 단어가 없는 성분은 그 값을 '0'으로 설성할 수 있다.
구체적으로, 어셈블리 코드에 포함된 명령어의 최대 길이는 9라고 가정하자. 예시적인 노드(도 4 참조)의 2번째 행의 명령어는 mov ebp, esp이다. 연산 부호(OP code)에 해당하는 mov의 벡터값을 첫번째 성분(연산 부호에 할당된 성분)으로, 제1 피연산자를 이루는 ebp의 벡터값을 피연산자에 할당된 4개의 성분들 중 첫번째 성분으로, 제2 피연산자를 이루는 esp의 벡터값을 제2 피연산에 할당된 4개의 성분들 중 첫번째 성분으로 설정한 후, 대응되는 단어가 없는 성분은 '0'으로 설정한다. 이와 같은 과정을 거쳐 행렬의 2번째 행이 완성된다.
다른 예로, 노드에 포함된 명령어가 mov [ebp+eax*4-0x2c], edx라 하자. 연산 부호(OP code)에 해당하는 mov의 벡터값은 행의 성분들 중에서 연산 부호에 할당된 첫번째 성분으로, 제1 피연산자에 포함된 첫번째 단어인 ebp의 벡터값은 행의 성분들 중에서 제1 피연산자에 할당된 4개의 성분들 중 첫번째 성분으로, eax의 벡터값은 제1 피연산자에 할당된 4개의 성분들 중 두번재 성분으로, 4의 벡터값은 제1 피연산자에 할당된 4개의 성분들 중 세번째 성분으로, 0x2c의 벡터값은 제1 피연산자에 할당된 4개의 성분들 중 네번째 성분으로, 제2 피연산자에 해당하는 edx의 벡터값은 제2 피연산자에 할당된 4개의 성분들 중 첫번째 성분으로 설정된다. 또한, 행의 성분들 중에서 대응되는 단어가 없는 성분들에는 0이 할당된다. 도 5에서 행의 각 성분에 명령어에 포함된 각 단어가 할당된 것으로 도시되어 있으나, 실질적으로는 그에 대응하는 벡터값이 할당될 수 있다.
이와 같은 n라인의 명령어에 대하여 변환된 행을 세로로 합친다면, n×k(예컨대, n×9)의 크기를 갖는 행렬을 생성할 수 있다. 즉, 벡터화부(130)는 n라인의 어셈블리 코드를 갖고 있는 노드를 n×k의 행렬로 벡터화시킬 수 있다. 각 노드의 벡터화된 값(예컨대, 행렬)과 엣지 정보(예컨대, 인접 행렬)는 학습 과정에 이용되거나 탐지 과정에 이용될 수 있다.
이상에서 설명된 장치는 하드웨어 구성 요소, 소프트웨어 구성 요소, 및/또는 하드웨어 구성 요소 및 소프트웨어 구성 요소의 집합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성 요소는, 예를 들어, 프로세서, 콘트롤러, ALU(Arithmetic Logic Unit), 디지털 신호 프로세서(Digital Signal Processor), 마이크로컴퓨터, FPA(Field Programmable array), PLU(Programmable Logic Unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(Operation System, OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술 분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(Processing Element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(Parallel Processor)와 같은, 다른 처리 구성(Processing Configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(Computer Program), 코드(Code), 명령(Instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(Collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성 요소(Component), 물리적 장치, 가상 장치(Virtual Equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(Signal Wave)에 영구적으로, 또는 일시적으로 구체화(Embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 좋ㅂ하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(Magnetic Media), CD-ROM, DVD와 같은 광기록 매체(Optical Media), 플롭티컬 디스크(Floptical Disk)와 같은 자기-광 매체(Magneto-optical Media), 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
본 발명은 도면에 도시된 실시예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 것이다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성 요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성 요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.
10 : 학습 장치
110 : 수신부
120 : CFG 생성부
130 : 벡터화부
140 : 학습부
150 : 탐지부
160 : 저장부

Claims (9)

  1. 학습 데이터를 이루는 어셈블리 코드(assembly code)에 대응하고 노드(node)들과 엣지(edge)들로 구성된 CFG(Control Flow Graph)를 생성하는 CFG 생성부;
    상기 노드들 각각을 미리 크기가 정해진 대응 행렬로 변환하는 벡터화부; 및
    각각이 상기 노드들 중 하나와 대응되는 복수의 대응 행렬과 엣지 정보를 이용하여 학습 알고리즘을 학습시킴으로써 탐지 모델을 생성하는 학습부를 포함하는 탐지 모델 생성 장치.
  2. 제1항에 있어서,
    상기 CFG 생성부는 각각이 상기 노드들 상호 간의 제어 흐름에 관한 정보를 나타내는 복수의 성분들을 포함하는 인접 행렬(adjacency matrix)을 생성하고,
    상기 엣지 정보는 상기 인접 행렬을 의미하는,
    탐지 모델 생성 장치.
  3. 제1항에 있어서,
    상기 벡터화부는 word2vec을 이용하여 노드에 포함되는 단어들 각각과 단어들 각각에 대응하는 벡터값을 포함하는 룩업 테이블(lookup table)을 생성하고, 상기 룩업 테이블을 이용하여 노드에 포함된 명령어들 각각이 상기 대응 행렬의 각 행에 대응되도록 명령어에 포함된 단어를 대응되는 벡터값으로 변환하여 상기 대응 행렬을 생성하는,
    탐지 모델 생성 장치.
  4. 제3항에 있어서,
    상기 대응 행렬의 행의 크기는 노드에 포함되는 명령어들의 개수와 동일하고, 상기 대응 행렬의 열의 크기는 상기 어셈블리 코드에 포함되는 명령어들 중 길이가 가장 큰 명령어의 길이와 동일한,
    탐지 모델 생성 장치.
  5. 제1항에 있어서,
    상기 학습 알고리즘은 GCN(Graph Convolution Network)인,
    탐지 모델 생성 장치.
  6. 제3항에 있어서,
    상기 대응 행렬의 행의 크기는 노드에 포함되는 명령어들의 개수와 동일하고, 상기 대응 행렬의 열의 크기는 상기 어셈블리 코드에 포함되는 제1 피연산자(operand)들 중 길이가 가장 큰 제1 피연산자의 길이와 상기 어셈블리 코드에 포함되는 제2 피연산자들 중 길이가 가장 큰 제2 피연산자의 길이와 '1'을 더한 값인,
    탐지 모델 생성 장치.
  7. 제6항에 있어서,
    상기 제1 피연산자 또는 제2 피연산자의 길이는 상기 제1 피연산자 또는 상기 제2 피연산자에 포함되는 상수와 변수의 개수를 의미하는,
    탐지 모델 생성 장치.
  8. 제1항에 있어서,
    상기 탐지 모델 생성 장치는 상기 탐지 모델 생성 장치는 상기 탐지 모델을 이용하여 탐지 대상 어셈블리 코드의 보안 약점 유무를 결정하는 탐지부를 더 포함하는,
    탐지 모델 생성 장치.
  9. 탐지 대상 어셈블리 코드에 대응하고 노드들과 엣지들로 구성된 제2 CFG를 생성하는 제2 CFG 생성부;
    상기 노드들 각각을 미리 크기가 정해진 대응 행렬로 변환하는 제2 벡터화부; 및
    제1항 내지 제7항 중 어느 하나의 항에 의해 생성된 탐지 모델을 이용하여 상기 탐지 대상 어셈블리 코드의 보안 약점 유무를 결정하는 탐지부를 포함하는 탐지 장치.
KR1020200014795A 2019-02-07 2020-02-07 Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법 KR102327026B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020190014271 2019-02-07
KR20190014271 2019-02-07

Publications (2)

Publication Number Publication Date
KR20200097218A true KR20200097218A (ko) 2020-08-18
KR102327026B1 KR102327026B1 (ko) 2021-11-16

Family

ID=72291861

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200014795A KR102327026B1 (ko) 2019-02-07 2020-02-07 Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법

Country Status (1)

Country Link
KR (1) KR102327026B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220169778A (ko) * 2021-06-21 2022-12-28 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
KR20230065017A (ko) * 2021-11-04 2023-05-11 연세대학교 산학협력단 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법
KR20230082792A (ko) * 2021-12-02 2023-06-09 (주)트리니티소프트 소스코드 보안 취약점의 종류를 구별하는 인공지능 기반의 구별 모델의 생성을 통해 소스코드에 대한 보안 취약점의 종류를 확인할 수 있도록 지원하는 전자 장치 및 그 동작 방법

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110076976A (ko) 2008-10-29 2011-07-06 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 시스템상에서 구동하는 악성 소프트웨어의 존재를 감지하기 위한 시스템, 방법 및 프로그램 제품
KR20110087826A (ko) 2010-01-27 2011-08-03 한남대학교 산학협력단 가상머신을 이용한 악성소프트웨어 탐지 방법
US20180096144A1 (en) * 2015-11-17 2018-04-05 Wuhan Antiy Information Technology Co., Ltd. Method, system, and device for inferring malicious code rule based on deep learning method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20110076976A (ko) 2008-10-29 2011-07-06 인터내셔널 비지네스 머신즈 코포레이션 컴퓨터 시스템상에서 구동하는 악성 소프트웨어의 존재를 감지하기 위한 시스템, 방법 및 프로그램 제품
KR20110087826A (ko) 2010-01-27 2011-08-03 한남대학교 산학협력단 가상머신을 이용한 악성소프트웨어 탐지 방법
US20180096144A1 (en) * 2015-11-17 2018-04-05 Wuhan Antiy Information Technology Co., Ltd. Method, system, and device for inferring malicious code rule based on deep learning method

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Anh Viet Phan et al, "Convolutional Neural Networks over Control Flow Graphs for Software Defect Prediction"(2018.02.)* *
Thomas N. Kipf et al, "Semi-Supervised Classification with Graph Convolutional Networks"(2017.02.)* *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220169778A (ko) * 2021-06-21 2022-12-28 고려대학교 산학협력단 프로그램 코드 처리 장치 및 방법
KR20230065017A (ko) * 2021-11-04 2023-05-11 연세대학교 산학협력단 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법
KR20230082792A (ko) * 2021-12-02 2023-06-09 (주)트리니티소프트 소스코드 보안 취약점의 종류를 구별하는 인공지능 기반의 구별 모델의 생성을 통해 소스코드에 대한 보안 취약점의 종류를 확인할 수 있도록 지원하는 전자 장치 및 그 동작 방법

Also Published As

Publication number Publication date
KR102327026B1 (ko) 2021-11-16

Similar Documents

Publication Publication Date Title
CN110175454B (zh) 一种基于人工智能的智能合约安全漏洞挖掘方法及系统
US11567759B1 (en) Generating source code from binary files
KR102327026B1 (ko) Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
US10474934B1 (en) Machine learning for computing enabled systems and/or devices
JP7439242B2 (ja) 機械学習モデルの視覚的作成及び監視
KR102221492B1 (ko) 텍스트 마이닝 기반 보안 이벤트 자동 검증 시스템 및 방법
KR102167011B1 (ko) 샘플링 및 적응적으로 변경되는 임계치에 기초하여 뉴럴 네트워크를 학습하는데 이용되는 하드 네거티브 샘플을 추출하는 영상 학습 장치 및 상기 장치가 수행하는 방법
US11288589B1 (en) Quantum circuit modeling
KR101530132B1 (ko) 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치
CN112989363A (zh) 漏洞定位方法、装置、电子设备和存储介质
Mishra et al. Test case generation and optimization for critical path testing using genetic algorithm
JP2011118841A (ja) シミュレーション方法、システム、及びプログラム
CN115455382A (zh) 一种二进制函数代码的语义比对方法及装置
US10108513B2 (en) Transferring failure samples using conditional models for machine condition monitoring
CN103793217A (zh) 用于软件快速配置的方法和系统
US20140278296A1 (en) Selective importance sampling
KR102610431B1 (ko) 인공지능 분석 기반 프로그램 소스코드의 요약문 생성 장치 및 방법
WO2015116225A2 (en) Test automation modeling
US20230205883A1 (en) Integrated static and dynamic analysis for malware detection
US20100205584A1 (en) Method and apparatus for determining authoritativeness of first software component with regard to second software component
KR20230097710A (ko) 훈련된 다중 언어모델을 통한 의사결정 시뮬레이션 장치 및 방법
CN114372266A (zh) 基于操作码图的安卓恶意软件检测方法
Jeong et al. A data type inference method based on long short-term memory by improved feature for weakness analysis in binary code
KR20200126888A (ko) 시뮬레이터를 구현하는 방법, 장치, 기기 및 매체

Legal Events

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