아래 내용은 연구 목적으로 작성되었으며, 해당 소스코드를 악의적인 목적으로 사용하는것은 절대 엄금합니다. 악의적으로 사용하여 발생할수 있는 모든 문제는 사용한 사용자에게 있습니다. |
1. 개요
해당 악성 앱은 단축 URL을 포함한 택배가 도착 SMS 메시지로 전파되고 있다.
Filename: | mervice.apk |
MD5: | 8e7bea88166735aec7b6be15551d4df1 |
SHA-1: | c3c782d7cacb3f62699a6400dcf29fe0a2df3d34 |
File Size: | 204078 Bytes |
API Level: | 8 |
2. 분석 내용
SMS 메시지에 포함된 단축 URL을 클릭 시 mervice.apk 파일이 다운로드 되며, 자동으로 설치가 된다. mervice.apk 파일은 super status bar 앱으로 위장하고 있다.
mervice.apk는 아래와 같이 11가지 권한 (User Permission)을 요구한다.
유저권한 (User Permission) |
android.permission.WRITE_CONTACTS android.permission.SEND_SMS android.permission.RECEIVE_BOOT_COMPLETED android.permission.READ_PHONE_STATE android.permission.INTERNET android.permission.WRITE_SMS android.permission.ACCESS_NETWORK_STATE android.permission.RECEIVE_SMS android.permission.READ_CONTACTS android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_SMS |
11 가지 권한 (User Permission) 중 빨간색으로 표시된 권한이 악의적인 목적으로 사용될 수 있는 권한으로 내용은 아래와 같다.
유저 권한 (User Permission) |
내 용 |
android.permission.WRITE_CONTACTS |
응용 프로그램이 안드로이드 디바이스에 연락처 데이터를 쓸 수 있도록 허용한다. (단, 읽기는 안됨) |
android.permission.SEND_SMS |
응용 프로그램이 SMS 메시지를 보낼 수 있도록 허용 한다. |
android.permission.READ_PHONE_STATE |
응용 프로그램이 휴대 전화의 상태를 읽을 수 있도록 허용 한다. |
android.permission.INTERNET |
응용 프로그램이 네트워크 소켓을 만들 수 있도록 허용 한다. |
android.permission.WRITE_SMS |
응용 프로그램이 SMS 메시지를 쓸 수 있도록 허용한다. |
android.permission.RECEIVE_SMS |
응용프로그램이 SMS 메시지를 받고 처리 할 수 있도록 허용 한다. |
android.permission.READ_CONTACTS |
응용 프로그램이 사용자의 연락처 데이터를 읽을 수 있도록 허용 한다. |
android.permission.WRITE_EXTERNAL_STORAGE |
응용 프로그램이 외부 스토리지에 쓸 수 있도록 허용 한다.
(참고 : minSdkVersion과 targetSdkVersion 값이 모두 3 이하로 설정되어 있으면 시스템이 내재적으로 응용 프로그램에게 이 권한을 부여 한다.) |
android.permission.READ_SMS |
응용 프로그램이 휴대 전화 또는 SIM 카드에 저장되어 있는 SMS 메시지를 읽을 수 있도록 허용 한다. |
그럼 소스코드를 살펴 보자. 아래는 설치된 악성 앱 super status bar 아이콘을 클릭하면, 아래와 같이 디바이스 관리자에 자신을 등록 시킨다.
public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); Intent localIntent1 = new Intent("com.google.syncservice.GoogleSyncService"); localIntent1.setClass(getApplicationContext(), GoogleSyncService.class); startService(localIntent1); finish(); try
catch (Exception localException) { break label72; } } } |
자신을 디바이스 관리자에 등록 시킨 후에는 super status bar 아이콘을 클릭하여도 별다른 반응을 보이지 않는다. 아래는 TelephonyManager를 이용하여, 각종 디바이스 정보를 가져오는 소스코드이다. 지금 까지 분석한 Android Malware중 가장 많은 디바이스 정보를 가져오고 있다.
public static String d(Context paramContext) { return
} private static String e(Context paramContext) { return
} private static JSONObject f(Context paramContext) {
return localJSONObject; } |
위 소스코드에서 가져오는 디바이스 정보의 내용은 아래와 같다.
Public Methods |
내 용 |
getDeviceId() |
디바이스 ID를 가져온다. |
getDeviceSoftwareVersion() |
디바이스의 운영체제 버전을 가져온다. |
getLine1Number() |
디바이스의 전화번호를 가져온다. |
getNetworkCountryIso() |
디바이스의 ISO 국가 코드(모바일 국가 코드:MCC)를 가져온다. |
getNetworkOperator() |
망 사업자 코드 (MCC:Mobile Country Code + MNC:Mobile Network Code)를 가져온다. |
getNetworkOperatorName() |
망 사업자 명을 가져온다. |
getNetworkType() |
네트워크 타입을 가져온다. (LTE/3G 등) |
getPhoneType() |
전화기 타입을 가져온다. (CDMA/GSM/SIP 등) |
getSimCountryIso() |
SIM카드 공급자의 ISO 국가 코드를 가져온다. |
getSimOperator() |
SIM카드 공급자의 망 사업자 코드 (MCC+MNC)를 가져온다. |
getSimOperatorName() |
서비스 공급자 이름(SPN)을 가져온다. |
getSimSerialNumber() |
SIM 카드의 일련 번호를 가져온다. |
getSimState() |
SIM 카드의 상태를 가져온다. |
getSubscriberId() |
디바이스의 가입자 ID를 가져온다. |
getVoiceMailNumber() |
음성 메일 번호를 가져온다. 사용하지 않는 경우 null값을 반환한다. |
소스코드에서 아래와 같이 C&C 서버의 URL 정보를 확인 하였으며, 해당 URL은 Base64로 인코딩 되어 있다.
static String a = "aHR0cDovL2FiYy5sajM0NS5jb206MTAyNDA="; static String b = "aHR0cDovL2FzZC5sY2R1eGluLmNvbToxMDI0MA=="; |
위 URL 정보를 디코딩한 내용은 아래와 같으며, 현재 해당 URL로의 접속은 이루어지지 않고 있다.
http://abc.lj345.com:10240 http://asd.lcduxin.com:10240 |
해당 C&C 서버는 아래와 같이 홍콩에 위치하고 있는것으로 확인 되었다.
[Android Malware] phone.apk 및 kb.apk 분석 (0) | 2014.01.15 |
---|---|
[Android Malware] App.apk 분석 (0) | 2013.11.15 |
[Android Malware] miracle.apk 분석 (0) | 2013.10.17 |
기본적인 Telnet Packet 분석 (0) | 2013.07.12 |
[Android Malware] 스타벅스 쿠폰 위장 악성 앱 (sb.apk) 분석 (0) | 2013.07.01 |