본문 바로가기

[+] Information/[-] RCE

ARE(Android Reverse Engineering) 환경 소개

제목 그대로 ARE 환경을 소개 하려는 글이다. 현재 Android 악성 App을 분석할 수 있게 도와주는 여러 도구들은 꽤 많이 배포되고 업데이트 되고 있다. 하지만 이 대부분의 도구들을 하나의 환경에서 설치하고 실행하기란 여간 귀찮고 까다로운일이 아닐 수 없다. 이러한 작업들을 Honeynet에서 대신해주었다. 바로 지금부터 소개할 ARE 프로젝트이다. ARE 프로젝트는 여러가지의 Android 악성 App 분석 도구들을 하나의 OS, 즉 ubuntu에 모아 설치하여 분석가에게 편의를 제공하는 프로젝트이다.

이러한 환경은 오라클에서 개발하고 배포하는 무료 가상 소프트웨어 Virtual Box 이미지로 배포되고 있다.


프로젝트 및 다운로드 주소 : http://redmine.honeynet.org/projects/are/wiki


해당 환경에 설치 된 도구들은 다음과 같다.



일단 ARE 환경은 tar로 압축되어 배포 되고 있는데 압축을 해제 한 후 로딩하여 보면(로그인 패스워드는 android) 다음과 같이 Main 화면을 볼 수 있다.


[그림 1 - ARE Main]


처음에 환경을 로딩하고 나서 수정해주어야 할 점이 있다. 바로 adb 명령 path 설정이다. 왜 설정이 안되어 있는지는 모르겠지만 일단 adb 설정이 안되어 있으면 DroidBox 등을 실행 할 경우 굉장히 귀찮아진다.(소스 수정까지 해야 한다.)


그렇기 때문에 아래와 같이 수정을 해주어야 한다.


터미널을 Open 한 후 


#vi .bashrc


/home/android/tools/android/android-sdk-linux_x86/tools/

/home/android/tools/android/android-sdk-linux_x86/platform-tools/


위 두가지를 PATH에 추가한다. 아래 처럼!



[그림 2 - 환경변수 PATH 수정]


export 명령을 사용해도 되지만 부팅 시 export 명령으로 한 설정은 사라지기 때문에 이렇게 설정하는 것이다.


그리고 sdk를 업데이트 해주어야 한다. 아무래도 프로젝트가 현재 진행이 되질 않다보니 환경에 있는 안드로이드 에뮬레이터 또한 최신 버전등이 없다. 


#/home/android/tools/android/android-sdk-linux_x86/tools/android update sdk


위 명령을 실행하게 되면 다음과 같이 SDK Manager 대화상자가 나오고 업데이트 해야 할 목록들이 나오게 된다.



[그림 3 - SDK Manager]


업데이트 할 목록들을 선택하여 Accept를 해주어도 되고 모두 설치하려면 Accept All을 클릭해주고 Install 버튼을 누르면 된다.


이제 분석할 환경설정이 모두 끝이 났다. 간단하게 DroidBox를 통해 동적분석을 수행해 보자.


 * 참고 : 사용자 홈 디렉토리의 하위 디렉토리인 tools 디렉토리에 분석 도구들이 설치되어 있다.


DroidBox는 Apk 파일을 Sandbox 환경에서 실행시켜 어떤 동작을 하는지 모니터링 한 후 그 결과를 사용자에게 출력하여 준다. 정적분석을 할 때 만약 암호화 되어 있는 주소나 포트등이 있다고 하더라도 결국 동적 분석에서 모두 알 수 있다. DroidBox는 기본적으로 다음과 같은 행동들을 모니터링 한다.


  • Incoming/outgoing network data
  • File read and write operations
  • Started services and loaded classes through DexClassLoader
  • Information leaks via the network, file and SMS
  • Circumvented permissions
  • Cryptography operations performed using Android API
  • Listing broadcast receivers
  • Sent SMS and phone calls

대부분 악성 App이 하는 악성 행동만을 모니터링 한다.

일단 DroidBox는 안드로이드 에뮬레이터를 이용하기 때문에 DroidBox 디렉토리 안에 있는 startemu.sh로 에뮬레이터를 실행 시켜준다.

[그림 4 - startemu.sh]


Android21은 AVD 이미지 이름으로 /home/android/.android/avd 에 존재한다. 그래서 이전에 에뮬레이터 버전들을 업데이트 해 준것이다. SDK Manager를 실행하여 에뮬레이터 이미지를 생성하여 주면 여러 버전에서 App를 테스트하여 볼 수 있다.

에뮬레이터가 정상적으로 실행 됬다면 droidbox.sh를 실행하여 준다.

#./droidbox.sh sample.apk

이 명령으로 실행하여주면 아래와 같이 분석을 수행한다.

[그림 5 - DroidBox 분석화면]


분석결과가 실시간으로 출력되지는 않는다. Collected~ 문자열에서 숫자는 모니터링 한 로그 수를 의미하는데 이 로그가 높으면 높을 수록 조금 더 정확한 결과와 많은 결과를 얻을 수 있다. 필자가 테스트 해 본 결과 80~85 로그수가 제일 적당하다. 100이상을 넘어가면 터미널 창에서 모든 결과가 보이지 않아 다시 실행해야 하는 낭패를 볼 수 있다. 아니면 > 를 이용하여 출력화면을 저장해도 좋다. 


아래는 잠깐의 분석을 통해 나온 결과이다.


[Info]

     ------

        File name: sample.apk

        MD5: c3a0f5d584cc2c3221bbd79486578208

        SHA1: 81781c90e79bf19ea0acb67df6b9bf636a520367

        SHA256: c6eb43f2b7071bbfe893fc78419286c3cb7c83ce56517bd281db5e7478caf995

        Duration: 578.77789402s



     [File activities]

     -----------------


        [Read operations]

        -----------------

           [149.832055092] Path: /data/data/com.android.calendar/shared_prefs/_has_set_default_values.xml(

            Data: <?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>

<boolean name="_has_set_default_values" value="true" />

</map>




        [Write operations]

        ------------------


     [Crypto API activities]

     -----------------------


     [Network activity]

     ------------------


        [Opened connections]

        --------------------

           [43.371598959] Destination: incorporateapps.com Port: 80


        [Outgoing traffic]

        ------------------

           [43.7593550682] Destination: incorporateapps.com Port: 80

            Data: POST /wat.php HTTP/1.1

Content-Length: 284

Content-Type: application/x-www-form-urlencoded

Host: incorporateapps.com

Connection: Keep-Alive

User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

Expect: 100-Continue





        [Incoming traffic]

        ------------------


     [DexClassLoader]

     -----------------

     [Broadcast receivers]

     ---------------------

     [Started services]

     ------------------

     [Enforced permissions]

     ----------------------


     [Permissions bypassed]

     ----------------------


     [Information leakage]

     ---------------------

           [56.98290205] Sink: Network

            Destination: incorporateapps.com

            Port: 80

            Tag: TAINT_IMEI

            Data: SECOND_TABLE=0&imei=357242043237517&timestamp=1336213509&phoneinfo=System+-+generic%2Fgeneric%2Fgeneric%2F%3A2.1-update1%2FEPE54B%2Feng.pjlantz.20110606.044729%3Aeng%2Ftest-keys%0AModel%3A+unknown-GT-I9000-Samsung+GT-I9000%0A+Brand%3ASamsung+%0AOSVers%3A2.1-update1+Locale%3Aen_US+%0A


     [Sent SMS]

     ----------


     [Phone calls]

     -------------


어떠한 행동을 하는지 확인되었다면 그만큼 정적 분석은 쉬워질 것이다. 왜 File 을 Write하고 정확히 유출하는 정보는 무엇인지 정적분석을 통해 알아내면 된다.

'[+] Information > [-] RCE' 카테고리의 다른 글

소소한 Unpacking TIP  (8) 2013.01.09
Oter : Android Revese Engineering Tool  (8) 2012.01.30
PE 구조 (8)  (0) 2012.01.01
PE 구조 (7)  (0) 2012.01.01