Search
Duplicate

[BoB] 박수현멘토 과제 - 취약점분석트랙, 박상준

취약점 분석 트랙 박상준
이 문서는 NetGear의 WNAP210 v1 공유기의 펌웨어를 분석하고 설명하는 내용을 담고 있습니다. 펌웨어를 분석하기 위해 사용한 명령어와 과정, 그리고 발견된 취약점들이 포함되어 있습니다.
NetGear WNAP210 v1 공유기의 펌웨어 레별 1,2,3단계 분석까지 환료했습니다.

개요

1.1 선택한 펌웨어

회사 : NetGear https://www.netgear.com/
제품명/모델명/버전 : WNAP210 v1
Firmware 다운로드 소스

1.2 그 이유 ( 왜 이 제품을 선택)

NetGear 회사의 공유기는 옛날에 집에서 공유기로 사용해본 적이 있고 그 때도 펌웨어 웹에 접속해서 DHCP등을 건드려본 적이 있어서 한번 펌웨어부터 웹 서버까지 세팅해보고 싶어 도전했습니다.
NetGear사의 최신 펌웨어에서는 파일시스템을 얻기 힘들었고 오래된 공유기에서 파일시스템을 성공적으로 얻어 부팅까지 해볼 수 있었습니다.
→ 실제로 기기를 구매해서 파일 시스템을 얻어야 할 것 같다.

펌웨어 분석

2.1 펌웨어 리버싱 명령어

ziptar 압축을 풀면 아래 사진과 같이 .html, rootfs.squashfs, uboot에서 사용하는 커널이 압축된 uImage가 있다.
→ 다른 펌웨어처럼 .bin형식으로 주지 않고 .zip으로 주어서 압축을 풀면 된다.
unzip WNAP210_V2.1.6_firmware.zip tar -xvf WNAP210_V2.1.6_firmware.tar
JavaScript
복사
kernel image
squashfs
binwalk를 사용해보고 싶어서 iptime펌웨어를 따로 다운받아서 사용해보았습니다.
binwalk -BE a7ns_kr_10_064.bin --run-as=root
binwalk -e a7ns_kr_10_064.bin --run-as=root → _a7ns_kr_10_064.bin.extracted가 생김
binwalk -A a7ns_kr_10_064.bin → 아키텍쳐 확인

2.2 펌웨어 구성 설명

아키텍쳐 : mips
파일시스템 : squashfs-root
네트워크 인터페이스 : 192.168.0.236
kernel : linux 2.6.38

구동 방법

3.1 레별 1 : bash 실행 방법 ( 명령어 및 스크린 샷)

→ bash 실행 방법으로는 아래 순서를 따르면 된다.
1.
파일 시스템 추출
2.
펌웨어 아키텍쳐 확인
3.
initrd와 kernel, bootload 확인
4.
네트워크 인터페이스 확인
5.
qemu-image로 만들기
6.
웹 서버 접속 및 qemu접속
only firmadyne 을 이용하는 방법
apt-get update -y apt-get install gcc g++ -y apt-get install git -y apt-get install vim -y apt-get install wget -y sudo apt-get install postgresql ####### git clone https://github.com/attify/firmware-analysis-toolkit.git cd firmware-analysis-toolkit/ ./setup.sh vi fat.config wget http://download.iptime.co.kr/online_upgrade/a604r_kr_12_126.bin ./fat.py ./a604r_kr_12_126.bin ####### ln -s /usr/bin/python3.8 /usr/bin/python git clone --recursive https://github.com/firmadyne/firmadyne.git git clone https://github.com/ReFirmLabs/binwalk.git cd binwalk/ ./deps.sh python3 ./setup.py install sudo -H pip install git+https://github.com/ahupp/python-magic sudo -H pip install git+https://github.com/sviehb/jefferson sudo -u postgres createuser -P firmadyne sudo -u postgres createdb -O firmadyne firmware cd .. sudo -u postgres psql -d firmware < ./firmadyne/database/schema cd ./firmadyne; ./download.sh sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils -y wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320 Firmware Version 2.0.3.zip" images vi firmadyne.config ./scripts/getArch.sh ./images/1.tar.gz ./scripts/tar2db.py -i 1 -f ./images/1.tar.gz sudo ./scripts/makeImage.sh 1 ./scripts/inferNetwork.sh 1 ./scratch/1/run.sh
JavaScript
복사
Firmware-analysis-toolkit을 이용하는 방법
→ firmware-analysis-toolkit : firmadyne을 wrapping한 형태로 firmadyne의 파일 시스템 추출, 아키텍쳐 확인, 네트워크 인터페이스 확인, qemu이미지 생성 등의 명령어들을 자동화함.
→ firmware-analysis-toolkit디렉토리에서 firmadyne디렉토리를 세팅해줘야함.
./fat.py [펌웨어 위치]
Assembly
복사

3.2 레별 2 : 주요 발견사항 ( 부팅베너, 관리자 id/pw/ftp 포트 열려있는지 유무 등)

부팅 베너
관리자 id/pw → NetGear default 아이디/패스워드
ID : admin PW : password
Assembly
복사
mmap 열린 포트 확인 및 핑거프린팅
sudo nmap -O -sV 192.168.0.236

3.3 레별 3 : 로컬에서 웹 서버 실행 및 login gui 접속(절차 및 스크린샷)

환경세팅
ubuntu 20.04 LTS에서 실행 vmware에서 실행함. 펌웨어를 다운받고 qemu로 펌웨어 구동하고 웹에서 접속
Assembly
복사
apt-get update -y apt-get install gcc g++ -y apt-get install git -y apt-get install vim -y apt-get install wget -y sudo apt-get install postgresql ####### git clone https://github.com/attify/firmware-analysis-toolkit.git cd firmware-analysis-toolkit/ ./setup.sh vi fat.config wget http://download.iptime.co.kr/online_upgrade/a604r_kr_12_126.bin ./fat.py ./a604r_kr_12_126.bin ####### ln -s /usr/bin/python3.8 /usr/bin/python git clone --recursive https://github.com/firmadyne/firmadyne.git git clone https://github.com/ReFirmLabs/binwalk.git cd binwalk/ ./deps.sh python3 ./setup.py install sudo -H pip install git+https://github.com/ahupp/python-magic sudo -H pip install git+https://github.com/sviehb/jefferson sudo -u postgres createuser -P firmadyne sudo -u postgres createdb -O firmadyne firmware cd .. sudo -u postgres psql -d firmware < ./firmadyne/database/schema cd ./firmadyne; ./download.sh sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils -y wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320 Firmware Version 2.0.3.zip" images vi firmadyne.config ./scripts/getArch.sh ./images/1.tar.gz ./scripts/tar2db.py -i 1 -f ./images/1.tar.gz sudo ./scripts/makeImage.sh 1 ./scripts/inferNetwork.sh 1 ./scratch/1/run.sh
JavaScript
복사
./fat.py [.zip위치]
Assembly
복사
firmadyne scripts/makeNetwork.py 에서 UnicodeError 가 나지 않도록 다음과 같이 수정함.
fat.py로 firmadyne 에서 image만들고 네트워크 세팅하고 qemu로 run하는 과정 자동화
공유기 HTTP서버주소가 나오고 접속

결론

4.1 본 실습을 통해 무엇을 배웠다.

펌웨어 추출 법 및 binwalk 사용법
펌웨어, 공유기 웹 서버 접속법 및 초기 환경세팅
펌웨어용 경량 파일시스템(squash-fs)이 있다는 사실을 알음
파일 크기와 엔트로피를 통해서 커널, 부트로더, 파일 시스템 식별 가능함.

4.2 앞으로 어떻게 해야겠다?

현재 학교 연구과제로 펌웨어 취약점 분석 자동화를 연구하고 있는데 최신버전의 펌웨어들을 추출하고 돌리기 위해서는 어떻게 해야할지 공부를 하고 실습을 해야겠다.
다양한 환경과 다양한 아키텍쳐의 어셈블리어도 볼 수 있도록 공부를 해야겠다.
qemu 명령어와 옵션들, 초기 config파일 설정들도 잘 만질 수 있도록 공부해야겠다.
SaTC 를 통해서 Web Server에서 받는 파라미터와 실제 펌웨어 바이너리와 상관관계를 통해 정적분석을 하는 방법을 통해서 실제 리얼월드 펌웨어에 트라이해보면서 취약점을 찾아보겠습니다.

툴 및 참고 자료 및 참고 문헌