KR20170055933A - 정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치 - Google Patents

정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20170055933A
KR20170055933A KR1020160151365A KR20160151365A KR20170055933A KR 20170055933 A KR20170055933 A KR 20170055933A KR 1020160151365 A KR1020160151365 A KR 1020160151365A KR 20160151365 A KR20160151365 A KR 20160151365A KR 20170055933 A KR20170055933 A KR 20170055933A
Authority
KR
South Korea
Prior art keywords
binary
function
instructions
register
identified
Prior art date
Application number
KR1020160151365A
Other languages
English (en)
Other versions
KR102546601B1 (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 KR20170055933A publication Critical patent/KR20170055933A/ko
Application granted granted Critical
Publication of KR102546601B1 publication Critical patent/KR102546601B1/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/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • 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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting 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
    • G06F21/79Protecting 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 in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 장치 및 방법이 제공된다. 상기 방법은 프로세서에 레지스터를 예비하도록 컴파일러를 설정하는 단계와, 상기 설정된 컴파일러를 기반으로 소스 코드를 바이너리로 컴파일하는 단계와, 상기 예비된 레지스터를 사용하여 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계를 포함하며, 상기 예비된 레지스터는 리턴 주소들을 암호화 및 복호화하기 위한 제 1 암호 키를 저장한다. 상기 예비된 레지스터는 리턴 주소들을 암호화 및 복호화하여 제어 흐름 익스플로잇을 방지하는데 사용되는 암호 키를 저장한다.

Description

정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치{METHOD AND APPARATUS FOR PROTECTING KERNEL CONTROL-FLOW INTEGRITY USING STATIC BINARY INSTRUMENTAITON}
본 발명은 제어 흐름 익스플로잇(control flow exploit)들로부터 실행 가능 바이너리를 보호하는 것에 관한 것으로, 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치에 관한 것이다.
현대의 운영 체제에서, 커널(kernel)은 일반적으로 가상 메모리를 커널 공간과 사용자 공간으로 분리시킨다. 이러한 분리는 결함 및 악의적인 동작으로부터 시스템 데이터와 기능을 보호하는 메모리 보호를 제공하기 위한 것이다. 악성 애플리케이션이 커널 공간 내의 명령들을 실행시킬 수 있는 경우에는, 이 악성 애플리케이션이 시스템 보안성을 손상시킬 수 있으며, 이에 따라 전체 시스템이 악성 애플리케이션에 노출되게 된다. 예를 들어, 악성 애플리케이션은 루트킷(rootkit), 바이러스(virus), 랜섬웨어(ransomware), 트로얀(trojan) 등을 설치할 수 있다.
본 발명의 실시예들은 적어도 전술한 문제점들 및/또는 단점들을 해결하며 또한 적어도 후술하는 장점들을 제공하는 것이다. 따라서, 본 발명의 일 실시예는 장치 상태 기반 암호 키를 위한 장치 및 방법을 제공하는 것이다.
본 발명의 일 실시예에 따르면, 바이너리를 컴파일하는 방법이 개시된다. 상기 방법은 프로세서에 레지스터를 예비하도록 컴파일러를 설정하는 단계와, 상기 설정된 컴파일러를 기반으로 소스 코드를 바이너리로 컴파일하는 단계와, 상기 예비된 레지스터를 사용하여 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계를 포함한다.
본 발명의 일 실시예에 따르면, 전자 장치가 개시된다. 상기 전자 장치는 데이터를 저장하도록 구성되는 메모리와 적어도 하나의 하드웨어 레지스터를 가진 프로세서를 포함한다. 상기 프로세서는 프로세서에 레지스터를 예비하도록 하는 컴파일러 설정을 수신하고, 상기 설정된 커파일러를 기반으로 소스 코드를 바이너리로 컴파일하며, 또한 상기 예비된 레지스터를 사용하여 상기 바이너리를 변경함으로써 익스플로잇을 방지하도록 구성되고, 상기 예비된 레지스터는 리턴 주소들을 암호화 및 복호화하기 위한 제 1 암호 키를 저장한다.
본 발명의 일 실시예에 따르면, 프로세서에서 바이너리를 실행하는 방법이 개시된다. 상기 방법은 후속 명령을 수신하는 단계와, 상기 후속 명령이 특정 명령에 대응하는지의 여부를 결정하는 단계와, 상기 후속 명령이 리턴 명령에 대응하는 경우, 암호화된 리턴 주소들 세트 중의 제 1 암호화된 리턴 주소를 제 1 레지스터에 카피하고 또한 제 1 암호 키를 기반으로 제 1 리턴 주소를 복호화하는 단계와, 상기 후속 명령이 트랜지션 포인트에 대응하는 경우, 상기 제 1 암호 키를 기반으로 암호화된 리턴 주소들 세트를 복호화하고 또한 제 2 암호 키를 기반으로 리턴 주소들 세트를 암호화하는 단계와, 상기 후속 명령이 직접 브랜치 명령에 대응하는 경우, 상기 제 1 레지스터에서 제 2 주소를 암호화하고 또한 상기 암호화된 리턴 주소들 세트에 제 2 암호화된 리턴 주소를 추가하는 단계를 포함하며, 상기 제 1 암호 키는 예비된 레지스터에 저장되고, 상기 암호화된 리턴 주소들 세트는 메모리에 저장된다.
본 발명의 다양한 실시예들에 대한 상기 및 다른 실시예들, 특징들, 및 장점들은 첨부된 도면들과 함께 다음의 설명으로부터 더욱 명백해질 것이다.
도 1은 본 발명의 다양한 실시예들에 따른 전자 장치의 블록도이다.
도 2는 본 발명의 다양한 실시예들에 따른 프로그래밍 모듈의 블록도이다.
도 3은 본 발명의 다양한 실시예들에 따른 제어 흐름 익스플로잇을 나타내는 도면이다.
도 4는 본 발명의 다양한 실시예들에 따른 다른 제어 흐름 익스플로잇을 나타내는 도면이다.
도 5는 본 발명의 다양한 실시예들에 따른 보안 제어 흐름을 갖는 바이너리를 생성하는 방법의 흐름도이다.
도 6은 본 발명의 다양한 실시예들에 따른 바이너리를 컴파일하기 위한 컴파일러 옵션들을 설정하는 방법의 흐름도이다.
도 7은 본 발명의 다양한 실시예들에 따른 보안 제어 흐름에 대한 바이너리를 처리하는 방법의 흐름도이다.
도 8은 본 발명의 다양한 실시예들에 따른 보안 제어 흐름을 갖는 바이너리를 실행하는 방법의 흐름도이다.
상기 도면들을 통해, 유사 참조 번호들은 동일한 혹은 유사한 엘리먼트들과, 특징들 및 구조들을 도시하기 위해 사용된다는 것에 유의해야만 한다.
첨부 도면을 참조하는 다음의 상세한 설명은, 청구범위 및 그 등가물에 의해 규정되는 본 발명의 다양한 실시예들의 포괄적인 이해를 돕기 위해 제공된다. 이것은 그 이해를 돕기 위한 다양한 특정 세부사항을 포함하고 있지만, 이들은 단지 예시적인 것으로 간주되어야 한다. 따라서, 당업자는 본 발명의 범위 및 사상으로부터 일탈하지 않는 범위 내에서는 여기에 기재된 실시예들에 대한 다양한 변형 및 수정이 이루어질 수 있음을 인식할 것이다. 또한, 잘 알려진 기능들 및 구성들에 대한 설명은 명료성 및 간결성을 위해 생략한다.
다음의 설명 및 청구범위에서 사용된 용어들 및 단어들은 서지적 의미들에 국한되지 않으며, 단지 본 발명의 명확하고 일관성있는 이해를 가능하게 하기 위해 발명자에 의해 사용된다. 따라서, 본 발명의 다양한 실시예들에 대한 다음의 설명은 단지 예시의 목적으로만 제공되는 것이며, 청구범위 및 그 등가물에 의해 규정되는 본 발명을 제한할 목적이 아니다.
또한, 본 명세서에서 명백하게 달리 지시하지 않는다면, "일" 및 "그"와 같은 단수 표현들은 복수 표현들을 포함한다는 것이 이해될 수 있을 것이다. 따라서, 예를 들면, "일 컴포넌트 표면"은 하나 이상의 그러한 컴포넌트 표면들을 포함한다.
용어 "실질적으로"에 의해, 그것은 인용된 특성, 변수 또는 값이 정확하게 달성될 필요가 없다는 것을 의미하지만, 예를 들면, 허용 오차, 측정 에러, 측정 정확성 한계들 및 당업자에게 알려진 그 밖의 인자를 포함하는 편차 또는 변형은, 그 특성이 제공하는 것으로 의도된 효과를 방해하지 않는 양으로 발생할 수도 있다.
이하에 설명되는 도 1 내지 8, 및 이 명세서에 있어서의 본 발명의 원리들을 설명하기 위해 사용되는 각종 실시예들은 오직 예시의 방법에 의한 것이며, 본 발명의 범위를 제한하는 어떤 방식으로도 해석되어서는 아니 된다. 본 발명의 원리들은 임의의 적절하게 구성된 무선 통신 시스템에서 구현될 수 있다는 것을 당업자는 이해할 수 있을 것이다. 다양한 실시예들을 설명하기 위해 사용되는 용어들은 예시적인 것이다. 이들은 단지 설명의 이해를 돕기 위해 제공되는 것으로, 이들 사용 및 정의가 어떠한 방식으로도 본 발명의 범위를 제한하지 않는다는 것을 이해해야 한다. 제 1, 제 2 등과 같은 수치 용어들은 유사한 객체들 간을 구분하기 위해 사용되며, 여기서 별도로 명시하지 않는다면, 어떠한 방식으로도 시간 순서를 나타내는 것으로 의도되지 않는다. 하나의 집합은 적어도 하나의 요소를 포함하는 비어있지 않은 집합인 것으로 정의된다.
도 1은 본 발명의 다양한 실시예들에 따른 전자 장치의 블록도이다.
도 1을 참조하면, 전자 장치(100)는 적어도 하나의 프로세서(예를 들면, 애플리케이션 프로세서(application processor : AP))(110), 통신 모듈(120), 가입자 식별 모듈(subscriber identification module : SIM)(124), 메모리(130), 센서 모듈(140), 입력 장치(150), 디스플레이(160), 인터페이스(170), 오디오 모듈(180), 카메라 모듈(191), 전력 관리 모듈(195), 배터리(196), 인디케이터(197), 및 모터(198)를 포함할 수 있다.
프로세서(110)는, 예를 들어, 운영 시스템(operating system : OS) 또는 애플리케이션 프로그램을 실행함으로써 프로세서(110)에 연결되어 있는 복수의 하드웨어 또는 소프트웨어 컴포넌트들을 제어할 수 있으며, 또한 다양한 타입의 데이터에 대한 처리 또는 연산을 수행할 수 있다. 프로세서(110)는 명령 세트로 이루어진 기계 명령들을 로딩(loading) 및 처리하는 복수의 레지스터들을 포함한다. 또한, 프로세서(110)는 메모리 동작들에 대한 속도를 향상시키기 위해 컨텐츠를 캐싱하는 메모리(예를 들어, 레벨 1(level 1 : L1) 캐시 및 레벨 2(level : L2) 캐시)를 포함할 수 있다. 본 명세서에서 설명되는, 레지스터들은 시스템 목적들을 위해 중요한 것으로서, 이 레지스터들 내의 컨텐츠가 공개되는 것을 방지하는 특징들을 포함할 수 있다. 따라서, 레지스터들은 본 명세서에서 설명되는 각종 메모리와는 상이한 것이다.
프로세서(110)는, 예를 들어, 시스템 온 칩(system on chip : SoC)으로서 구현될 수 있다. 본 발명의 일 실시예에 따르면, 프로세서(110)는 그래픽 처리 장치(graphics processing unit : GPU) 및/또는 이미지 신호 프로세서(image signal processor : ISP)를 더 포함할 수 있다. 프로세서(110)는 적어도 하나의 다른 컴포넌트(예를 들면, 비휘발성 메모리)로부터 수신되는 명령 또는 데이터를 로드하고, 이 로드된 명령 또는 데이터를 처리하며, 비휘발성 메모리에 다양한 타입의 데이터를 저장할 수가 있다.
통신 모듈(120)은, 예를 들어, 셀룰러 모듈(121), 와이파이(wireless fidelity : Wi-Fi) 모듈(123), 블루투스(bluetooth : BT) 모듈(125), 글로벌 내비게이션 위성 시스템(global navigation satellite system : GNSS) 모듈(127)(예를 들면, 글로벌 포지셔닝 시스템(global positioning system : GPS) 모듈, 글로나스(GLONASS) 모듈, 베어더우(BeiDou) 모듈, 또는 갈릴레오(Galileo) 모듈), 근거리 통신(near field communication : NFC) 모듈(128), 및 무선 주파수(radio frequency : RF) 모듈(129)을 포함할 수 있다.
셀룰러 모듈(121)은 음성 통화, 영상 통화, SMS(short message service), 또는 통신 네트워크를 통한 인터넷 서비스와 같은 서비스들을 제공할 수 있다. 본 발명의 일 실시예에 따르면, 셀룰러 모듈(121)은 SIM(예를 들면, SIM 카드)(124)을 사용하여, 통신 네트워크 내에 있는 전자 장치(100)를 식별 및 인증할 수 있다.
본 발명의 일 실시예에 따르면, 셀룰러 모듈(121)은 프로세서(110)의 기능들 중의 적어도 일부를 수행할 수 있다. 본 발명의 일 실시예에 따르면, 셀룰러 모듈(121)은 CP를 포함할 수 있다.
Wi-Fi 모듈(123), BT 모듈(125), GNSS 모듈(127), 및 NFC 모듈(128) 각각은, 예를 들어, 모듈에 의해 송수신되는 데이터를 처리하는 프로세서를 포함할 수 있다. 본 발명의 일 실시예에 따르면, 셀룰러 모듈(121), Wi-Fi 모듈(123), BT 모듈(125), GNSS 모듈(127), 및 NFC 모듈(128) 중의 적어도 일부(예를 들면, 2개 이상)는 단일 집적 회로(IC) 또는 IC 패키지에 포함될 수 있다.
RF 모듈(129)은 예를 들어, 통신 신호들(예를 들면, RF 신호들)을 송수신할 수 있다. RF 모듈(129) 예를 들어, 송수신기, 전력 증폭기 모듈(power amplifier module : PAM), 주파수 필터, 저잡음 증폭기(low noise amplifier : LNA), 안테나 등을 포함할 수 있다. 본 발명의 일 실시예에 따르면, 셀룰러 모듈(121), Wi-Fi 모듈(123), BT 모듈(125), GNSS 모듈(127), 및 NFC 모듈(128) 중의 적어도 하나는 별도의 RF 모듈을 통하여 RF 신호들을 송수신할 수 있다.
SIM(124)는 예를 들어, SIM 및/또는 임베디드 SIM를 포함하는 카드를 포함할 수 있다. SIM(124)는 고유 식별자(예를 들면, 집적 회로 카드 식별자(integrated circuit card identifier : ICCID)) 또는 가입자 정보(예를 들면, 국제 모바일 가입자 식별번호(international mobile subscriber identity : IMSI))를 포함할 수 있다.
메모리(130)는 예를 들어, 내부 메모리(132) 또는 외부 메모리(134)를 포함할 수 있다. 내부 메모리(132)는 예를 들어, 휘발성 메모리(예를 들면, 동적 랜덤 액세스 메모리(dynamic random access memory : DRAM), 정적 RAM (static RAM : SRAM), 또는 동기 동적 RAM(synchronous dynamic RAM : DRAM), 및 비휘발성 메모리(예를 들면, OTPROM(one time programmable read only memory), PROM(programmable ROM), EPROM(erasable and programmable ROM), EEPROM(electrically erasable and programmable ROM), 마스크 ROM, 플래시 ROM, 플래시 메모리(예를 들면, NAND 플래시 메모리, 또는 NOR 플래시 메모리), 하드 드라이브, 및 SSD(solid state drive)) 중의 적어도 하나일 수 있다.
외부 메모리(134)는 예를 들어, 컴팩트 플래시(compact flash : CF)와 같은 플래시 드라이브, 보안 디지털(secure digital : SD), 마이크로-SD, 미니-SD, 익스트림 디지털(extreme digital : xD), 멀티-미디어 카드(multi-media card : MMC), 또는 메모리 스틱을 더 포함할 수 있다. 외부 메모리(134)는 다양한 인터페이스들을 통하여 전자 장치(100)와 동작적으로 및/또는 물리적으로 커플링될 수 있다.
센서 모듈(140)은, 예를 들어, 물리적 양들을 측정하거나 전자 장치(100)와 관련된 동작 상태들을 검출할 수 있으며, 또한 그 측정되거나 검출된 정보를 전기 신호들로 변환할 수가 있다. 센서 모듈(140)은 예를 들어, 제스처 센서(140A), 자이로 센서(140B), 기압 센서(140C), 자기 센서(140D), 가속도계(140E), 그립 센서(140F), 근접 센서(140G), 컬러 센서(예를 들면, RGB(red, green, blue) 센서)(140H), 바이오메트릭(biometric) 센서(140I), 온도/습도 센서(140J), 조도 센서(140K), 및 자외선(ultra violet : UV) 센서(140M) 중의 적어도 하나를 포함할 수 있다. 추가적 또는 대체적으로, 센서 모듈(140) 예를 들어, E-노우즈(electrical-nose) 센서, EMG(electromyography) 센서, EEG(electroencephalogram) 센서, ECG(electrocardiogram) 센서, IR(infrared) 센서, 아이리스 센서, 및/또는 핑거 프린트 센서를 포함할 수 있다. 센서 모듈(140)은 포함되어 있는 하나 이상의 센서들을 제어하는 제어 회로를 더 포함할 수 있다. 다양한 실시예들에 따르면, 전자 장치(100)는 프로세서(110)의 일부로서 또는 이와는 별도로, 센서 모듈(140)을 제어하도록 구성되는 프로세서를 더 포함할 수 있다. 따라서, 프로세서(110)가 휴면 상태(sleep state)로 존재할 동안에는, 이 제어 회로가 센서 모듈(140)을 제어할 수도 있다.
입력 장치(150)는 예를 들어, 터치 패널(152), (디지털) 펜 센서(154), 키(156), 또는 초음파 입력 장치(158)를 포함할 수 있다. 터치 패널(152)은 예를 들어, 정전용량 방식, 저항 방식, 적외선 방식, 및 초음파 방식 중 적어도 하나로 동작될 수 있다. 터치 패널(152)은 제어 회로를 더 포함할 수 있다. 터치 패널(152)은 택타일 레이어(tactile layer)를 더 포함할 수 있으며, 이에 따라 사용자에게 햅틱 피드백(haptic feedback)을 제공할 수 있다.
(디지털) 펜 센서(154)는 예를 들어, 터치 패널의 일부이거나 이와 별도로 구성되는 검출 시트(detection sheet)를 포함할 수 있다. 키(156)는 예를 들어, 물리적인 버튼, 광학식 키, 또는 키패드를 포함할 수 있다. 초음파 입력 장치(158)는 마이크(예를 들면, 마이크(188))를 사용하여, 입력 도구에서 발생된 초음파 신호들을 검출함으로써 데이터를 식별할 수 있다.
디스플레이(160)는 패널(162), 홀로그램 장치(164), 또는 프로젝터(166)를 포함할 수 있다. 패널(162)은 예를 들어, 유연하게(flexible), 투명하게(transparent), 또는 착용할 수 있게(wearable) 구성될 수 있다. 패널(162) 및 터치 패널(152)은 단일의 모듈로서 구현될 수도 있다. 본 발명의 일 실시예에 따르면, 패널(162)은 사용자 터치 압력의 힘을 측정하는 압력 센서(또는 힘 센서)를 포함할 수 있다. 압력 센서는 터치 패널(152)과 일체화될 수 있거나 또는 터치 패널(152)과는 별도로, 하나 이상의 센서들을 포함할 수도 있다. 홀로그램 장치(164)는 빛의 간섭을 이용하여 3차원 영상을 허공에 보여줄 수 있다. 프로젝터(166)는 화면에 빛을 투사하여 영상을 표시할 수 있다. 화면은 예를 들어, 전자 장치(100)의 내부 또는 외부에 위치할 수 있다. 본 발명의 일 실시예에 따르면, 디스플레이(160)는 패널(162), 홀로그램 장치(164), 또는 프로젝터(166)를 제어하기 위한 제어 회로를 더 포함할 수 있다.
인터페이스(170)는 예를 들어, HDMI(high-definition multimedia interface)(172), USB(universal serial bus)(174), 광 인터페이스(optical interface)(176), 또는 D-sub(D-subminiature)(178)를 포함할 수 있다. 추가적 또는 대체적으로, 인터페이스(170)는 예를 들어, MHL(mobile high-definition link) 인터페이스, SD(secure digital) 카드/MMC(multi-media card) 인터페이스, 또는 IrDA(infrared data association) 인터페이스를 포함할 수 있다.
오디오 모듈(180)은 소리(sound)를 전기 신호로 변환시킬 수 있으며, 그 반대의 경우도 가능하다. 오디오 모듈(180)은 예를 들어, 스피커(182), 수신기(184), 이어폰(186), 또는 마이크(188)를 통해 입력 또는 출력되는 소리 정보를 처리할 수 있다.
카메라 모듈(191)은 예를 들어, 정지 영상 및 동영상을 촬영할 수 있다. 본 발명의 일 실시예에 따르면, 카메라 모듈(191)은 하나 이상의 이미지 센서들(예를 들면, 전면 센서 또는 후면 센서), 렌즈, ISP, 또는 플래시(예를 들면, LED(light emitting diode) 또는 크세논 램프(xenon lamp))를 포함할 수 있다.
전력 관리 모듈(195)은 예를 들어, 전자 장치(100)의 전력을 관리할 수 있다. 본 발명의 일 실시예에 따르면, 전력 관리 모듈(195)은 PMIC(power management integrated circuit), 충전 IC(charger integrated circuit), 또는 배터리 또는 연료 게이지를 포함할 수 있다. PMIC는 유선 및/또는 무선 충전 방식을 채용할 수 있다. 무선 충전 방식은 예를 들어, 자기공명 방식, 자기유도 방식 또는 전자기파 방식으로 수행될 수 있으며, 무선 충전을 위한 추가적인 회로, 예를 들어, 코일 루프, 공진 회로, 또는 정류기를 사용할 수도 있다. 배터리 연료 게이지는 예를 들어, 배터리(196)의 충전 레벨, 충전 중 전압, 전류, 또는 온도를 측정할 수 있다. 배터리(196)는 예를 들어, 충전식 전지(rechargeable battery) 및/또는 태양 전지(solar battery)를 포함할 수 있다.
인디케이터(197)는 전자 장치(100) 또는 그 일부(예를 들면, 프로세서(110))의 특정 상태, 예를 들어, 부팅 상태, 메시지 상태 또는 충전 상태를 표시할 수 있다. 모터(198)는 전기적 신호를 기계적 진동으로 변환할 수 있고, 진동(vibration), 또는 햅틱(haptic)를 발생시킬 수 있다. 도시되지는 않았으나, 전자 장치(100)는 모바일 TV 지원을 위한 처리 장치(예를 들면, GPU(graphical processing unit))를 포함할 수 있다. 모바일 TV 지원을 위한 처리 장치는 예를 들어, DMB(digital multimedia broadcasting), DVB(digital video broadcasting), 또는 미디어플로(MediaFLO)를 준수하는 미디어 데이터를 처리할 수 있다.
전술한 전자 장치의 컴포넌트들 각각은 하나 이상의 부분을 포함할 수 있으며, 그 컴포넌트의 명칭은 전자 장치의 종류에 따라서 달라질 수 있다. 다양한 실시예들에 따르면, 전자 장치는 전술한 컴포넌트들 중 적어도 하나를 포함하여 구성될 수 있다. 일부 컴포넌트가 전자 장치에서 생략되거나 또는 추가될 수도 있다. 다양한 실시예들에 따르면, 전자 장치의 컴포넌트들 중 일부가 결합되어 하나의 개체(entity)로 구성됨으로써, 결합되기 이전의 해당 컴포넌트들의 기능을 동일하게 수행할 수 있다.
도 2는 본 발명의 다양한 실시예들에 따른 프로그래밍 모듈의 블록도이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른, 프로그래밍 모듈(210)은 전자 장치(예를 들면, 전자 장치(201))와 관련된 리소스들을 제어하는 OS 및/또는 OS 상에서 실행되는 다양한 애플리케이션들(예를 들면, 애플리케이션 프로그램들(247))을 포함할 수 있다. 예를 들어, OS는 Android?, iOS?, Windows?, Symbian?, Tizen?, Bada? 등이 될 수 있다.
프로그래밍 모듈(210)은 커널(220), 미들웨어(230), API(260), 및/또는 애플리케이션들(270)을 포함할 수 있다. 프로그래밍 모듈(210)의 적어도 일부는 전자 장치 상에 프리로드(preload) 되거나, 외부 전자 장치로부터 다운로드(download) 가능하다.
커널(220)은 예를 들어, 시스템 리소스 관리자(221) 및/또는 장치 드라이버(223)를 포함할 수 있다. 시스템 리소스 관리자(221)는 시스템 리소스들의 제어, 할당, 또는 회수를 수행할 수 있다. 본 발명의 일 실시예에 따르면, 시스템 리소스 관리자(221)는 프로세스 관리자, 메모리 관리자, 또는 파일 시스템 관리자를 포함할 수 있다. 장치 드라이버(223)는, 예를 들어, 디스플레이 드라이버, 카메라 드라이버, BT 드라이버, 공유 메모리 드라이버, USB 드라이버, 키패드 드라이버, Wi-Fi 드라이버, 오디오 드라이버, 또는 IPC(inter-process communication) 드라이버를 포함할 수 있다.
미들웨어(230)는 예를 들어, 애플리케이션들(270)이 공통적으로 필요로 하는 기능을 제공하거나, 애플리케이션들(270)이 전자 장치 내부의 제한된 시스템 리소스들을 효율적으로 사용할 수 있도록 API(260)를 통해 다양한 기능들을 애플리케이션들(270)로 제공할 수 있다. 본 발명의 일 실시예에 따르면, 미들웨어(230)는 런타임 라이브러리(235), 애플리케이션 관리자(241), 윈도우 관리자(242), 멀티미디어 관리자(243), 리소스 관리자(244), 전력 관리자(245), 데이터베이스 관리자(246), 패키지 관리자(247), 연결 관리자(248), 통지 관리자(249), 위치 관리자(250), 그래픽 관리자(251), 및 보안 관리자(252) 중 적어도 하나를 포함할 수 있다.
런타임 라이브러리(235)는 예를 들어, 애플리케이션(270)이 실행되는 동안에 프로그래밍 언어를 통해 새로운 기능을 추가하기 위해 컴파일러가 사용하는 라이브러리 모듈을 포함할 수 있다. 런타임 라이브러리(235)는 I/O 관리, 암호화 기능, 메모리 관리, 또는 산술 함수에 관한 기능 등을 수행할 수 있다.
애플리케이션 관리자(241)는 예를 들어, 애플리케이션들(270) 중 적어도 하나의 애플리케이션의 라이프 사이클(life cycle)을 관리할 수 있다. 윈도우 관리자(242)는 화면에서 사용하는 그래픽 사용자 인터페이스(GUI) 리소스들을 관리할 수 있다. 멀티미디어 관리자(243)는 다양한 미디어 파일들의 재생에 필요한 포맷을 파악하고, 미디어 파일의 포맷에 맞는 코더/디코더(CODEC)를 이용하여 미디어 파일의 인코딩(encoding) 또는 디코딩(decoding)을 수행할 수 있다. 리소스 관리자(244)는 적어도 하나의 애플리케이션(270)의 소스 코드, 메모리 또는 저장 공간과 같은 리소스들을 관리할 수 있다.
전력 관리자(245)는 예를 들어, 바이오스(basic input/output system : BIOS)와 함께 동작하여 배터리 또는 전원을 관리하고, 전자 장치의 동작에 필요한 전력 정보를 제공할 수 있다. 데이터베이스 관리자(246)는 애플리케이션들(270) 중 적어도 하나의 애플리케이션에서 사용할 데이터베이스를 생성, 검색, 또는 변경할 수 있다. 패키지 관리자(247)는 패키지 파일의 형태로 배포되는 애플리케이션의 설치 또는 업데이트를 관리할 수 있다.
연결 관리자(248)는 예를 들어, Wi-Fi, BT 등의 무선 연결을 관리할 수 있다. 통지 관리자(249)는 메시지 도착, 스케줄, 근접 알람 등의 이벤트를 사용자에게 방해되지 않는 방식으로 표시 또는 통지할 수 있다. 위치 관리자(250)는 전자 장치의 위치 정보를 관리할 수 있다. 그래픽 관리자(251)는 사용자에게 제공될 그래픽 효과 또는 이와 관련된 사용자 인터페이스를 관리할 수 있다. 보안 관리자(252)는 시스템 보안, 사용자 인증 등에 필요한 전반적인 보안 기능을 제공할 수 있다. 보안 관리자(252)는 애플리케이션 공간에서 실행될 동안에 데이터를 보안화하도록 하는 암호화 기능들을 수행하는 인증 암호화 라이브러리를 포함할 수 있다. 본 발명의 일 실시예에서, 전자 장치(예를 들면, 전자 장치(100))가 전화 기능을 포함한 경우, 미들웨어(230)는 전자 장치의 음성 또는 영상 통화 기능을 관리하기 위한 전화 관리자(telephony manager)를 더 포함할 수 있다.
새로운 미들웨어 모듈은 미들웨어(230)에 전술한 컴포넌트 모듈들의 각종 기능들을 조합시킴으로써 생성 및 사용될 수 있다. 미들웨어(230)는 차별화된 기능들을 제공하기 위해 각 OS의 종류별로 특화된 모듈을 제공할 수 있다. 또한, 미들웨어(230)는 동적으로 기존의 컴포넌트들을 일부 삭제하거나 새로운 컴포넌트를 추가할 수도 있다.
API(260)는 예를 들어, API 프로그래밍 함수들의 집합이며, OS에 따라 다르게 구성될 수 있다. 예를 들어, 안드로이드(Android) 또는 아이오에스(iOS)의 경우, 플랫폼별로 하나의 API 세트가 제공될 수 있으며, 타이젠(Tizen)의 경우, 플랫폼별로 2개 이상의 API 세트가 제공될 수 있다.
애플리케이션(270)은, 예를 들어, 홈(271), 다이얼러(dialer)(272), SMS/MMS(273), IM(instant message)(274), 브라우저(275), 카메라(276), 알람(277), 연락처(278), 음성 다이얼(279), 이메일(280), 캘린더(281), 미디어 플레이어(282), 앨범(283), 또는 시계(284), 건강 관리(health care)(예를 들면, 운동량 또는 혈당 측정), 또는 환경 정보 제공(예를 들면, 기압, 습도, 또는 온도 정보) 등의 기능을 제공할 수 있는 하나 이상의 애플리케이션들을 포함할 수 있다.
본 발명의 일 실시예에 따르면, 애플리케이션들(270)은 전자 장치(예를 들면, 전자 장치(100))와 외부 전자 장치 사이의 정보 교환을 지원하는 애플리케이션(이하, 설명의 편의상, '정보 교환 애플리케이션'이라 칭함)을 포함할 수 있다. 정보 교환 애플리케이션은 예를 들어, 외부 전자 장치에 특정 정보를 송신하기 위한 통지 중계 애플리케이션, 또는 외부 전자 장치를 관리하기 위한 장치 관리 애플리케이션을 포함할 수 있다.
예를 들어, 통지 중계 애플리케이션은 다른 애플리케이션(예를 들면, SMS/MMS 애플리케이션, 이메일 애플리케이션, 건강 관리 애플리케이션, 또는 환경 정보 애플리케이션)에서 발생된 통지 정보를 외부 전자 장치로 송신하는 기능을 포함할 수 있다. 또한, 통지 중계 애플리케이션은 예를 들어, 외부 전자 장치로부터 통지 정보를 수신하여, 이것을 사용자에게 송신할 수 있다.
장치 관리 애플리케이션은 예를 들어, 전자 장치와 통신하는 외부 전자 장치의 적어도 일부의 기능(예를 들면, 외부 전자 장치(또는, 그것의 컴포넌트들의 일부)의 턴-온/턴-오프 또는 디스플레이의 밝기(또는 해상도) 조절), 외부 전자 장치에서 실행되는 애플리케이션 또는 외부 전자 장치에 의해 제공되는 서비스(예를 들면, 통화 서비스 또는 메시지 서비스 등)를 관리(예를 들면, 설치, 삭제, 또는 업데이트)할 수 있다.
본 발명의 일 실시예에 따르면, 애플리케이션들(270)은 외부 전자 장치의 속성(예를 들면, 전자 장치의 속성으로서의 전자 장치 타입이 모바일 의료 기기임)에 따라 지정된 애플리케이션(예를 들면, 건강 관리 애플리케이션)을 포함할 수 있다. 본 발명의 일 실시예에 따르면, 애플리케이션들(270)은 외부 전자 장치로부터 수신된 애플리케이션을 포함할 수 있다. 본 발명의 일 실시예에 따르면, 애플리케이션들(270)은 프리로드 애플리케이션(preloaded application) 또는 서버로부터 다운로드 가능한 서드파티(third party) 애플리케이션을 포함할 수 있다. 본 발명의 실시예에 따른 프로그래밍 모듈(210)의 컴포넌트들의 명칭은 OS의 종류에 따라서 달라질 수 있다.
다양한 실시예들에 따르면, 프로그래밍 모듈(210)의 적어도 일부는 소프트웨어, 펌웨어, 하드웨어, 또는 이들 중 적어도 둘 이상의 조합으로 구현될 수 있다. 프로그래밍 모듈(210)의 적어도 일부는 프로세서(예를 들면, 프로세서(110))에 의해 구현(예를 들면, 실행)될 수 있다. 프로그래밍 모듈(210)의 적어도 일부는 하나 이상의 기능을 수행하기 위한, 예를 들어, 모듈, 프로그램, 루틴, 명령 세트 또는 프로세스를 포함할 수 있다.
일반적으로, 애플리케이션들(270)은 사용자 애플리케이션이 데이터를 저장하는 사용자 공간에서 실행된다. 사용자 공간은 커널 공간으로부터 분리된 메모리 영역이며, 여기서 시스템 리소스들이 실행 및 보호된다. API(260), 미들웨어(230), 및 커널(220)은 보안 목적을 위하여 커널 공간 내에 있는 컨텐츠(예컨대, 메모리, 프로세스, 함수 등)에 애플리케이션(270)이 액세스하는 것을 방지할 수 있다. 예를 들어, 애플리케이션이 커널(220)을 통하여 명령 셸을 호출할 수 있는 경우에는, 해당 명령 셸이 시스템 액세스를 행하게 되며, 따라서 사용자는 전체 시스템에 대한 루트 레벨 액세스를 행하게 된다.
그러나, 악의적인 방식으로 기존 코드를 사용하여 실행 흐름에 영향을 미치게 되는 제어 흐름 익스플로잇(control flow exploit)이 실행될 수도 있다. 제어 흐름 익스플로잇은 특히 쓰기-방지(write-protection)를 이용하여 커널 공간의 코드 섹션들에서 메모리 컨텐츠 쓰기를 방지하는 시스템에 적용된다. 최신의 운영 체제들은 쓰기-방지를 사용하여 시스템 액세스를 제한함으로써, 악의적인 방식으로, 예를 들어, 바이러스(virus), 트로얀(trojan), 랜섬웨어(ransomware), 루트 킷(root kit), 또는 회피 파일 보호(circumvent file protection)를 설치하는 것에 의하여 시스템이 변경되는 것이 불가능하게 한다.
제어 흐름 익스플로잇의 일 예로는 안드로이드 핑퐁(Android PingPong) 루트가 있으며, 여기서 공격자는 기존의 커널 코드를 사용하여 시스템에 루트 액세스할 수가 있었으며, 이것은 Android를 사용하는 장치들의 보안성에 영향을 미쳤었다. 예를 들어, 일단 Android가 루팅(rooting)되고 나면, 공격자들이 무허가 애플리케이션들을 설치할 수가 있었다.
제어 흐름 익스플로잇은 커널 데이터 섹션 내에 바람직하지 않은 값들을 삽입함으로써, 예상되는 브랜치 명령(branch instruction)들의 동작을 변경시키는 것에 기반한다. 브랜치 명령은 컨파일된 바이너리에서의 순차적 명령들의 실행을 중단하고서, 상이한 위치에 있는 명령들로 점프(jump)하도록 하는 바이너리의 실행을 야기하게 되며, 이것은 일반적으로 함수로 지칭된다. 따라서, 브랜치 명령이 실행될 경우에는, 실행을 위해 프로세서로 읽어들여지는 명령들의 주소인 프로그램 카운터(program counter : PC)가 변경된다. 이 브랜치에서의 명령들이 완료되는 경우, PC는 그 브랜치 명령 이후의 명령으로 리턴된다. 따라서, 각각의 브랜치 명령에 대한 리턴 주소가 저장되어야만 한다. 암64(ARM64) 명령 세트에서는, 리턴 주소 레지스터(X30)가 하나의 리턴 주소를 저장하지만, 메모리 내의 스택이 이전 리턴 주소들을 저장하게 된다.
ARM64 명령 세트에는 다음과 같은 두 가지 타입의 브랜치 명령들이 존재한다: 직접 브랜치(B(branch) 명령 또는 BL(branch with link) 명령) 및 간접 브랜치(BR(branch to register) 명령 또는 BLR(branch with link to register) 명령). 직접 브랜치 명령은 인수(argument)로서 제공되는 값을 PC에 추가한다. 직접 브랜치 명령에 제공되는 값은 10 비트로 제한되는데, 이것은 점프 위치의 사이즈를 ±128MB로 제한하게 되며, 이에 따라 타겟이 어떤 위치에도 있을 수 있게 된다.
그러나, 간접 브랜치 명령은 PC로 하여금, 메모리 위치에 저장되어 있는 주소로 점프하게 한다. 따라서, 간접 브랜치 명령은 임의의 위치로 점프될 수 있다. 통상적으로, 간접 브랜치는 함수의 중간에서(예컨대, 최적화된 스위치문(switch statement) 동안)에서 실행을 시작하거나 또는 예를 들어, 인수들의 수에 기초하여, 호출될 수 있는 함수들이 다수 존재할 경우에 사용된다.
링크를 가진 직접 및 간접 브랜치들 모두는 리턴 주소가 프로세서의 레지스터에 저장될 필요가 있다. 그러나, 제 1 함수가 제 2 함수를 호출할 경우에는, 제 1 함수의 리턴 주소가 스택에 저장된다. 특히, 제 2 함수가 컴파일될 경우에는, 컴파일러가 제 2 함수의 시작 시에 프롤로그 명령들을 인서팅(inserting)하며, 제 2 함수의 종료 시에 에필로그 명령들을 인서팅한다. 프롤로그 명령들이 제 2 함수를 실행하기 이전에 프로세서 상태를 저장하며(즉, 메모리에 있는 스택의 스택 프레임에 레지스터 값들이 카피됨), 에필로그 명령들이 제 2 함수의 실행 이후에 프로세서 상태를 재저장하게 된다(즉, 스택의 값들이 레지스터들에 카피됨). 프레임 포인터(frame pointer)를 사용하여 스택 프레임의 위치를 식별하게 된다.
일반적으로, 다음과 같은 두 가지 타입의 제어 흐름 익스플로잇이 존재한다: 브랜치의 리턴 주소 오버라이팅(overwriting)(이것은 스택에 저장됨), 및 포인터 오버라이팅(이것은 힙(heap)에 저장됨). 이하, 도 3 및 도 4를 참조하여 제어 흐름 익스플로잇에 대해 상세히 설명하도록 한다. 코드 제어 흐름을 변경시키는 브랜치의 리턴 주소 오버라이팅은 경우에 따라 리턴-지향 프로그래밍으로 지칭된다. 점프 또는 브랜치의 제어 흐름을 변경하거나 코드 제어 흐름을 변경시키는 명령들을 호출하게 되는 임의의 데이터 또는 힙에 저장되는 포인터 오버라이팅은 경우에 따라 점프-지향 프로그래밍으로 지칭된다.
도 3은 제어 흐름 익스플로잇을 나타내는 도면이다.
도 3을 참조하면, 도 3에 나타나 있는 의사 코드(pseudo code)는 리턴 주소를 오버라이트하는 제어 흐름 익스플로잇(control flow exploit)을 도시한 것으로서, 일반적으로 이것은 적어도 2개의 함수가 실행되는 것을 필요로 한다. 예를 들어, function1이 실행되어 공격자(attacker)가 변수(예컨대, attacker_controlled_var)를 제어 가능하게 될 경우에는, 동작 310에서, function1가 function2를 호출하게 된다. 동작 310 동안에는, 프레임 포인터 레지스터가 리턴 주소(라인 128, 미도시)를 저장하며, 스택이 리턴 주소들(라인 100, 미도시)를 저장하게 된다. 따라서, 라인 4에서의 리턴 명령은 라인 128로 리턴하는 것으로 지정된다.
function2가 실행되는 경우, 프레임 포인터 레지스터의 값이 스택에 카피되며, function1의 리턴 주소가 프레임 포인터에 놓이게 된다. 따라서, 프레임 포인터는 그것의 값으로서 4를 갖게 되며, 스택은 100 및 128의 값들을 포함하게 된다.
function2는 strcpy 함수를 호출하게 되며, 이것은 도시된 바와 같이, 8개의 문자를 요구한다. 그러나, 공격자 제어 변수가 8개의 문자를 초과하는 경우에는, 동작 320에서, 라인 9에서의 strcpy 함수 호출이 대신에 스택 상의 가장 최근의 값을 라인 19로 오버라이트한다. 따라서, function2의 실행이 진행되어 동작 330에서 리턴 명령을 실행할 경우에는, 스택이 100 및 19의 값들을 포함하는 것으로 변경되었다.
function2의 실행이 완료될 경우에는, 스택 상의 가장 최근의 리턴 주소(즉, 19)가 프레임 포인터에 카피된다. 따라서, function1이 라인 4에서 리턴 명령을 실행할 경우에는, 리턴 주소가 라인 19로 되는데, 이것은 동작 340에서 임의의 잠재적인 악성 동작, 예를 들어 루트 권한(root privilege)을 가진 셸(즉, 명령 행(command line), 터미널(terminal), 명령 셸(command shell))을 호출하는 것을 나타낼 수 있다. 따라서, 공격자는 스택의 리턴 메모리 주소를 오버라이팅하는 것에 의하는 제어 흐름 익스플로잇을 사용하여 커널의 보안성을 손상시켰다.
도 4는 다른 제어 흐름 익스플로잇을 나타내는 도면이다.
도 4를 참조하면, 도 4에 나타나 있는 의사 코드는 메모리의 포인터를 오버라이트하는 제어 흐름 익스플로잇을 도시한 것이다. 예를 들어, 브랜치 명령은 타겟으로서 포인터를 이용할 수 있으며, 따라서, 공격자가 포인터의 값을 오버라이트 가능한 경우에는, 공격자가 커널을 손상시키는 페이로드로 브랜치하도록 하는 실행을 야기할 수가 있다. 이러한 타입의 공격을 행하기 위해서는, 함께 체이닝(chaining)되는 함수들의 부분들에 의해 형성되는 "가젯(gadget)"을 공격자가 함께 체이닝해야만 한다. 즉, 가젯은 공격자에 의해 트리거되어 실행될 수 있는 연속적인 명령들의 시퀀스이며, 공격자에 의해 제어되는 간접 브랜치 명령으로 종료된다. 공격자가 가젯을 함께 체이닝할 수 있는 경우에는, 공격자가 레지스터들을 개별적으로 설정할 수가 있으며, 그 후에 이 가젯을 유도하여, 예를 들어 공격자의 권한을 확대시킴으로써 시스템 보안성을 손상시키는 페이로드 함수를 실행하도록 할 수 있다.
예를 들어, 동작 410에서, 공격자는 function1이 실행되게 할 수 있으며, 이것은 레지스터들 X1 및 X2를 공격자가 원하는 값들로 설정시킨다. 또한, function1는 레지스터 X1에 기초하는 위치로 브랜치하도록 하는 명령을 포함한다. 따라서, 공격자는 function2가 레지스터 X2의 값들을 설정하는 위치에서 function2의 실행을 유도할 수 있다. function1과 마찬가지로, function2는 동작 430에서 레지스터 X2에 기초하는 위치로 브랜치하도록 하는 명령을 포함하며, 이것은 페이로드 함수의 실행을 유도한다. 그러나, 공격자가 레지스터들의 값들을 변경했기 때문에, function2는 공격자가 원하는 코드로 점프하여서 시스템을 손상시킨다. 예를 들어, 공격자가 원하는 코드는 권한을 확대시키거나, 루트킷을 설치하는 것 등을 수행할 수 있다. ARM64에서는, 레지스터들 X0 내지 X7이 함수 인수(function argument)들을 저장하며, 임의의 추가 인수들이 스택에 저장된다. 이에 따라, 페이로드 함수가 실행될 경우에는, 공격자가 원하는 코드(예컨대, 셸)를 실행하여 공격자의 권한을 확대할 수가 있다. 따라서, 도 4의 예에서는, 공격자가 코드 자체를 변경하지 않고서도, function1 및 function2에 의해 형성되는 체인의 가젯을 트리거할 수 있으며, 이에 따라 공격자는 시스템을 손상시킬 수 있게 된다.
도 5는 본 발명의 다양한 실시예들에 따른 보안 제어 흐름을 갖는 바이너리를 생성하는 방법의 흐름도이다.
도 5를 참조하면, 흐름도는 제어 흐름 익스플로잇을 방지하는 보안 제어 흐름을 갖는 바이너리 생성 방법을 도시한다. 먼저, 동작 510에서는, 커널 소스 코드를 변경하여 암호 키들이 사용자 공간으로 누설(즉, 키 누설(key leakage))되는 것을 방지하게 되며, 이에 대해서는 동작 720을 참조하여 아래에서 상세히 설명될 것이다. 특히, 동작 510 동안에는, 커널 소스 코드에서 트랜지션 포인트(transition point)들을 식별하여, 의사 랜덤 리소스 또는 랜덤 리소스에 기초하여, 새로운 암호 키를 생성하는 명령들을 인서팅하며, 오래된 암호 키로 암호화된 메모리 내의 리턴 주소들을 식별하여, 새로운 암호 키에 기초하여, 리턴 주소들을 재암호화한다.
동작 510에서의 트랜지션 포인트들은 임의의 적절한 컨텍스트 스위치를 포함하며, 여기서 키 누설이 발생할 수 있다. 예를 들어, 트랜지션 포인트들은 스레드 엔트리(thread entry)를 포함하며, 이것은 스레드의 스타트 포인트(start point) 또는 엑시트 포인트(exit point)에 대응한다. 스레드 엔트리들은 사용자 공간으로부터 커널 공간으로의 트랜지션(예컨대, 사용자 애플리케이션이 커널 함수 호출), 사용자 또는 커널과 관련된 상이한 커널 스레드들 사이의 스레드 엔트리, 상이한 프로세스들 사이의 트랜지션들 등의 동안에 발생할 수 있다. 본 명세서에서 사용되는 프로세스는 단일의 스레드를 포함하거나 또는 순차적 또는 병렬적으로 실행되는 복수의 스레드들을 포함할 수도 있다.
또한, 동작 510에서는, 랜덤의 레벨을 제공하는 리소스를 사용하여 새로운 암호 키가 생성된다. 예를 들어, 프로세서가 트루(true) 랜덤 값을 보안적으로 생성 가능한 경우, 이 키는 랜덤 넘버 생성기를 사용하여 생성될 수 있다. 그러나, 랜덤 넘버 생성기들은 문제점이 있는 것으로 알려져 있으며, 따라서, 다른 리소스를 사용할 수도 있다. 일반적으로, 프로세서 아키텍처들은 사이클 인터벌로 명령들의 실행을 측정하는 사이클 카운터를 포함한다. 실행을 행한 사이클들의 정확한 수는 예측했던 것과 상이하기 때문에, 새로운 암호 키를 생성하기 위한 사이클 카운터가 샘플되어 사용될 수 있고, 이것이 예비 레지스터에 저장된 암호 키를 대체하게 되며, 이에 대해서는 동작 610을 참조하여 더 상세하게 설명될 것이다.
동작 510이 설계자에 의한 수동 변경으로 설명되겠지만, 커널 변경들의 일부는 자동적으로 행해질 수 있다. 예를 들어, 정규 표현 패턴 매치를 행하는 소프트웨어 툴을 사용하여, 전술한 바에 기초하여 변경될 필요가 있는 명령들을 식별할 수가 있다. 또한, 이러한 소프트웨어 툴을 사용하여 필요에 따라 명령들을 변경할 수도 있다.
몇몇 예들에서, 스택은 컨텐츠를 포함하지 않을 수도 있다. 예를 들어, 사용자-커널 스레드 엔트리 동안에, 이 실행은 바텀 아웃(bottomed ou)(즉, 비어있는) 스택으로 개시되며, 관련 리턴 주소들이 존재하지 않게 된다. 이러한 예에서는, 암호화된 리턴 주소들이 없기 때문에, 그 트랜지션은 새로운 암호 키 생성만을 수반하게 된다.
동작 520에서는, 컴파일러가 변경될 수 있고, 컴파일러 옵션들이 설정될 수 있으며, 또한 바이너리를 컴파일하는 동안에 작업들을 로드 및 수행하도록 컴파일러 플러그인들이 설정된다. 동작 520에 대해서는 도 6을 참조하여 더 상세히 설명될 것이다. 동작 530에서는, 컴파일러가 실행되어 소스 코드를 바이너리 파일로 컴파일한다. 동작 540에서는, 후-처리 애플리케이션에 의하여 바이너리가 처리되어, 명령들을 인서팅, 변경, 및 삭제함으로써 제어 흐름의 커맨디어링(commandeering)을 방지한다. 본 예가 컴파일 이전에 소스 코드를 변경하고 나서 컴파일 이후에 바이너리를 변경하는 것에 관한 것이지만, 컴퍼일러를 변경하여 전체적으로 소스 코드를 처리함으로써 본 명세서에서 설명한 제어 흐름을 방지하는 것도 가능하다.
도 6은 본 발명의 다양한 실시예들에 따른 바이너리를 컴파일하기 위해 컴파일러 옵션들을 설명하는 방법의 흐름도이다.
동작 520의 예시적 구현인 도 6을 참조하면, 컴파일러가 변경될 수 있으며, 다양한 옵션들 및 설정들이 컴파일러에 제공된다. 이러한 옵션들 및 설정들은 설정 파일, 컴파일러가 소스 코드를 컴파일하게 하는 실행에 제공되는 인수, 또는 그래픽 개발 환경에서의 설정으로 제공될 수 있다.
먼저, 동작 610에서는, 컴파일러 자체가 변경될 수 있다. 이러한 컴파일러 변경은 간단하거나 광범위할 수 있다. 특히, 몇몇 컴파일 프로세스 변경들은 컴파일 이후의 바이너리 변경을 통해 구현하는 것으로 더 간단할 수 있으며, 이것은 바이너리 계측(binary instrumentation)으로 지칭된다. 그러나, 다른 컴파일 프로세스 변경들이 컴파일러 자체에 구현될 수도 있다. 몇몇의 컴파일러 변경들은 예를 들어, 프로세서에서 하드웨어 레지스터들을 할당하는 것을 방지하거나, 바이너리 변경을 가능하게 하는 특정 명령들 이후에 NOP(no operation) 명령을 인서팅하는 것 등이다.
동작 620에서는, 프로세서의 적어도 하나의 레지스터가 예비된다. 그러나, 단순화 및 명확화를 위해, 하나의 레지스터가 예비될 것이다. 이 예비 레지스터는 성능 영향(performance impact)을 제한하도록 컴파일된 바이너리에 기초하여 선택된다. 예를 들어, ARM64에서는, 레지스터들 X16 및 X17이 절차-내 템포러리 레지스터들이며 또한 레지스터 X18은 플랫폼 레지스터로서 플랫폼 애플리케이션 바이너리 인터페이스들을 위해 사용된다. 그러나, 이러한 레지스터들은 모놀리식 커널의 컴파일 시에는 사용되지 않을 수 있으며, 그 이유는 이러한 커널은 장시간의 브랜치를 요구하지 않는 재배치 가능 코드 또는 함수들을 지원할 필요가 없기 때문이다. 따라서, 모놀리식 커널(monolithic kernel)에 있어서는, 일반적으로 레지스터들 X16, X17, 및 X18이 사용되지 않으며, 컴파일러에 의해 예비될 수 있다.
커널 공간 내에서는 사용되지 않는 것으로 설정되는, 이러한 예비 레지스터는, 스택 상에 리턴 주소들을 배치하기 이전에 리턴 주소들을 암호화하기 위한 암호 키를 저장하는데 사용된다. 즉, 동작 620에서는, 컴파일된 바이너리 내의 임의의 명령들에 예비 레지스터가 할당되지 않도록 하는 방식으로, 컴파일러가 설정된다. 그러나, 동작 710을 참조하여 아래에서 설명되는 바와 같이, 이러한 예비 레지스터는 제한 목적을 위하여 바이너리에 계속 할당될 수도 있다. 무결성의 보호를 위해 암호 키가 OS 부팅 동안에 랜덤으로 생성될 수 있으며, 또한 해당 암호 키는 특정 이벤트에 기초하여 재생성되는 일회용 암호 키에 의해 보호될 수 있다. 특히, 특정 이벤트로 인하여 일회용 암호 키가 실수로 누설되는 경우에는, 그 특정 이벤트의 발생 시에, 일회용 암호 키가 재생성될 수 있다.
동작 630에서는, 컴파일러에 대한 플러그인이 설정되어 소스 코드 및/또는 컴파일된 바이너리의 함수들을 파싱함으로써 함수들을 식별하고 또한 그 식별된 함수들의 인수들을 출력한다. 이 함수들의 인수들이 식별됨으로써, 동작 740을 참조하여 아래에서 설명되는 바와 같은, 해당 함수 내의 미사용 레지스터들을 무단 변경(tampering)하는 것을 방지한다. 동작 640에서는, 멀티웨이 브랜치 함수를 디스에이블하도록 하는 컴파일러 옵션이 설정된다. 동작 640는 스위치문(switch statement)(즉, 코드 내의 스위치 명령)이 함수의 임의의 포인트에서 시작되는 것을 방지하기 위해 제공된 것임에 유의한다. 컴파일러 설정들 및 옵션들을 설정한 이후에는, 소스 코드를 컴파일하여 프로세서가 특정 동작들을 수행하게 하는 기계 명령들을 가진 바이너리 파일을 생성하도록 컴파일러가 설정된다. 몇몇 예들에서, 바이너리는 그 운영 체제 커널 내에서 실행할 애플리케이션들에 대한 인터페이스를 제공하는, 운영 체제 커널일 수 있다.
도 7은 본 발명의 다양한 실시예들에 따른 보안 제어 흐름을 위해 바이너리를 처리하는 방법의 흐름도이다.
동작 540의 예시적 구현인, 도 7을 참조하면, 바이너리가 컴파일된 이후에, 바이너리를 변경하여 제어 흐름 익스플로잇을 방지한다. 특히, 후-처리 애플리케이션으로 지칭되는, 별도의 실행 가능 파일이 바이너리를 변경하여 바이너리의 명령들을 추가, 삭제, 및 편집함으로써 제어 흐름 익스플로잇을 방지한다. 특히, 후-처리 애플리케이션은 역컴파일된 바이너리 정보 및 패턴 매칭을 사용함으로써, 변경되어야 할 명령들의 위치를 찾아낼 수 있다. 아래에서는 명령 식별을 위해 후-처리가 사용되겠지만, 유사한 문제점들을 야기할 수 있는 다른 명령들에도 본 발명이 적용될 수 있다. 아래의 명령들이 ARM64에 관한 것이지만, 본 발명은 유사한 익스플로잇을 방지하기 위한 다른 아키텍처들에도 적용될 수 있다.
동작 710에서는, 예비 레지스터(또는 예비 레지스터들)의 값을 메모리에 카피하는 명령들을 후-처리 애플리케이션이 식별한 후에, 그 식별된 명령들 각각을 삭제할 수 있다. 레지스터가 컴파일러에 예비되어 있는 경우라도 특정 이벤트가 발생할 경우에는 몇몇 함수들이 레지스터의 컨텐츠를 공개할 수 있다. 예를 들어, 예외(exception)가 커널 공간에서 발생할 경우에는, 저-레벨 코드가 모든 레지스터들을 메모리에 저장할 수 있으며, 이 경우, 예비 레지스터의 컨텐츠가 의도치 않게 공격자에게 이용될 수 있다. 따라서, 예비 레지스터의 컨텐츠가 누설되는 것을 방지하기 위해서는, 예비 레지스터의 값을 메모리에 카피하는 명령들을 후-처리 애플리케이션이 삭제할 수 있다.
또한, 동작 710에서는, 리턴 주소를 저장하는 링크 레지스터 X30이 예비되는 것이 고려될 수 있으며, 그 이유는 이것이 비암호화된 리턴 주소를 저장하는 유일한 레지스터이기 때문이다. 따라서, 비암호화된 리턴 주소의 누설을 방지하기 위해, 동작 710에서, 레지스터 X30가 예비되는 것으로 고려될 수 있다.
동작 720에서는, 후-처리 애플리케이션이, 예비 레지스터에 저장된 암호 키를 사용하여 리턴 주소를 암호화 및 복호화하는 것에 의하여 바이너리 내의 브랜치 명령들을 처리함으로써, 제어 흐름 익스플로잇을 방지한다. 리턴 주소를 암호화하기 위해, 후-처리 애플리케이션은 저장 명령(예컨대, STP) 이전에 NOP(no operation) 명령을 XOR(exclusive or) 명령으로 변경함으로써, 컨텐츠를 암호화할 수 있다. 리턴 주소를 복호화하기 위해, 후-처리 애플리케이션은 로드 명령(예컨대, LDP) 이전에 NOP(no operation) 명령을 XOR(exclusive or) 명령으로 변경함으로써, 컨텐츠를 복호화할 수 있다. 따라서, 후-처리 애플리케이션은 바이너리 내의 브랜치 명령들을 식별하고, 레지스터로부터의 리턴 주소(예컨대, 링크 레지스터 X30이 리턴 주소를 저장)를 메모리에 카피하는 명령들을 식별하고, 리턴 주소가 메모리에 카피되기 이전에 리턴 주소를 암호화하는 명령들을 인서팅하고, 또한 메모리로부터 레지스터로 카피된 이후에 리턴 주소를 복호화하는 명령들을 인서팅한다. 동작 720을 사용하여, 경우에 따라 리턴-지향 프로그래밍으로 지칭되는 타입의 제어 흐름 변경을 방지할 수가 있다.
일 예에서는, 동작 720에 있어서, 이 암호화는 XOR(exclusive OR) 암호화이다. 암호 키가 사용자에 대해 사용될 수 없는 한, 공격자는 브랜치 명령의 리턴 주소를 얻을 수가 없으며, 이에 따라 공격자가 리턴 주소들을 하이재킹(hijacking)하는 것을 방지할 수 있다. 그러나, 공격자가 악성 리턴 주소를 인서팅할 수 있는 경우에는, XOR 복호화가 악성 리턴 주소로 하여금 미지의 값으로 변경되게 할 수 있으며, 이것은 전반적인 제어 흐름에 지장을 주게 되고 커널 크래시를 야기하게 된다.
암호화된 포인터 및 비암호화된 포인터가 누설될 경우(또는 알려지는 경우), 공격자는 이 값들에 XOR 연산을 적용하여 키를 재생성할 수가 있으며, 이에 따라 키가 누설되게 된다(즉, 키 누설). 예를 들어, 사용자 공간 내의 악성 애프리케이션이 메모리 공개 버그(예컨대, 버그 시스템 호출)를 포함하는 커널 코드를 실행할 수 있다. 이 예에 있어서, 실행이 커널 공간으로부터 사용자 공간 내의 악성 코드로 리턴될 경우에는, 공격자가 그 키를 발견하여, 실행할 커널 함수를 타겟팅할 수 있으며, 그 후에 메모리 주소를 오버라이트하는 메모리 쓰기 버그를 가진 다른 버그 시스템 호출(즉, 커널 공간으로의 재 트랜지션)을 발행할 수 있다. 따라서, 고정 암호 키는 제어 흐름을 보호하는데 충분하지 않을 수 있다. 그러나, 동작 510을 참조하여 위에서 설명한 바와 같이, 이 암호 키는 식별된 트랜지션 포인트들에서 계속하여 재생성되며 또한 암호화된 주소들이 계속하여 새로운 암호 키들로 재암호화되기 때문에, 임의의 누설된 키가 해커(hacker)에게 이용 가능하게 되기 이전에 그것이 재생성될 것이며, 이에 따라 임의의 공격자가 스택에 저장되어 있는 리턴 주소들을 복호화하는 것이 방지된다.
동작 730에서는, 허가된 스타트 포인트에서 함수 실행이 개시될 경우에 함수를 실행하는 인증 함수에 대한 직접 브랜치로 각각의 간접 브랜치(예컨대, BLR)를 대체하도록 하는 후-처리 애플리케이션이 설정된다. 함수가 허가된 스타트 포인트의 함수에 진입하지 않은 경우에는, 이 함수의 실행이 생략된다. 동작 730을 사용함으로써, 경우에 따라 점프-지향 프로그래밍으로 지칭되는 타입의 제어 흐름 변경을 방지할 수가 있다.
예를 들어, 동작 730에서는, NOP(no operation) 명령이 위에서 직접 컴파일한 함수를 인증 시퀀스로 대체하도록 하는 후-처리 애플리케이션이 설정된다. 이 인증 시퀀스는 정적 번호를 나타내며, 명령에 대응하지 않는다. 간접 브랜치 명령들 모두가 인증 함수에 대한 직접 브랜치로 대체되기 때문에, 이 인증 함수는, 간접 브랜치의 타겟 주소 이전에 32-비트 워드를 로드한다. 간접 브랜치의 타겟 주소 이전의 32-비트 워드가 인증 시퀀스에 대응하는 경우, 간접 브랜치 타겟이 함수의 시작인 것으로 인증 함수가 결정하게 된다. 그러나, 간접 브랜치의 타겟 주소 이전의 32-비트 워드가 인증 시퀀스에 대응하지 않는 경우에는, 오리지널 간접 브랜치 명령의 타겟은 함수의 시작이 아닌 것으로 인증 함수가 결정하게 된다.
동작 730의 함수는, 공격자가 함수의 엔트리 포인트에서 시작되고 함수의 첫 번째 간접 브랜치에서 종료되는 가젯을 형성하였음을 확인하기 위한 것이다. 이것은 공격자가 스택 상에 레지스터 인수들을 저장하고 이전의 스택 프레임들을 오버라이트하는 것을 방지한다.
바이너리의 함수들을 인증하는 명령들이 바이너리에 인서팅된 이후에, 동작 740에서는, 소스 코드에서 함수들을 식별하여 미사용 레지스터들을 제로화하도록 하는 후-처리 애플리케이션이 설정된다. 특히, 동작 630에서 전술한 바와 같이, 플러그인을 사용하여 추상적 신택스 템플릿(abstract syntax template)(.AST) 파일로부터 텍스트 파일로 정보를 변환하는 함수 정보를 생성한다. 동작 740 동안에는, 후-처리 애플리케이션이 생성된 텍스트 파일 내의 정보를 사용하여, 각 함수에서 사용되지 않은 레지스터들을 결정한 후에 각 미사용 레지스터들의 값을 제로화하는 명령들을 인서팅한다. 즉, 예를 들어, 후-처리 애플리케이션은 함수 내의 NOP(no operation) 명령을, 미사용 레지스터들의 값을 제로화하는 명령으로 대체할 수 있다. 전술한 바와 같이, 일반적으로 레지스터들 X0-X8이 각 함수의 인수들을 위해서 사용되며, 임의의 추가 인수들이 스택 상에 저장된다. 임의의 간접 브랜치 명령에서 사용되지 않는 레지스터를 제로화하는 것에 의하여, 간접 브랜치에 의해 형성되는 임의의 가젯 체인들이 디스럽트됨으로써 임의의 제어 흐름 익스플로잇을 방지하게 된다.
동작 730에서 함수들을 인증함으로써 가젯 상태를 디스럽트하고 또한 동작 740에서 레지스터들을 제로화한 이후에, 주소에 남아 있는 잔존 간접 브랜치 명령들은 스위치문에 기초하여 생성되는 코드이며, 일반적으로 이것은 멀티웨이 브랜치로 지칭된다. 그러나, 동작 630을 참조하여 위에서 설명한 바와 같이, 최적화된 멀티웨이 브랜치를 디스에이블하도록 하는 컴파일러 옵션이 설정될 수 있다. 따라서, 동작 740 이후에, 후-처리 애플리케이션은 바이너리 변경을 종료한다. 동작 740을 사용하여 프로그램 제어 흐름 변경에 사용되는 일반적인 기술인 가젯 체이닝을 방지할 수 있으며, 이에 따라 점프-지향 프로그래밍으로도 지칭되는 것을 달성할 수가 있다.
도 7의 방법에 의해 변경되는 바와 같은 바이너리는, 그들의 암호화 및 계속되는 암호 키들의 사이클링에 의하여, 리턴 주소들이 오버라이트되는 것을 방지한다. 또한, 이 바이너리는, 함수가 스타트 포인트에 진입한 것을 인증하여 가젯이 함께 체이닝되는 것을 방지하고 또한 임의의 사용된 레지스터들을 제로화함으로써, 공격자가 레지스터들에 변수를 저장하는 것을 방지한다.
도 8은 본 발명의 다양한 실시예들에 따른 보안 제어 흐름을 갖는 바이너리를 실행하는 방법의 흐름도이다.
도 8을 참조하면, 본 예시된 흐름도는, 바이너리로부터 실행할 명령들을 수신하며 공격자에 의한 실행 하이잭킹을 방지하는 메커니즘들을 제공할 시의 바이너리 제어 흐름을 도시한 것이다. 즉, 도 8의 흐름도는 전술한 바에 기초하여 커널의 제어 흐름이 영향을 받게 되는 방식을 나타낸 것이다. 도 8에 도시된 방법에서는 이미 행해지고 있는 종래 방식의 명령들에 대해서는 설명하지 않음에 유의한다. 예를 들어, 소스 코드 내의 함수가 종료될 경우, 컴파일러는 스택 상에 저장되어 있는 이전의 함수와 연관된 설정들로 프로세서를 재저장하는 명령들을 인서팅한다.
먼저, 동작 810에서 후속 명령을 수신하는 것에 의해서 본 방법이 시작된다. 후속 명령이 없는 경우에는, 본 방법이 종료된다. 후속 명령이 있을 경우, 동작 820에서, 본 방법은 이 명령이 리턴(브랜치로부터) 명령에 대응하는지 여부를 결정한다. 이 명령이 리턴 함수에 대응하는 경우, 동작 825에서, 본 방법은 레지스터의 값(예컨대, X30)에 기초하여 리턴 명령을 실행하고, 암호 키를 사용하여 프레임 포인터에 의해 식별되는 암호화된 리턴 주소를 레지스터(예컨대, 링크 레지스터 x30)로 복호화한다. 이 암호 키는 예비 레지스터에서 보호된다. 메모리 주소가 복호화된 이후에, 본 방법은 동작 810으로 리턴하여 후속 명령을 수신한다.
다시 동작 820를 참조하면, 그 명령이 리턴 명령이 아닐 경우, 동작 830에서, 본 방법은 이 명령이 트랜지션에 대응하는지 여부를 결정한다. 동작 830에서 이 명령이 트랜지션에 대응하는 경우, 본 방법은 동작 835에서 스택 내의 임의의 리턴 주소들을 재암호화한다. 구체적으로, 동작 835에서, 본 방법은 새로운 암호 키를 생성하고(예컨대, 사이클 카운터의 값을 사용하여), 이 새로운 암호 키에 기초하여 이전의 브랜치 명령들의 리턴 주소들을 재암호화하며(이것은 프레임 포인터를 사용하여 식별될 수 있음), 그 후에 트랜지션과 연관된 명령을 실행한다. 이 명령이 실행된 이후에, 본 방법은 동작 810으로 리턴하여 후속 명령을 수신한다.
다시 동작 830을 참조하면, 그 명령이 트랜지션에 대응하지 않는 경우, 동작 840에서, 본 방법은 이 명령이 직접 브랜치 명령에 대응하는지 여부를 결정한다. 동작 840에서 이 명령이 직접 브랜치에 대응하는 경우, 본 방법은 암호 키를 사용하여 레지스터(예컨대, 링크 레지스터 X30)에 저장되어 있는 리턴 주소를 스택 내에 암호화한 후에, 동작 855에서 그 명령을 실행한다. 이 명령이 실행된 이후에, 본 방법은 동작 810으로 리턴하여 후속 명령을 수신한다.
다시 동작 840을 참조하면, 그 명령이 직접 브랜치에 대응하지 않는 경우, 동작 850에서, 본 방법은 이 명령이 간접 브랜치 명령에 대응하는지 여부를 결정한다. 동작 850에서 이 명령이 간접 브랜치 명령에 대응하지 않는 경우, 본 방법은 동작 855에서 이 명령을 실행하고 나서 동작 810으로 리턴하여 후속 명령을 수신한다.
동작 850에서 이 명령이 간접 브랜치 명령에 대응하지 않는 경우, 본 방법은 동작 860에서 간접 브랜치 명령을 인증한다. 예를 들어, 본 방법은 간접 브랜치 명령의 주소가 함수의 스타트 포인트에 대응하는지 여부를 결정할 수 있다. 본 방법이 간접 브랜치 명령을 인증하지 않는 경우, 본 방법은 동작 865에서 이 명령의 실행을 생략하고 나서 동작 810으로 리턴하여 후속 명령을 수신한다. 본 방법이 간접 브랜치 명령을 인증하는 경우, 본 방법은 암호 키를 사용하여 레지스터 내의 리턴 주소를 스택으로 암호화하고, 그 명령을 실행하여 함수로 브랜치하며, 동작 870에서 그 함수의 미사용 레지스터들을 제로화한다. 미사용 레지스터들을 제로화한 이후에, 본 방법은 동작 810으로 리턴하여 후속 명령을 수신한다.
도 8에 도시된 방법은 공격자가 리턴 주소들을 적절히 복호화하는 것을 방지한다. 본 방법은 의사 랜덤 키에 기초하여 시간적 간격을 두고서 리턴 주소들을 재암호화하기 때문에, 리턴 주소들을 오버라이트하여 제어 흐름을 하이잭킹하는 공격이 불가능하다. 공격자가 리턴 주소를 오버라이트할 수 있는 경우에는, 인서팅된 리턴 주소가 복호화될 시에, 암호 키가 변경될 것이며, 그 결과 리턴 주소가 부정확하게 됨과 동시에 바이너리의 실행이 알려지지 않은 위치로 점프되며, 이에 따라 바이너리가 크래시(crash)로 된다. 또한, 본 방법은 애플리케이션들이 허가된 위치에서 시작되는 것을 강제하고 임의의 미사용 레지스터들을 삭제함으로써, 공격자가 함수들을 함께 체이닝하고 간접 브랜치들을 하이잭킹하는 것을 방지한다. 따라서, 공격자가 전술한 방법에 기초하는 제어 흐름을 커맨디어링(commandeering)하는 것이 불가능하게 된다.
전술한 설명으로부터 명백한 바와 같이, 정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하는 방법 및 전자 장치가 개시된다.
전술한 설명이 정적 바이너리 계측을 사용하여 컴파일 이후에 바이너리를 변경하는 것으로 기술하였지만, 본 발명은 전술한 정책들을 구현하는 컴파일러에 적용될 수 있다. 이 컴파일러는 자동적으로 또는 설정을 통하여 본 개시된 정책들을 구현할 수 있다.
본 명세서에서 사용된 용어 "모듈"은 예를 들어, 하드웨어, 소프트웨어 및 펌웨어 중 하나 또는 둘 이상 조합의 단위를 포함하는 일반 의미를 포함할 수 있다. 용어 "모듈"은 예를 들어, 유닛(unit), 로직(logic), 논리 블록(logical block), 컴포넌트(component), 또는 회로(circuit) 등의 용어와 상호 교환적으로 사용될 수 있다. "모듈"은, 일체로 구성된 부품의 최소 단위 또는 그 일부가 될 수 있다. "모듈"은 하나 이상의 기능을 수행하는 최소 단위 또는 그 일부가 될 수도 있다. "모듈"은 기계적으로 또는 전자적으로 구현될 수 있다. 예를 들어, "모듈"은, 알려졌거나 앞으로 개발될, 특정 동작들을 수행하는 ASIC(application-specific integrated circuit) 칩, FPGA(field-programmable gate array) 또는 프로그램 가능 논리 장치 중 적어도 하나를 포함할 수 있다.
본 발명의 다양한 실시예들에 따른 장치들의 적어도 일부(예를 들면, 모듈들 또는 그 기능들) 또는 방법들의 적어도 일부(예를 들면, 동작들)는, 예컨대, 프로그래밍 모듈의 형태로 컴퓨터 판독가능한 저장매체에 저장된 명령들로서 구현될 수 있다. 명령들이 프로세서에 의해 실행될 경우, 하나 이상의 프로세서들이 이 명령들에 해당하는 기능들을 실행할 수 있다. 컴퓨터 판독가능한 저장매체는 예를 들어, 메모리(130)가 될 수 있다.
컴퓨터 판독가능한 매체는, 하드디스크, 플로피디스크, 마그네틱 매체(magnetic media)(예를 들면, 자기테이프), 광기록 매체(optical media)(예를 들면, CD-ROM(compact disc ROM), DVD, 자기-광 매체(magneto-optical media)(예를 들면, 플롭티컬 디스크(floptical disk)), 하드웨어 장치(예를 들면, ROM, RAM, 또는 플래시 메모리 등) 등을 포함할 수 있다. 프로그램 명령들로는 컴파일러에 의해 만들어지는 기계어 코드 또는 인터프리터를 사용하여 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함할 수 있다. 전술한 하드웨어의 기능들은 다양한 실시예들에 따른 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 구현될 수 있으며, 그 역도 마찬가지다.
본 발명의 다양한 실시예들에 따른 모듈 또는 프로그래밍 모듈은 전술한 구성요소들 중 적어도 하나 이상을 포함하거나, 일부가 생략되거나, 또는 추가적인 다른 구성요소를 더 포함할 수 있다. 본 발명에 따른 모듈, 프로그래밍 모듈 또는 다른 구성요소에 의해 수행되는 동작들은 순차적, 병렬적, 반복적 또는 휴리스틱(heuristic)한 방법으로 실행될 수 있다. 또한, 일부 동작은 다른 순서로 실행되거나, 생략되거나, 또는 다른 동작이 추가될 수 있다. 본 명세서에 개시된 실시예들은 본 발명의 설명 및 이해를 위해 제시된 것이며, 본 발명의 범위를 한정하는 것이 아니다. 따라서, 본 발명의 범위는, 본 발명의 범위 내에 속하는 모든 변경들 또는 다양한 실시예들을 포함하는 것으로 해석되어야 한다.
본 발명이 다양한 실시예들을 참조하여 도시 및 설명되었지만, 첨부된 청구 범위 및 그 등가물에 의해 규정되는 바와 같은 본 발명의 사상 및 범위를 벗어나지 않는 범위 내에서는 형태 및 세부사항에서 각종 변형들이 이루어질 수 있다는 것을 당업자는 이해할 것이다.

Claims (29)

  1. 커널 제어 흐름 무결성 익스플로잇(exploits)을 방지하는 방법에 있어서,
    프로세서에 레지스터를 예비하도록 컴파일러를 설정하는 단계;
    상기 설정된 컴파일러를 기반으로 소스 코드를 바이너리로 컴파일하는 단계; 및
    상기 예비된 레지스터를 사용하여 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계를 포함하며,
    상기 예비된 레지스터는 리턴 주소(return address)들을 암호화 및 복호화하기 위한 제 1 암호 키를 저장함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  2. 제 1 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    상기 예비된 레지스터의 값을 메모리에 카피(copy)하도록 하는 명령들을 상기 바이너리에서 식별하는 단계; 및
    상기 바이너리로부터 상기 식별된 명령들 각각을 삭제하는 단계를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  3. 제 1 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    상기 바이너리에서 브랜치 명령(branch instruction)을 식별하는 단계;
    상기 제 1 암호 키를 기반으로 상기 식별된 브랜치 명령의 리턴 주소를 암호화하도록 하는 명령들을 상기 바이너리 내에 인서팅(inserting)하는 단계; 및
    상기 제 1 암호 키를 기반으로 상기 식별된 브랜치 명령의 리턴 주소를 복호화하도록 하는 명령들을 상기 바이너리 내에 인서팅하는 단계를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  4. 제 3 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    상기 바이너리에서 트랜지션 포인트(transition point)를 식별하는 단계; 및
    상기 바이너리 내에 명령들을 인서팅하는 단계를 포함하고,
    상기 바이너리 내에 명령들을 인서팅하는 단계는, 상기 식별된 트랜지션 포인트를 기반으로 메모리 주소들을 식별하고, 상기 제 1 암호 키를 기반으로 상기 식별된 메모리 주소들에 있는 리턴 주소들을 복호화하고, 제 2 암호 키를 기반으로 상기 식별된 메모리 주소들에 있는 리턴 주소들을 암호화하도록 하는 명령들인, 상기 명령들을 상기 바이너리 내에 인서팅하는 단계임을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  5. 제 4 항에 있어서, 상기 트랜지션 포인트는 커널 스레드 엔트리(kernel thread entry) 또는 사용자 스레드 엔트리(user thread entry)를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  6. 제 4 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    상기 프로세서의 사이클 카운터(cycle counter)를 기반으로 상기 제 2 암호 키를 생성하는 단계를 더 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  7. 제 1 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    제 1 주소에 대한 간접 브랜치 명령을 식별하는 단계; 및
    상기 제 1 주소와 관련된 함수를 선택적으로 실행하도록 하는 명령들을 상기 바이너리 내에 인서팅하는 단계를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  8. 제 7 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    인증 시퀀스를 상기 바이너리 내에 인서팅하는 단계;
    상기 제 1 주소 및 상기 인증 시퀀스를 기반으로 상기 함수를 인증하도록 하는 인증 함수를 인서팅하는 단계 및
    상기 식별된 간접 브랜치 명령을 상기 인증 함수에 대한 직접 브랜치 명령으로 대체하는 단계를 더 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  9. 제 8 항에 있어서, 상기 인증 시퀀스는 상기 함수의 스타트 포인트(start point)의 직전에 존재함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  10. 제 1 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    상기 소스 코드에서 함수를 식별하는 단계;
    상기 식별된 함수와 관련된 인수(argument)들의 넘버를 기반으로 제로(zero)화할 레지스터를 식별하는 단계; 및
    상기 식별된 함수에서 상기 식별된 레지스터를 제로화하도록 하는 명령들을 상기 바이너리 내에 인서팅하는 단계를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  11. 제 1 항에 있어서,
    상기 바이너리는 운영 체제의 커널을 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  12. 제 1 항에 있어서, 상기 익스플로잇을 방지하도록 상기 바이너리를 변경하는 단계는,
    바이너리 내에 있는 레지스터에 리턴 주소를 저장 및 로드(load)하도록 하는 명령들을 식별하는 단계;
    상기 제 1 암호 키를 기반으로 상기 리턴 주소가 메모리에 저장되기 이전에 상기 레지스터를 암호화하도록 하는 명령들을 상기 바이너리 내에 인서팅하는 단계; 및
    상기 제 1 암호 키를 기반으로 상기 리턴 주소가 메모리로부터 로드된 이후에 상기 레지스터를 복호화하도록 하는 명령들을 상기 바이너리 내에 인서팅하는 단계를 포함함을 특징으로 하는 커널 제어 흐름 무결성 익스플로잇 방지 방법.
  13. 전자 장치에 있어서,
    데이터를 저장하도록 구성되는 메모리; 및
    적어도 하나의 하드웨어 레지스터를 가진 프로세서를 포함하며,
    상기 프로세서는,
    프로세서에 레지스터를 예비하도록 하는 컴파일러 설정을 수신하고,
    상기 설정된 커파일러를 기반으로 소스 코드를 바이너리로 컴파일하며,
    상기 예비된 레지스터를 사용하여 익스플로잇을 방지하도록 상기 바이너리를 변경하도록 구성되며,
    상기 예비된 레지스터는 리턴 주소들을 암호화 및 복호화하기 위한 제 1 암호 키를 저장함을 특징으로 하는 전자 장치.
  14. 제 13 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    상기 예비된 레지스터의 값을 메모리에 카피하도록 하는 명령들을 상기 바이너리에서 식별하고,
    상기 바이너리로부터 상기 식별된 명령들 각각을 삭제하도록 더 구성됨을 특징으로 하는 전자 장치.
  15. 제 13 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    상기 바이너리에서 브랜치 명령을 식별하고,
    상기 제 1 암호 키를 기반으로 상기 식별된 브랜치 명령의 리턴 주소를 암호화하도록 하는 명령들을 상기 바이너리 내에 인서팅하며,
    상기 식별된 브랜치 명령의 리턴 주소를 복호화하도록 하는 명령들을 상기 바이너리 내에 인서팅하도록 더 구성됨을 특징으로 하는 전자 장치.
  16. 제 15 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    상기 바이너리에서 트랜지션 포인트를 식별하고,
    상기 식별된 트랜지션 포인트를 기반으로 메모리 주소들을 식별하고, 상기 제 1 암호 키를 기반으로 상기 식별된 메모리 주소들에 있는 리턴 주소들을 복호화하고, 제 2 암호 키를 기반으로 상기 식별된 메모리 주소들에 있는 리턴 주소들을 암호화하도록 하는 명령들인, 상기 명령들을 상기 바이너리 내에 인서팅하도록 더 구성됨을 특징으로 하는 전자 장치.
  17. 제 16 항에 있어서,
    상기 트랜지션 포인트는 커널 스레드 엔트리 또는 사용자 스레드 엔트리를 포함함을 특징으로 하는 전자 장치.
  18. 제 16 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는, 상기 프로세서의 사이클 카운터를 기반으로 상기 제 2 암호 키를 생성하도록 더 구성됨을 특징으로 하는 전자 장치.
  19. 제 13 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    제 1 주소에 대한 간접 브랜치 명령을 식별하고,
    상기 제 1 주소와 관련된 함수를 선택적으로 실행하도록 하는 명령들을 상기 바이너리 내에 인서팅하도록 더 구성됨을 특징으로 하는 전자 장치.
  20. 제 19 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    인증 시퀀스를 상기 바이너리 내에 인서팅하고,
    상기 제 1 주소 및 상기 인증 시퀀스를 기반으로 상기 함수를 인증하도록 하는 인증 함수를 인서팅하며,
    상기 식별된 간접 브랜치 명령을 상기 인증 함수에 대한 직접 브랜치 명령으로 대체하도록 더 구성됨을 특징으로 하는 전자 장치.
  21. 제 20 항에 있어서,
    상기 인증 시퀀스는 상기 함수의 스타트 포인트(start point)의 직전에 존재함을 특징으로 하는 전자 장치.
  22. 제 21 항에 있어서,
    상기 바이너리의 변경 동안에, 상기 프로세서는,
    상기 소스 코드에서 함수를 식별하고,
    상기 식별된 함수와 관련된 인수들의 넘버를 기반으로 제로화할 레지스터를 식별하며,
    상기 식별된 함수에서 상기 식별된 레지스터를 제로화하도록 하는 명령들을 상기 바이너리 내에 인서팅하도록 더 구성됨을 특징으로 하는 전자 장치.
  23. 제 13 항에 있어서,
    상기 바이너리는 운영 체제의 커널을 포함함을 특징으로 하는 전자 장치.
  24. 프로세서에서 바이너리를 실행하는 방법에 있어서,
    후속 명령을 수신하는 단계;
    상기 후속 명령이 특정 명령에 대응하는지의 여부를 결정하는 단계;
    상기 후속 명령이 리턴 명령에 대응하는 경우, 암호화된 리턴 주소들 세트 중의 제 1 암호화된 리턴 주소를 제 1 레지스터에 카피하고 제 1 암호 키를 기반ㅇ으로 제 1 리턴 주소를 복호화하는 단계;
    상기 후속 명령이 트랜지션 포인트에 대응하는 경우, 상기 제 1 암호 키를 기반으로 암호화된 리턴 주소들 세트를 복호화하고, 제 2 암호 키를 기반으로 리턴 주소들 세트를 암호화하는 단계; 및
    상기 후속 명령이 직접 브랜치 명령에 대응하는 경우, 상기 제 1 레지스터에서 제 2 주소를 암호화하고 또한 상기 암호화된 리턴 주소들 세트에 제 2 암호화된 리턴 주소를 추가하는 단계를 포함하고,
    상기 제 1 암호 키는 예비된 레지스터에 저장되고, 상기 암호화된 리턴 주소들 세트는 메모리에 저장됨을 특징으로 하는 실행 방법.
  25. 제 24 항에 있어서,
    상기 후속 명령이 상기 트랜지션 포인트에 대응하는 경우, 상기 프로세서의 사이클 카운터를 기반으로 상기 제 2 암호 키를 생성하는 단계를 더 포함함을 특징으로 하는 실행 방법.
  26. 제 25 항에 있어서,
    상기 트랜지션 포인트는 커널 스레드 엔트리 또는 사용자 스레드 엔트리를 포함함을 특징으로 하는 실행 방법.
  27. 제 26 항에 있어서,
    프레임 포인터를 트래버싱(traversing)하여 상기 암호화된 리턴 주소들 세트의 메모리 위치들을 식별하는 단계를 더 포함함을 특징으로 하는 실행 방법.
  28. 제 24 항에 있어서,
    상기 후속 명령이 간접 브랜치 명령에 대응하는 경우, 상기 간접 브랜치 명령과 관련된 주소가 함수의 스타트 포인트에 대응하는지의 여부를 결정하는 단계;
    상기 주소가 상기 함수의 스타트 포인트에 대응하는 경우, 상기 함수를 실행하는 단계; 및
    상기 주소가 상기 함수의 스타트 포인트에 대응하지 않는 경우, 상기 함수의 실행을 생략하는 단계를 더 포함함을 특징으로 하는 실행 방법.
  29. 제 28 항에 있어서,
    상기 후속 명령이 상기 간접 브랜치 명령에 대응하는 경우, 제로 값을, 상기 함수에 의해 사용되지 않는 적어도 하나의 레지스터 내에 인서팅하는 단계를 더 포함함을 특징으로 하는 실행 방법.
KR1020160151365A 2015-11-12 2016-11-14 정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치 KR102546601B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562254659P 2015-11-12 2015-11-12
US62/254,659 2015-11-12
US15/340,447 US10289842B2 (en) 2015-11-12 2016-11-01 Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US15/340,447 2016-11-01

Publications (2)

Publication Number Publication Date
KR20170055933A true KR20170055933A (ko) 2017-05-22
KR102546601B1 KR102546601B1 (ko) 2023-06-23

Family

ID=58690707

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160151365A KR102546601B1 (ko) 2015-11-12 2016-11-14 정적 바이너리 계측을 사용하여 커널 제어-흐름 무결성을 보호하기 위한 방법 및 장치

Country Status (2)

Country Link
US (2) US10289842B2 (ko)
KR (1) KR102546601B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190076217A (ko) 2017-12-22 2019-07-02 한국전자통신연구원 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법
KR20200142754A (ko) 2019-06-13 2020-12-23 경희대학교 산학협력단 반환 명령어 난독화 방법 및 난독화된 반환 명령어 실행방법
US10878086B2 (en) 2017-11-16 2020-12-29 Foundation Of Soongsil University-Industry Cooperation Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10289842B2 (en) * 2015-11-12 2019-05-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10275228B2 (en) * 2016-03-29 2019-04-30 International Business Machines Corporation Relaxing user-specified register constraints for improving register allocation
US10367639B2 (en) * 2016-12-29 2019-07-30 Intel Corporation Graphics processor with encrypted kernels
US10572666B2 (en) * 2017-04-20 2020-02-25 Microsoft Technology Licensing, Llc Return-oriented programming mitigation
US10706164B2 (en) * 2017-09-29 2020-07-07 Intel Corporation Crypto-enforced capabilities for isolation
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
EP3608805A1 (en) * 2018-08-06 2020-02-12 Argus Cyber Security Ltd Apparatus and method for embedded protection of executable code
US11231948B2 (en) * 2018-10-18 2022-01-25 Sternum Ltd. Applying security mitigation measures for stack corruption exploitation in intermediate code files
US10545850B1 (en) 2018-10-18 2020-01-28 Denso International America, Inc. System and methods for parallel execution and comparison of related processes for fault protection
US20200143043A1 (en) * 2018-11-07 2020-05-07 Raytheon Company Edge verification and elimination control flow integrity
BR102018077436A2 (pt) 2018-12-28 2020-07-07 Samsung Eletrônica da Amazônia Ltda. método de execução forçada de integridade de controle de fluxo em um binário monolítico usando análise estática
US20210182390A1 (en) * 2019-03-27 2021-06-17 Mark Winterrowd Memory management to reduce risk of malicious third-party attacks
EP3754526A1 (en) * 2019-06-18 2020-12-23 Gemalto Sa Method for controlling an execution flow of an application
CN110378117B (zh) * 2019-06-21 2022-12-30 华为技术有限公司 控制流完整性检测方法、装置及系统
CN112181491A (zh) * 2019-07-01 2021-01-05 华为技术有限公司 处理器及返回地址的处理方法
CN110457869B (zh) * 2019-07-23 2022-03-22 Oppo广东移动通信有限公司 程序编译加密方法、装置、存储介质及电子设备
JP2021092951A (ja) * 2019-12-10 2021-06-17 株式会社日立製作所 実行ファイル生成装置、方法、およびプログラム
JP7487535B2 (ja) * 2020-04-08 2024-05-21 富士通株式会社 演算処理装置
CN114168203B (zh) * 2020-09-10 2024-02-13 成都鼎桥通信技术有限公司 双系统运行状态控制方法、装置和电子设备
JP7031070B1 (ja) * 2021-02-19 2022-03-07 三菱電機株式会社 プログラム処理装置、プログラム処理方法、及び、プログラム
KR102514257B1 (ko) * 2021-02-19 2023-03-29 한국전자통신연구원 제어 흐름 무결성 위반 탐지 장치 및 방법
CN115017058B (zh) * 2022-08-04 2022-11-29 飞腾信息技术有限公司 一种内核模块的测试方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030065929A1 (en) * 2001-09-28 2003-04-03 Milliken Walter Clark Method and program for inhibiting attack upon a computer
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20100275034A1 (en) * 2005-02-11 2010-10-28 Simplex Major Sdn, Bhd. Software protection method
KR20150059564A (ko) * 2013-11-22 2015-06-01 삼성전자주식회사 전자 장치의 무결성 검증을 위한 방법, 저장 매체 및 전자 장치

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5530752A (en) * 1994-02-22 1996-06-25 Convex Computer Corporation Systems and methods for protecting software from unlicensed copying and use
US5883955A (en) * 1995-06-07 1999-03-16 Digital River, Inc. On-line try before you buy software distribution system
US6550058B1 (en) * 2000-02-03 2003-04-15 International Business Machines Corporation Stack clearing device and method
US20010052053A1 (en) * 2000-02-08 2001-12-13 Mario Nemirovsky Stream processing unit for a multi-streaming processor
US6711672B1 (en) * 2000-09-22 2004-03-23 Vmware, Inc. Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers
US6851110B2 (en) * 2001-06-07 2005-02-01 Hewlett-Packard Development Company, L.P. Optimizing an executable computer program having address-bridging code segments
US6983364B2 (en) * 2001-06-29 2006-01-03 Hewlett-Packard Development Company, Lp. System and method for restoring a secured terminal to default status
US6934943B2 (en) * 2001-10-18 2005-08-23 Hewlett-Packard Development Company Optimization of control transfers to dynamically loaded modules
US7752459B2 (en) 2001-12-06 2010-07-06 Novell, Inc. Pointguard: method and system for protecting programs against pointer corruption attacks
US7594111B2 (en) * 2002-12-19 2009-09-22 Massachusetts Institute Of Technology Secure execution of a computer program
CN1447244A (zh) * 2003-04-03 2003-10-08 杭州中天微系统有限公司 一种设计在cpu里的侦测缓冲区溢出的方法
US7272748B1 (en) * 2004-03-17 2007-09-18 Symantec Corporation Method and apparatus to detect and recover from a stack frame corruption
US7870201B2 (en) * 2004-12-03 2011-01-11 Clairmail Inc. Apparatus for executing an application function using a mail link and methods therefor
US7581089B1 (en) * 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US8650399B2 (en) * 2008-02-29 2014-02-11 Spansion Llc Memory device and chip set processor pairing
US8738932B2 (en) * 2009-01-16 2014-05-27 Teleputers, Llc System and method for processor-based security
CN102137096A (zh) * 2011-01-13 2011-07-27 华为技术有限公司 数据传输的方法和设备
US8832672B2 (en) * 2011-01-28 2014-09-09 International Business Machines Corporation Ensuring register availability for dynamic binary optimization
US20140173290A1 (en) * 2012-12-17 2014-06-19 Advanced Micro Devices, Inc. Return address tracking mechanism
US9037872B2 (en) * 2012-12-17 2015-05-19 Advanced Micro Devices, Inc. Hardware based return pointer encryption
IN2013MU01164A (ko) * 2013-03-26 2015-07-03 Tata Consultancy Services Ltd
US20160028767A1 (en) * 2014-07-25 2016-01-28 Jose Ismael Ripoll Method for Preventing Information Leaks on the Stack Smashing Protector Technique
JP6141242B2 (ja) * 2014-08-28 2017-06-07 三菱重工業株式会社 制御プログラム配信システム及びその方法
US9767272B2 (en) * 2014-10-20 2017-09-19 Intel Corporation Attack Protection for valid gadget control transfers
US9830162B2 (en) * 2014-12-15 2017-11-28 Intel Corporation Technologies for indirect branch target security
DE102015113468A1 (de) * 2015-08-14 2017-02-16 Infineon Technologies Ag Datenverarbeitungsvorrichtung und verfahren zum sichern einer datenverarbeitungsvorrichtung gegen angriffe
US10289842B2 (en) * 2015-11-12 2019-05-14 Samsung Electronics Co., Ltd. Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10409600B1 (en) * 2016-01-25 2019-09-10 Apple Inc. Return-oriented programming (ROP)/jump oriented programming (JOP) attack protection
US10360373B2 (en) * 2016-09-28 2019-07-23 Intel Corporation Return address encryption
US11003764B2 (en) * 2018-02-06 2021-05-11 Jayant Shukla System and method for exploiting attack detection by validating application stack at runtime

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030065929A1 (en) * 2001-09-28 2003-04-03 Milliken Walter Clark Method and program for inhibiting attack upon a computer
US20030217277A1 (en) * 2002-05-15 2003-11-20 Nokia, Inc. Preventing stack buffer overflow attacks
US20100275034A1 (en) * 2005-02-11 2010-10-28 Simplex Major Sdn, Bhd. Software protection method
KR20150059564A (ko) * 2013-11-22 2015-06-01 삼성전자주식회사 전자 장치의 무결성 검증을 위한 방법, 저장 매체 및 전자 장치

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10878086B2 (en) 2017-11-16 2020-12-29 Foundation Of Soongsil University-Industry Cooperation Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus
KR20190076217A (ko) 2017-12-22 2019-07-02 한국전자통신연구원 멀티 코어를 이용한 동적 바이너리 인스트루멘테이션 장치 및 방법
KR20200142754A (ko) 2019-06-13 2020-12-23 경희대학교 산학협력단 반환 명령어 난독화 방법 및 난독화된 반환 명령어 실행방법

Also Published As

Publication number Publication date
KR102546601B1 (ko) 2023-06-23
US10289842B2 (en) 2019-05-14
US20170140148A1 (en) 2017-05-18
US11120130B2 (en) 2021-09-14
US20190228149A1 (en) 2019-07-25

Similar Documents

Publication Publication Date Title
US11120130B2 (en) Method and apparatus for protecting kernel control-flow integrity using static binary instrumentation
US10853270B2 (en) Cryptographic pointer address encoding
EP3807797B1 (en) Pointer authentication and dynamic switching between pointer authentication regimes
CA2925733A1 (en) Encryption and decryption processing method, apparatus, and device
KR20170101159A (ko) 디바이스의 상태 기반 암호화 키를 위한 방법 및 디바이스
KR101820366B1 (ko) 메시지 인증 코드 태그들을 활용하는 시스템들에 사용하기 위한 롤백 공격들로부터의 데이터 무결성 보호
KR20160112316A (ko) 애플리케이션 보호 방법 및 장치
KR101953444B1 (ko) 하드웨어 수준 보안을 보장하는 가상화 기반 소프트웨어 보안 방법 및 이를 이용하는 장치
US10754931B2 (en) Methods for configuring security restrictions of a data processing system
CN110516445B (zh) 反检测恶意代码的识别方法、装置及存储介质
CN111143879A (zh) 一种Android平台SD卡文件保护方法、终端设备及存储介质
US20180181727A1 (en) Electronic device, method for controlling thereof and computer-readable recording medium
KR101556908B1 (ko) 프로그램 보호 장치
KR102018960B1 (ko) 이중 패킹을 이용한 코드 난독화
US11507668B2 (en) Cryptographic key security
CN113420340A (zh) 信息记录装置、计算机设备及信息记录方法
CN116954708A (zh) 系统镜像数据的处理方法、装置、设备及介质
CN114329354A (zh) 文件授权方法、装置、计算机设备和存储介质
CN115913766A (zh) 服务器加密方法、服务器解密方法、装置以及服务器

Legal Events

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