전동킥보드 펌웨어를 Rust로 재작성
원제: Reverse engineering my e-scooter and rewriting the firmware in Rust
왜 중요한가
소비자 기기의 숨겨진 데이터 수집과 보안 결함을 역공학으로 규명한 사례로, IoT 기기 투명성 논의에 실질적 근거를 제시한다。
개발자 Ben Simms氏가 자신의 Egret GT 전동킥보드를 역공학하여 CAN bus 통신을 분석하고, 디스플레이 유닛용 커스텀 펌웨어를 Rust로 직접 작성하는 과정을 2026년 8월 9일에 블로그로 공개했다。USB-C 포트가 충전 전용이라는 제조사 설명과 달리 실제로는 CAN bus로 활용되고 있었다.
Simms氏는 핀 잠금 우회 가능성에 의문을 품고 Egret GT의 분석을 시작했다。전원을 켤 때 '아래' 버튼을 누르면 펌웨어 업데이트 모드로 진입하고, 해당 메뉴에서 탈출하면 PIN 없이 주행 모드가 활성화된다는 보안 결함을 먼저 확인했다.
먼저 모바일 앱의 Bluetooth 핸들러를 분석한 결과, 주행 모드별 사용 시간·배터리 전압·모터 전류 등 앱 화면에는 표시되지 않는 데이터가 제조사 서버로 전송되고 있음을 발견했다。또한 주행 총 시간과 주행 거리도 스쿠터 ID에 연결되어 전송되는데, 이 점은 앱에서 명시적으로 고지하지 않는다고 지적했다。45km/h 모델의 VIN을 스푸핑해 속도 제한 해제를 시도했으나 실패했다.
다음으로 디스플레이의 USB-C 포트를 분석했다。제조사는 스마트폰 충전 전용이라고 명시하고 있지만, USB-C 브레이크아웃 보드와 오실로스코프로 각 핀을 측정한 결과 두 핀이 CAN bus로 사용 중임을 밝혀냈다。이는 USB-C 규격에 비적합한 사용 방식이라고 Simms氏는 지적한다.
CAN bus 스니핑 장치는 ESP32-C6에 SN65HVD230과 MCP2515를 조합해 자체 제작했다。수신은 비동기 인터페이스를 지원하는 SN65HVD230이, 송신은 버스 오류 문제로 MCP2515가 담당하는 이중 트랜시버 구성을 택했다。이렇게 수집한 통신 데이터를 바탕으로 디스플레이 유닛용 커스텀 펌웨어를 Rust로 재작성했다。