KR20220077847A - 교차 아키텍처 바이너리에 대한 이진 비교 방법 - Google Patents

교차 아키텍처 바이너리에 대한 이진 비교 방법 Download PDF

Info

Publication number
KR20220077847A
KR20220077847A KR1020210120644A KR20210120644A KR20220077847A KR 20220077847 A KR20220077847 A KR 20220077847A KR 1020210120644 A KR1020210120644 A KR 1020210120644A KR 20210120644 A KR20210120644 A KR 20210120644A KR 20220077847 A KR20220077847 A KR 20220077847A
Authority
KR
South Korea
Prior art keywords
function
binary
vector
binaries
shot
Prior art date
Application number
KR1020210120644A
Other languages
English (en)
Other versions
KR102671575B1 (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 KR20220077847A publication Critical patent/KR20220077847A/ko
Application granted granted Critical
Publication of KR102671575B1 publication Critical patent/KR102671575B1/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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 발명의 일 기술적 측면에 따른 교차 아키텍처 바이너리에 대한 이진 비교 방법은, 서로 다른 아키텍처를 가지는 제1 바이너리 및 제2 바이너리에 대한 이진 비교를 수행하는 컴퓨팅 장치에서 수행되는 이진 비교 방법으로서, 상기 제1 바이너리 및 상기 제2 바이너리에 포함된 함수 각각에 대하여 함수 특징을 추출하고, 추출된 상기 함수 특징에 대응하여 원샷 인코딩 벡터를 생성하는 단계, 상기 제1 바이너리에서 추출된 제1 원샷 인코딩 벡터와, 상기 제2 바이너리에서 추출된 제2 원샷 인코딩 벡터를 비교하여 벡터 공간에서 일대일 매핑을 수행하는 단계 및 중간 표현 intermediate representation)을 이용하여, 일대일 매핑된 한 쌍의 함수 간에 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 단계를 포함할 수 있다.

Description

교차 아키텍처 바이너리에 대한 이진 비교 방법 {A technique to BinDiff cross architecture binaries}
본 발명은 바이너리 파일들에 대한 이진 비교 기술에 관한 것으로, 구체적으로 교차 아키텍처 바이너리 환경에서 서로 다른 아키텍처를 가지는 바이너리 파일 간의 이진 비교 방법에 관한 것이다.
이진 비교(Binary diffing)는 서로 다른 바이너리 소스 코드를 서로 비교하여 분석하는 기술로서, 리버스 엔지니어링, 패치 해석, 라이선스 체크 등 분야에 적용 가능한 기술이다.
이러한 이진 비교 기술은 바이너리의 컴파일 과정에서 발생하는 변화에 의하여 많은 영향을 받게 된다. 예를 들어, 컴파일 프로세스에서의 최적화는 기본 블록의 위치 변경 들이 발생하고, 이는 이진 비교에 많은 임의성을 부여하게 된다.
한편, 현재의 이진 비교 도구 또한 단일 아키텍처 이진 비교를 대상으로하고 있다.
따라서, 종래의 이진 비교 기술들은 아키텍처가 서로 상이한 바이너리 소스 코드 간의 이진 비교에는 올바르게 동작하지 못하는 한계가 있다.
대한민국등록특허공보 제10-0429892호
본 발명의 일 기술적 측면은 상기한 종래 기술의 문제점을 해결하기 위한 것으로, 본 문서에 개시되는 실시 예에 따르면, 서로 다른 아키텍처를 가지는 두 바이너리 소스 코드를 대상으로, 이진 비교를 수행할 수 있는 교차 아키텍처 바이너리의 이진 비교 방법을 제공하는 것이다.
본 발명의 과제들은 이상에서 언급한 과제들로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
본 발명의 일 기술적 측면은 교차 아키텍처 바이너리에 대한 이진 비교 방법을 제안한다. 상기 교차 아키텍처 바이너리에 대한 이진 비교 방법은, 서로 다른 아키텍처를 가지는 제1 바이너리 및 제2 바이너리에 대한 이진 비교를 수행하는 컴퓨팅 장치에서 수행되는 이진 비교 방법으로서, 상기 제1 바이너리 및 상기 제2 바이너리에 포함된 함수 각각에 대하여 함수 특징을 추출하고, 추출된 상기 함수 특징에 대응하여 원샷 인코딩 벡터를 생성하는 단계, 상기 제1 바이너리에서 추출된 제1 원샷 인코딩 벡터와, 상기 제2 바이너리에서 추출된 제2 원샷 인코딩 벡터를 비교하여 벡터 공간에서 일대일 매핑을 수행하는 단계 및 중간 표현 intermediate representation)을 이용하여, 일대일 매핑된 한 쌍의 함수 간에 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 단계를 포함할 수 있다.
본 발명의 다른 일 기술적 측면은 컴퓨터로 읽을 수 있는 저장매체를 제안한다. 상기 컴퓨터로 읽을 수 있는 저장매체는, 서로 다른 아키텍처를 가지는 제1 바이너리 및 제2 바이너리에 대한 이진 비교를 수행하는 컴퓨팅 장치에서 수행되는 교차 아키텍처 바이너리에 대한 이진 비교 방법을 실행시키기 위한 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능 저장 매체로서, 상기 제1 바이너리 및 상기 제2 바이너리에 포함된 함수 각각에 대하여 함수 특징을 추출하고, 추출된 상기 함수 특징에 대응하여 원샷 인코딩 벡터를 생성하는 기능, 상기 제1 바이너리에서 추출된 제1 원샷 인코딩 벡터와, 상기 제2 바이너리에서 추출된 제2 원샷 인코딩 벡터를 비교하여 벡터 공간에서 일대일 매핑을 수행하는 기능 및 중간 표현 intermediate representation)을 이용하여, 일대일 매핑된 한 쌍의 함수 간에 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 기능을 포함할 수 있다.
본 발명의 일 기술적 측면은 상기한 종래 기술의 문제점을 해결하기 위한 것으로, 본 출원의 일 실시 예에 따르면, 서로 다른 아키텍처를 가지는 두 바이너리 소스 코드를 대상으로도 정확하게 이진 비교를 수행할 수 있는 효과를 제공한다.
또한, 본 출원의 일 실시 예에 따르면, 교차 아키텍처 바이너리들을 비교함으로써, 패치 된 콘텐츠를 찾거나 함수 이름 심볼을 내보내는 데 직접 사용할 수 있는 효과를 제공한다.
도 1은 본 발명의 일 실시예에 따른 컴퓨팅 장치의 예시적인 컴퓨팅 운영 환경을 설명하는 도면이다.
도 2는 본 발명의 일 실시예에 따른 교차 아키텍처 바이너리에 대한 이진 비교 방법을 설명하는 순서도이다.
도 3은 본 발명의 일 실시예에 따른 이진 비교의 전반적인 워크 플로우를 도시하는 도면이다.
도 4는 본 발명의 일 실시예에 따른 원샷 인코딩 벡터의 일 예를 도시하는 도면이다.
도 5는 본 발명의 일 실시예에 따른 1:1 매핑 방법의 일 예를 도시하는 도면이다.
도 6은 본 발명의 일 실시예에 따른 임베딩 벡터 훈련 방법의 일 예를 도시하는 도면이다.
도 7은 본 발명의 일 실시예에 따른 함수 벡터 (FV) 계산 방법의 일 예를 도시하는 도면이다.
도 8은 본 발명의 일 실시예에 따른 이진 비교(binary diffing) 방법의 일 예를 도시하는 도면이다.
도 9는 중간 지배 관계를 설명하는 그래프들의 일 예를 도시하는 도면이다.
이하, 첨부된 도면을 참조하여 기술되는 실시예를 통하여 발명을 통상의 기술자가 용이하게 이해하고 재현할 수 있도록 상세히 기술하기로 한다. 다만, 발명을 설명함에 있어 관련된 공지 함수 또는 구성에 대한 구체적인 설명이 발명 실시예들의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략하기로 한다.
이하에서 사용되는 용어들은 실시예에서의 함수를 고려하여 선택된 용어들로써, 그 용어의 의미는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로, 후술하는 실시예에서 사용된 용어의 의미는 이하에서 구체적으로 정의된 경우에는 그 정의에 따르며, 구체적인 정의가 없는 경우는 통상의 기술자들이 일반적으로 인식하는 의미로 해석되어야 할 것이다. 또한, 각 도면에서 제시된 동일한 참조번호 또는 부호는 실질적으로 동일한 함수를 수행하는 부품 또는 구성요소를 나타낸다.
본 명세서에서 사용되는 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "구성된다" 또는 "포함한다" 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
또한, 이하에서 본 발명에 따른 시스템을 설명하기 위하여 다양한 구성요소 및 그의 하부 구성요소에 대하여 설명하고 있다. 이러한 구성요소 및 그의 하부 구성요소들은, 하드웨어, 소프트웨어 또는 이들의 조합 등 다양한 형태로서 구현될 수 있다. 예컨대, 각 요소들은 해당 함수를 수행하기 위한 전자적 구성으로 구현되거나, 또는 전자적 시스템에서 구동 가능한 소프트웨어 자체이거나 그러한 소프트웨어의 일 함수적인 요소로 구현될 수 있다. 또는, 전자적 구성과 그에 대응되는 구동 소프트웨어로 구현될 수 있다.
본 발명은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
도 1은 본 발명의 일 실시예에 따른 컴퓨팅 장치의 예시적인 컴퓨팅 운영 환경을 설명하는 도면이다.
이하에서 설명하는 교차 아키텍처 바이너리에 대한 이진 비교 방법은 컴퓨팅 장치(100)에서 수행될 수 있다.
컴퓨팅 장치(100)는 후술하는 본 발명에 따른 다양한 실시예들이 구현될 수 있는 적합한 컴퓨팅 환경으로서, 도 1을 참조하면, 컴퓨팅 장치는 적어도 프로세싱 유닛(103)과 시스템 메모리(101)를 포함할 수 있다.
컴퓨팅 장치는 바이너리를 실행할 때 협조하는 복수의 프로세싱 유닛을 포함할 수도 있다. 컴퓨팅 장치의 정확한 구성 및 유형에 의존하여, 시스템 메모리(101)는 휘발성(예컨대, 램(RAM)), 비휘발성(예컨대, 롬(ROM), 플래시 메모리 등) 또는 이들의 조합일 수 있다. 시스템 메모리(101)는 플랫폼의 동작을 제어하기 위한 적합한 운영 체제(102)를 포함하는데, 예컨대 마이크로소프트사로부터의 WINDOWS 운영체제와 같은 것일 수 있다. 시스템 메모리(101)는 바이너리 모듈, 애플리케이션 등의 같은 하나 이상의 소프트웨어 애플리케이션을 포함할 수도 있다.
컴퓨팅 장치는 자기 디스크, 광학적 디스크, 또는 테이프와 같은 추가적인 데이터 저장 장치(104)를 포함할 수 있다. 이러한 추가적 저장소는 이동식 저장소 및/또는 고정식 저장소 일 수 있다. 컴퓨터 판독가능 저장 매체는 컴퓨터 판독가능 인스트럭션, 데이터 구조, 바이너리 모듈, 또는 기타 데이터와 같은 저장정보를 위한 임의의 방법이나 기법으로 구현되는 휘발성 및 비휘발성, 이동식 및 고정식 매체를 포함할 수 있다. 시스템 메모리(101), 저장소(104)는 모두 컴퓨터 판독가능 저장 매체의 예시일 뿐이다. 컴퓨터 판독가능 저장 매체는 램(RAM), 롬(ROM), EEPROM, 플래시 메모리 또는 다른 메모리 기법, CD-ROM, DVD 또는 다른 광학적 저장소, 자기 테이프, 자기 디스크 저장소 또는 다른 자기적 저장 장치, 또는 원하는 정보를 저장하고 컴퓨팅 장치(100)에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있는데, 이에 한정되는 것은 아니다.
컴퓨팅 장치의 입력 장치(105), 예컨대 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 및 비교 가능한 입력 장치를 포함할 수 있다. 출력 장치(106)는, 예컨대 디스플레이, 스피커, 프린터, 및 다른 유형의 출력 장치가 포함될 수도 있다. 이들 장치는 본 기술분야에서 널리 알려진 것이므로 자세한 설명은 생략한다.
컴퓨팅 장치는 예컨대 분산 컴퓨팅 환경에서의 네트워크, 예컨대, 유무선 네트워크, 위성 링크, 셀룰러 링크, 근거리 네트워크, 및 비교가능한 메커니즘을 통해 장치가 다른 장치들과 통신하도록 허용하는 통신 장치(107)를 포함할 수도 있다. 통신 장치(107)는 통신 매체의 한가지 예시이며, 통신 매체는 그 안에 컴퓨터 판독 가능 인스트럭션, 데이터 구조, 바이너리 모듈, 또는 다른 데이터를 포함할 수 있다. 예시적으로, 통신 매체는 유선 네트워크나 직접 유션 접속과 같은 유선 매체, 및 음향, RF, 적외선 및 다른 무선 매체와 같은 무선 매체를 포함하는데, 이에 한정되는 것은 아니다.
이러한 컴퓨팅 장치(100), 즉, 프로세서와 메모리에 의하여 구동되는 이하에서 설명하는 교차 아키텍처 바이너리에 대한 이진 비교 방법은, 서로 다른 아키텍처를 가지는 두 바이너리 파일을 대상으로 이진 비교(Binary diffing)을 제공한다. 이와 같이, 서로 다른 아키텍처의 바이너리 파일들을, 다중 아키텍처 또는 교차 아키텍처 바이너리이라 칭한다. 이하에서 사용되는, 바이너리 소스 파일 또는 바이너리 파일, 바이너리는 바이너리 파일을 의미하는 용어이다.
독점 소프트웨어는 비즈니스 모델 또는 보안 문제로 인해 소스 코드를 공개하지 않는다. 예를 들어, Apple iOS 커널 바이너리는 탈옥을 방지하기 위해 엄격하게 스트립(strip)된다. 현재 시대의 디지털 환경에서는 보안이 매우 중요한 이슈이다. 따라서 취약성, 패치 된 콘텐츠 또는 유사한 함수를 바이너리 수준에서 찾기 위해서는 리버스 엔지니어링 기술의 정확성이 매우 중요하다.
기존 이진 비교(Binary Diffing) 도구의 정확도는, 스트립 되지 않은 바이너리의 경우 더 높으며, 스트립 된 바이너리(stripped binary)의 경우 크게 떨어집니다. 스트립 된 바이너리(striped binary)란, 오브젝트 파일의 심볼이 제거된 바이너리를 의미하며, 일반적인 경우 디버그 기호가 제거된 것을 의미하나, 단단하게 제거된 바이너리(tightly stripped bianra)는 함수 이름 심볼을 잃어 버릴 수도 있다.
이러한 과제에 대처하여 위하여, 본 출원에서는 IR (Intermediate Representation) 수준에서 효율적인 이진 함수를 제안하고 컴파일러 최적화로 인해 부분적으로 변경된 함수와 교차 아키텍처 이진 함수를 일치시킬 수 있는 효율적인 매칭 알고리즘을 설계하여 교차 아키텍처 이진에 대한 이진 비교 기법을 제공한다. 이에 따라, 본 출원에서는 모든 아키텍처에 대해 더 높은 정확도를 제공할 수 있다.
본 발명의 일 실시예에 따른 이진 비교 방법은, 벡터 공간에서 원샷 인코딩 벡터를 통해 매칭 할 수 있는 바이너리 함수 함수와 다중 아키텍처 이진 비교을 위한 함수 매칭 알고리즘을 포함한다.
원샷 인코딩 알고리즘과 함께 제안된 함수는, 함수 이름 심볼 내보내기에 대한 이진 함수 매칭, 맬웨어 탐지를 위한 유사한 함수 찾기 및 패치 된 콘텐츠를 찾기 위한 이진 디핑(diffing)에도 적용 가능하다. 본 발명의 일 실시예에 따르면, 이진 비교 작업에 대해 미세 조정되었지만 제안 된 함수 매칭 알고리즘의 함수 특징과 약간의 수정을 사용하여 스트립 과정에서 생략된 함수 이름 심볼(function name symbols)를 찾을 수도 있다.
본 발명의 일 실시예를 통해 함수 이름 심볼을 먼저 내보내고 나중에 기존 기법에 이러한 기호를 사용하여 기존 함수 매칭 기법에 대한 지원이 가능하다.
이하에서는, MacOS 및 iOS 기기 모두를 지원하는 Apples XNU 커널을 예시하여 설명한다. 그러나, 이는 설명의 편의를 위한 것으로서 이에 한정되는 것은 아니다.
XNU 커널은 오픈 소스이며 다중 아키텍처 용으로 컴파일 가능하지만, 사용 가능한 소스 코드는 iOS 장치에서 출시된 바이너리와 호환되지 않는다. iOS 커널 바이너리는 리버스 엔지니어링을 어렵게 만들기 위해 엄격하게 스트립 되었기 때문이다.
이하에서는, iOS 및 MacOS 바이너리의 바이너리 함수와 일치하는 이진 비교 기법을 설명하고, 크로스 아키텍처 바이너리에서 유사한 함수와 부분적으로 변경된 함수를 정확하게 분류하는 것을 설명한다. 추출 된 기호는 iOS 바이너리를 더 잘 분석하기 위해 다른 리버스 엔지니어링 도구에서도 사용할 수도 있다.
일 실시예로서, 이진 비교를 위하여 2단계 프로세스, 즉, 사전 필터링 단계와 전파 단계를 가진다.
사전 필터링 단계는 이진 함수에서 특성을 추출하고 특성 기반 휴리스틱을 기반으로 초기 1:1 매핑을 공식화 할 수 있다.
전파 단계에서 초기 1:1 매핑이 함수 기본 블록 수준으로 확장되고 유사성 비율이 계산되어 정확히 유사하거나 부분적으로 유사한 함수를 분류할 수 있다.
Diaphora 및 기타 BinDiff 알고리즘과 같은 기술은, 어셈블리 수준에서 함수를 추출하고, 루프 방식으로 각 함수 (휴리스틱)을 개별적으로 비교하여 서로 다른 두 바이너리의 함수를 비교한다. 그러나, 일부 휴리스틱은 아키텍처에 따라 다르므로, 전체 알고리즘에 부정확성을 유발하게 된다. 이는, 각 아키텍처 (x86_64 또는 ARM)는 서로 다른 명령어 세트를 사용하여 함수의 어셈블리 코드를 생성하기 때문이며, 어셈블리 수준에서 추출 된 함수는 아키텍처 간 이진 함수와 일치하도록 일반화 할 수 없기 때문이다.
본 발명의 일 실시예에 따른 이진 비교 방법은, 컴파일러 최적화 또는 서로 다른 아키텍처에서도 정확하게 바이너리 비교를 수행하는 것을 목표로 하며, 이를 위하여 아래와 같은 특징을 전제로 한다.
의미적 상관 관계(Semantic Correlation)
바이너리 스트리핑(Binary stripping) 후, CS(Code segment) 레지스터 또는 DS(Data Segment) 레지스터에 매핑 된 기호, 함수 이름 심볼 등이 손실된다. 즉, 바이너리 스트리핑에 의해, 주소 기반의 임의 문자열과 DATA 섹션에서 참조되는 함수 문자열이 줄어든다.
이러한 유용한 정보의 감소는, 함수 문자열 특징(function strings feature)과 함수 벡터(function vectors)의 의미 관계에 영향을 미칠 수 있다. 함수 벡터는 의미적 유사성을 유지하기 위해 어셈블리 텍스트에서 계산되나, 이진 스트리핑은 무작위성이 적용되어 의미 상관 관계에 영향을 미칠 수 있다.
기호 테이블
이진 파싱(Binary parsing) 및 함수 분석(function analysis)은 이진 비교 알고리즘의 전제 조건 이다. 스트립 되지 않은 바이너리에서는, 기호 테이블에 영향을 주는 디버깅 정보를 사용할 수 없으며 많은 함수 이름 심볼이 손실된다.
MacOS 스트립 된 바이너리에서는 거의 절반의 함수 심볼이 제거되고 iOS 스트립 된 바이너리에서는 거의 90 %의 심볼이 제거된다. 파서는 제거 된 함수 이름 심볼에 대한 주소 기반 이름을 자동으로 할당하게 되며, 결과적으로 피 호출자 함수에서 함수 호출로 나타나는 제거 된 함수 이름은 피 호출자의 함수 어셈블리에 임의성을 추가한다. 이러한 임의성은 호출 참조 기반 함수의 정확도에 영향을 미치고 결과적으로 이진 디핑의 정확도에 나쁜 영향을 미치게 된다.
다중 아키텍처 어셈블리
다중 아키텍처 환경에서는 다른 바이너리에 대해 다른 어셈블리를 사용하게 된다. 예를 들어 ARM 아키텍처 및 X86 64 용 명령어 세트는 다르며 서로 다른 아키텍처 용으로 컴파일 된 동일한 함수는 서로 다른 어셈블리를 갖게 되는 등 이다. 이러한 서로 다른 명령어 세트는 엄청난 임의성을 도입하고 결과적으로 의미적 상관 관계의 정확도가 크게 떨어집니다.
또한, 기존의 기술적 환경은 아래와 같은 한계성을 가진다.
비효율적 인 함수 및 매칭 알고리즘
기존의 함수 매칭 기술은 어셈블리 수준에서 함수를 추출하고, 휴리스틱을 단일 함수 또는 이들의 조합으로 정의하고, 루프 방식으로 함수를 매칭 (휴리스틱 사용)한다. 전술한 바와 같이, 단일 함수를 정확하게 일치시킬 수 없으므로 대부분의 휴리스틱 오류 발생 가능성이 높다. 즉, 노드 수, 에지 수, DFS 트리 등과 같은 함수는 많은 오탐지를 생성하므로 전체 정확도에 영향을 미칩니다.
함수 일치 알고리즘은 각 휴리스틱을 반복하여 함수와 일치하지만 휴리스틱에 대한 우선 순위 메커니즘이 있다. Diaphora의 경우 더 높은 우선 순위를 갖는 7 개의 휴리스틱이 있다. Diaphora를 분석한 결과 이러한 휴리스틱 중 5 개가 많은 오탐지를 생성함을 알 수 있었으며, 이 문제에 대처하기 위해 본 출원의 일 실시예에서는, 단일 샷 (루프 없음)의 함수를 일치시키는 원샷 인코딩 기술을 기반으로 한다. 원샷 인코딩 기술은 정확하고 계산적으로 효율적인 효과를 가진다.
크로스 아키텍처 매칭
본 발명은 크로스 아키텍처 바이너리에 대한 유사 함수 매칭을 제공하며, 이를 위하여, 모든 아키텍처에 대해 일반화 할 수 있는 중간 표현(intermediate representation, IR) 수준에서 함수를 추출할 수 있다. 종래 기술은 Diaphora와 같은 단일 아키텍처에 맞게 설계되고 최적화되어 x86_64 아키텍처에 최적화되어 있으며 ARM 아키텍처에 대한 매칭 정확도는 떨어지며, 휴리스틱 또는 일치 알고리즘이 최적화되지 않은 동일한 아키텍처 바이너리도 일치시킬 수 없고, 따라서 교차 아키텍처 바이너리의 함수와 일치 불가능하다. 반면, 본 발명은 크로스 아키텍처의 다양성에 대응하기 위해 아직 연구되지 않은 IR(intermediate representation)과 효율적인 매칭 알고리즘을 활용한 크로스 아키텍처 함수를 이용하여, 크로스 아키텍처 환경에서의 효율적인 매칭을 제공한다.
도 2는 본 발명의 일 실시예에 따른 교차 아키텍처 바이너리에 대한 이진 비교 방법을 도시하는 순서도이다.
프로세서(103)는 한 쌍의 바이너리 파일을 입력받고, 입력된 바이너리 파일을 각각 분석하여, 각 바이너리 파일에 대하여 함수 특징(function feature)와 중간 표현(intermediate representation, IR) 코드를 추출한다(S201).
프로세서(103)는 2개의 바이너리에 대해 함수 특징을 기초로 원샷 인코딩 벡터를 생성하고(S202), 벡터 공간에서 함수를 1:1 매핑한다(S203).
이후, 프로세서(103)는 중간 표현 intermediate representation)을 이용하여, 일대1:1 매핑 된 함수 간의 의미적 유사성을 비교한다(S204).
프로세서(103)는 의미적 유사성을 비교하기 위하여, 1:1 매핑된 함수 벡터 간의 거리-예컨대, 코사인 거리 및/또는 유클리드 거리-를 측정하고, 두 함수 벡터 사이의 거리와 임계값을 비교하여, 의미적으로 동일한 것인지 또는 유사한 것인지 판단할 수 있다.
도 2에 도시된 각 단계에 대하여, 도 3 내지 도 9를 참조하여 이하에서 보다 상세히 살펴본다.
도 3은 본 발명의 일 실시예에 따른 이진 비교의 전반적인 워크 플로우를 도시하는 도면이다.
도 3을 참조하면, 프로세서(103)는 한 쌍의 바이너리 파일을 입력받고, 입력된 바이너리 파일을 각각 분석하여, 각 바이너리 파일에 대하여 함수 특징(function feature)을 추출하고(S301), 그를 기반으로 원샷 인코딩 벡터를 생성한다(302).
프로세서(103)는 바이너리 파일에 포함된 복수의 함수 각각에 대하여, 즉, 각각의 함수 별로 원샷 인코딩 벡터를 생성할 수 있다. 예컨대, 프로세서(103)는 단계 S301에서 추출된 함수 특징을 기초로 각 함수 별로 원샷 인코딩 벡터를 생성할 수 있다.
예컨대, 프로세서(103)는 바이너리 파일에서 특징(features)을 추출한 후, 추출된 특징들을 벡터로 전치(transpose)하고 이들을 연결하여 원샷 인코딩 벡터를 생성할 수 있다. 즉, 프로세서(103)는 특징들을 연결하여 특징 벡터를 계산하되, 여기서 각 특징들은 그 자체로서 벡터로서 설정될 수 있다.
도 4는 본 발명의 일 실시예에 따른 원샷 인코딩 벡터의 일 예를 도시하는 도면으로, 도 4에 도시된 바와 같이, 원샷 인코딩 벡터는 도시된 특징들의 순서로 연관되어 형성되며, 이와 같이, 설정된 연결 순서를 유지하는 한, 정확도는 영향을 받지 않는다.
이후, 프로세서(103)는 두 바이너리 파일로부터 각각 추출된 복수의 원샷 인코딩 벡터들 간의 1:1 매핑을 수행한다(S303). 도 5는 본 발명의 일 실시예에 따른 1:1 매핑 방법의 일 예를 도시하는 도면으로, 도 5를 더 참조하여 설명한다.
일 예로, 제1 바이너리 파일로부터 생성된 원샷 인코딩 벡터 중 어느 하나 -바이너리 A의 대상 벡터-와, 제2 바이너리 파일로부터 생성된 복수의 원샷 인코딩 벡터 -바이너리 B의 대상 행렬-을 대상으로 1:1 매칭을 수행한다.
전술한 예와 같이, 원샷 인코딩 벡터는 각각의 함수 별로 생성될 수 있으며, 이러한 예를 들어 설명하면, 제1 바이너리 파일에 포함된 제1 함수에 대한 원샷 인코딩 벡터와, 제2 바이너리 파일에 포함된 제2 함수에 대한 원샷 인코딩 벡터를 비교하여 1:1 매칭을 수행할 수 있다. 이를 통하여, 서로 다른 두 바이너리 파일에 포함된 각각의 함수를 상호 비교하여 1:1 매칭 여부를 판단할 수 있다.
프로세서(103)는 바이너리 A의 대상 벡터와 바이너리 B의 대상 행렬 간의 유사도를 계산한다(S304). 예컨대, 코사인 거리 행렬을 계산할 수 있다. 프로세서(103)는 바이너리 A의 대상 벡터와 최소 거리(최소 코사인 거리)를 가지는 대상 행렬 중 어느 하나를 대상 벡터와 매핑할 수 있다. 즉, 바이너리 A의 대상 벡터의 인덱스와, 상기 대상 벡터와 최소 거리를 가지는 바이너리 B의 행렬 요소에 대한 인덱스를 서로 매핑할 수 있다.
다시 도 3을 참조하면, 프로세서(103)는 1:1 매핑된 함수 간의 의미적 유사성을 판단할 수 있다(S311 내지 S315).
즉, 프로세서(103)는 각 바이너리 파일의 함수에 대하여 중간 표현(intermediate representation, IR) 코드를 생성하고(S311), 이를 기반으로 1:1 매핑된 벡터에 대해 함수 벡터를 계산하여(S312), 의미적 유사성을 계산하여(S313), 이들을 임계값과 비교하여(S314) 상호 매칭 여부를 판단할 수 있다(S315).
도 6은 본 발명의 일 실시예에 따른 임베딩 벡터 훈련 방법의 일 예를 도시하는 도면으로, 도 6을 더 참조하여 설명한다.
도 6에 도시된 플로우는, 바이너리 함수의 중간 표현(IR)과 관련하여, 중간 표현(IR) 토큰에 대한 단어 임베딩 벡터를 학습하는 신경망을 훈련하는 절차를 도시한다.
도 6을 참조하면, 프로세서(103)는 주어진 바이너리를 분석하고(S601) 단일 텍스트 파일에서 모든 함수의 중간 표현 코드를 추출한다(602).
프로세서(103)는 각각의 중간 표현 코드에 대하여, 공백을 제거하고 오프셋과 주소를 고정 문자열로 바꾸는 전처리를 수행한다(S603).
프로세서(103)는 이전에 사전 처리 된 중간처리(IR) 문(states)을 토큰화하고 훈련 가능한 토큰 배열을 생성 한다(S604).
프로세서(103)는 모든 바이너리에 대해 위의 과정을 반복하고 신경망을 훈련시킨다. 이러한 신경망은 모든 중간표현 토큰을 동등한 임베딩 벡터로 변환하는 데 사용할 수 있는 훈련 된 모델이 된다.
도 7은 본 발명의 일 실시예에 따른 함수 벡터 (FV) 계산 방법의 일 예를 도시하는 도면이다.
도 7에 도시된 플로우는, 함수의 중간 표현 코드에서 함수 벡터를 계산하는 방법을 설명한다.
전술한 바에 따라, 함수 중간표현 코드와 신경망 훈련 모델이 주어지면(S701), 프로세서(103)는 각 중간 표현 문을 전처리하고 토큰화 할 수 있다(S702).
프로세서(103)는 훈련 된 모델을 사용하여 각 토큰에 대한 임베딩 벡터를 생성할 수 있다(S703).
프로세서(103)는 피연산자 벡터와 오피코드(opcode) 벡터의 합을 연결하여 명령어 벡터를 계산할 수 있다(S704).
프로세서(103)는 함수 중간 표현 코드의 각 중간 표현 문에 대해 위 단계를 반복하고 모든 명령어 벡터를 합산할 수 있다. 이 결과, 함수 벡터를 출력할 수 있다.
도 8은 본 발명의 일 실시예에 따른 이진 비교(binary diffing) 방법의 일 예를 도시하는 도면이다.
도 8에 도시된 바와 같이, 프로세서(103)는 두 바이너리 파일에 대하여, 두 바이너리 파일의 데이터 셋이 서로 다른 이름을 가지면(S801), 원샷 인코딩 알고리즘을 사용하여 1:1 매핑을 수행한다(S801).
프로세서(103)는 코사인 거리를 이용하여 1:1 매핑 된 함수 간의 의미 유사성을 계산한다.
먼저, 프로세서(103)는 정확한 일치 여부를 판단한다. 즉, 매핑된 함수가 동일한 경우(S803, 예), 코사인 거리가 0이 되고 그러한 경우 유클리드 거리는 의미적 유사성을 결정하는 대한 임계 값보다 작으므로 서로 유사한 것으로 매칭된다(S805).
이후, 프로세서(103)는 부분적으로 변경되었지만 유사한 함수인지를 판단한다. 코사인 거리가 0보다 크나 임계값 보다 작고, 유클리드 거리가 임계값보다 작으면(S804, 예), 1:1 매핑된 두 함수는 유사한 것으로 판단한다(S805).
그 외에, 코사인 거리가 임계값 보다 크거나(S804, 아니오), 또는 유클리드 거리가 임계 값보다 크면(S806, 아니오), 프로세서(103)는 1:1 매핑된 두 함수는 유사하지 않는 것으로 판단한다.
도 8은 중간 지배 관계를 설명하는 다이어그램의 일 예를 도시하고 있다.
도시된 두 다이어그램은, 각각 두 개의 바이너리 A와 A'에 대한 것이다.
전술한 바와 같이, 프로세서(103)는 두 개의 바이너리 A와 A'가 주어 졌을 때, 초기 1:1 매핑 단계를 위해 두 바이너리에서 각각 일반 특징을 추출하고, 의미적으로 인식되고 함수의 중간표현 토큰 임베딩 벡터에서 파생 된 함수 벡터를 기반으로 하는 유사성 비율을 계산한다.
전술한 바와 같이, 컴파일러 최적화, 수정된 함수의 부분적인 변경 및 크로스 아키텍처 바이너리의 경우, 함수 일치를 계산하는 것이 보다 복잡해진다. 특히, 교차 아키텍처 컴파일 된 바이너리에는 함수 일치 알고리즘에 임의성을 도입하는 서로 다른 어셈블리 명령어 세트가 있으므로 정확도에 영향을 미친다.
도 1 내지 도 8을 참조하여 상술한 내용에 대하여, 이하에서 보다 상세하게 설명한다.
본 발명의 일 실시예에서, 서로 다른 바이너리에서 함수를 추출하고 일치 여부를 판단하는데는, 아래와 같은 주요 모듈(또는 기능)이 포함된다.
- 독특한 특징 (Unique Features)
- 1:1 매핑(1:1 mapping)
- 의미적 유사성(Semantic similarity)
- 매칭 알고리즘 (Matching algorithm)
A. 독특한 특징 (Unique Features)에 대하여
종래의 Diaphora 등은, 초기 1:1 매핑을 찾기 위해 재귀적 방법을 사용한다. 이러한 재귀적 방법에 의한 개별 매칭 방식은, 오류가 발생하기 쉽고 전반적인 정확도는 각 함수의 정확도에 따라 달라지는 문제가 있다. 즉, 단일 함수는 100 % 정확한 출력을 생성 할 수 없으며 정확도는 재귀적 일치의 함수 순서에 따라 의존되는 문제가 있다.
본 출원의 일 실시예에서는, 이러한 한계에 대처하기 위해, 재귀적 방법이 아닌, 모든 함수를 결합하고 일회성으로 일치하는 원 샷 인코딩을 사용한다. 자세한 내용은 이하에서 보다 상세히 설명한다.
원샷 인코딩을 위한 함수 선택은 매우 중요하며, 실증 분석을 통해 다음의 특징을 가지는 함수가 초기 1:1 매핑에 대해 높은 정확도를 가짐을 알게 되었다.
1) 구조적 특징 (Structural Features)
먼저, 본 출원의 일 실시예에서는, 다음과 같은 구조적 특징을 사용한다.
에지 카운트(Edges Count)
함수 CFG에있는 간선 수를 의미한다.
에지 타입 벡터(Edges Type Vector)
제어 흐름 그래프(Control flow graph)는 다음 네 가지 유형의 에지로 구성된다.
- 트리 에지(Tree Edge): 그래프 G = <V, E>의 정점(노드)에 대한 토폴로지 종류가 있다고, 이 토폴로지 정렬을 존중하는 DFS는 다음과 같습니다. v가 u의 조상이 아닌 경우. 그러면 (u, v)는 depth (v) = depth (u) +1 인 경우 기본 에지(basis edge)이다.
- 포워드 에지(Forward Edge): 트리 에지와 비슷하지만 깊이 (v)> 깊이 (u) + 1. 앞쪽 에지는 조상과 비 직속 후손을 연결한다.
- 백 에지(Back Edge): 뒷면 에지는 자손을 조상과 연결합니다. 즉, 깊이 (v) <깊이 (u). 자체 에지도 뒷면 에지로 간주된다.
- 크로스 링크 에지(Cross-link Edge): 서로 다른 DFS 하위 트리에 속하는 꼭짓점 사이의 에지이다. 에지 타입 벡터(Edge type vector)는 4가지 에지 유형의 카운트를 포함하는 벡터이다. 이 벡터를 생성하기 위해 함수의 CFG를 반복하고 해당 에지를 1씩 업데이트할 수 있다. 출력 벡터 치수는 항상 1 x 4이다.
노드 카운트(Nodes Count) : 함수의 CFG에있는 노드 수이다.
노드 타입 벡터(Nodes Type Vector) : 함수의 제어 흐름 그래프에서 노드는 다른 노드와의 관계에 따라 6 가지 유형으로 분류 될 수 있다.
- 진입 점(Entry points) : CFG의 진입 점 인 노드. 일반적으로 이들은 실행 바이너리의 시작점 인 노드이다. 단일 함수에는 둘 이상의 진입 점이 있을 수 있다.
- 출구 점(Exit points) : 제어 흐름은 이러한 기본 블록 (CFG의 노드) 중 하나를 통해 해당 함수를 떠난다. 이러한 기본 블록은 일반적으로 RET 명령어 또는 CALL 명령어 등으로 끝난다. 각 함수에는 둘 이상의 종료 지점이 있을 수 있다.
- 트랩 (Traps): 단일 에지가 자체적으로 루프되는 노드이다. 트랩 노드에는 하위 노드가 없다.
- 자체 루프 (Self-loops): 다른 노드에 대한 에지도 있는 자체 에지 가있는 노드. 트랩도 자체 루프이다.
- 루프 헤드(Loop heads) : 루프 헤더가 있는 노드.
- 루프 꼬리 (Loop tails): 루프의 헤더에 대한 에지가 있는 루프 본문 내의 노드이다. 노드 유형 벡터는 함수의 CFG에서 6 개 이상의 노드 유형 개수를 포함하는 벡터일 수 있다. 즉, [#En #Ex #T #S #LH #LT]. 이 벡터를 생성하기 위해 함수의 CFG를 반복하고 해당 노드 유형을 1씩 업데이트 할 수 있다. 우리가 어떤 노드를 만날 때마다. 출력 벡터 차원은 항상 1 x 6일 수 있다.
인 디그리 카운트 (In-degree Count) : 이 함수의 호출자 수이다.
아웃 디그리 카운트 (Out-degree Count) : 함수 바디에 있는 피 호출자 수이다.
함수 타입(Function Type) : 함수 유형은 가져 오기 또는 내보내기가 될 수 있다. 이 함수는 단일 값 벡터입니다.
함수의 인수 개수 (Function’s Arguments Count) : 함수 시그니처의 인수 수이다.
순환 복잡성 (Cyclomatic Complexity) : 함수 CFG의 고유 경로 수이며 다음 수학식 1을 사용하여 계산된다.
[수학식 1]
#Edges - #Nodes + (2 * #(Nodes with exit points))
순환 비용 (Cyclomatic Cost) : 사이클 수 측면에서 함수 코드의 실행 비용이다. Radare2는 상징적 실행 능력을 가지고 있으며 함수 분석 중에 Radare2는 순환 비용을 자동으로 계산합니다. 따라서 이 함수 추출은 단순히 쿼리 작업으로 구현 가능하다.
다이어그램 서명 해시 (Diagraph Signature Hash) : 두 다이어그램의 정확한 노드 및 에지 분류 함수는 실제로 CFG에서 어떻게 배열되는지에 대한 통찰력을 제공하지 못한다. 그림 8에 도시된 두 다이어그램을 살펴보면 둘 다 [1 1 0 0 0 0]의 노드 분류 특징 벡터와 [6 1 0 0] 에지 분류 특징 벡터를 만족한다. 따라서, 이러한 노드 분류 특징 벡터와 에지 분류 특징 벡터 만으로는 이들을 구분할 수 없다. 다만, 이에 대하여 지배 관계를 반영하면 두 다이어그램을 구분 가능하다.
예를 들어 도 8의 그래프 (a)에서 노드 F의 즉각적인 지배자(immediate dominator)는 E이고 그래프 (b)에서 노드 F의 즉각적인 지배자는 A이다. 따라서, 프로세서(103)는 이러한 지배적인 관계를 반영하여 배열정보를 생성할 수 있다.
구체적으로, 프로세서(103)는 대상 다이어그램에 대하여 즉각적인 지배자 트리(immediate dominator tree)를 구성할 수 있다. 이후, 프로세서(103)는 즉각적인 지배자 트리에 대하여 깊이 우선 순회(DFS)로 노드를 방문한다. 깊이 우선 순회를 수행하며, 노드에 처음 방문 될 때마다 비트 벡터에 1을 추가하고, 깊이 우선 순회가 노드를 떠날 때 0을 추가하여, 다이어그램의 레이아웃을 반영하는 비트 벡터를 점진적으로 구성할 수 있다.
이러한 비트 서명의 길이는 각 함수에 따라 달라지는 CFG의 노드 수에 따라 달라진다. 프로세서(103)는 이 비트 시퀀스를 정규화하기 위해 비트 서명의 Murmur 해시를 계산하고 이를 함수로 사용할 수 있다. Murmur 해시는 이웃과 유사한 비트 문자열을 정렬한다는 점에서 암호화 해싱 체계와 차이를 가진다. 암호화 해싱에서는 단일 비트가 변경 되더라도 출력 해시가 매우 멀리 정렬되어 패턴을 감지하기 어렵지만 Murmur는 이와 다른 특징을 가지므로, 대규모 데이터 세트의 인덱싱에 유리하다.
호출 참조 벡터 (Call References Vector) : 호출 참조는 다른 함수에 대한 함수 본문 내의 함수 호출 (예 : CALL 명령어)을 의미한다. 1:1 매핑 기술은 벡터화 된 형식을 기반으로 하지만 함수 호출 참조는 문자열 형식일 수 있다. 프로세서(103)는 함수 호출 시그니처를 가져와 해당 임베딩 벡터로 변환할 수 있다. 호출 참조 벡터는 발생한 함수 호출에 대한 모든 임베딩 벡터의 합계에 해당된다.
2) 텍스트적 특징 (Textual Features)
이상에서는 구조적 특성만을 기준으로, 두 개의 digraph를 일치시키는 데 사용할 수 있다. 이하에서는, 함수 (예 : 어셈블리)의 텍스트 특성을 기반으로 적용하기 위한 특징을 설명한다.
오피코드 히스토그램 해시(op-codes Histogram Hash)
오피코드는 명령어의 작동 유형을 정의하며, 각 함수는 명령어에 정의 된 기능에 따라 다른 번호와 일련의 연산 코드 세트를 사용한다. 오피코드 히스토그램은 지정된 기능에 사용되는 각 오피코드의 빈도를 캡처한다. 히스토그램은 서로 다른 함수 간의 고유성과 유사성을 캡처할 수 있다. 오피코드 수는 함수마다 다를 수 있으므로 히스토그램의 길이도 다를 수 있다. 따라서, 상수 특징으로 만들기 위해, 프로세서(103)는 히스토그램을 JSON 문자열로 변환한 다음 Murmur 해시를 계산할 수 있다. Murmur 해시는 공통성을 유지하는 점에서 유용하다.
함수 문자열 해시 (Function Strings Hash)
함수 문자열은 ASCII 문자열로 간단한 작업을 수행한다. 예를 들어, printf()를 호출하는 함수와 여기에 전달된 첫 번째 인수는 일반적으로 일부 문자열 상수를 참조하는 DATA가 된다. 이러한 고유한 상수는 함수의 내부 작업에 대한 풍부한 정보를 공개하므로 리버스 엔지니어링에 매우 유용하게 사용 가능하다. 따라서, 이진 비교에서 함수의 CFG에 참조 된 문자열 상수를 일치 시키면 잠재적으로 유사한 함수를 찾는 데 도움이 될 수 있다.
이에, 프로세서(103)는 함수에서 모든 문자열 상수를 추출하고 주어진 함수에서 추출된 모든 문자열에 대해 해시(예컨대, Murmur 해시)를 계산한다. 다른 길이 문자열을 단일 상수 값으로 표현하기 위해, 계산 된 해시는 긴 16 비트 정수일 수 있다.
명령 수(Instruction Count)
함수 본문의 명령어 수입니다. 이 함수의 영향은 오탐지를 줄이거나 제거하는 데 사용 가능하다.
B. 1:1 mapping
전술한 바와 같이, 이진 비교는 다음의 두 프로세스를 포함할 수 있다. 즉, (1) 추출된 특징을 기반으로 하는 1:1 함수 매핑 및 (2) 함수의 어셈블리를 기반으로 매핑된 함수 간의 유사성 비율의 계산일 수 있다.
이하에서는, 본 발명의 일 실시예에 따른 특징적인 1:1 매핑 방법을 설명한다. 전술한 바와 같이, 프로세서(103)는 모든 특징을 부동 벡터로 변환 한 후 연결하여 단일 벡터로서 생성하며, 이러한 연결된 벡터를 원샷 인코딩 벡터라 함은 기 설명한 바와 같다. 즉, 프로세서(103)는 모든 함수에 대한 원샷 인코딩 벡터를 계산 한 후, 1:1 매핑을 위하여, 다른 바이너리의 모든 함수와 각 함수의 코사인 거리를 계산하고 최소 거리를 가진 함수들을 상호 매핑할 수 있다.
1) 원샷 인코딩 (One-shot encoding)
프로세서(103)는 모든 비-벡터 형태의 함수를 벡터로 변환한다.
예컨대, 노드 분류 벡터 함수 및 에지 분류 벡터 함수는, 이미 벡터이므로, 프로세서(103)는 이에 대한 변환을 수행하지 않는다. 프로세서(103)는 정수 상수 인 in-degree, out-degree 등과 같은 함수를 단일 요소 벡터로 변환한다. 해시 기반 함수도 정수이므로, 프로세서(103)는 이를 단일 요소 벡터로 변환한다. 호출 참조 함수는 word2vec 기반 임베딩을 사용하여 계산되므로 벡터 크기는 임베딩 차원이다 (여기에서는, 임베딩 차원으로 200을 사용함).
프로세서(103)는 모든 특징 벡터를 연결하여, 도 3에 도시된 예와 같은, 원샷 인코딩 벡터를 산출한다. 여기에서, 두 바이너리 바이너리의 모든 함수에 대해 동일한 순서를 사용하므로, 특징의 순서는 중요하지 않습니다.
도 3에서, 호출 참조(Call references) 함수 벡터는 원샷 인코딩 벡터에서 가장 많은 공간을 차지하며 가장 지배적 인 함수로 보인다. 그러나, 호출 참조 특성 벡터가 이진 차이 정확도에 미치는 영향을 분석한 결과, 그 결과 호출 참조 특성을 건너 뛰더라도 차이가 없음을 확인하였다. 이는, 대부분의 함수에 대해 함수 호출이나 호출 참조가 없었기 때문에 호출 참조 함수 벡터가 0으로 채워지기 때문이다.
따라서, 이러한 호출 참조 함수 벡터의 크기에도, 이를 지배적 인 특성으로 만들지 않으므로, 모든 특성이 함수에 대한 초기 1:1 매핑에 동등하게 기여함을 알 수 있다.
일 실시예에서, 프로세서(103)는 이러한 호출 참조(Call references) 함수 벡터를 1:1 매핑에 제외하여 실시할 수 있다. 이는, 호출 참조(Call references) 함수 벡터는, 그 크기 대비 특징성이 낮으므로, 이러한 호출 참조(Call references) 함수 벡터를 1:1 매핑에서 제외함으로써, 낮은 리소스로도 높은 정확도를 담보하며 1:1 매핑을 수행할 수 있다.
2) 1:1 매핑 알고리즘 (Algorithm)
1:1 매핑 알고리즘은, 도 5를 참조하여 기 설명한 바와 같다. 이하에서는, 이에 대하여 아래의 용어를 정의하며 보다 상세히 설명한다.
대상 벡터 (Target Vector) : 프로세서(103)가 바이너리 A와 바이너리 B를 비교하고, 원샷 인코딩 벡터가 두 바이너리의 모든 함수에 대해 생성된다. 프로세서(103)는 바이너리 A의 모든 함수 중 어느 하나의 원샷 인코딩 벡터를 재귀적으로 선택하고, 이를 바이너리 B의 모든 함수의 원샷 인코딩 벡터에 각각 비교하여 가장 일치하는 어느 하나의 함수를 선택한다. 여기에서, 바이너리 A의 모든 함수 중 어느 하나의 원샷 인코딩 벡터를 대상 벡터라고 칭한다.
타겟 행렬 (Target Matrix) : A에서 선정된 대상 벡터와 비교되는 바이너리 B의 모든 원샷 인코딩 벡터는 타겟 행렬로 정의된다.
다른 예로, 프로세서(103)는 바이너리 A의 대상 벡터를 바이너리 B의 모든 원샷 인코딩 벡터와 루핑 방식으로 비교할 수 있다.
다만, 루핑 비교는 행렬 산술보다 계산 리소스가 다수 필요하므로, 프로세서(103)는 연산 속도를 높이기 위해 타겟 행렬을 공식화하고 비 루핑 방식으로 대상 벡터와 비교할 수 있다.
도 4와 같이, 바이너리 A의 대상 벡터와 바이너리 B의 대상 행렬이 주어지면, 프로세서(103)는 타겟 행렬 차원에 대응되는 차원의 코사인 거리 행렬을 산출하여 대상 벡터와 타겟 행렬의 각 요소(벡터) 간의 코사인 거리를 계산할 수 있다.
프로세서(103)는 단일 등가 벡터로 타겟 행렬을 매핑하기 위해, 코사인 거리 행렬(Distance Matrix)에서 최소 거리를 가진 어느 하나의 벡터를 선택한다. 프로세서(103)는 최소 거리 벡터 인덱스를 타겟 행렬에 다시 매핑한다. 1:1 매핑은 타겟 행렬에서 타겟 행렬의 최소 거리 인덱스 벡터로 공식화됩니다. 즉, 프로세서(103)는 타겟 행렬에서 최소 거리를 가지는 벡터를 타겟 벡터와 1:1로 매칭할 수 있다.
위의 과정은 바이너리 A의 모든 대상 벡터에 대해 반복되어, 프로세서(103)는 바이너리 A와 바이너리 B의 모든 함수에 대해 1:1 매핑을 수행할 수 있다. 함수가 매핑되면, 프로세서(103)는 혼동을 피하고 조회 속도를 높이기 위해 바이너리 A 및 바이너리 B는 데이터 세트에서 삭제시킬 수 있다.
C. 의미적 유사성 (Semantic similarity)
상기에서, 이진 비교의 한 프로세스로서, 1 : 1 매핑에 대해 설명했다. 이하에서는, 두 번째 프로세스, 즉 의미적 일치에 대해 설명합니다.
의미 일치 단계에서, 프로세서(103)는 어셈블리 데이터 또는 파생 된 형식을 비교하여 두 함수 간의 유사성 비율을 계산한다. 이하에서, 의미적 유사성을 결정하는 주요 요소를 서술하여 설명한다.
1) 중간 표현 (Intermediate Representation)
각 아키텍처 마다 서로 다른 명령어 세트가 존재한다. 즉 ARM과 x86 64는 서로 유사하지 않은 서로 다른 어셈블리를 사용한다.
따라서, 다중 아키텍처 환경에서의 이진 비교를 위해서는 어셈블리 자체로서 사용할 수 없으며, 본 발명의 일 실시예에서는, 이러한 어셈블리를 다른 아키텍처에 대해 변경되지 않는 중간 표현(Intermediate Representation)로 변경하여 사용한다. 이러한 중간 표현을 사용하는 주된 이유는 의미적 유사성을 비교할 수 있도록 하기 위함이다. 중간 표현을 사용하지 않는 경우 각 아키텍처에 대해 서로 다른 word2vec 모델을 교육하고 유지 관리해야 하는 문제가 있다.
이하에서는, 중간 표현 분석 도구로서 radare2를 적용하였고, 중간 표현 언어로 ESIL를 사용한 예를 들어 설명하나, 이에 한정되는 것은 아니다. ESIL은 Evaluable Strings Intermediate Language의 약자로서, 모든 CPU 오피코드(opcode) 의미 체계에 대해 Forth와 유사한 표현을 설명할 수 있다. 개별 명령을 에뮬레이트하기 위해 ESIL 표현을 평가할 수 있다. ESIL 표현식의 각 명령은 쉼표로 구분된다. ESIL은 일반적으로 계산기에 사용되는 것과 유사한 스택 기반 인터프리터를 사용한다. 입력에는 값과 연산자의 두 가지 범주가 있다. 값은 단순히 스택에 푸시되고 연산자는 스택의 값을 팝하고 작업을 수행 한 다음 결과 (있는 경우)를 다시 푸시한다. ESIl을 우리가하고 싶은 연산의 후위 표기법으로 생각할 수 있으며, ESIL에 대한 구문은 다음과 같다.
-대상 opcode는 쉼표로 구분 된 ESIL 표현식 목록으로 변환된다.
xor eax, eax -> eax, =, 1, zf, =
-메모리 액세스는 대괄호 작업으로 정의됩니다.
mov eax, [0x80480] -> 0x80480, [], eax, =
-기본 피연산자 크기는 연산 대상의 크기에 따라 결정된다.
movb 0, 0x80480 -> 0x80480, = [1]
-NOP 명령어는 빈 문자열로 표시된다.
-syscall은 특별한 처리가 필요하며 표현식 시작 부분에 '$'기호로 표시된다. 선택적 숫자 값을 전달하여 시스템 호출 수를 지정할 수 있다.
0x80, $
-트랩은 TRAP 명령으로 구현된다. 유효하지 않은 명령어, 0으로 나누기, 메모리 읽기 오류 또는 특정 아키텍처에 필요한 기타 사항에 대한 예외를 throw하는 데 사용된다.
-ESIL opcode는 어셈블리와 다르며 C 또는 C ++와 같은 상위 수준 언어와 더 유사하다. 예 : ==, +, -, ×, ÷, <,>, <=,> =, &, |, ^ 등일 수 있다.
2) 임베딩 모델 (Embedding model)
Word2vec 임베딩은 텍스트 데이터 간의 의미 관계를 학습하는 데 광범위하게 사용된다. 컨텍스트 정보가 주어지면, 프로세서(103)에 의하여 구동되는 word2vec 모델은, 학습 데이터 세트의 각 토큰에 대해 임베딩 벡터를 학습하고 토큰 간의 의미 관계를 보존 할 수 있다. 의미 상 유사성을 학습하는 정확도는 제공된 컨텍스트 정보에 크게 좌우될 수 있다.
일 예로, 프로세서(103)는 ESIL 문을 한 줄로 간주하고 (단어 데이터의 경우 일반 word2vec와 비교하여) 토큰을 얻기 위해 ESIL 문을 쉼표로 분할할 수 있다. 각 토큰은 ESIL 문에서 특별한 위치와 의미를 가지며 word2vec 모델은 해당 의미 또는 의미 관계를 학습하며, 이에 대해서는 도 5를 참조하여 상술한 바와 같다.
- 바이너리 데이터셋(Binary Dataset) : 학습 데이터 세트에 포함 된 XNU 바이너리 모음을 의미하며, 본 출원에 개시되는 예에서는 상술한 바와 같이 MacOS 및 iOS 장치에서 XNU 제거 바이너리를 사용하였으나, 이에 한정되는 것은 아니다.
- 중간 표현 에 대한 Radare 분석(Radare Analysis for IR) : 프로세서(103)는 'aaa'명령을 사용하여 radare2 도구를 사용하여 주어진 각 바이너리를 분석할 수 있다. 즉, 모든 유형의 분석을 실행할 수 있다. 바이너리가 분석되면, 프로세서(103)는 발견 된 모든 함수를 반복하고 중간 표현 코드를 가져 와서 텍스트 파일에 추가할 수 있다. 모든 함수의 모든 ESIL 문을 포함하는 각 바이너리에 대해 단일 텍스트 파일이 생성된다.
- 중간 표현 전처리 (Preprocess IR): 프로세서(103)는 메모리 액세스 주소 또는 오프셋 등에 의해 도입 된 임의성을 제거할 수 있다. 이러한 오프셋은 계속 변경되며 함수 중간 표현의 의미 관계와는 아무 관련이 없으므로, 프로세서(103)는이러한 임의성과 관련된 오프셋을, 혼동을 피하기 위해 상수 값으로 대체할 수 있다. 이하는 이러한 중간 표현 전처리의 예들을 예시한다.
NOP 명령어는 ESIL에서 빈 문자열로 변환되므로, 프로세서(103)는 모든 공백을 제거한다.
프로세서(103)는 모든 정수 오프셋을 기 설정된 특정 문자열 (예컨대, "OFFSET"문자열)로 대체한다.
프로세서(103)는 메모리 참조를 위한 모든 16 진 주소를 기 설정된 특정 문자열(에컨대, "XXXX") 로 대체한다.
- 중간 표현 토큰 (IR Tokens) : 프로세서(103)에 의해 학습 모델 (예컨대, word2vec 모델)을 학습 시키려면, 입력이 토큰 목록 형식으로 설정될 수 있다. 따라서, 프로세서(103)는 중간 표현 입력문(ESIL 문)을 쉼표로 분할하고, 토큰 목록으로 변환할 수 있다. 각 중간 표현 입력문은 토큰 목록으로 변환되고 이러한 목록 모음은 전 처리기 모듈에서 전처리 된 각 중간표현 텍스트 파일에서 생성될 수 있다.
- 트레이닝 (Training): 프로세서(103)는 상술한 전처리를 기반으로 학습 모델을 학습할 수 있다.
일 예로, Gensim python 라이브러리를 사용하여 word2vec 모델을 교육할 수 있다. 입력은 토큰 목록이며 학습 매개 변수로는, 임베딩 크기 = 200, Epoch = 15, 창 크기 = 2, 각 토큰의 최소 개수 = 1, 모델 학습에 소요되는 시간 = 30 분 미만으로 학습을 수행한다.
모델이 충분히 학습되면, 프로세서(103)는 이러한 학습 모델을 이용하여 중간 표현 토큰에 대한 임베딩 벡터를 가져 오는 데 직접 사용할 수 있으며, 이를 통하여, 이들 간의 의미 관계를 찾는 데 사용할 수 있다.
3) 중간 표현 대 함수 벡터 (IR to Function Vector)
각 함수는 두 함수 간의 의미적 유사성을 일치시키는 데 사용되는 디스 어셈블리 또는 중간 표현 (IR)으로 표시될 수 있다. 전통적으로 시퀀스 매칭은 두 함수 간의 유사성 비율을 찾는 데 사용되지만, 컴파일러 최적화 및 IR의 기타 임의성으로 인해 시퀀스 매칭은 많은 오류를 생성하고 탐지 정확도에 영향을 미칠 수 있다.
이에 본 발명에서는, 중간 표현에서 이러한 임의성을 극복하기 위하여, 의미 인식 매칭 기법을 적용한다. 본 출원의 일 실시예에서, 함수의 ESIL 문에서 함수 벡터를 계산하기 위해 의미론적으로 인식하는 word2vec 기본 임베딩 벡터를 사용한다. 계산된 함수 벡터는 의미 상으로 인식되며 함수를 더 잘 분류 할 수있는 유사성 비율을 찾을 수 있다. 이에 대해서는, 도 6을 참조하여 상술한 바로부터 이해 가능하다.
- 중간 표현 전처리 (Preprocess IR): 함수의 중간 표현 코드가 주어지면, 프로세서(103)는 이전 섹션과 동일한 매개 변수를 사용하여 각 중간 표현 라인을 처리할 수 있다. ESIL 중간 표현 언어는 동등한 어셈블리 명령을 기호적으로 실행 한 결과로 해석될 수 있다. ESIL을 기반으로 한 정적 분석을 쉽게 하기 위해 산술 명령어에는 해당 ESIL 문에 제로 플래그, 캐리 플래그 등과 같은 계산 플래그가 있다. 따라서 공백을 제거하고 오프셋 및 16 진수 주소를 대체하는 것 외에 이진 유사성 작업에 필요하지 않으므로, 프로세서(103)는 모든 플래그 토큰을 스킵할 수 있다. 전처리 모듈의 출력은 함수의 IR 코드에있는 각 ESIL 문에 대한 토큰 목록에 대응될 수 있다.
- 중간 표현 토큰의 벡터화 (IR tokens to Vectors) : 프로세서(103)는 훈련 된 word2vec 임베딩 모델을 사용하여 각 IR 토큰을 동등한 벡터 표현으로 변환할 수 있다.
- 명령어 벡터 (Instruction Vector) : 각 ESIL 문 또는 명령어는 개별적으로 동등한 벡터로 변환 될 수 있는 많은 중간 표현 토큰으로 구성된다. 프로세서(103)는 ESIL 문에 있는 모든 중간 표현 토큰에 대해 단일 벡터를 계산할 수 있다. 예컨대, ESIL 문은 두 개의 주요 블록, 즉 (1) opcode 연산자와 (2) 피연산자로 나눌 수 있다. 명령어는 단일 연산과 많은 피연산자 토큰을 포함 할 수 있다. 프로세서(103)는, 명령 벡터를 계산하기 위해 먼저 모든 연산 및 피연산자 토큰을 벡터로 변환하고, 이후, 결과적으로 단일 피연산자 벡터가 되는 모든 피연산자 벡터를 합산할 수 있다. 마지막으로 프로세서(103)는, 연산 벡터를 합산 된 피연산자 벡터와 연결하고, 결과 벡터를 명령어 벡터로 설정할 수 있다. 임베딩 차원이 1x200인 경우, 명령어 벡터의 차원은 1x400일 수 있다.
- 함수 벡터 (Function Vector) : 함수의 중간 표현 코드에 있는 모든 ESIL 문에 대한 명령어 벡터가 있으면, 프로세서(103)는 모든 명령어 벡터를 합산하여 함수 벡터를 계산할 수 있다. 합계에 대한 평균을 사용할 수도 있지만 합계가 더 많은 의미 적 유사성을 유지할 수 있다.
D. 매칭 알고리즘 (Matching algorithm)
프로세서(103)는 의미론 유사성을 기초로 두 이진 바이너리의 모든 함수를 일치시키고 비교 할 수 있다. 이는 도 7을 참조하여 상술한 바를 참조하여 이해할 수 있다. 이러한 과정에서 주요 특징은 다음과 같다.
정확한 일치의 1순위 설정 (Exact match 1st priority) :
프로세서(103)는 사용 가능한 기호 함수가 처리되면, 이 규칙을 최우선적으로 적용하여 나머지 함수를 처리한다. 먼저 바이너리 B의 모든 함수에 대해 바이너리 A에서 주어진 함수의 원샷 인코딩 벡터의 코사인 거리 행렬을 계산하고 바이너리 B에서 최소 거리 함수를 선택합니다. 프로세서(103)는 코사인 거리가 0이면 의미적 유사성을 계산한다. 프로세서(103)는 매핑 된 함수의 유사성 및 정확한 일치와 부분 일치로 분류한다. 프로세서(103)는 코사인 거리가 0이 아니면 함수를 건너 뛰고 다음 규칙으로 다시 분석합니다. 특성 벡터가 100 %와 일치하고 거리가 0 인 함수 만이 이 규칙에 따라 처리된다.
- 부분 일치의 2순위 설정(Partial match 2nd priority) : 정확한 일치 규칙으로 함수가 처리되고 나서, 프로세서(103)는 나머지 함수에 대하여 이 규칙으로 처리한다. 이 규칙에 따라 코사인 거리가 정확히 0이 아니라 0보다 크고 임계치 보다 작은 경우, 즉, 0보다 약간 큰 경우가 이에 해당된다. 프로세서(103)는 코사인 거리가 계산되면 중간 표현 코드의 의미적 유사성이 계산되고, 프로세서(103)는 유사성 거리가 임계 값 미만인 경우(즉, 일정 이상 유사한 경우), 이들을 정확 또는 부분적 일치로 분류할 수 있다. 프로세서(103)는 상술한 규칙과 본 규칙을 충족하지 않는 모든 함수는 일치하지 않는 함수로 판단한다.
- 거리 행렬 (Distance matrices) : 프로세서(103)는 코사인 거리 (1-코사인 유사성)를 사용하여 함수 원샷 인코딩 벡터와 유클리드 거리를 비교 및 *?*해석하여 함수 벡터를 비교할 수 있다. 유클리드 거리는 확대 된 차이보기를 제공하므로 의미적 차이를 더 잘 강조 할 수 있다.
- 임계값 (Threshold) : 임계 값의 선택은 분류 정확도를 위해 매우 중요합니다. 임계값이 적절하지 않으면 오탐지가 다수 발생할 수 있다. 본 출원에서는, 다량의 실험 결과, 유클리디언 거리의 임계값을 50으로 설정했다.
상술한 바와 같이, 본 발명의 일 실시예에 따르면, 다중 아키텍처 바이너리 비교 기술이 효율적으로 제공될 수 있다. 본 출원에서는 특히 XNU 커널 바이너리의 iOS 버전을 사례를 예시하여 설명하였으나, 이에 한정되는 것은 아니다. 본 출원에 의하면, 모든 아키텍처에 대한 단일 솔루션과 크로스 아키텍처 컴파일 바이너리에 대한 유연성을 제공 할 수 있다. 즉, 크로스 아키텍처 바이너리를 정확하게 일치시킬 수 있으며 비교 후 함수 이름 심볼을 가져 오는 데 사용할 수도 있다.
이상에서 설명한 본 발명은 전술한 실시예 및 첨부된 도면에 의해 한정되는 것이 아니고 후술하는 특허청구범위에 의해 한정되며, 본 발명의 구성은 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 그 구성을 다양하게 변경 및 개조할 수 있다는 것을 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 쉽게 알 수 있다.
100 : 컴퓨팅 장치
101 : 시스템 메모리 102 : 운영체제
103 : 프로세서 104 : 저장장치
105 : 입력장치 106 : 출력장치
107: 통신장치

Claims (12)

  1. 서로 다른 아키텍처를 가지는 제1 바이너리 및 제2 바이너리에 대한 이진 비교를 수행하는 컴퓨팅 장치에서 수행되는 이진 비교 방법으로서,
    상기 제1 바이너리 및 상기 제2 바이너리에 포함된 함수 각각에 대하여 함수 특징을 추출하고, 추출된 상기 함수 특징에 대응하여 원샷 인코딩 벡터를 생성하는 단계;
    상기 제1 바이너리에서 추출된 제1 원샷 인코딩 벡터와, 상기 제2 바이너리에서 추출된 제2 원샷 인코딩 벡터를 비교하여 벡터 공간에서 일대일 매핑을 수행하는 단계; 및
    중간 표현 intermediate representation)을 이용하여, 일대일 매핑된 한 쌍의 함수 간에 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 단계;
    를 포함하는 교차 아키텍처 바이너리에 대한 이진 비교 방법.
  2. 제1항에 있어서, 상기 원샷 인코딩 벡터를 생성하는 단계는,
    추출된 상기 함수 특징을 벡터로 전치하는 단계; 및
    전치된 벡터를 연결하여 원샷 인코딩 벡터를 생성하는 단계;
    를 포함하는 교차 아키텍처 바이너리에 대한 이진 비교 방법.
  3. 제1항에 있어서, 상기 일대일 매핑을 수행하는 단계는,
    상기 제1 원샷 인코딩 벡터를 기준으로, 상기 제1 원샷 인코딩 벡터와 최소 거리를 가지는 상기 제2 원샷 인코딩 벡터를 선별하는 단계; 및
    선별된 제2 원샷 인코딩 벡터를 상기 제1 원샷 인코딩 벡터와 일대일 매핑하는 단계;
    를 포함하는 교차 아키텍처 바이너리에 대한 이진 비교 방법.
  4. 제3항에 있어서, 상기 선별된 제2 원샷 인코딩 벡터는,
    상기 제1 원샷 인코딩 벡터와 최소 코사인 거리를 가지는 것인
    교차 아키텍처 바이너리에 대한 이진 비교 방법.
  5. 제1항에 있어서, 상기 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 단계는,
    일대일 매칭된 한 쌍의 함수 각각에 대하여, 중간 표현 토큰을 생성하는 단계;
    상기 한 쌍의 함수 각각에 대하여, 생성된 중간 표현 토큰을 기초로 함수 벡터를 계산하는 단계; 및
    기 설정된 매칭 알고리즘에 따라, 함수 벡터 간의 일치 정도를 기초로 매칭 여부를 판단하는 단계;
    를 포함하는 교차 아키텍처 바이너리에 대한 이진 비교 방법.
  6. 제5항에 있어서, 상기 매칭 알고리즘은,
    원샷 인코딩 벡터 간의 거리가 0인 대상으로 하는 1순위 전부 매칭 설정; 및
    원샷 인코딩 벡터 간의 거리가 0보다 크고 임계값 보다 작고, 중간 표현에서의 의미적 유사성이 일정 이상인 경우를 대상으로 하는 제2 부분 매칭 설정;
    을 포함하는 교차 아키텍처 바이너리에 대한 이진 비교 방법.
  7. 제6항에 있어서,
    상기 원샷 인코딩 벡터 간의 거리는 코사인 거리 행렬로부터 결정되고,
    상기 의미적 유사성은 유클리드 거리로부터 결정되는
    교차 아키텍처 바이너리에 대한 이진 비교 방법.
  8. 서로 다른 아키텍처를 가지는 제1 바이너리 및 제2 바이너리에 대한 이진 비교를 수행하는 컴퓨팅 장치에서 수행되는 교차 아키텍처 바이너리에 대한 이진 비교 방법을 실행시키기 위한 컴퓨터 프로그램을 기록한 컴퓨터 판독 가능 저장 매체로서,
    상기 제1 바이너리 및 상기 제2 바이너리에 포함된 함수 각각에 대하여 함수 특징을 추출하고, 추출된 상기 함수 특징에 대응하여 원샷 인코딩 벡터를 생성하는 기능;
    상기 제1 바이너리에서 추출된 제1 원샷 인코딩 벡터와, 상기 제2 바이너리에서 추출된 제2 원샷 인코딩 벡터를 비교하여 벡터 공간에서 일대일 매핑을 수행하는 기능; 및
    중간 표현 intermediate representation)을 이용하여, 일대일 매핑된 한 쌍의 함수 간에 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 기능;
    을 포함하는 컴퓨터로 읽을 수 있는 저장매체.
  9. 제8항에 있어서, 상기 원샷 인코딩 벡터를 생성하는 기능은,
    추출된 상기 함수 특징을 벡터로 전치하는 기능; 및
    전치된 벡터를 연결하여 원샷 인코딩 벡터를 생성하는 기능;
    을 포함하는 컴퓨터로 읽을 수 있는 저장매체.
  10. 제8항에 있어서, 상기 일대일 매핑을 수행하는 단계는,
    상기 제1 원샷 인코딩 벡터를 기준으로, 상기 제1 원샷 인코딩 벡터와 최소 거리를 가지는 상기 제2 원샷 인코딩 벡터를 선별하는 기능; 및
    선별된 제2 원샷 인코딩 벡터를 상기 제1 원샷 인코딩 벡터와 일대일 매핑하는 기능;
    을 포함하는 컴퓨터로 읽을 수 있는 저장매체.
  11. 제8항에 있어서, 상기 의미적 유사성을 계산하여 상호 매칭 여부를 판단하는 단계는,
    일대일 매칭된 한 쌍의 함수 각각에 대하여, 중간 표현 토큰을 생성하는 기능;
    상기 한 쌍의 함수 각각에 대하여, 생성된 중간 표현 토큰을 기초로 함수 벡터를 계산하는 기능; 및
    기 설정된 매칭 알고리즘에 따라, 함수 벡터 간의 일치 정도를 기초로 매칭 여부를 판단하는 기능;
    을 포함하는 컴퓨터로 읽을 수 있는 저장매체.
  12. 제11항에 있어서, 상기 매칭 알고리즘은,
    원샷 인코딩 벡터 간의 거리가 0인 대상으로 하는 1순위 전부 매칭 설정; 및
    원샷 인코딩 벡터 간의 거리가 0보다 크고 임계값 보다 작고, 중간 표현에서의 의미적 유사성이 일정 이상인 경우를 대상으로 하는 제2 부분 매칭 설정;
    을 포함하는 컴퓨터로 읽을 수 있는 저장매체.
KR1020210120644A 2020-12-02 2021-09-09 교차 아키텍처 바이너리에 대한 이진 비교 방법 KR102671575B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200166459 2020-12-02
KR1020200166459 2020-12-02

Publications (2)

Publication Number Publication Date
KR20220077847A true KR20220077847A (ko) 2022-06-09
KR102671575B1 KR102671575B1 (ko) 2024-06-03

Family

ID=81986052

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210120644A KR102671575B1 (ko) 2020-12-02 2021-09-09 교차 아키텍처 바이너리에 대한 이진 비교 방법

Country Status (1)

Country Link
KR (1) KR102671575B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115906089A (zh) * 2022-10-24 2023-04-04 中国人民解放军国防科技大学 一种基于二进制函数相似性的漏洞检测方法与***

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100429892B1 (ko) 2002-08-26 2004-05-03 삼성전자주식회사 고속 이진비교회로 및 고속 이진데이터 비교방법
KR20150048600A (ko) * 2013-10-28 2015-05-07 숭실대학교산학협력단 프로그램의 유사도 비교를 위한 데이터 처리 방법, 장치 및 컴퓨터 프로그램 제품
KR20200068106A (ko) * 2018-11-28 2020-06-15 서울대학교산학협력단 딥러닝 신경망의 압축 방법 및 이를 수행하기 위한 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100429892B1 (ko) 2002-08-26 2004-05-03 삼성전자주식회사 고속 이진비교회로 및 고속 이진데이터 비교방법
KR20150048600A (ko) * 2013-10-28 2015-05-07 숭실대학교산학협력단 프로그램의 유사도 비교를 위한 데이터 처리 방법, 장치 및 컴퓨터 프로그램 제품
KR20200068106A (ko) * 2018-11-28 2020-06-15 서울대학교산학협력단 딥러닝 신경망의 압축 방법 및 이를 수행하기 위한 장치

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115906089A (zh) * 2022-10-24 2023-04-04 中国人民解放军国防科技大学 一种基于二进制函数相似性的漏洞检测方法与***
CN115906089B (zh) * 2022-10-24 2024-04-12 中国人民解放军国防科技大学 一种基于二进制函数相似性的漏洞检测方法与***

Also Published As

Publication number Publication date
KR102671575B1 (ko) 2024-06-03

Similar Documents

Publication Publication Date Title
US11036614B1 (en) Data control-oriented smart contract static analysis method and system
David et al. Neural reverse engineering of stripped binaries using augmented control flow graphs
CN109885479B (zh) 基于路径记录截断的软件模糊测试方法及装置
US8365280B2 (en) System, method, and program for determining validity of string
CN108491228B (zh) 一种二进制漏洞代码克隆检测方法及***
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
US11599447B2 (en) Detection of runtime errors using machine learning
CN115022026A (zh) 一种区块链智能合约威胁检测装置及方法
CN100377089C (zh) 二进制翻译中经由跳转表的多目标分支语句的识别方法
Blindell Instruction Selection
CN102867144A (zh) 一种用于检测和清除计算机病毒的方法和装置
CN110096264A (zh) 一种代码运行方法及装置
Valenzuela-Escarcega et al. Description of the Odin event extraction framework and rule language
Campion et al. Learning metamorphic malware signatures from samples
Ji et al. Vestige: Identifying binary code provenance for vulnerability detection
KR102671575B1 (ko) 교차 아키텍처 바이너리에 대한 이진 비교 방법
CN113849781B (zh) Go语言源代码混淆方法、***、终端及存储介质
CN114201756A (zh) 一种智能合约代码片段的漏洞检测方法和相关装置
US11494492B2 (en) Program analysis system, program analysis method and storage medium
Escalada et al. An efficient platform for the automatic extraction of patterns in native code
CN115373737B (zh) 一种基于特征融合的代码克隆检测方法
Sargsyan et al. Scalable and accurate clones detection based on metrics for dependence graph
US8341607B2 (en) Condensing pattern matcher generation for intermediate language patterns
CN118103815A (zh) 编译方法以及用于编译的装置
KR20230040516A (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법

Legal Events

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