플래시 메모리 칩 오프 기법을 이용한 펌웨어 추출 및 분석

R&D

•

2024.10.31

1️⃣ 펌웨어 분석의 접근 방법

IoT 장비 분석에서 가장 중요한 것은 장비의 펌웨어를 획득하고 분석할 수 있는 환경을 구축하는 것입니다. 이를 통해 장비에 적용된 바이너리를 분석하고 설정 등의 취약점을 식별하여 악용할 수 있습니다.



일반적으로 알려진 펌웨어 획득 방법은 다음과 같습니다:

  1. 업데이트 파일 다운로드 후, 파일 또는 파일 시스템 추출

  2. UART, JTAG 등 디버그 콘솔을 이용한 추출

  3. Flash Memory Chip Off를 통한 펌웨어 획득


이 글에서는 3번 방법에 대해 자세히 살펴보겠습니다. 1번과 2번 방법은 비교적 쉽게 접근할 수 있지만, 펌웨어 암호화나 디버깅 포트 제거와 같은 보안이 적용된 장비들도 있습니다. 이러한 보안이 적용되면 일반적인 펌웨어 추출 도구로는 파일 시스템이나 바이너리를 추출하기 어렵고, UART나 JTAG 같은 디버깅 포트도 제거되어 장비 접근이 까다로워집니다. 이런 경우 Command Injection 공격으로 강제로 Shell을 열 수 있지만, 이는 1번 작업이 선행되어야 효과적인 Command Injection Point 분석이 가능하다는 점을 유의해야 합니다.


Flash Memory Chip Off는 말 그대로 IoT 기기의 PCB 기판에 장착된 Flash Memory를 분리하고, 전용 장비나 아두이노, 라즈베리파이 등을 통해 메모리 칩을 읽어 덤프하는 작업입니다. Chip Off 작업을 수행하기 위해서는 열풍기, 납땜 장비, 솔더 페이스트 등의 추가 장비가 필요합니다.



2️⃣ Flash Memory의 종류

Flash memory는 크게 두 가지 종류로 나눌 수 있습니다:

  1. NOR Flash Memory

  2. NAND Flash Memory


NOR Flash Memory는 NAND Flash Memory보다 먼저 개발된 방식으로, NOT OR 로직을 이용하여 데이터를 처리합니다. 읽기 속도가 매우 빠르며, 바이트나 워드 단위로 데이터를 읽을 수 있어 메모리에서 프로그램을 직접 실행할 수 있는 장점이 있습니다. 각 바이트를 분리하여 셀 단위로 보관하기 때문에 안전성이 높지만, 대용량화가 어렵고 내용을 다시 쓰기 위해서는 셀 위치에 임의로 접근할 수 없어 일일이 지우고 쓰는 작업이 필요하므로 쓰기 속도가 NAND Flash에 비해 상대적으로 느립니다. NOR Flash는 주로 BIOS 칩에 많이 사용됩니다.


NAND Flash Memory는 NOT AND 로직을 이용하여 데이터를 처리합니다. NOR Flash와 달리 페이지 단위로 데이터를 보관하기 때문에 대용량 처리에 유리합니다. 반면, 데이터를 읽을 때 임의 위치 접근이 불가능하여 읽기 속도가 느리지만, 쓰기 속도는 빠릅니다. 일반적으로 사용하는 USB 메모리는 NAND Flash를 기반으로 하고 있습니다.



3️⃣ Flash Memory Chip-Off에 사용되는 장비 소개

Flash Memory chip-off 작업에 필요한 장비에 대해 소개하겠습니다. 이 작업을 위해서는 기본적인 솔더링 장비가 필수적입니다. 기호나 대상 장비에 맞게 납땜기, 열풍기 등을 사용하고, 솔더윅, 솔더 페이스트, 무연납 등도 필요합니다.





Flash Memory를 PCB에서 분리한 후에는 PC에서 데이터를 읽기 위한 추가 장비가 필요합니다.


메모리 블럭이 적거나 SPI를 통한 작업은 라즈베리파이, 아두이노 등으로 진행할 수 있습니다. 하지만 TSOP48, TSOP56 등 다수의 메모리 블럭을 가진 소자의 경우에는 전용 장비가 필요합니다. 전용 장비를 사용하면 전압 인가, 읽기 및 쓰기 작업이 훨씬 편리해집니다. 이와 관련된 장비인 XGecu T48과 해당 기자재 사진은 아래에서 확인할 수 있습니다.






4️⃣ 분석 대상 Flash Memory 확인

이번 분석의 대상은 공유기입니다. JTAG와 UART 포트가 존재하는 공유기지만, chip-off 분석을 위해 디버깅 포트가 없다고 가정하겠습니다.


위 사진에서 확인할 수 있는 소자들은 다음과 같습니다:

  • 가운데 방열판이 있는 소자: MCU

  • 우측의 많은 핀을 가진 소자: RAM

  • 좌측의 8핀 소자: Flash Memory


이제 해당 Flash Memory 소자의 모델명을 확인해보겠습니다.





모델명은 mx25L3206Em2i1-2g입니다. 다음으로, 우리가 가지고 있는 XGecu T48이 이 소자를 지원하는지 확인해야 합니다.





http://www.xgecu.com/MiniPro/T48_List.txt

위 링크에서 XGecu T48이 데이터 읽기와 쓰기가 가능한 것을 확인했습니다.



5️⃣ Chip-Off 후 데이터 읽기

이번에 다룰 소자는 SOP 8핀 타입 형상을 가지고 있습니다. chip-off 과정을 거치지 않고 hook clip 또는 SOP 8핀 클립을 이용하는 방법도 있지만, 이 경우 접점 불량이 발생할 가능성이 높습니다. 본 글의 목표인 chip-off와 맞지 않기 때문에 직접 디솔더링하는 방법을 선택했습니다.


작업을 시작하기에 앞서 방열 테이프를 이용해 주변 소자를 마스킹합니다. 이후 열풍기를 사용하여 PCB 기판과 Flash Memory를 분리합니다. 열풍기 온도는 380~400도로 설정하고, 솔더 페이스트를 도포하여 쉽게 분리할 수 있도록 합니다.






아래 사진에서 Flash Memory가 성공적으로 분리된 모습을 확인할 수 있습니다.





Flash Memory를 분리한 후, 소자를 XGecu에 연결합니다. 이후 전용 소프트웨어를 통해 chip의 정보가 정상적으로 읽히는지 확인합니다. 이 과정에서 접점 불량이나 잘못된 모델 선택으로 인해 데이터를 정상적으로 읽지 못하는 경우가 발생할 수 있습니다. 만약 비정상적인 정보가 보이면 접점 상태를 확인하고, 올바른 모델이 선택 되었는지 점검해야 합니다. 다음 사진은 XGecu에 연결된 소자와 전용 소프트웨어에서 소자의 접점 및 통신 여부를 테스트한 모습입니다.







이후 chip에 저장된 데이터를 읽어 바이너리 파일로 저장합니다.


아래는 해당 바이너리를 HxD 도구로 열어본 사진입니다.




위 사진에서 확인할 수 있듯이, 파일 시스템 내용의 일부가 보이는 것을 알 수 있습니다.



6️⃣ 바이너리에서 파일 시스템 추출

이제 바이너리를 binwalk 도구를 통해 분석한 결과를 살펴보겠습니다. CramFS 파일 시스템이 존재하는 것을 확인할 수 있습니다.


<binwalk 확인>



이후 binwalk의 -e 옵션이나 FMK(Firmware-Mod-Kit)를 사용하여 파일 시스템을 추출합니다. CramFS의 경우, 관련 도구인 binwalk가 설치되어 있지 않으면 해당 영역만 분리된 후 추출 단계에서 실패할 수 있습니다. 하지만 binwalk 도구는 CramFS 영역을 분리하여 .cramfs 파일로 생성해줍니다. 이 파일을 FMK 도구로 사용하여 파일 시스템 분리를 진행합니다.



<binwalk 추출 실패>



<FMK 추출 결과>



결과 디렉토리를 확인하면 내용물은 다음과 같습니다.



<분리된 파일 시스템>




이번 글을 통해 소프트웨어 접근이나 디버그 포인트 접근이 불가능할 때 시도할 수 있는 방법에 대해 알아보았습니다.

이 기술을 통해 물리적으로 Flash Memory에 저장된 펌웨어를 추출할 수 있으며, 쓰기 작업 중 문제가 발생한 Memory에 대해서도 복구 작업을 시도할 수 있을 것입니다.

Solutions

Services

Tech Blog

R&D

ZIEN

Contact Us

대표자명

조영민

Address

서울특별시 금천구 서부샛길 606 대성디폴리스 A동 1606, 1607호

Telephone

070-4571-9854

E-mail

support@zi-en.io

Ⓒ ZIEN Inc. All rights reserved.