3. ICEWALL
너 누구냐?
▪ 강남 종로학원 특별반
▪ 한양대학교 14학번
▪ Best of the Best 4기 취약점분석 트랙
▪ 한양대학교 ICEWALL 16년도 부회장
▪ 개발 싫어하는, 입코딩으로 먹고사는 잉여인간
▪ 경영 부전공, 행정학 복수전공 중인 답이 안 나오는 잉여인간
3
8. ICEWALL
IoT란 무엇인가요?
▪ 약 19 퍼센트의 IoT 제어용 앱이 클라우드 서비스에 접속 할 때 SSL을 사용을
안 함
▪ 어떠한 장비도 서버-클라이언트간 상호인증을 하지 않음
▪ 일부 IoT 클라우드 서비스는 2채널 인증을 지원하지 않음
▪ 패스워드 브루트포싱을 막기 위한 로그인 지연을 지원하지 않음
▪ 일부 장비는 계정 수집을 막을 방법을 제공하지 않음
▪ 다수의 IoT 클라우드 플랫폼은 기존 웹 취약점과 동일한 취약점들을 갖고 있음
▪ 15개의 IoT 제어 웹 페이지에서 10개의 심각한 보안 결함 발견
▪ 그 중 6개는 비인가 사용자의 장비 제어 권한임
▪ 대부분의 장비는 암호화되거나 인증된 펌웨어 업데이트를 제공하지 않음
8
10. ICEWALL
왜 IoT는 이 꼴인가요?
▪ 짧은 개발 기간
▪ 미숙련 인력의 투입
▪ 네트워크과 보안에 대한 개념이 부족한 임베디드 개발자 폐쇄망만 해봤는데요…? SSL…? 보안…?
▪ 제한된 디바이스의 성능
▪ 전력 대비 성능의 한계 RSA? 개나 주라 그래!
▪ 제한적 램 사이즈 안녕! 32메가 램!
▪ 소형화를 위한 제한된 부품의 선택 크고 아름다운 건 안 돼!
▪ 프로그래밍 언어 선택의 제한 C or C++ …?
▪ 한 번 업로드 되면 다시 업데이트 되기 힘든 펌웨어
▪ 옛날과 별 차이가 없는 코드들 한 리눅스 커널 2.6 하실래예? / CFE bootloader since 2000
▪ 복잡한 N:M 구조 아아, IoT 세계에 디바이스들이 가득해…
장비가 죽으면 대응은? / 장비가 응답을 안하면 대응은? / Heartbeat나 Command를 신뢰 할 수 있나?
앱 <-> 서버 <-> 허브 <-> IoT 통신은 어떻게 하지?
10
23. ICEWALL
기술 스택
▪ 구글링 능력
▪ 전기전자공학 지식
▪ 전파공학, 전기공학, 반도체공학, 회로이론, 납땜 및 기본적 공구 사용법…
▪ 컴퓨터공학 지식
▪ 로우레벨 하드웨어 제어, 어셈블리, 리눅스 시스템 구조, 네트워크…
▪ 개발 능력
▪ 백엔드, 안드로이드/아이폰, 리눅스 디바이스 드라이버, 커널 소스코드 분
석, 부트로더 소스코드 분석, 부팅 시퀀스 이해, 임베디드 개발……
▪ 보안 지식
▪ 암호화 방식, 해싱, 웹 해킹, 포너블, 리버싱……?
23
27. ICEWALL
사실 그렇게 어렵지는 않습니다!
▪ 얕은 지식 여러가지 > 깊은 지식 한 가지 (사실 제대로 하려면 깊은 지식 여러가지…)
▪ 임베디드는 처음부터 하는 건 힘들지만, 남이 한 거 따라하는 건 상당히 쉬움
▪ 여러 꼼수들이 많음!
▪ 그래서! 꼼수들만으로 한 번 분석해보자!란 게 이번 주제
27
28. ICEWALL
Cheat Sheet
▪ 작동 전압은 보통 12V, 5V, 3.3V, 1.8V, 1.5V ………
▪ 0V ~ 5V / 0 ~ 3.3V …
▪ -5V ~ 5V / -12V ~ 12V …
▪ CPU(or AP or MCU) 작동 클럭, 제품명, arm/mips인지 구분 할 것!
▪ 클럭으로 유추 할 수 있는게 의외로 많음
▪ 같은 칩셋을 쓴 같은 회사 제품들 취약점 == 이 제품 취약점
▪ 접근 방법을 정하기 위해 필수적으로 확인 해야함
▪ 모뎀/지그비/Z-Wave/블루투스 등 장비 간 통신 모듈 확인
▪ RAM/ROM 용량 확인
▪ 용량에 따라 얼마나 성의있게 제품이 만들었는지 가늠, 덤프 뜰 크기 확인
28
29. ICEWALL
Cheat Sheet
▪ 이름을 알아낸 칩셋의 Data Sheet 구글링
▪ 칩셋에 대한 자세한 정보를 얻을 수 있음
▪ 디버깅 포트나 각종 설정용 포트 등 공략 가능한 부분들을 찾아낼 수 있음
=> UART/JTAG 등을 붙일 방법을 생각해 낼 수 있음
▪ 칩셋의 전체 기능 중 사용되는 부분과 안 되는 부분을 확인 가능
▪ 같은 칩셋을 사용하는 타 제품들(or 자매 제품)의 펌웨어 분석을 용이하
게 해주거나, 타 제품의 펌웨어를 통해 현 제품 분석 가능
▪ CPU : 디버깅용 포트가 어디 붙어있는지 확인 할 것!
▪ 통신 모듈 : 스펙을 통해 하드웨어 기반 암호화 모듈 존재 여부를 확인
▪ RAM/ROM : 사이즈가 상식을 벗어나면, 뭔가 잘못 만들어진 제품일 가능성
29
34. ICEWALL
그래 이제 디버깅을 하자! feat. 공구랑 친해져보자!
▪ 인두
▪ 여러분이 아는 그거
▪ 인두는 팁 관리가 핵심!
▪ 온도는 저온을 추천하나, 초보자는 꼭 기판을 저온화상 ^^; 입힘으로 중
간이나 고출력 써서 빠르고 화끈하게 끝내도 됨 (대신 부품에 무리가…)
▪ 오래 쓸 거면 핫코(HAKKO), 단기간에 싼 맛에 쓸 거면 아남전자 제품
▪ 납
▪ 무연납/유연납으로 나뉨
▪ 무연납이 비싸지만, 폐를 생각하면 무연납을 쓰는 걸 권장
▪ 동글동글 잘 뭉쳐진다고 유연납 쓰겠다고 하면… 납중독 주의하세요 ^^;
34
35. ICEWALL
그래 이제 디버깅을 하자! feat. 공구랑 친해져보자!
▪ 인두 거치대 : 있으면 편함
▪ 철수세미 : 있으면 정말 편함
▪ 납 흡입기 : 여러분은 금손이 아니기 때문에 꼭 단자를 합선을 시킵니다
▪ 플럭스 / 솔더윅
▪ 좋은 납땜을 위해서는 무조건 필요
▪ 특히 칩을 뜯어내거나, SMD 납땜시에는 핵심이라고 볼 수 있는 녀석
▪ 와이어스트리퍼 : 커터칼이나 라이터 지지기로 선 벗기기 싫다면…
▪ 니퍼 / 롱노우즈니퍼 : 있으면, 제품 파ㅋ괘ㅋ가 쉬워집니다
▪ 핀셋 : 있으면 좋음. 약국에서 파는 핀셋도 좋음
▪ 칩 거치대 : 납땜 하면서 스트레스를 덜 받음
35
37. ICEWALL
그래 이제 디버깅을 하자! feat. 부품과 친해져보자!
▪ 빵판
▪ 점퍼 케이블
▪ 가성비는 떨어지지만, 한 뭉텅이 사 두면 정말 도움 됩니다.
▪ 암암, 수수, 암수 이렇게 구매 하시면 됩니다.
▪ 핀헤더
▪ UART나 JTAG 포트에 핀헤더 납땜 후 점퍼케이블로 연결하면 편합니다
37
38. ICEWALL
그래 이제 디버깅을 하자! feat. 부품과 친해져보자!
▪ 아두이노 / 라즈베리파이
▪ GPIO로 모듈 제어나 간단한 UART 통신 같은 걸 할 수 있습니다.
▪ 라즈베리파이, 아두이노는 한 대 씩 갖고 있으면 여러모로 편합니다.
▪ 저항 / LED / 각종 센서류
▪ LED는 전기가 통하는지 확인 할 때 씁니다.
▪ 센서류는 실습을 통해 타겟 디바이스의 작동 구조를 파악할 때 씁니다.
▪ 블루투스 / Wifi / RF 모듈
▪ 실제로 많은 장비들을 분석하게 되면, 기기간 통신 파트의 코드를 주로 보
게 되는데, 처음이라면 모르는 부분이 많습니다. 미리 실습해 두면 그나마
할 만 하죠.
▪ nRF24L01 모듈이 가성비도 좋고, 공부하는데 나쁘지 않은 편입니다.
38
40. ICEWALL
그래 이제 디버깅을 하자! feat. 장비랑 친해져보자!
▪ 멀티미터기
▪ 저항, 전류, 전압, 그리고 (좋은 제품은) 캐퍼시터 용량 측정까지 가능함
▪ 제품 분석시 작동 전압, 흐르는 전류량을 통해, UART 포트의 위치나 Tx,
Rx 순서를 아는데 큰 도움이 됨
▪ Bus Pirate / Bus Blaster
▪ JTAG 장비, 가성비가 상당히 좋음
▪ Logic Sniffer
▪ 로직 아날라이저, 이 역시 가성비가 상당히 좋음
▪ 백문이불여일견
40
41. ICEWALL
그래 이제 디버깅을 하자! feat. 장비랑 친해져보자!
▪ 오실로스코프
▪ 임베디드 개발로 가겠다면 필수 용품
▪ 로직 아날라이저가 0과 1을 분석한다면, 오실로스코프는 파형 분석
▪ 다만, 구조의 복잡성 덕분에 채널 수가 로직 아날라이저보다 적음
▪ 채널 수, 분해능, 전압/전류 허용치 등에 의해서 가격이 결정 됨
▪ 초보자라면 DSO nano v3 제품을 사서 써보기를 추천 (89.99 달러)
41
42. ICEWALL
그래 이제 디버깅을 하자! feat. 장비랑 친해져보자!
▪ UART
▪ Universal asynchronous receiver/transmitter
▪ 제일 많이 쓰게 될, 제일 저렴한 녀석
▪ 알리익스프레스나 Seeed Studio에서 1달러에서 2달러 내외에 판매
▪ Vcc, Tx, Rx, GND 4포트나 클럭 동기화를 위해 clk까지 붙은 녀석이 존재
▪ 4 포트는 펌웨어 업로드가 불가능하지만, 5포트는 가능 (clk 덕분임)
▪ Tx는 데이터를 전송, Rx는 데이터를 수신함.
고로 Tx는 타겟의 Rx에, Rx는 타겟의 Tx에 연결해야함
42
46. ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ UART가 가장 자주 사용 될 것입니다
▪ 기기의 UART 디버깅 포트를 찾는 방법은 3가지 정도
▪ UART, Debug, RS232… 라고 당당히 적혀있음
▪ 눈에 보이는 구멍 혹은 접점 4개 (혹은 5개나 그 이상)
▪ 칩셋의 Tx, Rx 다리 따라서 찾기 (데이터시트가 이래서 중요)
▪ Tx/Rx/Vcc/GND 찾는 방법
▪ Vcc : 항상 장비 최대 전압
▪ GND : 항상 장비 최저 전압 (혹은 0V)
▪ Tx/Rx가 제일 골치 아픔
46
47. ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Tx 찾기
▪ 풀업인지 풀다운용으로 Tx 쪽에는 트랜지스터가 달려있는 경우가 있음
(갑자기 연결하면 전압이 순간 급증하여 칩셋을 아프게 할 수 있음으로)
▪ 측정 전압이 클럭 따라 왔다갔다 하거나, Vcc 전류보다 낮게 나옴
▪ 측정 전류 값이 0mA 이상
▪ Rx 찾기
▪ Tx, Vcc, GND를 다 찾아냈으면 남은 녀석이 Rx
▪ 보통은 Rx로 추정되는 녀석에 꼽은 뒤 키보드를 두드렸을 때 콘솔 화면에
반응이 나타나는지 확인하는 걸로 제대로 붙었는지 확인
▪ GND랑 제일 많이 헷갈리게 됨, GND랑 Rx 바꿔먹으면 절대로 안 됨
47
48. ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ 로직 아날라이저
▪ 그냥 디버깅용으로 쓰일만한 부분에 다 붙여놓고 (…) 신호가 제대로 나오
는 녀석을 찾으면, Tx, Vcc, GND 찾을 수 있고, 그 근처에 Rx가 있을 테
니, Rx는 감으로 때려잡는다 (…)
▪ 오실로스코프
▪ 위의 방법과 비슷하나, 좀 더 자세한 파형 관찰이 가능하다 (?)
▪ 채널 수가 적기에, 로직 아날라이저보다 삽질을 많이 해야한다 (…)
48
49. ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Baudrate는 초당 보내는 심볼의 갯수 (의미를 지닐 수 있는 시그널의 개수)
▪ 일반적으로 자주 쓰이는 Baud Rate가 있음
(ARM 계열 칩셋의 경우 115200부터 일단 해보고 시작)
▪ 115200
▪ 57600
▪ 38400
▪ 19200
▪ 14400
▪ 9600
▪ 2400
49
50. ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Linux / OS X
▪ screen /dev/tty.usbserial 115200
▪ screen [붙일 tty] [Baud Rate]
▪ Windows
▪ xshell
▪ putty
50
54. ICEWALL
Let’s dive to the SHELL - 외 않돼지?
▪ 출력이 안 돼요
▪ 제대로 납땜 한 거 맞나요?
▪ 출력이 되는데 이상한 글자가 나와요
▪ 제대로 남땜 한 거 맞나요?
▪ 보드레이트 제대로 맞춘거 맞나요? (중요)
▪ 입력이 안 돼요
▪ 제대로 납땜 한 거 맞나요?
▪ 입력이 되는데 이상한 글자가 들어가요
▪ 제대로 납땜 한 거 맞나요?
▪ 합선 된 거 아니에요?
54
56. ICEWALL
Let’s dive to the SHELL
▪ 일반적인 임베디드 장비 부팅 시퀀스 :
전원 인가 -> 부트로더 적재 후 실행 -> 롬의 내용을 램에 적재 (커널 적재) ->
리눅스 부팅 시퀀스 진입 -> 각종 데몬/프로세스 실행 -> 공유기 작동 시작
56
57. ICEWALL
Let’s dive to the SHELL
▪ 부트로더 진입 시 Ctrl-D, Ctrl-C, Ctrl-Z, ESC 등 각종 부팅을 멈출 수 있는 키
조합을 찾아서 부팅 시퀀스를 종료 한다
▪ 부팅 시퀀스가 중단 되면, 부트로더 자체 쉘이 뜨고 부트로더 명령어를 통해 공
유기 제어가 가능해진다!
▪ 명령어를 통해 RAM/ROM 덤프나 TFTP로 파일 전송, 부트로더 자체 웹 서버
를 통한 펌웨어 업로드가 가능해진다!
▪ 그러나……
57
59. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 보안을 위해 제조사 커스텀으로 명령어들을 막아 놓은 경우가 있음
▪ 시스템 정보를 볼 수가 없어?
▪ 플래시 메모리(a.k.a. ROM) 덤프가 막혀 있어?
▪ 메모리 (a.k.a. RAM) 조작이 불가능해?
▪ 메모리 (a.k.a. RAM) 덤프가 막혀 있어?
▪ 결국 운과 시간과 노력이 모두 필요함!
▪ 덤프가 안 되면 덤프를 시킬 다른 방법을 찾기 (JTAG / 메모리 직접 덤프)
▪ 안되는 것처럼 보이는 경우가 있음 (디버깅 필수 명령어는 못 막음ㅋ…)
▪ 다른 제품을 뜯거나, 메뉴얼을 보면서 감추어진 공략법 찾아보기
59
60. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 시스템 정보를 볼 수가 없어?
▪ 제일 골 때리는 경우는 아니지만, 초심자가 중도 포기의 원인
▪ CFE의 경우 flash0, flash1 같은 형식으로 롬 접근을 하는 식임.
▪ 부팅시 나오는 부팅 로그 자세히 살펴보기 (중요)
▪ 부트로더 쉘을 통해 부팅 로그를 동일하게 재현해보면, 감이 잡힘
▪ 네트워크 관련 공부 제대로 하고 오기 (특히 ARP 테이블)
▪ 플래시 메모리(a.k.a. ROM) 덤프가 막혀 있어?
▪ 메모리 덤프가 되는지 확인!
▪ 플래시 메모리(or ROM) 데이터를 RAM으로 적재 시키면 됨
▪ RAM으로 적재된 데이터를 명령어를 통해 보거나, 덤프를 뜨면 끝
60
61. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 메모리 (a.k.a. RAM) 조작이 불가능해?
▪ 별로 큰 문제는 안 되지만, 약간 불편함이 동반 됨
▪ 메모리 데이터 값을 조작하면서, 작동 원리나 중요한 정보를 알 수 있음
▪ 특히, 덤프를 못 뜨겠으면, 메모리 내용을 콘솔로 다 출력 한 뒤 메모장 복
붙(…)으로 덤프 비스무리한 짓을 할 수도 있음
▪ 메모리 (a.k.a. RAM) 덤프가 막혀 있어?
▪ 제일 골 때리는 상황
▪ 보통 이게 막혀있으면, 이전 단계에 있었던 대부분의 삽질이 무의미해짐
▪ 다행히도 CFE의 경우 TFTP 같은 것을 지원하거나, CFE bootloader 펌웨
어 관리자 같은 녀석들이 존재
▪ 그냥 못해먹겠다면, 부트로더를 새로 때려박ㅇ… (실제로 시도는 안 해봄)
61
64. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
▪ 계속 CFE, CFE… 이러는데 CFE는 뭐지?
▪ Common Firmware Environment, 브로드컴 칩셋이 쓰는 부트로더!
▪ 칩셋명 확인하라는 이유가 이거!
▪ 소스코드/메뉴얼 모두 인터넷에 공개 되어 있음으로 소스 코드 보면서 공
격 가능!
▪ 그러나… 지속적인 소스코드 업데이트는 이루어지지 않는 실정인 듯
▪ 그렇다면 UBOOT는?
▪ 그냥 브로드컴 칩셋 아니면 쓰는 부트로더… 정도로 알아두면 편합니다.
▪ 샤오미 공유기 중 미디어텍 칩셋 쓰는 제품들 까다보면 자주 보게 됩니다.
▪ 얘도 소스코드가 인터넷에 공유되어 있음 (원체 오픈소스)
64
66. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
▪ CFE 메뉴얼을 읽다보면 펌웨어 구조가 어떻게 되어있는지 감이 잡힘!
▪ CFE 명령어 예제들을 실험해보면서, 공유기와 부트로더가 어떻게 작동되
는지에 대해서 알아보면서 공략해나가는 것도 한 방법!
▪ CFE 이야기를 많이 하는 건 제조사 메뉴얼의 설명과 소스코드 주석이 상
당히 잘 적혀있기 때문이자, 분석했던 IoT 서비스를 뚫는데 혁혁한 공(?)
을 세웠기 때문
▪ CFE라면 진절머리가 납니다 아악
▪ 공유기 관련해서는 Openwrt 위키를 애용하면 좋음
▪ Openwrt는 공유기 오픈소스 펌웨어 프로젝트
▪ 브로드컴 칩셋 위주로 펌웨어 포팅 중
▪ 위키에 공유기 종류별 덤프 방법부터 시스템 구조까지 다 나와 있음
66
75. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ 요긴한 명령어들
▪ 메모리 덤프 (d)
▪ 메모리 적재 (f)
▪ 메모리 수정 (e)
▪ arp table & tftp (arp, save)
▪ nvram show
▪ 펌웨어 (원격) 로드 (load)
▪ 그 외 다양한 명령어들 …
75
76. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ NVRAM 명령어
▪ 롬 데이터는 쓰기에 대한 비용이 너무 크고, 램은 전원이 나가면 끝장 남
▪ 그래서 타협책으로 나온 것이 nvram!
▪ nvram은 비휘발성 플래시 메모리로 공유기 상태를 저장하는 부분
▪ CFE 부트로더는 nvram 데이터 덤프와 조작이 모두 가능!
▪ 제품 세팅이 저장되어 있음
▪ Wifi 비밀번호, 펌웨어 정보, 각종 유용한 데이터…
▪ IoT 기기에 관련된 정보도……?
76
77. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ CFE firmware server
▪ 부트로더로 진입시 부트로더는 자동적으로 Firmware Server를 킴
▪ 공유기에 연결된 컴퓨터로 192.168.0.1에 접속하면 사용 가능
▪ 펌웨어를 업로드하면, EEPROM(a.k.a. ROM)에 펌웨어를 알아서 써줌
▪ 펌웨어 수정 후 업로드 과정이 상당히 편해짐
▪ 명령어 인젝션 취약점이 존재함…… (…)
77
78. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ CFE firmware server
▪ 부트로더로 진입시 부트로더는 자동적으로 Firmware Server를 킴
▪ 공유기에 연결된 컴퓨터로 192.168.0.1에 접속하면 사용 가능
▪ 펌웨어를 업로드하면, EEPROM(a.k.a. ROM)에 펌웨어를 알아서 써줌
▪ 펌웨어 수정 후 업로드 과정이 상당히 편해짐
▪ 명령어 인젝션 취약점이 존재함…… (…)
78
81. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 절망적인 상황
▪ SHOW 명령어가 없음 : 내부 구성이 어떻게 되어있는지 하나도 모름
▪ 메모리 수정, 덤프 관련 명령어 없음 : 메모리 조작 실질적으로 불가
▪ BOOT, GO, LOAD와 TFTP, ARP 만으로 모든 걸 해결해야하는 상황
▪ 계획을 세워보자
▪ 일단 기존 명령어들 중에 쓸만한게 있는지 확인해보자
▪ 콘솔에 출력되는 내용들을 하나하나 살펴보는 것도 나쁘진 않음
▪ CFE 메뉴얼에 언급된 것들이 실제로 존재하는지에 대해 확인해보는 것도
한 방법
▪ Step by Step으로 적용 -> 테스트 -> 적용 -> 테스트
81
86. ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 종합적으로 내린 결과
▪ 연결 된 tftp 서버로 데이터 전송이 가능하다 (Using Save)
▪ tftp 명령어로 메모리의 데이터를 외부로 전송이 가능하다
▪ 부트로더로 진입하면, 커널 이미지는 메모리에 적재되지 않는 상태이다
▪ Boot 명령어와 Load 명령어는 롬에서 메모리로 데이터를 적재 시킨다
▪ 부팅 로그에서 Boot 명령어로 어느 부분을 적재시키는 지 볼 수 있다
▪ Load 명령어로 똑같은 옵션을 주면 메모리에 커널 이미지가 올라간다
▪ ARP 테이블은 자동으로 갱신되지 않는다
▪ 외부 TFTP 서버의 ip를 ARP 테이블에 올리는 삽질을 하면 된다
86
91. ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ 분석은 이제 뭘 어떻게 하지?
▪ binwalk
▪ firmware mod kit
▪ HEX 값 분석
▪ HxD
▪ xxd
▪ 그리고 마지막 비기… 7-Zip (?!)
91
92. ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ 사실 앞에서 언급한 다양한 방법들은… 보여주기용이었습니다 하핫
▪ binwalk? fmk? 쓰지 않아도 됩니다.
▪ 7-Zip은 알아서 압축 파일 구조를 분석해주고, 알아서 풀어줍니다.
▪ 펌웨어 파일 던져놓으면, 손상이 되어 있건, 오류가 있건, 헤더가 없건
할 수 있는 만큼 분석해서 결과를 내줍니다.
▪ CTF 중 펌웨어 포렌식 문제 빨리 푸는 팁이도 하고요.
▪ 요번 TrendMicro 때에도 펌웨어 파일 7-Zip으로 열어버린 1인
▪ 자매품 WinRAR도 있습니다.
92
93. ICEWALL
그래 결국 뜯어낸 거 같아
▪ 안녕 난 BusyBox라고 해!
▪ 임베디드 장비에 다량의 명령어 파일을 올리는 것은 오버헤드가 큼
▪ 단일화 된 명령어 관리 시스템이 필요!
▪ 그래서 나온 게 BusyBox
▪ /sbin /bin 을 뒤지다보면, 다량의 심볼릭 링크가 발견되는데, 다 BusyBox
에 연결되어 있음.
▪ 만약 펌웨어 업로드가 가능하다면, BusyBox 기능을 이용해 (e.g. ssh) 기
기 조종을 좀 더 용이하게 할 수 있는 방법들이 존재
93
94. ICEWALL
그래 결국 뜯어낸 거 같아
▪ /tmp엔 무엇이 올라올까?
▪ 기존의 리눅스의 tmp 폴더와 동일하다고 생각하면 좋음
▪ tmp에는 임시로 쓰는 데이터들이 저장됨
▪ 근데 왜 이게 중요하지…?
▪ 힌트 : 펌웨어 업데이트가 불가능한 상황에서, 지속적인 IoT 장비 추가가
이루어지고, 핫픽스를 할 수 있어야함
▪ /tmp에 새로운 펌웨어 bin 파일을 업로드하거나 (이후 flash로 플래싱 시
킴), 장비 설정 관련한 데이터를 서버에서 다운로드 받아서 씀
▪ 결론 : /tmp 데이터를 뒤지다보면, IoT 컨트롤 관련 정보들이나 제어 시스
템을 뜯어낼 수 있음
94
95. ICEWALL
그래 결국 뜯어낸 거 같아
▪ IDA/Hopper 좀 써보자!
▪ 결국, 다량의 어셈블리를 보면서 생활하기는 싫은 상황
▪ ARM 계열이라면, 디컴파일러가 존재하고, 얘를 통해서 분석하는게 빠른
편
▪ Hopper는 OS X, Linux 지원을 하니 Hopper 쓰실 분을 쓰시길
▪ Intel x86 HEX를 뜯어보자!
95
99. ICEWALL
한 발짝 더
▪ 구글링
▪ file:pdf 로 pdf 파일만 검색 해 보기(취약점 분석 보고서들이 걸림)
▪ 분석 보고서, 논문(구글 scholar 및 정부 기관 사이트)위주로 검색 해 보기
▪ 제품명이나 칩셋명에 UART나 디버깅이란 단어를 넣고 검색 해보기
▪ Openwrt Wiki 검색 해보기
▪ 데이터 시트 / 메뉴얼 / 소스코드
▪ 구글링이나 제조사에서 찾아낸 것들을 통해서 전반적인 작동 원리를 공부
하고, 분석에 들어가는 것도 나쁘진 않음 (계속 반복해서 말하는 중)
▪ 책
▪ 임베디드 레시피 (꼭 읽어보시길!!!) http://recipes.egloos.com/
99
100. ICEWALL
한 발짝 더
▪ 각종 보안 컨퍼런스 발표 자료들
▪ 코드게이트
▪ 코드엔진
▪ 시큐인사이드
▪ 블랙햇
▪ 데프콘
▪ ……
100
102. ICEWALL
한 발짝 더 - 상부상조합시다
▪ 제품 UART나 JTAG 디버깅 성공하면, 블로그에 올려주세요!네이버 블로그는 빼고
▪ 제품명, 제조사, 제품코드, 디버깅 포트, 보드레이트, 부팅 로그 정도…?
▪ Z-Wave 관련 한국 자료들이 너무 없습니다!
▪ 좋은 글 있으면 번역!
▪ 삽질 기록이나 분석 자료 공유도 부탁드립니다!
▪ 제품 개발이나 API, 드라이버 개발하면 Github에 공유해주세요!
▪ OpenWrt나 각종 오픈소스에 기여해주세요!
▪ 오픈소스에 힘을 보탤수록 많은 사람들이 혜택을 받습니다.
▪ 여러사람들이 힘을 합치면, 더 좋은 결과가 나옵니다.
▪ 커스텀 펌웨어로 더 나은 UX를 제공해주세요!
102