[참고: http://grayhash.com/files/netsec.pdf (firmware 획득방법 사진)]

[참고: http://www.powerofcommunity.net/poc2012/re&si.pdf (전반적인 프로세스 참고)]

해당 포스팅은 firmware의 취약점을 간략하게 분석하고 firmware이미지를 추출하는 소개정도로 작성하였습니다.

자세한 내용은 생략되어 있으니 자세한 내용을 원하시는 부분은 댓글주세요.


Firmware 취약

  

Firmware 정의

S/WH/W의 중간에 해당하는 것으로 S/WH/W

일반적으로 롬(ROM)에 기록된  H/W를 제어하는 *마이크로프로그램의 집합

*마이크로프로그램: 컴퓨터의 중앙연산처리장치가 지시 받은 명령을 정확하게 수행하기 위해 중앙처리장치가 하는 일련의 제어 기능을 프로그램으로 만들 필요가 있다. 이 때 만들어진 프로그램을 마이크로프로그램이라고 한다.


Firmware 취약점 사례

IoT보안에서 Firmware 취약점 위협 


Firmware 분석

 

Firmware 적용 분야

-Networking- Routers, Switches, NAS, VoIP Phones
-Surveillance- Alarms, Cameras, CCTV, DVRs, NVRs
-Industry Automation- PLCs, Power Plants, Industrial Process Monitoring and Automation
-Home Automation- Sensoring, Smart Homes, Z-waves, Philips Hue
-Whiteware- Washing Machine, Fridge, Dryer
-Entertainment gear- TV, Stereo, Game Console, MP3, Camera, Mobile Phone, Toys
-Other Devices- Hard Drivers, Printers
-Cars
-Medical Devices

 …..


Firmware 구조

 -Firmware 복잡도에 따른 분류방법
-Full-blown(Full-OS/kernel + Bootloader + libs + apps)
-Integrated(apps + OS-as-a-lib)

-Partial updates(apps or libs or resources or support)

 Firmware 획득 방법

-제조사에서 공개하는 firmware 다운로드
-자동/수동 업데이트 시 packet Sniffing
-UART 포트 접속
-논리적 취약점을 이용한 Shell 접근 권한 획득 후 추출(Partition dump, /dev/mtdblock)
-Flash Memory dump
-JTAG 포트 접속

Firmware Hacking Process


1. Firmware 획득

   획득 방법에는 여러가지 방법이 있지만 별도의 장치가 필요 없는 제조사 제공 firmware로 진행 

2. 분석 tool 사용

-BinwalkBinwalk는 firmware 이미지로부터 분석추출리버스엔지니어링을 하기 위해 설계된 firmware 분석 tool

-usage: kali는 기본 내장ubuntu는 별도 설치 필요

-$binwalk <firmware image>

위의 경우 LZMA압축을 사용하고, Squashfs 파일 시스템을 사용하는 것을 확인할 수 있다.


1. 추출 tool 사용

-Firmware-mod-kit: 리눅스 기반으로 다양한 파일포맷을 지원하는 스크립트를 가지고 있음
(cramfs, jffs2, lzma, squashfs etc)

-ERESI framework: multi-architecture binary를 분석하는 리버스 엔지니어링 소프트웨어

-signsrch: file 내부의 signatures를 찾는 툴

-offzip: raw files, packets, zip archives등 데이터를 포함하는 zipunpack하는 매우 유용한 툴

-TrID: binary signatures로부터 파일 타입을 알아낼 수 있도록 설계된 툴

-PFS: Benq ESG 103, NDC NWH8018과 같은 라우터의 이미지 분석에 사용되는 툴

-ardrone-tool: A.R.Drone을 위한 툴

-UnYAFFS: 파일시스템 중 yaffs으로부터 파일을 추출하기 위한 프로그램

-Squash-tools: SquashFS을 위한 툴


-Firmware-mod-kit사용

https://code.google.com/archive/p/firmware-mod-kit 에서 다운로드

리눅스 기반이기 때문에 우분투에서 사용

다운로드 한 tar 파일을 압축 해제하면 왼쪽과 같이 나온다앞서 다운로드 한 a1004_kr_9_912.bin 파일을 복사

추출은 extract-firmware.sh <firmware.bin>

Re-building은 build-firmware.sh [-nopad] [-min]

-The optional –nopad switch will instruct build_firmware.sh to NOT pad the firmware up to is original size.
-The optional –min switch will use the maximum squashfs block size of 1MB.
Example)

$./extract-firmware.sh <firmware.bin>
$
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
$./build-firmware.sh

$./extract –firmware.sh a1004_kr_9_912.bin

오류 발생 필수 라이브러리 필요(LZMA 압축 방법을 사용하였기 때문에 dev라이브러리 필요)

$sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

성공하면 아래와 같이 firmware extraction successfull이 출력된다.

위의 fmk폴더가 생성된 것을 확인할 수 있다. 더블클릭하면 image_parts, logs, rootfs 폴더가 있다.

image_parts폴더에는 header와 rootfs이미지가 있고, logs에는 추출할 때의 로그가 있다. 마지막으로 rootfs의 경우 firmware 이미지의 파일시스템을 확인할 수 있다.


1. Find bugs and vulnerability

취약점을 찾는 단계이다. 해당포스팅에는 간략하게 설명하는 것으로 제한한다.

공유기에서 관리자 페이지로 접속하면 아래와 같이 cgi-bin폴더 안에 timepro.cgi를 호출한다.

실제 펌웨어 안에 cgibin 내부에 timepro.cgi를 확인할 수 있다. 바이너리 덤프는 포스팅에서 제외(해보면 호출 프로세스 확인)

공유기 쉘로 접근방법이다.

아래와 같이 cgi-bin/d.cgi로 접근 시 화면이 출력된다.

Command Name에 입력하고자 하는 명령어를 입력하고

아래 password에는 #notenoughmineral^ 을 입력하면 된다.

아래는 ls의 결과 화면이다.


물론 cat명령어도 된다.


공유기 방화벽 또한 변경할 수 있다.



해당 부분은 포스팅에서 제외

위에서 언급했듯이, 수정 후 ./build-firmware.sh 하면 리패키징됨.


실제 거주하는 곳에서 무선공유기를 검색하면 옆집, 윗집 공유기가 검색된다.

관리자 page를 포함하여 default id와 passwd의 경우가 많다. 

관리자 page에는 펌웨어 업데이트 기능이 있는데 공격자가 악용하여 펌웨어에 악성코드나 백도어를 넣어 업데이트 한다면 위험하다.


이를 위해서는 관리자 id와 passwd를 꼭 바꾸어놓자. 

또한 원격에서 접근할 수 없도록 아래에 보이는 원격지원 부분에 중단으로 바꾸고 적용하자.

+ Recent posts