결함 주입 공격에 대한 소프트웨어 대응책
개요
마이크로컨트롤러 제품의 경우, 일반적으로 제품의 작동 조건을 제한하고 제품이 잘 작동할 수 있도록 제품 계획에서 해당 제품 사양을 설정합니다.
작동 조건이 제품 사양을 초과하면 시스템이 예상대로 작동하지 않을 수 있습니다. 이러한 상황은 일반적으로 악의적인 공격자가 시스템 취약점을 찾고 취약점을 사용하여 기본 보안 메커니즘을 우회하거나 보호된 데이터를 얻는 데 사용됩니다. 이 방법은 관련 공격 장치가 간단하고 구하기 쉬우며 비용이 저렴하며 대부분의 마이크로컨트롤러 프로젝트에서 공격이 작동하기 때문에 공격자가 일반적으로 사용합니다.
본 논문에서는 결함 주입 공격의 일반적인 방법과 그 개념을 소개합니다. 또한 하드웨어 비용을 증가시키지 않으면서 이러한 공격에 대한 가장 효과적인 소프트웨어 보호 대응책을 언급합니다. 이러한 대응책은 공격으로부터 마이크로컨트롤러 생산을 보호하는 간단하고 효과적인 방법을 제공할 수 있습니다.
결함 주입 공격으로 수행할 수 있는 작업 - 하드웨어 암호화 엔진 작동을 예로 들어보겠습니다.
스킵 인스트럭션 공격
제로 키 공격
일반적이고 저렴한 고장 주입 방식
결함 주입 공격은 침입 공격과 비침입 공격으로 구분할 수 있습니다.
침입 공격은 제품의 기능에 영구적인 결함과 이상을 초래할 수 있습니다. 제품의 내부 회로를 수정 및 파괴하는 것과 같은 침입 공격은 일반적으로 매우 정교한 도구가 필요합니다. 따라서 하드웨어 비용이 더 높고 기술적 지식이 더 많이 필요합니다.
비침입적 공격은 제품이 실행 중일 때 결함을 주입합니다. 따라서 작동 동작 기간에만 잠시 영향을 미치고 비정상적이거나 기능적인 장애를 초래합니다. 이러한 공격은 일반적으로 제품 입력 전압과 클럭 주파수를 간섭하여 실현됩니다.
이러한 공격은 짧은 시간 동안 전압과 클럭 주파수를 대상으로 하기 때문에 전압 결함과 클럭 결함이라고 합니다. 이 두 가지 공격 유형은 전압 및 클럭 신호에 대한 간섭을 생성할 수 있는 장비로 달성할 수 있으므로 침입 공격보다 비용이 훨씬 저렴하고 달성하기 쉽습니다.
전압 결함 공격
TrustZone® 구성 설정에 대한 전압 결함 공격
TrustZone® 기술이 적용된 마이크로컨트롤러 제품의 경우 메모리 파티션은 IDAU(구현 정의 속성 단위)와 SAU(보안 속성 단위)로 구성됩니다. 보안 속성은 SAU를 구성하여 보안(S), 비보안(NSC), 비보안 호출 가능(NSC)으로 구성할 수 있습니다. 이들의 목적은 보안 영역과 비보안 영역을 분리하여 보안 영역의 리소스를 보호하는 것입니다.
TrustZone®을 공격하기 위해 공격자는 SAU의 설정을 무효화하여 이러한 격리 보호 메커니즘을 해체하려고 시도합니다. 이는 시스템이 SAU 구성을 실행하는 동안 전압 결함을 주입하여 시스템이 SAU 설정 오류와 잘못된 SAU 구성을 실행함으로써 달성될 수 있습니다. 공격자는 잘못된 SAU 구성으로 인해 악용될 수 있는 취약점이 있을 수 있다고 생각합니다.
M2351 마이크로컨트롤러를 공격하려는 예를 들어, 전체 M2351 플래시 메모리 크기는 512KB입니다. 보안 영역 크기의 계획이 256KB인 경우 나머지 256KB 공간은 비보안에 속합니다. 메모리 매핑 주소는 아래에 나와 있습니다.
TrustZone® 보안/비보안 파티션
이 메모리 구성에서 보안 코드는 TrustZone® 기술의 하드웨어 격리를 활성화하여 비보안 코드와 분리됩니다. 격리 구성을 구현하려면 SAU의 구성 설정, 임베디드 플래시의 비보안 경계 설정, 상대 컴파일러 설정 등 세 가지 구성 단위를 설정해야 합니다.
SAU를 사용하여 비보안 영역에 대한 시작 및 종료 주소를 할당할 수 있습니다. 이 예에서 비보안 영역은 0x10040000에서 0x1007FFFF로 설정됩니다. 다른 영역은 기본적으로 보안된 것으로 간주됩니다. 비보안 경계 설정은 비보안 영역에 임베디드 플래시의 파티션을 설정하기 위한 것입니다. 이 경우 0x40000이 설정되며 시스템은 임베디드 플래시의 후반부에 비보안 영역에 256KB를 예약합니다. 비보안 경계는 공장에서 출발하기 전에 설정되며 배포 후 다시 변경해서는 안 됩니다.
보안 영역과 비보안 영역이 분리되어 있기 때문에 RO 베이스가 다르므로(그림 4 참조) 소프트웨어를 구축할 때 고려해야 합니다. 예를 들어, 보안을 위한 RO 베이스는 oxo-ox3FFFFF에 위치해야 하고 비보안을 위한 RO 베이스는 0x10040000-0x1007FFFF에 위치해야 합니다. 이 경우 보안 RO는 0x0을 기준으로 설정되고 비보안 RO는 0x10040000을 기준으로 설정됩니다.
위의 세 가지 구성 단위를 고려할 때 시스템이 실행 중일 때 SAU 설정만 작동하므로 전압 결함의 공격을 받을 가능성이 있습니다. SAU에 설정이 기록될 때 공격이 시작되면 명령이 실패하고 SAU의 설정이 잘못될 수 있습니다. 즉, 비보안 영역 설정이 실패하여 실제 SAU 비보안 영역 설정이 0x0이 됩니다. 이렇게 하면 다음 그림과 같이 시스템의 메모리 맵이 변경됩니다.
공격 SAU 설정 후 보안, 비보안 파티션
비보안 영역 시작 주소가 변조되었지만 0x0 ~ 0x0003_FFFF 메모리 속성은 비보안으로 변경되지 않습니다. 그 이유는 M2351에 구현 정의 귀속 단위(IDAU)라는 또 다른 고정 속성 설정 단위가 있고 0x0 ~ 0x0003_FFFF 영역에서 SAU보다 우선 순위가 높기 때문입니다.
SAU의 비보안 영역 설정이 0x0에서 0x0003_FFFF인 경우, 0x0에서 0x0003_FFFF의 최종 속성은 IDAU에 따라 정의됩니다. 즉, SAU에 대한 공격이 성공하여 비보안 영역 시작 주소가 0x0으로 설정되더라도 원래 보안 영역을 비보안 영역으로 변경할 수 없습니다. SAU에 대한 공격이 성공하면 보안 영역이 비보안 호출 가능 영역으로 변경되고 비보안 호출 가능 영역도 보안 영역에 속합니다.
또한 SAU에 대한 공격이 성공하면 대부분의 보안 영역이 비보안 호출 가능 영역으로 변환되지만, SG(보안 게이트웨이) 지침이 없기 때문에 비보안 호출 가능 기능을 사용하여 비보안 코드로 이러한 영역을 활용할 수 없습니다.
M2351의 SAU에는 구성할 수 있는 총 8개의 영역이 있습니다. 그러나 8개의 영역은 겹쳐서는 안 됩니다. 겹쳐서 구성된 이러한 영역은 보안이 강제됩니다. 즉, 0x3F000~0x3FFFFF가 비보안 호출 가능 영역으로 설정된 경우 공격받은 SAU 영역인 0x0~0x107FFFF와 겹칩니다. 이 경우 0x3F000~0x3FFFF의 영역이 보안 영역으로 직접 설정되며 모든 비보안 호출 가능 API를 비보안 코드로 호출할 수 없게 됩니다.
요컨대, SAU 설정에 대한 공격은 비보안 코드에 대한 추가 권한을 얻을 수 없으며 비보안 호출 가능 API를 호출할 수 있는 권한도 잃게 됩니다. SAU 설정에 대한 공격이 성공하더라도 유효한 공격을 생성할 수 없습니다. 보안 지역 정보나 비보안 코드로 얻은 보안 권한은 공개되지 않습니다.
AES에 대한 전압 결함 공격
이 공격은 주로 전압 결함을 사용하여 AES 암호화 처리의 작동을 방해하여 AES 암호화가 잘못된 암호문을 생성하도록 합니다. AES 암호화를 수행하기 위한 기본 프로세스는 다음 그림과 같습니다.
AES 암호화 절차.
예를 들어, 시스템은 AES 키 작업을 실행할 때 전압 결함의 공격을 받아 입력 키가 무시되거나 키 값이 손상될 수 있습니다. 키가 성공적으로 설정되지 않으면 암호화 프로세스는 일반적으로 모두 0인 키로 등록 기본값을 사용합니다. 따라서 암호문은 제로 키로 쉽게 해독할 수 있습니다.
제로 키 결함 주입 공격
소프트웨어로 이러한 공격을 방지하는 방법
랜덤 딜레이 추가
실행 절차 랜덤 변경
그러나 공격자는 원하는 공격 목적을 달성하기 위해 특정 시점을 찾기 위해 오랫동안 오류를 시도할 수 있습니다. 소프트웨어가 시스템이 공격을 받고 있음을 감지할 수 있다면 공격에 대한 조치를 취함으로써 피해를 최소화할 수 있습니다.
다음 섹션에서는 이전 섹션에서 언급한 결함 주입의 예를 기반으로 소프트웨어 솔루션을 제공하고 시스템의 공격 여부와 해당 처리에 대한 탐지 메커니즘을 제안합니다.
공격 보호를 위한 주요 설정
TrustZone® 구성 공격의 이전 예는 공격자가 보안 및 비보안 지역 설정에 영향을 미치기 위해 SAU 구성 지침을 건너뛰어 보안 리소스에 액세스하려고 시도한다는 것을 보여줍니다. 보안 및 비보안 범위 설정은 SAU와 관련이 있지만 IDAU와 협력해야 하므로 SAU를 공격하면 보안 지역에 액세스할 수 있는 실행 가능한 권한을 얻을 수 없습니다. 그럼에도 불구하고 공격자가 SAU 설정을 성공적으로 공격할 수 없도록 해당 전략이 여기에서 제안됩니다.
이 보호의 주요 원칙은 비정상적인 SAU 구성을 감지하고 SAU 설정에 대한 공격을 무효화하기 위해 올바른 SAU 구성을 복원하는 것입니다.
가장 먼저 해야 할 일은 모든 SAU 설정에 대해 중복성으로 확인할 수 있는 비정상적인 SAU 설정을 감지하는 것입니다.
- 유효한 모든 시스템 SAU 설정을 기록합니다:
시스템 SAU 설정은 후속 단계에서 사용하기 위해 먼저 기록해야 하는 partition_M2351.h 내에서 미리 정의되어 있습니다. - 유효한 시스템 SAU 설정의 합을 계산합니다:
작업을 수행하기 위해 RBAR, RLAR, CTRL 등과 같은 유효한 SAU 설정을 더하면 체크섬 값이 표시됩니다. - 유효한 SAU 설정을 해당 SAU에 씁니다:
각 SAU 레지스터에 partition_M2351.h 내의 유효한 SAU 설정 및 속성을 기록합니다. - 설정된 모든 값을 읽고 SAU 영역에 기록된 체크섬을 계산합니다.
- SAU 설정이 올바른지 확인합니다:
2단계 및 4단계에서 계산된 체크섬 값을 확인하여 SAU 설정이 올바른지 확인할 수 있습니다.
위의 1, 2, 4, 5단계는 공격을 감지하고 결함을 복구하는 단계이며, 3단계는 아래 그림과 같이 원래 SAU 설정 절차입니다.
결함 주입 대책 흐름
제로 키 공격 및 AES 암호화 공격에 기반한 보호
제로 키 공격은 SAU 설정 공격과 유사합니다. 둘 다 소프트웨어 쓰기 작업을 무효화합니다. 이로 인해 시스템이 AES에 올바른 키를 쓸 수 없게 되고 AES가 기본 키 값을 사용하여 일반 텍스트를 암호화합니다.
또한 AES 암호화에 대한 공격은 잘못된 암호문을 생성하는 로딩 키를 손상시키도록 설계되었습니다. 그런 다음 공격자는 여러 가지 오류 암호문과 올바른 암호문 간의 관계를 분석합니다. 그런 다음 공격자는 DFA 분석 방법을 사용하여 시스템에 사용되는 암호화 키를 도출한 다음 암호문을 해독하여 일반 텍스트를 얻습니다.
AES 암호화 공격을 방어하기 위해 소프트웨어는 잘못된 키 또는 빈 키를 피하기 위해 AES 암호화 작업을 감지할 수 있습니다. 잘못된 키로 생성된 출력 암호문도 DFA 분석을 위해 방지해야 합니다.
공격자는 키 로딩을 공격하기 전에 특정 시간을 가리켜야 합니다. 키 구성은 일반 텍스트를 입력하는 프로그램과 호환되므로 소프트웨어는 무작위 순서로 키를 변경할 수 있습니다. 따라서 공격자는 키 로딩 지점을 찾기가 더 어려워집니다.
AES 작업에 대한 공격은 키가 잘못 로드되도록 하는 데 초점을 맞추기 때문에 제로 키 또는 오류 키가 많든 상관없이 소프트웨어는 마지막에 레지스터에 키 로딩을 확인하여 정확성을 보장해야 합니다. 작업에 DMA가 사용되는 경우 DMA의 목적지 및 전송 횟수도 검사에 포함되어야 합니다.
암호화 작업에 키를 사용하는 공격의 경우, 동일한 키로 암호화한 직후 암호문을 해독하여 평문과 비교합니다. 즉, 소프트웨어는 비교 결과에 따라 암호화 프로세스에 오류가 있는지 확인할 수 있습니다.
전체 방위 대책 순서도는 다음과 같습니다.
AES 주요 결함 주입 대책 흐름
결론
결함 주입은 마이크로컨트롤러 제품을 위한 간단하고 효과적이며 비용이 저렴한 공격입니다. 유용한 결과를 완전히 얻으려면 공격이 보안 설정, 키 로딩 및 암호화 작업의 시점을 정확하게 찾을 수 있어야 합니다. 이는 공격자가 마이크로컨트롤러의 내부 프로그램에 익숙하지 않은 악의적인 공격의 경우 쉽지 않습니다. 또한 소프트웨어는 무작위 지연과 프로그램을 시차를 두어 프로그램의 특정 시점을 찾는 어려움을 높일 수도 있습니다.
공격자가 키 위치를 정확하게 찾더라도 소프트웨어는 프로그램에 자체 인증 절차를 추가하여 난이도를 높일 수 있습니다. 시스템의 중요한 설정과 키 로딩의 경우 해당 보호 기능을 추가하는 것이 가치 있는 일이 될 것입니다.