https://www.hackerschool.org/HardwareHacking/
위에서 제공하는 "공유기 해킹 - ARM exploitation.pdf"을 보고 따라하다 오류가 발생했을 때 해결한 부분을 정리하려고 한다.
처음 시작했을 때 무엇을 목적으로 이걸 진행하고 있는지 몰라서 방향을 잡지 못했다.
우선 위 링크에서 어떤 내용을 진행하는지 간단하게 정리해보자.
100장까지 내용은 "기본 세팅을 진행하고, 펌웨어를 추출한 후 재조립해 가상화하기"라고 할 수 있다.
기본 세팅은
- 공유기 펌웨어 파일 다운로드 받기
- 크로스 컴파일러 설치
- 임베디드 리눅스 커널 zImage 추출
- binwalk 설치
- qemu 설치
등으로 이루어진다.
크로스 컴파일러 설치
대부분 에러는 pdf가 워낙 옛날 자료다 보니 버전이 달라 호환이 되지 않아 발생한다.
최대한 pdf 자료에 있는 버전으로 설치하려고 했다.
버추얼박스(virtualbox) ubuntu 22.04 버전으로 구동했다.
여기서 문제가 되는 부분은 크로스 컴파일러 설치였다. CodeSourcery에서 크로스 컴파일러를 배포한다는데, 지금은 해당 링크로 접속할 수가 없었다. 그래서 다른 링크를 찾았다.
https://sources.buildroot.net/toolchain-external-codesourcery-arm/
위 링크에서 "arm-2014.05-29-arm=none-linux-gnueabi-i686-pc-linux-gnu.tar-bz2"를 다운로드해 압축을 해제하면 된다.
압축을 해제하고
export PATH=$PATH:/home/IOT/arm-2014.05/bin
으로 환경변수를 등록하여 어떤 폴더에서든지 컴파일러가 실행될 수 있도록 설정한다. '/home/IOT/arm-2014.05'는 컴파일러 디렉토리의 경로로 설정한다.
그리고 재부팅 시에도 해당 내용이 적용되게 bashrc 파일에 같은 내용을 추가한다.
vi ~/.bashrc
다음에 진행하는 단계는 리눅스 커널 이미지를 압축한 바이너리인 zImage를 추출하는 과정이다. 그리고 경량 unix 명령 소프트웨어 busybox를 통해 만든 root file system을 만든다. 이렇게 만든 zImage와 루트 파일 시스템, 여기에 u-boot라는 부트로더를 더해 부팅 가능한 리눅스 커널을 만드는 것이 58페이지까지 하는 일이다.
다음으로 펌웨어 파일을 추출한다. 루트파일 시스템을 RFS.bin로 만들어 뽑아낸다.
firmware mod kit 설치
apt-get install git build-essential zlib1g-dev
liblzma-dev python-magic
tar xvfz fmk_099.tar.gz
cd fmk/src
./configure
make
fmk를 설치하기 위해 위 명령을 따라했는데, 우선 python-magic이라는 패키지는 존재하지 않는다고 자꾸 떴다.
그래서 그런지 make를 입력해도 제대로 실행되지 않았다.
https://smleenull.tistory.com/472
찾아보다 위에서 설명한대로
git clone https://github.com/rampageX/firmware-mod-kit.git
cd firmware-mod-kit
이전 fmk를 설치하고 별도의 make 명령 없이 바로
./unsquashfs_all.sh RFS.bin
위 명령을 수행하니 잘 동작했다.
또한, 저 github 링크(https://github.com/rampageX/firmware-mod-kit)에서 제공하는 설명에 따르면
우분투 22.04 이상에서는 아래와 같이 입력해야 한다고 명시되어 있다.
sudo apt-get install git build-essential zlib1g-dev liblzma-dev python3-magic autoconf python-is-python3
처음에는 fmk를 별도의 폴더에 두고 여러 시스템을 추출할 때 이 폴더에서 다 실행했는데, fmk 폴더 내부에 추출된 파일이 생겨버려서 여러가지 펌웨어를 추출하기가 번거롭다. 분석하고자 하는 펌웨어 디렉토리마다 fmk를 별도로 설치하고 분석하는 방법이 좋은 것 같다.
가상 iptime 시스템 만들기
rootfs.img.gz, zImage를 한 폴더에 넣어두고 가상 iptime 시스템을 구동한다.
이 때 네트워크 활성화를 위해 -redir 명령으로 호스트의 8080 포트와 게스트의 80 포트를 포워딩하라고 되어 있다.
qemu-system-arm -M versatilepb -m 128M -kernel zImage \
-initrd rootfs.img.gz -append "root=/dev/ram rdinit=/bin/sh console=ttyAMA0,115200" \
-nographic -redir tcp:8080::80
그런데, qemu 최신 버전에서는 redir 명령이 삭제되었다.
The "-tftp", "-bootp", "-redir" and "-smb" options have been removed. Use the corresponding parameters of "-nic" or "-netdev" instead.
공식 문서에 따르면, 다음과 같이 옵션을 주면 -redir과 동일한 역할을 하는 옵션을 줄 수 있다고 한다.
아래와 같이 옵션을 주고 실행한 후 ifconfig -a를 입력하면 eth0이 세팅되어 있는 것을 볼 수 있다.
qemu-system-arm -M versatilepb -m 128M -kernel zImage -initrd rootfs.img.gz \
-append "root=/dev/ram rdinit=/bin/sh console=ttyAMA0,115200" -nographic \
-nic user,hostfwd=tcp:127.0.0.1:8080-:80
만약 ifconfig 실행 시 아래와 같은 오류가 발생하면
Warning: cannot open /proc/net/dev (No such file or directory). Limited output.
다음 명령을 입력하면 된다.
mount -t prco /proc /proc
qemu가 구동 중인 상태에서 아래 명령을 차례대로 입력하고
busybox ifconfig eth0 10.0.2.15 netmask 255.255.255.0
busybox route add default gw 10.0.2.2
cd /sbin
./httpd
우분투 환경의 웹 브라우저에 접속해 "local:8080"에 접속하면 이제 iptime 관리자 페이지가 뜬다.
이거 하겠다고 오류 찾느라 며칠을 보내서 정말 힘들었다.
'보안 > 하드웨어 해킹' 카테고리의 다른 글
펌웨어 에뮬레이팅 후 chroot: failed to run command `./bin/sh' 문제 해결 (0) | 2024.02.25 |
---|