KR20220077894A - 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치 - Google Patents

스트립트 바이너리 함수 심볼 예측 방법 및 그 장치 Download PDF

Info

Publication number
KR20220077894A
KR20220077894A KR1020210170615A KR20210170615A KR20220077894A KR 20220077894 A KR20220077894 A KR 20220077894A KR 1020210170615 A KR1020210170615 A KR 1020210170615A KR 20210170615 A KR20210170615 A KR 20210170615A KR 20220077894 A KR20220077894 A KR 20220077894A
Authority
KR
South Korea
Prior art keywords
function
vector
neural network
sentence
code
Prior art date
Application number
KR1020210170615A
Other languages
English (en)
Other versions
KR102608014B1 (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 KR20220077894A publication Critical patent/KR20220077894A/ko
Application granted granted Critical
Publication of KR102608014B1 publication Critical patent/KR102608014B1/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Virology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Machine Translation (AREA)

Abstract

본 발명은 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치에 관한 발명이다. 본 발명의 일 실시예에 따른 함수 심볼 예측 방법은, 타겟함수에 관한 제1 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제1 코드조각을 획득하는 단계; 상기 제1 소스코스보다 업데이트된 제2 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제2 코드조각을 획득하는 단계; 상기 제1 코드조각 및 상기 제2 코드조각을 각각 제1 문장 및 제2 문장으로 변환하는 단계; 상기 제1 문장 및 상기 제2 문장을 바탕으로 워드 임베딩(word embedding) 모델을 이용하여 각각 제1 벡터 및 제2 벡터를 획득하는 단계; 상기 제1 벡터 및 상기 제2 벡터를 순차적으로 입력하여 신경망을 학습시키는 단계; 스트립트 바이너리(strriped binary)에서 제3 코드조각을 획득하는 단계; 상기 제3 코드조각을 제3 문장으로 변환하는 단계; 상기 제3 문장을 바탕으로 상기 워드 임베딩 모델을 이용하여 제3 벡터를 획득하는 단계; 및 상기 제3 벡터를 상기 학습된 신경망에 입력하여 출력된 결과를 상기 제3 코드조각에 해당하는 함수 심볼로 획득하는 단계; 를 포함할 수 있다.

Description

스트립트 바이너리 함수 심볼 예측 방법 및 그 장치{DEVICE AND METHOD FOR PREDICTING STRIPPED BINARY FUNCTION SYMBOLS}
본 발명은 스트립트 바이너리(stripped binary) 함수 심볼 예측 방법 및 그 장치에 관한 발명이다. 보다 자세하게는 함수 심볼 정보가 삭제된 스트립트 바이너리 파일에서 함수의 심볼을 신경망 학습을 통하여 예측하는 방법 및 그 장치에 관한 것이다.
함수는 프로그래밍 언어에서 가장 일반적인 구조 중 하나다. 함수의 정의와 선언은 소스코드에서 명시적이지만 바이너리에서는 컴파일과정에서 많은 정보가 손실되었다. 그러나 많은 바이너리 분석기술에는 함수 정보가 필요하다.
취약점탐지에서 어떤 함수가 사용되었는지 확인해야 되기 때문에 함수 심볼 예측기술이 많이 필요하다. 예로 들어, use-after-free 취약점은 해지된 함수 포인터를 다시 사용하여 잘못된 메모리 접근으로 인한 취약점이며 메모리 공간을 할당하는 malloc()함수와 해지 하는 함수 free()함수를 탐지하는 것 매우 중요하다. 이처럼 중요한 함수명이 탐지하지 못하면 취약점 탐지도 수행할 수 없다.
그리고 디컴파일 분야에도 스트립트 바이너리에서 함수 심볼을 예측하는 것이 필요하다. 디컴파일이란 컴파일된 바이너리 코드를 다시 사람이 이해할 수 있는 높은 수준의 코드로 변환해야 되기 때문에 제거된 심볼에 대한 예측이 가능해야 코드에서 어떤 함수를 호출했는지 알 수가 있으며 디컴파일 정확성 높다고 볼 수 있다.
또는 멀웨어, 악성코드 탐지 분야에서도 많이 필요하다. 대부분의 악성코드는 일반 프로그램과 차이가 없다. 그냥 봤을 때 정상적인 프로그램 코드로 본다. 실제로 악의적인 코드는 매우 작고 정상적인 코드에 숨겨져 있다. 그리고 탐지할 수 없게끔 함수의 심볼을 제거한다. 바이너리를 분석할 때 함수 심볼이 예측이 되면 어떤 함수를 사용했는지 알 수 있으며 악의적인 행위를 탐지에 많은 도움이 될 것이다.
관련 기술로 DEBIN이 가장 많이 사용되고 있다. 함수 심볼 예측의 큰 문제점은 바이너리에 서 심볼을 예측하기 위해 사용가능한 정보가 없다는 것이다. DEBIN에서는 심볼이 있는 바이너리를 대량으로 수집하여 구조적 또는 의미적으로 학습을 시켰다. 여기서 사용된 핵심적인 기술은 데이터 의존 그래프(data dependency graph)의 생성이며 각 함수에 사용된 변수들의 전후 의뢰 관계를 표현할 수 있는 기술이다.
DEBIN은 디컴파일을 수행할 때 바이너리 입력을 받으면 해당 함수의 데이터 의존성을 분석하고 학습했던 소스코드에서도 유사한 의존 그래프를 가진 것 있으면 매핑을 해서 함수의 변수 또는 함수콜을 예측한다. 즉 먼저 심볼을 가진 함수의 데이터 의존 그래프와 심볼이 없는 함수의 데이터 의존 그래프를 비교 및 매핑을 한다. 매핑 한 다음에 함수 내부에 있는 변수 및 함수콜 정보 회복을 한다.
그러나 DEBIN을 비롯한 종래의 방법은 정확도가 평균 62.6%으로 높지 않았다. 그 이유는 기존 방법의 핵심내용은 바이너리에서 함수를 구조적으로 또는 의미적적으로 학습한 것이 함수호출 명령어의 컨텍스트를 학습한다는데 있다. 즉 함수호출 명령어의 위 명령어, 아래 명령어가 어떤 명령어인지 변수들이 어떻게 값을 전달된 그 구조를 학습하고, 이를 통해 특정 명령어 조합을 식별되면 특정한 함수로 예측한다.
이러한 방법으로는 기준 함수 데이터에서 존재한 패턴만 식별가능하며 중간에 사용된 인자나 파라미터가 변동 발생하면 식별하지 못 하는 문제가 있어 이를 극복할 수 있는 방법이 요구되고 있다.
한국등록특허 제10-1228899호
본 발명이 해결하고자 하는 기술적 과제는 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치를 제공하는 것이다.
본 발명이 해결하고자 하는 기술적 과제는 신경망 학습을 통한 함수 매칭을 바탕으로 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치를 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제들로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해 될 수 있을 것이다.
상기 기술적 과제를 달성하기 위한 본 발명의 일 실시예에 따른 함수 심볼 예측 방법은, 타겟함수에 관한 제1 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제1 코드조각을 획득하는 단계; 상기 제1 소스코스보다 업데이트된 제2 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제2 코드조각을 획득하는 단계; 상기 제1 코드조각 및 상기 제2 코드조각을 각각 제1 문장 및 제2 문장으로 변환하는 단계; 상기 제1 문장 및 상기 제2 문장을 바탕으로 워드 임베딩(word embedding) 모델을 이용하여 각각 제1 벡터 및 제2 벡터를 획득하는 단계; 상기 제1 벡터 및 상기 제2 벡터를 순차적으로 입력하여 신경망을 학습시키는 단계; 스트립트 바이너리(stripped binary)에서 제3 코드조각을 획득하는 단계; 상기 제3 코드조각을 제3 문장으로 변환하는 단계; 상기 제3 문장을 바탕으로 상기 워드 임베딩 모델을 이용하여 제3 벡터를 획득하는 단계; 및 상기 제3 벡터를 상기 학습된 신경망에 입력하여 출력된 결과를 상기 제3 코드조각에 해당하는 함수 심볼로 획득하는 단계; 를 포함할 수 있다.
상기와 같은 본 발명에 따르면, 소스코드 또는 심볼을 가진 바이너리를 바탕으로 함수 내용을 문장으로 만들고 이를 벡터화한 후 상기 벡터를 바탕으로 신경망을 학습시킴으로써, 종래의 함수 패턴에 기반하여 스트립트 바이너리의 함수 심볼을 예측하는 것에 비하여 정확도를 향상시킬 수 있는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른, 스트립트 바이너리 함수의 디컴파일 예시이다.
도 2는 본 발명의 일 실시예에 따른, 함수 심볼 예측 장치의 구성도이다.
도 3은 본 발명의 일 실시예에 따른, 제1 소스코드에서 제1 코드조각 및 제1 문장을 추출하는 과정을 나타내는 예시이다.
도 4은 본 발명의 일 실시예에 따른, 제2 소스코드에서 제2 코드조각 및 제2 문장을 추출하는 과정을 나타내는 예시이다.
도 5는 본 발명의 일 실시예에 따른, 워드 임베딩 중에서 Word2Vec의 알고리즘 모델이다.
도 6은 본 발명의 일 실시예에 따른, 신경망의 일종인 GRU(Gated Recurrent Unit)의 알고리즘 모델이다.
도 7은 본 발명의 일 실시예에 따른, 스트립트 바이너리의 디컴파일된 함수를 이용한 함수 심볼 예측을 설명하기 위한 예시이다.
도 8은 본 발명의 일 실시예에 따른, 함수 심볼 예측 방법의 순서도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예를 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시 예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 게시되는 실시 예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시 예들은 본 발명의 게시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있을 것이다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다.
도 1은 본 발명의 일 실시예에 따른, 스트립트 바이너리 함수의 디컴파일 예시이다.
도 1을 참조하면, 함수 심볼 정보가 있는 바이너리를 디컴파일한 소스코드(10)에는 함수 심볼(symbol)이 포함되어 있다.
이하의 설명에서 설명의 편의를 위하여, 함수명과 함수 심볼은 동일한 의미로 사용한다.
소스 코드(source code)는 c언어, java, C++, C# 등의 프로그래밍(programming language)로 작성될 수 있으며, 이하의 설명에서 사용하는 소스 코드는 슈도코드(pseudocode)이며 어느 한 언어에 한정되지 않는다.
일반적으로 컴파일러(compiler)는 소스코드를 바이너리로 변환할 때 디버깅(debugging) 등에 활용하기 위해 함수의 심볼에 관한 정보를 바이너리에 포함시킨다. 그러나 바이너리의 용량을 줄이거나, 디컴파일을 방지하기 위한 목적으로 함수 심볼에 관한 정보를 제거하여 컴파일 할 수도 있다. 또는 악성 코드들은 자신의 정보를 숨기기 위하여 함수 심볼 정보를 제거할 수 있다.
함수 심볼에 관한 정보가 제거된 바이너리를 스트립트 바이너리(stripped binary) 라고 한다.
도 1을 참조하면, 스트립트 바이너리를 디컴파일한 소스 코드(20)는 함수 심볼에 관한 정보가 없기 때문에 함수명이 “sub_80534BA”와 같이 임의로 정해진 것을 알 수 있다.
도 2는 본 발명의 일 실시예에 따른, 함수 심볼 예측 장치의 구성도이다.
도 2를 참조하면, 함수 심볼 예측 장치(100)는 소스코드 데이터베이스(200), 코드조각 획득부(300), 임베딩 처리부(400), 신경망 처리부(500) 및 함수 심볼 획득부(600)를 포함할 수 있다.
소스코드 데이터베이스(200)는 함수 심볼이 포함된 소스코드가 저장되어 있을 수 있다. 상기 소스코드는 하나의 함수에 관하여 여러 업데이트(update) 버전이 존재할 수 있다.
본 발명의 다른 실시예에 따르면, 소스코드 데이터베이스(200)는 함수 심볼이 포함된 바이너리가 저장되어 있을 수 있다. 상기 함수 심볼이 포함된 바이너리는 디컴파일을 통해서 간단하게 소스코드로 생성할 수 있고, 상기 생성된 소스코드를 본 발명의 일 실시예와 같이 활용할 수 있기 때문에, 설명의 중복을 피하기 위하여 자세한 설명은 생략한다.
코드조각 획득부(300)는 소스코드 데이터베이스(200)에 저장된 소스코드를 바탕으로 샘플(sample) 코드조각을 획득할 수 있다.
상기 샘플 코드조각은 상기 소스코드에 포함된 타겟(target) 함수의 코드 중에서 함수호출 및 함수호출 인자만을 추출하여 생성될 수 있다.
임베딩 처리부(400)는 코드조각 획득부(300)에서 생성된 샘플 코드조각을 바탕으로 벡터를 생성할 수 있다.
임베딩 처리부(400)를 상기 샘플 코드조각을 하나의 샘플 문장으로 만들고, 상기 문장을 워드 임베딩(word embedding) 모델(model)에 입력하여, 상기 워드 임베딩 모델을 학습시킬 수 있다.
임베딩 처리부(400)는 상기 샘플 문장의 각 단어를 상기 워드 임베딩 모델에 입력하고, 상기 각 단어의 관계에 따라 거리가 반비례하는 벡터값을 가지도록 상기 워드 임베딩 모델을 학습시킬 수 있다.
임베딩 처리부(400)은 상기 학습된 워드 임베딩 모델에서 임베딩 매트릭스(matrix)를 상기 샘플 코드조각에 관한 벡터로 획득할 수 있다.
상기 워드 임베딩 모델은, 하나 이상의 단어로 이루어진 문장을 벡터 값으로 변환시킬 수 있다. 상기 워드 임베딩 모델은, 워드투벡터(word2vec), GloVe 및 FastText 중에서 어느 하나일 수 있다. 상기 워드 임베딩 모델은, 본 발명이 속한 기술 분야의 통상의 기술자에게 널리 알려진 기술이기 때문에 자세한 설명은 생략한다.
신경망 처리부(500)는 임베딩 처리부(400)에서 획득된 벡터를 신경망에 입력하고, 상기 신경망이 상기 타겟 함수의 심볼을 출력하도록 상기 신경망을 학습시킬 수 있다.
신경망 처리부(500)는 순차적인 입력을 바탕으로 신경망을 강화 학습할 수 있다. 소스코드 데이터베이스(200)에는 하나의 타겟함수에 관하여 복수의 업데이트(update) 버전(version)이 저장되어 있으며, 상기 업데이트 버전을 순차적으로 벡터화하여 상기 신경망에 입력함으로써, 상기 신경망을 강화 학습시킬 수 있다.
상기 신경망은, RNN(Recurrent Neural Network), LSTM (Long Short Term Memory), LSTM (Long Short Term Memory) 중에서 어느 하나일 수 있다. 상기 신경망은 본 발명이 속한 기술 분야의 통상의 기술자에게 널리 알려진 기술이기 때문에 자세한 설명은 생략한다.
함수 심볼 획득부(600)는 스트립트 바이너리를 디컴파일하여 제3 소스코드를 획득할 수 있다. 함수 심볼 획득부(600)는 상기 제3 소스코드에서 제3 코드조각을 획득하고, 이를 바탕으로 제3 문장을 생성하며, 상기 제3 문장과 상기 워드 임베딩 모델을 이용하여 제3 벡터를 획득하고, 상기 제3 벡터를 상기 신경망에 입력하여 함수 심볼을 획득할 수 있다.
함수 심볼 획득부(600)가 상기 제3 코드조각을 획득하는 것을 코드조각 획득부(300)에서 코드조각을 획득하는 것과 동일한 방법을 사용하며, 상기 제3 벡터를 획득하는 것은 임베딩 처리부(400)에서 벡터를 획득하는 것과 동일한 방법을 이용한다
도 3은 본 발명의 일 실시예에 따른, 제1 소스코드에서 제1 코드조각 및 제1 문장을 추출하는 과정을 나타내는 예시이다.
도 3을 참조하면, 제1 소스코드(210)는 타겟 함수의 심볼 정보가 포함되어 있다. 예를 들어, 도 3에 도시된 예시에서 타겟 함수의 심볼은 “test_func”이다.
코드조각 획득부(300)는 제1 소스코드(210)의 타겟 함수 코드에서 함수호출과 함수호출 인자만을 추출하여 제1 코드조각(212)을 획득할 수 있다.
임베딩 처리부(400)는 제1 코드조각(212)에 포함된 각 함수호출 및 함수호출 인자를 하나의 단어로 간주하고, 상기 단어를 연결하여 하나의 문장으로 생성할 수 있다. 상기 생성된 문장이 제1 문장(214)일 수 있다.
도 4은 본 발명의 일 실시예에 따른, 제2 소스코드에서 제2 코드조각 및 제2 문장을 추출하는 과정을 나타내는 예시이다.
도 4을 참조하면, 제2 소스코드(220)는 타겟 함수의 심볼 정보가 포함되어 있다. 예를 들어, 도 4에 도시된 예시에서 타겟 함수의 심볼은 “test_func”이다.
제2 소스코드(220)는 제1 소스코드(210)의 업데이터 버전일 수 있다. 제2 소스코드(220)는 제1 소스코드(210)보다 시간적으로 이후에 작성된 소스코드 일 수 있다.
제2 소스코드(220)은 제1 소스코드(210)와 유사한 함수호출 및 함수호출 인자를 포함할 수 있으며, 상기 함수호출의 호출 순서도 유사할 수 있다.
코드조각 획득부(300)는 제2 소스코드(220)의 타겟 함수 코드에서 함수호출과 함수호출 인자만을 추출하여 제2 코드조각(222)을 획득할 수 있다.
임베딩 처리부(400)는 제2 코드조각(222)에 포함된 각 함수호출 및 함수호출 인자를 하나의 단어로 간주하고, 상기 단어를 연결하여 하나의 문장으로 생성할 수 있다. 상기 생성된 문장이 제2 문장(224)일 수 있다.
도 5는 본 발명의 일 실시예에 따른, 워드 임베딩 중에서 Word2Vec의 알고리즘 모델이다.
도 5를 참조하여, 본 발명의 일실시예에서 사용하는 워드 임베딩에 관하여 설명한다.
인공지능 처리를 위해 문자로 된 단어를 숫자로 표현한 것을 인코딩(encoding)이라고 한다. 가장 단순한 인코딩이 원핫인코딩(one-hot encoding) 또는 원핫벡터(one-hot vector)라고 한다. 이하 설명의 편의를 위하여 원핫벡터라고 지칭한다.
원핫벡터는 단어를 사전 개수만큼의 차원을 가지는 벡터(vector)로 표현한 것이다. 예를 들어, “king man queen woman”라는 문장은 6개의 단어로 이루어져 있으며, 이 중에서 각 단어를 원핫벡터로 표현하면 “king”은 (1,0,0,0), “man”은 (0,1,0,0), “queen”은 (0,0,1,0), “woman”은 (0,0,0,1)로 표현될 수 있다.
원핫벡터는 단어 간의 거리고 모두 동일하기 때문에 단어 간의 관계를 표현하지 못하는 단점이 있다. 이를 극복하기 위하여, 단어를 특징을 가지는 N차원의 벡터로 표현하는 것을 워드 임베딩(word embedding) 이라고 한다.
예를 들어, 워드 임베딩을 통해서 “king man queen woman”의 각 단어를 성별과 지위라는 2차원 벡터로 표현하면, “king”은 (1,2), “man”은 (1,3), “queen”은 (5,1), “woman”은 (5,3)으로 표현될 수 있다. 위 워드 임베딩 결과는 예시이며 구현하는 방식에 따라 달라질 수 있다. 상기 각 단어의 벡터를 하나의 매트릭스(matrix)로 표현한 것이 임베딩 매트릭스이다.
Word2Vec은 단어를 특징을 가지는 N차원 임베딩 벡터(embedding vector)로 만드는 워드 임베딩 방법이다. Word2Vec은 임베딩 과정에서 앞뒤 단어를 고려하기 때문에, 자주 인접해서 사용되는 단어들은 가까운 거리의 벡터값을 가지게 된다. Word2Vec은 CBOW 또는 Skip-Gram 모델을 사용해 구현될 수 있다.
CBOW는 문맥 단어를 보고 기준 단어가 무엇인지 예측하는 모델이고, Skip-Gram은 기준 단어를 보고 어떤 문맥 단어가 등장할지 예측하는 모델이다.
Word2Vec는 공개된 기술인 텐서플로(Tensorflow), 파이썬(python) 등을 통해서 본 발명에 속한 통상의 기술자가 용이하게 구현할 수 있기 때문에 자세한 설명은 생략한다.
도 5를 참조하면, Word2Vec은 문장의 각 단어를 원핫벡터로 변환하고, 이런 입력으로 넣었을 때 출력으로 기준 단어 (CBOW 모델) 또는 주변 단어(Skip-Gram 모델)이 나오도록, 임베딩 매트릭스(matrix) W를 수정해 가는 학습 과정을 거치게 된다. 이러한 학습 과정을 통해 나온 임베딩 매트릭스 W 의 값이 워드 임베딩의 결과물이 된다
본 발명은 Word2Vec을 워드 임베딩 모델로 사용할 수 있다. 함수를 구성하는 요소 중에서 변수 선언, 연산 등을 제외하고 함수호출과 함수호출 인자만을 포함하는 코드조각은 Word2Vec를 통해 임베딩될 수 있다. 동일한 함수 또는 유사한 함수는, 코드조각에 포함된 함수호출 순서가 비슷하기 때문에, 워드임베딩을 통해서 각 함수호출은 거리가 가까운 벡터로 임베딩될 수 있다.
도 3과 도 4를 참조하면, test_func()의 각 버전에 따른 코드조각은, “void test_func() malloc(100) malloc(50) memcpy(b, a, sizeof(a))”, “void test_func() malloc(100) malloc(50) memcpy(b, a, sizeof(a)) memcpy(a, b, sizeof(b))”일 수 있다. 이를 Word2Vec으로 임베딩하면, “test_func()”는 “malloc(100)”, “malloc(50)”, “memcpy(b, a, sizof(a))” 단어와 인접해 있기 때문에 위 단어들과 가까운 거리의 벡터로 임베딩될 수 있다.
본 발명의 일 실시예에 따르면, 학습된 “malloc(100)”, “malloc(50)”, “memcpy(b, a, sizof(a))”의 단어 벡터를 통해서 이 벡터와 가까운 거리에 있는 “test_func()”라는 함수 심볼을 예측할 수 있다.
도 6은 본 발명의 일 실시예에 따른, 신경망의 일종인 RNN(Recurrent Neural Network)의 알고리즘 모델이다.
도 6을 참조하면, RNN은 순환 신경망이며, 인공 신경망을 구성하는 유닛(unit) 사이의 연결이 순환구조를 구성하는 신경망이다. RNN은 입력 Xt-1 에 대한 출력 ht-1 을 처리하는 과정에서 생성된 정보를 다음 유닛으로 전파시킨다.
예를 들면, “I Love You” 라는 문장의 각 단어를 순차적으로 입력함으로써 최종적으로 해당 문장은 “좋은 감정”이라는 분류를 할 수 있다.
본 발명의 일 실시예에 따른 신경망은 RNN, LSTM (Long Short Term Memory) 및 GRU(Gated Recurrent Unit) 를 포함할 수 있다. LSTM과 GRU는 모두 RNN 기반으로 RNN을 개선한 신경망 모델이다. LSTM과 GRU는 RNN의 장기 의존성 문제를 해결한 신경망 모델이며, GRU는 LSTM보다 입력단 수를 줄임으로써, 구조가 간단하고 빠른 동작을 할 수 있다.
본 발명의 일 실시예에 따르면, 워드 임베딩 모델의 출력인 벡터를 GRU에 입력하고, 함수 심볼이 출력되도록 상기 GRU 신경망을 학습시킬 수 있다.
예를 들어, 도 3에 예시된 제1 문장 “void test_func() malloc(100) malloc(50) memcpy(b, a, sizeof(a))”에 포함된 각 단어의 벡터를, 순차적으로 GRU 모델에 입력하고, 최종 출력값이 “test_func()”를 출력하도록 상기 GRU 모델을 학습시킬 수 있다.
본 발명의 일 실시예에 따르면, 임베딩 처리부(400)에서 학습된 워드 임베딩의 임베딩 매트릭스를 GRU에 입력하여 GRU를 학습시킬 수 있다. 상기 임베딩 매트릭스의 각 행은 각 단어의 벡터이며, 상기 벡터를 GRU에 순차적으로 입력할 수 있다.
GRU 모델을 설계하고 학습시키는 것은 본 발명이 속한 기술 분야의 통상의 기술자에게는 자명한 기술이기 때문에 자세한 설명은 생략한다.
도 7은 본 발명의 일 실시예에 따른, 스트립트 바이너리의 디컴파일된 함수를 이용한 함수 심볼 예측을 설명하기 위한 예시이다.
함수 심볼 획득부(600)는 스트립트 바이너리를 디컴파일하여 제3 소스코드(230)를 획득할 수 있다.
제3 소스코드(230)는 함수 정보가 삭제된 상태로 디컴파일된 결과물이기 때문에 함수 심볼이 임의로 “sub_8030BA()”로 정해져 있다.
함수 심볼 획득부(600)는 제3 소스코드(230)를 바탕으로 제3 코드조각(232)및 제3 문장(234)을 생성할 수 있다.
함수 심볼 획득부(600)는 제3 문장(234)을 상기 워드 임베딩 모델에 입력함으로써 제3 벡터를 획득할 수 있다.
제3 문장(234)을 제1 문장(214) 및 제2 문장(224)와 비교하면 포함된 함수호출 및 함수호출 인자가 유사하고 함수호출의 순서가 유사하기 때문에, 상기 제3 벡터는 상기 제1 벡터 및 상기 제2 벡터와 유사도가 높은 벡터값을 가질 수 있다.
함수 심볼 획득부(600)는 상기 제3 벡터를 상기 신경망에 입력함으로써 함수 심볼을 획득할 수 있다.
신경망 처리부(500)에서 학습시킨 상기 신경망은, 상기 제1 벡터 및 상기 제2 벡터에 의해 학습된 결과에 의해서, 상기 제3 벡터의 입력에 대하여“test_func()”을 출력할 수 있다.
도 8은 본 발명의 일 실시예에 따른, 함수 심볼 예측 방법의 순서도이다. 도 8을 참조하여 본 발명의 일 실시예에 따른 함수 심볼 예측 방법을 설명하면 다음과 같다.
코드조각 획득부(300)는 제1 소스코드로부터 제1 코드조각을 획득할 수 있다(S110).
코드조각 획득부(300)는 제2 소스코드로부터 제2 코드조각을 획득할 수 있다 (S120).
임베딩 처리부(400)는 상기 제1 코드조각 및 제2 코드조각으로부터 각각 제1 문장 및 제2 문장을 생성하고, 워드 임베딩 모델을 학습시킬 수 있다(S130).
임베딩 처리부(400)는 상기 학습된 워드 임베딩 모델에 상기 제1 문장 및 상기 제2 문장을 각각 입력하였을 때 출력된 각 결과물을 제1 벡터 및 제2 벡터로 획득할 수 있다(S140).
신경망 처리부(500)는 상기 제1 벡터 및 상기 제2 벡터를 신경망에 입력하여 상기 신경망을 학습시킬 수 있다(S150).
함수 심볼 획득부(600)는 스트립트 바이너리에서 제3 코드조각을 획득할 수 있다(S160).
함수 심볼 획득부(600)는 상기 제3 코드조각을 바탕으로 제3 문장을 생성하여, 상기 제3 문장을 상기 워드 임베딩 모델에 입력하며, 그 출력값을 제3 벡터로 획득할 수 있다(S170).
함수 심볼 획득부(600)는 상기 제3 벡터를 상기 신경망에 입력하여 함수 심볼을 획득할 수 있다(S180).
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
함수 심볼 획득 장치 100
소스코드 데이터베이스 200
코드조각 획득부 300
임베딩 처리부 400
신경망 처리부 500
함수 심볼 획득부 600

Claims (12)

  1. 타겟함수에 관한 제1 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제1 코드조각을 획득하는 단계;
    상기 제1 소스코스보다 업데이트된 제2 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제2 코드조각을 획득하는 단계;
    상기 제1 코드조각 및 상기 제2 코드조각을 각각 제1 문장 및 제2 문장으로 변환하는 단계;
    상기 제1 문장 및 상기 제2 문장을 바탕으로 워드 임베딩(word embedding) 모델을 이용하여 각각 제1 벡터 및 제2 벡터를 획득하는 단계;
    상기 제1 벡터 및 상기 제2 벡터를 순차적으로 입력하여 신경망을 학습시키는 단계;
    스트립트 바이너리(strriped binary)에서 제3 코드조각을 획득하는 단계;
    상기 제3 코드조각을 제3 문장으로 변환하는 단계;
    상기 제3 문장을 바탕으로 상기 워드 임베딩 모델을 이용하여 제3 벡터를 획득하는 단계; 및
    상기 제3 벡터를 상기 학습된 신경망에 입력하여 출력된 결과를 상기 제3 코드조각에 해당하는 함수 심볼로 획득하는 단계; 를 포함하되,
    상기 제1 벡터 및 상기 제2 벡터는 상기 타겟함수의 심볼을 가리키는 벡터인,
    함수 심볼 예측 방법.
  2. 제1항에 있어서,
    상기 워드 임베딩(word embedding) 모델은,
    워드투벡터(word2vec), GloVe 및 FastText 중에서 어느 하나인,
    함수 심볼 예측 방법.
  3. 제1항에 있어서,
    상기 신경망은,
    RNN(Recurrent Neural Network), LSTM (Long Short Term Memory), GRU(Gated Recurrent Unit) 중에서 어느 하나인,
    함수 심볼 예측 방법.
  4. 제1항에 있어서,
    상기 제1 벡터 및 상기 제2 벡터를 획득하는 단계는,
    상기 제1 문장의 각 단어를 상기 워드 임베딩 모델에 입력하여 상기 워드 임베딩 모델을 학습시키는 단계;
    상기 학습된 워드 임베딩 모델의 임베딩 매트릭스(matrix)를 제1 벡터로 획득하는 단계;
    상기 제2 문장의 각 단어를 상기 워드 임베딩 모델에 입력하여 상기 워드 임베딩 모델을 학습시키는 단계; 및
    상기 학습된 워드 임베딩 모델의 임베딩 매트릭스(matrix)를 제2 벡터로 획득하는 단계;를 포함하는,
    함수 심볼 예측 방법.
  5. 제1항에 있어서,
    상기 신경망을 학습시키는 단계는,
    상기 신경망의 입력으로 상기 제1 벡터 및 상기 제2 벡터를 입력하였을 때 상기 타겟함수의 심볼이 출력되도록 상기 신경망을 학습시키는 단계;를 포함하는,
    함수 심볼 예측 방법.
  6. 제1항에 있어서,
    상기 신경망을 학습시키는 단계는,
    상기 제1 벡터가 임베딩 매트릭스를 포함하는 경우, 상기 임베딩 매트릭스에 포함된 각 행을 상기 신경망에 순차적으로 입력함으로써 상기 신경망을 학습시키는 단계; 및
    상기 제2 벡터가 임베딩 매트릭스를 포함하는 경우, 상기 임베딩 매트릭스에 포함된 각 행을 상기 신경망에 순차적으로 입력함으로써 상기 신경망의 학습을 강화시키는 단계;를 포함하는,
    함수 심볼 예측 방법.
  7. 제1항에 있어서,
    상기 제3 코드조각을 획득하는 단계는,
    상기 스트립트 바이너리를 디컴파일(decompile) 과정을 통해 제3 소스코드를 획득하는 단계; 및
    상기 제3 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제3 코드조각을 획득하는 단계;를 포함하는,
    함수 심볼 예측 방법.
  8. 타겟 함수가 포함된 하나 이상의 소스코드가 저장된 소스코드 데이터베이스;
    상기 소스코드 데이터베이스부에 포함된 소스코드에서 함수호출 및 함수호출 인자를 추출하여 샘플 코드조각을 획득하는 코드조각 획득부;
    상기 획득된 샘플 코드조각을 바탕으로 샘플 문장을 생성하며, 상기 샘플 문장을 워드 임베딩 모델에 입력하여 상기 워드 임베딩 모델을 학습시키고, 상기 학습된 워드 임베딩 모델에서 상기 샘플 문장에 관한 벡터를 획득하는 임베딩 처리부;
    상기 임베딩 처리부에서 획득된 벡터를 입력하면 상기 타겟 함수의 심볼을 출력하도록 신경망을 학습시키는 신경망 처리부; 및
    스트립트 바이너리에서 심볼이 제거된 함수의 제3 코드조각을 획득하고, 상기 코드조각을 바탕으로 제3 문장을 생성하며, 상기 제3 문장과 상기 워드 임베딩 모델을 이용하여 제3 벡터를 획득하고, 상기 제3 벡터를 상기 신경망에 입력하여 그 출력값을 상기 심볼이 제거된 함수의 심볼로 획득하는 심볼 획득부;를 포함하는
    함수 심볼 예측 장치.
  9. 제8항에 있어서,
    상기 워드 임베딩(word embedding) 모델은,
    워드투벡터(word2vec), GloVe 및 FastText 중에서 어느 하나이고,
    상기 신경망은,
    RNN(Recurrent Neural Network), LSTM (Long Short Term Memory), GRU(Gated Recurrent Unit) 중에서 어느 하나인,
    함수 심볼 예측 장치.
  10. 제8항에 있어서,
    상기 임베딩 처리부는,
    상기 샘플 문장에 포함된 각 단어를 원핫벡터로 변환시키고, 상기 원핫벡터를 상기 워드 임베딩 모델에 입력함으로써 상기 워드 임베딩 모델을 학습시키며, 상기 학습된 워드 임베딩 모델의 임베딩 매트릭스를 상기 샘플 문장의 벡터로 획득하는,
    함수 심볼 예측 장치.
  11. 제8항에 있어서,
    상기 신경망 처리부는,
    상기 임베딩 처리부에서 획득된 벡터가 임베딩 매트릭스를 포함하는 경우, 상기 임베딩 매트릭스에 포함된 각 행을 상기 신경망에 순차적으로 입력함으로써 상기 신경망을 학습시키는,
    함수 심볼 예측 장치.
  12. 제8항에 있어서,
    상기 심볼 획득부는,
    상기 스트립트 바이너리를 디컴파일 과정을 통해서 함수 심볼이 제거된 제3 소스코드를 획득하고, 상기 제3 소스코드에서 함수호출 및 함수호출 인자를 추출하여 제3 코드조각을 획득하며, 상기 제3 코드조각에 포함된 함수명, 함수 인자, 함수 파라미터 및 변수명을 하나의 문장으로 생성하여 제3 문장을 획득하는,
    함수 심볼 예측 장치.
KR1020210170615A 2020-12-02 2021-12-02 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치 KR102608014B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200166393 2020-12-02
KR1020200166393 2020-12-02

Publications (2)

Publication Number Publication Date
KR20220077894A true KR20220077894A (ko) 2022-06-09
KR102608014B1 KR102608014B1 (ko) 2023-11-30

Family

ID=81985827

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210170615A KR102608014B1 (ko) 2020-12-02 2021-12-02 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치

Country Status (1)

Country Link
KR (1) KR102608014B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102695309B1 (ko) * 2023-09-11 2024-08-14 라온시큐어(주) 대규모 언어 모델(llm) 기반의 바이너리 코드 시각화 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101228899B1 (ko) 2011-02-15 2013-02-06 주식회사 안랩 벡터량 산출을 이용한 악성코드의 분류 및 진단 방법과 장치

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101228899B1 (ko) 2011-02-15 2013-02-06 주식회사 안랩 벡터량 산출을 이용한 악성코드의 분류 및 진단 방법과 장치

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Jeremy Lacomis et al., "DIRE: A Neural Approach to Decompiled Identifier Naming"(2019.)* *
Jingxuan He et al., "Debin: Predicting Debug Information in Stripped Binaries"(2018.)* *
Yue Duan et al., "DEEPBINDIFF: Learning Program-Wide Code Representations for Binary Diffing"(2020.02.)* *
김문회 외, "Stripped 바이너리 함수 심볼 예측방법 기술동향"(2020.11.)* *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102695309B1 (ko) * 2023-09-11 2024-08-14 라온시큐어(주) 대규모 언어 모델(llm) 기반의 바이너리 코드 시각화 장치 및 방법

Also Published As

Publication number Publication date
KR102608014B1 (ko) 2023-11-30

Similar Documents

Publication Publication Date Title
Russell et al. Automated vulnerability detection in source code using deep representation learning
Cummins et al. Programl: Graph-based deep learning for program optimization and analysis
US20190265955A1 (en) Method and system for comparing sequences
CN112733137B (zh) 一种面向漏洞检测的二进制代码相似性分析方法
CN111475820B (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
CN113900923B (zh) 一种跨指令集架构的二进制函数相似性检查系统及方法
CN109376535B (zh) 一种基于智能化符号执行的漏洞分析方法及系统
Levy et al. Learning to align the source code to the compiled object code
CN115935369A (zh) 使用源代码元素的数值数组表示来评估源代码的方法
CN108027748A (zh) 指令集模拟器及其模拟器生成方法
CN114969755A (zh) 一种跨语言的未知可执行程序二进制漏洞分析方法
KR102608014B1 (ko) 스트립트 바이너리 함수 심볼 예측 방법 및 그 장치
KR102546424B1 (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
CN114254323A (zh) 基于PCODE和Bert的软件脆弱性分析方法及系统
CN115688108B (zh) 一种webshell静态检测方法及系统
Nitin et al. Direct: A transformer-based model for decompiled identifier renaming
CN116069337A (zh) 一种结合修复模板与深度学习的代码缺陷自动修复方法
CN109657247B (zh) 机器学习的自定义语法实现方法及装置
Nitin et al. Direct: A transformer-based model for decompiled variable name recov-ery
Jeong et al. A data type inference method based on long short-term memory by improved feature for weakness analysis in binary code
Escalada et al. An adaptable infrastructure to generate training datasets for decompilation issues
Kang et al. Which Exceptions Do We Have to Catch in the Python Code for AI Projects?
Qian et al. Nimbus: Toward speed up function signature recovery via input resizing and multi-task learning
Benali An Initial Investigation of Neural Decompilation for WebAssembly
CN118503978A (zh) 一种基于补丁特征修正的二进制软件漏洞检测方法

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