KR102544801B1 - 데이터 재사용 공격에 대한 방어 방법 및 시스템 - Google Patents

데이터 재사용 공격에 대한 방어 방법 및 시스템 Download PDF

Info

Publication number
KR102544801B1
KR102544801B1 KR1020210153318A KR20210153318A KR102544801B1 KR 102544801 B1 KR102544801 B1 KR 102544801B1 KR 1020210153318 A KR1020210153318 A KR 1020210153318A KR 20210153318 A KR20210153318 A KR 20210153318A KR 102544801 B1 KR102544801 B1 KR 102544801B1
Authority
KR
South Korea
Prior art keywords
binary
indirect
function
caller
indirect caller
Prior art date
Application number
KR1020210153318A
Other languages
English (en)
Other versions
KR20230067329A (ko
Inventor
차상길
이대진
이준오
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020210153318A priority Critical patent/KR102544801B1/ko
Publication of KR20230067329A publication Critical patent/KR20230067329A/ko
Application granted granted Critical
Publication of KR102544801B1 publication Critical patent/KR102544801B1/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
    • 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/565Static detection by checking file integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

데이터 재사용 공격에 대한 방어 방법 및 시스템이 개시된다. 일 실시예에 따른 방어 시스템에 의해 수행되는 데이터 재사용 공격에 대한 방어 방법은, 바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별하는 단계; 및 상기 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성하는 단계를 포함할 수 있다.

Description

데이터 재사용 공격에 대한 방어 방법 및 시스템{METHOD AND SYSTEM TO PROTECTING AGAINST DATA-REUSE ATTACKS}
아래의 설명은 바이너리 정적 분석을 통해 알아낸 인자와 오프셋 정보를 활용하여 데이터 재사용 공격에 대한 방어 기법과 그 구현에 관한 것이다.
메모리 취약점 공격은 점점 고도화되고 있다. 그 중에서도 방어 기법을 우회하기 위해 바이너리 내의 코드를 재사용(Binary Code Reusing) 하는 공격 방법이 특히 주목받고 있다. 바이너리에 새로운 코드를 넣어 실행하는 것은 방어 기법에 의한 제약을 받기 때문에, 보다 효율적인 방법으로 바이너리 내부에 있는 명령어를 공격에 사용하는 것이다. 여기서 공격자는 바이너리를 정적으로 분석하여 찾아낸 명령어를 공격에 사용한다.
앞선 공격을 막기위한 방어 기법(Binary Hardening) 연구도 활발히 진행되고 있다. 특히 소스코드 정보가 없는 바이너리에 방어 기법을 적용하기 위한 연구가 어려운 과제로 자리잡고 있는데, 여기서 대다수의 방어기법들은 바이너리 재작성(Binary Rewriting) 기법을 활용한다. 바이너리 재작성이란 바이너리 실행 흐름을 해치지 않으며, 계측코드를 추가하는 기법을 의미한다. 이 과정에서 실행 흐름을 유지하기 위한 방법으로 기존 코드와 데이터를 유지한 채 계측 코드를 추가한다.
하지만 최근, 바이너리 재작성 기법의 근원적인 한계로 인해 남겨진 데이터를 악용하는 데이터 재사용 공격이 등장했다. 데이터 재사용 공격은 바이너리 재작성이 되어도 존재하는 원본 함수 주소를 이용하여 프로그램의 제어흐름을 변경한다. 즉, 방어 기법이 적용되어도, 메모리 누수 취약점이 없어도 공격을 시행하는 것이 가능하다. 때문에 이를 어떻게 효과적으로 막을 수 있을지에 대한 논의가 필요하다.
한편, 데이터 재사용 공격에 대한 방어기법이 공개되어 있지 않다. 기존에 공개되어 있는 연구의 경우, 그 대상이 코드 재사용 공격에 초점이 맞춰져 있을 뿐이다.
바이너리 정적 분석 기술을 통해 가상 함수 테이블의 오프셋, 간접호출자의 인자 개수와 함수 파라미터 개수를 유추하고, 이를 활용해 데이터 재사용 공격을 방어하는 방법 및 시스템을 제공할 수 있다.
방어 시스템에 의해 수행되는 데이터 재사용 공격에 대한 방어 방법은, 바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별하는 단계; 및 상기 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성하는 단계를 포함할 수 있다.
상기 식별하는 단계는, 상기 바이너리 내에서 정적 분석을 통해 간접호출자의 위치 및 간접호출자의 인자 개수를 포함하는 간접호출자 정보와, 상기 간접호출자에서 호출 가능한 함수의 목록, 상기 간접호출자에서 호출 가능한 함수 파라미터의 개수를 포함하는 함수 파라미터를 식별하는 단계를 포함할 수 있다.
상기 식별하는 단계는, 상기 간접호출자에서 참조하는 오프셋 정보와 가상 함수 테이블에 존재하는 오프셋이 일치하는지 여부를 확인하는 단계를 포함하고, 상기 가상 함수 테이블은, this 포인터, 타입(Runtime Type Identification), 가상 함수 목록들 순으로 구성될 수 있다.
상기 재작성하는 단계는, 상기 식별된 바이너리 정보를 이용하여 제어흐름 무결성(Control Flow Integrity; CFI) 기법을 적용한 테이블 기반 바이너리를 재작성하는 단계를 포함할 수 있다.
상기 재작성하는 단계는, 주소 변환 메커니즘이 포함된 바이너리 재작성 도구를 사용하여 간접호출자의 대상 함수가 매핑된 주소테이블로부터 간접호출자의 대상 함수를 탐색하고, 상기 탐색된 간접호출자의 대상 함수에 대하여 새로운 주소로 변환하여 간접호출자를 실행하는 단계를 포함할 수 있다.
상기 재작성하는 단계는, 상기 새로운 주소로 변환되기 전에, 바이너리 내에서 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드를 추가하는 단계를 포함할 수 있다.
상기 재작성하는 단계는, 상기 바이너리 내에 함수 코드 영역을 나타내는 비트맵을 생성하는 단계를 포함하고, 상기 생성된 비트맵은, 간접호출자에서 호출 가능한 함수의 목록의 확인 가능하도록 바이너리의 새로운 데이터 영역에 위치될 수 있다.
상기 재작성하는 단계는, 공격 가젯으로 사용할 수 있는 함수 주소를 찾기 위해 바이너리의 데이터 영역과 코드 영역을 대상으로 가젯 탐색을 진행하는 단계를 포함할 수 있다.
데이터 재사용 공격에 대한 방어 방법을 상기 방어 시스템에 실행시키기 위해 컴퓨터 판독가능한 기록 매체에 저장되는 컴퓨터 프로그램을 포함할 수 있다.
방어 시스템은, 바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별하는 정적 분석부; 및 상기 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성하는 바이너리 재작성부를 포함할 수 있다.
상기 정적 분석부는, 상기 바이너리 내에서 정적 분석을 통해 간접호출자의 위치 및 간접호출자의 인자 개수를 포함하는 간접호출자 정보와, 상기 간접호출자에서 호출 가능한 함수의 목록, 상기 간접호출자에서 호출 가능한 함수 파라미터의 개수를 포함하는 함수 파라미터를 식별할 수 있다.
상기 정적 분석부는, 상기 간접호출자에서 참조하는 오프셋 정보와 가상 함수 테이블에 존재하는 오프셋이 일치하는지 여부를 확인하는 것을 포함하고, 상기 가상 함수 테이블은, this 포인터, 타입(Runtime Type Identification), 가상 함수 목록들 순으로 구성될 수 있다.
상기 바이너리 재작성부는, 상기 식별된 바이너리 정보를 이용하여 제어흐름 무결성(Control Flow Integrity; CFI) 기법을 적용한 테이블 기반 바이너리를 재작성할 수 있다.
상기 바이너리 재작성부는, 주소 변환 메커니즘이 포함된 바이너리 재작성 도구를 사용하여 간접호출자의 대상 함수가 매핑된 주소테이블로부터 간접호출자의 대상 함수를 탐색하고, 상기 탐색된 간접호출자의 대상 함수에 대하여 새로운 주소로 변환하여 간접호출자를 실행할 수 있다.
상기 바이너리 재작성부는, 상기 새로운 주소로 변환되기 전에, 바이너리 내에서 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드를 추가할 수 있다.
상기 재작성하는 단계는, 상기 바이너리 내에 함수 코드 영역을 나타내는 비트맵을 생성하는 단계를 포함하고, 상기 생성된 비트맵은, 간접호출자에서 호출 가능한 함수의 목록의 확인 가능하도록 바이너리의 새로운 데이터 영역에 위치될 수 있다.
기존의 메모리 방어 기법을 파훼할 수 있었던 데이터 재사용 공격을 방어할 수 있다.
도 1은 일 실시예에 따른 방어 시스템의 동작을 설명하기 위한 도면이다.
도 2는 일 실시예에 따른 방어 시스템의 구성을 설명하기 위한 블록도이다.
도 3은 일 실시예에 따른 방어 시스템의 데이터 재사용 공격에 대한 방어 방법을 설명하기 위한 흐름도이다.
도 4는 일 실시예에 있어서, 간접호출자를 설명하기 위한 예이다.
도 5는 일 실시예에 있어서, 가상 함수 테이블을 설명하기 위한 도면이다.
도 6은 일 실시예에 있어서, 간접호출자의 바이너리 재작성 동작을 설명하기 위한 도면이다.
도 7은 일 실시예에 있어서 추가된 계측코드 명령어를 나타낸 도면이다.
이하, 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
도 1은 일 실시예에 따른 방어 시스템의 동작을 설명하기 위한 도면이다.
데이터 재사용 공격을 방어하기 위해 바이너리(101) 정적 분석(110)과 바이너리 재작성을 활용하여 제어흐름 무결성(Control Flow Integrity; CFI)을 적용한 방어 시스템에 대하여 설명하기로 한다.
방어 시스템(100)은 정적 분석을 통해 바이너리(101) 내에서 간접호출자에 대한 검사를 수행함에 따라 바이너리(101) 상에서 알기 힘든 간접호출자의 함수 대상을 정적 분석을 통해 식별하고, 식별된 함수 목록들만 호출을 허용할 수 있다. 이때, 간접호출자의 대상이 되는 함수의 개수를 최소화하기 위하여 제어흐름 무결성 기법을 적용할 수 있다. 제어흐름 무결성 기법을 적용하기 위하여 간접호출자의 위치, 간접호출자에서 허용되는 함수의 목록을 포함하는 바이너리 정보를 알아야 제어흐름 무결성을 적용(Instrumentation)할 때 허용할 함수 목록을 지정할 수 있다. 실시예에서는 최소한의 심볼과 배치 정보를 가진 바이너리를 대상으로 바이너리 정보를 바이너리 정적 분석(110)을 통해 식별하였다고 가정하여 설명하기로 한다.
특정 간접호출자에서 허용된 함수 목록을 알기 위해선, 바이너리(101) 내부에 피 비교 대상이 존재해야 한다. 이에 대한 해결책으로, 바이너리 주소 값을 비트로 표현한 비트맵을 바이너리의 새로운 데이터 영역에 생성할 수 있다. 비트맵에 들어가는 정보는 앞서 정적 분석(110)을 통해 추출한 간접호출자의 위치와 허용된 함수 목록을 인자 별로 나눌 수 있다. 즉, 인자 별로 하나의 비트맵을 생성한다.
상세하게는, 방어 시스템(100)은 바이너리(101) 내에서 정적 분석(110)을 통해 바이너리 정보를 식별하고, 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성할 수 있다. 방어 시스템(100)은 재작성된 바이너리(102)를 획득할 수 있다.
방어 시스템(100)은 바이너리 내에서 정적 분석(110)을 통해 간접호출자, 함수 파라미터 및 가상 함수 테이블 오프셋을 식별할 수 있다. 방어 시스템(100)은 간접호출자에 대한 제어흐름 무결성 기법을 적용하기 위하여, 바이너리(101) 간접호출자의 위치를 식별할 수 있다. 또한, 방어 시스템(100)은 식별된 간접호출자 또는/및 간접호출자의 위치에서 호출되는 함수 종류를 구분할 수 있다. 이때, 먼저, 간접호출자의 위치를 찾기 위하여 간접호출자의 대상이 어떻게 파생되었는지, 첫 번째 인자 값의 근원지가 어디인지 파악되어야 한다. 방어 시스템(100)은 가상 함수의 경우, 첫 번째 인자의 값이 간접호출자 대상의 원본값(this pointer)을 나타내기에 구분할 수 있다. 따라서 IDA 분석 도구의 중간 언어를 이용해 명령어를 변환한 이후 `두 번의 참조가 이루어진다. 방어 시스템(100)은 첫 번째 인자로 간접호출자 대상의 원본값이 포함되는지 확인하여 일반 간접호출자와 가상 간접호출자를 구분할 수 있다.
방어 시스템(100)은 간접호출자에서 호출되는 함수의 인자 개수 정보를 이용하여 제어흐름 무결성 기법을 적용하기 위하여, 간접호출자에서 사용되는 인자 개수를 식별할 수 있다. 예를 들면, 32비트 바이너리에서 기본적으로 사용되는 호출규약인 C declaration 방식의 스택이 이용되어 함수에 인자가 전달될 수 있다. 하지만, 바이너리 명령어로 함수 인자를 확인해보면, 스택에 값을 넣는 PUSH 명령어 이외에 ESP 레지스터를 사용하는 등 다양한 방법으로 스택에 접근할 수 있다는 것을 알 수 있다. 다시 말해서, 스택에 값을 넣는다는 의미가 같아도 다양한 형태로의 명령어가 존재할 수 있다. 이에, 인자 개수 확인을 위하여 IDA 분석 도구의 중간 언어가 활용될 수 있다. 방어 시스템(100)은 간접호출자의 대상(객체)이 소유한 'mcallinfo_t' 클래스의 args 속성을 참조하여 인자 개수를 알아낼 수 있다.
방어 시스템(100)은 도 4에서 식별된 간접호출자에서 호출 가능한 함수를 제한하기 위하여 간접호출자의 인자 개수와, 간접호출자에서 호출 가능한 함수 파라미터의 개수, 간접호출자에서 호출 가능한 함수를 식별할 수 있다. 먼저, 간접호출자에서 호출 가능한 함수(대상 함수)를 구분하기 위해 IDA 분석 도구에서 사용할 수 있는 함수 구분(Function Slicing)이 이용될 수 있다. 이는 idautils에서 사용하는 Functions generator로 구할 수 있다. 이후, 방어 시스템(100)은 식별된 간접호출자에서 호출 가능한 함수들에서 파라미터 개수 정보를 추출할 수 있다. 예를 들면, 32 비트 바이너리에서 함수 파라미터 개수를 알아내기 위해서 함수 전체 프레임의 크기가 이용될 수 있다. 한 함수의 파라미터 개수를 구하고자 할 때, 인자, 지역변수를 포함한 전체 함수 구조체의 크기에서 함수 프레임의 크기를 뺀 값을 32비트의 주소 크기인 4바이트로 나누어 함수 파라미터의 개수가 도출될 수 있다. 여기서 전체 구조체의 크기를 구하기 위해 'get_struc_size' 함수가 사용되고, 프레임의 크기를 구하기 위해 'get_frame_size' 함수가 사용될 수 있다.
방어 시스템(100)은 도 4에서 식별된 가상 간접호출자의 호출 가능한 함수를 제한하기 위하여 간접호출자에서 참조하는 오프셋과 가상 함수 테이블에 존재하는 오프셋이 일치하는지 확인할 수 있다. 여기서 사용되는 가상 함수의 오프셋을 알기 위해선 바이너리 내에 존재하는 가상 함수 테이블 및 this 포인터를 찾아야 한다. 가상 함수 테이블은 도 5에서 확인할 수 있듯이, this 포인터, 타입(Runtime Type Identification), 가상 함수 목록들 순으로 구성될 수 있다. 가상 함수는 비트별 주소 단위, 예를 들면, 32비트 바이너리의 경우, 4바이트 단위, 64비트 바이너리의 경우, 8바이트 단위로 구성될 수 있으며, 각 함수의 순서대로 오프셋을 가진다. 이러한 가상 함수 테이블을 바이너리 내에서 찾기 위해 IDA 분석 도구의 this 포인터 식별자가 사용될 수 있다. "offset to this"로 시작되는 this 포인터의 식별자는 IDA 분석 도구가 가상 함수 테이블에 포함된 타입 정보(RTTI)를 토대로 식별할 수 있다. 모든 가상 간접호출은 this 포인터를 시작으로 가상 함수 테이블을 참조해 가상 함수의 주소를 가져오기 때문에, 하나의 테이블에 여러 this 포인터로부터 가상 함수의 주소를 가져오면 가상 함수들에 대한 오프셋 정보를 정확히 알아낼 수 있다.
방어 시스템(100)은 바이너리 재작성을 위하여 주소 변환 메커니즘이 포함된 바이너리 재작성 도구인 Multiverse(120)를 사용할 수 있다. 바이너리 재작성 도구인 Multiverse(120)는 바이너리를 정적으로 재작성할 때 존재하는 여러 어려움을 해결하기 위해 원본 코드와 데이터 영역을 보존해두고, 계측된 코드를 추가하는 방식을 택한다. 만약 실행 과정 중 원본 주소를 참조할 경우, 해당 주소를 계측된 코드 영역의 주소로 변환하는데, 이를 위해 주소변환 테이블을 사용한다. 이러한 주소변환 테이블은 바이너리에 내포되어 있어서 데이터 재사용 공격 시 활용될 수 있다.
동적으로 대상을 지정하는 간접호출자는 바이너리 정적 분석으로 대상을 정확히 알게 어렵다. 이에 따라, 바이너리 재작성 도구인 Multiverse(120)는 간접호출자의 대상 함수가 될 수 있는 목록을 모두 구하는 대신, 도 6과 같이 간접호출자의 대상 함수를 간접호출자의 대상 함수가 매핑된 주소테이블에서 찾은 후, 새로운 주소로 변환하여 간접호출자를 실행할 수 있다. 실시예에서는 주소 변환 메커니즘을 통해 옛날 주소 값이 새로운 주소 값을 변환되기 전, 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드가 추가될 수 있다. 주소 변환 메커니즘이 포함된 바이너리 재작성 도구인 Multiverse(120)는 간접호출자 명령을 도 6과 같은 형태로 변환할 수 있다. 테이블 기반 재작성이 적용된 바이너리에 제어흐름 무결성을 적용하기 위해, lookup 함수를 호출하기 전 대상을 검증하는 check target 검사문이 삽입될 수 있다. 이때, 미리 정적 분석을 통해 도출된 인자의 개수에 따른 비트맵이 참조되도록 비트맵 주소 참조 명령어가 추가될 수 있다.
추가된 계측 코드 명령어는 도 7과 같이 나타낼 수 있다. 추가된 계측 코드는 간접호출자에서 호출되는 인자의 개수, 가상 간접호출자의 경우 오프셋에 따라 다르다. 방어 시스템(100)은 호출 가능한 함수 목록을 만들기 위해, 바이너리 내부에 함수 코드 영역을 나타내는 비트맵을 생성할 수 있다. 실시예에서 설명하는 제어흐름 무결성은 바이너리 재작성을 활용해 바이너리를 수정하는 것이기 때문에 검사의 대상과 피 대상자를 바이너리 내에서 찾을 수 있어야 한다. 이러한 비트맵은 기존의 실행 영역과 데이터 영역에 간섭없이 새로 생성된 데이터 영역에 위치될 수 있다. 예를 들면, 함수 시작 주소부터 마지막 주소까지 8바이트를 1비트로 표현한 하나의 비트맵을 제작하고, 인자의 개수, 오프셋의 값마다 비트맵을 생성하여 각각의 간접호출자마다 호출할 수 있는 함수의 목록을 확인할 수 있도록 제작될 수 있다. 간접호출자의 대상 함수의 주소값은 정확한 바이트, 비트 오프셋을 구하기 위한 형태로 변형될 수 있다. 바이트 오프셋의 경우, 코드 영역의 베이스를 뺀 값을 비트맵의 1비트 단위로 나누어 구할 수 있고, 해당 바이트에서 8미만의 비트를 나타내는 7과의 AND 연산을 통해 비트 오프셋이 도출될 수 있다((대상 주소/8)&7의 연산).
바이너리 재작성을 통해 보호 기법을 적용하더라도, 바이너리에서 찾을 수 있는 함수 주소를 공격 가젯으로 사용한다. 방어 시스템(100)은 공격 가젯으로 사용할 수 있는 함수의 주소를 찾기 위해 바이너리의 데이터 영역과 코드 영역을 대상으로 가젯 탐색을 진행할 수 있다. 이렇게 알아낸 주소 값들을 다음과 같은 세 가지 기준으로 일회성, 연계가능성이 있는 공격 가젯이라 판단할 수 있다.
첫 번째는 함수의 첫 주소를 가리키는 주소 값인지 아닌지이다. Fine-grained ASLR과 같은 방어기법이 적용되어 있으면, 의미는 유지한 채 기본 블락 또는 명령어 단위로 랜덤화가 이뤄진다. 이 경우, 함수 내부에 어떤 명령어가 어떤 위치에 존재하는지 알기 어려우므로 함수 첫 주소가 아닌 가젯의 경우, 공격 가젯으로의 의미를 잃는다.
두 번째는 함수가 반환 명령어를 통해 끝나야 한다. 이는 첫 번째 이유와 비슷하게, 코드 랜덤화가 적용되었을 경우, 바이너리 실행 시간에 어떤 명령어가 어디에 위치하는지 공격자는 알 수 없다. 따라서 공격 가젯 체인을 문제없이 실행하기 위해선, 함수 주소가 제대로 반환되는 것인지 알아야 한다.
세 번째는 간접호출자가 함수 내에 포함되어 있는지 이다. 기존의 여러 연구는 반환 명령어의 연계를 이용해 공격 가젯을 실행했지만, 함수 주소를 이용한 공격 연계를 위해선 다음 가젯을 공격자가 예측할 수 있어야 한다. 따라서 JMP, CALL을 이용한 간접호출자 명령어만이 연계 가능한 공격 가젯이라 할 수 있다. 예를 들면, 일회성 가젯을 RR(Randomization Resilient)가젯, 연계 가능한 가젯을 RR*로 정의될 수 있다.
도 2는 일 실시예에 따른 방어 시스템의 구성을 설명하기 위한 블록도이고, 도 3은 일 실시예에 따른 방어 시스템의 데이터 재사용 공격에 대한 방어 방법을 설명하기 위한 흐름도이다.
방어 시스템(100)의 프로세서는 정적 분석부(210) 및 바이너리 재작성부(220)를 포함할 수 있다. 이러한 프로세서의 구성요소들은 방어 시스템에 저장된 프로그램 코드가 제공하는 제어 명령에 따라 프로세서에 의해 수행되는 서로 다른 기능들(different functions)의 표현들일 수 있다. 프로세서 및 프로세서의 구성요소들은 도 3의 데이터 재사용 공격에 대한 방어 방법이 포함하는 단계들(310 내지 320)을 수행하도록 방어 시스템을 제어할 수 있다. 이때, 프로세서 및 프로세서의 구성요소들은 메모리가 포함하는 운영체제의 코드와 적어도 하나의 프로그램의 코드에 따른 명령(instruction)을 실행하도록 구현될 수 있다.
프로세서는 데이터 재사용 공격에 대한 방어 방법을 위한 프로그램의 파일에 저장된 프로그램 코드를 메모리에 로딩할 수 있다. 예를 들면, 방어 시스템에서 프로그램이 실행되면, 프로세서는 운영체제의 제어에 따라 프로그램의 파일로부터 프로그램 코드를 메모리에 로딩하도록 방어 시스템을 제어할 수 있다. 이때, 프로세서는 정적 분석부(210) 및 바이너리 재작성부(220) 각각은 메모리에 로딩된 프로그램 코드 중 대응하는 부분의 명령을 실행하여 이후 단계들(310 내지 320)을 실행하기 위한 프로세서의 서로 다른 기능적 표현들일 수 있다.
단계(310)에서 정적 분석부(210)는 바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별할 수 있다. 정적 분석부(210)는 바이너리 내에서 정적 분석을 통해 간접호출자의 위치 및 간접호출자의 인자 개수를 포함하는 간접호출자 정보와, 간접호출자에서 호출 가능한 함수의 목록, 간접호출자에서 호출 가능한 함수 파라미터의 개수를 포함하는 함수 파라미터를 식별할 수 있다. 정적 분석부(210)는 간접호출자에서 참조하는 오프셋 정보와 가상 함수 테이블에 존재하는 오프셋이 일치하는지 여부를 확인할 수 있다.
단계(320)에서 바이너리 재작성부(220)는 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성할 수 있다. 바이너리 재작성부(220)는 식별된 바이너리 정보를 이용하여 제어흐름 무결성(Control Flow Integrity; CFI) 기법을 적용한 테이블 기반 바이너리를 재작성할 수 있다. 바이너리 재작성부(220)는 주소 변환 메커니즘이 포함된 바이너리 재작성 도구를 사용하여 간접호출자의 대상 함수가 매핑된 주소테이블로부터 간접호출자의 대상 함수를 탐색하고, 탐색된 간접호출자의 대상 함수에 대하여 새로운 주소로 변환하여 간접호출자를 실행할 수 있다. 바이너리 재작성부(220)는 새로운 주소로 변환되기 전에, 바이너리 내에서 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드를 추가할 수 있다. 바이너리 재작성부(220)는 바이너리 내에 함수 코드 영역을 나타내는 비트맵을 생성할 수 있다. 바이너리 재작성부(220)는 공격 가젯으로 사용할 수 있는 함수 주소를 찾기 위해 바이너리의 데이터 영역과 코드 영역을 대상으로 가젯 탐색을 진행할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (15)

  1. 방어 시스템에 의해 수행되는 데이터 재사용 공격에 대한 방어 방법에 있어서,
    바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별하는 단계; 및
    상기 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성하는 단계
    를 포함하고,
    상기 재작성하는 단계는,
    상기 식별된 바이너리 정보를 이용하여 제어흐름 무결성(Control Flow Integrity; CFI) 기법을 적용한 테이블 기반 바이너리를 재작성하고, 주소 변환 메커니즘이 포함된 바이너리 재작성 도구를 사용하여 간접호출자의 대상 함수가 매핑된 주소테이블로부터 간접호출자의 대상 함수를 탐색하고, 상기 탐색된 간접호출자의 대상 함수에 대하여 새로운 주소로 변환하여 간접호출자를 실행하고, 상기 새로운 주소로 변환되기 전에, 바이너리 내에서 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드를 추가하고, 상기 바이너리 내에 함수 코드 영역을 나타내는 비트맵을 생성하는 단계
    를 포함하는 데이터 재사용 공격에 대한 방어 방법.
  2. 제1항에 있어서,
    상기 식별하는 단계는,
    상기 바이너리 내에서 정적 분석을 통해 간접호출자의 위치 및 간접호출자의 인자 개수를 포함하는 간접호출자 정보와, 상기 간접호출자에서 호출 가능한 함수의 목록, 상기 간접호출자에서 호출 가능한 함수 파라미터의 개수를 포함하는 함수 파라미터를 식별하는 단계
    를 포함하는 데이터 재사용 공격에 대한 방어 방법.
  3. 제2항에 있어서,
    상기 식별하는 단계는,
    상기 간접호출자에서 참조하는 오프셋 정보와 가상 함수 테이블에 존재하는 오프셋이 일치하는지 여부를 확인하는 단계를 포함하고,
    상기 가상 함수 테이블은, this 포인터, 타입(Runtime Type Identification), 가상 함수 목록들 순으로 구성된 것을 특징으로 하는 데이터 재사용 공격에 대한 방어 방법.
  4. 삭제
  5. 삭제
  6. 삭제
  7. 제1항에 있어서,
    상기 생성된 비트맵은, 간접호출자에서 호출 가능한 함수의 목록의 확인 가능하도록 바이너리의 새로운 데이터 영역에 위치되는 것을 특징으로 하는 데이터 재사용 공격에 대한 방어 방법.
  8. 제1항에 있어서,
    상기 재작성하는 단계는,
    공격 가젯으로 사용할 수 있는 함수 주소를 찾기 위해 바이너리의 데이터 영역과 코드 영역을 대상으로 가젯 탐색을 진행하는 단계
    를 포함하는 데이터 재사용 공격에 대한 방어 방법.
  9. 제1항 내지 제3항, 제7항 내지 제8항 중 어느 한 항의 데이터 재사용 공격에 대한 방어 방법을 상기 방어 시스템에 실행시키기 위해 컴퓨터 판독가능한 기록 매체에 저장되는 컴퓨터 프로그램.
  10. 방어 시스템에 있어서,
    바이너리 내에서 정적 분석을 통해 바이너리 정보를 식별하는 정적 분석부; 및
    상기 식별된 바이너리 정보를 이용하여 데이터 재사용 공격을 방어하기 위한 테이블 기반 바이너리를 재작성하는 바이너리 재작성부
    를 포함하고,
    상기 바이너리 재작성부는,
    상기 식별된 바이너리 정보를 이용하여 제어흐름 무결성(Control Flow Integrity; CFI) 기법을 적용한 테이블 기반 바이너리를 재작성하고, 주소 변환 메커니즘이 포함된 바이너리 재작성 도구를 사용하여 간접호출자의 대상 함수가 매핑된 주소테이블로부터 간접호출자의 대상 함수를 탐색하고, 상기 탐색된 간접호출자의 대상 함수에 대하여 새로운 주소로 변환하여 간접호출자를 실행하고, 상기 새로운 주소로 변환되기 전에, 바이너리 내에서 정적 분석을 통해 식별된 바이너리 정보를 이용하여 검사하는 계측 코드를 추가하고, 상기 바이너리 내에 함수 코드 영역을 나타내는 비트맵을 생성하는
    방어 시스템.
  11. 제10항에 있어서,
    상기 정적 분석부는,
    상기 바이너리 내에서 정적 분석을 통해 간접호출자의 위치 및 간접호출자의 인자 개수를 포함하는 간접호출자 정보와, 상기 간접호출자에서 호출 가능한 함수의 목록, 상기 간접호출자에서 호출 가능한 함수 파라미터의 개수를 포함하는 함수 파라미터를 식별하고, 상기 간접호출자에서 참조하는 오프셋 정보와 가상 함수 테이블에 존재하는 오프셋이 일치하는지 여부를 확인하는 것을 포함하고,
    상기 가상 함수 테이블은, this 포인터, 타입(Runtime Type Identification), 가상 함수 목록들 순으로 구성된 것을 특징으로 하는 방어 시스템.
  12. 삭제
  13. 삭제
  14. 삭제
  15. 제10항에 있어서,
    상기 생성된 비트맵은, 간접호출자에서 호출 가능한 함수의 목록의 확인 가능하도록 바이너리의 새로운 데이터 영역에 위치되는 것을 특징으로 하는 방어 시스템.
KR1020210153318A 2021-11-09 2021-11-09 데이터 재사용 공격에 대한 방어 방법 및 시스템 KR102544801B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020210153318A KR102544801B1 (ko) 2021-11-09 2021-11-09 데이터 재사용 공격에 대한 방어 방법 및 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210153318A KR102544801B1 (ko) 2021-11-09 2021-11-09 데이터 재사용 공격에 대한 방어 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20230067329A KR20230067329A (ko) 2023-05-16
KR102544801B1 true KR102544801B1 (ko) 2023-06-20

Family

ID=86545955

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210153318A KR102544801B1 (ko) 2021-11-09 2021-11-09 데이터 재사용 공격에 대한 방어 방법 및 시스템

Country Status (1)

Country Link
KR (1) KR102544801B1 (ko)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101851330B1 (ko) * 2016-10-11 2018-04-23 서울대학교산학협력단 코드 재사용 공격 탐지 장치 및 그 방법
KR20200069111A (ko) * 2018-12-06 2020-06-16 서울대학교산학협력단 가상 머신 커널의 수행 흐름 무결성 검증 방법 및 그 장치
KR102315532B1 (ko) * 2019-11-15 2021-10-20 광운대학교 산학협력단 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Aravind Prakash et al., "vfGuard: Strict Protection for Virtual Function Calls in COTS C++ Binaries"(2015.)*
Victor van der Veen et al., "A Tough Call: Mitigating Advanced Code-Reuse Attacks at the Binary Level"(2016.)*

Also Published As

Publication number Publication date
KR20230067329A (ko) 2023-05-16

Similar Documents

Publication Publication Date Title
US10223528B2 (en) Technologies for deterministic code flow integrity protection
US9824214B2 (en) High performance software vulnerabilities detection system and methods
US11119798B2 (en) Applying control flow integrity verification in intermediate code files
Linn et al. Protecting Against Unexpected System Calls.
US20170161498A1 (en) Systems and methods for detection of malicious code in runtime generated code
CN109271789B (zh) 恶意进程检测方法、装置、电子设备及存储介质
US11231948B2 (en) Applying security mitigation measures for stack corruption exploitation in intermediate code files
US20170277890A1 (en) Method for Testing computer program product
US10108798B1 (en) Methods and systems for defending against cyber-attacks
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
US11176060B2 (en) Dynamic memory protection
CN115659333A (zh) 一种基于二进制插桩的沙箱、内存隔离方法及存储介质
KR101837337B1 (ko) 네이티브코드에서 기본 블록들 간의 모든 상대주소 점프를 간접 점프로 변환하여 분석도구의 cfg 생성을 방해하는 방법 및 장치
Chen et al. Efficient detection of the return-oriented programming malicious code
KR102544801B1 (ko) 데이터 재사용 공격에 대한 방어 방법 및 시스템
Stepan Defeating polymorphism: beyond emulation
Zhang et al. Cape: compiler-aided program transformation for htm-based cache side-channel defense
US11361070B1 (en) Protecting devices from remote code execution attacks
KR101052735B1 (ko) 메모리 조작유무를 감지하는 방법 및 이를 이용한 장치
Wang et al. A survey of return-oriented programming attack, defense and its benign use
Elwan Automatic generation of control, flow hijacking exploits for software vulnerabilities
Mantu et al. Control Flow Integrity Based on Controlled Channel
WO2022044021A1 (en) Exploit prevention based on generation of random chaotic execution context
Giunta et al. A redundancy-based attack detection technique for java card bytecode
EP4396702A1 (en) Exploit prevention based on generation of random chaotic execution context

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant