[논문 리뷰] Keyshuffling Attack for Persistent Early Code Execution in the Nintendo 3DS Secure Bootchain
이 논문은 니ntendo 3DS의 보안 부트체인에서 AES-128-ECB의 결정론적 복호화를 악용하여 기기의 보안 부트체인을 공격함으로써 초기 코드 실행을 지속적으로 가능하게 하는 키셔플링 공격을 제시한다. 암호화된 키스토어에서 Key #2를 조작함으로써 부트롬은 정상 펌웨어가 실행되기 전에 메모리에서 악성 패취드를 로드하고 실행하게 되며, 이로 인해 하드웨어 시크릿을 추출하고 장기적인 시스템 침해를 가능하게 한다.
We demonstrate an attack on the secure bootchain of the Nintendo 3DS in order to gain early code execution. The attack utilizes the block shuffling vulnerability of the ECB cipher mode to rearrange keys in the Nintendo 3DS's encrypted keystore. Because the shuffled keys will deterministically decrypt the encrypted firmware binary to incorrect plaintext data and execute it, and because the device's memory contents are kept between hard reboots, it is possible to reliably reach a branching instruction to a payload in memory. This payload, due to its execution by a privileged processor and its early execution, is able to extract the hash of hardware secrets necessary to decrypt the device's encrypted keystore and set up a persistent exploit of the system.
연구 동기 및 목표
- 니ntendo 3DS의 보안 부트체인을 공격하여 초기이자 지속적인 코드 실행을 실현하는 실용적 공격을 입증하기 위해.
- 키세크터 복호화 과정에서 AES-128-ECB 모드의 결정론적 성질을 악용하여 펌웨어 실행 흐름을 조작하기 위해.
- 부트롬이 FIRM0를 지우지 않은 채 FIRM1을 FIRM0 위에 로드하는 행동을 활용하여 악성 패취드를 설치하기 위해.
- 조기 실행을 통해 하드웨어 시크릿(예: OTP 해시)을 추출하고 재부팅 후에도 지속 가능한 백도어를 확립하기 위해.
- 적절히 구현되지 않은 경우, 기존 신뢰 체인을 약화시킬 수 있는 보안 계층(예: ARM9Loader 암호화)이 추가로 도입될 경우의 영향을 보여주기 위해.
제안 방법
- 암호화된 키스토어 내 키를 재배열하여 AES-128-ECB의 블록 수준 결정론적 성질을 악용, 잘못된 그러나 실행 가능한 코드로 펌웨어를 예측 가능하게 복호화하기 위해.
- Key #2를 브루트포스로 탐색하여, 10.2.0 펌웨어 바이너리의 복호화 결과로 8.1.0 펌웨어 바이너리의 끝에서 0x190 바이트 뒤의 메모리 위치를 향한 브랜치 명령어가 생성되도록 하는 값을 찾기 위해.
- 가공된 암호화된 Key #2를 키스토어에 설치하고, 계산된 오프셋에 맞춰 10.2.0 펌웨어 바이너리에 사용자 정의 패취드를 배치하기 위해.
- 부트롬의 후속 동작을 활용: FIRM0의 서명 검증에 실패할 경우, 메모리 클리어 없이 FIRM1이 FIRM0 위에 로드되기 때문에.
- 부트롬이 FIRM 파artitions를 복호화할 때 keyslot 0x06을 사용함으로써, 악성 패취드가 ARM9 펌웨어가 실행되기 이전에 로드되고 실행되도록 하기 위해.
- 부트 프로세스의 초기 단계에서 ARM9 펌웨어가 SHA_HASH 레지ист를 지우기 전에 패취드를 실행하여 OTP 해시를 추출하고 지속성을 확보하기 위해.
실험 결과
연구 질문
- RQ13DS 키스토어에서 AES-128-ECB의 결정론적 행동이 악성 패취드로의 코드 실행을 유도하는 데 악용될 수 있는가?
- RQ2FIRM0를 지우지 않은 채 FIRM1을 FIRM0 위에 로드하는 부트롬의 행동이 지속적인 코드 실행 벡터를 제공하는가?
- RQ3키스토어에 조작된 키가 존재할 경우, ARM9 펌웨어 바이너리가 손상되었지만 실행 가능한 상태로 복호화되어 제어 가능한 점프 타겟을 갖게 될 수 있는가?
- RQ4ARM9 펌웨어가 SHA_HASH 레지스트를 지우기 전에 하드웨어 시크릿(예: OTP 해시)을 추출하는 것이 가능한가?
- RQ5보안 부트체인에 추가 암호화 계층이 도입될 경우, 적절히 감사되지 않은 경우 새로운 공격 벡터가 얼마나 심각하게 발생할 수 있는가?
주요 결과
- 이 공격은 키스토어에서 AES-128-ECB의 결정론적 블록 복호화 성질을 악용하여 니ntendo 3DS에서 지속적인 초기 코드 실행을 성공적으로 달성하였다.
- 특정 Key #2가 브루트포스로 탐색되어, 10.2.0 펌웨어 바이너리의 복호화 결과로 8.1.0 펌웨어 바이너리의 끝에서 0x190 바이트 뒤의 메모리 위치를 향한 브랜치 명령어가 생성되도록 하였다.
- 부트롬이 FIRM0를 지우지 않은 채 FIRM1을 FIRM0 위에 로드함으로써, 패취드가 ARM9 펌웨어가 실행되기 이전에 안정적으로 실행되었다.
- 공격은 ARM9 펌웨어가 SHA_HASH 레지스트를 지우기 전에 OTP 해시를 추출할 수 있었으며, 이로 인해 전체 키 복구가 가능해졌다.
- 버전 9.6.0에서 ARM9Loader의 구현이 Key #2를 검증하지 않아 치명적인 결함이 발생하였고, 이는 키셔플링 공격을 가능하게 하였다.
- 이 공격은 새로운 보안 조치(예: ARM9Loader 암호화 계층)가 적절히 검증되지 않은 경우, 존재하는 신뢰 체인을 손상시킬 수 있음을 보여주었다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.