KR101986028B1 - 코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법 - Google Patents

코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR101986028B1
KR101986028B1 KR1020177005656A KR20177005656A KR101986028B1 KR 101986028 B1 KR101986028 B1 KR 101986028B1 KR 1020177005656 A KR1020177005656 A KR 1020177005656A KR 20177005656 A KR20177005656 A KR 20177005656A KR 101986028 B1 KR101986028 B1 KR 101986028B1
Authority
KR
South Korea
Prior art keywords
code pointer
software code
processor
complement
pointer
Prior art date
Application number
KR1020177005656A
Other languages
English (en)
Other versions
KR20170038045A (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 KR20170038045A publication Critical patent/KR20170038045A/ko
Application granted granted Critical
Publication of KR101986028B1 publication Critical patent/KR101986028B1/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/52Monitoring 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
    • 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
    • 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/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • 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/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
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • 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
    • 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/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2135Metering

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)

Abstract

코드 포인터의 권한없는 조작에 대해 보호하기 위해, 코드 포인터가 검증될 수 있는 코드 포인터 보수를 유지하고 업데이트 함에 의해, 전자 장치의 프로세서를 작동시키기 위한 명령어를 가진 컴퓨터-판독가능한 저장 매체, 시스템, 방법이다. 그 밖의 다른 시스템과 방법이 개시된다.

Description

코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법{SYSTEM AND METHOD FOR PROTECTING A DEVICE AGAINST ATTACKS ON PROCESSING FLOW USING A CODE POINTER COMPLEMENT}
본 발명은 일반적으로, 코드 포인터를 조작함에 의하여, 전자 장치에서 실행하는 프로그램의 프로세싱 흐름을 방해하도록 설계된 공격에 대해, 전자 장치를 보호하는 것에 관한 것이며, 좀 더 구체적으로, 코드 포인터를 업데이트 함과 병렬적으로, 코드 포인터 보수를 업데이트 함에 의해, 프로세싱 흐름에 대한 공격으로부터 전자 장치를 보호하는 것에 관한 것이다.
전자 통신 및 디지털 상업 모두는 아직 강력하고 위험한 도구가 될 수 있다. 인터넷과 같은 네트워크 테크놀로지의 널리 퍼진 사용가능성으로, 통신 및 상업에 대한 온라인 도구에 의존하고 이러한 사용은 계속 증가하였다. 매년 더 많은 사용자들은 컴퓨터 및 컴퓨터 네트워크에 걸친 다른 계산 장치를 사용하여 중요한 거래를 더 쉽거나 빠르게 실행하는 것을 발견한다. 그러나, 전자 거래의 안전은 거래에 참가할 권리가 없는 제3자에 의한 방해를 통해 위협받을 수 있는 위험이 항상 있다. 악의적인 제3자가 다른 개인 거래와 데이터에 접근할 때, 경제적 손실, 프라이버시 침해 및 위태로운 물리적 안전의 위험이 있다.
안전 장치에 저장된 민감한 정보에 대한 공격의 하나의 유형은 버퍼 오버플로우 공격(Buffer Overflow Attack)이다. 버퍼 오버플로우는 스택 할당(stack allocation)에 기초한 공격 모델이다. 특정한 데이터 구조를 위해 할당된 공간의 외부에 데이터가 라이트될 때, 버퍼 오버플로우가 발생한다. 만일 운영 시스템이 이러한 데이터의 경계외의 라이팅에 대해 보호하지 않는다면, 공격자는 절차 호출(procedure call)을 위한 복귀 주소(return address)로 의도된 공간 내에 라이트할 수 있다. 그렇게 함에 의해, 공격자는 복귀(return)을 악성 코드로 리디렉트할 수 있고, 이는 타겟 코드와 동일한 허락과 특권으로 실행할 것이다. 그러므로, 악성 코드는 다르게 프로그램될 수 있는 임의의 기능을 수행할 수 있다. 하나의 메카니즘은 위협된 머신상의 리모트 쉘(remote shell)을 개방하는 것이다. 그 경우에, 주입된 악성 코드는 쉘코드라고 한다.
프로세싱 흐름에 대한 공격은 프로그램의 특정한 중요 부분을 회피하는데 종종 하용된다. 예를 들어, 많은 프로그램은 사용자가 프로그램을 실행하기 위해 권한을 주는 것을 검증하는 코드를 포함한다. 이러한 검증 코드를 우회하기 위해 프로세싱 흐름을 회피함에 의해, 악성 사용자는 정당한 사용자를 허용하는 필수적인 증명 없이, 프로그램을 사용할 수 있다.
내장형 운영 시스템 - 가령, 미국 캘리포니아 쿠퍼티노의 Apple Inc.의 IOS와 같은 - 에서, 어드레스-스페이스 레이아웃 랜도미제이션(ASLR)과 같은 일부 보호 또는 라이트할 수 없는 페이지 코드를 사용하는 것은 공격자가 악성 코드를 실행하기 위한 애플리케이션을 위조하는 것을 방해한다. 그러나, 이러한 기술은, 애플리케이션이 공격자에 의해 명시된 교호 순서로 실행하도록 하는 디버거를 사용하여, 기존 애플리케이션 코드를 추적함에 의해, 공격자에 의해 회피될 수 있다.
프로세싱-흐름 공격에 대한 또 다른 방어책은 직접적으로, 프로그램 내의 내장형 안전 대책을 포함한다. 이들 대책은, 코드의 중요한 섹션이 실행되었다는 것과 실행 순서가 정확한지를 검증하려는 시도로, 구체적이고, 종종 복잡한 기술을 사용한다. 이러한 유형의 안전 프로그래밍은, 수행될 수 있는 공격의 유형은 물론 이들 공격에 대한 효율적인 방어 방법 모두를 개발자가 이해해야 하기 때문에, 특수한 지식의 영역을 요구한다. 그러므로, 그 해결책과 관련된 적어도 두 개의 문제점이 있는데, (1) 이는, 개별 프로그램의 수정을 요구하고, 대책의 실행의 부담을 애플리케이션 개발자에게 지우고, (2) 이는, 개발 시간과 인력 요구에서 현저하고 과중한 비용을 추가한다. 더구나, 대부분의 경우, 이들 대책이 스킵된 코드나 그 밖의 다른 프로세싱 흐름 수정에 대해 완전히 보호한다는 보장이 없다.
상기 기술로부터, 계산적으로 효율적이고, 과도하게 큰 레지스터나 그 밖의 다른 저장소를 요하지 아니하며, 휴대용 안전 장치가, 버퍼 오버플로우, 스택 오버플로우, 쉘코드 공격 및 그 밖의 다른 코드 포인터 조작과 같은 프로세싱 흐름의 공격에 대해 보호하는 기능을 가질 수 있도록 하는, 안전 메카니즘을 제공하기 위해 개선된 기술에 대한 요구가 여전히 있다는 것은 명백할 것이다.
도 1은 모바일 전자 장치가 다른 모바일 전자 장치 및 데이터 서버에 연결되는, 텔레포니 네트워크의 개략도이다.
도 2는 모바일 전자 장치의 고레벨 아키텍처의 개략도이다.
도 3은 도 2의 모바일 전자 장치의 메모리 내에 저장된 프로그램의 개략도이다.
도 4는 프로그램 코드의 섹션 및 이와 관련된 본 발명에 따른 코드 포인터(code pointer) 및 코드 포인터 보수(code pointer complement)를 업데이트의 개략도이다.
도 5는 코드 포인터 보수를 계산하는 단계 및 프로그램의 실행 동안에 코드 포인터를 검증하기 위해 코드 포인터 보수를 사용하는 순서도이다.
이하 상세한 설명에서, 설명에 의해, 본 발명이 실시되는 특정한 실시예를 도시하는 첨부 도면을 참조한다. 이들 실시예는 기술 분야의 당업자가 본 발명을 실시할 수 있도록 충분히 자세하게 기술된다. 비록 서로 다르지만 본 발명의 다양한 실시예들은 상호 배타적일 필요는 없다는 것을 이해해야 한다. 예를 들어, 하나의 실시예와 관련된 본 명세서에 기술된 특별한 특성, 구조 또는 특징은 본 발명의 사상과 범위에서 벗어남 없이 다른 실시예에서 실행될 수 있다. 또한, 각각의 개시된 실시예에서의 개별 요소의 위치나 배치는 본 발명의 사상과 범위에서 벗어남 없이 수정될 수 있다. 그러므로, 이하의 상세한 설명은 제한적 의미로 받아들여서는 아니되며, 본 발명의 범위는 오직 첨부된 청구항, 적절히 해석되고 청구항이 자격을 부여하며 전체 범위를 따라 적절히 해석된 등가예에 의해서면 정의된다. 도면에서, 유사한 숫자는 여러 도면을 걸쳐 동일하거나 유사한 기능을 참조한다.
본 발명의 실시예에서, 스마트 카드와 모바일 텔레폰과 같은 전자 장치가 사용되어서 프로세싱 흐름을 변경시키는 공격에 대해 코드 포인터를 보호할 수 있는 기술이 제공된다. 이 기술에 의해, 애플리케이션 프로그램에 수정 없이 이러한 보호가 가능하다.
도 1은 가령, 모바일 장치에 연결되는 휴대용 안전 장치(109)가 있는 모바일 장치(103)를 하나 이상의 원격 서버(113)에 연결하는 네트워크(111)의 개략도이다. 설명을 위해, 우리는 휴대용 안전 장치(109)에서 사용될 수 있는, 본 명세서에 제시된 기술을 묘사한다. 그러나, 제시된 기술은 절차 호출과 관련된 제어의 흐름에 대한 공격에 처한 임의의 프로그램 가능한 전자 장치에 적용가능하다.
모바일 장치(103)는 네트워크에 걸쳐 서버(113)들 중 하나와 상호작용할 수 있는 사용자(101)에 의해 작동된다. 가령, 암호화 및 인증 작업과 같은 특정한 중요한 작업은 모바일 장치(103)에 의해 안전 장치(109)로 이루어질 수 있다.
도 2는 안전 장치(109)의 개략도이다. 안전 장치(109)는 버스(202)를 통해, 랜덤 액세스 메모리(RAM, 203), 리드 온리 메모리(ROM, 204) 및 비휘발성 메모리(NVM, 205)에 연결된 프로세서(201)를 포함할 수 있다. 안전 장치(109)는, 다시 버스(202)를 통해, 프로세서(201)를 커넥터(211)에 연결하기 위한 입출력 인터페이스(207)를 더 포함하고, 안전 장치(109)는 상기 커넥터에 의해 호스트 컴퓨터나 주변 장치에 연결될 수 있다.
ROM(204) 및/또는 NVM(205)은 도 3에 도시된 바와 같이 컴퓨터 프로그램(301)을 포함할 수 있다. 컴퓨터 프로그램(301)이 ROM(204) 또는 NVM(205)에 모두 함께 위치되는 것으로 기술되지만, 프로그램이 복수의 메모리에 걸쳐 퍼져있고, 심지어 RAM(203)에 임시적으로 설치될 수 있다는 이러한 제한이 없다. 게다가, 안전 장치(109)는 복수의 ROM 또는 NVM을 포함할 수 있다. 프로그램(301)은 안전 장치(109)에 로딩된 애플리케이션 프로그램은 물론 운영 시스템 프로그램을 포함한다. 또한, NVM(205) 또는 ROM(204)은, 기본 형태나 파생된 양으로 저장된, 개인용 키(209) 또는 공유된 비밀 키(210)와 같은 개인용 데이터는 물론, 계좌 번호와 같은 그 밖의 사용자-사적 정보를 포함할 수 있다.
안전 장치(109) 프로그램(301)은 암호 모듈(213), 사용자 인증 모듈(215), 통신 모듈(217) 및 운영 시스템(OS, 219)을 포함할 수 있다.
도 4는 본 발명에 따라 프로세스될 수 있는 프로그램 코드(401)의 섹션의 예시의 도면이다. 프로그램(401)은, 메모리 위치 0x0000에서 시작하고 이후에 명령어 0x0028에서의 브랜치이며 메모리 위치 0x1028에서 시작하는 코드의 또 다른 섹션인 복수의 순차적 명령어를 포함한다. 프로세서(201)가 코드 섹션을 실행할 때, 코드 포인터(CP)는 프로세서(201)에 의해 실행될 다음 명령어를 포인팅한다. 시초에, 참조 번호 403으로 표시된, CP는 프로세서가 0x0000에서 명령어를 다음에 실행한다는 것을 나타내는 값 0x0000를 가진다.
본 명세서에 제시된 기술의 실시예에 따르면, 프로세서(201)는 코드 프로세서 보수(CPC)도 유지한다. 도 5는 CP 및 CPC의 업데이트 및 검증을 나타내는 순서도이다.
CPC에는 초기값(Initial CPC 또는 ICPC)이 주어진다. 그러므로, 우선, 단계 501에서 ICPC가 값으로 주어진다. 이 값은 가령, 실행을 위해 애플리케이션을 로딩하면, 사전결정되거나 동적으로 할당될 수 있다. ICPC는 도 4의 예시에서와 같이, 가령, 0x5A5A와 같은 불규칙하거나 예측 불가능한 비트 패턴을 가지는 값으로 주어질 수 있다. 불규칙하거나 예측 불가능한 비트 패턴은 다른 패턴을 가지지 않는 비트의 시퀀스를 의미하는 것으로 의도된다. 이러한 불규칙한 비트 패턴(ICPC)이 현재 메카니즘에 대한 공격을 피하기 위해 바람직할 수 있지만, 메카니즘은 임의의 ICPC 값으로 작동한다.
단계 503에서, CPC는 초기에 ICPC로 설정된다.
루프(505)는 본 기술을 실행하기 위해 프로세서가 어떻게 명령어를 실행하는지를 나타낸다. 그러므로, 애플리케이션 프로그램의 흐름이 아닌 운영 시스템 또는 가상 머신이 어떻게 명령어를 실행하는 지를 나타내는 설명이다. 루프(505)는, 프로그램이 종료할 때까지, 프로세서(201)에 의해 해석되거나 실행되는 프로그램에 의해 명령받는 프로세스 흐름을 따르는 프로그램의 명령어에 걸쳐 루프된다.
루프(505)의 각각의 반복에 대하여, 단계 506에서, 코드 포인터(CP)에 의해 포인트된 명령어가 실행된다.
다음으로, CP는 증가, 오프셋만큼 진전되거나, 단계 507에서, 명령어의 타입으로부터 결정된 새로운 위치로 진전된다. 예를 들어, 논-브랜칭 명령어(non-branching instruction)에 대하여, 다음 명령어는 시퀀스에서 다음 명령어이고, CP로의 증가는 단순히 명령어의 길이이다. 이는 참조 번호 405에서 도면 4에 도시된다. 도시된 예시에서, 명령어는 8 바이트 길이여서, 다음 명령어는 0x0008이다. 브랜칭 명령어에 대하여, 다음 명령어는 현재 명령어로부터의 오프셋으로 명시될 수 있고, 또는 특정한 양에 의해 코드 포인터의 증가(또는 감소)를 야기할 수 있는 특정한 주소에 의해 명시될 수 있다. 브랜치 상황은 참조 번호 407과 409로 도 4에 도시된다. 407에서, CP는 0x0028이고, CPC는 0x5A32이다. 그 위치에서 브랜치는 0x1000 내지 0x1028 만큼 CP의 증가를 야기한다.
도 5로 되돌아 오면, 코드 포인터(CP)는 단계 509에서, 현재 CP로부터 결정된 오프셋만큼 증가되고, 이는 간단히 오프셋을 CP에 추가시킨다.
CP = CP + Offset
그러므로, 예를 들어, 명령어 0x0000에서 명령어 0x0008 까지, CP는 0x0008로 전진되고, 명령어 0x0028에서 명령어 0x1028까지, 오프셋은 0x1000이며, CP는 0x1028으로 전진(advanced)된다.
다음으로(또는 단계 509와 병렬로), 코드 포인터 보수(CPC)는 단계 511에서, 반대 명령어에 의해 동일한 오프셋 만큼 업데이트되는데, 가령,
CPC = CPC - Offset 이다.
그러므로, 도 4의 예시에 이어서, 0x0008(참조 번호 405)에서, CPC는 이전 CPC(0x5A5A)에서 0x5A52까지 계산된다.
CPC = 0x5A5A - 0x0008 = 0x5A52
브랜치 명령어 0x0028에서, CP 및 CPC의 전진의 시퀀스 이후에, CPC는 0x5A32(참조 번호 407)이다. 그리고 나서 브랜치 오프셋이 0x1000이고, 새로운 CPC는 0x4A32(참조 번호 409)으로 계산된다.
CPC = 0x5A32 - 0x1000 = 0x4A32
CP 및 CPC는 서로 다른 작업을 사용하여 업데이트 되어서, 작업들 중 하나에 대한 공격이 다른 작업에 영향을 주지 않도록 하고, 공격자는 오프세팅 공격을 제공하여서, 본 명세서에 기술된 공격 방어를 물리칠 것이다.
프로그램의 실행이나 해석 동안에, 다양한 포인트들에서, 코드 포인터는 코드 포인터 보수에 대해 검증될 수 있다. CP를 확인하는 것은 결정 박스(513)에 의해 도 5에 도시된다. CP가 확인되어야 하는지를 결정하는데 사용될 수 있는 많고 다양한 기준이 있는데, 예를 들어,
- 극단적으로, 모든 명령어 이후에 CP의 검증이 있을 수 있고,
- CP는 주기적, 가령, 매 n 명령어 이후 또는 명시된 시간 증가 이후에 확인될 수 있고,
- CP는 어떤 명령어 이후에, 가령, 절차 호출이 이루어지거나, 절차 호출로 되돌아 오면, 확인될 수 있고.
- 무작위로 될 수 있고,
- 프로그램 내에 특별한 명령어를 내장함에 의할 수 있다.
검증은 CP를 CPC에 추가하고, 초기 CPC(ICPC)에 대해 그 둘을 XOR함에 의해 결과를 단계 515에서 비교함에 의해 수행된다.
(CP ADD CPC) XOR ICPC
검증 결과가 제로이면, 즉, 조건 (CP ADD CPC) XOR ICPC = 0 이 사실이면, CP는 저절되지 않은것으로 검증되는데, 왜냐하면, CPC는 CPC의 정확한 보수이기 때문이다. 이러한 경우에, 실행 또는 해석은 계속될 수 있다.
그게 아니라면, 단계 517에서, CP가 부패(corrupted)되었거나 교정 액션(corrective action)이 취할 수 있다는 플래그(flag)가 올라간다. 교정 액션은 가령,
- 안전 장치(109)가 어떤 형태의 공격에 처했다는 것을 사용자에게 경고하는 것과,
- 장치가 공격에 처할 수 있다는 안전 장치(109)의 문제를 경고하는 것과,
- 안전 장치(109)를 비활성화시키는 것과,
- 안전 장치(109)와의 작업을 즉시 정지시키는 것과,
- 상기 교정 액션의 조합을 포함할 수 있다.
도 4와 5와 관련하여 본 명세서에 기술된 기술의 전진은, 코드 포인터가 의도적으로 조작하거나 어떤 기술적 문제를 통해 부패되는지에 무관하게, 부패된 코드 포인터가 안전 위협을 생성할 수 있는 애플리케이션에서 기술이 사용될 수 있다는 것이다. 예를 들어, 전기적 전력 글리치(glitch)는 레지스터 값이 변하도록 야기할 수 있다. 이러한 레지스터가 코드 포인터 레지스터라면, 프로그램은 부정확하게 실행할 것이다. 의료, 항공, 산업 자동화 및 군사 분야에서 사용되는 것과 같은 안전-중요 애플리케이션에서, 부정확한 프로그램 흐름에 의해 생성되는 문제점은 위험하게 확대될 수 있다. 그러므로, 단계 517에서, 즉, 코드 포인터 부패가 검출될 때, 교정 액션은 프로그램을 실행하는 것을 알려전 안전 포인트로 리셋하고, 어떤 경고 메세지를 제공하고, 오류를 신호 보내며, 부패 이벤트를 기록하고, 및/또는 추가 실행을 동결시킬 수 있다.
코드 포인터를 조작하는 공격에 대해 프로세서를 보호하기 위한 기술은 소프트웨어나 펌웨어 명령어에서, 가령, 안전 장치를 위한 프로그램을 해석하는 가상 머신에서나 안전 장치의 운영 시스템에서 실행될 수 있다. 명령어는 NVM(205) 또는 ROM(204)에 저장될 수 있다. 대안적으로, CPC의 검증은 가령, XOR 게이트와 AND 게이트의 조합으로, 프로세서(201) 내에 구축됨에 의해, 하드웨어에서 실행될 수 있다.
상기에서, 가령, 스마트 카드와 같은 안전 장치와 같은 프로그램 가능한 장치를 코드 포인터의 조작으로부터 보호하는 기술이 설명된다. 그러므로, 기술은 프로그램 제어 흐름을 변경시키는 공격을 방치하는 안티-위조 방법을 제공한다.
본 발명의 특정한 실시예가 기술되고 도시되더라도, 본 발명은 그렇게 기술되고 도시된 특정 형태나 부분들의 배열에 제한되지 않는다. 본 발명은 오직 청구항에 의해서만 제한된다.

Claims (11)

  1. 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법에 있어서, 상기 방법은,
    소프트웨어 코드 포인터 보수(code pointer complement)의 고정된 초기값을 설정하는 단계와,
    소프트웨어 코드 포인터 보수의 초기값으로 소프트웨어 코드 포인터 보수를 설정하는 단계와,
    소프트웨어 코드 포인터 값의 함수인 값으로 소프트웨어 코드 포인터 보수를 업데이트 하는 단계 - 소프트웨어 코드 포인터 보수를 업데이트 하는 단계는, 소프트웨어 코드 포인터에 추가된 오프셋과 동일하지만 반대의 오프셋으로 소프트웨어 코드 포인터 보수를 업데이트 하는 단계를 포함 - 와,
    소프트웨어 코드 포인터의 정확한 업데이트를 나타내는 검증 결과를 생성하기 위해, 소프트웨어 코드 포인터와 소프트웨어 코드 포인터 보수를 받는 함수를 사용하여 검증 계산을 수행하는 단계 - 검증 계산을 수행하는 단계는, 소프트웨어 코드 포인터 보수와 소프트웨어 코드 포인터를 추가하는 단계 및 추가하는 단계의 결과가 소프트웨어 코드 포인터 보수의 고정된 초기값에 대응되는지를 검증하는 단계를 포함 - 를 포함하는, 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법.
  2. 제 1 항에 있어서,
    검증 계산이 소프트웨어 코드 포인터의 조작을 나타낸다면, 정확한 액션을 취하는 단계를 더 포함하는, 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법.
  3. 제 2 항에 있어서, 상기 정확한 액션은, 잠재적 공격의 경고하는 것, 프로세서를 비활성시키는 것, 프로세서의 동작을 정지시키는 것, 및 안전 위치로 코드 포인터를 재설정하는 것으로부터 선택된 하나 이상의 액션을 취하는 것을 포함하는, 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법.
  4. 제 1 항에 있어서, 불규칙한 비트 패턴을 가진 값으로 코드 포인터 보수를 설정하는 단계를 더 포함하는, 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법.
  5. 제 1 항에 있어서, 상기 코드 포인터는 제1 작동을 사용하여 업데이트되고, 코드 포인터 보수는 제1 작동과 다른 제2 작동을 사용하여 업데이트되는, 공격으로부터 소프트웨어 코드 포인터를 보호하기 위해 프로세서를 작동시키는 방법.
  6. 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치에 있어서, 상기 전자 장치는 프로세서를 포함하며, 상기 프로세서는,
    소프트웨어 코드 포인터 보수(code pointer complement)의 고정된 초기값을 설정하고,
    소프트웨어 코드 포인터 보수의 고정된 초기값으로 소프트웨어 코드 포인터 보수를 설정하며,
    소프트웨어 코드 포인터 값의 함수인 값으로 소프트웨어 코드 포인터 보수를 업데이트 - 상기 프로세서는 소프트웨어 코드 포인터에 추가된 오프셋과 동일하지만 반대의 오프셋으로 소프트웨어 코드 포인터 보수를 업데이트함에 의해 소프트웨어 코드 포인터 보수를 업데이트함 - 하고,
    소프트웨어 코드 포인터의 정확한 업데이트를 나타내는 검증 결과를 생성하기 위해, 소프트웨어 코드 포인터와 소프트웨어 코드 포인터 보수를 받는 함수를 사용하여 검증 계산을 수행 - 상기 프로세서는, 소프트웨어 코드 포인터 보수와 소프트웨어 코드 포인터의 배타적-OR을 취하는 단계 및 배타적-OR의 결과가 소프트웨어 코드 포인터 보수의 고정된 초기값에 대응되는지를 검증하는 단계를 포함하는 검증 계산을 수행 - 하도록 프로그램된, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
  7. 제 6 항에 있어서,
    상기 프로세서는, 소프트웨어 코드 포인터에 추가된 오프셋과 동일하지만 반대의 오프셋으로 소프트웨어 코드 포인터 보수를 업데이트함에 의해 소프트웨어 코드 포인터 보수를 업데이트하도록 더욱 프로그램되고,
    상기 프로세서는, 소프트웨어 코드 포인터 보수와 소프트웨어 코드 포인터를 추가하는 단계 및 결과가 소프트웨어 코드 포인터 보수의 고정된 초기값에 대응되는지를 검증함으로써, 검증 계산을 수행하도록 더욱 프로그램된, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
  8. 제 6 항에 있어서, 상기 프로세서는, 불규칙한 비트 패턴을 가진 값으로 코드 포인터 보수를 설정하도록 더 프로그램되는, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
  9. 제 6 항에 있어서, 상기 코드 포인터는 제1 작동을 사용하여 업데이트되고, 코드 포인터 보수는 제1 작동과 다른 제2 작동을 사용하여 업데이트되는, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
  10. 제 6 항에 있어서,
    상기 프로세서는, 검증 계산이 소프트웨어 코드 포인터의 조작을 나타낸다면, 정확한 액션을 취하도록 더욱 프로그램된, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
  11. 제 10 항에 있어서, 상기 정확한 액션은, 잠재적 공격의 경고하는 것, 프로세서를 비활성시키는 것, 프로세서의 동작을 정지시키는 것, 및 안전 위치로 코드 포인터를 재설정하는 것으로부터 선택된 하나 이상의 액션을 취하는 것을 포함하는, 전자 장치에 의해 유지되는 소프트웨어 코드 포인터를 보호하기 위한 메카니즘을 가진 전자 장치.
KR1020177005656A 2014-09-02 2015-08-31 코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법 KR101986028B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP14306351.9A EP2993605A1 (en) 2014-09-02 2014-09-02 System and method for protecting a device against attacks on processing flow using a code pointer complement
EP14306351.9 2014-09-02
PCT/EP2015/069852 WO2016034537A1 (en) 2014-09-02 2015-08-31 System and method for protecting a device against attacks on processing flow using a code pointer complement

Publications (2)

Publication Number Publication Date
KR20170038045A KR20170038045A (ko) 2017-04-05
KR101986028B1 true KR101986028B1 (ko) 2019-06-04

Family

ID=52272980

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177005656A KR101986028B1 (ko) 2014-09-02 2015-08-31 코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법

Country Status (7)

Country Link
US (1) US10552602B2 (ko)
EP (2) EP2993605A1 (ko)
KR (1) KR101986028B1 (ko)
BR (1) BR112017003791B1 (ko)
CA (1) CA2958986C (ko)
MX (1) MX2017002724A (ko)
WO (1) WO2016034537A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108959071B (zh) * 2018-06-14 2021-09-24 湖南鼎源蓝剑信息科技有限公司 一种基于RASP的PHP变形webshell的检测方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040034823A1 (en) 2002-08-13 2004-02-19 Lsi Logic Corporation Embedded sequence checking
US20040210737A1 (en) * 2001-05-10 2004-10-21 Werner Ness Method for protecting a computer from the manipulation of register contents and a corresponding computer for carrying out this method
US20130326198A1 (en) 2012-05-30 2013-12-05 Stephan G. Meier Load-store dependency predictor pc hashing

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5845331A (en) * 1994-09-28 1998-12-01 Massachusetts Institute Of Technology Memory system including guarded pointers
US5930509A (en) * 1996-01-29 1999-07-27 Digital Equipment Corporation Method and apparatus for performing binary translation
US5870762A (en) * 1996-09-26 1999-02-09 Lee; Paul Error detection and recovery of database files
US7080249B1 (en) * 2000-04-25 2006-07-18 Microsoft Corporation Code integrity verification that includes one or more cycles
US20040021073A1 (en) * 2002-04-12 2004-02-05 California Institute Of Technology Apparatus and method for magnetic-based manipulation of microscopic particles
EP1870829B1 (en) * 2006-06-23 2014-12-03 Microsoft Corporation Securing software by enforcing data flow integrity
US8108856B2 (en) * 2007-03-30 2012-01-31 Intel Corporation Method and apparatus for adaptive integrity measurement of computer software
KR101413682B1 (ko) * 2007-04-13 2014-07-01 삼성전자주식회사 분기 명령 검증부를 구비한 중앙 처리 장치
US9378138B2 (en) * 2011-06-29 2016-06-28 International Business Machines Corporation Conservative garbage collection and access protection
US9477834B2 (en) * 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US9390264B2 (en) * 2014-04-18 2016-07-12 Qualcomm Incorporated Hardware-based stack control information protection
US20160381050A1 (en) * 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US9965619B2 (en) * 2015-07-13 2018-05-08 Intel Corporation Return address overflow buffer
TWI551984B (zh) * 2015-09-23 2016-10-01 國立交通大學 自動化探針建構系統及其方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040210737A1 (en) * 2001-05-10 2004-10-21 Werner Ness Method for protecting a computer from the manipulation of register contents and a corresponding computer for carrying out this method
US20040034823A1 (en) 2002-08-13 2004-02-19 Lsi Logic Corporation Embedded sequence checking
US20130326198A1 (en) 2012-05-30 2013-12-05 Stephan G. Meier Load-store dependency predictor pc hashing

Also Published As

Publication number Publication date
WO2016034537A1 (en) 2016-03-10
EP2993605A1 (en) 2016-03-09
BR112017003791A2 (pt) 2017-12-12
MX2017002724A (es) 2017-10-16
US10552602B2 (en) 2020-02-04
EP3195175B1 (en) 2018-08-29
CA2958986A1 (en) 2016-03-10
BR112017003791B1 (pt) 2023-02-23
US20170242999A1 (en) 2017-08-24
CA2958986C (en) 2019-06-04
EP3195175A1 (en) 2017-07-26
KR20170038045A (ko) 2017-04-05

Similar Documents

Publication Publication Date Title
Almakhdhub et al. $\mu $ RAI: Securing Embedded Systems with Return Address Integrity
EP3779745B1 (en) Code pointer authentication for hardware flow control
EP2795829B1 (en) Cryptographic system and methodology for securing software cryptography
TWI567580B (zh) 用於防止惡意軟體執行的方法與系統
US10354064B2 (en) Computer implemented method and a system for controlling dynamically the execution of a code
US9390264B2 (en) Hardware-based stack control information protection
JP2007529803A (ja) 周辺機器に対するアクセスを制御する方法およびデバイス
KR20150038574A (ko) 타겟 디바이스의 능동 모니터링, 메모리 보호 및 무결성 검증을 위한 방법, 시스템 및 컴퓨터 판독 가능 매체
CN109409086B (zh) 基于新增指令的检测堆栈中返回地址被篡改的装置
Ahmadvand et al. Practical integrity protection with oblivious hashing
KR101986028B1 (ko) 코드 포인터 보수를 사용하여 프로세싱 흐름에 대한 공격에 대해 장치를 보호하기 위한 시스템 및 방법
CN106922191B (zh) 生成和执行受保护的软件项目
WO2016198831A1 (en) Apparatus and methods for transitioning between a secure area and a less-secure area
Lackner et al. A defensive java card virtual machine to thwart fault attacks by microarchitectural support
CN115238308A (zh) 一种数据保护方法、装置、电子设备及存储介质
CN109409083B (zh) 检测堆栈中返回地址被篡改的装置
WO2016107802A1 (en) System and method for protecting a device against return-oriented programming attacks
Suciu et al. DroidSentry: Efficient code integrity and control flow verification on TrustZone devices
GB2541469A (en) Method and system for preventing unauthorized computer processing
US20160344753A1 (en) Method for instruction set morphing to inhibit malicious code injection
Hwang et al. Data Randomization for Multi-Variant Execution Environment
CN111480160A (zh) 过程验证
EP3009952A1 (en) System and method for protecting a device against attacks on procedure calls by encrypting arguments
EP2919146A1 (en) An apparatus for enforcing control flows
CN117972799A (zh) 一种应用于arm处理器的指针保护方法、计算机系统

Legal Events

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