SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
Android Bionic Linker 구조 분석 및
보안 활용 방안 고찰
박준형 매니저 / 모바일소프트웨어개발1팀
SK Planet
1. ARM 개요
1.1 ARM 이란?
ARM(Application DRM) 이란?
T store 를 통해 유통되는 어플리케이션에 대해서 불법 복제 및 변조가 불가능 하게 하
는 T store 만의 전용 Application DRM(Digital Rights Management) 솔루션.

ARM 동작 방식.
-  ARM 이 적용된 Application 을 구매한 사용자가 Application 실행 시,
-  T store 에서 해당 어플리케이션을 구매하였는지, 적절한 사용 권한을 가지고 있는
지를 확인한 다음, 암호화된 코드(APK) 를 해제하여 실행함.
-  불법 유통된 Application 이나 권한을 부여 받지 못한 사용자는 해당 Application
을 실행할 수 없음.
1.1 ARM 3.0
손쉬운 적용 방법

더 이상 여러 명이 고생할 필요 없습니다 !
ARM 3.0은 별도의 소스 코드 수정 없이도 개발자센터를 통해서 간단하게 향상
된 보안 모듈을 적용할 수 있도록 적용 과정을 혁신적으로 개선되었습니다.
강력한 보안

코드 보안이 강력해졌습니다.
ARM 3.0이 적용된 APK(SS-APK)가 실행되면 해당 단말에 설치되어 있는
ARM Client Service 모듈과 연동을 통해서 사용자의 어플리케이션 실행 권
한 여부를 체크하고, 적합한 권한을 보유한 경우에만 어플리케이션의 실행을
허가, 실행 가능하도록 암호화된 코드의 복호화를 수행합니다.
빠른 적용 시간

1분이면 뚝딱!
ARM 적용을 시작하는 시점에 바로 Application 내 코드 암호화가 이루어
지며, ARM 모듈이 자동으로 탑재됩니다.
1분이면 최고 수준의 보안이 이뤄집니다.
2. Bionic Libc
1.3 GNU Libc vs. Bionic Libc ?
GNU Libc 와 Bionic Libc 비교
GNU Libc

Bionic Libc

비고

License

LGPL

BSD

Size

Large

Small

Speed

Slow

Fast
(Low CPU Clock)

Dynamic Linker

/lib/i386-linux-gnu
/ld-linux.so.2

/system/bin/linker

libdl

/lib/i386-linux-gnu
/libdl-so.2

/system/bin/linker

libdl.so is
dummy.

_start()

__libc_start_main()

__libc_init()

crtbegin_xx.o

1) libdl.so is implemented in /bionic/linker/dlfcn.c
1.4 Android Native App. 실행 과정
_start()

Shell

__linker_init()

./helloWorld

Dynamic Linker

link_image()
__linker_init_post_
relocation()

Bionic

execve()

__libc_init()
exit()

SYS_execve

Kernel

SYS_exit

Check & Load
Binary

main()
(helloWorld)

Start Loader
(interpreter)

dlopen()

참조: http://blog.csdn.net/freshui/article/details/8695463
3. ELF(Executable & Linable Format)
1.5 ELF File Format 구조

.text
.rodata

Program String Values (RO)

.data

참조: http://en.wikipedia.org/wiki/Elf_format

Executable Code (RO)

Initialized Global Arrays and V
ariables (RW)
1.5 ELF File Format 구조 – ELF Header
ELF Header: readelf –h func.so
1.5 ELF File Format 구조 –Program Header (PHDR)
Program Header(PHER): readelf –l func.so
1.5 ELF File Format 구조 – Section Header
Section Header: readelf –S func.so
4. Dynamic Linker & Loader
1.6 Dynamic Linker 동작 –Find Library
1.  Dynamic Library 검색(find_library)
• 

struct soinfo linked list 에서 library 가 있는지 검색.

.base
soinfo #1 .name: lib1
.next

lib #1

.base
soinfo #2 .name: lib2
.next

lib #2

.base
soinfo #n .name: libn
.next

lib #n

참조: AOSP 4.1 /biolic/linker 소스코드
1.6 Dynamic Linker 동작 – Load Library
2. Dynamic Library 메모리 로딩 (load_library)
1.  open_library: library 파일을 open 하여 file descripter(fd) 반환.
2.  get_lib_extents: library 의 PHDR 에서 할당해야 할 사이즈 반환.
3.  alloc_mem_region: mmap 을 이용하여 메모리 할당(base address).
4.  load_segments: mmap 을 이용하여 library 의 fd 의 내용을 메모리에 적재.
flag 값을 이용하여 mprotect 수행.

tmp = base + (phdr->p_vaddr & (~PAGE_MASK));
len = phdr->p_filesz + (phdr->p_vaddr & PAGE_MASK);
pbase = mmap((void *)tmp, len,
PFLAGS_TO_PROT(phdr->p_flags),
MAP_PRIVATE | MAP_FIXED, fd,
phdr->p_offset & (~PAGE_MASK));
1.6 Dynamic Linker 동작 – Load Library
Program Header(PHER): readelf –l func.so
1.6 Dynamic Linker 동작 – Load Library
BSS(Block Started by Symbol)
-  Non-initialized Global arrays and variables.
-  Statically-allocated variables.
-  ZI(Zero Initialized) Section.
-  BSS is called like ‘Better Save Space’.
1.6 Dynamic Linker 동작 – Load Library
.bss section 이 있을 경우 extra memory 할당.
base
Page 0
base+VirtualAddr
FileSize
extrabase

.bss section
(Fill with 0)

Page 1

MemSize
Extra_len

Page n

Page n+1

참조: /bionic/linker/linker.c
1.6 Dynamic Linker 동작 – Link Image
3. Dynamic Library Relocation (link_image)
1.  dynamic section 에서 유용한 정보 추출해서 soinfo 에 저장.
2.  DT_NEEDED 정보에서 해당 library 검색/로드 (soinfo linked list 에 add).
3.  reloc_library: rel.dyn, rel.plt 정보를 사용하여 참조 재배치(relocation).

Support for PIC (Global Offset Table)
.got
ex) CFLAGS = –fpic or –fPIC
.plt

Support for Dynamic Linking
(Procedure Linkage Table)
1.6 Dynamic Linker 동작 – Link Image
Dynamic Section: readelf –d func.so
1.6 Dynamic Linker 동작 – Link Image
Relocation Section: readelf –r func.so

-  R_ARM_RELATIVE : *(base + offset) += base
-  R_ARM_JUMP_SLOT: _do_lookup(soinfo linked list 에서 Symbol Addr 할당)
1.6 Dynamic Linker 동작 – Call Constructors
4. Dynamic Library Constructors 호출(call_constructors_recursive)
1.  Library initialzation : call the init_array.
ex) __attribute__((constructor)) static void initialize(void) { }
__attribute__((destructor)) static void finalize(void) { }
1.6 Dynamic Linker 동작 – Lookup Symbol
5. Dynamic Library 에서 Symbol 검색 (_do_lookup)
Lookup Symbol in soinfo linked list with .hash section.
-  hash = elfhash(name)
-  sym = _elf_lookup(si, hash, name);

참조: http://lwn.net/Articles/192624/
5. Android Native Code 보안
1.7 Native Binary 보안 활용 방안 - 1
UPX: Packer (Self Modifying Code)
-  Android Bionic Libc 를 지원하도록 코드 수정.
-  p_lx_elf.cpp :

-  Android Dynamic Shared Library 에는 적용이 안됨.
-  Detailed Changed Log (http://upx.sourceforge.net/upx-news.txt)
-  Compress shared library on ELF i386 only [ld.so threatens even this case].
1.7 Native Library 보안 활용 방안 - 1
Secure Dynamic Linker
1.  Custom Dynamic Linker
1.  LDFLAGS = nostdlib -Wl,--dynamic-linker,"/system/bin/linker”
2.  Encrypted Library 를 Dynamic Linker 에서 Decrypt & Loading.
1.  암호화 해제 후 link & load 수행.
1.7 Native Library 보안 활용 방안 - 2
Secure Loading Library (instead of libdl)
1.  dlopen 을 대신할 secure dynamic linking library.
2.  Encrypted Library 를 dlopen 에서 Decrypt & Loading.
1.  암호화 해제 후 link & load 수행.
1.7 mmap 을 이용한 코드 실행 – 1
-  NDK Standalone Toolchain 만들기
-  $(NDK_ROOT)/build/tools/make-standalone-toolchain.sh
-  Compile: arm-linux-androideabi-gcc –c –o add.o add.c

-  Disassmble: arm-linux-androideabi-objdump –d add.o
1.7 mmap 을 이용한 코드 실행 – 2
-  .text 섹션에서 add function code 추출.
1.7 mmap 을 이용한 코드 실행 – 3
-  mmap & mprotect 사용.
1.7 mmap 을 이용한 코드 실행 – 4
-  Build Executable: arm-linux-androideabi-gcc –o test main.c
-  Android Emulator 실행
-  android avd
-  테스트 코드 실행
-  adb push test /data/
-  adb shell chmod 777 /data/test
-  adb shell /data/test
1.8 Other Applications ?
1.  JIT(Just In-Time) Compiler Runtime
- Dynamic linking & loading the JIT compiled native binary.
- RenderScript Runtime 에 Dynamic Linker 기법이 사용되고 있음.
Q&A
THANK YOU

Weitere ähnliche Inhalte

Was ist angesagt?

XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개Jung soo Ahn
 
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주iamhjoo (송형주)
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAPcho hyun jong
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJavajigi Jaesung
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Dabi Ahn
 
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석NAVER D2
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core Ji-Woong Choi
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1sangyun han
 
Linux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerLinux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerInfraEngineer
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekTaewoo Kim
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Juwon Kim
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksugSanghyuk Jung
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례Daehwan Lee
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기Ji-Woong Choi
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기NAVER D2
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비NAVER D2
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XpressEngine
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSanghyuk Jung
 

Was ist angesagt? (20)

XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개XECON2014 Laravel 프레임워크 소개
XECON2014 Laravel 프레임워크 소개
 
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주안드로이드 스터디 Jni 발표 자료 Rev05 송형주
안드로이드 스터디 Jni 발표 자료 Rev05 송형주
 
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
올챙이(Tadpole for DB Tools)로 살펴보는 Eclipse RAP
 
Java Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte CodeJava Virtual Machine, Call stack, Java Byte Code
Java Virtual Machine, Call stack, Java Byte Code
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션Git 기본개념과 사용법 그리고 어플리케이션
Git 기본개념과 사용법 그리고 어플리케이션
 
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
[2017 Incognito] Code Clone 기법을 통한 모바일 브라우저 취약점 분석
 
[오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core [오픈소스컨설팅]Spring 3.1 Core
[오픈소스컨설팅]Spring 3.1 Core
 
Git & Github Seminar-1
Git & Github Seminar-1Git & Github Seminar-1
Git & Github Seminar-1
 
Linux Kernel 101 for Beginner
Linux Kernel 101 for BeginnerLinux Kernel 101 for Beginner
Linux Kernel 101 for Beginner
 
Eclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd WeekEclipse 4 RCP - 2nd Week
Eclipse 4 RCP - 2nd Week
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화Envoy 를 이용한 코드 배포 자동화
Envoy 를 이용한 코드 배포 자동화
 
Spring one참석기 ksug
Spring one참석기 ksugSpring one참석기 ksug
Spring one참석기 ksug
 
spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례spring.io를 통해 배우는 spring 개발사례
spring.io를 통해 배우는 spring 개발사례
 
[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기[오픈소스컨설팅] RPM 만들기
[오픈소스컨설팅] RPM 만들기
 
[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기[121]네이버 효과툰 구현 이야기
[121]네이버 효과툰 구현 이야기
 
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
[1D7]안드로이드 L-Preview 보안 아키텍처 및 설비
 
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
 
Spring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDDSpring batch와 함께 하는 TDD
Spring batch와 함께 하는 TDD
 

Andere mochten auch

Program Structure in GNU/Linux (ELF Format)
Program Structure in GNU/Linux (ELF Format)Program Structure in GNU/Linux (ELF Format)
Program Structure in GNU/Linux (ELF Format)Varun Mahajan
 
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linkerNative hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linkerKevin Mai-Hsuan Chia
 
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...Linaro
 
Address Binding Scheme
Address Binding SchemeAddress Binding Scheme
Address Binding SchemeRajesh Piryani
 
06 - ELF format, knowing your friend
06 - ELF format, knowing your friend06 - ELF format, knowing your friend
06 - ELF format, knowing your friendAlexandre Moneger
 
Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and ExecutionChong-Kuan Chen
 
SECR'13 Lightweight linux shared libraries profiling
SECR'13 Lightweight linux shared libraries profilingSECR'13 Lightweight linux shared libraries profiling
SECR'13 Lightweight linux shared libraries profilingOSLL
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 YoungSu Son
 
Process' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/LinuxProcess' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/LinuxVarun Mahajan
 

Andere mochten auch (13)

Program Structure in GNU/Linux (ELF Format)
Program Structure in GNU/Linux (ELF Format)Program Structure in GNU/Linux (ELF Format)
Program Structure in GNU/Linux (ELF Format)
 
Native hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linkerNative hook mechanism in Android Bionic linker
Native hook mechanism in Android Bionic linker
 
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...
SFO15-406: ARM FDPIC toolset, kernel & libraries for Cortex-M & Cortex-R mmul...
 
Seminar 12-11-19
Seminar 12-11-19Seminar 12-11-19
Seminar 12-11-19
 
Address Binding Scheme
Address Binding SchemeAddress Binding Scheme
Address Binding Scheme
 
06 - ELF format, knowing your friend
06 - ELF format, knowing your friend06 - ELF format, knowing your friend
06 - ELF format, knowing your friend
 
Execution
ExecutionExecution
Execution
 
Compilation and Execution
Compilation and ExecutionCompilation and Execution
Compilation and Execution
 
The Internals of "Hello World" Program
The Internals of "Hello World" ProgramThe Internals of "Hello World" Program
The Internals of "Hello World" Program
 
SECR'13 Lightweight linux shared libraries profiling
SECR'13 Lightweight linux shared libraries profilingSECR'13 Lightweight linux shared libraries profiling
SECR'13 Lightweight linux shared libraries profiling
 
[NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법 [NEXT] Android Profiler 사용법
[NEXT] Android Profiler 사용법
 
Process' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/LinuxProcess' Virtual Address Space in GNU/Linux
Process' Virtual Address Space in GNU/Linux
 
Linkers And Loaders
Linkers And LoadersLinkers And Loaders
Linkers And Loaders
 

Ähnlich wie 141 deview 2013 발표자료(박준형) v1.1(track4-session1)

[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요NAVER D2
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10hungrok
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
Klug pacemaker the opensource high-availability_1.0_f
Klug pacemaker the opensource high-availability_1.0_fKlug pacemaker the opensource high-availability_1.0_f
Klug pacemaker the opensource high-availability_1.0_f동현 김
 
제3회난공불락 오픈소스 인프라세미나 - Pacemaker
제3회난공불락 오픈소스 인프라세미나 - Pacemaker제3회난공불락 오픈소스 인프라세미나 - Pacemaker
제3회난공불락 오픈소스 인프라세미나 - PacemakerTommy Lee
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명Peter YoungSik Yun
 
개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty ServerJungWoon Lee
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술중선 곽
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimsuk kim
 
[IBM Technical NewsLetter - 통합 6호]
[IBM Technical NewsLetter - 통합 6호] [IBM Technical NewsLetter - 통합 6호]
[IBM Technical NewsLetter - 통합 6호] HyunHwa Myoung
 
Open vSwitch의 Vendor Extension 구현
Open vSwitch의 Vendor Extension 구현Open vSwitch의 Vendor Extension 구현
Open vSwitch의 Vendor Extension 구현Seung-Hoon Baek
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) ymtech
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig baseINSIGHT FORENSIC
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AILablup Inc.
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-uploadDong-Hwa jung
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhereNAVER D2
 

Ähnlich wie 141 deview 2013 발표자료(박준형) v1.1(track4-session1) (20)

[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
 
Linux 강의자료 ed10
Linux 강의자료 ed10Linux 강의자료 ed10
Linux 강의자료 ed10
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
Klug pacemaker the opensource high-availability_1.0_f
Klug pacemaker the opensource high-availability_1.0_fKlug pacemaker the opensource high-availability_1.0_f
Klug pacemaker the opensource high-availability_1.0_f
 
제3회난공불락 오픈소스 인프라세미나 - Pacemaker
제3회난공불락 오픈소스 인프라세미나 - Pacemaker제3회난공불락 오픈소스 인프라세미나 - Pacemaker
제3회난공불락 오픈소스 인프라세미나 - Pacemaker
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 
안드로이드 플랫폼 설명
안드로이드 플랫폼 설명안드로이드 플랫폼 설명
안드로이드 플랫폼 설명
 
개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server개발자 지향 WAS : IBM WebSphere Liberty Server
개발자 지향 WAS : IBM WebSphere Liberty Server
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술개발 방식을 바꾸는 15가지 기술
개발 방식을 바꾸는 15가지 기술
 
Oracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kimOracle linux8 solaris_new_features-suk kim
Oracle linux8 solaris_new_features-suk kim
 
[IBM Technical NewsLetter - 통합 6호]
[IBM Technical NewsLetter - 통합 6호] [IBM Technical NewsLetter - 통합 6호]
[IBM Technical NewsLetter - 통합 6호]
 
Open vSwitch의 Vendor Extension 구현
Open vSwitch의 Vendor Extension 구현Open vSwitch의 Vendor Extension 구현
Open vSwitch의 Vendor Extension 구현
 
DPDK
DPDKDPDK
DPDK
 
DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit) DPDK (Data Plane Development Kit)
DPDK (Data Plane Development Kit)
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig base
 
JMI Techtalk : Backend.AI
JMI Techtalk : Backend.AIJMI Techtalk : Backend.AI
JMI Techtalk : Backend.AI
 
RHAMT 소개
RHAMT 소개RHAMT 소개
RHAMT 소개
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
[141] react everywhere
[141] react everywhere[141] react everywhere
[141] react everywhere
 

Mehr von NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

Mehr von NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

141 deview 2013 발표자료(박준형) v1.1(track4-session1)

  • 1. Android Bionic Linker 구조 분석 및 보안 활용 방안 고찰 박준형 매니저 / 모바일소프트웨어개발1팀 SK Planet
  • 3. 1.1 ARM 이란? ARM(Application DRM) 이란? T store 를 통해 유통되는 어플리케이션에 대해서 불법 복제 및 변조가 불가능 하게 하 는 T store 만의 전용 Application DRM(Digital Rights Management) 솔루션. ARM 동작 방식. -  ARM 이 적용된 Application 을 구매한 사용자가 Application 실행 시, -  T store 에서 해당 어플리케이션을 구매하였는지, 적절한 사용 권한을 가지고 있는 지를 확인한 다음, 암호화된 코드(APK) 를 해제하여 실행함. -  불법 유통된 Application 이나 권한을 부여 받지 못한 사용자는 해당 Application 을 실행할 수 없음.
  • 4. 1.1 ARM 3.0 손쉬운 적용 방법 더 이상 여러 명이 고생할 필요 없습니다 ! ARM 3.0은 별도의 소스 코드 수정 없이도 개발자센터를 통해서 간단하게 향상 된 보안 모듈을 적용할 수 있도록 적용 과정을 혁신적으로 개선되었습니다. 강력한 보안 코드 보안이 강력해졌습니다. ARM 3.0이 적용된 APK(SS-APK)가 실행되면 해당 단말에 설치되어 있는 ARM Client Service 모듈과 연동을 통해서 사용자의 어플리케이션 실행 권 한 여부를 체크하고, 적합한 권한을 보유한 경우에만 어플리케이션의 실행을 허가, 실행 가능하도록 암호화된 코드의 복호화를 수행합니다. 빠른 적용 시간 1분이면 뚝딱! ARM 적용을 시작하는 시점에 바로 Application 내 코드 암호화가 이루어 지며, ARM 모듈이 자동으로 탑재됩니다. 1분이면 최고 수준의 보안이 이뤄집니다.
  • 6. 1.3 GNU Libc vs. Bionic Libc ? GNU Libc 와 Bionic Libc 비교 GNU Libc Bionic Libc 비고 License LGPL BSD Size Large Small Speed Slow Fast (Low CPU Clock) Dynamic Linker /lib/i386-linux-gnu /ld-linux.so.2 /system/bin/linker libdl /lib/i386-linux-gnu /libdl-so.2 /system/bin/linker libdl.so is dummy. _start() __libc_start_main() __libc_init() crtbegin_xx.o 1) libdl.so is implemented in /bionic/linker/dlfcn.c
  • 7. 1.4 Android Native App. 실행 과정 _start() Shell __linker_init() ./helloWorld Dynamic Linker link_image() __linker_init_post_ relocation() Bionic execve() __libc_init() exit() SYS_execve Kernel SYS_exit Check & Load Binary main() (helloWorld) Start Loader (interpreter) dlopen() 참조: http://blog.csdn.net/freshui/article/details/8695463
  • 8. 3. ELF(Executable & Linable Format)
  • 9. 1.5 ELF File Format 구조 .text .rodata Program String Values (RO) .data 참조: http://en.wikipedia.org/wiki/Elf_format Executable Code (RO) Initialized Global Arrays and V ariables (RW)
  • 10. 1.5 ELF File Format 구조 – ELF Header ELF Header: readelf –h func.so
  • 11. 1.5 ELF File Format 구조 –Program Header (PHDR) Program Header(PHER): readelf –l func.so
  • 12. 1.5 ELF File Format 구조 – Section Header Section Header: readelf –S func.so
  • 13. 4. Dynamic Linker & Loader
  • 14. 1.6 Dynamic Linker 동작 –Find Library 1.  Dynamic Library 검색(find_library) •  struct soinfo linked list 에서 library 가 있는지 검색. .base soinfo #1 .name: lib1 .next lib #1 .base soinfo #2 .name: lib2 .next lib #2 .base soinfo #n .name: libn .next lib #n 참조: AOSP 4.1 /biolic/linker 소스코드
  • 15. 1.6 Dynamic Linker 동작 – Load Library 2. Dynamic Library 메모리 로딩 (load_library) 1.  open_library: library 파일을 open 하여 file descripter(fd) 반환. 2.  get_lib_extents: library 의 PHDR 에서 할당해야 할 사이즈 반환. 3.  alloc_mem_region: mmap 을 이용하여 메모리 할당(base address). 4.  load_segments: mmap 을 이용하여 library 의 fd 의 내용을 메모리에 적재. flag 값을 이용하여 mprotect 수행. tmp = base + (phdr->p_vaddr & (~PAGE_MASK)); len = phdr->p_filesz + (phdr->p_vaddr & PAGE_MASK); pbase = mmap((void *)tmp, len, PFLAGS_TO_PROT(phdr->p_flags), MAP_PRIVATE | MAP_FIXED, fd, phdr->p_offset & (~PAGE_MASK));
  • 16. 1.6 Dynamic Linker 동작 – Load Library Program Header(PHER): readelf –l func.so
  • 17. 1.6 Dynamic Linker 동작 – Load Library BSS(Block Started by Symbol) -  Non-initialized Global arrays and variables. -  Statically-allocated variables. -  ZI(Zero Initialized) Section. -  BSS is called like ‘Better Save Space’.
  • 18. 1.6 Dynamic Linker 동작 – Load Library .bss section 이 있을 경우 extra memory 할당. base Page 0 base+VirtualAddr FileSize extrabase .bss section (Fill with 0) Page 1 MemSize Extra_len Page n Page n+1 참조: /bionic/linker/linker.c
  • 19. 1.6 Dynamic Linker 동작 – Link Image 3. Dynamic Library Relocation (link_image) 1.  dynamic section 에서 유용한 정보 추출해서 soinfo 에 저장. 2.  DT_NEEDED 정보에서 해당 library 검색/로드 (soinfo linked list 에 add). 3.  reloc_library: rel.dyn, rel.plt 정보를 사용하여 참조 재배치(relocation). Support for PIC (Global Offset Table) .got ex) CFLAGS = –fpic or –fPIC .plt Support for Dynamic Linking (Procedure Linkage Table)
  • 20. 1.6 Dynamic Linker 동작 – Link Image Dynamic Section: readelf –d func.so
  • 21. 1.6 Dynamic Linker 동작 – Link Image Relocation Section: readelf –r func.so -  R_ARM_RELATIVE : *(base + offset) += base -  R_ARM_JUMP_SLOT: _do_lookup(soinfo linked list 에서 Symbol Addr 할당)
  • 22. 1.6 Dynamic Linker 동작 – Call Constructors 4. Dynamic Library Constructors 호출(call_constructors_recursive) 1.  Library initialzation : call the init_array. ex) __attribute__((constructor)) static void initialize(void) { } __attribute__((destructor)) static void finalize(void) { }
  • 23. 1.6 Dynamic Linker 동작 – Lookup Symbol 5. Dynamic Library 에서 Symbol 검색 (_do_lookup) Lookup Symbol in soinfo linked list with .hash section. -  hash = elfhash(name) -  sym = _elf_lookup(si, hash, name); 참조: http://lwn.net/Articles/192624/
  • 24. 5. Android Native Code 보안
  • 25. 1.7 Native Binary 보안 활용 방안 - 1 UPX: Packer (Self Modifying Code) -  Android Bionic Libc 를 지원하도록 코드 수정. -  p_lx_elf.cpp : -  Android Dynamic Shared Library 에는 적용이 안됨. -  Detailed Changed Log (http://upx.sourceforge.net/upx-news.txt) -  Compress shared library on ELF i386 only [ld.so threatens even this case].
  • 26. 1.7 Native Library 보안 활용 방안 - 1 Secure Dynamic Linker 1.  Custom Dynamic Linker 1.  LDFLAGS = nostdlib -Wl,--dynamic-linker,"/system/bin/linker” 2.  Encrypted Library 를 Dynamic Linker 에서 Decrypt & Loading. 1.  암호화 해제 후 link & load 수행.
  • 27. 1.7 Native Library 보안 활용 방안 - 2 Secure Loading Library (instead of libdl) 1.  dlopen 을 대신할 secure dynamic linking library. 2.  Encrypted Library 를 dlopen 에서 Decrypt & Loading. 1.  암호화 해제 후 link & load 수행.
  • 28. 1.7 mmap 을 이용한 코드 실행 – 1 -  NDK Standalone Toolchain 만들기 -  $(NDK_ROOT)/build/tools/make-standalone-toolchain.sh -  Compile: arm-linux-androideabi-gcc –c –o add.o add.c -  Disassmble: arm-linux-androideabi-objdump –d add.o
  • 29. 1.7 mmap 을 이용한 코드 실행 – 2 -  .text 섹션에서 add function code 추출.
  • 30. 1.7 mmap 을 이용한 코드 실행 – 3 -  mmap & mprotect 사용.
  • 31. 1.7 mmap 을 이용한 코드 실행 – 4 -  Build Executable: arm-linux-androideabi-gcc –o test main.c -  Android Emulator 실행 -  android avd -  테스트 코드 실행 -  adb push test /data/ -  adb shell chmod 777 /data/test -  adb shell /data/test
  • 32. 1.8 Other Applications ? 1.  JIT(Just In-Time) Compiler Runtime - Dynamic linking & loading the JIT compiled native binary. - RenderScript Runtime 에 Dynamic Linker 기법이 사용되고 있음.
  • 33. Q&A