SlideShare una empresa de Scribd logo
1 de 107
Descargar para leer sin conexión
2016년 7월 3일
All your base are belong to us
IoT 펌웨어 추출 및 분석 - ICEWALL 오효근
ICEWALL
너 누구냐?
2
ICEWALL
너 누구냐?
▪ 강남 종로학원 특별반
▪ 한양대학교 14학번
▪ Best of the Best 4기 취약점분석 트랙
▪ 한양대학교 ICEWALL 16년도 부회장
▪ 개발 싫어하는, 입코딩으로 먹고사는 잉여인간
▪ 경영 부전공, 행정학 복수전공 중인 답이 안 나오는 잉여인간
3
ICEWALL
IoT란 무엇인가요?
4
ICEWALL
IoT란 무엇인가? 희망편
5
자동으로 켜지는 전등
시간 되면 취사하는 밥솥
알아서 주문하는 냉장고
ICEWALL
IoT란 무엇인가? 파멸편
6
몇일 전 당한 해킹
세기말 해커
랜섬웨어
IoT 딱지가 붙은
뭔지 모를 가전제품
ICEWALL
Insecurity in the Internet of Things
by 사만텍
7
ICEWALL
IoT란 무엇인가요?
▪ 약 19 퍼센트의 IoT 제어용 앱이 클라우드 서비스에 접속 할 때 SSL을 사용을
안 함
▪ 어떠한 장비도 서버-클라이언트간 상호인증을 하지 않음
▪ 일부 IoT 클라우드 서비스는 2채널 인증을 지원하지 않음
▪ 패스워드 브루트포싱을 막기 위한 로그인 지연을 지원하지 않음
▪ 일부 장비는 계정 수집을 막을 방법을 제공하지 않음
▪ 다수의 IoT 클라우드 플랫폼은 기존 웹 취약점과 동일한 취약점들을 갖고 있음
▪ 15개의 IoT 제어 웹 페이지에서 10개의 심각한 보안 결함 발견
▪ 그 중 6개는 비인가 사용자의 장비 제어 권한임
▪ 대부분의 장비는 암호화되거나 인증된 펌웨어 업데이트를 제공하지 않음
8
ICEWALL
왜 IoT는 이 꼴인가요?
9
ICEWALL
왜 IoT는 이 꼴인가요?
▪ 짧은 개발 기간
▪ 미숙련 인력의 투입
▪ 네트워크과 보안에 대한 개념이 부족한 임베디드 개발자 폐쇄망만 해봤는데요…? SSL…? 보안…?
▪ 제한된 디바이스의 성능
▪ 전력 대비 성능의 한계 RSA? 개나 주라 그래!
▪ 제한적 램 사이즈 안녕! 32메가 램!
▪ 소형화를 위한 제한된 부품의 선택 크고 아름다운 건 안 돼!
▪ 프로그래밍 언어 선택의 제한 C or C++ …?
▪ 한 번 업로드 되면 다시 업데이트 되기 힘든 펌웨어
▪ 옛날과 별 차이가 없는 코드들 한 리눅스 커널 2.6 하실래예? / CFE bootloader since 2000
▪ 복잡한 N:M 구조 아아, IoT 세계에 디바이스들이 가득해…

장비가 죽으면 대응은? / 장비가 응답을 안하면 대응은? / Heartbeat나 Command를 신뢰 할 수 있나?

앱 <-> 서버 <-> 허브 <-> IoT 통신은 어떻게 하지?
10
ICEWALL
그러나, 시장은 커지고 잇다
11
ICEWALL
그러나 시장은 커지고 잇다
12
ICEWALL
그러나 시장은 커지고 잇다
13
ICEWALL
그러나 시장은 커지고 잇다
14
ICEWALL
그러나 시장은 커지고 잇다
15
ICEWALL
통신사 + 건설사 +
방범업체 + 가전제품 회사
16
그러나 시장은 커지고 잇다
ICEWALL
=
17
그러나 시장은 커지고 잇다
ICEWALL
그러나 시장은 커지고 잇다
18
ICEWALL
응, 그래 중요하다는 건 알겠어
19
ICEWALL
그래서?
20
ICEWALL
뭐긴 뭐야 빨대 꼽아야지!
21
ICEWALL
분석하려면 뭐가 필요한지 알아봅시다
22
ICEWALL
기술 스택
▪ 구글링 능력
▪ 전기전자공학 지식
▪ 전파공학, 전기공학, 반도체공학, 회로이론, 납땜 및 기본적 공구 사용법…
▪ 컴퓨터공학 지식
▪ 로우레벨 하드웨어 제어, 어셈블리, 리눅스 시스템 구조, 네트워크…
▪ 개발 능력
▪ 백엔드, 안드로이드/아이폰, 리눅스 디바이스 드라이버, 커널 소스코드 분
석, 부트로더 소스코드 분석, 부팅 시퀀스 이해, 임베디드 개발……
▪ 보안 지식
▪ 암호화 방식, 해싱, 웹 해킹, 포너블, 리버싱……?
23
ICEWALL
기술 스택
24
ICEWALL
기술 스택
25
ICEWALL
사실 그렇게는 어렵지 않습니다!
26
ICEWALL
사실 그렇게 어렵지는 않습니다!
▪ 얕은 지식 여러가지 > 깊은 지식 한 가지 (사실 제대로 하려면 깊은 지식 여러가지…)
▪ 임베디드는 처음부터 하는 건 힘들지만, 남이 한 거 따라하는 건 상당히 쉬움
▪ 여러 꼼수들이 많음!
▪ 그래서! 꼼수들만으로 한 번 분석해보자!란 게 이번 주제
27
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
ICEWALL
Cheat Sheet
▪ 이름을 알아낸 칩셋의 Data Sheet 구글링
▪ 칩셋에 대한 자세한 정보를 얻을 수 있음
▪ 디버깅 포트나 각종 설정용 포트 등 공략 가능한 부분들을 찾아낼 수 있음

=> UART/JTAG 등을 붙일 방법을 생각해 낼 수 있음
▪ 칩셋의 전체 기능 중 사용되는 부분과 안 되는 부분을 확인 가능
▪ 같은 칩셋을 사용하는 타 제품들(or 자매 제품)의 펌웨어 분석을 용이하
게 해주거나, 타 제품의 펌웨어를 통해 현 제품 분석 가능
▪ CPU : 디버깅용 포트가 어디 붙어있는지 확인 할 것!
▪ 통신 모듈 : 스펙을 통해 하드웨어 기반 암호화 모듈 존재 여부를 확인
▪ RAM/ROM : 사이즈가 상식을 벗어나면, 뭔가 잘못 만들어진 제품일 가능성
29
ICEWALL
칩셋 구글링 시연
30
ICEWALL
그래서 이제 디버깅을 하자!
31
ICEWALL
그래 이제 디버깅을 하자!
1.공구랑 친해지기
2.부품과 친해지기
3.장비와 친해지기
4.UART 연결 하기
5.쉘 띄우기
6.분석 하기
32
ICEWALL
공구랑 친해져보자!
33
ICEWALL
그래 이제 디버깅을 하자! feat. 공구랑 친해져보자!
▪ 인두
▪ 여러분이 아는 그거
▪ 인두는 팁 관리가 핵심!
▪ 온도는 저온을 추천하나, 초보자는 꼭 기판을 저온화상 ^^; 입힘으로 중
간이나 고출력 써서 빠르고 화끈하게 끝내도 됨 (대신 부품에 무리가…)
▪ 오래 쓸 거면 핫코(HAKKO), 단기간에 싼 맛에 쓸 거면 아남전자 제품
▪ 납
▪ 무연납/유연납으로 나뉨
▪ 무연납이 비싸지만, 폐를 생각하면 무연납을 쓰는 걸 권장
▪ 동글동글 잘 뭉쳐진다고 유연납 쓰겠다고 하면… 납중독 주의하세요 ^^;
34
ICEWALL
그래 이제 디버깅을 하자! feat. 공구랑 친해져보자!
▪ 인두 거치대 : 있으면 편함
▪ 철수세미 : 있으면 정말 편함
▪ 납 흡입기 : 여러분은 금손이 아니기 때문에 꼭 단자를 합선을 시킵니다
▪ 플럭스 / 솔더윅
▪ 좋은 납땜을 위해서는 무조건 필요
▪ 특히 칩을 뜯어내거나, SMD 납땜시에는 핵심이라고 볼 수 있는 녀석
▪ 와이어스트리퍼 : 커터칼이나 라이터 지지기로 선 벗기기 싫다면…
▪ 니퍼 / 롱노우즈니퍼 : 있으면, 제품 파ㅋ괘ㅋ가 쉬워집니다
▪ 핀셋 : 있으면 좋음. 약국에서 파는 핀셋도 좋음
▪ 칩 거치대 : 납땜 하면서 스트레스를 덜 받음
35
ICEWALL
부품과 친해져보자!
36
ICEWALL
그래 이제 디버깅을 하자! feat. 부품과 친해져보자!
▪ 빵판
▪ 점퍼 케이블
▪ 가성비는 떨어지지만, 한 뭉텅이 사 두면 정말 도움 됩니다.
▪ 암암, 수수, 암수 이렇게 구매 하시면 됩니다.
▪ 핀헤더
▪ UART나 JTAG 포트에 핀헤더 납땜 후 점퍼케이블로 연결하면 편합니다
37
ICEWALL
그래 이제 디버깅을 하자! feat. 부품과 친해져보자!
▪ 아두이노 / 라즈베리파이
▪ GPIO로 모듈 제어나 간단한 UART 통신 같은 걸 할 수 있습니다.
▪ 라즈베리파이, 아두이노는 한 대 씩 갖고 있으면 여러모로 편합니다.
▪ 저항 / LED / 각종 센서류
▪ LED는 전기가 통하는지 확인 할 때 씁니다.
▪ 센서류는 실습을 통해 타겟 디바이스의 작동 구조를 파악할 때 씁니다.
▪ 블루투스 / Wifi / RF 모듈
▪ 실제로 많은 장비들을 분석하게 되면, 기기간 통신 파트의 코드를 주로 보
게 되는데, 처음이라면 모르는 부분이 많습니다. 미리 실습해 두면 그나마
할 만 하죠.
▪ nRF24L01 모듈이 가성비도 좋고, 공부하는데 나쁘지 않은 편입니다.
38
ICEWALL
장비랑 친해져보자!
39
ICEWALL
그래 이제 디버깅을 하자! feat. 장비랑 친해져보자!
▪ 멀티미터기
▪ 저항, 전류, 전압, 그리고 (좋은 제품은) 캐퍼시터 용량 측정까지 가능함
▪ 제품 분석시 작동 전압, 흐르는 전류량을 통해, UART 포트의 위치나 Tx,
Rx 순서를 아는데 큰 도움이 됨
▪ Bus Pirate / Bus Blaster
▪ JTAG 장비, 가성비가 상당히 좋음
▪ Logic Sniffer
▪ 로직 아날라이저, 이 역시 가성비가 상당히 좋음
▪ 백문이불여일견
40
ICEWALL
그래 이제 디버깅을 하자! feat. 장비랑 친해져보자!
▪ 오실로스코프
▪ 임베디드 개발로 가겠다면 필수 용품
▪ 로직 아날라이저가 0과 1을 분석한다면, 오실로스코프는 파형 분석
▪ 다만, 구조의 복잡성 덕분에 채널 수가 로직 아날라이저보다 적음
▪ 채널 수, 분해능, 전압/전류 허용치 등에 의해서 가격이 결정 됨
▪ 초보자라면 DSO nano v3 제품을 사서 써보기를 추천 (89.99 달러)
41
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
ICEWALL
어디서 이걸 구하는데?
43
ICEWALL
그래 이제 디버깅을 하자! feat. 어디서 구하냐?
▪ 용산 전자랜드 지하 1층
▪ 세운 상가
▪ 인터넷 사이트
▪ 메카솔루션 http://www.mechasolution.com/ (아두이노 가성비 좋음)
▪ PIMORONI https://shop.pimoroni.com/ (라즈베리 파이 가성비 좋음)
▪ Dangerous Prototypes http://dangerousprototypes.com/ (최고!)
▪ Seeed Studio http://www.seeedstudio.com/ (Tools 카테고리 강추)
▪ SparkFun https://www.sparkfun.com (이것저것 살거 있으면…)
▪ Marutsu http://www.marutsu.co.jp/ (FPGA 등 취급 괜찮음)
▪ 엘레파츠/디바이스마트/엘레먼트14/알리익스프레스/아마존…
44
ICEWALL
그래 이제 디버깅을 하자! feat. 어디서 구하냐?
45
국제 배송비 9.99 달러
ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ UART가 가장 자주 사용 될 것입니다
▪ 기기의 UART 디버깅 포트를 찾는 방법은 3가지 정도
▪ UART, Debug, RS232… 라고 당당히 적혀있음
▪ 눈에 보이는 구멍 혹은 접점 4개 (혹은 5개나 그 이상)
▪ 칩셋의 Tx, Rx 다리 따라서 찾기 (데이터시트가 이래서 중요)
▪ Tx/Rx/Vcc/GND 찾는 방법
▪ Vcc : 항상 장비 최대 전압
▪ GND : 항상 장비 최저 전압 (혹은 0V)
▪ Tx/Rx가 제일 골치 아픔
46
ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Tx 찾기
▪ 풀업인지 풀다운용으로 Tx 쪽에는 트랜지스터가 달려있는 경우가 있음

(갑자기 연결하면 전압이 순간 급증하여 칩셋을 아프게 할 수 있음으로)
▪ 측정 전압이 클럭 따라 왔다갔다 하거나, Vcc 전류보다 낮게 나옴
▪ 측정 전류 값이 0mA 이상
▪ Rx 찾기
▪ Tx, Vcc, GND를 다 찾아냈으면 남은 녀석이 Rx
▪ 보통은 Rx로 추정되는 녀석에 꼽은 뒤 키보드를 두드렸을 때 콘솔 화면에
반응이 나타나는지 확인하는 걸로 제대로 붙었는지 확인
▪ GND랑 제일 많이 헷갈리게 됨, GND랑 Rx 바꿔먹으면 절대로 안 됨
47
ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ 로직 아날라이저
▪ 그냥 디버깅용으로 쓰일만한 부분에 다 붙여놓고 (…) 신호가 제대로 나오
는 녀석을 찾으면, Tx, Vcc, GND 찾을 수 있고, 그 근처에 Rx가 있을 테
니, Rx는 감으로 때려잡는다 (…)
▪ 오실로스코프
▪ 위의 방법과 비슷하나, 좀 더 자세한 파형 관찰이 가능하다 (?)
▪ 채널 수가 적기에, 로직 아날라이저보다 삽질을 많이 해야한다 (…)
48
ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Baudrate는 초당 보내는 심볼의 갯수 (의미를 지닐 수 있는 시그널의 개수)
▪ 일반적으로 자주 쓰이는 Baud Rate가 있음

(ARM 계열 칩셋의 경우 115200부터 일단 해보고 시작)
▪ 115200
▪ 57600
▪ 38400
▪ 19200
▪ 14400
▪ 9600
▪ 2400
49
ICEWALL
그래 이제 디버깅을 하자! feat. 칩셋에 연결을 해보자!
▪ Linux / OS X
▪ screen /dev/tty.usbserial 115200
▪ screen [붙일 tty] [Baud Rate]
▪ Windows
▪ xshell
▪ putty
50
ICEWALL
실습을 해봅시다
51
ICEWALL
Let’s dive to the SHELL!
52
ICEWALL
외 않돼지?
53
ICEWALL
Let’s dive to the SHELL - 외 않돼지?
▪ 출력이 안 돼요
▪ 제대로 납땜 한 거 맞나요?
▪ 출력이 되는데 이상한 글자가 나와요
▪ 제대로 남땜 한 거 맞나요?
▪ 보드레이트 제대로 맞춘거 맞나요? (중요)
▪ 입력이 안 돼요
▪ 제대로 납땜 한 거 맞나요?
▪ 입력이 되는데 이상한 글자가 들어가요
▪ 제대로 납땜 한 거 맞나요?
▪ 합선 된 거 아니에요?
54
ICEWALL
…… Let’s dive to the SHELL…?
55
ICEWALL
Let’s dive to the SHELL
▪ 일반적인 임베디드 장비 부팅 시퀀스 :

전원 인가 -> 부트로더 적재 후 실행 -> 롬의 내용을 램에 적재 (커널 적재) ->
리눅스 부팅 시퀀스 진입 -> 각종 데몬/프로세스 실행 -> 공유기 작동 시작
56
ICEWALL
Let’s dive to the SHELL
▪ 부트로더 진입 시 Ctrl-D, Ctrl-C, Ctrl-Z, ESC 등 각종 부팅을 멈출 수 있는 키
조합을 찾아서 부팅 시퀀스를 종료 한다
▪ 부팅 시퀀스가 중단 되면, 부트로더 자체 쉘이 뜨고 부트로더 명령어를 통해 공
유기 제어가 가능해진다!
▪ 명령어를 통해 RAM/ROM 덤프나 TFTP로 파일 전송, 부트로더 자체 웹 서버
를 통한 펌웨어 업로드가 가능해진다!
▪ 그러나……
57
ICEWALL
어라 좀 어렵다?
58
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 보안을 위해 제조사 커스텀으로 명령어들을 막아 놓은 경우가 있음
▪ 시스템 정보를 볼 수가 없어?
▪ 플래시 메모리(a.k.a. ROM) 덤프가 막혀 있어?
▪ 메모리 (a.k.a. RAM) 조작이 불가능해?
▪ 메모리 (a.k.a. RAM) 덤프가 막혀 있어?
▪ 결국 운과 시간과 노력이 모두 필요함!
▪ 덤프가 안 되면 덤프를 시킬 다른 방법을 찾기 (JTAG / 메모리 직접 덤프)
▪ 안되는 것처럼 보이는 경우가 있음 (디버깅 필수 명령어는 못 막음ㅋ…)
▪ 다른 제품을 뜯거나, 메뉴얼을 보면서 감추어진 공략법 찾아보기
59
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 시스템 정보를 볼 수가 없어?
▪ 제일 골 때리는 경우는 아니지만, 초심자가 중도 포기의 원인
▪ CFE의 경우 flash0, flash1 같은 형식으로 롬 접근을 하는 식임.
▪ 부팅시 나오는 부팅 로그 자세히 살펴보기 (중요)
▪ 부트로더 쉘을 통해 부팅 로그를 동일하게 재현해보면, 감이 잡힘
▪ 네트워크 관련 공부 제대로 하고 오기 (특히 ARP 테이블)
▪ 플래시 메모리(a.k.a. ROM) 덤프가 막혀 있어?
▪ 메모리 덤프가 되는지 확인!
▪ 플래시 메모리(or ROM) 데이터를 RAM으로 적재 시키면 됨
▪ RAM으로 적재된 데이터를 명령어를 통해 보거나, 덤프를 뜨면 끝
60
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다?
▪ 메모리 (a.k.a. RAM) 조작이 불가능해?
▪ 별로 큰 문제는 안 되지만, 약간 불편함이 동반 됨
▪ 메모리 데이터 값을 조작하면서, 작동 원리나 중요한 정보를 알 수 있음
▪ 특히, 덤프를 못 뜨겠으면, 메모리 내용을 콘솔로 다 출력 한 뒤 메모장 복
붙(…)으로 덤프 비스무리한 짓을 할 수도 있음
▪ 메모리 (a.k.a. RAM) 덤프가 막혀 있어?
▪ 제일 골 때리는 상황
▪ 보통 이게 막혀있으면, 이전 단계에 있었던 대부분의 삽질이 무의미해짐
▪ 다행히도 CFE의 경우 TFTP 같은 것을 지원하거나, CFE bootloader 펌웨
어 관리자 같은 녀석들이 존재
▪ 그냥 못해먹겠다면, 부트로더를 새로 때려박ㅇ… (실제로 시도는 안 해봄)
61
ICEWALL
일단 우회로를 찾아봅시다
62
ICEWALL
CFE / UBOOT
63
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
▪ 계속 CFE, CFE… 이러는데 CFE는 뭐지?
▪ Common Firmware Environment, 브로드컴 칩셋이 쓰는 부트로더!
▪ 칩셋명 확인하라는 이유가 이거!
▪ 소스코드/메뉴얼 모두 인터넷에 공개 되어 있음으로 소스 코드 보면서 공
격 가능!
▪ 그러나… 지속적인 소스코드 업데이트는 이루어지지 않는 실정인 듯
▪ 그렇다면 UBOOT는?
▪ 그냥 브로드컴 칩셋 아니면 쓰는 부트로더… 정도로 알아두면 편합니다.
▪ 샤오미 공유기 중 미디어텍 칩셋 쓰는 제품들 까다보면 자주 보게 됩니다.
▪ 얘도 소스코드가 인터넷에 공유되어 있음 (원체 오픈소스)
64
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
▪ 그러면, 얘네 정보를 어디서 얻지?
▪ CFE 메뉴얼
▪ http://melbourne.wireless.org.au/files/wrt54/cfe.pdf
▪ CFE 소스코드
▪ https://www.broadcom.com/support/communications-
processors
▪ UBOOT 소스코드
▪ http://www.denx.de/wiki/U-Boot
▪ Openwrt 위키
▪ https://wiki.openwrt.org/
65
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
▪ CFE 메뉴얼을 읽다보면 펌웨어 구조가 어떻게 되어있는지 감이 잡힘!
▪ CFE 명령어 예제들을 실험해보면서, 공유기와 부트로더가 어떻게 작동되
는지에 대해서 알아보면서 공략해나가는 것도 한 방법!
▪ CFE 이야기를 많이 하는 건 제조사 메뉴얼의 설명과 소스코드 주석이 상
당히 잘 적혀있기 때문이자, 분석했던 IoT 서비스를 뚫는데 혁혁한 공(?)
을 세웠기 때문
▪ CFE라면 진절머리가 납니다 아악
▪ 공유기 관련해서는 Openwrt 위키를 애용하면 좋음
▪ Openwrt는 공유기 오픈소스 펌웨어 프로젝트
▪ 브로드컴 칩셋 위주로 펌웨어 포팅 중
▪ 위키에 공유기 종류별 덤프 방법부터 시스템 구조까지 다 나와 있음
66
ICEWALL
메뉴얼 좀 봅시다
67
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
68
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
69
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
70
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
71
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
72
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT
73
ICEWALL
CFE를 요리해보자!
74
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ 요긴한 명령어들
▪ 메모리 덤프 (d)
▪ 메모리 적재 (f)
▪ 메모리 수정 (e)
▪ arp table & tftp (arp, save)
▪ nvram show
▪ 펌웨어 (원격) 로드 (load)
▪ 그 외 다양한 명령어들 …
75
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ NVRAM 명령어
▪ 롬 데이터는 쓰기에 대한 비용이 너무 크고, 램은 전원이 나가면 끝장 남
▪ 그래서 타협책으로 나온 것이 nvram!
▪ nvram은 비휘발성 플래시 메모리로 공유기 상태를 저장하는 부분
▪ CFE 부트로더는 nvram 데이터 덤프와 조작이 모두 가능!
▪ 제품 세팅이 저장되어 있음
▪ Wifi 비밀번호, 펌웨어 정보, 각종 유용한 데이터…
▪ IoT 기기에 관련된 정보도……?
76
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ CFE firmware server
▪ 부트로더로 진입시 부트로더는 자동적으로 Firmware Server를 킴
▪ 공유기에 연결된 컴퓨터로 192.168.0.1에 접속하면 사용 가능
▪ 펌웨어를 업로드하면, EEPROM(a.k.a. ROM)에 펌웨어를 알아서 써줌
▪ 펌웨어 수정 후 업로드 과정이 상당히 편해짐
▪ 명령어 인젝션 취약점이 존재함…… (…)
77
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - CFE를 요리해보자!
▪ CFE firmware server
▪ 부트로더로 진입시 부트로더는 자동적으로 Firmware Server를 킴
▪ 공유기에 연결된 컴퓨터로 192.168.0.1에 접속하면 사용 가능
▪ 펌웨어를 업로드하면, EEPROM(a.k.a. ROM)에 펌웨어를 알아서 써줌
▪ 펌웨어 수정 후 업로드 과정이 상당히 편해짐
▪ 명령어 인젝션 취약점이 존재함…… (…)
78
ICEWALL
찾았다 우회로!
79
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
80
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 절망적인 상황
▪ SHOW 명령어가 없음 : 내부 구성이 어떻게 되어있는지 하나도 모름
▪ 메모리 수정, 덤프 관련 명령어 없음 : 메모리 조작 실질적으로 불가
▪ BOOT, GO, LOAD와 TFTP, ARP 만으로 모든 걸 해결해야하는 상황
▪ 계획을 세워보자
▪ 일단 기존 명령어들 중에 쓸만한게 있는지 확인해보자
▪ 콘솔에 출력되는 내용들을 하나하나 살펴보는 것도 나쁘진 않음
▪ CFE 메뉴얼에 언급된 것들이 실제로 존재하는지에 대해 확인해보는 것도
한 방법
▪ Step by Step으로 적용 -> 테스트 -> 적용 -> 테스트
81
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
82
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 명령어 분석
▪ boot
▪ load
▪ save
▪ flash
▪ nvram
▪ …
83
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 콘솔 내용 중 쓸만한거?
84
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ CFE 메뉴얼에는 뭐라고 적혀있었더라?
85
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
▪ 종합적으로 내린 결과
▪ 연결 된 tftp 서버로 데이터 전송이 가능하다 (Using Save)
▪ tftp 명령어로 메모리의 데이터를 외부로 전송이 가능하다
▪ 부트로더로 진입하면, 커널 이미지는 메모리에 적재되지 않는 상태이다
▪ Boot 명령어와 Load 명령어는 롬에서 메모리로 데이터를 적재 시킨다
▪ 부팅 로그에서 Boot 명령어로 어느 부분을 적재시키는 지 볼 수 있다
▪ Load 명령어로 똑같은 옵션을 주면 메모리에 커널 이미지가 올라간다
▪ ARP 테이블은 자동으로 갱신되지 않는다
▪ 외부 TFTP 서버의 ip를 ARP 테이블에 올리는 삽질을 하면 된다
86
ICEWALL
Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로!
87
ICEWALL
그래서 덤프는 뜬 거 같은데…
88
ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ 분석은 이제 뭘 어떻게 하지?
▪ binwalk
▪ firmware mod kit
▪ HEX 값 분석
▪ HxD
▪ xxd
89
ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ binwalk
▪ 블라블라블라
▪ firmware mod kit
▪ 블라블라블라
▪ HEX값 (LZMA 시그니쳐)
▪ 블라블라블라
90
ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ 분석은 이제 뭘 어떻게 하지?
▪ binwalk
▪ firmware mod kit
▪ HEX 값 분석
▪ HxD
▪ xxd
▪ 그리고 마지막 비기… 7-Zip (?!)
91
ICEWALL
그래서 덤프는 뜬 거 같은데…
▪ 사실 앞에서 언급한 다양한 방법들은… 보여주기용이었습니다 하핫
▪ binwalk? fmk? 쓰지 않아도 됩니다.
▪ 7-Zip은 알아서 압축 파일 구조를 분석해주고, 알아서 풀어줍니다.
▪ 펌웨어 파일 던져놓으면, 손상이 되어 있건, 오류가 있건, 헤더가 없건

할 수 있는 만큼 분석해서 결과를 내줍니다.
▪ CTF 중 펌웨어 포렌식 문제 빨리 푸는 팁이도 하고요.
▪ 요번 TrendMicro 때에도 펌웨어 파일 7-Zip으로 열어버린 1인
▪ 자매품 WinRAR도 있습니다.
92
ICEWALL
그래 결국 뜯어낸 거 같아
▪ 안녕 난 BusyBox라고 해!
▪ 임베디드 장비에 다량의 명령어 파일을 올리는 것은 오버헤드가 큼
▪ 단일화 된 명령어 관리 시스템이 필요!
▪ 그래서 나온 게 BusyBox
▪ /sbin /bin 을 뒤지다보면, 다량의 심볼릭 링크가 발견되는데, 다 BusyBox
에 연결되어 있음.
▪ 만약 펌웨어 업로드가 가능하다면, BusyBox 기능을 이용해 (e.g. ssh) 기
기 조종을 좀 더 용이하게 할 수 있는 방법들이 존재
93
ICEWALL
그래 결국 뜯어낸 거 같아
▪ /tmp엔 무엇이 올라올까?
▪ 기존의 리눅스의 tmp 폴더와 동일하다고 생각하면 좋음
▪ tmp에는 임시로 쓰는 데이터들이 저장됨
▪ 근데 왜 이게 중요하지…?
▪ 힌트 : 펌웨어 업데이트가 불가능한 상황에서, 지속적인 IoT 장비 추가가
이루어지고, 핫픽스를 할 수 있어야함
▪ /tmp에 새로운 펌웨어 bin 파일을 업로드하거나 (이후 flash로 플래싱 시
킴), 장비 설정 관련한 데이터를 서버에서 다운로드 받아서 씀
▪ 결론 : /tmp 데이터를 뒤지다보면, IoT 컨트롤 관련 정보들이나 제어 시스
템을 뜯어낼 수 있음
94
ICEWALL
그래 결국 뜯어낸 거 같아
▪ IDA/Hopper 좀 써보자!
▪ 결국, 다량의 어셈블리를 보면서 생활하기는 싫은 상황
▪ ARM 계열이라면, 디컴파일러가 존재하고, 얘를 통해서 분석하는게 빠른
편
▪ Hopper는 OS X, Linux 지원을 하니 Hopper 쓰실 분을 쓰시길
▪ Intel x86 HEX를 뜯어보자!
95
ICEWALL
알아두면 좋은 거
96
ICEWALL
알아두면 좋은 거
▪ CFE Web Server
▪ GPIO
▪ openzwave http://www.openzwave.com/
▪ z-wave stick
▪ Telnet/SSH
▪ usbls
▪ 안드로이드/아이폰 앱 분석
▪ ARP 스푸핑
▪ 포트 스캐닝
▪ NAT 필터링
97
ICEWALL
한 발짝 더
98
ICEWALL
한 발짝 더
▪ 구글링
▪ file:pdf 로 pdf 파일만 검색 해 보기(취약점 분석 보고서들이 걸림)
▪ 분석 보고서, 논문(구글 scholar 및 정부 기관 사이트)위주로 검색 해 보기
▪ 제품명이나 칩셋명에 UART나 디버깅이란 단어를 넣고 검색 해보기
▪ Openwrt Wiki 검색 해보기
▪ 데이터 시트 / 메뉴얼 / 소스코드
▪ 구글링이나 제조사에서 찾아낸 것들을 통해서 전반적인 작동 원리를 공부
하고, 분석에 들어가는 것도 나쁘진 않음 (계속 반복해서 말하는 중)
▪ 책
▪ 임베디드 레시피 (꼭 읽어보시길!!!) http://recipes.egloos.com/
99
ICEWALL
한 발짝 더
▪ 각종 보안 컨퍼런스 발표 자료들
▪ 코드게이트
▪ 코드엔진
▪ 시큐인사이드
▪ 블랙햇
▪ 데프콘
▪ ……
100
ICEWALL
상부상조합시다
101
ICEWALL
한 발짝 더 - 상부상조합시다
▪ 제품 UART나 JTAG 디버깅 성공하면, 블로그에 올려주세요!네이버 블로그는 빼고
▪ 제품명, 제조사, 제품코드, 디버깅 포트, 보드레이트, 부팅 로그 정도…?
▪ Z-Wave 관련 한국 자료들이 너무 없습니다!
▪ 좋은 글 있으면 번역!
▪ 삽질 기록이나 분석 자료 공유도 부탁드립니다!
▪ 제품 개발이나 API, 드라이버 개발하면 Github에 공유해주세요!
▪ OpenWrt나 각종 오픈소스에 기여해주세요!
▪ 오픈소스에 힘을 보탤수록 많은 사람들이 혜택을 받습니다.
▪ 여러사람들이 힘을 합치면, 더 좋은 결과가 나옵니다.
▪ 커스텀 펌웨어로 더 나은 UX를 제공해주세요!
102
동아리이름2016-07-03
ICEWALL
이 시각 KT는…
104
ICEWALL
이 시각 KT는…
105
ICEWALL
이 시각 KT는…
106
동아리이름2016-07-03

Más contenido relacionado

La actualidad más candente

IPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishIPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishBruno Cornec
 
A crash course in CRUSH
A crash course in CRUSHA crash course in CRUSH
A crash course in CRUSHSage Weil
 
4. Kubernetes - Application centric infrastructure kubernetes, contiv
4. Kubernetes - Application centric infrastructure  kubernetes, contiv4. Kubernetes - Application centric infrastructure  kubernetes, contiv
4. Kubernetes - Application centric infrastructure kubernetes, contivJuraj Hantak
 
Kubernetes Security
Kubernetes SecurityKubernetes Security
Kubernetes Securityinovex GmbH
 
A Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm BasebandsA Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm BasebandsPriyanka Aash
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardsonharryvanhaaren
 
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysThe world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysCodeOps Technologies LLP
 
Lifecycle Management with Foreman
Lifecycle Management with ForemanLifecycle Management with Foreman
Lifecycle Management with ForemanJulien Pivotto
 
How to do right cryptography in android part 3 / Gated Authentication reviewed
How to do right cryptography in android part 3 / Gated Authentication reviewedHow to do right cryptography in android part 3 / Gated Authentication reviewed
How to do right cryptography in android part 3 / Gated Authentication reviewedArash Ramez
 
A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)Siji Sunny
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at NetflixBrendan Gregg
 

La actualidad más candente (20)

IPMI is dead, Long live Redfish
IPMI is dead, Long live RedfishIPMI is dead, Long live Redfish
IPMI is dead, Long live Redfish
 
Deep Dive into the AOSP
Deep Dive into the AOSPDeep Dive into the AOSP
Deep Dive into the AOSP
 
Ceph on arm64 upload
Ceph on arm64   uploadCeph on arm64   upload
Ceph on arm64 upload
 
Vault
VaultVault
Vault
 
A crash course in CRUSH
A crash course in CRUSHA crash course in CRUSH
A crash course in CRUSH
 
Lets Encrypt!
Lets Encrypt!Lets Encrypt!
Lets Encrypt!
 
Podman rootless containers
Podman rootless containersPodman rootless containers
Podman rootless containers
 
4. Kubernetes - Application centric infrastructure kubernetes, contiv
4. Kubernetes - Application centric infrastructure  kubernetes, contiv4. Kubernetes - Application centric infrastructure  kubernetes, contiv
4. Kubernetes - Application centric infrastructure kubernetes, contiv
 
Kubernetes Security
Kubernetes SecurityKubernetes Security
Kubernetes Security
 
HTTP/3 in curl
HTTP/3 in curlHTTP/3 in curl
HTTP/3 in curl
 
Netcat - A Swiss Army Tool
Netcat - A Swiss Army ToolNetcat - A Swiss Army Tool
Netcat - A Swiss Army Tool
 
A Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm BasebandsA Journey into Hexagon: Dissecting Qualcomm Basebands
A Journey into Hexagon: Dissecting Qualcomm Basebands
 
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce RichardsonThe 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
The 7 Deadly Sins of Packet Processing - Venky Venkatesan and Bruce Richardson
 
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDaysThe world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
The world of Containers with Podman, Buildah, Skopeo by Seema - CCDays
 
Lifecycle Management with Foreman
Lifecycle Management with ForemanLifecycle Management with Foreman
Lifecycle Management with Foreman
 
Kamailio on Docker
Kamailio on DockerKamailio on Docker
Kamailio on Docker
 
How to do right cryptography in android part 3 / Gated Authentication reviewed
How to do right cryptography in android part 3 / Gated Authentication reviewedHow to do right cryptography in android part 3 / Gated Authentication reviewed
How to do right cryptography in android part 3 / Gated Authentication reviewed
 
A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)A deep dive into Android OpenSource Project(AOSP)
A deep dive into Android OpenSource Project(AOSP)
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
Cisco DCACI
Cisco DCACICisco DCACI
Cisco DCACI
 

Similar a Incognito 2016 - IoT 펌웨어 추출과 분석

허봉춘씨의 파란만장한 IoT 보드 만들기
허봉춘씨의 파란만장한 IoT 보드 만들기허봉춘씨의 파란만장한 IoT 보드 만들기
허봉춘씨의 파란만장한 IoT 보드 만들기Bongjun Hur
 
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기NAVER D2
 
[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기NAVER D2
 
Arduino 특강 강태욱
Arduino 특강   강태욱Arduino 특강   강태욱
Arduino 특강 강태욱Tae wook kang
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)Laehyoung Kim
 
데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기Gi-Yeon Nam
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 

Similar a Incognito 2016 - IoT 펌웨어 추출과 분석 (8)

허봉춘씨의 파란만장한 IoT 보드 만들기
허봉춘씨의 파란만장한 IoT 보드 만들기허봉춘씨의 파란만장한 IoT 보드 만들기
허봉춘씨의 파란만장한 IoT 보드 만들기
 
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
[1D2]아이비컨과 공유기 해킹을 통한 인도어 IOT 삽질기
 
[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기[142]편광을 활용한6 dof 전현기
[142]편광을 활용한6 dof 전현기
 
Arduino 특강 강태욱
Arduino 특강   강태욱Arduino 특강   강태욱
Arduino 특강 강태욱
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
 
데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기데브루키 170916 알쓸신잡 CPU 이야기
데브루키 170916 알쓸신잡 CPU 이야기
 
pyOpenCL 입문
pyOpenCL 입문pyOpenCL 입문
pyOpenCL 입문
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 

Incognito 2016 - IoT 펌웨어 추출과 분석

  • 1. 2016년 7월 3일 All your base are belong to us IoT 펌웨어 추출 및 분석 - ICEWALL 오효근
  • 3. ICEWALL 너 누구냐? ▪ 강남 종로학원 특별반 ▪ 한양대학교 14학번 ▪ Best of the Best 4기 취약점분석 트랙 ▪ 한양대학교 ICEWALL 16년도 부회장 ▪ 개발 싫어하는, 입코딩으로 먹고사는 잉여인간 ▪ 경영 부전공, 행정학 복수전공 중인 답이 안 나오는 잉여인간 3
  • 5. ICEWALL IoT란 무엇인가? 희망편 5 자동으로 켜지는 전등 시간 되면 취사하는 밥솥 알아서 주문하는 냉장고
  • 6. ICEWALL IoT란 무엇인가? 파멸편 6 몇일 전 당한 해킹 세기말 해커 랜섬웨어 IoT 딱지가 붙은 뭔지 모를 가전제품
  • 7. ICEWALL Insecurity in the Internet of Things by 사만텍 7
  • 8. ICEWALL IoT란 무엇인가요? ▪ 약 19 퍼센트의 IoT 제어용 앱이 클라우드 서비스에 접속 할 때 SSL을 사용을 안 함 ▪ 어떠한 장비도 서버-클라이언트간 상호인증을 하지 않음 ▪ 일부 IoT 클라우드 서비스는 2채널 인증을 지원하지 않음 ▪ 패스워드 브루트포싱을 막기 위한 로그인 지연을 지원하지 않음 ▪ 일부 장비는 계정 수집을 막을 방법을 제공하지 않음 ▪ 다수의 IoT 클라우드 플랫폼은 기존 웹 취약점과 동일한 취약점들을 갖고 있음 ▪ 15개의 IoT 제어 웹 페이지에서 10개의 심각한 보안 결함 발견 ▪ 그 중 6개는 비인가 사용자의 장비 제어 권한임 ▪ 대부분의 장비는 암호화되거나 인증된 펌웨어 업데이트를 제공하지 않음 8
  • 9. ICEWALL 왜 IoT는 이 꼴인가요? 9
  • 10. ICEWALL 왜 IoT는 이 꼴인가요? ▪ 짧은 개발 기간 ▪ 미숙련 인력의 투입 ▪ 네트워크과 보안에 대한 개념이 부족한 임베디드 개발자 폐쇄망만 해봤는데요…? SSL…? 보안…? ▪ 제한된 디바이스의 성능 ▪ 전력 대비 성능의 한계 RSA? 개나 주라 그래! ▪ 제한적 램 사이즈 안녕! 32메가 램! ▪ 소형화를 위한 제한된 부품의 선택 크고 아름다운 건 안 돼! ▪ 프로그래밍 언어 선택의 제한 C or C++ …? ▪ 한 번 업로드 되면 다시 업데이트 되기 힘든 펌웨어 ▪ 옛날과 별 차이가 없는 코드들 한 리눅스 커널 2.6 하실래예? / CFE bootloader since 2000 ▪ 복잡한 N:M 구조 아아, IoT 세계에 디바이스들이 가득해…
 장비가 죽으면 대응은? / 장비가 응답을 안하면 대응은? / Heartbeat나 Command를 신뢰 할 수 있나?
 앱 <-> 서버 <-> 허브 <-> IoT 통신은 어떻게 하지? 10
  • 16. ICEWALL 통신사 + 건설사 + 방범업체 + 가전제품 회사 16 그러나 시장은 커지고 잇다
  • 21. ICEWALL 뭐긴 뭐야 빨대 꼽아야지! 21
  • 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
  • 32. ICEWALL 그래 이제 디버깅을 하자! 1.공구랑 친해지기 2.부품과 친해지기 3.장비와 친해지기 4.UART 연결 하기 5.쉘 띄우기 6.분석 하기 32
  • 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
  • 44. ICEWALL 그래 이제 디버깅을 하자! feat. 어디서 구하냐? ▪ 용산 전자랜드 지하 1층 ▪ 세운 상가 ▪ 인터넷 사이트 ▪ 메카솔루션 http://www.mechasolution.com/ (아두이노 가성비 좋음) ▪ PIMORONI https://shop.pimoroni.com/ (라즈베리 파이 가성비 좋음) ▪ Dangerous Prototypes http://dangerousprototypes.com/ (최고!) ▪ Seeed Studio http://www.seeedstudio.com/ (Tools 카테고리 강추) ▪ SparkFun https://www.sparkfun.com (이것저것 살거 있으면…) ▪ Marutsu http://www.marutsu.co.jp/ (FPGA 등 취급 괜찮음) ▪ 엘레파츠/디바이스마트/엘레먼트14/알리익스프레스/아마존… 44
  • 45. ICEWALL 그래 이제 디버깅을 하자! feat. 어디서 구하냐? 45 국제 배송비 9.99 달러
  • 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
  • 52. ICEWALL Let’s dive to the SHELL! 52
  • 54. ICEWALL Let’s dive to the SHELL - 외 않돼지? ▪ 출력이 안 돼요 ▪ 제대로 납땜 한 거 맞나요? ▪ 출력이 되는데 이상한 글자가 나와요 ▪ 제대로 남땜 한 거 맞나요? ▪ 보드레이트 제대로 맞춘거 맞나요? (중요) ▪ 입력이 안 돼요 ▪ 제대로 납땜 한 거 맞나요? ▪ 입력이 되는데 이상한 글자가 들어가요 ▪ 제대로 납땜 한 거 맞나요? ▪ 합선 된 거 아니에요? 54
  • 55. ICEWALL …… Let’s dive to the SHELL…? 55
  • 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
  • 65. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT ▪ 그러면, 얘네 정보를 어디서 얻지? ▪ CFE 메뉴얼 ▪ http://melbourne.wireless.org.au/files/wrt54/cfe.pdf ▪ CFE 소스코드 ▪ https://www.broadcom.com/support/communications- processors ▪ UBOOT 소스코드 ▪ http://www.denx.de/wiki/U-Boot ▪ Openwrt 위키 ▪ https://wiki.openwrt.org/ 65
  • 66. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT ▪ CFE 메뉴얼을 읽다보면 펌웨어 구조가 어떻게 되어있는지 감이 잡힘! ▪ CFE 명령어 예제들을 실험해보면서, 공유기와 부트로더가 어떻게 작동되 는지에 대해서 알아보면서 공략해나가는 것도 한 방법! ▪ CFE 이야기를 많이 하는 건 제조사 메뉴얼의 설명과 소스코드 주석이 상 당히 잘 적혀있기 때문이자, 분석했던 IoT 서비스를 뚫는데 혁혁한 공(?) 을 세웠기 때문 ▪ CFE라면 진절머리가 납니다 아악 ▪ 공유기 관련해서는 Openwrt 위키를 애용하면 좋음 ▪ Openwrt는 공유기 오픈소스 펌웨어 프로젝트 ▪ 브로드컴 칩셋 위주로 펌웨어 포팅 중 ▪ 위키에 공유기 종류별 덤프 방법부터 시스템 구조까지 다 나와 있음 66
  • 68. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 68
  • 69. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 69
  • 70. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 70
  • 71. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 71
  • 72. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 72
  • 73. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - CFE/UBOOT 73
  • 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
  • 80. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! 80
  • 81. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! ▪ 절망적인 상황 ▪ SHOW 명령어가 없음 : 내부 구성이 어떻게 되어있는지 하나도 모름 ▪ 메모리 수정, 덤프 관련 명령어 없음 : 메모리 조작 실질적으로 불가 ▪ BOOT, GO, LOAD와 TFTP, ARP 만으로 모든 걸 해결해야하는 상황 ▪ 계획을 세워보자 ▪ 일단 기존 명령어들 중에 쓸만한게 있는지 확인해보자 ▪ 콘솔에 출력되는 내용들을 하나하나 살펴보는 것도 나쁘진 않음 ▪ CFE 메뉴얼에 언급된 것들이 실제로 존재하는지에 대해 확인해보는 것도 한 방법 ▪ Step by Step으로 적용 -> 테스트 -> 적용 -> 테스트 81
  • 82. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! 82
  • 83. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! ▪ 명령어 분석 ▪ boot ▪ load ▪ save ▪ flash ▪ nvram ▪ … 83
  • 84. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! ▪ 콘솔 내용 중 쓸만한거? 84
  • 85. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! ▪ CFE 메뉴얼에는 뭐라고 적혀있었더라? 85
  • 86. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! ▪ 종합적으로 내린 결과 ▪ 연결 된 tftp 서버로 데이터 전송이 가능하다 (Using Save) ▪ tftp 명령어로 메모리의 데이터를 외부로 전송이 가능하다 ▪ 부트로더로 진입하면, 커널 이미지는 메모리에 적재되지 않는 상태이다 ▪ Boot 명령어와 Load 명령어는 롬에서 메모리로 데이터를 적재 시킨다 ▪ 부팅 로그에서 Boot 명령어로 어느 부분을 적재시키는 지 볼 수 있다 ▪ Load 명령어로 똑같은 옵션을 주면 메모리에 커널 이미지가 올라간다 ▪ ARP 테이블은 자동으로 갱신되지 않는다 ▪ 외부 TFTP 서버의 ip를 ARP 테이블에 올리는 삽질을 하면 된다 86
  • 87. ICEWALL Let’s dive to the SHELL - 어라 좀 어렵다? - 찾았다 우회로! 87
  • 88. ICEWALL 그래서 덤프는 뜬 거 같은데… 88
  • 89. ICEWALL 그래서 덤프는 뜬 거 같은데… ▪ 분석은 이제 뭘 어떻게 하지? ▪ binwalk ▪ firmware mod kit ▪ HEX 값 분석 ▪ HxD ▪ xxd 89
  • 90. ICEWALL 그래서 덤프는 뜬 거 같은데… ▪ binwalk ▪ 블라블라블라 ▪ firmware mod kit ▪ 블라블라블라 ▪ HEX값 (LZMA 시그니쳐) ▪ 블라블라블라 90
  • 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
  • 97. ICEWALL 알아두면 좋은 거 ▪ CFE Web Server ▪ GPIO ▪ openzwave http://www.openzwave.com/ ▪ z-wave stick ▪ Telnet/SSH ▪ usbls ▪ 안드로이드/아이폰 앱 분석 ▪ ARP 스푸핑 ▪ 포트 스캐닝 ▪ NAT 필터링 97
  • 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