RP2350의 광방출 유도 레이저 결함 주입을 통한 보안 디버그 접근
Ledger Donjon의 연구원들은 라즈베리파이 RP2350 마이크로컨트롤러(A4 리비전)에 성공적인 공격을 수행하여, 영구 디버그 비활성화 설정을 우회해 일회성 프로그래밍(OTP) 메모리에서 비밀을 복구했다. 이 공격은 광방출 현미경(PEM)과 레이저 결함 주입(LFI)의 조합을 활용하여 칩의 보안 강제 체인을 우회하고, 공격자가 보안 속성의 디버그 접근 권한을 얻게 했다.
취약점: DEBUGEN 오버라이드
RP2350의 보안 모델은 OTP 메모리에 저장된 영구적인 CRIT1.DEBUG_DISABLE 플래그에 의존한다. 이 플래그가 설정되면, 코어의 메모리 액세스 포트(Mem-APs)가 영구적으로 비활성화되어 외부 디버거가 시스템 버스에 접근하는 것을 방지한다.
그러나 하드웨어는 DEBUGEN이라는 메모리 매핑 레지스터를 포함하고 있으며, 이 레지스터는 이 영구적인 비활성화를 오버라이드할 수 있다. DEBUGEN 레지스터가 설정되면, 보안 소프트웨어가 Mem-APs를 다시 활성화할 수 있다. 연구원들은 OTP 보안 필드가 중복 인코딩과 다수 투표를 통해 실수나 악의적인 비트 전환을 방지하지만, DEBUGEN 레지스터는 이러한 보호 기능이 부족하다는 점을 발견했다. 이 중복 부족은 레지스터를 결함 주입의 고가치 대상으로 만들었다.
공격 방법론: PEM과 LFI
실리콘 다이에서 단일 레지스터 비트를 찾는 것은 '바늘 찾기'와 같은 문제이다. 이를 해결하기 위해 연구원들은 두 단계의 현장 식별 및 주입 프로세스를 사용했다.
1. 광방출 현미경(PEM)
트랜지스터는 상태를 전환할 때 약한 근적외선 광자를 방출한다. 보안 소프트웨어가 DEBUGEN 레지스터의 특정 비트를 루프로 토글하면서 고감도 카메라로 발생하는 방출을 캡처함으로써, 연구원들은 비트의 물리적 위치를 고정할 수 있었다. 서로 다른 비트 마스크 루프의 평균 스택을 빼내어 배경 노이즈를 제거하고, DEBUGEN 비트 0~3와 관련된 특정 위치를 고립시켰다.
2. 레이저 결함 주입(LFI)
공간 좌표가 식별된 후, 연구원들은 펄스 레이저(980 nm)를 사용하여 결함을 주입했다. 한 비트를 설정하면 다른 비트를 우연히 지울 수 있기 때문에, 반복적인 순서를 사용했다: PROC1(Mem-AP 활성화)의 위치를 펄스 처리한 후, PROC1_SECURE(보안 액세스 허용)의 위치를 펄스 처리하여 둘 다 설정될 때까지 반복했다.
이 과정을 통해 몇 초 내에 보안 디버그 접근이 가능해졌다. 연구원들은 정밀도를 위해 50배 목렌즈가 필요하다고 지적했으며, 20배 목렌즈는 너무 넓어 종종 '설정'과 '지우기' 영역을 동시에 타격하는 경우가 있었다.
OTP에서 비밀 복구
보안 디버그 접근이 가능해졌지만, 연구원들은 비밀을 포함한 OTP 페이지에 런타임 잠금이 걸려 있었다. 챌린지 구성에서는 펌웨어가 부팅 직후 sw_lock[48] 런타임 잠금을 적용하여, 보안 디버그를 포함한 모든 액세스를 불가능하게 만든다.
이를 우회하기 위해 연구원들은 RP-AP 구조 리셋을 활용했다. CTRL.RESCUE_RESTART 명령은 전체 시스템 리셋을 트리거하며, 부팅 ROM이 사용자 펌웨어가 실행되기 전에 프로세서를 정지하도록 표시한다. 런타임 잠금은 펌웨어에 의해만 적용되기 때문에, 구조 리셋은 OTP 페이지를 지속적인 잠금 상태(LOCK_S = READ_WRITE)로 복원하여, 펌웨어가 잠금을 강화하기 전에 이제 활성화된 보안 Mem-AP를 통해 비밀을 읽을 수 있게 했다.
완화 조치 및 제한 사항 분석
소프트웨어 기반 완화
연구원들은 소프트웨어 기반 완화 조치가 오직 '최선의 노력' 수준의 런타임 보호에 그칠 뿐이라고 결론지었다. 펌웨어가 ACCESSCTRL을 사용해 디버거 트랜잭션을 차단하거나, 주기적으로 DEBUGEN 레지스터를 확인해 실패 보안 리셋을 트리거할 수는 있지만, 구조 리셋은 펌웨어가 실행되기 전에 칩을 정지시키기 때문에 이 공격을 방지할 수 없다.
DEBUGEN_LOCK의 효과성
DEBUGEN_LOCK 레지스터는 DEBUGEN에 대한 실수적인 소프트웨어 쓰기 방지를 위해 설계되었지만, 레이저로 인한 변경을 막지 못했다. 레이저 펄스는 해당 잠금 비트가 1로 설정된 상태에서도 DEBUGEN 비트를 설정할 수 있었으며, 일부 경우에서는 펄스 자체가 잠금 비트를 설정하여 펌웨어가 나중에 비활성화된 상태를 복원하는 것을 방지했다.
공격 요구사항 및 영향
이 공격은 매우 타겟된 공격이며, 상당한 자원이 필요하다:
- 물리적 접근: 장치는 뒷면 디캡슐레이션(패키지 제거로 실리콘 기판 노출)이 필요하다.
- 장비: Ledger Donjon이 설명한 설정은 약 $250,000의 비용이 든다.
- 전문 지식: 샘플 준비, 다이 탐색, 레이저 결함 주입에 대한 고급 지식이 필요하다.
높은 비용에도 불구하고, 커뮤니티 논의에서는 유사한 공격이 더 낮은 비용의 홈랩 장비(예: PicoEMP 같은 도구를 사용해 다른 유형의 결함을 유도)로 재현될 수 있거나, 좌표가 알려진 후 스캐터샷 접근 방식을 사용할 수 있다는 제안이 있다.
결론
RP2350 공격은 보안이 전체 강제 경로에 의존한다는 중요한 시스템 수준의 교훈을 제시한다. 라즈베리파이 팀은 OTP 플래그에 대해 강력한 중복 투표를 구현했지만, 변경 가능한 DEBUGEN 레지스터와 구조 리셋 동작은 연구원들이 챌린지 비밀을 복구할 수 있는 취약점을 만들었다. 시스템의 보안은 단일 메커니즘의 실패가 아니라, 여러 문서화된 하드웨어 기능 간의 상호작용으로 인해 손상되었다.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch