play/분석

[악성 앱] 정부24 사칭 스미싱 악성앱 분석 (25.02.25)

카고형 2025. 3. 3. 06:08
728x90

이번에 직접 핸드폰으로 문자가 와서 확인해 봤는데 이전에도 비슷한 유형에 피싱 사이트를 통해 악성앱을 유포시켰습니다. 22년도에는 교통위반등 운전자 관련 위주로 스미싱이 배포되어 왔고 23-24년도에는 쓰레기 무단투기등 생활형 범법행위 관련으로 위주로 유포 되었습니다.  다시 돌아와서 아래 키워드를 보면 이제 다시 교통 관련 스미싱이 보이기 시작한거 같습니다.

경찰청 교통민원 스미싱 증가! 피싱 사이트 유포 (25.02.25)


스미싱 문구


[국외발신]
{-경찰청교통민원-}
교통법위반(사전안내서)발부됨 확인바람:  http://URL

스미싱 문자


정부24 관련 현재 배포되고 있는 스미싱 문구는  "교통법규위반(사전안내서)발부됨" 내용이 포함되어 스미싱 문자를 배포하고 있습니다. 

정부 24(구 민원 24) 사칭을 하여 최근에는 쓰레기, 무단투기등 생활 범법행위 위주의 문구를 사용한 것으로 알고 있었는데

최근에 다시 운전자관련 하여 범칙금, 범법 행위 관련으로 배포되는 것으로 보아 "과태료", "범칙금", "운전면허", "고지서", "통지서", "벌점",  "신호 위반", "과속", "불법 주정차", "불법 유턴", "보행자 보호 의무 위반"등 이 포함된 문구가 다시 배포될 것으로 생각됩니다.


정상 배포 방식

정부에서 앱 다운로드 하는 경우는 특이사항이 아닌 이상 요구 하지 않을 것으로 생각됩니다.

정상 앱 설치

※ 정상 배포방식은 원스토어, 구글플래이 해당 사이트(어플)를 통해서만 배포합니다.


피싱 사이트 접속 화면

이전의 피싱 사이트는 번호 입력 - 본인인증 - 앱 다운 순으로 진행됐었는데 요번에는 번호 입력, 본인인증이 없이 피싱 페이지에서 버튼을 누르면 다운로드되는 형태로 바뀌었습니다.

피싱 사이트 페이지


피싱 사이트 html 분석

피싱 사이트 스크립트

해당 피싱 사이트에서 버튼을 클릭하게 되면 userAgent 값으로 IOS 또는 mac 환경에서 접속 시 해당 파일을 받을 수 없고 다른 환경으로 접속 시 특정 url로 접속하게 되어 apk 파일을 다운로드하게 됩니다.


해당 피싱 사이트는 사칭 사이트인 정부24 홈페이지와는 이전처럼 비슷하지는 않아 보입니다.

해당 스미싱 문자에 포함된 URL 주소로 접속하면 정부 24(구 민원 24) 사칭 피싱 사이트로 접속하게 되며 해당 페이지에서 "정부 24 어플 다운로드" 버튼을 클릭하면 APK 파일을 설치하게 되며, 해당 앱은 악성 앱입니다.


리소스 분석


APK 파일 정보

App Name: GO24
App Version : 1.0.1
Package Name : com.mpgd.pompbsys
MD5 : 6a6051d8963ba2b27c2766bf34978774
SHA-1 : 7b3fd1eb5346922473c860f74885c040eec332d1
SHA-256 : 01e6619f0a6472f9129b203726187b3d769cbc9107748988ec1a70bdd65f1385
Vhash : 7547c30674db4037af1bccb215bc5159


VirusTotal 탐지 결과

ESET-NOD32 : A Variant Of Android/TrojanDownloader.Agent.ATQ
Kaspersky : HEUR:Trojan-Downloader.AndroidOS.Banjeon.e

virustotal 탐지 내역


Android Manifest

Activities 1  , Services 0, Receivers 1, Providers 2를 확인할 수 있습니다.

더보기

aapt dump xmlstrings [ ].apk AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="abc_action_bar_up_description">Navigate up</string>
    <string name="abc_action_mode_done">Done</string>
    <string name="abc_capital_off">OFF</string>
    <string name="abc_capital_on">ON</string>
    <string name="abc_menu_alt_shortcut_label">Alt+</string>
    <string name="abc_menu_ctrl_shortcut_label">Ctrl+</string>
    <string name="abc_menu_delete_shortcut_label">delete</string>
    <string name="abc_menu_enter_shortcut_label">enter</string>
    <string name="abc_menu_function_shortcut_label">Function+</string>
    <string name="abc_menu_meta_shortcut_label">Meta+</string>
    <string name="abc_menu_shift_shortcut_label">Shift+</string>
    <string name="abc_menu_space_shortcut_label">space</string>
    <string name="abc_menu_sym_shortcut_label">Sym+</string>
    <string name="abc_prepend_shortcut_label">Menu+</string>
    <string name="abc_search_hint">Search…</string>
    <string name="abc_searchview_description_clear">Clear query</string>
    <string name="abc_searchview_description_search">Search</string>
    <string name="abc_searchview_description_submit">Submit query</string>
    <string name="abc_searchview_description_voice">Voice search</string>
    <string name="abc_toolbar_collapse_description">Collapse</string>
    <string name="androidx_startup">androidx.startup</string>
    <string name="app_name">GO24</string>
    <string name="baseUrl">UEREZWxNUnYtMjA5LjE0MS41My44MQ==</string>
    <string name="bottom_sheet_behavior">com.google.android.material.bottomsheet.BottomSheetBehavior</string>
    <string name="bottomsheet_action_collapse">Collapse the bottom sheet</string>
    <string name="bottomsheet_action_expand">Expand the bottom sheet</string>
    <string name="bottomsheet_action_expand_halfway">Expand halfway</string>
    <string name="bottomsheet_drag_handle_clicked">Drag handle double-tapped</string>
    <string name="bottomsheet_drag_handle_content_description">Drag handle</string>
    <string name="character_counter_content_description">Characters entered %1$d of %2$d</string>
    <string name="character_counter_overflowed_content_description">Character limit exceeded %1$d of %2$d</string>
    <string name="character_counter_pattern">%1$d/%2$d</string>
    <string name="clear_text_end_icon_content_description">Clear text</string>
    <string name="decodeKey">PDDelMRv-</string>
    <string name="error_a11y_label">Error: invalid</string>
    <string name="error_icon_content_description">Error</string>
    <string name="exposed_dropdown_menu_content_description">Show dropdown menu</string>
    <string name="item_view_role_description">Tab</string>
    <string name="m3_ref_typeface_brand_regular">sans-serif</string>
    <string name="m3_ref_typeface_plain_medium">sans-serif-medium</string>
    <string name="m3_ref_typeface_plain_regular">sans-serif</string>
    <string name="m3_sys_motion_easing_emphasized">path(M 0,0 C 0.05, 0, 0.133333, 0.06, 0.166666, 0.4 C 0.208333, 0.82, 0.25, 1, 1, 1)</string>
    <string name="m3_sys_motion_easing_emphasized_path_data">M 0,0 C 0.05, 0, 0.133333, 0.06, 0.166666, 0.4 C 0.208333, 0.82, 0.25, 1, 1, 1</string>
    <string name="m3_sys_motion_easing_legacy_accelerate">cubic-bezier(0.4, 0, 1, 1)</string>
    <string name="m3_sys_motion_easing_legacy_decelerate">cubic-bezier(0, 0, 0.2, 1)</string>
    <string name="m3_sys_motion_easing_linear">cubic-bezier(0, 0, 1, 1)</string>
    <string name="m3_sys_motion_easing_standard">cubic-bezier(0.2, 0, 0, 1)</string>
    <string name="material_clock_display_divider">:</string>
    <string name="material_clock_toggle_content_description">Select AM or PM</string>
    <string name="material_motion_easing_accelerated">cubic-bezier(0.4, 0.0, 1.0, 1.0)</string>
    <string name="material_motion_easing_decelerated">cubic-bezier(0.0, 0.0, 0.2, 1.0)</string>
    <string name="material_motion_easing_emphasized">path(M 0,0 C 0.05, 0, 0.133333, 0.06, 0.166666, 0.4 C 0.208333, 0.82, 0.25, 1, 1, 1)</string>
    <string name="material_motion_easing_linear">cubic-bezier(0.0, 0.0, 1.0, 1.0)</string>
    <string name="material_motion_easing_standard">cubic-bezier(0.4, 0.0, 0.2, 1.0)</string>
    <string name="material_timepicker_am">AM</string>
    <string name="material_timepicker_pm">PM</string>
    <string name="mtrl_checkbox_button_icon_path_checked">M14,18.2 11.4,15.6 10,17 14,21 22,13 20.6,11.6z</string>
    <string name="mtrl_checkbox_button_icon_path_group_name">icon</string>
    <string name="mtrl_checkbox_button_icon_path_indeterminate">M13.4,15 11,15 11,17 13.4,17 21,17 21,15z</string>
    <string name="mtrl_checkbox_button_icon_path_name">icon path</string>
    <string name="mtrl_checkbox_button_path_checked">M23,7H9C7.9,7,7,7.9,7,9v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9C25,7.9,24.1,7,23,7z</string>
    <string name="mtrl_checkbox_button_path_group_name">button</string>
    <string name="mtrl_checkbox_button_path_name">button path</string>
    <string name="mtrl_checkbox_button_path_unchecked">M23,7H9C7.9,7,7,7.9,7,9v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9C25,7.9,24.1,7,23,7z M23,23H9V9h14V23z</string>
    <string name="mtrl_checkbox_state_description_checked">Checked</string>
    <string name="mtrl_checkbox_state_description_indeterminate">Partially checked</string>
    <string name="mtrl_checkbox_state_description_unchecked">Not checked</string>
    <string name="mtrl_chip_close_icon_content_description">Remove %1$s</string>
    <string name="mtrl_picker_a11y_next_month">Change to next month</string>
    <string name="mtrl_picker_a11y_prev_month">Change to previous month</string>
    <string name="mtrl_picker_cancel">Cancel</string>
    <string name="mtrl_picker_confirm">OK</string>
    <string name="mtrl_picker_day_of_week_column_header">%1$s</string>
    <string name="mtrl_picker_navigate_to_current_year_description">Navigate to current year %1$d</string>
    <string name="mtrl_picker_navigate_to_year_description">Navigate to year %1$d</string>
    <string name="mtrl_picker_save">Save</string>
    <string name="mtrl_picker_toggle_to_calendar_input_mode">Switch to calendar input mode</string>
    <string name="mtrl_picker_toggle_to_day_selection">Tap to switch to Calendar view</string>
    <string name="mtrl_picker_toggle_to_text_input_mode">Switch to text input mode</string>
    <string name="mtrl_picker_toggle_to_year_selection">Tap to switch to year view</string>
    <string name="mtrl_switch_thumb_group_name">circle_group</string>
    <string name="mtrl_switch_thumb_path_checked">M4,16 A12,12 0 0,1 16,4 H16 A12,12 0 0,1 16,28 H16 A12,12 0 0,1 4,16</string>
    <string name="mtrl_switch_thumb_path_morphing">M0,16 A11,11 0 0,1 11,5 H21 A11,11 0 0,1 21,27 H11 A11,11 0 0,1 0,16</string>
    <string name="mtrl_switch_thumb_path_name">circle</string>
    <string name="mtrl_switch_thumb_path_pressed">M2,16 A14,14 0 0,1 16,2 H16 A14,14 0 0,1 16,30 H16 A14,14 0 0,1 2,16</string>
    <string name="mtrl_switch_thumb_path_unchecked">M8,16 A8,8 0 0,1 16,8 H16 A8,8 0 0,1 16,24 H16 A8,8 0 0,1 8,16</string>
    <string name="mtrl_switch_track_decoration_path">M1,16 A15,15 0 0,1 16,1 H36 A15,15 0 0,1 36,31 H16 A15,15 0 0,1 1,16</string>
    <string name="mtrl_switch_track_path">M0,16 A16,16 0 0,1 16,0 H36 A16,16 0 0,1 36,32 H16 A16,16 0 0,1 0,16</string>
    <string name="password_toggle_content_description">Show password</string>
    <string name="path_password_eye">M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z</string>
    <string name="path_password_eye_mask_strike_through">M2,4.27 L19.73,22 L22.27,19.46 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
    <string name="path_password_eye_mask_visible">M2,4.27 L2,4.27 L4.54,1.73 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z</string>
    <string name="path_password_strike_through">M3.27,4.27 L19.74,20.74</string>
    <string name="side_sheet_accessibility_pane_title">Side Sheet</string>
    <string name="url_down">UEREZWxNUnYtMjA5LjE0MS4zNi4yMA==</string>
</resources>

Android Permission

권한 (Permission) 설명 (Description)
android.permission.INTERNET 앱이 인터넷을 사용할 수 있도록 허용
android.permission.REQUEST_INSTALL_PACKAGES
앱이 외부 패키지를 설치할 수 있도록 허용
com.mpgd.pompbsys.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION
내부적으로 사용되는 동적 브로드캐스트 리시버 권한

 


코드 분석

앱 실행 시 피싱 화면을 보여주고 추가 APK파일을 다운로드 설치를 진행한다.
설치된 APK 파일도 피싱 사이트로 접속하며, 권한 흭득, 각종 정보수집과 설정을 확인하고 sms 수집 및 송신 기능이 포함되어 있다.

govkr.apk

  • 피싱 화면
  • 사용자 입력을 받아 서버로 전송
  • 특정 경로에서 govManage.apk 다운로드하여 추가 설치를 합니다.
  • govManage.apk
    • 피싱 화면을 보여줌 
    • 권한 획득
    • 배터리 최적화, 네트워크 사용권환 확인, 진동 설정 확인
    • 각종정보 수집 (번호, 통신사, 모델명)
    • sms 수집
    • 핸들러 메시지를  통해 특정 번호 확인 및 행위
    • sms 송신

 


 

1. 앱 실행 시 피싱 사이트를 보여주고 사용자 입력 값을 서버로 전송

 

실행 시 피싱 페이지 접속

  •  피싱 사이트 화면과 유출
더보기

 

실행 시 보여지는 피싱 페이지

 

입력 값 유출
  • base64로 디코딩 된 문자열에서 시그니처 키를 뺴면 피싱사이트 주소를 획득 할 수 있다. 
<string name="decodeKey">PDDelMRv-</string>
<string name="baseUrl">UEREZWxNUnYtMjA5LjE0MS41My44MQ==</string
<string name="url_down">UEREZWxNUnYtMjA5LjE0MS4zNi4yMA==</string>

 


2. 특정 주소에서 APK 파일 설치

 

추가 다운로드


3.  govManage.apk 피싱 사이트 화면을 보여줌

첫 번째 앱과 같은 유출지를 가짐 

정보 유출지

 

피싱 사이트 접속 주소


4.  권한 획득

사용 권환을 가져옴1
사용 권환을 가져옴2


5.  배터리 최적화, 네트워크 사용권환 확인

 

베터리 최적화
네트워크 사용 권한 확인
전화 수신 시 진동 설정 확인


6.  각종정보 수집

 

번호, 통신사 수집
기기 모델명 수집
sms 수집

 


7.  핸들러 메시지를  통해 특정 번호 확인 및 행위

핸들러 메세지
특정 조건
특정 조건이 만족하면 send 메세지
정보 유출
정보 유출및 메세지 송신


8. sms 송신 기능


 

9.  유출에 사용되는 api

 


요새 피싱 사이트를 잘 만들기 때문에 항상 SNS 나 SMS 등 문구를 잘 확인하시고, 개인정보 입력 요구 시에는 항상 한 번 더 생각하고, 정상 사이트인지 확인하시기 바랍니다.

전화번호만 있는 경우 전화했을 때 앱 설치하라고 링크를 보내주는 건 거르시고 항상 직접 앱 스토어에 들어가서 설치하시기 바랍니다.  항상 앱 설치 하실 때는 신뢰 가능한 원스토어나 플레이스토어 등을 이용하시는 게 좋습니다.


 

휴대전화 보안 그리고 악성 앱 제거 방법


KISA  스마트폰 안전 수칙 10 계명
 
① 의심스러운 애플리케이션 다운로드하지 않기
  
② 신뢰할 수 없는 사이트 방문하지 않기
  
③ 발신인이 불명확하거나 의심스러운 메시지 및 메일 삭제하기
  
④ 비밀번호 설정 기능을 이용하고 정기적으로 비밀번호 변경하기
  
⑤ 블루투스 등 무선인터페이스는 사용 시에만 켜놓기
  
⑥ 이상 증상이 지속될 경우 악성코드 감염 여부 확인하기
  
⑦ 다운로드한 파일은 바이러스 유무를 검사한 후 사용하기
  
⑧ PC에도 백신 프로그램을 설치하고 정기적으로 바이러스 검사하기
  
⑨ 스마트폰 플랫폼의 구조를 임의로 변경하지 않기
  
⑩ 운영체제 및 백신 프로그램을 항상 최신 버전으로 업데이트하기

https://open.kakao.com/o/sy8rOtNf

 

cago_note님의 오픈프로필

cago_note 블로그 운영중!

open.kakao.com

 

728x90