Analysis

[Android Malware] miracle.apk 분석

DarkSoul.Story 2013. 10. 17. 10:30
반응형



아래 내용은 연구 목적으로 작성되었으며, 해당 소스코드를 악의적인 목적으로 사용하는것은 절대 엄금합니다. 악의적으로 사용하여 발생할수 있는 모든 문제는 사용한 사용자에게 있습니다. 



1. 개요


miracle.apk는 아래와 같은 광고 메시지를 통해 전파되고 있다.


Filename:

miracle.apk

MD5:121372b7c1b3b7395fc243074eb16ea3 
SHA-1:8d951a858214eeee7a31a55335bc76bacc8617d1 
File Size:40733 Bytes



2. 분석 내용


문자 메시지에 포함되어 있는 단축 URL을 클릭하면, miracle.apk 파일을 다운로드 받아 설치하게된다. miracle.apk 파일이 설치가 되면 miracle이라는 아이콘이 생성된다. 생성된 아이콘을 클릭하게 되면, 아래와 같은 디바이스 관리자에 자신을 등록 시킨다.



디바이스 관리자에 등록이 되면, 앱 서랍에 존재하였던 miracle 아이콘은 삭제되며, 해당 앱은 백그라운드에서 계속 실행 되고 있다.



miracle.apk는 아래와 같이 7가지 권한 (User Permission)을 요구한다. 


유저 권한 (User Permission)

android.permission.INTERNET

android.permission.READ_PHONE_STATE

android.permission.READ_SMS

android.permission.SEND_SMS

android.permission.RECEIVE_BOOT_COMPLETED

android.permission.RECEIVE_SMS

android.permission.WRITE_SETTINGS


7가지 권한 (User Permission) 중 빨간색으로 표시된 권한이 악의적인 목적으로 사용될 수 있는 권한으로 내용은 아래와 같다.

 

권한 (User Permission)

        

android.permission.INTERNET

응용 프로그램()이 네트워크 소켓을 만들 수 있도록 한다.

android.permission.READ_PHONE_STATE

응용 프로그램이 휴대 전화의 상태를 읽을 수 있도록 허용 한다. 이 경우 악성 앱이 전화 번호 및 IMEI, 통화 상태 등의 정보를 수집할 수 있다.

android.permission.SEND_SMS

응용 프로그램이 SMS 메시지를 보낼 수 있도록 한다. 이 경우 악성 앱이 사용자의 확인 없이 메시지를 전송하여 요금을 부과 할 수 있다.

android.permission.READ_SMS

응용 프로그램이 휴대 전화 또는 SIM 카드에 저장되어 있는 SMS 메시지를 읽을 수 있도록 허용한다. 이 경우 악성 앱이 기밀 메시지를 읽을 수 있다.

android.permission.RECEIVE_SMS

응용프로그램이 SMS 메시지를 받고 처리 할 수 있도록 허용 한다. 이 경우 악성 앱이 메시지를 모니터링 하거나 사용자가 SMS 메시지를 읽기 전에 삭제할 수 있다.


아래는 MainActivity 클래스 소스코드의 일부로 APP이 실행되면, getPackageManager().setComponentEnabledSetting을 이용하여 앱 서랍에 존재하는 아이콘을 삭제한다. 다음으로 SharedPreferences를 이용하여, 아래와 같이 UI 상태를 저장한다. 안드로이드는 메모리가 부족할 경우 메모리에 올라와있는 앱들 중 아무거나 강제 종료시킬 가능성이 존재한다. 액티비티 및 어플리케이션이 메모리 부족 등으로 인해 강제 종료된 후, 사용자가 다시 해당 앱을 실행시켰을 때 종료되기 전 그대로 다시 복구시켜주는 역할을 바로 SharedPreferences를 이용해서 저장해 둔다.


 



아래는 RegDPMActivity 클래스의 소스코드 일부이다. RegDPMActivity 클래스에서는 DevicePolicyManager의 isAdminActive를 이용하여, 디바이스 관리자 권한이 활성화 되어 있는지 확인한다. 만약 디바이스 관리자 권한이 활성화 되어 있지 않으면 디바이스 권한 활성화를 요구한다.



 


아래는 Util 클래스의 소스코드 일부 이다. Util 클래스에서는 TelephonyManager를 이용하여 안드로이드 폰의 정보를 가져온다. 사용된 TelephonyManager의 매소드 getLine1Number(), getSimSerialNumber(), getDeviceId(), getNetworkOperatorName()이며, 각 매소드의 역할은 전화번호, 시리얼번호, 디바이스 ID, 현재 등록된 망 사업자 명을 가져온다.



 



 


TelephonyManager를 이용하여 가져온 정보는 아래와 같이 서버로 전송한다. 



 




아래는 SMSBroadcastReceiver 클래스의 소스코드 일부이다. SMSBroadcastReceiver 클래스는 SMS 메시지를 모니터링 하고 있다가 SMS 메시지가 도착시 Util 클래스에서 확인한 전화번호를 이용하여, SMS 메세지를 보낼 수 있는지 서버로 전송한다. SMS 메시지를 보낼 수 있는 상태 이면, SmsMessage의  getOriginatingAddress()를 이용하여 SMS 문자 메시지를 보낸 측의 전화번호를 수집한다. 다음으로 SmsMessage의 getMessageBody()를 이용하여, 수신된 SMS 메시지의 본문 내용을 수집한다. 수집된 보낸 측 전화번호와 본문 내용은 miracle.apk에 감염된 디바이스 전화번호와 함께 다시한번 서버로 전송된다.



 





소스코드내에서 확인된 IP주소는 중국이며, 현재는 차단된 상태이다.








반응형