Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Android Bionic Linker 구조 분석 및
보안 활용 방안 고찰
박준형 매니저 / 모바일소프트웨어개발1팀
SK Planet
1. ARM 개요
1.1 ARM 이란?
ARM(Application DRM) 이란?
T store 를 통해 유통되는 어플리케이션에 대해서 불법 복제 및 변조가 불가능 하게 하
는 T store 만의 전용 Application DRM(Di...
1.1 ARM 3.0
손쉬운 적용 방법

더 이상 여러 명이 고생할 필요 없습니다 !
ARM 3.0은 별도의 소스 코드 수정 없이도 개발자센터를 통해서 간단하게 향상
된 보안 모듈을 적용할 수 있도록 적용 과정을 혁신적...
2. Bionic Libc
1.3 GNU Libc vs. Bionic Libc ?
GNU Libc 와 Bionic Libc 비교
GNU Libc

Bionic Libc

비고

License

LGPL

BSD

Size

Large

Small...
1.4 Android Native App. 실행 과정
_start()

Shell

__linker_init()

./helloWorld

Dynamic Linker

link_image()
__linker_init_p...
3. ELF(Executable & Linable Format)
1.5 ELF File Format 구조

.text
.rodata

Program String Values (RO)

.data

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

Exe...
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 가 있는지 검색...
1.6 Dynamic Linker 동작 – Load Library
2. Dynamic Library 메모리 로딩 (load_library)
1.  open_library: library 파일을 open 하여 file d...
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.
-  Stati...
1.6 Dynamic Linker 동작 – Load Library
.bss section 이 있을 경우 extra memory 할당.
base
Page 0
base+VirtualAddr
FileSize
extrabase...
1.6 Dynamic Linker 동작 – Link Image
3. Dynamic Library Relocation (link_image)
1.  dynamic section 에서 유용한 정보 추출해서 soinfo 에 ...
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
- ...
1.6 Dynamic Linker 동작 – Call Constructors
4. Dynamic Library Constructors 호출(call_constructors_recursive)
1.  Library init...
1.6 Dynamic Linker 동작 – Lookup Symbol
5. Dynamic Library 에서 Symbol 검색 (_do_lookup)
Lookup Symbol in soinfo linked list wit...
5. Android Native Code 보안
1.7 Native Binary 보안 활용 방안 - 1
UPX: Packer (Self Modifying Code)
-  Android Bionic Libc 를 지원하도록 코드 수정.
-  p_lx_elf.cpp :

...
1.7 Native Library 보안 활용 방안 - 1
Secure Dynamic Linker
1.  Custom Dynamic Linker
1.  LDFLAGS = nostdlib -Wl,--dynamic-linke...
1.7 Native Library 보안 활용 방안 - 2
Secure Loading Library (instead of libdl)
1.  dlopen 을 대신할 secure dynamic linking library....
1.7 mmap 을 이용한 코드 실행 – 1
-  NDK Standalone Toolchain 만들기
-  $(NDK_ROOT)/build/tools/make-standalone-toolchain.sh
-  Compil...
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 a...
1.8 Other Applications ?
1.  JIT(Just In-Time) Compiler Runtime
- Dynamic linking & loading the JIT compiled native binary...
Q&A
THANK YOU
Upcoming SlideShare
Loading in …5
×

of

141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 1 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 2 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 3 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 4 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 5 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 6 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 7 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 8 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 9 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 10 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 11 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 12 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 13 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 14 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 15 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 16 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 17 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 18 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 19 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 20 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 21 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 22 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 23 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 24 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 25 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 26 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 27 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 28 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 29 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 30 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 31 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 32 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 33 141 deview 2013 발표자료(박준형) v1.1(track4-session1) Slide 34
Upcoming SlideShare
Program Structure in GNU/Linux (ELF Format)
Next
Download to read offline and view in fullscreen.

6 Likes

Share

Download to read offline

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

Download to read offline

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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

  1. 1. Android Bionic Linker 구조 분석 및 보안 활용 방안 고찰 박준형 매니저 / 모바일소프트웨어개발1팀 SK Planet
  2. 2. 1. ARM 개요
  3. 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. 4. 1.1 ARM 3.0 손쉬운 적용 방법 더 이상 여러 명이 고생할 필요 없습니다 ! ARM 3.0은 별도의 소스 코드 수정 없이도 개발자센터를 통해서 간단하게 향상 된 보안 모듈을 적용할 수 있도록 적용 과정을 혁신적으로 개선되었습니다. 강력한 보안 코드 보안이 강력해졌습니다. ARM 3.0이 적용된 APK(SS-APK)가 실행되면 해당 단말에 설치되어 있는 ARM Client Service 모듈과 연동을 통해서 사용자의 어플리케이션 실행 권 한 여부를 체크하고, 적합한 권한을 보유한 경우에만 어플리케이션의 실행을 허가, 실행 가능하도록 암호화된 코드의 복호화를 수행합니다. 빠른 적용 시간 1분이면 뚝딱! ARM 적용을 시작하는 시점에 바로 Application 내 코드 암호화가 이루어 지며, ARM 모듈이 자동으로 탑재됩니다. 1분이면 최고 수준의 보안이 이뤄집니다.
  5. 5. 2. Bionic Libc
  6. 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. 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. 8. 3. ELF(Executable & Linable Format)
  9. 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. 10. 1.5 ELF File Format 구조 – ELF Header ELF Header: readelf –h func.so
  11. 11. 1.5 ELF File Format 구조 –Program Header (PHDR) Program Header(PHER): readelf –l func.so
  12. 12. 1.5 ELF File Format 구조 – Section Header Section Header: readelf –S func.so
  13. 13. 4. Dynamic Linker & Loader
  14. 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. 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. 16. 1.6 Dynamic Linker 동작 – Load Library Program Header(PHER): readelf –l func.so
  17. 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. 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. 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. 20. 1.6 Dynamic Linker 동작 – Link Image Dynamic Section: readelf –d func.so
  21. 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. 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. 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. 24. 5. Android Native Code 보안
  25. 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. 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. 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. 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. 29. 1.7 mmap 을 이용한 코드 실행 – 2 -  .text 섹션에서 add function code 추출.
  30. 30. 1.7 mmap 을 이용한 코드 실행 – 3 -  mmap & mprotect 사용.
  31. 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. 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. 33. Q&A
  34. 34. THANK YOU
  • kyeonghwanlim

    Mar. 1, 2017
  • Affronova

    Oct. 22, 2015
  • ssuserbe46cf

    Jun. 4, 2015
  • hyounghochoi

    Dec. 14, 2014
  • lum7671

    Jul. 29, 2014
  • cjhks

    Oct. 23, 2013

Views

Total views

4,298

On Slideshare

0

From embeds

0

Number of embeds

1,668

Actions

Downloads

115

Shares

0

Comments

0

Likes

6

×