KR20210059212A - 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 - Google Patents
바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 Download PDFInfo
- Publication number
- KR20210059212A KR20210059212A KR1020190146371A KR20190146371A KR20210059212A KR 20210059212 A KR20210059212 A KR 20210059212A KR 1020190146371 A KR1020190146371 A KR 1020190146371A KR 20190146371 A KR20190146371 A KR 20190146371A KR 20210059212 A KR20210059212 A KR 20210059212A
- Authority
- KR
- South Korea
- Prior art keywords
- random number
- code
- bypass
- binary
- instructions
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/556—Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0879—Burst mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/58—Random or pseudo-random number generators
- G06F7/588—Random number generators, i.e. based on natural stochastic processes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/72—Indexing scheme relating to groups G06F7/72 - G06F7/729
- G06F2207/7219—Countermeasures against side channel or fault attacks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Virology (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Storage Device Security (AREA)
- Stored Programmes (AREA)
Abstract
본 발명에 따른 메모리 공유 기반 부채널 공격 방어 방법은, 원본 프로그램의 바이너리 코드를 획득하는 단계; 상기 바이너리 코드를 디스어셈블하는 단계; 디스어셈블된 코드에서 오프셋을 찾는 단계; 찾은 오프셋 위치에 우회 명령 및 가변 길이의 난수를 포함하는 우회 난수 코드를 주입하는 단계; 및 상기 우회 난수 코드의 주입에 의하여 생성된 재작성 프로그램을 출력하는 단계를 포함하는 것을 특징으로 한다. 따라서, 본 발명에 따르면, 메모리 공유 기반 부채널 공격을 낮은 오버헤드로도 방어할 수 있으며, KASLR, ASLR 등의 기존 메모리 보호 기법의 엔트로피 부족 문제를 해소할 수 있다.
Description
본 발명은 부채널 공격 방어 방법에 관한 것으로 보다 상세하게는 바이너리 코드 중에 난수를 주입하는 바이너리 재작성을 통하여 메모리 공유 기반 부채널 공격을 방어하는 방법에 관한 것이다. 본 연구는 과학기술정보통신부 및 정보통신기술진흥센터의 SW중심대학지원사업의 연구결과로 수행되었다(2017-0-00096).
32-bit 컴퓨터가 보급된 이후 30년 동안, BOF(Buffer Overflow), ROP(Return Oriented Programming) 등의 취약점 공격이나 또는 그 변종 취약점 공격을 방어하기 위하여 KASLR(Kernel Address Space Layout Randomization), ASLR, DEP(Data Execution Prevention)와 같은 다양한 메모리 보호 기법이 생겨났다. 그러나, 컴퓨터의 지속적인 성능 향상과 함께 방어 기법인 KASLR, ASLR 등은 엔트로피(Entropy) 부족 문제가 발생되고 있으며, 최근 부채널 공격 문제까지 대두되면서 새로운 방어방법이 요구되고 있다.
특히, 메모리 공유 기반 부채널 공격들 중 대표적인 것은, FLUSH+RELOAD 공격이다. 예컨대, IaaS(Infrastructure as a Service)과 같은 클라우드 환경에서 서비스 제공자는 자원의 효율성을 위해 하이퍼바이저의 메모리 중복 제거 기능을 활성화 시킨다. 메모리 중복제거를 통해 공격자와 희생자의 동일한 페이지들이 공유되고, 공격자는 희생자가 가지고 있을 것이라고 예상하는 페이지를 mmap() 함수를 통해 메모리에 적재하여 메모리 공유를 유도할 수 있다. FLUSH+RELOAD는 이런 메모리 공유를 기반으로 하여 캐시 라인을 공유해 특정 활동을 확인할 수 있는 캐시 부채널 공격이다.
이러한 FLUSH+RELOAD 등의 메모리 공유 기반 부채널 공격을 방어하는 방법 중 하나는 메모리 중복 제거 기능을 사용하지 않는 것이다. 이 경우에는 메모리 공유가 발생하지 않아서 취약점 공격 문제는 해결할 수 있으나, 오버헤드가 현저하게 증가되므로 방어 방법으로 부적합한 면이 있었다.
또다른 종래 기술로는 정적 바이너리 재작성 기술이 있다. 예컨대, 정적 바이너리 재작성은 소프트웨어 보안성을 증가시키기 위해 ROP, BOF등의 공격 대상인 가젯(gadget)을 변형시키는 방법이다. 정적 바이너리 재작성 기술은 일반적으로 디스어셈블 과정을 거쳐서 특정 명령을 동일한 길이의 트램펄린(Trampoline) 명령으로 대치하여 인스트루먼테이션(instrumentation) 코드로 제어흐름을 변경하거나 계측 명령을 직접 삽입하는 방식을 사용한다. 따라서, 때문에 정적 바이너리 재작성 기술은 고정된 길이의 명령집합을 사용하는 체계에서 쉽게 사용될 수 있다. 그러나 대다수의 컴퓨터 시스템에서 사용하고 있는 Intel x86, x64 혹은 AMD 32-bit, 64-bit과 같은 가변길이의 명령집합을 사용하는 컴퓨터에서는 트램펄린 명령을 넣기가 까다롭다. 그 원인으로는 대치하고자 하는 원본명령이 가변길이인 경우 한 명령 단위의 길이와 값의 용도가 문맥에 따라 서로 달라 본래 동작의 손실 없이 대치하기 어려우며, 트램펄린 명령이 사용가능한 메모리 주소와 레지스터 등을 코드분석만으로 추측해야하기 때문에 바이너리의 명령들과 제어흐름이 다양해지고 복잡해질수록 그 정확성을 보장하기 어렵다. 또한, 이러한 이유에서 서버의 가상화 환경의 부채널 공격에 방어하는 기법으로 사용되는 예는 아직 없었다.
이러한 메모리 공유 기반 부채널 공격은 최근 몇 년에 대두된 공격이고 방어책에 대한 연구가 시작된지 얼마되지 않았기 때문에 특정 프로그램에 대해 선택적으로 메모리 공유 기반 부채널 공격을 방어할 수 있는 방어책이 절실하게 요구되고 있는 실정이다.
본 발명이 해결하고자 하는 과제는 우회 난수 코드(JMP+RAND) 주입 기법을 통하여 메모리 공유 기반 부채널 공격을 낮은 오버헤드로도 방어할 수 있는 메모리 공유 기반 부채널 공격 방어 방법을 제공하는 것이다.
또한, 본 발명이 해결하고자 하는 또 다른 과제는 기존의 정적 바이너리 코드 재작성 기법에서는 트램펄린 명령을 생성하는 것 자체가 매우 어려워서 바이너리 코드 재작성 자체가 어려웠으나, 용이한 방법으로 바이너리 코드 재작성을 제공할 수 있는 메모리 공유 기반 부채널 공격 방어 방법을 제공하는 것이다.
또한, 본 발명이 해결하고자 하는 또 다른 과제는 기존의 KASLR(Kernel Address Space Layout Randomization), ASLR, DEP(Data Execution Prevention)와 같은 다양한 메모리 보호 기법은 컴퓨터의 지속적인 성능 향상과 함께 엔트로피(Entropy) 부족 문제가 발생되고 있으나, 본 발명에 따르면, 엔트로피 부족 문제를 해소한 메모리 공유 기반 부채널 공격 방어 방법을 제공하는 것이다.
단, 본 발명의 과제들은 이상에서 언급한 과제들로 제한되지 않으며, 언급되지 않은 또 다른 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
따라서, 상술한 문제를 해결하기 위하여, 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법은 원본 프로그램의 바이너리 코드를 획득하는 단계; 상기 바이너리 코드를 디스어셈블하는 단계; 디스어셈블된 코드에서 오프셋을 찾는 단계; 찾은 오프셋 위치에 우회 명령 및 가변 길이의 난수를 포함하는 우회 난수 코드를 주입하는 단계; 및 상기 우회 난수 코드의 주입에 의하여 생성된 재작성 프로그램을 출력하는 단계를 포함할 수 있다.
이 경우, 상기 가변 길이의 난수는 4 byte 내지 8 byte일 수 있다.
또한, 상기 우회 난수 코드를 주입하는 단계는 우회 난수 코드를 모든 페이지 각각에 주입하는 단계를 포함할 수 있다.
또한, 상기 오프셋을 찾는 단계는 상기 디스어셈블된 코드의 임의의 2 개의 명령어 사이를 오프셋으로 지정하는 단계를 포함할 수 있다.
이 때, 메모리 공유 기반 부채널 공격 방어 방법은, 재배치 및 심볼 정보를 회복하는 단계를 더 포함할 수 있다.
또한, 상기 오프셋을 찾는 단계는 상기 우회 명령 및 가변 길이의 난수의 길이와 동일한 길이를 가지는 패치될 명령어들을 찾는 단계를 포함할 수도 있다.
이 때, 메모리 공유 기반 부채널 공격 방어 방법은 패치될 명령어들을 새로운 섹션에 복사하는 단계를 더 포함할 수 있다.
또한, 상기 우회 난수 코드를 주입하는 단계는 상기 패치될 명령어들을 상기 우회 명령 및 가변 길이의 난수로 패치하는 단계를 포함할 수 있다.
또한, 상기 패치될 명령어들은 링킹과 관련없는 명령어만을 포함할 수 있다.
한편, 본 발명의 실시예에 따른 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체는 상술한 방법들을 수행하도록 구현될 수 있다.
한편, 본 발명의 실시예에 따른 바이너리 재작성기는, 획득된 원본 프로그램의 바이너리 코드를 디스어셈블하는 디스어셈블러; 디스어셈블된 코드에서 오프셋을 찾는 오프셋 파인더; 찾은 오프셋 위치에 우회 명령 및 가변 길이의 난수를 포함하는 우회 난수 코드를 주입하며, 상기 우회 난수 코드의 주입에 의하여 생성된 재작성 프로그램을 출력하는 코드 임베딩 모듈을 포함할 수 있다.
이 경우, 상기 가변 길이의 난수는 4 byte 내지 8 byte일 수 있다.
또한, 상기 우회 난수 코드는 모든 페이지 각각에 주입될 수 있다.
또한, 상기 코드 임베딩 모듈은 주입 기반 임베딩 모듈을 포함하고, 상기 오프셋 파인더는 상기 디스어셈블된 코드의 임의의 2 개의 명령어 사이를 오프셋으로 지정할 수 있다.
또한, 상기 주입 기반 임베딩 모듈은 상기 우회 난수 코드를 주입한 후 상기 오프셋 이후의 코드들을 재배치하고 심볼 정보를 회복할 수 있다.
또한, 상기 코드 임베딩 모듈은 패치 기반 임베딩 모듈을 포함하고, 상기 오프셋 파인더는 상기 우회 명령 및 가변 길이의 난수의 길이와 동일한 길이를 가지는 패치될 명령어들을 찾을 수 있다.
이 때, 상기 패치 기반 임베딩 모듈은 상기 패치될 명령어들을 새로운 섹션에 복사할 수 있다.
또한, 상기 상기 패치 기반 임베딩 모듈은 상기 패치될 명령어들을 상기 우회 명령 및 가변 길이의 난수로 패치할 수 있다.
또한, 상기 패치될 명령어들은 링킹과 관련없는 명령어만을 포함할 수 있다.
따라서, 본 발명에 따르면, 우회 난수 코드(JMP+RAND) 주입 기법을 통하여 메모리 공유 기반 부채널 공격을 낮은 오버헤드로도 방어할 수 있는 메모리 공유 기반 부채널 공격 방어 방법이 제공된다.
또한, 기존의 정적 바이너리 코드 재작성 기법에서는 트램펄린 명령을 생성하는 것 자체가 매우 어려워서 바이너리 코드 재작성 자체가 어려웠으나, 본 발명은 용이한 방법으로 바이너리 코드 재작성을 제공할 수 있는 메모리 공유 기반 부채널 공격 방어 방법이 제공된다.
또한, 기존의 KASLR(Kernel Address Space Layout Randomization), ASLR, DEP(Data Execution Prevention)와 같은 다양한 메모리 보호 기법은 컴퓨터의 지속적인 성능 향상과 함께 엔트로피(Entropy) 부족 문제가 발생되고 있으나, 본 발명에 따르면, 엔트로피 부족 문제를 해소한 메모리 공유 기반 부채널 공격 방어 방법이 제공된다.
도 1은 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법이 수행되는 시스템을 설명하기 위한 블록도이다.
도 2는 실시예에 따른 본 발명의 실시예에 따른 부채널 공격 방어 모듈의 구성을 나타낸 블록도이다.
도 3은 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법의 각 단계를 설명한 흐름도이다.
도 4는 본 발명의 실시예에 따른 주입 기반 임베딩 모듈에 의하여 변환되는 원본 프로그램 및 재작성 프로그램의 어셈블리 예제 코드를 설명하기 위한 도면이다.
도 5는 본 발명의 실시예에 따른 패치 기반 임베딩 모듈에 의하여 변환되는 원본 프로그램 및 재작성 프로그램의 어셈블리 예제 코드를 설명하기 위한 도면이다.
도 6은 본 발명의 실시예에 따른 패치 기반 임베딩 모듈에 의한 우회 난수 주입 방법을 설명하기 위한 흐름도이다.
도 7은 기존의 보호기법에 의하여 생성된 페이지들과 본 발명에 따른 보호 기법에 의하여 생성된 페이지들을 비교 설명하기 위한 도면이다.
도 2는 실시예에 따른 본 발명의 실시예에 따른 부채널 공격 방어 모듈의 구성을 나타낸 블록도이다.
도 3은 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법의 각 단계를 설명한 흐름도이다.
도 4는 본 발명의 실시예에 따른 주입 기반 임베딩 모듈에 의하여 변환되는 원본 프로그램 및 재작성 프로그램의 어셈블리 예제 코드를 설명하기 위한 도면이다.
도 5는 본 발명의 실시예에 따른 패치 기반 임베딩 모듈에 의하여 변환되는 원본 프로그램 및 재작성 프로그램의 어셈블리 예제 코드를 설명하기 위한 도면이다.
도 6은 본 발명의 실시예에 따른 패치 기반 임베딩 모듈에 의한 우회 난수 주입 방법을 설명하기 위한 흐름도이다.
도 7은 기존의 보호기법에 의하여 생성된 페이지들과 본 발명에 따른 보호 기법에 의하여 생성된 페이지들을 비교 설명하기 위한 도면이다.
본 발명의 이점, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 것이며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다.
또한, 본 발명의 실시예를 설명하기 위한 도면에 개시된 형상, 크기, 비율, 각도, 개수 등은 예시적인 것이므로 본 발명이 도시된 사항에 한정되는 것은 아니다. 또한, 본 발명을 설명함에 있어서, 관련된 공지 기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명은 생략한다. 본 명세서 상에서 언급된 '포함한다', '갖는다', '이루어진다' 등이 사용되는 경우, '~만'이 사용되지 않는 이상 다른 부분이 추가될 수 있다. 구성요소를 단수로 표현한 경우에 특별히 명시적인 기재 사항이 없는 한 복수를 포함하는 경우를 포함한다.
또한, 구성요소를 해석함에 있어서, 별도의 명시적 기재가 없더라도 오차 범위를 포함하는 것으로 해석한다.
본 발명의 여러 실시예들의 각각 특징들이 부분적으로 또는 전체적으로 서로 결합 또는 조합 가능하며, 당업자가 충분히 이해할 수 있듯이 기술적으로 다양한 연동 및 구동이 가능하며, 각 실시예들이 서로에 대하여 독립적으로 실시 가능할 수도 있고 연관 관계로 함께 실시 가능할 수도 있다.
이하에서는 도 1을 참조하여 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법이 수행되는 시스템(100, 서버) 환경에 대하여 상세하게 설명한다.
도 1에 따르면, 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법이 수행되는 시스템(100)은 가상화 기능을 사용하는 개인용 PC 또는 클라우드 서버로서, 공유 자원(110), 하이퍼바이저(120) 및 할당 자원(130)을 포함할 수 있다. 이 경우, 공유 자원(110)은 서버의 프로세서(111), 공유 메모리(113) 및 본 발명의 특징적인 모듈인 바이너리 재작성기(200)를 포함할 수 있다. 바이너리 재작성기(200)는 서버 상에서 실행될 수 있는 소프트웨어 프로그램, 소프트웨어 모듈 또는 소프트웨어/하드웨어 모듈 조합일 수 있다.
할당 자원(130)은 복수의 터미널(140) 각각에 할당되는 자원이며, 예컨대, 복수의 터미널(140) 각각에서 볼 수 있는 운영체제(Operating System) 및 복수의 터미널(140) 각각에 연결된 인터페이스일 수 있다.
복수의 터미널(140)은 할당 자원(130) 각각에 연결되며, 사용자가 복수의 터미널(140)을 통하여 시스템(100)에서 실행되는 예컨대, 클라우드 가상화 서비스를 제공받을 수 있다.
이 경우, 하이퍼바이저(120)는 복수의 터미널(140)로부터 각 할당 자원(130)을 통하여 입력되는 요청들에 대하여 공유 자원(110)을 통하여 실행할지 또는 각 할당 자원(130)을 통하여 실행할지 관리를 수행할 수 있다. 이 경우, 하이퍼바이저(120)는 자원 할당의 효율성을 극대화 시키기 위하여, 메모리 공유 기능(또는 메모리 중복 제거)을 수행할 수 있다. 앞서 설명한 바와 같이, 하이퍼바이저(120)는 페이지 단위로 메모리를 스캔하면서 동일한 페이지가 있으면 병합하여 하나의 공유 페이지로 만든다.
하이퍼바이저(120)의 메모리 공유는 프로세스 간에 메모리를 공유하는 기법이다. 메모리 공유를 통해 프로세스간 통신도 가능하고 중복된 메모리에 대한 자원 낭비도 줄 일 수 있다. 메모리 공유 방법에는 컨텐츠 인지 공유(Content-aware Sharing) 및 컨텐츠 기반 공유(Content-based Sharing)가 있다. 컨텐츠 인지 공유는 프로세스들이 여러 기능을 수행할 때 공유 라이브러리처럼 같은 내용을 갖는 페이지를 공유하는 방법이며 운영체제에 의해 수행된다.
컨텐츠 기반 공유는 메모리 중복제거(Memory Deduplication)라고 불리며 하이퍼바이저에 의해 수행된다. 하이퍼바이저가 페이지 단위로 메모리를 스캔하면서 동일한 페이지가 있으면 병합하여 하나의 공유 페이지로 만든다. 공유 페이지에 아무나 수정할 수 있으면 보안 문제가 생길 수 있기 때문에 병합된 페이지는 읽기 전용(Read-only) 권한만을 가진다. 따라서 어떤 프로세스가 공유 페이지에 쓰기 접근(Write-access) 시 페이지 폴트(Page-fault)와 함께 COW(Copy-On-Write) 메커니즘이 적용된다. 단, 본 명세서에서는 설명의 간략화를 위하여 하이퍼바이저의 컨텐츠 기반 공유의 부채널 공격 방어를 중심으로 설명하지만, 본 발명은 이에 한정되지 않으며 컨텐츠 인지 공유의 경우에도 적용될 수 있다는 점을 밝혀 둔다.
한편, 복수의 터미널(140) 중에는 특정 터미널을 공격하려는 공격자 터미널(140-1)과 그 공격자 터미널에 의하여 공격을 받는 희생자 터미널(140-2)이 있을 수 있다. 이 때, 하이퍼바이저(120)는 메모리 중복 제거를 통해 공격자 터미널(140-1)과 희생자 터미널(140-2)의 동일한 페이지들을 공유시키게 된다.
이 경우, 공격자 터미널(140-1)은 희생자가 가지고 있을 것이라고 예상하는 페이지를 mmap() 함수를 통해 메모리에 적재하여 메모리 공유를 유도할 수 있다. FLUSH+RELOAD는 이러한 메모리 공유를 기반으로 하여 캐시 라인을 공유해 특정 활동을 확인할 수 있는 대표적인 캐시 부채널 공격이다. Intel 아키텍쳐는 대부분 코어(Core)마다 L1, L2 캐시를 독립적으로 가지고 있고 L3캐시를 공유하고 있다. 따라서, 공격자 터미널(140-1)은 캐시의 inclusive 정책과 캐시라인을 비우는 clflush 명령어를 이용해 메모리 공유된 페이지를 사용하는 희생자 터미널(140-2)의 캐시 라인 사용을 확인할 수 있다. 이 때, FLUSH+RELOAD 공격은 3가지 단계로 이루어진다. FLUSH: 공격자 터미널(140-1)은 clflush 명령을 통해 관찰할 L3 캐시 라인을 비운다. 캐시의 inclusive 정책에 의해 해당 캐시 라인과 관련된 L1, L2의 캐시라인도 비워진다. WAIT: 희생자 터미널(140-2)이 해당 캐시 라인에 접근할 때까지 기다린다. RELOAD: 공격자 터미널(140-1)은 해당 캐시라인에 다시 접근해서 메모리 로드 속도가 빠르면 희생자 터미널(140-2)이 접근한 것이고 메모리 로드 속도가 느리면 희생자 터미널(140-2)이 접근하지 않았음을 알 수 있다.
이러한 환경에서, 본 발명의 실시예에 따른 바이너리 재작성기(200)는 우회 난수 주입 방식의 바이너리 재작성 기법을 통해 페이지 단위(4KB)로 4~8byte 사이의 난수를 주입하여 기존의 메모리 보호기법(ASLR, KASLR)의 엔트로피 부족문제를 보완하고 메모리 공유 기반 부채널 공격 방어에 대비할 수 있다. 또한, 기존의 정적 바이너리 재작성 기법은 특정 프로그램에 맞는 트램펄린 명령어를 삽입하는 것이 매우 어려웠기 때문에 활용되기가 어려웠는데, 본 발명에 따른 우회 난수 주입 방식의 바이너리 재작성 기법은 단순하게 우회 명령어 및 난수로 구성된 코드를 활용함으로써 정적 바이너리 재작성 기법의 어려움 또한 극복하였다.
이하에서는 도 2 및 도 3을 참조하여 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법에 대하여 상세히 설명한다. 도 2는 실시예에 따른 본 발명의 실시예에 따른 부채널 공격 방어 모듈의 구성을 나타낸 블록도이다. 도 3은 본 발명의 실시예에 따른 메모리 공유 기반 부채널 공격 방어 방법의 각 단계를 설명한 흐름도이다.
도 2를 참조하면, 본 발명의 실시예에 따른 바이너리 재작성기(200)는 디스어셈블러(210), 오프셋 파인더(220) 및 코드 임베딩 모듈(230)을 포함하며, 메모리 공유 기반 부채널 공격에 대한 방어를 원하는 원본 프로그램(100)을 파라미터로 하여 실행된다. 이 때, 코드를 임베딩한 결과는 페이지(240) 단위(4KB)로 저장되고 최종적으로 재작성 프로그램 실행 파일(350)을 출력하게 된다. 이 때, 프로그램에 바이너리 난수를 주입하는 과정은 도 3과 같다.
먼저, 바이너리 재작성기(200)는 메모리 공유 기반 부채널 공격에 대한 방어를 원하는 원본 프로그램(100)을 파라미터로 하여 실행되며, 이 때, 원본 프로그램의 바이너리 코드를 입력받아 획득하게 된다(단계 S300). 이 때, 난수를 바이너리의 아무 위치에나 주입하면 명령어가 망가지거나 특정 정보가 훼손될 수 있기 때문에 원본 프로그램(300)의 의미(Semantic)를 유지하면서 난수를 주입하기 위해 명령어 레벨에서 의미 확인 후 난수를 주입할 필요가 있다.
따라서, 획득한 바이너리 코드를 디스어셈블러(210)을 통하여 프로그램을 디스어셈블한다(단계 S310). 예를 들어, 디스어셈블러(210)는 linux에서 지원하는 objdump(102) 도구 등이 될 수 있다. 디스어셈블된 코드는 예컨대, 저급 프로그래밍 언어인 어셈블리어 코드 일 수 있다.
한편, 바이너리 재작성기(200)의 오프셋 파인더(220)는 디스어셈블된 원본 프로그램(300)에서 명령어 단위로 난수 주입 가능한 오프셋을 찾는다(단계 S320).
단, 코드 임베딩 모듈(230)에서, 주입 기반(Insert-based)으로 난수를 임베딩하는지, 또는 패치 기반(Patch-based)으로 난수를 임베딩하는지에 따라 난수 주입 가능한 오프셋이 달라지게 된다. 도 2를 참조하면, 코드 임베딩 모듈(230)은 주입 기반 임베딩 모듈(235) 및 패치 기반 임베딩 모듈(237)을 포함할 수 있다. 이 경우, 코드 임베딩 모듈(230)은 사용자의 선택 또는 설정에 따라 임베딩 방식을 정하게 되고, 오프셋 파인더(220)는 정해진 임베딩 방식에 따라 오프셋을 찾게 된다.
한편, 난수 주입될 오프셋을 찾으면 정해진 임베딩 방식에 따라 바이너리 레벨에서 적어도 일부 페이지(240)에 우회 난수 주입 방식으로 우회명령 및 난수를 주입한다(단계 S330). 본 명세서에서 우회 난수 주입 방식(JMP+RAND 방식)은 프로그램 실행시 난수 부분을 우회할 수 있는 코드 예컨대, JMP 명령어 등의 우회명령과 임의의 난수 부분 부분을 포함한 우회 난수 코드를 주입하는 방식을 의미한다. 이 경우, 하이퍼바이저(120)가 페이지 단위로 메모리 공유 여부를 결정하기 때문에메모리 공유 기반 부채널 공격을 방어하기 위해서 모든 페이지 단위(4KB)마다 난수를 주입하는 것이 바람직하다.
그리고, 주입 기반 임베딩 모듈(235)의 경우에는 우회 난수 코드 주입 후의 모든 명령어의 오프셋이 변경되므로 명령 재배치 및 심볼 정보 회복이 필요하다(단계 S340). 단, 패치 기반 임베딩 모듈(237)은 명령 재배치 및 심볼 정보 회복이 필요 없으므로 명령 재배치 및 심볼 정보 회복 단계(S340)는 선택적인 단계이다.
마지막으로, 바이너리 재작성기(200)는 재작성된 프로그램(350)을 출력하여 저장하게 되고, 이후에 해당 원본 프로그램(300)의 실행이 요청되는 경우에 재작성된 프로그램(350)이 실행되게 된다.
부채널 공격시에 공격자 터미널(140-1)은 희생자 터미널(140-2)이 가지고 있을 것이라고 예상하는 페이지를 mmap() 함수를 통해 메모리에 적재하여 메모리 공유를 유도할 수 있고, 이러한 메모리 공유를 기반으로 하여 캐시 라인을 공유해 희생자 터미널(140-2)의 특정 활동을 감시할 수 있다. 또한, 특정 활동의 감시를 통하여 인증키, 주요 개인정보 등 희생자 터미널(140-2)의 민감한 정보들을 공격자 터미널(140-1)이 탈취할 수 있었다.
그러나, 본 발명에 따른 우회 난수 코드를 주입하는 바이너리 재작성기(200)는 공격자 터미널(140-1)가 희생자 터미널(140-2)의 페이지를 예측하는 것을 사실상 불가능하게 만들어서 보안성을 현저하게 증가시킬 수 있다.
이하에서는 도 4 내지 도 6을 참조하여 우회 난수 주입 방식을 보다 상세하게 설명한다. 도 4는 본 발명의 실시예에 따른 주입 기반 임베딩 모듈(235)에 의하여 변환되는 원본 프로그램(300) 및 재작성 프로그램(350)의 어셈블리 예제 코드를 설명하기 위한 도면이다. 도 5는 본 발명의 실시예에 따른 패치 기반 임베딩 모듈(237)에 의하여 변환되는 원본 프로그램(300) 및 재작성 프로그램(350)의 어셈블리 예제 코드를 설명하기 위한 도면이다. 도 6은 본 발명의 실시예에 따른 패치 기반 임베딩 모듈(237)에 의한 우회 난수 주입 방식을 설명하기 위한 흐름도이다.
도 4를 참조하면, 주입 기반 임베딩 모듈(235)의 특성은 명령어와 명령어 사이에 아무 곳이나 우회 난수 코드(310)가 주입될 수 있다는 것이다. 오프셋 파인더(220)는 오프셋 위치로 임의의 2 개의 명령어 사이를 지정할 수 있다. 도 4에서는 0x107 번지를 오프셋 위치로 지정하였으며, 우회 난수 코드(310)를 지정된 오프셋 위치인 0x107 번지에 삽입하였다. 이 경우, 우회 난수 코드(310)는 우회 명령어인 "jmp 0x110" 및 임의로 발생된 임의의 길이의 난수(0x12 0x32 0x44 0x54)를 포함하고 있음을 알 수 있다. 우회 명령어 이후 번지(0x110)에는 기존 코드(315)가 재배치되어 있음을 알 수 있다.
즉, 본 발명의 실시예에 따른 주입 기반 임베딩 모듈(235)은 우회 명령(JMP 명령어) 다음에 난수를 주입하여 프로그램에 의미 없이 난수를 주입할 수 있다. 또한, 우회 난수 코드(310, JMP+RAND) 이후의 모든 명령어의 오프셋이 바뀌기 때문에 기존 코드(315)의 재배치 또는 심볼 정보의 회복이 난수 주입과 함께 수행될 수 있다.
주입 기반 임베딩 모듈(235)은 프로그램을 디스어셈블러(210)를 사용해 .text 섹션의 명령어와 명령어 사이에 우회 난수 코드(jmp+rand)를 주입하는 방식이다. 도 4의 원본 프로그램(300)과 재작성 프로그램(350)을 비교하면 차이를 더 분명하게 알 수 있다. 임의의 2개의 명령어들 사이에 우회 난수 코드(jmp+rand)가 추가되기 때문에 주입된 우회 난수 코드(jmp+rand) 이후로 재배치 및 심볼 정보들의 오프셋이 바뀐다. 따라서 주입 기반의 난수 주입 기법을 사용한다면 반드시 프로그램을 실행하기 전에 재배치와 심볼 정보를 바뀐 오프셋에 맞춰 수정해야 한다. 예컨대, jmp 명령어는 5byte의 길이를 가지며 예컨대, 4byte ~ 8byte 난수가 주입되기 때문에 4KB의 페이지마다 9~13byte의 크기 증가와 한 번의 분기 명령이 추가된다.
한편, 도 5 및 도6을 참조하면 패치 기반 임베딩 모듈(237)은 우회 난수 코드(310)의 바이트 수에 맞는 패치될 명령어를 찾고 패치될 명령어를 새로운 섹션(330)에 복사한 후 패치될 명령어를 우회 난수 코드(310)로 수정한다.
패치 기반 임베딩 모듈(237)이 사용되는 경우에, 먼저, 오프셋 파인더(220)는 우회 명령과 난수의 길이를 고려하여 적어도 하나 이상의 패치될 명령어들을 찾는다(단계 S321). 즉, 발생된 난수의 길이와 우회 명령의 바이트수와 동일한 패치될 명령어들을 찾는다. 이 때, 패치될 명령어들은 링킹과 관련 없는 명령어들이 될 수 있다. 예컨대, 도 5에서, 명령어 call func1()는 함수 호출이 이루어져서 링크 시에 링킹이 필요한 부분이고, mov %ecx, %edx 명령, add $0x3, %edx 명령 등은 단순 레지스터 참조를 통하여 더하거나 이동하는 명령으로 링킹과 관련 없는 명령어 들이므로 패치가능한 패치될 명령어들이 될 수 있다.
또한, 한편, 기존에 도 5의 원본 프로그램(300)에서 0x107 번지에서 0x110 번지 이전까지 있는 명령어들은 새로운 섹션(330)에 복사된다. 즉, 패치될 명령어들이 새로운 섹션(330)에 복사된다(단계 S323). 이 때, 새로운 섹션(330)에 복사된 명령어 뒤에는 다음 실행 코드가 있는 주소(0x110 번지)로 점프하는 복귀 명령어(jmp 0x110)가 추가되어 있다.
마지막으로 우회 난수 코드(310)가 패치될 명령어들을 패치된다. 즉, 패치될 명령어들을 대체하여 우회 난수 코드(310)이 오버라이팅(Overwriting)된다.(단계 S325). 따라서, 패치 기반 임베딩 모듈(237)은 패치될 명령어를 찾을 때 패치될 명령어들의 이후 명령어들의 오프셋이 변하지 않게 명령어 바이트 수에 맞춰 재작성 된다. 따라서 주입 기반 임베딩 모듈(235)과 같이 임의의 명령어 사이에 난수 주입을 할 수는 없지만 재배치 및 심볼 정보 회복이 필요없다는 장점이 있다.
한편, 주입 기반의 난수 주입 방법은 반드시 재배치, 심볼등의 정보를 회복해야 하지만, 이러한 정보 회복과 관련없이 난수를 주입하는 모듈이 패치 기반패치 기반 임베딩 모듈(237)이다. 도 5의 재작성된 프로그램(350)의 .text 섹션(320)과 같이 .text 섹션에서 페이지마다 패치(patch)될 명령어들을 찾는다. 패치될 명령어는 재배치 및 심볼과 같은 정보들과 관련이 없어 링킹과 관련이 없는 정적으로 바이너리가 완성된 명령어가 후보가 된다. 주입될 난수의 크기에 따라 9~13byte의 명령어를 찾아 우회 난수 코드(310, jmp+rand)로 패치 후 선정된 명령어들을 .text 섹션의 맨 마지막 부분이나 새로운 섹션에 복사한 후 마지막에 복귀 명령어(jmp 명령)를 통해 원래의 코드 흐름으로 돌아오는 형태이다. 원본 프로그램(300)과 재작성된 프로그램(350)을 비교하면 패치된 명령어를 제외한 나머지 명령어의 주소 참고가 동일한 것(0x110 이후 부분)을 확인할 수 있다. 본 발명의 실시예의 경우, 페이지마다 2번의 jmp 명령어가 추가되지만 현대의 아키텍쳐에서 jmp 명령어를 통한 오버헤드는 거의 없을 것으로 예상된다.
한편, 주입 기반 임베딩 모듈(235) 및 패치 기반 임베딩 모듈(237)은 주입될 난수의 크기를 예컨대 4~8byte로 가변적으로 생성한다. 이것은 기존의 보호기법, 예컨대 KASLR, ALSR의 단점을 보완한 것으로 이에 대해서는 도 7에서 상세하게 설명한다. 도 7은 기존의 보호기법(700)에 의하여 생성된 페이지들과 본 발명에 따른 보호 기법에 의하여 생성된 페이지(720)들을 비교 설명하기 위한 도면이다.
도 7에서 알 수 있는 바와 같이, 기존의 보호기법(700)은 모든 페이지가 동일한 델타 값(710)에 의해 더해지기 때문에 하나의 페이지에 대한 델타 값(301)만 획득할 수 있다면 모든 페이지의 정보가 노출될 수 있다. 그러나, 본 발명의 우회 난수 코드(310)를 주입하는 우회 난수 코드 주입 방식(720)은 각 페이지마다 주입되는 난수의 크기가 다르기 때문에 특정 페이지를 공격하기 위해 찾아야 하는 델타 값(730)이 늘어난다. 우회 난수 코드 주입 방식(720)에서 보듯이 N번째 페이지의 내용을 공격하기 위해 반드시 1번째 페이지부터 N-1 번째 페이지 각각의 델타(730)값을 찾아야 공격할 수 있다.
즉, 본 발명의 실시예에 따른 바이너리 재작성기(200)는 기존의 메모리 보호 기법인 KASLR, ALSR을 보완함과 동시에 부채널 공격을 막기 위해 프로그램의 .text 섹션에 4KB 페이지 마다 가변적 길이(4~8byte)를 가지는 난수를 주입한다. 각 페이지 마다 주입될 바이트 수는 일정하지 않기 때문에 .text 섹션의 N번째 페이지는 N-1개의 페이지에 대해 의존성이 생긴다.
이하에서는 상술한 바와 같이 구현된 본 발명의 장점에 대해서 상세하게 설명한다. 예컨대, 9bit의 커널 텍스트 KASLR, 19bit의 스택 ASLR과 같은 기존의 메모리 보호 기법은 낮은 엔트로피로 문제가 되고 있다. 낮은 엔트로피는 memory disclosure 공격에 취약하며, 또한, 메모리 공유를 기반으로 하는 부채널 공격에 취약할 수 있다. 그러나, 본 발명에 따르면, 우회 난수 코드(JMP+RAND) 주입 기법을 통해 낮은 오버헤드로 최소 32~64bit의 엔트로피를 간접적으로 증가시킬 수 있고, 메모리 공유를 기반으로 하는 부채널도 방어할 수 있다. 또한 기존의 KASLR, ASLR은 페이지마다의 의존성이 존재하지 않는다. 기존에는 특정 N번째 페이지를 공격자가 중복제거를 통해 공격하고 싶다면 엔트로피에 맞춰 해당 페이지만 준비하면 되었다. 하지만 우회 난수 코드(JMP+RAND) 주입 기법은 주입되는 난수 값을 고정하지 않아 N 번째 페이지를 공격하고 싶으면 도 7의 코드(720)와 같이 N-1개의 의존성이 생긴다. 따라서 실제로 엔트로피는 32~64bit보다 훨씬 클 것으로 예상한다. 특히 가상화 환경에서 메모리 중복 제거 기술과 본 발명을 함께 적용하면, 높은 자원 효율성과 함께 커널과 보안을 필요로 하는 프로그램에서 현저하게 보안성을 증가할 수 있다.
한편, 본 발명에 따른 시스템은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 상기 컴퓨터가 읽을 수 있는 기록매체는 마그네틱 저장매체(예를 들면, 롬, 플로피 디스크, 하드디스크 등) 및 광학적 판독 매체(예를 들면, 시디롬, 디브이디 등)를 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
이상으로 실시예를 들어 본 발명을 더욱 상세하게 설명하였으나, 본 발명은 반드시 이러한 실시예로 국한되는 것은 아니고, 본 발명의 기술사상을 벗어나지 않는 범위 내에서 다양하게 변형실시될 수 있다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.
100: 서버
110: 공유 자원
120: 하이퍼바이저 130: 할당 자원
140: 복수의 터미널 200: 바이너리 재작성기
210: 디스어셈블러 220: 오프셋 파인더
230: 코드 임베딩 모듈 235: 주입 기반 임베딩 모듈
237: 패치 기반 임베딩 모듈 240: 복수의 페이지들
300: 원본 프로그램 350: 재작성 프로그램
310: 우회 난수 코드
120: 하이퍼바이저 130: 할당 자원
140: 복수의 터미널 200: 바이너리 재작성기
210: 디스어셈블러 220: 오프셋 파인더
230: 코드 임베딩 모듈 235: 주입 기반 임베딩 모듈
237: 패치 기반 임베딩 모듈 240: 복수의 페이지들
300: 원본 프로그램 350: 재작성 프로그램
310: 우회 난수 코드
Claims (19)
- 원본 프로그램의 바이너리 코드를 획득하는 단계;
상기 바이너리 코드를 디스어셈블하는 단계;
디스어셈블된 코드에서 오프셋을 찾는 단계;
찾은 오프셋 위치에 우회 명령 및 가변 길이의 난수를 포함하는 우회 난수 코드를 주입하는 단계; 및
상기 우회 난수 코드의 주입에 의하여 생성된 재작성 프로그램을 출력하는 단계를 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 1 항에 있어서,
상기 가변 길이의 난수는 4 byte 내지 8 byte인,
메모리 공유 기반 부채널 공격 방어 방법. - 제 1 항에 있어서,
상기 우회 난수 코드를 주입하는 단계는 우회 난수 코드를 모든 페이지 각각에 주입하는 단계를 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 1 항에 있어서,
상기 오프셋을 찾는 단계는 상기 디스어셈블된 코드의 임의의 2 개의 명령어 사이를 오프셋으로 지정하는 단계를 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 4 항에 있어서,
재배치 및 심볼 정보를 회복하는 단계를 더 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 1 항에 있어서,
상기 오프셋을 찾는 단계는 상기 우회 명령 및 가변 길이의 난수의 길이와 동일한 길이를 가지는 패치될 명령어들을 찾는 단계를 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 6 항에 있어서,
상기 패치될 명령어들을 새로운 섹션에 복사하는 단계를 더 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 7 항에 있어서,
상기 우회 난수 코드를 주입하는 단계는 상기 패치될 명령어들을 상기 우회 명령 및 가변 길이의 난수로 패치하는 단계를 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 6 항에 있어서,
상기 패치될 명령어들은 링킹과 관련없는 명령어만을 포함하는,
메모리 공유 기반 부채널 공격 방어 방법. - 제 1 항 내지 제 9 항 중 어느 한 항에 의한 방법을 수행하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체.
- 획득된 원본 프로그램의 바이너리 코드를 디스어셈블하는 디스어셈블러;
디스어셈블된 코드에서 오프셋을 찾는 오프셋 파인더;
찾은 오프셋 위치에 우회 명령 및 가변 길이의 난수를 포함하는 우회 난수 코드를 주입하며, 상기 우회 난수 코드의 주입에 의하여 생성된 재작성 프로그램을 출력하는 코드 임베딩 모듈을 포함하는,
바이너리 재작성기. - 제 11 항에 있어서,
상기 가변 길이의 난수는 4 byte 내지 8 byte인,
바이너리 재작성기. - 제 11 항에 있어서,
상기 우회 난수 코드는 모든 페이지 각각에 주입되는,
바이너리 재작성기. - 제 11 항에 있어서,
상기 코드 임베딩 모듈은 주입 기반 임베딩 모듈을 포함하고, 상기 오프셋 파인더는 상기 디스어셈블된 코드의 임의의 2 개의 명령어 사이를 오프셋으로 지정하는,
바이너리 재작성기. - 제 14 항에 있어서,
상기 주입 기반 임베딩 모듈은 상기 우회 난수 코드를 주입한 후 상기 오프셋 이후의 코드들을 재배치하고 심볼 정보를 회복하는,
바이너리 재작성기. - 제 11 항에 있어서,
상기 코드 임베딩 모듈은 패치 기반 임베딩 모듈을 포함하고, 상기 오프셋 파인더는 상기 우회 명령 및 가변 길이의 난수의 길이와 동일한 길이를 가지는 패치될 명령어들을 찾는,
바이너리 재작성기. - 제 16 항에 있어서,
상기 패치 기반 임베딩 모듈은 상기 패치될 명령어들을 새로운 섹션에 복사하는,
바이너리 재작성기. - 제 17 항에 있어서,
상기 상기 패치 기반 임베딩 모듈은 상기 패치될 명령어들을 상기 우회 명령 및 가변 길이의 난수로 패치하는,
바이너리 재작성기. - 제 16 항에 있어서,
상기 패치될 명령어들은 링킹과 관련없는 명령어만을 포함하는,
바이너리 재작성기.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190146371A KR102315532B1 (ko) | 2019-11-15 | 2019-11-15 | 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 |
US16/903,465 US20210150028A1 (en) | 2019-11-15 | 2020-06-17 | Method of defending against memory sharing-based side-channel attacks by embedding random value in binaries |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190146371A KR102315532B1 (ko) | 2019-11-15 | 2019-11-15 | 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210059212A true KR20210059212A (ko) | 2021-05-25 |
KR102315532B1 KR102315532B1 (ko) | 2021-10-20 |
Family
ID=75909510
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190146371A KR102315532B1 (ko) | 2019-11-15 | 2019-11-15 | 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20210150028A1 (ko) |
KR (1) | KR102315532B1 (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20230067329A (ko) * | 2021-11-09 | 2023-05-16 | 한국과학기술원 | 데이터 재사용 공격에 대한 방어 방법 및 시스템 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220207138A1 (en) * | 2020-12-26 | 2022-06-30 | Intel Corporation | Hardening store hardware against speculation vulnerabilities |
CN115795486B (zh) * | 2023-02-07 | 2023-04-18 | 山东大学 | 基于二进制重写的故障注入防护方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190050230A1 (en) * | 2018-06-29 | 2019-02-14 | Intel Corporation | Efficient mitigation of side-channel based attacks against speculative execution processing architectures |
-
2019
- 2019-11-15 KR KR1020190146371A patent/KR102315532B1/ko active IP Right Grant
-
2020
- 2020-06-17 US US16/903,465 patent/US20210150028A1/en not_active Abandoned
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190050230A1 (en) * | 2018-06-29 | 2019-02-14 | Intel Corporation | Efficient mitigation of side-channel based attacks against speculative execution processing architectures |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20230067329A (ko) * | 2021-11-09 | 2023-05-16 | 한국과학기술원 | 데이터 재사용 공격에 대한 방어 방법 및 시스템 |
Also Published As
Publication number | Publication date |
---|---|
KR102315532B1 (ko) | 2021-10-20 |
US20210150028A1 (en) | 2021-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102383900B1 (ko) | 타겟 메모리 어드레스에 대응한 메모리 속성 유닛의 영역을 식별하는 영역식별 연산 | |
US11249912B2 (en) | Apparatus and method for storing bounded pointers | |
KR102315532B1 (ko) | 바이너리 난수 주입을 통한 메모리 공유 기반 부채널 공격 방어 방법 | |
CN110119302B (zh) | 虚拟机监视器以及虚拟可信执行环境构建方法 | |
JP7460529B2 (ja) | タグ保護されたメモリ・システムのためのランダム・タグ設定命令 | |
KR102605793B1 (ko) | 자격들의 이용을 관리하는 장치 및 방법 | |
US10114948B2 (en) | Hypervisor-based buffer overflow detection and prevention | |
US9116621B1 (en) | System and method of transfer of control between memory locations | |
KR102533823B1 (ko) | 자격과 관련된 허가들을 해석하는 장치 및 방법 | |
US11061829B2 (en) | Prefetch support with address space randomization | |
Chen et al. | Pointer tagging for memory safety | |
JP2020525934A (ja) | 命令の実行を制御する装置および方法 | |
JP2021512400A (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
CN107463513B (zh) | 在存储位置之间转移控制的***和方法 | |
JP7269942B2 (ja) | 複数ガード・タグ設定命令 | |
JP2021512405A (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
Pappas | Defending against return-oriented programming | |
KR20220156028A (ko) | 메모리 액세서 무효화 | |
JP7369720B2 (ja) | アクションをトリガするための装置及び方法 | |
US11550651B2 (en) | Execution circuits using discardable state | |
WO2022044021A1 (en) | Exploit prevention based on generation of random chaotic execution context | |
EP3252610B1 (en) | System and method of transfer of control between memory locations | |
Yu et al. | A Stealth Security Hardening Method Based on SSD Firmware Function Extension | |
CN117222990A (zh) | 用于使用能力约束对存储器的访问的技术 | |
Saxena et al. | Effective Containment of Shared-Memory Application Extensions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |