이 글은 지식적으로 뭔가 알려드리는 건 없습니다.. 저도 하드웨어는 초보이기 때문에, 잘못되거나 엉성한 설명이 있을 수 있음에 유의해주세요!
대상 기기

- 신원 미상 제조사의 Tuya smart camera
- 구매 정보 : https://ko.aliexpress.com/item/1005006144740984.html?spm=a2g0o.order_list.order_list_main.5.efea140f1M91uK&gatewayAdapt=glo2kor#nav-specification
- TuyaOS는 RTOS(Real Time OS) , Linux , Non-OS 등 다양한 환경에서 실행 가능한 OS
하드웨어 분석
운이 좋게도 대부분의 칩에 제조사와 이름이 적혀있어서, 어떤 게 어떤 칩인지 식별할 수 있었습니다.
기타 모듈 외의 SoC나 Flash Memory, UART는 아래와 같이 식별되었습니다.
1. SoC (System on Chip)

- Realtek사의 RTS3917
- Tuya OS 의 Release note를 보면, development kit 3.10.0 버전에서 사용 가능한 SoC임을 알 수 있습니다.
- https://developer.tuya.com/en/docs/iot-device-dev/TuyaOS-Development-Process?id=Kbfjudewekgsv#title-5-IPC%20Development%20Framework
- Realtek 에서 만든 IPC용 SoC… 근데 공식 문서는 없음 이 칩을 언급하는 건 Tuya 문서 뿐

2. Flash Memory

사진 우측 상단
- Fudan Micro 사의 FM25Q128
- Datasheet가 공개되어 있음
- SPI(Serial Peripheral Interface) NOR Flash
- IoT에서 많이 사용되는 NOR flash
- SPI는 고속 속도와 간단함이 특징인 프로토콜 (Flash Memory에서는 주로 펌웨어/부트로더 저장에 쓰임)
3. UART

- 사진 좌측 상단
- RX, TX, GND가 적힌 부분이 UART
4. 결론


Firmware 추출
1. UART 로의 접근 (실패)
UART가 식별 가능했기 때문에, 가장 처음에는 UART로 shell을 떨어뜨려 획득하고자 했습니다
enter 키를 부팅 시 연타 하면 debug shell이 떨어지긴 했습니다.
다만 password를 입력 받고 있었고, 결과적으로 공개된 어떤 password로도 로그인이 되지 않았습니다.

https://developer.tuya.com/en/docs/iot-device-dev/matter_gw_over_ethernet?id=Kd312vy561p9c 에 따르면, U-Boot의 password를 바꾸는게 권장 사항인 것 같습니다.
2. Flash memory dump (성공)
우선 열풍기를 사용하여 flash memory를 떼어냅니다. (안 떼도 됐음)

기기가 작아서 Flash Memory가 엄청 작았습니다
그래서 테스트 클립 집게를 사서 찝도록 했습니다. 이 때 집게의 금속 부분에 칩의 다리가 잘 맞아야 하구요
그 과정에서 제 칩은 다리가 다 뿌러졌습니다..ㅠ 결국 하나 더 삼..

칩에는 전기가 공급되지 않기 때문에, 라즈베리파이와 전원, GND등을 연결해야 합니다.
빵판을 사용할건데, 사용법이 익숙하지 않아서 라즈베리파이로 불 키는 연습부터 합니다!

flash memory의 datasheet를 보면, 각 핀이 어떤 역할을 하는 지 알 수 있습니다.

구글링을 통해 라즈베리 파이에 아래와 같이 연결하면 된다는 것을 알아냅니다.
(출처 : https://hackyboiz.github.io/2025/03/09/newp1ayer48/flashrom/ko/)

왜인지는 모르겠으나 전구를 밝힐 때 GND에 저항을 연결했으므로, 여기서도 저항을 연결합니다.
미리 선을 연결해 놓은 모습입니다. 빨간 박스에 Flash memory를 연결할겁니다.

칩까지 연결한 모습

이렇게 연결하고, manufacture and Device Identification 조회 OP code(0x9F)를 전송하면, 아래와 같이 성공적으로 응답이 옵니다.

Datasheet에서 명시하는 값과 같죠?

이제 Flash memory를 dump떠봅시다
sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=2000 -V
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r [저장파일명]
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -c [Chip명] -r [저장파일명]
순서대로 입력하면 Flash memory dump가 완료됩니다..
마지막으로 binwalk해서 내용물을 추출하면 끝입니다!

사실 여기서 끝이 아니고, 추출된 OS가 암호화 되어있어서 복호화까지 수행해야 했습니다
그 부분은 기회 되면 나중에 작성하는 것으로 하겠습니다…
여담
글이 진짜 짧게 정리 되었지만, 진짜 좌충우돌이 많았습니다 ㅠ
- 장비가 없어서 다음을 기약하거나(이런 일이 진짜 많았음)
- 지식이 없어서 막히거나 (납땜 시도하다 고생하고)
하드웨어 장비는 또 국내에서 사면 비싸고 외국에서 사면 오래걸려서 ..
왜 안되는지 머리를 많이 싸맸습니다
함께 기기를 분석해주신 분들이 없었으면 기기에 무지한 저는 아무것도 못했을듯..
아직 펌웨어 추출만 했지만, 해내서 너무 기쁘네용 새로운 기술을 배우면 배울수록 너무 흥미로워요
다음에는 취약점을 찾아서 오도록 하겠습니다! 바이바이

댓글