이번 포스팅에서는 가장 흔하게 배포되고 있는 안드로이드 스미싱 악성코드인 CJ대한통운 택배 사칭 앱에 대한 악성코드 분석을 한다. 분석 방법은 AndroidManifest.xml 분석과 코드 정적 분석 그리고, 직접 실행하여 유출되는 패킷을 분석하는 동적 분석을 진행할 예정이다.


해당 악성 앱은 실제 구글 앱 스토어에 있는 앱과 아이콘이 유사하기 때문에, 일반 사용자들은 이를 CJ대한통운 택배 앱으로 착각하고 설치하게 되었을 때, 피해를 입게 된다. 다음과 같이 CJ대한통운 택배 앱을 사칭하며, 실제 정상 앱과 유사한 아이콘으로 일반 사용자들을 속이고 설치를 유도한다.

 

 

해당 악성코드를 Virustotal 사이트에서 확인해보면, 다음과 같이 많은 백신 엔진에서 이를 탐지하고 있음을 알 수 있으며, 탐지명은 대다수가 Android.Trojan.SmsSpy 명칭을 사용하는 악성코드로 SMS 정보를 탈취하는 행위를 하는 것을 가늠할 수 있다.

 

 

 

1. AndroidManifest.xml 분석

​Apktool를 이용하여 AndroidManifest.xml를 열어보면, 해당 악성 앱은 다음과 같은 권한을 요구한다.

 

 

  - 네트워크 사용 권한 (INTERNET)

  - 폰 상태 정보 읽기 권한 (READ_PHONE_STATE)

  - SMS 읽기 권한 (READ_SMS)

  - SMS 보내기 권한 (SEND_SMS)

  - 부팅 완료 시, 브로드캐스트를 받을 수 있게 하는 권한 (RECEIVE_BOOT_COMPLETED)

  - SMS 수신 권한 (RECEIVE_SMS)

  - 환경설정 변경 권한 (WRITE_SETTINGS)

  - 전화 수신 관련 권한 (CALL_PHONE)

  - 폰 상태 변경 권한 (MODIFY_PHONE_STATE)

 

최초로 수행되는 Entry Point는 MainActivity로 등록되어 있으며, 그 밖에 1개의 Activity와 1개의 Service, 2개의 Receiver로 구성되어 있음을 확인할 수 있다.


 

 

2. 소스 코드 정적 분석

소스 코드 정적 분석의 경우 JEB Decompiler를 이용하였으며, 이전 포스팅에서 JEB Decompiler에 대한 설명을 하였다.

JEB Decompiler : 2017/05/02 - [Analysis/Android] - 안드로이드 디컴파일러 (JEB Decompiler)

 

최초 앱이 실행되면 아래 그림처럼 실행과 동시에 애플리케이션 목록에서 해당 앱의 아이콘을 은폐시킨다. 또한, 앱 디렉토리 내에 shared_prefs에서 perf.xml 파일에 접근하여 해당 정보를 가져오며, PreodicService​RegDPMActivity​를 각각 인텐트로 Service와 Activity 형태로 실행하게 된다.


 

http://goncp.ucmkb.net/ DNS 주소를 확인할 수 있다.

 

 

다음으로 Intent를 이용하여 Service로 등록시킨 PreodicService​를 분석해보면, 해당기기의 전화번호를 http 프로토콜의 파라메타 형태로 전송한다.

 

 

RegDPMActivity​ 경우, Intent를 이용하여 Activity 형태로 실행시키며 앱이 실행되면 기기 관리자 정보를 요구한다.

 

 

 

 

다음으로 Receiver로 등록된 CallStateReceiverSMSBroadcastReceiver​의 경우, 기기의 상태를 체크하여 해당 기기의 정보를 탈취하려는 의도를 확인할 수 있다.

 

 

 

 

3. 네트워크 동적 분석

다음으로 Tcpdump를 이용하여, 해당 악성 앱을 동작시켜 실제 유출지로 기기의 정보를 전송하는지 분석한다.

안드로이드 환경에서의 Tcpdump 사용 방법은 이전 포스팅에서 설명하였다.

안드로이드 환경에서의 Tcpdump 사용 방법 : 2017/05/03 - [Android] - 안드로이드 환경에서의 Tcpdump 사용 방법

 

해당 기기에서 악성 앱을 동작시키고 덤프 받은 pcap 파일을 분석하면 다음과 같이 기기의 정보를 전송하는 것을 확인할 수 있다.

 

 

또한, 유출 도메인을 nslookup 명령어를 실행하여 해당 DNS 정보를 조회할 수 있는데, 이를 조회할 경우 다음과 같은 IP를 확인할 수 있다.

 

 

해당 IP를 whois를 이용하여 유출 국가를 확인할 수 있는데, 다음과 같이 홍콩으로 해당 정보가 유출되는 것을 확인할 수 있다.

 

 

 

 

4. 악성 앱 제거 방법

해당 앱을 삭제하기 위해서는 다음과 같이 기기 관리자 정보에서 기기 관리자 권한을 해제한 후, 제거가 가능하다.

 

 

 

 

 

 

안드로이드용 Tcpdump는 아래 사이트에서 다운로드 받을 수 있으며, adb 명령어를 이용하여 안드로이드 기기 내부의 /data/local/tmp/ 디렉토리에 Push 하여 실행이 가능하다.


안드로이드용 Tcpdump : http://www.androidtcpdump.com/android-tcpdump/downloads


다운로드 받은 Tcpdump를 안드로이드 기기의 /data/local/tmp 디렉토리에 Push 한다.

$ adb push tcpdump /data/local/tmp 



 

Tcpdump를 실행시키기 위해서는 해당 기기가 루팅 상태이어야 하며, 루트 권한이 없을 경우 다음과 같이 퍼미션 에러 메시지를 나타내며, 실행이 되지 않는다.

 


 

다음으로 Tcpdump에 실행 권한을 부여한다.

$ chmod 777 tcpdump

 


 

Tcpdump 실행하여 패킷 캡쳐

 


 

덤프가 완료되면, adb 명령어를 이용하여 해당 dump 파일을 pull한다. 단, 이때 루트 권한으로 덤프를 저장했기 때문에 dump.pcap의 소유주가 root로 되어 있으므로, 이를 다시 shell 권한으로 변경해 주어야 한다. 이를 변경하지 않을 경우, adb pull 명령어를 사용할 때 다음과 같이 소유주 문제로 덤프 파일을 받을 수 없게 된다.

 


 

다음과 같이 덤프 파일 소유주를 변경한다.

$ chown shell:shell dump_file_name

 


 

adb 명령어를 이용하여 덤프 파일을 pull한다.

$ adb pull /data/local/tmp/dump_file_name

 


 

Wireshark 도구를 이용하여 덤프 파일 분석

 

 

Windows 환경에서 OS가 문제가 발생했을 때의 대비를 위해 이미지 백업을 해두었다가 복원을 하는 Norton Ghost 도구가 있었다.

안드로이드도 이와 같이 커스텀 Recovery를 이용하여 손쉽게 백업 및 복원이 가능하다.


이번 포스팅은 TWRP Recovery를 이용한 안드로이드 백업 및 복원에 대한 설명을 한다.


TWRP Recovery를 적용하기 전, 해당 기기는 USB 디버깅 모드가 설정되어 있어야 하며, 설정 방법은 이전 포스팅에서 설명을 하였다.

USB 디버깅 모드 : 2017/05/02 - [Android] - 안드로이드 USB 디버깅 모드 설정


TWRP Recovery는 아래 사이트에서 다운로드 받을 수 있다.

https://twrp.me/Devices/

해당 하는 기기의 TWRP Recovery를 다운받으면, adb명령어를 이용하여 bootloader로 리부팅한다.

$ adb reboot bootloader



 

fastboot 명령어를 이용하여 TWRP Recovery 이미지를 플래싱한다.

$ fastboot flash recovery Recovery_Image_File

 

 


Recovery Mode를 선택하여 TWRP Recovery로 진입한다.

 

 

 

1. 이미지 백업

Backup 버튼을 선택하고, 백업할 파티션 요소를 선택한 후 Swipe로 백업을 진행한다.

 

 

 

 

 

 

2. 이미지 복원

Restore 버튼을 선택하고, 복원할 패키지를 선택한 후 복원을 진행한다.

 

 

 

 


 

복원 완료 후, 리부팅을 진행하면 다음과 같이 이전 백업해놓은 이미지로 복원된 것을 확인할 수 있다.

 

 

 

+ Recent posts