Osegi
하드웨어·2 분 소요

Xiaomi Mi Smart Speaker root와 SSH, 부트로더 USB 창 활용

Marusya 탑재 Xiaomi Mi Smart Speaker에서 부트로더의 USB 창으로 root를 얻고, 재부팅 후에도 유지되는 SSH를 설치한 취미 개발자의 사례입니다.

Xiaomi Mi Smart Speaker with its board exposed and thin wires soldered to USB test pads, connected to a laptop.
이미지: Хабр

2021년 휴대폰 프로모션으로 받은 Xiaomi Mi Smart Speaker를 직접 쓰는 Linux 기기로 만들고 싶었다는 러시아 개발자가 있습니다. 그는 Xiaomi Mi Smart Speaker의 root 권한과, 일반 재부팅 뒤에도 남는 SSH를 확보했습니다. GUI, 명령줄, 소스 코드, 테스트를 갖춘 SpeakerLab 1.0도 함께 공개했습니다.

Xiaomi Mi Smart Speaker root 방식

이 보드는 Secure Boot가 켜져 있습니다. 다만 기본 부트로더는 boot 이미지 검증이 끝난 뒤 RAM의 데이터를 바꿀 수 있습니다. 이 틈에 임시 설치 프로그램을 실행합니다. 정식 커널과 DTB는 그대로 두고 initramfs만 소유자의 공개 SSH 키가 든 임시 버전으로 교체합니다. 서명을 위조하거나 OTP/eFuse 키를 바꾸지는 않습니다.

SSH 파일은 /data/speakerlab에 저장되고 기존 writable overlay로 실행됩니다. 부트로더와 커널은 다시 쓰지 않습니다. 하지만 /data에 파일을 쓰는 것은 같은 NAND의 영구적 변경이라, 메모리가 전혀 바뀌지 않는다고 말할 수는 없습니다.

어떤 스피커에서 되나요

확인된 것은 Marusya 버전의 AS09A VER0201 보드뿐입니다. Amlogic A113X SoC, 512MiB RAM, 펌웨어 32.23.1, U-Boot 2015.01, Buildroot 기반 Linux 4.9.113입니다. Google Assistant가 들어간 글로벌 모델은 파티션 구성과 시스템 소프트웨어가 달라 지원하지 않습니다.

전원을 완전히 껐다 켜는 콜드 부팅 직후 부트로더가 잠깐 USB로 보이며, PC에서는 1b8e:c003으로 인식됩니다. 도구가 대기하는 상태에서 전원을 껐다 켜야 하고, 소프트웨어 재부팅으로는 이 창이 열리지 않았습니다. 연결은 보드의 USB 패드(GND, D+, D-)를 쓰고 VBUS는 연결하지 않습니다.

먼저 전체 백업을 하는 이유

도구는 OOB 영역과 불량 블록을 포함해 131,072페이지 전체를 물리적으로 읽습니다. 한 번에 272MiB입니다. 덤프에는 네트워크 설정과 키 같은 개인 정보가 들어가므로 공개 아카이브에는 작성자의 덤프가 없습니다. BL33의 SHA256이 profile.json과 다르면 작업을 멈춥니다.

주목할 만한 앱

SUMO: 숫자 퍼즐

올바른 칸을 고르고 더해 목표 숫자를 맞추세요. 배우긴 쉽고 마스터하긴 어렵습니다. 무료, 전 연령.

태그:xiaomimi smart speakermaruskarootsshspeakerlab

같은 날의 다른 뉴스

전체 보기 →

관련 카테고리: 하드웨어

전체 보기 →