Search

KR-20260061415-A - 오류 주입 공격에 대해 소프트웨어 코드의 실행을 안전하게 보호하기 위한 방법

KR20260061415AKR 20260061415 AKR20260061415 AKR 20260061415AKR-20260061415-A

Abstract

본 발명은 오류 주입 공격에 대해 소프트웨어 코드의 함수 실행을 보호하기 위한 방법에 관한 것으로, 상기 방법은 하드웨어 프로세서를 포함하는 전자 시스템에 의해 수행되고, 상기 하드웨어 프로세서에 의해, - a) 실행될 상기 함수의 초기 컨텍스트를 저장하는 단계(S1), - b) 상기 함수를 적어도 두 번 연속적으로 실행하는 단계(S2) - 상기 초기 컨텍스트는 상기 함수의 연속적인 실행 후에 상기 함수의 컨텍스트로부터 계산된 적어도 두 개의 체크섬들 사이의 비교가 어떠한 오류 주입 공격의 영향도 상기 함수의 마지막 실행을 방해하지 않았음을 나타낼 때까지, 첫 번째 실행 이후의 각 실행 전에 복원됨 -, 및 - c) 상기 함수의 마지막 실행 결과를 상기 함수 실행 결과로서 유지하는 단계(S3)를 수행하는 것을 포함한다.

Inventors

  • 파오, 올리비에
  • 투르네르, 엘루앙
  • 뒤마, 뱅상

Assignees

  • 탈레스 DIS 프랑스 SAS

Dates

Publication Date
20260506
Application Date
20240913
Priority Date
20230913

Claims (8)

  1. 오류 주입 공격에 대해 소프트웨어 코드의 함수 실행을 보호하기 위한 방법으로서, 상기 방법은 하드웨어 프로세서(101)를 포함하는 전자 시스템(1)에 의해 수행되고, 상기 하드웨어 프로세서에 의해, - a) 실행될 상기 함수의 초기 컨텍스트를 저장하는 단계(S1), - b) 상기 함수를 적어도 두 번 연속적으로 실행하는 단계(S2) - 상기 초기 컨텍스트는, 상기 함수의 연속적인 실행 후에 상기 함수의 컨텍스트로부터 계산된 적어도 두 개의 체크섬들(checksum) 사이의 비교가 어떠한 오류 주입 공격의 영향도 상기 함수의 마지막 실행을 방해하지 않았음을 나타낼 때까지, 첫 번째 실행 이후의 각 실행 전에 복원됨 -, 및 - c) 상기 함수의 마지막 실행 결과를 상기 함수 실행 결과로서 유지하는 단계(S3)를 수행하는 것을 포함하는, 방법.
  2. 제1항에 있어서, 상기 컨텍스트는 하드웨어 프로세서 레지스터 콘텐츠, 스택 바이트, 전역 변수 값 또는 힙 콘텐츠 중의 요소를 포함하는, 방법.
  3. 제1항 또는 제2항에 있어서, 적어도 두 개의 체크섬의 비교는 상기 체크섬이 동일할 때 어떠한 오류 주입 공격의 영향도 상기 함수의 마지막 실행을 방해하지 않았음을 나타내는, 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 함수에 대한 공격을 사전에 검출하는 단계(S0)를 포함하는 방법.
  5. 제4항에 있어서, 상기 소프트웨어 코드는 상기 함수에 대한 호출 전에 상기 함수의 어드레스를 전역 변수에 저장하는 명령어를 포함하고, 상기 전자 시스템은 비휘발성 메모리를 포함하고, - 상기 전자 시스템에 대한 공격을 검출한 후, 상기 함수가 호출된 곳으로부터 어드레스를 검색하고 상기 검색된 어드레스를 상기 비휘발성 메모리에 저장하는 단계, - 상기 전자 시스템의 다음 시작 시: o 상기 함수에 대한 호출의 어드레스가 상기 비휘발성 메모리에 저장되어 있는지를 검사함으로써 상기 함수의 이전 실행 동안 공격이 발생했는지를 결정하고, o 상기 함수의 이전 실행 동안 공격이 발생했다고 결정되었을 때, 상기 비휘발성 메모리에 저장된 상기 어드레스에서 상기 함수에 대한 호출을, 상기 단계 a), b) 및 c)를 수행하는 새로운 함수에 대한 호출로 교체함으로써 상기 비휘발성 메모리 내의 소프트웨어 코드를 업데이트하는 단계 - 상기 함수를 실행하는 것은 상기 전역 변수에 저장된 어드레스에서 상기 함수를 호출함으로써 수행됨 -를 포함하는, 방법.
  6. 제1항 내지 제5항 중 어느 한 항의 방법에 의해 보호되고 복수의 함수에 대한 호출 및 상기 복수의 함수 중 제1 함수에 대한 호출 전에 상기 제1 함수의 어드레스를 전역 변수에 저장하는 명령어들을 포함하는 소프트웨어 코드에서 상기 제1 함수를 실행하기 위한 방법으로서, 상기 방법은 단계 a), b) 및 c)를 수행하는 함수(E1)를 호출하는 단계를 포함하고, 상기 제1 함수를 실행하는 것은 상기 전역 변수에 저장된 어드레스에서 상기 함수를 호출함으로써 수행되는, 방법.
  7. 적어도 하나의 컴퓨터의 메모리에 직접 로딩 가능한 컴퓨터 프로그램 제품으로서, 상기 제품이 상기 컴퓨터 상에서 실행될 때 제1항 내지 제6항 중 어느 한 항의 단계들을 수행하기 위한 소프트웨어 코드 명령어들을 포함하는, 컴퓨터 프로그램 제품.
  8. 제1항 내지 제6항 중 어느 한 항의 단계들을 수행하도록 구성된 하드웨어 프로세서를 포함하는 전자 시스템.

Description

오류 주입 공격에 대해 소프트웨어 코드의 실행을 안전하게 보호하기 위한 방법 본 발명은 오류 주입 공격에 대해 전자 디바이스에서의 소프트웨어 실행을 보안화하는 분야에 관한 것이다. 전자 디바이스에서의 소프트웨어 실행은 공격자가 전자 디바이스에서의 소프트웨어 코드 실행을 악의적으로 수정하거나, 비밀 암호화 키 또는 은행 정보와 같은 보안 디바이스에 저장된 민감한 데이터에 대한 지식을 획득하게 하는 다양한 공격의 대상이 될 수 있다. 공격의 특정 유형은 오류 주입 공격으로, 이는 공격자가 예를 들어 레이저를 사용하여 실행 오류를 자발적으로 발생시킴으로써, 공격자가 민감한 정보를 검색하거나 코드 실행 흐름을 방해할 수 있는 비정상적인 오류 상태로 전자 디바이스를 전환하는 것이다. 이러한 공격을 방지하거나 저항하기 위해 다양한 대응책이 설계되었다. 이러한 대응책은 예를 들어 다수의 실행 경로들 중 하나에서 공격이 발생했음을 검출할 수 있도록 하기 위해, 서로 다른 CPU 및 메모리들을 사용하여 동일한 명령어 흐름을 병렬로 적어도 두 번 실행하는 것을 수반할 수 있다. 이러한 대응책의 하나의 주요한 단점은, 동일한 명령어들의 병렬 다중 실행과 호환되는 하드웨어를 가진 적응된 디바이스를 사용하는 것을 요구한다는 점이다. 두 번째 단점은, 비록 그러한 대응책이 오류 주입 공격을 검출할 수 있더라도, 추가로 한 번 더 함수를 실행하는 것 없이 공격을 받은 함수의 정확한 실행 결과를 결정하는 것을 종종 가능하게 하지 못한다는 점이며, 이는 비용이 많이 든다. 또한, 전자 디바이스 전체에 영향을 미쳐 디바이스의 모든 병렬 실행 경로들 상에서 동일한 오류 효과를 생성하는 공격들에 대하여 보호 조치는 소용이 없다. 일부 보호 조치는 공격자가 자신의 공격이 검출되지 않을 때까지 오류 주입 공격을 수행하는 동안 동일한 함수를 끝없이 실행하는 것을 방지하기 위해, 허용된 최대 연속 실행 횟수를 설정하는 카운터에 기초한다. 이러한 카운터의 단점은 그것들이 조작될 수 있고 서비스 거부 목적으로 사용될 수 있거나 최대 실행 횟수에 도달했을 때 재설정될 수 있다는 것이다. 결과적으로, 특정 하드웨어를 요구하지 않고, 재시도 카운터를 사용하지 않으며; 실행 디바이스 전체에 영향을 미치는 오류 주입 공격에 대해 효율적인, 오류 주입 공격으로부터 함수의 실행을 보호하는 방법 및 디바이스가 필요하다. 따라서 이러한 목적을 위해 그리고 제1 양태에 따라, 본 발명은 오류 주입 공격에 대해 소프트웨어 코드의 함수 실행을 보호하기 위한 방법에 관한 것으로, 상기 방법은 하드웨어 프로세서를 포함하는 전자 시스템에 의해 수행되고, 상기 하드웨어 프로세서에 의해, - a) 실행될 상기 함수의 초기 컨텍스트를 저장하는 단계, - b) 상기 함수를 적어도 두 번 연속적으로 실행하는 단계 - 상기 초기 컨텍스트는 상기 함수의 연속적인 실행 후에 상기 함수의 컨텍스트로부터 계산된 적어도 두 개의 체크섬들(checksum) 사이의 비교가 어떠한 오류 주입 공격의 영향도 상기 함수의 마지막 실행을 방해하지 않았음을 나타낼 때까지, 첫 번째 실행 이후의 각 실행 전에 복원됨 -, 및 - c) 상기 함수의 마지막 실행 결과를 상기 함수 실행 결과로서 유지하는 단계를 수행하는 것을 포함한다. 이러한 방법은 공격이 발생했을 때를 검출하는 것과 공격이 발생하지 않은 것처럼 함수 실행의 정확성을 보장하는 것을 모두 가능하게 한다. 상기 컨텍스트는 하드웨어 프로세서 레지스터 콘텐츠, 스택 바이트, 정적 또는 전역 변수 값, 힙 콘텐츠 중의 요소들을 포함할 수 있다. 적어도 두 개의 체크섬의 비교는 상기 체크섬이 동일할 때 어떠한 오류 주입 공격의 영향도 상기 함수의 마지막 실행을 방해하지 않았음을 나타낼 수 있다. 일 실시예에서, 제1 양태에 따른 방법은 상기 함수에 대한 공격을 사전에 검출하는 단계를 포함할 수 있다. 본 실시예에서 상기 소프트웨어 코드는 상기 함수에 대한 호출 전에 상기 함수의 어드레스를 전역 변수에 저장하는 명령어를 포함할 수 있고, 상기 전자 시스템이 비휘발성 메모리를 포함하며, 제1 양태에 따른 방법은, - 상기 전자 시스템에 대한 공격을 검출한 후, 상기 함수가 호출된 곳으로부터 어드레스를 검색하고 상기 검색된 어드레스를 상기 비휘발성 메모리에 저장하는 단계, - 전자 시스템의 다음 시작 시: o 상기 함수에 대한 호출의 어드레스가 상기 비휘발성 메모리에 저장되어 있는지 검사함으로써 상기 함수의 이전 실행 동안 공격이 발생했는지를 결정하고, o 상기 함수의 이전 실행 동안 공격이 발생했다고 결정되었을 때, 상기 비휘발성 메모리에 저장된 상기 어드레스에서 상기 함수에 대한 호출을, 상기 단계 a), b) 및 c)를 수행하는 새로운 함수에 대한 호출로 교체함으로써 상기 비휘발성 메모리 내의 소프트웨어 코드를 업데이트하는 단계 - 상기 함수를 실행하는 단계는 상기 전역 변수에 저장된 어드레스에서 상기 함수를 호출함으로써 수행됨 -를 포함할 수 있다. 본 발명에 따른 보호를 활성화하는 이러한 방식은 기본적으로 비활성화 상태를 유지하고 함수의 마지막 실행에 대한 공격 검출에 대한 응답으로만 이를 활성화할 수 있도록 한다. 제2 양태에 따르면, 본 발명은 제1 양태에 따른 방법에 의해 보호되고 복수의 함수에 대한 호출 및 상기 복수의 함수 중 제1 함수에 대한 호출 전에 상기 제1 함수의 어드레스를 전역 변수에 저장하는 명령어들을 포함하는 소프트웨어 코드에서 상기 제 1함수를 실행하기 위한 방법에 관한 것이고, 상기 방법은 단계 a), b) 및 c)를 수행하는 함수를 호출하는 것을 포함하며, 상기 제1 함수를 실행하는 것은 상기 전역 변수에 저장된 어드레스에서 이를 호출함으로써 수행된다. 제3 양태에 따르면, 본 발명은 적어도 하나의 컴퓨터의 메모리에 직접 로딩 가능한 컴퓨터 프로그램 제품에 관한 것이며, 이는 상기 제품이 상기 컴퓨터에서 실행될 때 본 발명의 제1 및 제2 양태에 따른 방법의 단계를 수행하기 위한 소프트웨어 코드 명령어를 포함한다. 제4 양태에 따르면, 본 발명은 본 발명의 제1 및 제2 양태에 따른 방법들의 단계들을 수행하도록 구성된 하드웨어 프로세서를 포함하는 전자 시스템에 관한 것이다. 전술한 목적 및 관련된 목적의 달성을 위해, 하나 이상의 실시형태는 이하에 충분히 설명되고 청구항에서 특별히 주목된 특징을 포함한다. 하기 설명 및 첨부 도면은 특정 예시적인 양태를 상세히 제시하고, 실시형태의 원리가 채용될 수 있는 다양한 방법 중 몇 가지만을 나타낸다. 다른 장점 및 신규한 특징은 도면과 함께 고려될 때 하기 상세한 설명으로부터 명백해질 것이며, 개시된 실시형태는 그러한 모든 양태 및 이들의 균등물을 포함하도록 의도된다. 도 1은 본 발명에 따른 전자 시스템의 개략적인 예시이며; 도 2는 본 발명의 실시예에 따른 오류 주입 공격에 대해 소프트웨어 코드의 함수의 실행을 보호하기 위한 방법의 개략적인 예시이며; 도 3은 본 발명에 따른 도 2에 예시된 방법에 의해 보호되는 소프트웨어 코드에서 제1 함수를 실행하기 위한 방법의 개략적인 예시이다. 제1 양태에 따르면, 본 발명은 복수의 함수에 대한 호출을 포함하는 소프트웨어 코드의 전자 시스템(1)에 의한 실행을 오류 주입 공격으로부터 보호하기 위한 방법에 관한 것이다. 다음 단락들에서 "함수"라는 표현은 임의의 명령형 프로그래밍 언어의 함수, 객체 지향 프로그래밍 언어의 메서드, 루틴 등을 포괄하는, 프로그래밍된 임의의 연산 세트에 대한 일반적인 용어로서 사용된다. 이러한 전자 시스템은 도 1에 도시된 바와 같이, 보호될 소프트웨어 코드의 실행을 위한 하드웨어 프로세서(101), 및 소프트웨어 코드가 저장되는 비휘발성 메모리(NVM), RAM 메모리 및/또는 ROM 메모리와 같은 적어도 하나의 메모리(102)를 포함한다. 이러한 전자 시스템은 예를 들어 변조 방지 스마트카드, 스마트폰, 개인용 컴퓨터 또는 서버일 수 있다. 전자 시스템은 또한 하나 이상의 스크린, 확성기, 마우스, 터치 표면, 키보드 등과 같이 디바이스의 관리자에게 인터페이스를 제공하는 입력/출력 인터페이스(103)를 포함할 수 있다. 오류 주입 공격에 대해 소프트웨어 코드의 함수 실행을 보호하기 위해, 본 발명의 주된 아이디어는 이 함수를 여러 번 연속적으로, 순차적으로 실행하고, 이러한 다수의 실행 결과들을 비교하여 어떤 실행이 공격의 대상이 되었는지, 그리고 반대로 어떤 실행이 공격을 받지 않아 함수의 실행에 대한 올바른 결과를 출력하는 데 사용될 수 있는지를 검출하는 것이다. 함수의 실행들 중 하나 이상의 실행 동안 공격이 발생한 경우, 공격을 받지 않은 실행들은 모두 동일한 결과를 제공해야 하며, 반대로 공격을 받은 실행들은 서로 다른 결과들을 제공해야 한다. 따라서 동일한 함수의 충분히 많은 수의 실행을 순차적으로 수행하는 것은 어떤 실행들이 공격을 받았는지를 결정하고, 그 결과들을 폐기하며, 해당 함수의 다른 실행들에 의해 제공된 결과만을 해당 함수 실행의 결과로서 유지하게 한다. 병렬이 아닌 순차적으로 실행을 수행하는 것은 또한 첫 번째 실행 이후에 추가적인 실행들을 수행하기 위해 다수의 CPU 코어들이나 CPU들과 같은 추가의 하드웨어가 요구되지 않게 한다. 어떤 실행이 공격을 받았는지와 어떤 실행이 공격을 받지 않았는지를 결정하기 위해, 리던던시 계산을 수행하는 솔루션들은 종종 비용이 많이 들 수 있는 투표 로직 또는 결과들에 대한 통계적 분석에 의존한다. 더욱 효과적으로 하기 위해, 본 발명의 다른 아이디어는 공격에 의해 방해받지 않은 유효한 실행들만이 동일한 결과들을 제공할 가능성이 있다는 사실을 이용하는 것이다. 따라서, 본 발명은 오류 주입 공격들이 중단되었고 함수의 마지막 실행의 컨텍스트가 정상적이어서 정상적인 결과를 제공했다는 것을 검출하기 위해 마지막 실행들의 동일한 출력들만을 찾는다. 동일한 함수의 여러 번의 실행 결과들을 비교할 수 있게 하기 위해, 함수의 실행에 의해 수정되며 함수의 실행 동안 오류 주입 공격이 발생하는 경우 예상과 다른 값을 가질 수 있는 항목들의 값들을 비교해야 한다. 또한, 함수의 입력들은 동일한 함수의 각 새로운