임베디드 시스템 취약점 분석 (홈네트워크 사례 중심) cybermong@grayhash.com 2015.4.23
목차 발표자 소개 홈 네트워크 연구 계기 홈 네트워크 시스템의 구조 펌웨어(소프트웨어) 획득 취약점 공격 과정 설명 취약점 데모 월패드 쉘 획득 전등 제어 현관/로비 도어락 제어 화상카메라 감시 대응방안
발표자 소개 정구홍(멍멍, 몽이) GrayHash(grayhash.com) 수석 연구원 해커스쿨(hackerschool.org) 운영자 각종 해킹대회(codegate, secuinside) 운영 Defcon CTF 본선 다수 진출 연락처 cybermong@grayhash.com http://facebook.com/goohong.jung
홈 네트워크 해킹 계기
홈 네트워크 해킹 계기
홈 네트워크 해킹 계기
홈 네트워크 해킹 계기
홈 네트워크 해킹 계기
하지만 내 눈에 들어온 것은..
하지만 내 눈에 들어온 것은..
홈 네트워크 해킹 계기
월패드 공략 절차
월패드 공략 절차 Step1 : 홈 네트워크 시스템의 구조 파악 Step2 : 공격 대상 선정(wallpad) Step3 : wallpad 펌웨어(소프트웨어) 획득 Step4 : wallpad 분해 Step5 : UART 연결 Step6 : 취약점 분석 Step7 : 공격(Exploitation) 진행
Step1 홈 네트워크 시스템의 구조 파악
현관 : 중앙 컨트롤러(gateway)
현관 : 중앙 컨트롤러(gateway)
현관 : 중앙 컨트롤러(gateway)
현관 : 중앙 컨트롤러(gateway) OS : Embedded Linux
거실 : Wallpad (사용자 인터페이스) OS : Linux (개조된 Android 2.3)
거실 : Wallpad (사용자 인터페이스)
스마트홈 제어 방식
전등 제어 스마트홈 제어 방식
가스 제어 스마트홈 제어 방식
난방 제어 스마트홈 제어 방식
현관 도어락 제어 스마트홈 제어 방식
로비 출입문 제어 스마트홈 제어 방식
엘리베이터 호출 스마트홈 제어 방식
스마트홈 제어 방식 타 세대와의 음성/화상 통화 (P2P)
스마트홈 제어 방식 단지 내 모든 세대가 서로 연결되어 있음
스마트홈 제어 방식 사설망 (인터넷 연결 안 됨)
Step2 공격 대상 선정
Wallpad VS Gateway Wallpad 사용자 UI 역할 각종 제어 패킷 송신 P2P 화상 통화 기능 Gateway 라우터, 중앙 컨트롤러 역할 각종 패킷 수신 및 주변장치 제어 화상 통화에 관여하지 않음
Wallpad VS Gateway 둘 모두 결국 같은 패킷을 송수신하므로 둘 중 어떤 것을 분석해도 상관 없다. 즉, 둘 중 하나를 이용해서 패킷 분석 가능 하지만, 화상 카메라는 Gateway와 단절되어 있기 때문에(실제 통화 시의 패킷만 지나감) 화상 카메라를 제어하기 위해선 결국 Wallpad 를 노려야 한다.
Step3 Wallpad 펌웨어(소프트웨어 획득)
펌웨어를 획득하는 여섯 가지 방법 1. 제조사에서 공개하는 펌웨어 다운로드 2. 자동/수동 업데이트가 될 때 패킷 스니핑 3. UART 포트 접속 4. 논리적 취약점을 이용하여 Shell 접근 권한 획득 후 추출 (partition dump, /dev/mtdblock) 5. Flash Memory 덤프 6. JTAG 포트 접속
1. 제조사에서 공개하는 펌웨어 다운로드
업데이트 파일 다운받기 http://www.iptime.co.kr/~iptime/bbs/zboard.php?id=sw_download
업데이트 파일 다운받기
업데이트 파일 다운받기
업데이트 파일의 구성 Boot-loader Kernel Ram Disk (initrd) Root File System (applications) 위와 같은 파일들이 하나의 파일로 덩어리져있다. 업데이트 파일의 성격에 따라 구성이 다를 수 있다.
2. 자동/수동 업데이트가 될 때 패킷 스니핑
자동 업데이트가 될 때 패킷 스니핑
자동 업데이트가 될 때 패킷 스니핑 언제 업데이트가 되는가? 기기를 재부팅 할 때 => 최신 버전 체크 특정 기간이 지났을 때 ex> 매월 1일 특수한 방법으로 기기를 켤 때 Ex> 파워키+리셋키 => 복구 모드 패킷 스니핑 방법들 포트 미러링 TWIN IP ARP Spoofing
포트 미러링 공격 대상 장비를 랜선에서 분리시킨 후, 그 랜선에 해커의 공유기를 연결 공유기에 대상 장비를 연결 공유기에 해커의 노트북을 연결 포트미러링 기능을 이용하여 공유기로 오가는 모든 패킷을 해커의 노트북으로 전달 단점 대상 기기가 고정 IP를 사용하는 경우 활용 어려움
TWIN IP 공유기의 IP주소를 NAT로 물린 특정 MAC의 내부 기기와 동일시 하는 기능 즉, 마치 공유기가 없는 것 같은 효과를 얻게 됨 대상 기기가 특정 IP 상에서만 통신이 가능할 경우에 유용
ARP Spoofing Ettercap 툴 추천 ettercap -T -M arp /192.168.0.1/ /192.168.0.10/ 192.168.0.1 : 라우터, 192.168.0.10 : Sniffing 대상
3. UART PORT 접속
UART 포트 접속
UART PORT 접속 Shell 접근이 가능할 시 파티션 덤프 부트로더 접근이 가능할 시 memory reading
4. 논리적 취약점 이용
논리적 취약점 이용 원격 백도어, Shell command execution 등의 단순한 취약점을 이용하여 Shell 획득 /dev/에 접근하여 파티션 덤프
갤럭시S 파티션 덤프 예제 부트로더 dd if=/dev/block/bml1 of=/sdcard/boot.bin bs=512 커널 dd if=/dev/block/bml7 of=/sdcard/zimage bs=4096 파일시스템 dd if=/dev/block/stl9 of=/sdcard/factoryfs.rfs bs=4096
5. Flash Memory Dump
desoldering Flash Memory 덤프
Flash Memory 덤프 Socket Adaptor
DataSheet 학습 Flash Memory 덤프
Flash Memory 덤프
6. JTAG 포트 접속
CPU의 JTAG 포트 접속
JTAG의 비유 JTAG = marionette(꼭두각시) CPU를 마음대로 조정할 수 있다.
JTAG을 통해 Flash Memory 제어
획득한 Firmware 분석
펌웨어 자동 분석 툴 Binwalk (Firmware Analysis Tool) 펌웨어 파일의 구성 분석 펌웨어 분석의 원리 Signature 탐색 Ex> squashfs == hsqs http://binwalk.org/ FMK (Firmware Mod Kit) 펌웨어 파일 내에서 각종 파일 추출 혹은 수정된 파일을 기반으로 새 펌웨어 빌드 https://code.google.com/p/firmware-mod-kit/
Firmware Mod Kit 사용 예제 [root@hackerschool trunk]#./extract-ng.sh g104_kr_8_46.bin Firmware Mod Kit (build-ng) 0.73 beta, (c)2011 Craig Heffner, Jeremy Collake http://www.bitsum.com Scanning firmware... DECIMAL HEX DESCRIPTION --------------------------------------------------------------------------- ------------------ 720896 0xB0000 Squashfs filesystem, little endian, version 3.0, size: 1235415 bytes, 257 inodes, blocksize: 65536 bytes, created: Wed Nov 14 13:28:13 2012 Extracting 720896 bytes of header image at offset 0 Extracting squashfs file system at offset 720896 Extracting 160 byte footer from offset 1957920 Extracting squashfs files... Firmware extraction successful! Firmware parts can be found in 'fmk/*' [root@hackerschool trunk]#
Firmware Mod Kit 사용 예제 [root@hackerschool rootfs]# ls -al 합계 132 drwxr-xr-x 15 root root 4096 10월 14 2014. drwxr-xr-x 5 root root 4096 4월 3 14:22.. drwxr-xr-x 4 553779200 4160815104 4096 10월 14 2014 bin drwxr-xr-x 6 553779200 4160815104 4096 10월 14 2014 default drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 dev lrwxrwxrwx 1 root root 8 4월 3 14:22 etc -> /tmp/etc drwxr-xr-x 3 553779200 4160815104 4096 10월 14 2014 home drwxr-xr-x 3 553779200 4160815104 4096 10월 14 2014 lib lrwxrwxrwx 1 root root 11 4월 3 14:22 linuxrc -> bin/busybox drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 ndbin drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 plugin drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 proc drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 save drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 sbin drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 tmp drwxr-xr-x 2 553779200 4160815104 4096 10월 14 2014 upgrade-bin drwxr-xr-x 5 553779200 4160815104 4096 10월 14 2014 usr lrwxrwxrwx 1 root root 8 4월 3 14:22 var -> /tmp/var [root@hackerschool rootfs]#
Binary 분석
월패드 분석 결과 1. 제조사에서 공개하는 펌웨어 다운로드 2. 자동/수동 업데이트가 될 때 패킷 스니핑 3. UART 포트 접속 4. 논리적 취약점을 이용하여 Shell 접근 권한 획득 후 추출 (partition dump, /dev/mtdblock) 5. Flash Memory 덤프 6. JTAG 포트 접속
Step4 월패드(wallpad) 분해
월패드 분해
월패드 분해
월패드 분해
월패드 분해
무언가를 분해했다면? CPU가 무엇인가? ARM? MIPS? CPU의 종류에 따라서, 어셈블리어 문법이 달라진다. 공격코드(쉘코드)의 구현 방법이 달라진다. Flash Memory가 무엇인가? AMD? SAMSUNG? Flash Memory의 종류에 따라서, Reading/Writing 구현 방법이 달라진다.
무언가를 분해했다면? UART 포트가 있는가? UART 콘솔 접속 가능 주로 4핀 포트 uart debug rs232 라고 적힌 부분 확인 JTAG 포트가 있는가? CPU 동적 디버깅 가능 TDI, TDO, TMS, TCK라고 적힌 핀 확인
월패드 분해 결과 CPU NXP2120 ARM11 기반의 32비트 프로세서 Flash Memory K9F1G08U0D 삼성 제작, Nand Type, TSOP Package (48p) UART 포트 (O) JTAG 포트 (X)
Step5 UART 연결
UART 포트
UART 포트
UART란? Universal asynchronous receiver/transmitter 범용 비동기 송/수신기 직렬 통신 프로토콜 데이터 송신/수신 시 각각 하나의 LINE만 이용 하드웨어 통신 규약의 한 종류 프로토콜이 매우 간단함 => 디버깅 용도로 많이 쓰임
하드웨어 디버깅 임베디드 개발자들도 개발의 고충이 있다 수 많은 버그들과의 싸움 기기의 상태 값을 실시간으로 출력하는 디버깅 방법 필요 LED로 출력? => 표현의 한계 LCD로 출력? => 구현이 복잡하고 화면 작음 네트워크로? => 배보다 배꼽이 더 그렇다면 개발자들의 선택은? 단순한 UART!
UART의 장점들 프로토콜이 단순하다. 관련 프로그램 구하기가 쉽다. Putty, Xshell, 하이퍼 터미널, 관련 장비를 구하기가 쉽다. USB-UART, USB-RS232, USB-SERIAL
총 4개의 핀 사용 TX : 데이터 송신 핀 RX : 데이터 수신 핀 GND : 그라운드 VCC : 전압 UART Pin의 구성 TX와 RX는 항상 자신의 입장에서 봐야 한다. PC의 TX : PC에서 데이터 송신 기기의 TX : 기기에서 데이터 송신
해커가 UART를 통해 얻을 수 있는 것들 커널, OS 메시지 취약점 공략에 필요한 각종 정보 획득 디버그 메시지 Ex> printf( initializing network adaptor ok\n ); 오류 메시지 Ex> Segmentation fault, command not found
해커가 UART를 통해 얻을 수 있는 것들 Hidden or Setting Menu 부트로더(Bootloader) 펌웨어 획득 새로운 펌웨어 Writing 커맨드 쉘(Command Shell) 펌웨어, 바이너리 획득 동적 분석
월패드의 UART 포트
문제점 너무 작은 UART 커넥터
UART 케이블 구매
UART 연결을 위한 장비 USB-UART, USB-RS232, USB-SERIAL USB 기반 UART 통신 장비 장치관리자 -> 포트 ->COM(n)으로 연결 됨
UART 연결 절차 요약 관련 USB 드라이버 설치 CP2102, PL2303, FT232 등 점퍼 케이블 연결 RS, TX, GND, VCC 터미널 소프트웨어 설치 Putty Xshell 연결 정보 설정 및 연결 수행
UART 포트 연결
UART 포트 연결
UART 연결 결과 동영상 Demo
Shell 접속 후 확인된 내용 UART 접속 시 바로 root 쉘 획득 Android 기반 운영체제 Telnet(원격 관리) 포트가 열려있음 홈 네트워트 작동에 필요한 포트들이 열려있음 홈 네트워크 작동에 필요한 프로세스들 실행 중
Step6 취약점 분석
홈 네트워크 해킹 구상 기본 모든 제어는 network packet 기반으로 이루어 진다. 그러므로 packet replay attack에 취약할 수 있다. 가정 (1) 패킷 송신자의 identity/credential 검사를 하지 않을 것이다. 가정 (2) 만약 검사를 한다면 spoofing/bypass가 가능할 것이다.
취약점 분석 대상 (1) Wallpad와 Gateway 사이의 패킷 분석 스마트홈 시스템 제어
취약점 분석 대상 (2) Wallpad device 장악 카메라/마이크 제어
바이너리 분석 취약점 분석 진행
취약점 분석 진행 네트워크 패킷 분석 (tcpdump + wireshark)
발견된 취약점 정리 1. telnet 서비스(/user/app/bin/telnetd)가 열려 있으며, passwd가 암호화 되어 있지 않고, 기기별로 다르게 설정되어 있지 않음 2. 모든 제어 통신 패킷이 암호화 되어 있지 않아 해커가 쉽게 분석 가능 3. 모든 제어 통신 패킷에 인증 절차 및 ACL 제어가 적용되어 있지 않음 4. 특정 서비스(/user/app/bin/cmxnp)를 통해 원격 임의 명령 실행 가능 5. 많은 서비스들에 secure coding이 되어 있지 않아 Buffer Overflow 및 Format String 취약점에 노출되어 있음
Step7 공격(Exploitation) 진행
Telnet 계정 분석 /etc/passwd, /etc/shadow가 존재하지 않음 /usr/bin/login 계정 정보를 담고 있는 파일 탐색 => 계정 정보를 바이너리 안에 가지고 있는 것을 확인 암호가 평문 형태로 존재하는 것을 확인 Hash를 사용하지 않음
Telnet 계정 분석
Telnet 계정 분석
IP 체계 분석 Gateway : 10.7.5.30 Wallpad : 10.7.5.31 10 : 공통 7 : 동 5 : 층 3x : 호수 30 : gateway 31 : wallpad
스마트홈 강제 제어 취약점 전등 제어 현관 도어락 제어 임의 명령 실행 화상 카메라/마이크 제어
스마트홈 제어 패킷 예제 전등 제어 패킷
전등 제어 동영상 Demo
스마트홈 제어 패킷 예제 현관 도어락 오픈 패킷
현관 도어락 제어 동영상 Demo
외부에서의 접근 방법 집 내부에 두 개의 공유기 설치 공유기1 : 인터넷 라인 192.168.0.1/255 공유기2 : 홈네트워크 라인 192.168.1.1/255 공유기 1은 PC의 유선 어댑터로 연결 공유기 2는 PC의 무선 어댑터로 연결 이 라인에 리눅스 연결 공유기 1의 특정 포트로 들어오는 연결을 공유기 2에 연결되어 있는 리눅스의 SSH로 포트 포워딩
외부에서의 접근 방법
스마트홈 제어 패킷 예제 임의 명령 실행 가능
스마트홈 제어 패킷 예제 화상 카메라/마이크 제어 명령 Gstreamer Library 이용 월패드 서버 # /user/app/bin/gst-launch-1.0 cmxvideosrc src=cmos header=true xpos=0 ypos=0 width=0 height=0 bitrate=6 gop=6 lcd=true! video/mpeg, mpegversion=4, width=320, height=240, framerate=6/1! tcpserversink host=10.11.10.21 port=6161 해커 서버 # gst-launch-1.0 -v tcpclientsrc host=10.11.10.21 port=6161! filesink location=/tmp/capture.mpg
화상 카메라 제어 동영상 Demo
대응 방안 wallpad/gateway의 취약점(특히 remote) 제거 계정 정보 및 각종 패스워드 암호화 BOF, FS 및 논리적 취약점 패치 해커의 리버싱을 방해한다. 난독화(Obfuscation) 안티 리버싱(Anti-Reversing)
대응 방안 이상 패킷 모니터링 허용 리스트에 없는 IP나 MAC으로부터 패킷 수신 시 경고 예상되지 않은 패킷 발생 시 경고 디바이스에 Shell 접속이 이루어질 시 경고 마이크/카메라 사용 시 하드웨어적으로 표시 제어 패킷 송신자의 identity 확인 IP, MAC Address 제어 패킷 암호화 대칭키 비대칭키
제어 패킷 송신자의 identity 확인 송신자의 IP가 설치된 기기의 IP가 맞는가? 해커가 임의로 할당 받은 IP 차단 해당 IP의 MAC이 올바른가? 단점 IP Spoofing 및 ARP Spoofing 가능 해결책 제어 패킷 암호화
제어 패킷 암호화 (대칭키) 대칭키 암호화 제 3자가 패킷을 해석하거나 변조하지 못한다. 세대별로 서로 다른 KEY를 사용해야 한다. 101호 : wallpad(keya 사용) <-> gateway(keya 사용) 102호 : wallpad(keyb 사용) <-> gateway(keyb 사용) Key의 규칙성이 존재하면 안된다. 단점 Packet replay attack에는 여전히 취약하다. 해결책 Timestamp Nonce
해결책 Timestamp 제어 패킷 안에 시간 정보를 함께 보낸다. 허용 시간 범위내의 패킷이 아니라면 무시한다. Nonce 매 요청 시마다 바뀌는 nonce 값을 이용하여 암호화 요청이 끝나면 해당 nonce 값은 폐기 해커가 packet replay attack을 했을 때 nonce가 다르기 때문에 packet이 무시됨 보통은 평문+Timestamp Nonce를 HMAC 으로 생성 HMAC : keyed-hash message authentication code
제어 패킷 암호화 (비대칭키) 제 3자가 패킷을 해석하거나 변조하지 못한다. 단점 해커가 자신의 공개키/개인키 사용 가능 본인 장비 분석을 통해 평문의 포맷은 알고 있다고 가정 해결책 Certificate Pinning Permanent Session
해결책 Certificate Pinning 특정 기관에서 발급한 인증서만 인정하도록 제한 본 홈 네트워크 환경에서는 해당 안 됨 무조건 정해진 public key만 사용하도록 고정 Ex> wallpad A의 public key만 사용 가능 Permanent Session 홈 네트워크 시스템 최초 초기화 시 random한 Session 생성 후 gateway와 wallpad가 공유 이 값이 맞아야만 정상적인 통신 가능
UART 콘솔 접속 불가 현재 패치 상황 telnet 서비스 접속 불가 SSH로 대체, shadow 파일 사용 Packet replay attack에 반응하지 않음 원격 명령 실행 취약점 패치됨
결론 - 공격 과정 요약 Step1 : 홈 네트워크 시스템의 구조 파악 gateway + wallpad Step2 : 공격 대상 선정(wallpad) Step3 : wallpad 펌웨어(소프트웨어) 획득 UART, Update, Flash Memory Dump Step4 : wallpad 분해 Step5 : UART 연결 Root Shell 획득 Step6 : 취약점 분석 패킷 스니핑 + 바이너리 분석 Step7 : 공격(Exploitation) 진행
결론 임베디드 장비의 보안 BOF, FS 등의 철저한 취약점 검증 필요 패킷/데이터 암호화 및 Identity 확인 필요 리버싱 방지를 위한 난독화, 안티리버싱 적용 필요 하드웨어적인 보안 작업 필요 (UART, JTAG 차단) 언제든지 해커의 먹이가 될 수 있다는 인식 전환 필요
감사합니다.