닌텐도 스위치 커스텀 펌웨어 - Nvidia 테그라 X1 칩셋의 RCM 모드와 Payload 주입이 중요한 이유.

닌텐도 스위치 커스텀 펌웨어 - Nvidia 테그라 X1 칩셋의 RCM 모드와 Payload 주입이 중요한 이유.

닌텐도 스위치 Custom firmware(커스텀 펌웨어)는 Atmosphere 를 설치하고, 필수 프런트 엔드인 Hekate 를 구성하는 과정에 블로그에서는 Kefir(케피르,케피어)라는 일종의 AIO(올인원)을 설치하는 것으로 추천하고 있습니다.

하드웨어 취약점을 가진 18년 7월 이전 구형 스위치를 기준으로 이젠 블로그에 정말 CFW 설치 과정만 남는 바람에 설명이 좀 부족한가? 싶은 생각에 조금 더 부연 설명을 해보도록 하겠습니다.

스위치의 커스텀 펌웨어 설치가 가능한 상황을 먼저 한번 보도록 하겠습니다.

 

💡
커스텀 펌웨어 설치가 가능한 경우
1. 스위치 커스텀 펌웨어를 동작시키기 위해서는 2018년 7월 이전 생산 기기를 보유하고 계신 경우.
2. 신형 기기인 경우 반드시 별도의 모드칩(SX Core , hwfly)등이 설치되어 NVIDIA 칩셋의 취약점인 RCM 모드로 진입이 가능해야만 합니다.

RCM 모드이며 개선판은 소프트웨어 커펌이 불가능하고 왜 반드시 신형 기기들은 모드칩을 설치해야 하는가?

이는 스위치의 복구모드에서 접근 가능한 하드웨어 취약점과 관련이 있습니다.

 

 

스위치의 RCM 모드와 Payload?

대표적인 RCM 모드 payload 주입 프로그램 TegraRcmGUI

스위치는 PC 의 CPU나 스마트폰의 AP와 같은 역할을 하는 Tegra(테그라) X1 프로세서를 사용하고 있습니다.

테그라 X1은 Nvidia사의 쉴드 TV부터 쉴드 태블릿, 쉴드 포터블 등 저전력 칩셋이 필요한 여러 기기들에 탑재되는 나름의 명기로 지금은 워낙 모바일 칩셋이 발전되어 게이밍 칩셋의 의미가 많이 약해진 프로세서지만.

과거 샤오미 미 패드 2등 실험적인 기기들까지 다양한 기기에 포터블 게이밍 기기라는 콘셉트로 탑재되어 사용되던 칩셋입니다.

여전히 Nvidia의 쉴드TV나 막내 격인 AI 개발용 보드인 젯슨 나노에서 여전히 현역으로 사용중이기도 합니다.

 

하지만 테그라 X1 출시 초기엔 호환성 문제로 시장 반응은 시큰둥하고 게이밍이라는 거창한 이름을 가진 칩셋치곤 쉴드 TV를 제외한 모든 쉴드 라인이 박살 났습니다.

적어도 스위치 출시 시점에는 이미 안드로이드 진영에서 나름 잔뼈도 굵고 그래픽 성능도 당시로선 여전히 준수했던 칩셋입니다.

(여전히 단종된 쉴드 포터블의 기기 중고가를 보면 당시 칩셋 성능 자체는 시대를 앞섰다고 볼 수 있습니다.)

게다가 덤으로 스위치 출시 당시에도 이미 7년이나 우려먹은 테그라 X1 프로세서는 나름 닌텐도 입장에선 가격도 합리적이었을 거라, 결과적으로 닌텐도와 Nvidia 두 회사 모두에게 최선의 선택이 되었을 거라 생각됩니다.

 

초기 안드로이드 OS로 출시를 점쳤던 이유도, 리니지 OS의 개발자들이 닌텐도 산하로 들어간다니 하는 두근두근한 루머들도 나오기 시작했었는데...

지금까지 안드로이드 기기에 주로 탑재되던 위 테그라 X1을 스위치가 사용한다는 이력 때문이기도 했습니다.

하지만 스위치는 결국 FreeBSD 기반의 자체 OS호라이즌 OS (HOS)라는 것으로 출시되었습니다.

 

테그라 X1 칩에는 안드로이드 스마트폰과 태블릿용으로도 출시된 바가 있다보니 이미 이름부터 복구모드 (ReCovery Mode,RCM) 인 RCM 이라는 복구 모드가 있습니다.

이는 스위치만을 위해 설계한 기능이 아니라 아이러니하게도 Nvidia사의 테그라 칩셋이 들어간 하드웨어라면 모두 가지고 있는 기능이기도 합니다.

위 모드로 부팅하게 되면 화면에 백 라이트조차 없이 아이폰의 DFU 모드처럼 검은 화면으로 다음 작업을 기다리는 상태가 됩니다.

여기까지는 태블릿 등의 장비를 출시했던 칩셋인 만큼 일반적인 스마트폰 등의 기기들과 별반 다를 바가 없는 일반적인 구조입니다.

그러나 닌텐도 스위치에는 물리적으로 홈 버튼 역할을 하는 버튼이 없어 안드로이드 기기처럼 조합 키를 통해 리커버리로 접근할 수가 없었습니다. 

그러나 스위치의 우측 조이콘 레일 중 1번 핀과 10번 핀, 또는7번10번 핀 등을 동시에 클립 등으로 쇼트시키면 마치 홈 버튼과 같은 효과를 낸 다는 것을 발견하곤 RCM으로 진입이 가능하다는 것도 금세 찾아냅니다.

  

결정타는 닌텐도 스위치가 부팅하기 위해서 부트 롬이라는 읽기 전용 ROM을 읽게 되는데, 위 코드의 예외처리가 부족한 점이 있었던 것으로 보입니다.

{re} switched 팀이 발견한 Fusée Gelée 라는 취약점은 RCM에서 본래 받아야 할 데이터의 사이즈인 최대 65,535 바이트 보다 더 큰 데이터를 전송하기만 하면 임의의 콯드를 실행할 수 있는 일종의 취약점을 발견합니다.

Nvidia 사의 Tegra X1 프로세서 전체 라인에 있는 콜드 부트 취약점이라 불리는 것으로 이를 통해 데이터가 부트 롬 내 치명적인 직접 메모리 접근(DMA) 버퍼로 메모리 오버플로우를 발생시킬 수 있습니다.

콜드 부트 취약점은 읽기 전용인 부트 롬에서 발생하는 문제이기 때문에 제조사에서는 소프트웨어 업데이트로 RCM의 취약점을 거꾸로 막을 수 있는 방법이 없습니다.

따라서 이미 초기부터 생산된 스위치 1480만 대는 언제든지 커펌을 사용할 수 있는 하드웨어 취약점을 가진 상태가 됩니다.

 

 

위처럼 강제로 메모리 오버플로우를 발생시키면 사실상 정상적인 동작이 아닌, 임의로 홈브류 등의 사용자 코드를 실행할 수 있는 상태가 되어 버립니다.

이때 SD카드 내 아트모스피어와 같은 추가 커펌 모듈들을 사용하기 위해 전송하는 파일이 일반적으로 payload (페이로드)라고 이해하시면 쉽습니다.

따라서 본의 아니게 RCMCFW(커스텀 펌웨어)에 대한 일종의 게이트웨이 역할을 하게 되었습니다.

 

 

이처럼 우리가 알고 있는 Atmosphere(아트모스피어) 같은 CFW들은 사실 페이로드 주입 후 아트모스피어 모듈을 추가로 구동하는 형태가 됩니다.

사실 일반적으로 커스텀 펌웨어를 설치한다!라는 느낌보다는 스위치의 호라이즌 OS를 완전히 교체하는 구조가 아닌, 그저 모듈만 덧붙여 기생하는 구조에 가깝습니다.

위와 같은 구조 덕분에 커스텀 펌웨어 설치 시 과거 PSP나 VITA 같은 소니의 헨카쿠와 유사한 상황이 됩니다.

바로 기기의 펌웨어 버전이 다른 무엇보다 중요하다는 것이 포인트입니다.

 

펌웨어 버전에 맞추어 커펌 파일의 내용들이 매 버전마다 추가되고 있는 형태이기 때문에, 엉뚱하게 반대로 펌웨어 버전보다 낮은 버전을 지원하는 커펌 파일로 어설프게 커펌을 시도하면 부팅조차 불가능한 문제들이 발생하게 되는 것입니다.

 

물론 18년 7월 이전 생산 기기가 아닌 경우에도 놀랍게도 복구 모드인 RCM에 진입하는 것은 정상적인 행위이니 언제나 가능합니다.

그러나 이후 부트 롬 문제를 수정하여 기존 페이로드 주입시 발생하는 오류를 막아 더 이상 커스텀 펌웨어 구동을 못하도록 수정되어있습니다.

스위치에 페이로드 파일을 아무리 전송해도 18년 7월 이후 생산분은 부트 롬에서 직접 제한하고 있기 때문에 기기에는 단순히 검은 화면만 나타나고 실제로는 아무런 변화가 없습니다.

물론 창과 방패의 싸움처럼 위 하드웨어 패치를 무력화하기 위해 SX CoreHwFly 같은 모드칩과 복제칩들이 계속 나타나고 있는 상황이기도 합니다.

💡
이처럼 커스텀 펌웨어라는 것을 구동하기 위해서는 RCM 모드에 진입하는 것은 기본이요.
이후 페이로드 주입 과정에 문제가 없어야만 커펌으로의 부팅 진행이 가능합니다.

 

 

덧붙여 댓글로도 많이 여쭤보시는데, 위 사진의 스위치 하단에 꽂혀있는 RCM 로더라는 페이로드 주입용 전용 장비?! 에 대한 오해가 있습니다.

이는 스위치의 커스텀 펌웨어 구조와는 아무런 관계없는 사실상 PC 대신 페이로드를 주입해 주는 편의 기기일 뿐입니다.

대체할 수단이 많으니 굳이 커펌을 위한 필수품으로 생각하지 않으셔도 됩니다.

오히려 페이로드를 주입하는 RCM 로더기 보단 우측 조이콘 레일에 장착해 홈 버튼과 같은 역할을 대신하는 RCM 지그가 오히려 필수품이라고 볼 수 있습니다.

 

 

도움이 되시길 바랍니다.

감사합니다.

비정기로 발행되는 추천 포스트를 이메일로 받아 보실 수 있습니다.

특별한 추천 포스트를 바로 이메일로 받아보세요. 물론 무료입니다!
좋아요! 받은 편지함을 확인하고 구독을 확인하려면 링크를 클릭하십시오.
오류! 유효한 이메일 주소를 입력하십시오!