안녕하세요, 팀카시아입니다.
갈수록 진화되는 사이버 범죄 특히, 몸캠피싱 범죄는 사람들에게 인격적으로 되돌릴 수 없는 고통을 안겨줍니다.
몸캠피싱 가해자들은 피해자를 악성 앱으로 유도하여 정보를 빼내는 수법을 사용하는데요.
저희 팀카시아는 이러한 몸캠피싱 악성 앱을 꾸준히 분석하여 사이버 범죄에 대한 전문성을 기르고 있습니다.
팀카시아는 몸캠피싱 악성 앱 분석 보고서를 작성하여 몸캠피싱 악성 앱에 대한 정보를 공유해 드리고자 합니다.
앞으로 많은 관심 부탁드립니다.
목차
1. 개요
1.1. 수행 인력
악성앱 분석을 수행한 인력은 다음과 같음.
소속 | 성명 | 직급 | 업무 | 연락처 | 이메일 |
팀카시아 | 비공개 | 비공개 | 악성 앱 분석 | 비공개 | 비공개 |
1.2. 수행 환경
악성코드 분석을 수행한 환경은 다음과 같음.
구분 | 수행원 | 환경 | 분석 단말 | 진단 위치 |
PC | 비공개 | Windows 11, OSX Ventura | Galaxy Note 10 (Android 12, API Level 33) | 팀카시아 사무실 |
1.3. 수행 대상
악성코드 분석을 수행한 대상은 다음과 같음.
No | 구분 | 대상 명 | 패키지 명 | 플랫폼 | 비고 |
1 | 모바일 | 43.153.38.195.apk | uni.UNIDE5C136 | Android | - |
No | MD5 해시 |
1 | 43c3e5f835584893317be48d2bfe545e |
2. 진단 상세
2.1. 위험도 평가 기준
위험도는 평가항목에 해당되는 악성 행위에 대해 위험을 가늠할 수 있도록 5단으로 분류함.
위험도 | 주요내용 | 등급 |
5 | 가용성에 직접적인 영향 중요 정보(연락처, 사진 등) 노출 단말 제어권한 획득으로 임의 조작 가능 | 상 (High) |
4 | 사용자 권한 획득 다른 동작과 연계될 경우 가용성에 직접적인 영향 다른 동작과 연계될 경우 단말기 관리자 권한 획득 등 | |
3 | 다른 동작과 연계될 경우 시스템 사용자 또는 앱 사용자 권한 획득 등 다른 동작과 연계될 경우 중요 정보 유출 가능성 있음 가용성에 간접적인 영향 등 | 중 (Medium) |
2 | 추가적인 공격에 활용 가능한 단말 및 사용자 정보 유출 다른 동작과 연계될 경우 가용성에 간접적인 영향 등 | 하 (Low) |
1 | 공격과 직접적인 연관은 없으나 불필요한 정보 등이 공격자 서버에 유출 단말기에 관한 일반 정보 유출 등 |
3. 분석 결과 요약
3.1. 악성행위 개요
갤러리 앱은 안드로이드 플랫폼에서 작동하는 스피어 피싱을 목적으로 한 피싱 앱임. 악성 앱 실행 시 단말의 전화번호, 통화기록, 위치정보, 사용자 연락처에 저장된 정보 등을 수집하여 공격자의 서버(C&C)로 전송함.
3.2. 악성행위 요약
도출한 악성행위는 다음과 같음.
대상 | 순번 | 악성행위 분석 | 위험도 |
Photo Mybox (uni.UNIDE5C136) | 1 | 연락처 접근 및 외부 서버로 전송 | 5 |
2 | 저장된 파일 접근 및 외부 서버로 전송 | 5 | |
3 | 상세 위치 정보 접근 및 외부 서버로 전송 | 5 | |
4 | 사용자 전화번호 접근 및 외부서버로 전송 | 3 |
3.3. 유의사항
본 분석은 당사에서 수집한 악성 APK 샘플에서 수행되었으며, 분석을 위한 참조 자료로만 활용되어야 하며, 악성코드 제작 등의 용도로 악용을 금지함.
본 자료의 전체 혹은 일부를 라바웨이브의 허락을 받지 않고, 무단 개제, 복사 배포 등의 행위는 엄격히 금지함. 이를 어길 시 민형사상의 손해배상에 처해질 수 있음.
4. 분석 결과 상세
4.1. 정적분석
4.1.1. 권한 분석
앱이 요청하는 권한은 단말에서 수행하는 행위의 범위를 나타냄. ‘위험 권한’의 요청은 사용자의 개인 정보의 접근이나 단말 시스템의 주요 기능과 연관되어 있어, 악용될 경우 사용자의 보안에 위협이 될 수 있음. 권한의 선언만으로는 앱의 악성 행위 여부를 판단하기 어렵지만, 앱의 전반적인 행위와 결합하여 평가할 수 있는 지표임. 대상 앱에서 선언하는 권한과 설명은 다음과 같음.
No | 요청 권한 | 권한 설명 | 중요권한여부 |
1 | android.permission.ACCESS_COARSE_LOCATION | 대략적 위치정보 접근 | Y |
2 | android.permission.ACCESS_FINE_LOCATION | 정확한 위치정보 접근 | Y |
3 | android.permission.INTERNET | 앱 인터넷 연결 | N |
4 | android.permission.READ_CONTACTS | 연락처 읽기 | Y |
5 | android.permission.INSTALL_PACKAGES | 새로운 패키지 설치 | Y |
6 | android.permission.ACCESS_NETWORK_STATE | 네트워크 상태 접근 | N |
7 | android.permission.ACCESS_WIFI_STATE | 와이파이 연결 상태 읽기 | N |
8 | android.permission.CHANGE_WIFI_STATE | 와이파이 연결 상태 변경 | N |
9 | android.permission.READ_PHONE_NUMBERS | 단말 전화번호 읽기 | Y |
10 | android.permission.READ_EXTERNAL_STORAGE | 외부 저장소 읽기 | Y |
11 | android.permission.FOREGROUND_SERVICE | 서비스 동작 실행 | N |
12 | android.permission.GET_ACCOUNTS | 계정 목록 접근 | Y |
13 | android.permission.MODIFY_AUDIO_SETTINGS | 음량 설정 변경 | N |
14 | 시스템 로그 읽기 | Y | |
15 | android.permission.READ_PHONE_STATE | 단말 전화번호 수집, 전화 상태 수집 | Y |
16 | android.permission.REQUEST_INSTALL_PACKAGES | 새로운 패키지 설치 요청 | Y |
* 중요 권한 여부는 안드로이드 공식 문서 기준
4.1.2. 액티비티(Avtivity)
액티비티는 안드로이드 앱의 화면 구성 단위로, 사용자와 상호작용을 위한 인터페이스를 제공함. 액티비티 분석은 앱의 기능적 구성요소와 사용자 인터페이스 설계를 파악할 수 있음. 예를 들어, 앱 내의 로그인 화면, 메인 메뉴, 설정 화면 등은 각각 별도의 액티비티로 구현됨. 악성 앱의 경우, 액티비티를 통해 사용자를 속이기 위한 화면을 제공하고 숨겨진 기능을 통해 악성 행위를 수행할 수 있음. 대상 앱에 선언된 액티비티는 다음과 같음.
No | 액티비티 | 비고 |
1 | io.dcloud.PandoraEntry |
|
2 | io.dcloud.PandoraEntryActivity | 메인 액티비티 |
3 | io.dcloud.feature.nativeObj.photoview.PhotoActivity |
|
4 | io.dcloud.WebAppActivity |
|
5 | io.dcloud.ProcessMediator |
|
6 | io.dcloud.WebviewActivity |
|
7 | com.dmcbig.mediapicker.PickerActivity |
|
8 | com.dmcbig.mediapicker.PreviewActivity |
|
9 | io.dcloud.feature.gallery.imageedit.IMGEditActivity |
|
10 | io.dcloud.ads.activity.WebViewActivity |
|
4.1.3. 서비스(Service)
서비스는 사용자 인터페이스 없이 백그라운드에서 실행되는 컴포넌트로, 긴 작업 수행이나 네트워크 전송을 처리할 때 사용됨. 악성 앱의 경우 서비스는 앱이 사용자의 인지 없이 액티비티를 수행하거나, 지속적으로 데이터를 수집하고 전송하는 데 사용될 수 있음. 대상 앱에 선언된 서비스는 다음과 같음.
No | 서비스 | 비고 |
1 | io.dcloud.ads.base.service.DownloadService | - |
4.1.4. 리시버(Receiver)
리시버는 다양한 시스템 이벤트(예: 부팅 완료, 네트워크 상태 변경)에 반응하여 앱을 실행할 수 있음. 악성 앱이 특정 조건이나 이벤트에 따라 액티비티를 시작하거나 민감정보를 수신하는 데 활용될 수 있음. 대상 앱에 선언된 리시버는 다음과 같음
No | 리시버 | 비고 |
1 | com.taobao.weex.WXGlobalEventReceiver | - |
2 | io.dcloud.common.adapter.io.DownloadReceiver | - |
4.2. 동적 분석
4.2.1. 사용자 직접 실행
대상 앱의 동적 분석 과정에서 사용자에 의한 직접 실행을 기반으로 하는 앱의 동작을 분석함. 앱이 사용자의 실행으로 어떻게 구동되고, 사용자와 상호작용에 반응하는지 분석함. 분석의 시작점은 사용자가 앱을 실행하는 순간으로 설정함. 앱의 초기 로딩, 권한 요청, 주요 기능 실행 등을 어떻게 처리하는지 분석함. 앱의 실행 흐름을 따라가면서, 네트워크 통신, 데이터 저장 및 처리 등 앱의 핵심 동작을 실시간으로 모니터링함. 특히, 의심스러운 네트워크 활동, 민감한 정보의 무단 수집 및 전송, 비정상적 시스템 자원 사용 등의 행위를 식별함.
1. 앱 최초 실행 시 동작
앱을 실행한 후에는 시작할 액티비티를 결정함. 외부에서 인자를 포함하여 앱을 실행시키는 경우 인텐트에 따라 실행할 클래스를 결정함. 해당 기능은 4.2.2. 외부 요인에 의한 실행에서 다루며, 사용자가 앱을 직접 실행 시 ‘PandoraEntryActivity’ 클래스를 실행함
‘PandoraEntryActivity’ 클래스는 자바 디컴파일이 불가능하며, 네이티브 코드로 작성되어 있음.
2. 루팅 탐지
네이티브 코드로 작성된 내용을 디컴파일하면 ‘RootDetect’ 함수를 확인할 수 있으며, 코드에서 단말의 루팅 여부를 검사하는 코드를 확인할 수 있음. 작성된 로직은 다음과 같음. 바이너리의 목록을 전달하여 루팅 시 설치되는 바이너리의 존재 여부를 검사함. 이는 앱 분석 환경에서 실행 시 앱을 임의로 종료하거나 비정상 실행을 유도함.
검사하는 바이너리 목록은 다음과 같음. 이후 분석시에는 해당 로직을 우회하여 분석하였음.
3. 자바 네이티브 인터페이스 연결
네이티브 언어로 작성된 코드는 자바 런타임에서 호출하기 위해 JNI(Java Native Interface)를 이용하여 자바 함수를 네이티브 코드에서 호출해야 함. 특정 자바 라이브러리의 초기화 또는 함수실행과 관련한 코드를 확인함.
네이티브 코드와 연결된 자바 코드를 분석한 결과 ‘o0oo0o0’ 함수는 주어진 컨텍스트(context0)와 문자열(s)를 사용하여 특정 작업을 수행하는 것을 확인함
1. 문자열로 주어진 이름(s)의 자원 파일을 앱의 경로(‘asset’)에서 열려고 시도함
2. JLibrary.o00o0a0odod와 JLibrary.o00o0a0odou 에 앱 데이터 저장을 위한 경로를 설정함
추가 분석 결과, 사용중인 단말의 종류에 맞는 동적 파일을 다운로드 받기 위한 cpu 속성 검사 등 과정 후 경로를 설정함
3. 단계 2.에서 생성한 경로에 파일(file0, file1)을 생성함
4. Utils.update를 호출하여 파일의 내용을 업데이트함
위 코드 실행 후 실제 단말기의 앱 경로에서 새로 생성된 코드파일을 확인할 수 있음. 이는 동적 자원 로딩 방식으로 실행 시점에 코드가 생성되므로 앱 설치 파일에서 악성행위를 탐지할 수 없도록 하는 목적이 있음.
이는 악성 앱이 런타임에 특정 조건이나 환경에서만 악성 기능을 실행할 수 있도록 동적으로 자바 메서드를 호출할 수 있음. 메서드의 이름과 중요 문자열이 난독화되어 있어 악성 코드의 탐지를 어렵게 함.
4. 39285EFA.dex
동적으로 생성된 파일에는 악성행위를 위한 기능이 구현되어 있음. 수집한 정보를 공격자의 서버로 전송하기 위한 코드를 확인함.
또한, 외부 앱과의 서비스 바인딩(BindService 함수)과 서비스를 시작(StartMsaKlService 함수)가 선언되어 있음. 특정 서비스가 시스템에 존재하는 지 확인하는 메서드(CheckService) 도 포함하고 있음.
- CheckService 함수
getPackageManager().getPackageInfo 함수를 이용하여 특정 패키지(‘MsaClient.TARGET_PACKAGE’)가 단말에 설치되어 있는지 확인함
- StartMsaKlService함수
다른 서비스(com.mdid.msa.service.MsaKlService)를 시작하기 위한 인텐트를 생성함
서비스 시작에 필요한 액션(com.bun.msa.action.start.service)과 추가 데이터를 인텐트에 포함함
startService 함수를 호출하여 서비스를 시작하려고 시도함
MsaClient.TARGET_PACKAGE 변수는 ‘com.mdid.msa’ 패키명을 지정하고 있으며 해당 패키지 및 서비스가 악성 코드의 일부인지는 추가 분석을 통한 결정이 필요함
상기 명시한 바인드 및 서비스 시작이 가능한 경우 관련된 악성행위는 다음과 같음
1. 데이터 수집: 바인딩된 서비스가 사용자의 정보나 기기 데이터를 수집 가능함
2. 백그라운드 서비스: 시작된 서비스가 사용자 몰래 백그라운드에서 실행되어 악의적인 작업의 수행이 가능함
3. 서비스 은닉: 서비스의 존재를 체크하는 함수가 악성 서비스의 설치 여부를 확인하고 기존 앱을 제거하는 경우 악성 행위의 추적을 피할 수 있음
앱 실행 및 권한 요청 시 사용자에게 권한의 허용을 요청함. 안드로이드 운영체제에서 설정한 위험 권한에 대해서만 사용자 직접 허용이 필요하며, 이외 권한의 경우 단말에서 지원하는 기능인 경우 자동으로 허용됨.
5. 앱 실행 권한 요청
앱 실행에 필요한 다양한 위험 권한을 요청함. 앱의 기능 사용 시점이 아닌, 설치 후 최초 실행 시점에 모든 권한을 요청하며 바로 정보 유출로 이어지는 것이 아닌 공격자가 원격지에서 명령 실행 시 데이터 유출이 발생함.
앱 메인화면의 경우 사진을 저장하고 관리하는 앱을 모방하고 있지만, ‘홈’과 ‘나’ 버튼 이외에 어떤 버튼도 동작하지 않음을 확인함.
6. 단말기 기본 정보 수집
‘제조사’, ‘모델명’, ‘현재 시간’ 등 단말 정보를 수집하여 각각의 문자열로 저장함.
“av”, “sv” 등 각각의 파라미터는 각 함수의 호출 결과를 문자열로 변환한 결과를 저장하고 있음. ‘av’ 파라미터에 값을 저장하는 sysParamters.f().a() 함수를 분석한 결과는 다음과 같음
안드로이드 시스템 속성 값을 읽어오는 기능을 수행하며, 직접 접근할 수 없는 android.os.SystemProperties 클래스에 간접적으로 접근하기 위해 리플렉션(reflection)을 사용하여 접근하고 있음. 이 함수는 시스템 속성 값을 조회할 수 있으며, ro.serialno, ro.build.version.sdk, ro.product.model 과 같은 속성에 접근하여 시리얼 번호, 안드로이드 버전, 모델명 등을 수집할 수 있음
분석을 통해 확인한 각각의 파라미터 정보는 다음과 같음
파라미터명 | 값 정보 |
av | sdk 버전명(하드코딩) |
sv | sdk vname(하드코딩) |
md | 모델명 |
mf | 제조사 |
pn | 실행중인 패키지명 |
tm | 현재 시간 정보 |
각 단말 제조사 별(화웨이, 삼성, meizu 등) 고유식별 정보를 수집함. OAID, AAID 등 값을 수집하지만, 이는 중국 내에서 단말을 구분하기 위한 방법으로 사용되므로 자세하게 분석하지 않음. 수집한 데이터는 난독화하여 Http 요청의 body에 추가하여 전송함
수집한 정보 문자열을 HTTP Post 요청의 URL 파라미터에 추가하고 암호화한 내용을 본문(body)에 추가하고 공격자의 서버로 전송함. 식별된 공격자의 서버 정보는 다음과 같음. 현재(2024. 03.) 기준 공격 서버는 동작하지 않음.
C&C 도메인(IP주소) | 국가/지역 |
sdk.api.wocloud.cn:80 (49.234.42.40) | 국가: 중국 |
Continent Name: Asia Country Name: China / Beijing | |
이후 동작은 공격자 서버와 상호작용하여 동작함.
이성의 사진, 동영상 등을 확인할 수 있는 기능을 제공하는 것이 아닌 앱 내 저장된 파일을 로드하는 것을 식별함. 이성의 사진이나 영상 등의 제공을 위한 어떠한 기능의 구현이나 코드는 존재하지 않으며, 악성 행위만을 수행하고 있음.
7. 로그인 페이지
앱 기능에 로그인 페이지가 구현되어 있으며, 사용자가 계정정보를 입력하고 공격자의 서버로 전송할 수 있음.
계정 및 비밀번호 입력 후 ‘로그인’ 버튼을 누르면 실제 공격자의 서버로 데이터가 전송되는 것을 확인할 수 있음. 비밀번호의 경우 암호화되지 않는 상태로 서버에 전송되기 때문에 공격자가 평문을 확인할 수 있어 계정정보의 노출로 이어질 수 있음. 현재 접속 가능한 계정은 확인할 수 없어 이후 과정은 추가 분석이 필요함.
추가적으로, 웹뷰 관련 코드 일부에서도 파일 및 연락처 수집을 시도함을 확이함
💡 Disclaimer 본 보고서에 제시된 분석 결과는 특정 안드로이드 버전 및 실행 환경에 기반한 것임. 안드로이드 운영 체제는 버전에 따라 지원하는 API와 기능에 상당한 차이가 존재하며, 이는 앱의 동작 및 분석 결과에 영향을 줄 수 있음. 특히, 일부 API는 최신 버전의 안드로이드에서는 사용이 제한되거나 이전 버전에서 지원하지 않을 수 있으며, 이러한 차이는 앱의 동작에 영향을 미칠 수 있음. 따라서, 본 보고서의 분석 결과는 특정한 실행 환경과 안드로이드 버전에 한정된 것으로, 다른 환경 또는 버전에서는 상이한 결과가 나타날 수 있음을 유의해야 함. |
4.2.2. 외부 요인에 의한 실행
외부 이벤트나 조건에 의해 활성화되는 시나리오를 분석함. 앱이 사용자의 직접적인 상호작용 없이도 특정 기능을 실행할 수 있음을 의미함. 분석은 앱이 시스템 이벤트(예: 네트워크 상태 변경, SMS 수신 등), 푸시 알림, 다른 앱의 요청 등과 같은 외부 요인에 어떻게 반응하는지 분석함. 특히, 앱이 백그라운드에서 데이터를 수집, 전송하거나 무단으로 시스템 설정을 변경하는 등의 행위를 하는지 여부를 확인함. 앱이 사용자의 인지나 동의 없이 실행하는 행위를 분석함.
1. 인텐트로 실행하는 액티비티
앱에서 인텐트(Intent)를 사용하여 다른 컴포넌트로 전환하는 로직을 포함하고 있음. 앱의 메인 액티비티 코드 중 일부이다.
코드는 인텐트에 ‘__start_from_to_class__’ 라는 엑스트라가 있는지 확인함. 이 데이터가 존재하면, 실행할 새로운 액티비티의 클래스 이름으로 사용됨. 앱의 실행 시점에 동적으로 다음에 실행할 컴포넌트를 결정함. 이러한 동작은 앱이 예측 가능한 패턴을 피하고, 동적 분석을 우회하는 데 사용될 수 있음. 이는 악성 앱이 특정 조건에서만 숨겨진 기능을 활성화하고, 나머지 실행에는 정상적인 행동을 하는 것처럼 보이게 할 수 있음.
5. Mitre Att&ck(Mobile)
보안 기술이 발달함에 따라 공격자도 자신의 공격 기술을 발전시키고 있음. 수집한 피싱앱의 악성 행위 사례를 분석하여, 공격 기법과 프로세스를 이해하여 최신의 기술을 반영하여 피해자의 피해를 최소화하기 위해 앱이 어떤 보안 위협 모델에 해당하는지를 Mitre Att&ck 매트릭스를 이용하여 분석함.
6. 사용자 대응 가이드
분석한 내용을 바탕으로 사용자 대응 가이드를 제시함. Mitre Att&ck에서 사용자가 제어할 수 있는 각 단계를 기반으로 사용자가 주의할 내용과 악성앱 실행 시 취할 수 있는 조치를 제시함.
1. 의심스러운 링크 클릭 금지
인터넷을 사용하면서 접하는 링크 중에는 피싱이나 악성 코드를 포함하고 있는 경우가 있음. 이러한 링크는 이메일, 문자 메시지, 소셜 미디어, 심지어 친구나 지인으로부터 받은 것일지라도 의심스러운 경우 클릭을 피해야 함. 특히, 앱을 다운로드할 때는 항상 공식 앱 스토어를 이용하고, 공식 스토어가 아닌 곳에서 제공하는 앱은 설치하지 않도록 함. 공식 스토어 외부에서 제공되는 앱은 검증되지 않았을 가능성이 높으며, 악성 코드가 포함될 위험이 있음.
2. 최신 안드로이드 버전 업데이트 유지
구버전의 안드로이드 운영 체제는 보안 취약점을 포함하고 있을 수 있음. 이러한 취약점은 공격자가 악성 행위를 수행하기 위해 악용할 수 있음. 따라서, 안드로이드 기기를 항상 최신 버전으로 업데이트하는 것이 중요함. 시스템 업데이트는 보안 패치 및 새로운 보안 기능을 제공하여 기기와 데이터를 보호할 수 있음.
3. 주기적 미사용 앱 삭제
스마트폰에 설치되어 있지만 사용하지 않는 앱들은 보안 위험을 증가시킬 수 있음. 이러한 앱들은 종종 업데이트되지 않아 새로운 보안 취약점에 노출될 수 있음. 주기적으로 기기를 검토하고 더 이상 사용하지 않는 앱을 삭제함으로써, 불필요한 보안 위험을 줄일 수 있음.
4. 앱 권한 부여 관리
앱을 설치하거나 사용할 때 요구되는 권한을 신중하게 검토해야 함. 많은 앱들이 기능 실행에 필요한 것 이상의 권한을 요청할 수 있으며, 이는 사용자의 개인정보와 보안에 위험을 초래할 수 있음. 예를 들어, 플래시라이트 앱이 연락처 접근 권한을 요구하는 경우, 이는 의심스러운 요구로 간주될 수 있음. 반드시 필요한 권한만 허용하여 사용해야함.
안드로이드 단말의 설정 메뉴에서 앱 권한을 관리할 수 있으며, 사용자는 각 앱에 부여된 권한을 확인하고 필요하지 않은 권한은 비활성화할 수 있음. 이미 설치된 앱에 대해서도 주기적으로 검토하는 것을 권장함.
5. 단말기의 비정상 동작 감지 시 전문가 상담
기기가 평소와 다르게 느려지거나 예상치 못한 방식으로 동작하는 경우, 이는 악성 앱의 영향일 수 있음. 이러한 증상이 나타나면, 기기를 전문가에게 검사해야 함. 전문가는 기기의 보안 상태를 확인하고, 필요한 경우 악성 코드 제거나 기타 보안 조치를 취할 수 있음.