Smart Phone Hacking! 정구홍 @BoB 2013-08-20
강의일정 1 차 : Inside of Smart Phone Composition of Smart Phone Building Linux & Android 2 차 : Remote Attack Remote Attack Vectors Case study : Flash Vulnerability 3 차 : Local Attack Local Attack Vectors Case study : Device Driver Vulnerabililty
오늘배워볼것들 스마트폰의구성이해하기 하드웨어구성 소프트웨어구성 리눅스운영체제빌드해보기 크로스컴파일 커널컴파일 루트파일시스템컴파일 부트로더이해하기 안드로이드운영체제빌드 ( 구경 ) 해보기
진행하면서동시에.. 필요한프로그램들을설치해주세효 apt-get update apt-get install openssh-server apt-get install xinit apt-get install qemu apt-get install libncurses5-dev VM 비밀번호 notroot / thoughtpolice sudo I (thoughtpolice)
연구용스마트폰구매하기 다음의글들을참고해주세용 http://www.hackerschool.org/sub_html/hs_p osting/?uid=17 http://www.hackerschool.org/sub_html/hs_p osting/?uid=18
스마트폰하드웨어의구성 ( 갤럭시 S 예제 ) => 정정 4G OneNand + 3G DDR + 1G DRAM
CPU S5PC111 삼성제작 Core : Cortex A8 (ARM) CPU + OneNand Flash + DDR RAM + DRAM
Flash Memory 비휘발성메모리장치 커널, 운영체제파일들, 사용자데이터등을저장
NOR vs NAND NOR 각메모리셀이병렬형태로이루어짐 Read 속도가빠름 Write 속도는느림 코드영역으로적합 (ex. 펌웨어 ) NAND 셀이직렬형태로이루어짐 Read 는느리고, Write 는빠름 데이터영역으로적합 (ex. 이동식장치 )
NOR vs NAND NOR (Code) 각메모리셀이병렬형태로이루어짐 Read 속도가빠름 Write 속도는느림 코드영역으로적합 (ex. 펌웨어 ) NAND (Data) 셀이직렬형태로이루어짐 Read 는느리고, Write 는빠름 데이터영역으로적합 (ex. 이동식장치 )
OneNand 란? 삼성전자개발 NOR Flash와 NAND Flash의장점을합함 읽기 / 쓰기모두빠름 퓨전메모리형태 즉, 코드실행까지가능한 NAND 최대 10배의속도
MoviNand? 삼성전자개발 모바일폰전용대용량 Nand Flash Nand Flash + Controller => 원칩화 OneNand보다느림
갤럭시 S 의저장장치구성 onenand 여러개의파티션으로분할 /system/ (300 메가 ) /dbdata/ (100 메가 ) /cache/ (30 메가 ) movinand 2 개의파티션으로분할 내장 SD 카드 (14 기가 ) /data/ (2 기가 ) /dev/block/mmcxxx
그외의칩들 MSM6290 퀄컴제작 통신전용칩셋 WCDMA, HSDPA 오디오코텍 오디오데이터처리
갤럭시 S vs 아이폰 4 비슷비슷..
스마트폰의소프트웨어이해하기 ARM 바이너리만들기실습 ARM 커널만들기실습 부트로더, 리눅스커널 안드로이드운영체제
ARM 바이너리만들기실습
Cross Compile 란? 다른아키텍쳐의코드를생성하는컴파일 예 x86에서 x86코드컴파일 => Not Cross Compiler x86에서 ARM코드컴파일 => Cross Compiler! ARM에서 x86코드컴파일 => Cross Compiler! Cross Compiler 설치필요
Cross Compile 환경구축하기 OS 우분투 13.04 ( 다른버전도상관없음 ) http://sourceforge.net/projects/thoughtpolicevm/files/ubuntu/ ubuntu-server-13.04/ubuntu-server-13.04-i386.zip/download Cross Compiler 다운로드 CodeSourcery
Cross Compiler 설치 CodeSourcery Cross Compiler 설치 http://sourcery.mentor.com/public/gnu_toolc hain/arm-none-linux-gnueabi/ 최신버전으로 down! arm-2013.05-24-arm-none-linux-gnueabi.bin 설치 now chmod +x 파일명./ 파일명 기본쉘변경후다시실행 ( 중요 ) root@ubuntu:~/crosscompiler# rm -rf /bin/sh root@ubuntu:~/crosscompiler# ln -s /bin/bash /bin/sh
Cross Compiler 설치 CodeSourcery Cross Compiler 설치 엔터엔터와이와이 ~
Cross Compiler 설치 대표적인 ARM 용 Cross Compiler 들 CodeSourcery 에서배포 http://sourcery.mentor.com/public/gnu_toolchain/armnone-linux-gnueabi/ Android 에서배포 http://developer.android.com/tools/sdk/ndk/index.html uclibc 에서배포 http://www.uclibc.org/downloads/binaries/ Kegel 에서배포 http://kegel.com/crosstool/
설치완료 root@ubuntu:~# cd /root/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux# cd bin root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux/bin# root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux/bin# root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux/bin#./armnone-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc: fatal error: no input files compilation terminated. root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux/bin# root@ubuntu:~/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux/bin#
helloworld.c 를 ARM 용으로 ~ # cd /root/codesourcery/sourcery_codebench_lite_for_arm_gnu_linux # vi hello.c void main() { printf("hello world\n"); } # #./arm-none-linux-gnueabi-gcc -o hello hello.c hello.c: In function 'main': hello.c:3:2: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default] # # file hello hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped # * Static 컴파일하기 #./arm-none-linux-gnueabi-gcc -o hello hello.c -static hello.c: In function 'main': hello.c:3:2: warning: incompatible implicit declaration of built-in function 'printf' [enabled #
EABI 란? ABI(Application Binary Interface) 어플리케이션과 OS 사이혹은어플리케이션과라이브러리사이에서사용되는 Low-Level 인터페이스 API 와의차이점 API : 소스코드레벨에서의관점 ABI : 바이너리레벨에서의관점 즉, 컴파일되어나온 Object 파일들과의연결방식
EABI 란? EABI(Embedded Application Binary Interface) 임베디드소프트웨어의자료형, 레지스터사용등에대한표준정의 다른 Compiler 를사용해만들어진 Object 들과의연동에필요 None EABI 어떤 OS 에특화된 EABI 가아니다 라는뜻 즉, 특정 OS 하나를위한바이너리가아니다 출처 http://blog.naver.com/dong880510/140156760753
정적컴파일하기 필요한라이브러리가대상 OS 안에없을수있음 있더라도경로가달라서로딩하지못할수있음 로딩했더라도호환되지않을수있음 #./arm-none-linux-gnueabi-gcc -o hello hello.c -static
내폰에올려서실행해보잡 아이폰 (ios) 갤럭시 ( 안드로이드 )
리눅스커널컴파일하기 커널소스코드다운로드 https://www.kernel.org root@ubuntu:~/linux_build# xz -d linux-3.10.6.tar.xz root@ubuntu:~/linux_build# root@ubuntu:~/linux_build# ls linux-3.10.6.tar root@ubuntu:~/linux_build# tar xvf linux-3.10.6.tar
리눅스커널컴파일하기 # make ARCH=arm versatile_defconfig # make ARCH=arm menuconfig # make ARCH=arm CROSS_COMPILE= /root/codesourcery/sourcery_codebench_lite_for_arm_gnu_linu x/bin/arm-none-linux-gnueabi- all # find. -name zimage./arch/arm/boot/zimage #
Config 변경 (menuconfig) kernel Features --> Memory split (3G/1G user/kernel split) ---> [ ] Preemptible Kernel (EXPERIMENTAL) [*] Use the ARM EABI to compile the kernel [*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL) [ ] High Memory Support (EXPERIMENTAL) Memory model (Flat Memory) ---> [ ] Add LRU list to track non-evictable pages (4096) Low address space to protect from user allocation
Versatile? The Versatile one is the most interesting as it includes a hard disk SCSI controller, an Ethernet card and a graphical display
zimage 의구조 출처 : http://bmfrog.tistory.com/m/post/view/id/101
zimage 의구조 vmlinux : 실제커널 piggy.gz : vmlinux를압축한파일 misc.c : 압축해제수행 head.s : 압축해제된코드로 jump
자, 이제이커널을어디서? 어디서실행할것인가? 후보 1 : 내스마트폰? -_- 후보 2 : 개발용보드 후보 3 : QEMU # apt-get install qemu Qemu 가지원하는아키텍쳐들 qemu-system qemu-system-arm qemu-systemcommon qemu-system-mips qemu-system-misc qemu-system-ppc qemu-system-sparc qemu-system-x86 qemu-user qemu-utils seabios sharutils vgabios
QEMU 가지원하는보드목록 root@ubuntu:~/linux_build/linux-3.10.6# qemu-system-arm -M xxx Supported machines are: none empty machine beagle Beagle board (OMAP3530) beaglexm Beagle board XM (OMAP3630) collie Collie PDA (SA-1110) nuri Samsung NURI board (Exynos4210) smdkc210 Samsung SMDKC210 board (Exynos4210) connex Gumstix Connex (PXA255) verdex Gumstix Verdex (PXA270) highbank Calxeda Highbank (ECX-1000) integratorcp ARM Integrator/CP (ARM926EJ-S) (default) kzm ARM KZM Emulation Baseboard (ARM1136) mainstone Mainstone II (PXA27x) musicpal Marvell 88w8618 / MusicPal (ARM926EJ-S) n800 Nokia N800 tablet aka. RX-34 (OMAP2420) n810 Nokia N810 tablet aka. RX-44 (OMAP2420)
커널부팅성공 ~ qemu-system-arm -M versatilepb -m 128M -kernel zimage
Root File System 루트파일시스템이란? 커널부팅완료후만나게되는파일들 OS 인터페이스 Shell X-Windows 기본프로그램들 Login, passwd, ls, id, ps, netstat 등등.. 라이브러리들 Glibc 등
BusyBox 소개 다양한유틸리티, 프로그램들을하나로통합한패키지프로그램 중복되는부분을제거함으로써용량최소화 스마트폰에없는프로그램들제공 임베디드운영체제에서많이사용됨 다운로드 http://busybox.net/downloads/busybox- 1.21.1.tar.bz2
Busybox 컴파일 make ARCH=arm CROSS_COMPILE=/root/xxx defconfig make ARCH=arm CROSS_COMPILE=/root/xxx menuconfig 컴파일전에옵션변경 Static binary 체크 make ARCH=arm CROSS_COMPILE=/root/xxx install
Busybox 컴파일
기본파일시스템생성 # cd _install/ l# mkdir proc sys dev etc etc/init.d # # cd etc # cd init.d # vi rcs #!/bin/sh mount -t proc none /proc mount -t sysfs none /sys /sbin/mdev -s # chmod +x rcs # cd.. # cd.. # find. cpio -o --format=newc >../rootfs.img 3994 blocks #
OS 부팅 qemu-system-arm -M versatilepb -m 128M - kernel zimage -initrd rootfs.img.gz -append "root=/dev/ram rdinit=/sbin/init"
와우쉘이떴다!
리눅스배포본이란? 기본리눅스커널을기반위에어떤 Root File System 및 Interface 를구성하느냐에따라다른배포본이된다. Ubuntu Linux Fedora Linux Android Linux
실제장비에넣기 http://www.arm.com/products/tools/developmentboards/versatile/platform-baseboards.php
실제장비에넣기 ROM Writer Writing 전용장비 Flash memory 에 writing JTAG 하드웨어디버깅장비 Flash memory 에 writing
부트로더란? 초기 OS 개발시엄청난시행착오를겪으며 OS 를새로업로드해야한다. 매번장비를사용하기너무귀찮다!! 네트워크로전송할수는없을까? 부트로더안에펌웨어업데이트기능을넣어서진행
Custom Rom 만들기 커스톰롬 소스코드를기반으로수정하여제작 Ex> 카메라사운드함수삭제 쿠킹롬 기존의파일들을추출한후수정하여제작 Ex> 카메라사운드파일삭제
Custom Rom 만들기 장점 스마트폰을느리게하는불필요한프로그램들삭제 Ex> SK 마켓 바탕화면, 시작화면테마변경 성능향상 Ex> 스케쥴링개선 여유를가지고천천히개발하다보니오히려순정롬보다좋은품질이 ~ 반면개발자들을 due 에쫓김
Flashing KIES 삼성개발 공식펌웨어업그레이드소프트웨어 CWM - by clockwork mod - http://caleb1783.tistory.com/236 ODIN - by 삼성 (leaked) DNW 삼성개발 Usb 기반펌웨어업로드툴 HEIMDALL - by AdamOutler FASTBOOT 안드로이드제작 - fastboot flash bootloader <location/name_of_bootloader_file.img> - http://rootzwiki.com/topic/28544-guide-nexus-7-bootloadersrecoveriesrootback-tostock/#entry764328 - 리눅스커맨드기반 - 예제 http://techshek4u.blogspot.co.uk/2012/01/applying-card-emulation-patch-to_03.html
Flashing KIES 삼성개발 공식펌웨어업그레이드소프트웨어 DNW 삼성개발 개발자들사이에사용되는펌웨어업그레이드소프트웨어 ODIN - 삼성개발 (leaked)
Flashing FastBoot 안드로이드개발 펌웨어업그레이드툴 리눅스커맨드기반 CWM 유명한커스톰롬개발그룹에서제작 Heimdall 개인 (AdamOutler) 이개발하여배포
안드로이드전용커널소스 스마트폰및타블렛에특화된커널 불필요한기능제거 필요한기능추가 리눅스커널소스를기반으로만들어짐 http://source.android.com/source/downlo ading.html
안드로이드전용 Root File System # mkdir ~/bin # curl http://android.git.kernel.org/repo >~/bin/repo # chmod 755 ~/bin/repo # cp ~/bin/repo /bin # mkdir ~/mydroid # cd ~/mydroid # repo init -u git://android.git.kernel.org/platform/manifest.git # cd ~/mydroid # repo sync
안드로이드전용 Root File System 출처 : http://forum.falinux.com/zbxe/?mid=lecture_tip&page=2&document_srl=517788
QEMU 에 android 올리기 http://www.kandroid.org/board/board.php?board=andr oidsource&command=body&no=24
실제장비에 android 올리기 ODROID-X http://hardkernel.com/renewal_2011/shop/good_list.ph p?lang=en
참고자료 QEMU+ARM http://mmmyddd.freeshell.net/wiki/embed/linuxonar monqemu.html QEMU+ANDROID http://www.kandroid.org/board/board.php?board=a ndroidsource&command=body&no=24 ODROID-X http://dev.odroid.com/projects/ics/
Q/A
감사합니다.