제목 그대로 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
ARE(Android Reverse Engineering) 환경 소개  (5) 2012.05.05
Oter : Android Revese Engineering Tool  (8) 2012.01.30
PE 구조 (8)  (0) 2012.01.01
PE 구조 (7)  (0) 2012.01.01
  1. Favicon of https://extr.tistory.com BlogIcon extr 2013.03.05 23:16 신고

    잘봤습니다 ㅎㅎ

  2. Android 2014.04.04 00:56

    안녕하세요. 설치하는데 굉장히 시간이 오래 걸리던데, 설치 후 tar 로 압축만 풀면 진행이 되나요?..
    저 같은 경우 압축 푸니깐 파일 두개가 생기던데...어디서 잘못되었는지 모르겠내요.

    virtual box는 따로 설치를 해야하는건가요?...

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2014.04.04 11:16 신고

      버츄얼박스는 따로 설치하셔야 하고, tar 파일을 풀면 버츄얼 박스 이미지 파일들이 나옵니다.

  3. Favicon of https://roomb16.tistory.com BlogIcon 포착 2016.05.24 00:25 신고

    덕분에 잘 설치했습니다. 감사합니다!

이번에 분석해 볼 앱은 정말 최근(2012. 4.11)에 발견된 원격 스마트폰을 SMS로 컨트롤하는 앱이다. 


클래스파일이 너무 많아 line by line는 안되고 악성 행위를 하는 부분에 대해서만 설명하도록 하겠다.


일단 GPS 업데이트 부분을 한번 살펴보자. 해당 앱은 감염된 스마트폰의 GPS 정보를 전송하는 기능이 있는데 해당 기능은 [그림1]과 같은 소스코드가 수행하며 클래스 파일의 이름은 CdmaCellLocation이다.



[그림 1 - GPS 위치 전송 데이터 설정]


이번에는 전화통화를 강제로 종료하는 부분이다. 스마트폰의 스크린이 켜지면 그 이벤트를 감지하여 전화통화 상태일시 전화통화를 종료해버린다.


[그림 2 - 전화통화 강제종료]


이번에는 감염 스마트폰의 이미지 전송 부분이다. 사용자가 갤러리등을 통해 사진을 호출하려고 할 때 대부분의 앱들은 미리보기를 보여주게 되는데 이 미리보기가 호출되면 자동적으로 OnPreviceFrame() 메소드가 호출되어 이미지가 특정한 곳으로 전송 된다.


[그림 3 - 이미지 전송]


이번에는 가장 핵심적인 SMS 메시지 명령에 대한 부분을 보자. [그림 4]는 감염 스마트폰으로 SMS가 올 시 그것을 감지하는 부분이다.


[그림 4 - SMS 감지]


이번에는 명령을 체크하는 부분이다. 아래는 그 일부분이다.


[그림 5 - SMS 명령 체크]


이젠 어떠한 명령이 있는지 알아보자. 일단 네트워크에 관련된 부분이다.


[그림 6 - wift 체크]


[그림 6]은 wifi가 연결되어 있는지 확인하는 메소드 부분이다. 이뿐만 아니라 네트워크의 설정정보도 변경하며 사용자가 네트워크 설정 정보를 변경하면 그것또한 감지하여 다시 네트워크 정보를 변경한다.


[그림 7 - 재부팅]


[그림 7]은 악성 앱이 감염 스마트폰을 강제적으로 재부팅시키는 메소드 부분이다. 


[그림 8 - 백그라운드 프로세스 Kill]


[그림 8]은 악성 앱이 백그라운드에서 실행되고 있는 프로세스를 죽이는 메소드 부분이다.


[그림 9 - 상수]


[그림 9]는 GPS와 녹음파일을 업로드 하는 메소드 부분에서 사용되는 상수 값이다. 앞에서 보았던 GPS 설정 데이터를 해당 부분에서 전송하며 녹음 파일 또한 같은 메소드에서 전송한다.



[그림 10 - 전송 후 삭제]


[그림 10]은 녹음 파일을 전송 한 후 삭제하는 부분이다. [그림 11]은 특정 서버와 연결하는 부분으로 해당 서버와 연결이 되면 계속해서 서버에서 오는 수신 메시지를 받는다.



[그림 11 - 서버메시지 수신]


마지막으로 화면잠금 해제 부분이다.


[그림 12 - 화면잠금 해제]


정말 앱 하나에 기능이 많이 들어가 있다. 보기 좋게 어떤 악성 행위를 하는지 정리해 보면 다음과 같다.


1. GPS 데이터 전송

2. SMS 특정번호로 전송

3. 네트워크 설정 정보 변경 및 연결상태 확인

4. 특정 서버와 데이터 송수신

5. 백그라운드의 프로세스 Kill

6. 녹음 파일 전송

7. 스마트폰 재부팅

8. 전화통화 강제종료

9. 이미지 전송

10. 화면 잠금 해제



결국 해당 앱은 감염 스마트폰으로 오는 메시지들을 모니터링 해서 명령에 해당하는 것이 있으면 해당 명령에 관한 기능을 수행한다. 또 스마트폰 상태에 따라 여러가지 정보를 변경한다. 마지막으로 여러 특정데이터들을 특정한 곳으로 전송 시킨다.

전형적인 봇의 형태를 나타내며, 악성코드로서의 행위도 하는 스마트폰에 어울리는 아주 스마트한 악성 앱이다.

'[+] Security > [-] Analysis' 카테고리의 다른 글

CVE 2012-0507 간단 분석  (12) 2012.05.17
Yszz 0.1 난독화 등장!!  (0) 2012.05.17
Android Tigerbot-Spyera Analysis  (0) 2012.04.13
Android.Stiniter_TGLoader Analysis  (0) 2012.04.12
Encrypt By Dadong's JSXX 0.41 VIP 샘플 분석  (2) 2012.03.10

요즘 안드로이드 봇넷에 관한 연구가 외국에서 활발히 이루어지고 있으며 이와 관련된 악성 앱 또한 많이 발견되고 있는 상황이다. 이러한 상황을 어느정도 파악해 보고자 이렇게 악성 앱 분석을 시도하게 되었다.


지금부터 분석 할 악성 앱은 리팩(RePackage) 된 악성 앱이며, 사용자의 스마트폰 정보를 프리미엄 번호로 메시지 전송을 시도하며 또 원격에 있는 C&C 서버와 통신하는 악성 앱 봇이다.


[android.dds.com-STiNiTER.apk]

Main에 해당하는 apk 파일이며 해당 파일을 압축해제 한 후 디컴파일 하여 보면 몇가지의 패키지 파일들이 나오는데 원본 앱과 비교하여 보면 com.gamebox.service 패키지가 원본 앱에 없다는 것을 확인 할 수 있다.

com.gamebox.service 패키지(이하 악성패키지)는 해당 apk 파일의 Main 클래스의 onCreate() 메소드가 호출되면서 자동으로 호출된다.


[그림 1 - 악성 패키지 호출]


OnCreate() 메소드는 액티비티가 생성되면 자동적으로 시스템이 호출하는 메소드이어서 앱이 실행되면 자동으로 실행되는 메소드라고 생각하면 된다. 결국 앱 실행과 동시에 악성 패키지가 서비스로서 실행되게 된다.


일단 악성 패키지는 아래처럼 어떠한 것들을 어떠한 경로에 복사하는 일을 수행한다.


[그림 2 - 악성 앱 복사 수행 루틴]


if문 바로 아래의 출력문을 보면 rootstate 라는 문자열이 보이는데 해당 문자열만 봐도 해당 루틴이 root 권한으로 실행 된다는 것을 알 수 있다. 바로 이 루틴 밑에는 복사한 악성 앱들을 777(rwxrwxrwx) 권한으로 변경하는 루틴이 위치한다.


[그림 3 - 권한 변경 수행 루틴]


권한 변경 도중 쓰레드를 실행하는데 이 쓰레드는 start 파일을 실행시키는 쓰레드이다.

또 맨 마지막 코드를 보면 initr 파일도 실행시키는 것을 볼 수 있다.


[그림 4 - thread1]


위 코드가 thread1 부분의 코드이며, [그림 4]에서 보듯이 start파일을 실행시키고 있다.

파일의 후반부를 가면 OnCreate() 메소드가 존재하는데 이 루틴에서는 감염 스마트폰의 정보와 보낼 번호등이 설정되고 또 복사될 악성앱이름, 경로등이 설정 된다.


[그림 5 - 여러가지 정보 설정]


스마트폰의 여러 정보들을 수집하여 xml 데이터로 만들고, 또 복사할 앱을 바이너리 모드로 열어 그 데이터를 저장하며 복사 할 위치를 지정하고 있다. 해당 앱들은 모두 resource/raw 디렉토리에 들어있다.


위 apk 파일에서 start 파일과 initr 파일을 실행 시키는 것을 볼 수 있었다. 이번에는 start 파일을 한번 살펴보자.


[start]

해당 파일은 ELF 포맷의 파일로 특별한 악성행위는 하지 않으면 log 파일을 생성/Open 하고 파일이 정상적으로 생성되었다면 Keeper라는 파일을 실행시킨다.


[그림 6 - start 파일 흐름]


이번에는 initr 파일을 살펴보자.


[initr]

해당 파일 또한 ELF 포맷의 파일이며, 여러가지의 파일들의 권한을 설정해준다. 아래는 어떤 파일을 어떤 권한으로 설정하여 주는지 목록화 한 것이다.


 - /data/googleservice.apk - 644

 - /data/unlock.apk - 644

 - /data/googlemessage.apk -644

 - /system/bin/android.info - 777

 - /system/bin/keeper - 4711

 - /system/bin/ts - 4711

 - /system/bin/sh - 4755


해당 악성앱은 앞서 말했듯이 루트권한으로 동작한다. 그러므로 keeper, ts 그리고 쉘인 sh는 루트권한으로 실행되게끔 권한이 설정된 것이다.


이번에는 start 파일에서 실행시킨 keeper 파일을 살펴보자.


[keeper]

해당 파일도 ELF 포맷의 파일이며, ts 파일의 소유자와 권한등을 설정하고 ts 파일을 실행시키는 기능을 수행한다.


[그림 7 - 권한 설정 및 실행 루틴]


[그림 7]을 보면 system() 함수를 이용해 권한 설정 및 ts 파일을 실행 하는 것을 볼 수 있다.


이번에는 keeper 파일이 실행시킨 ts 파일을 살펴보자.


[ts]

해당 파일은 ELF 포맷의 파일로 실질적인 악성 행위를 하는 앱들을 설치하고, C&C 서버와 통신하는 기능을 수행한다. 또 C&C서버와 여러가지 파일을 주고 받는다.


[그림 8 - 악성 앱 설치]


 * 참고 : 악성 앱 설치하기 전  /system/etc의 권한을 777로 변경한다.


[그림 8]은 adb 명령을 이용하여 3개의 악성 앱을 설치하는 명령어들이다.

조금만 더 문자열들을 검색해보면 HTTP 헤더 패킷들이 보인다.


[그림 9 - HTTP 헤더 패킷]


그리고 헤더 패킷 이후로 보면 통신 대상이 되는 C&C 서버 4곳의 주소가 나온다.


[그림 10 - C&C 서버 목록]


해당 C&C 서버들은 아직까지 운영되고 있는 것을 확인하였다.


[그림 11 - 운영되고 있는 C&C 서버]


C&C 서버와 주고 받는 여러가지 파일들은 아래와 같다.


 - ReportDownStatus.do

 - GetPackage.do

 - GetRequestInterval.do

 - HeartBeat.do

 - ReportPushMessageStatus.do


이번에는 ts 파일이 설치하는 악성 앱 3가지에 대해서 알아보자.


[악성 앱 3가지]

일단 googlemessage.apk 파일부터 알아보자. 이름에서도 알수 있듯이 메시지에 관련된 앱이다. 압축해제 후 디컴파일을 수행하여 원본코드를 보면 정말 간단하다.


[그림 12 - 메시지 전송 루틴]


OnCreate() 메소드가 호출되면 설정되어 있는 프리미엄 번호로 sendTextMessage() 메소드를 통해 메시지를 전송한다.


이번에는 googleservice.apk를 살펴보도록 하자. 해당 앱은 악성 패키지가 사용자에 의해 삭제되어 해당 스마트폰이 봇넷에서 빠졌을 때 봇의 기능은 하지 못하더라도 과금유발 기능은 하게끔 제작되어 있다. 또 서비스 이름이 사용자에게 친숙한 GoogleUpdateService이어서 사용자가 삭제하지 않을 확률이 높아 악성 앱이 지워지지 않을 확률이 높다.


[그림 13 - run() 메소드 루틴]


[그림 14 - OnCreate() 메소드 루틴]


OnCreate() 메소드를 보면 악성 앱에 대한 루틴은 없지만 메시지 전송 설정 루틴은 존재하는 것을 볼 수 있다.


마지막으로 unlock.apk 파일을 살펴보자.

해당 파일은 스마트폰의 화면잠금/절전모드를 변경하는 앱이다. 절전모드를 변경하여 감염 스마트폰의 전원을 급격히 소모하게 하려는 의도가 엿보인다.



[그림 15 - Unlock.apk]


클래스의 확장 속성을 보면 BroadcastReceiver이다. 앱에서 어떠한 이벤트가 발생하면 그것을 감지하는 속성인데 OnReceivce() 메소드를 보면 어떤 앱에서 메시지를 전달 받게 되면 화면잠금을 해제하고 새로운 절전모드를 설정한다.


 * 참고 : 새로운 절전모드로 264835462의 숫자를 사용하는데 이는 ACQUIRE_CAUSES_WAKEUP(268435456) + SCREEN_DIM_WAKE_LOCK(6)의 합이다. ACQUIRE_CAUSES_WAKEUP는 CPU를 ON 상태로 만들고 화면을 어둡게 만들며 키보드 레이아웃을 끄는 플래그이고, SCREEN_DIM_WAKE_LOCK는 어플에서 어떤 이벤트가 발생하면 화면과 키보드 레이아웃을 켜주는 플래그로 결국 BroadcastReceiver의 OnReceive() 메소드로 인해 스마트폰은 계속 화면이 켜져있는 상태가 될 것이다.


해당 악성 앱의 흐름을 살펴보면 [그림 16]과 같다.



[그림 16 - 악성 앱의 실행 흐름도]


 * 참고 : 이미지를 클릭하면 원본 이미지 크기로 보입니다.

+ Recent posts