
서론
binwalk로 파일 시스템 추출을 할 때 -e 옵션으로 추출을 시도했는데 extracted 폴더에 추출결과가 바로 나오지 않고 .ubi 파일과 빈 squashfs-root 폴더만 생성되는 상황이 발생했다. 이러한 경우 어떤 처리를 해야 원하는 파일 시스템들을 제대로 추출할 수 있으며 .ubi파일은 무엇인지를 정리해보기로했다.
1. binwalk 실행
R6700AX 펌웨어의 파일 시스템을 추출하면서 다음과 같은 상황이 발생했다.
.img 파일을 binwalk -e 옵션으로 추출했을 때 생성된 extracted 파일안에 비어있는 ubifs-root 폴더와 .ubi 형식의 파일이 생성되었다.

또한 파일 정보에서 UBI erase count header가 나온 것을 확인했다.
$ binwalk -e R6700AX-V1.0.15.146.img
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
128 0x80 **UBI erase count header**, version: 1, EC: 0x0, VID header offset: 0x800, data offset: 0x1000
2. UBI
먼저 위에서 생성된 80.ubi의 .ubi 에 대해서 간단하게 정리해봤다.
- UBI(Unsorted Block Images)
: 비휘발성 저장 장치의 특성에 맞게 설계된 소프트웨어 계층으로 블록 기반 저장 장치에서 동작하며 효율적인 데이터 저장과 관리를 제공
: UBIFS 라는 Interface 를 이용하여 Nand Flash Memory 에 접근하여 부팅해서 사용- NAND Flash Memory : 비휘발성 저장 장치로, 데이터를 저장하는 데 사용되는 전자적 메모리 기술
- UBIFS (UBI File System)
: UBI에서 실행되는 파일시스템,- 이때 UBIFS blob에는 squahsfs 이미지가 포함되어 있음.
- BLOB(Binary Large Object)은 대용량 바이너리 데이터를 효과적으로 저장하고 관리하기 위한 데이터베이스 구조 → 다양한 멀티미디어 파일과 문서 형식을 포함
- 이때 UBIFS blob에는 squahsfs 이미지가 포함되어 있음.
→ 따라서 ubi에서 ubifs(ubi 파일 시스템)를 추출하고 그 안에 있는 squashfs를 얻는 과정을 수행하면 된다.
3. ubifs 파일 시스템 추출
1) ubi_reader
ubi 파일을 컨트롤 할 수 있는 ubi_reader을 설치해서 사용해야한다. 이 때 ubi_reader는 python으로 작성되어서 UBI와 관련된 이미지 파일을 분석하고 이를 통해서 데이터를 추출하거나 구조를 확인할 수 있도록 하는 툴이다.
ubi_reader 명령어
- ubireader_info
: UBI 이미지의 기본 정보(볼륨, 블록 크기 등)를 출력 - ubireader_list_volumes
: UBI 이미지에 포함된 볼륨의 이름, ID, 크기 등을 출력 - ubireader_extract_images
: UBI 볼륨 전체를 .img 파일로 추출 - ubireader_extract_files
: UBI 볼륨 내부의 파일과 디렉터리를 추출 - ubireader_parse_header
: UBI 이미지의 헤더 구조를 분석 - ubireader_parse_peb
: 특정 PEB의 내용을 분석 - ubireader_debug
: UBI 이미지 디버깅 및 손상된 블록 확인 - ubireader_scan
: 손상된 이미지에서 복구 가능한 볼륨과 데이터를 검색 - ubireader_get_mapping
: PEB와 LEB 간 매핑 정보를 출력
2) ubi 파일 시스템 추출 순서
- 설치방법
: sudo pip install ubi_reader 명령어로 설치 - .ubi에서 ubifs 추출
: ubireader_extract_images filename.ubi
→ 여기서는 80.ubi
- ubireader_extract_images 명령어로 하고 나중에 보니까 ubireader_extract_files 명령어를 사용하면 binwalk를 한번 더 실행할 필요가 없이 바로 디렉토리와 파일로 분리되어서 추출할 수 있음 - 위 명령어 실행하면 생성된 80.ubi 폴더안에 다음과같은 ~squashfs.ubifs 파일들이 들어있는 것을 확인할 수 있다.

4. 마지막으로 위에 생성된 ubifs 파일을 binwalk -e 옵션으로 추출하면 squashfs가 나와서 파일 시스템 확인이 가능하다.
- 위에 ubireader_extract_images 명령어로 하고 나중에 보니까 ubireader_extract_files 명령어를 사용하면 binwalk를 한번 더 실행할 필요가 없이 바로 디렉토리와 파일로 분리되어서 추출할 수 있음
추가로
- ubireader_extract_images와 ubireader_extract_files : 둘 다 ubi_Reader에서 제공하는 명령어로 ubi 이미지를 추출하는데 사용되지만 추출 대상과 용도가 다르다.
- ubireader_extract_images
- UBI 이미지에서 각 볼륨에 해당하는 이미지 파일이 추출됨
- ex: 볼륨 rootfs와 config가 있다면 각각 rootfs.img와 config.img와 같은 UBI 볼륨 이미지가 생성됨
- ubireader_extract_files
- UBI 볼륨별로 디렉터리가 생성되고, 해당 디렉터리 안에 포함된 파일들이 저장됨
- ex: rootfs/ 디렉터리 내에 etc/, bin/, usr/ 등이 추출됨
3) 파일 시스템 추출 완료
결과적으로 rootfs_ubifs.ubifs 파일을 binwalk로 추출했을 때 생성된 extracted 폴더 안에서 squashfs를 발견할 수 있었다.
- 다음은 폴더 내부에 squashfs가 확인되는 부분에 대한 터미널 결과와 이미지이다.
$ binwalk -e img-1947663433_vol-rootfs_ubifs.ubifs
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 **Squashfs filesystem**, little endian, version 4.0, compression:xz, size: 50965891 bytes, 3117 inodes, blocksize: 131072 bytes, created: 2023-06-13 12:06:04

:~/_img-1947663433_vol-rootfs_ubifs.ubifs.extracted/squashfs-root$ ls -al
total 128
drwxrwxrwx 18 userna userna 4096 11월 5 16:04 .
drwxrwxr-x 3 userna userna 4096 11월 5 16:04 ..
drwxr-xr-x 2 userna userna 4096 11월 5 16:04 bin
drwxr-xr-x 2 userna userna 4096 6월 13 2023 bootfs
-rw-r--r-- 1 userna userna 9 6월 13 2023 cloud_version
drwxr-xr-x 2 userna userna 4096 6월 13 2023 data
lrwxrwxrwx 1 userna userna 16 6월 13 2023 debug -> sys/kernel/debug
-rw-r--r-- 1 userna userna 11 6월 13 2023 default_language_version
drwxr-xr-x 3 userna userna 4096 11월 5 16:04 dev
drwxr-xr-x 32 userna userna 4096 11월 5 16:04 etc
-rw-r--r-- 1 userna userna 1 6월 13 2023 firmware_region
-rw-r--r-- 1 userna userna 29 6월 13 2023 firmware_time
-rw-r--r-- 1 userna userna 12 6월 13 2023 firmware_version
-rw-r--r-- 1 userna userna 6 6월 13 2023 hardware_version
lrwxrwxrwx 1 userna userna 9 11월 5 16:04 home -> /dev/null
-rw-r--r-- 1 userna userna 19 6월 13 2023 hw_id
-rw-r--r-- 1 userna userna 0 6월 13 2023 .init_enable_core
drwxr-xr-x 12 userna userna 4096 6월 13 2023 lib
drwxr-xr-x 2 userna userna 4096 6월 13 2023 mnt
-rw-r--r-- 1 userna userna 6 6월 13 2023 module_name
drwxr-xr-x 8 userna userna 4096 6월 13 2023 opt
drwxr-xr-x 2 userna userna 4096 6월 13 2023 proc
drwxr-xr-x 2 userna userna 4096 6월 13 2023 rom
drwxr-xr-x 3 userna userna 12288 11월 5 16:04 sbin
drwxr-xr-x 3 userna userna 4096 6월 13 2023 sys
drwxr-xr-x 2 userna userna 4096 6월 13 2023 TM
lrwxrwxrwx 1 userna userna 9 11월 5 16:04 tmp -> /dev/null
drwxr-xr-x 11 userna userna 4096 11월 5 16:04 usr
drwxr-xr-x 2 userna userna 4096 6월 13 2023 var
drwxr-xr-x 13 userna userna 20480 11월 5 16:04 www
참고 블로그
- ubi_reader
- https://starkeblog.com/netgear/firmware/extraction/binwalk/ubi/2019/05/12/netgear-extract-chk-firmware.html
→ ubi 파일 추출 어떻게 하는지 설명 - https://bjk110-2.tistory.com/172
→ ubi_reader로 ubifs 추출하는 부분 일부
- https://starkeblog.com/netgear/firmware/extraction/binwalk/ubi/2019/05/12/netgear-extract-chk-firmware.html
- ubi, ubifs
- https://www.coresecurity.com/core-labs/articles/next-generation-ubi-and-ubifs
→ ubi와 ubifs 의 차이 짧게 서술 - http://www.linux-mtd.infradead.org/doc/ubifs.html
→ ubifs가 어떤 파일 시스템인가 - http://www.linux-mtd.infradead.org/doc/ubi.html
→ ubi가 무엇인지 - https://darkengineer.tistory.com/30
→ ubi, ubifs가 뭔지 짧게 -
- https://www.coresecurity.com/core-labs/articles/next-generation-ubi-and-ubifs
'이하임' 카테고리의 다른 글
| Fuzzer 조사 - Fuzzing과 Fuzzer에 대한 이해 (0) | 2025.04.27 |
|---|---|
| CPIO 아카이브 파일 (0) | 2025.02.19 |
| ASLR에 대해서 (0) | 2025.02.12 |
| python의 버전 관리를 위한 pyenv 설치 및 사용법 (0) | 2025.01.09 |

stellarflare 님의 블로그 입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!