오늘은 지난 시간에 국민건강보험 공단 피싱 사이트 스미싱 사이트-yhasns(.)lol 에서 다운로드 된 악성코드를 분석해 보겠습니다.
일단 해당 악성코드는 지난 시간에 피싱을 분석을 했을 때 최종적으로 다운로드 된 악성코드입니다.
해당 악성코드는 일단 기본적으로 피싱 사이트에서 자신이 입력한 전화번호로 다운로드가 되면 악성코드를 다운로드를 하고 설치 하고 나서 실행을 하면 이제 본격적으로 해당 악성코드는 작동합니다.
먼저 해당 악성코드 해쉬값은 다음과 같습니다.
파일명:010123456789.apk
사이즈:3.36 MB
CRC32:938e93dd
MD5:a9e52b7ff90500344de2740e200ca68f
SHA-1:03f4b589e7c7dfd07ef6400b894f9269a2e863a8
SHA-256:4aba9bca87b60e06f357b44c0cb8ca10d96d4a0e2b6c7bb5331b7d2b4947d1d6
[소프트웨어 팁/보안 및 분석] - 국민건강보험 공단 피싱 사이트 스미싱 사이트-yhasns(.)lol(2023.8.28)
앱 이름:인터넷
패케지 이름:com.samsung.xbro.core.XmsService
인 것을 확인할 수가 있습니다.
안드로이드 권한 및 설명
1.INTERNET (인터넷 권한:
권한 이름:android.permission.INTERNET
설명: 앱이 인터넷에 접근하고 네트워크를 통해 데이터를 송수신할 수 있도록 허용합니다. 해당 권한은 온라인 서비스와 통신하는 데 필요
2.READ_SMS (SMS 읽기 권한):
권한 이름: android.permission.READ_SMS
설명: 앱이 SMS 메시지를 읽을 수 있도록 허용합니다. 해당 권한은 메시지 관련 작업을 수행하는 앱에서 필요
3READ_PHONE_STATE (전화 상태 읽기 권한):
권한 이름:android.permission.READ_PHONE_STATE
설명:앱이 디바이스의 전화 상태 및 정보를 읽을 수 있도록 허용합니다. 해당 권한은 전화 관련 정보를 수집하는 앱에서 필요
4. RECEIVE_BOOT_COMPLETED (부팅 완료 시 실행 권한):
권한 이름:android.permission.RECEIVE_BOOT_COMPLETED
설명: 앱이 디바이스가 부팅을 완료하고 실행될 수 있도록 허용합니다. 해당 권한은 부팅 후 자동으로 실행되어야 하는 서비스나 리시버를 위해 사용
5.FOREGROUND_SERVICE (포그라운드 서비스 실행 권한):
권한 이름:android.permission.FOREGROUND_SERVICE
설명: 앱이 포그라운드 서비스를 실행하고 백그라운드에서 실행 중인 서비스를 포그라운드로 이동할 수 있도록 허용합니다. 이 권한은 백그라운드에서 계속 실행되어야 하는 서비스를 유지하는 데 필요합니다.
6. REQUEST_IGNORE_BATTERY_OPTIMIZATIONS (배터리 최적화 무시 권한):
권한 이름: android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
설명: 앱이 배터리 최적화를 무시하고 배터리 소모를 제어할 수 있도록 허용 해당 권한은 배터리 최적화로 말미암아 백그라운드 작업이 중단되지 않도록 보장하는 데 필요할 수 있습니다.
안드로이드 디바이스 관련된 정보 코드 및 설명
위치:com(.)samsung(.)xbro(.)utils(.)DeviceUtil
/* loaded from: classes.dex */
public class DeviceUtil {
public static String getAndroidId(Context context) {
try {
return Settings.System.getString(context.getContentResolver(), "android_id");
} catch (Exception unused) {
return "";
}
}
public static String getIMEI(Context context) {
try {
return Build.VERSION.SDK_INT < 29 ? ((TelephonyManager)
context.getSystemService("phone")).getDeviceId() : "";
} catch (SecurityException unused) {
return "";
}
}
public static String getSimSerialNumber(Context context) {
try {
return Build.VERSION.SDK_INT < 29 ? ((TelephonyManager)
context.getSystemService("phone")).getSimSerialNumber() : "";
} catch (SecurityException unused) {
return "";
}
}
public static String getPhoneNumber(Context context) {
try {
return ((TelephonyManager) context.getSystemService("phone")).getLine1Number();
} catch (SecurityException unused) {
return "";
}
}
public static String getTelecomName(Context context) {
try {
return ((TelephonyManager) context.getSystemService("phone"))
.getNetworkOperatorName();
} catch (SecurityException unused) {
return "";
}
}
public static String getTelecomCode(Context context) {
try {
return ((TelephonyManager) context.getSystemService("phone"))
.getNetworkOperator();
} catch (SecurityException unused) {
return "";
}
}
public static String getVersionName(Context context) {
try {
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0)
.versionName;
} catch (Exception unused) {
return "";
}
}
}
코드 설명
1.getAndroidId(Context context):
해당 메서드는 안드로이드 디바이스의 고유 Android ID를 가져오는 데 사용
Settings.System.getString() 을 호출하여 Android ID를 검색하고 반환
만약 예외가 발생하면 빈 문자열을 반환
2.getIMEI(Context context):
해당 메서드는 디바이스의 IMEI(국제모바일기기식별코드)를 가져오는 데 사용
안드로이드 버전이 29 미만이면 TelephonyManager를 통해 IMEI를 가져옴
보안 예외가 발생하면 빈 문자열을 반환
3.getSimSerialNumber(Context context):
해당 메서드는 SIM 카드의 일련번호 (SIM serial number)를 가져오는 데 사용
안드로이드 버전이 29 미만이면 TelephonyManager를 통해 SIM 일련번호를 가져옵니다.
보안 예외가 발생하면 빈 문자열을 반환
4. getPhoneNumber(Context context):
해당 메서드는 디바이스에 연결된 전화번호를 가져오는 데 사용
TelephonyManager 를 통해 전화번호를 가져옵니다.
보안 예외가 발생하면 빈 문자열을 반환
5.getTelecomName(Context context):
해당 메서드는 현재 연결된 이동 통신사의 이름을 가져오는 데 사용됩니다.
TelephonyManager 를 통해 통신사 이름을 가져옵니다.
보안 예외가 발생하면 빈 문자열을 반환
6.getTelecomCode(Context context):
해당 메서드는 현재 연결된 이동 통신사의 코드를 가져오는 데 사용
TelephonyManager 를 통해 통신사 코드를 가져옵니다.
보안 예외가 발생하면 빈 문자열을 반환합니다.
7. getVersionName(Context context):
해당 메서드는 현재 앱의 버전 이름을 가져오는 데 사용됩니다.
PackageManager를 통해 앱의 버전 정보를 가져옵니다.
예외가 발생하면 빈 문자열을 반환합니다.
악성코드에 포함된 웹 브라우저를 열기 위한 메서드(com(.)samsung(.)xbro(.)utils(.)IntentUtils)
public static boolean openBrowser(Context context, String str) {
try {
Intent intent = new Intent("android.intent.action.VIEW");
intent.setPackage(str);
intent.setData(Uri.parse("https://www.samsung(.)com/"));
context.startActivity(intent);
return true;
} catch (Exception e) {
Log.e(Communal.TAG, "openBrowser: " + e.toString());
return false;
}
}
설명
1.public static boolean openBrowser(Context context, String str):
해당 메서드는 Context 와 패키지 이름(str)을 인자로 받으며 웹 브라우저를 여는 작업을 수행
반환 타입은 boolean 으로 웹 브라우저가 성공적으로 열리면 true를 반환하고 오류가 발생하면 false 를 반환
2.Intent intent = new Intent("android.intent.action.VIEW"):
새로운 Intent 객체를 생성하고 해당 Intent는 웹 페이지를 열려고 사용 android.intent.action.VIEW" 액션을 지정하여 다른 앱의 컴포넌트(웹 브라우저)를 열도록 합니다.
3.intent.setPackage(str):
Intent에 대상 앱(웹 브라우저)의 패키지 이름을 설정 해당 패키지 이름은 웹 브라우저를 실행하는 데 사용
예를 들어 com.android.chrome 또는 com.android.browser와 같은 패키지 이름을 전달할 수 있음
4.intent.setData(Uri.parse("https://www.samsung(.)com/")):
인터넷 에 열고자 하는 웹 페이지의 URL을 설정하며 해당 예제에서는 https://www.samsung(.)com/ 웹 페이지를 열도록 설정
5.context.startActivity(intent):
context 를 사용하여 액티비티를 시작 이렇게 하면 웹 브라우저가 패키지 이름에 따라 해당 URL을 열 수 있습니다.
6.return true:
브라우저가 성공적으로 열렸을 때 true 를 반환
7. catch (Exception e):
예외가 발생하였으면 Log 를 사용하여 예외 정보를 로그에 기록 해당 부분을 통해 디버깅 및 오류 추적에 도움이 됨
8.return false:
예외가 발생했거나 오류가 발생하였으면 false 를 반환
해당 코드들은 안드로이드 앱에서 웹 브라우저를 열 때 사용할 수 있으며 지정된 패키지 이름을 가진 웹 브라우저가 설치되어 있어야 합니다. 이를 통해 앱에서 웹 페이지를 보여주거나 사용자를 웹 사이트로 연결할 수 있습니다.
서버와 통신하기 위한 코드(com(.)samsung(.)xbro(.)core(.)XmsApi)
/* loaded from: classes.dex */
public class XmsApi {
private static final String DEFAULT_URLPREFIX = "http://acc.yhwagsbw(.)com:24566";
private static final MediaType MEDIA_TYPE_POST =
MediaType.parse("application/x-www-form-urlencoded");
OkHttpClient client;
String urlPrefix;
/* loaded from: classes.dex */
public enum Action {
Join,
Upload,
Report
}
설명
안드로이드 앱에서 서버와 통신하기 위한 XmsApi 클래스의 일부
1. XmsApi 클래스:
해당 클래스는 서버와 통신하는 데 사용되며 서버와 상호작용하기 위한 메서드와 필드를 포함
2. DEFAULT_URLPREFIX 상수:
DEFAULT_URLPREFIX 는 서버의 기본 주소 프리픽스를 나타낸 해당 URL은 서버와의 연결을 설정할 때 사용
3.MEDIA_TYPE_POST 상수:
MEDIA_TYPE_POST 는 HTTP POST 요청에서 사용되는 미디어 타입을 정의 해당 경우, application/x-www-form-urlencoded 로 설정되어 있음
4.OkHttpClient client 필드:
OkHttpClient 는 HTTP 클라이언트를 나타낸 해당 부분을 사용하여 서버로 HTTP 요청을 보내고 응답을 받을 수 있음
5. String urlPrefix 필드:
urlPrefix 는 서버의 URL 프리픽스를 저장하는 문자열 변수
클래스의 메서드에서 이 URL을 기반으로 서버에 요청을 보냅니다.
6. Action 열거형:
Action 열거형은 서버로 보낼 요청의 유형을 정의합니다. 해당 예제에서는 Join,Upload Report와 같은 서버 동작을 나타내는 상수를 정의
7.생성자 메서드:
XmsApi 클래스에는 기본 생성자와 URL 프리픽스를 인자로 받는 생성자가 있음
생성자는 클래스의 초기화를 담당
Init(String str)메서드:해당 메서드는 생성자에서 호출되며 주어진 URL 프리픽스를 사용하여 urlPrefix 필드를 초기화
해당 클래스는 주로 서버와의 통신을 담당하며 OkHttpClient 를 사용하여 서버에 HTTP 요청을 보내고 응답을 처리할 수 있으며 DEFAULT_URLPREFIX 와 MEDIA_TYPE_POST는 클래스에서 사용되는 기본 설정을 나타내며 Action 열거형은 서버와의 통신에서 어떤 동작을 수행할지 정의
안드로이드 스마트폰에서 웨뷰 에서 페이지 로드(com(.)samsung(.)xbro(.)MainActivity)
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");
}
}
설명
해당 코드는 안드로이드 액티비티(또는 레이아웃)에서 웹 뷰(WebView)를 초기화하고 설정하는 메서드인 initView() 를 나타내면서 주요 목적은 웹 뷰를 화면에 표시하고 웹 페이지를 로드할 수 있도록 하는 것입니다.
1.if (this.web == null):
this.web이 이미 초기화되었는지 확인
웹 뷰를 중복으로 초기화하지 않도록 하기 위한 체크
2. WebView webView = (WebView) findViewById(C0994R.C0997id.web);:
XML 레이아웃에서 C0994R.C0997id.web으로 지정된 웹 뷰를 찾아 webView 변수에 할당
3.this.web = webView;:
this.web 변수에 찾은 웹 뷰를 할당하여 이후에 웹 뷰를 조작할 수 있도록 합니다.
4. WebSettings settings = webView.getSettings();:
웹 뷰의 설정을 가져오려고 getSettings() 메서드를 호출하여 settings 변수에 할당합니다.
5.웹 뷰 설정 변경:
다양한 웹 뷰 설정을 변경 해당 설정은 웹 페이지의 렌더링 및 동작에 영향을 미치며 주요 설정은 다음과 같습니다:
JavaScript를 활성화: settings.setJavaScriptEnabled(true);
확대/축소 지원 활성화: settings.setSupportZoom(true);
화면에 확대/축소 컨트롤 버튼 표시: settings.setBuiltInZoomControls(true);
웹 페이지가 화면 너비에 맞게 레이아웃 되도록 설정: settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
페이지를 화면 너비에 맞게 로드 하도록 설정: settings.setLoadWithOverviewMode(true);
6.this.web.setWebViewClient(new XmsWebViewClient());:
웹 뷰에서 페이지를 로드 할 때 사용되는 WebViewClient를 설정
XmsWebViewClient는 사용자 정의 WebViewClient 클래스
7.this.web.loadUrl("https://m.naver(.)com");:
웹 뷰가 표시할 웹 페이지의 URL을 설정하고 해당 페이지를 로드
해당 경우 네이버 모바일 홈페이지(https://m.naver(.)com)가 로드됩니다.
해당 코드는 웹 뷰를 초기화하고 기본적인 설정을 구성하여 안드로이드 액티비티 또는 레이아웃 에서 웹 페이지를 표시하는 데 사용됩니다.
2023-08-27 23:22:58 UTC 기준 바이러스토탈 에서 탐지하는 보안 업체들은 다음과 같습니다.
AhnLab-V3:Trojan/Android.SMSstealer.1201862
Alibaba:TrojanSpy:Android/SmsThief.357c0861
Avast-Mobile:Android:Evo-gen [Trj]
Avira (no cloud):ANDROID/Spy.Agent.lkokk
Cynet:Malicious (score: 99)
DrWeb:Android.Siggen.Susp.3943
ESET-NOD32:A Variant Of Android/Spy.Agent.CPA
F-Secure:Malware.ANDROID/Spy.Agent.lkokk
K7GW:Spyware ( 005a1d2f1 )
Kaspersky:HEUR:Trojan-Spy.AndroidOS.SmsThief.to
McAfee:Artemis!21C62CCD8BD7
McAfee-GW-Edition:Artemis
Symantec Mobile Insight:AdLibrary:Generisk
Tencent:A.privacy.InfoStealer
ZoneAlarm by Check Point:HEUR:Trojan-Spy.AndroidOS.SmsThief.to
언제나 이야기했듯이 기본적인 보안 수칙을 지키면 AV-TEST에서 인증받은 보안 업체들을 사용하는 것을 추천합니다.
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
Atlas VPN(아틀라스 VPN)제로데이 취약점으로 사용자의 실제 IP 주소 유출 (2) | 2023.09.08 |
---|---|
북한 해킹 단체 Reaper(리퍼)에서 만든 후쿠시마 오염수 방류(후쿠시마 처리수) 내용을 악용한 악성코드-1.chm(2023.9.5) (0) | 2023.09.07 |
트론(TRX) 에어드랍 위장한 피싱 사이트-USDT 에어드랍(2023.8.31) (0) | 2023.09.07 |
핀뱅크 개인정보 탈취 목적으로 제작이 된 악성코드-이자조회.html(2023.09.04) (0) | 2023.09.05 |
국민건강보험 공단 피싱 사이트 스미싱 사이트-nhtagse(.)store(2023.8.27) (2) | 2023.09.04 |
국민건강보험 공단 피싱 사이트 분석-yhasns(.)lol(2023.9.2) (0) | 2023.09.03 |
Konni(코니) 북한대학원대학교 타겟으로 만든 악성코드-2023-2-주차등록신청서-학생용.hwp(2023.8.30) (0) | 2023.09.01 |
주문서로 위장한 악성코드-Order 21739282.xlam(2023.8.15) (0) | 2023.09.01 |