꿈을꾸는 파랑새

반응형

오늘은 구글 플레이 가게(2021.12.01 폭발)에 유포가 되었던 무료 VPN으로 위장하는 악성코드인 Touch VPN Proxy에 대해 알아보겠습니다.
VPN을 하는 이유는 아마도 검열 문제일 것입니다. 개인적으로 사회에 피해를 주거나 국가 전복 시도, 이적 단체 등의 사이트 차단은 있어야 한다고 생각을 합니다. 그런데 가끔은 너무 과하다는 생각이 될 정도로 검열 때문에 문제가 발생할 것이고 가볍게 사용을 하려고 하면 넷플릭스 같은 것은 한국 서비스만 보기 지겹고 해외 넷플릭스 서비스를 보려고 많이 사용을 하고 있습니다.
물론 VPN이 익명성을 제공하는 것은 맞지만 아마도 일부는 틀린 말이기도 합니다.
온라인에서 자신의 행동이 누구인지 밝혀낼 수 있으며 어떤 VPN 제공 업체도 나를 익명으로 만들 것이라고 주장해서는 안 될 것입니다.
일단 VPN이라는 것은 VPN 입에서 연결 버튼을 누르면 사용 중인 기기와 선택한 위치의 VPN 서버 간에 암호화된 연결이 되며 이런 트래픽 부분이 암호화되어 있기 때문에 아무도 여러분이 보는 웹 사이트, 보내는 메시지, 다운로드 중인 파일 등 여러분이 무엇을 하고 있는지 볼 수 없으며 사용자 컴퓨터->VPN 서버(암호화)<->웹사이트(VPN,웹사이트간은 비암호화)로 구성이 됩니다.

VPN 서버와 웹 사이트 (또는 웹 서비스) 간의 연결은 암호화되지 않지만, 서버가 IP 주소를 변경하기 때문에 ID가 보호되는 것입니다.

여기서 안전하게 보호를 위해 두 개의 서버를 통해 연결이 라우팅 되고 IP 주소가 두 번 변경되는 이중 VPN(Double VPN)을 제공하는 VPN 서비스도 있습니다. 

Touch VPN Proxy 구글 플레이 정보
Touch VPN Proxy 구글 플레이 정보

이런 VPN 서비스를 이용하려면 기본적으로 세계적으로 인정받은 VPN을 사용해야 하면 대부분 무료 VPN은 사용자가 접속한 사이트, 광고, 개인정보 수집을 하면 때로는 수집된 개인정보를 다른 제3자에게 판매를 해서 이득을 보는 구조입니다. 

이런 방식으로 취하는 VPN이 있지만, 구글 플레이 스토어 등에 올려놓아서 VPN 서비스를 제공하는 동시에 개인정보를 훔쳐 가는 악성코드들도 있습니다. 오늘은 Touch VPN Proxy 악성코드에 대해 알아보겠습니다.

일단 유포 방식은 구글 플레이 스토어 에서 유포했으면 https://play.google(.)com/store/apps/details?id=com.touchvpn.proxy 
을 통해서 유포되고 있다가 폭발이 되었습니다.

일단 해당 구글 플레이 스토에서는 다음과 같이 설명이 돼 있습니다.
무제한 VPN 클라이언트
최고의 온라인 개인 정보 보호는 기억할 필요조차 없는 종류입니다. Touch VPN Proxy는 자동으로 IP 주소를 숨기고 연결을 암호화하여 온라인 광고주, 네트워크 추론 및 신원 도용으로부터 개인 정보를 보호합니다.
Touch VPN Proxy를 실행하고 안전하고 무료 인터넷 경험을 위해 새 IP 주소의 소스 위치를 선택하기만 하면 됩니다.

온라인 신원 도용을 막고, 해킹 가능성 없이 공용 Wi-Fi에 연결하고, ISP가 비디오 스트리밍 속도를 늦추는 것을 방지하고, 다른 많은 스누핑 및 사이버 범죄 예방 혜택을 누릴 수 있습니다. 지역 제한 없이 검색하는 인기 웹사이트에 액세스할 수도 있습니다.

Touch VPN Proxy 실행

특징:
전 세계 어디에서나 모든 콘텐츠에 액세스
최대 10개의 장치에 대한 무제한 암호화 트래픽
완벽한 온라인 보호 및 익명성
안전한 온라인 미디어 스트리밍 및 다운로드
인터넷 킬 스위치
트래픽 로그 없음
전 세계 1,300개 이상의 서버
우리 팀 전체가 이것을 세계 최고의 터치 VPN 프록시로 만드는 방법에 대한 귀하의 아이디어를 듣고 싶습니다. 피드백과 제안을 보내주시면 Android에서 가장 많이 사용되는 Touch VPN 프록시 앱을 만들 수 있습니다.
그러나 실제로 실행을 해 보면 VPN 서버는 별로 없습니다.
기본적으로 무료 VPN으로 위장하고 있으며 쉽게 이야기해서 그냥 공짜로 VPN을 이용하고 싶은 사람의 심리를 낚은 악성코드입니다. 구글 공식 스토어를 통해서 유포되고 있고 기본적인 목적은 페이스북 계정 탈취입니다.

이런 악성코드 진단명은 Android/Trojan.Spy.Facestealer으로 대부분 진단을 하고 있으며 Facestealer 이라는 것은 사용자의 입력을 요청하는 영향을 받는 시스템 화면의 사용을 보여주며 마지막으로 사용자에게 Facebook 로그인(페이스북 로그인) 페이지가 표시되고 페이스북 로그인을 요청 여기서 악성코드에서 삽입된 악성 자바스크립트가 로그인 자격 증명을 도용하여 명령 및 제어 서버 전송하며 C&C 서버는 로그인 자격 증명을 사용하여 수집된 데이터에 대한 액세스 권한을 부여하는 방식을 사용하고 있습니다.

이렇게 되면 소셜 미디어 계정(SNS)에 대한 로그인 자격 증명이 도난당하면 트위터, 페이스북 같은 계정이 도난되어서 나도 모르게 범죄에 악용되는 것입니다. 해당 악성코드의 해쉬값은 다음과 같습니다.
파일명: Touch VPN Proxy.apk
사이즈:39.6 MB
CRC32:2d091797
MD5:00b22e3e10f2f5c0eaa40587d2e4d6d6
SHA-1:1d94cdc43a6d0db50a57d9bcd48b80c4f51f0c6b
SHA-256:e23e4ad586424fbbb099c424be1432fec829213fc71919cb4523218ccc2928bd
SHA-512:f9da79ad0b7cfc98cea2fe2a86a9ec9fc8ab2c85b0e4da11c910505627e7af53adab37f3f0d824a8181a9e29a465461881dbb11250ae45fee02dc7702be27d6a

악성코드 안드로이드 권한
악성코드 안드로이드 권한

해당 악성코드의 권한은 다음과 같습니다.

android.permission.ACCESS_NETWORK_STATE
android.permission.INTERNET
android.permission.FOREGROUND_SERVICE
android.permission.ACCESS_WIFI_STATE
android.permission.WAKE_LOCK
android.permission.RECEIVE_BOOT_COMPLETED
android.permission.BIND_VPN_SERVICE
android.permission.BIND_JOB_SERVICE

일단 기본적으로 네트워크 액세스 상태 확인, 인터넷 접속 권한, 백그라운드 서비스, 와이파이 접근, 스마트폰 기기를 켜진 상태로 유지, VPN 서비스에 대한 최상위 인터페이스를 사용하도록 허용 등을 볼 수가 있습니다.
해당 악성코드에서는 DEX 파일은 3개가 존재를 하고 있으면 해당 해쉬값들은 다음과 같습니다.
Dex File Name:classes.dex
File Size:9445224 bytes
MD5:ba1562e5b57ea7d68f9f3752270fae7a
Class Size:8438
Method Size:65502
String Size:68354
Dex File Name:classes2.dex
File Size:9188520 bytes
MD5:4adc6768454011fb6f9b9c2227f9261d
Class Size:10345
Method Size:64271
String Size:52009
Dex File Name:classes3.dex
File Size:4196648 bytes
MD5:f874c15cd2da53632ceccc385a88ca06
Class Size:2723176
String Size:29160
입니다.

com.adcolony.sdk.q0
com.adcolony.sdk.q0

그리고 com.adcolony.sdk.q0 에서는 SMS 관련 코드들이 보이는 것을 확인할 수가 있습니다.

boolean l(c0 p0){
       JSONObject jSONObject = p0.b();
       JSONObject jSONObject1 = x.b();
       String str = x.i(jSONObject, "ad_session_id");
       JSONArray jSONArray = x.b(jSONObject, "recipients");
       String str1 = "";
       for (int i = 0; i < jSONArray.length(); i = i + 1) {
          if (i) {
             str1 = new StringBuilder().append(str1).append(";").toString();
          }
          str1 = new StringBuilder().append(str1).append(x.d(jSONArray, i)).toString();
       }
       if (s0.a(new Intent("android.intent.action.VIEW", Uri.parse(new StringBuilder().append("smsto:").append(str1).toString())).putExtra("sms_body", x.i(jSONObject, "body")))) {
          x.b(jSONObject1, "success", true);
          p0.a(jSONObject1).d();
          this.c(str);
          this.a(str);
          this.b(str);
          return true;
       }else {
          s0.a("Failed to create sms.", 0);
          x.b(jSONObject1, "success", 0);
          p0.a(jSONObject1).d();
          return 0;
       }
    }

com.blankj.utilcode.util.IntentUtils 에서도 SMS(문자) 관련 부분을 볼 수가 있습니다.

com.blankj.utilcode.util.IntentUtils
com.blankj.utilcode.util.IntentUtils

public static Intent getSendSmsIntent(String p0,String p1){
       if (p0 == null) {
          throw new NullPointerException("Argument \'phoneNumber\' of type String \(#0 out of 2, zero-based\) is marked by @androidx.annotation.NonNull but got null for it");
       }
       Intent intent = new Intent("android.intent.action.SENDTO", Uri.parse(new StringBuilder()+"smsto:"+Uri.encode(p0)));
       intent.putExtra("sms_body", p1);
       return IntentUtils.getIntent(intent, true);
    }


com.blankj.utilcode.util.IntentUtils 에서는 phonecall 관련 코드를 확인할 수가 있습니다.

public static Intent getCallIntent(String p0){
       if (p0 != null) {
          return IntentUtils.getIntent(new Intent("android.intent.action.CALL", Uri.parse(new StringBuilder()+"tel:"+Uri.encode(p0))), true);
       }
       throw new NullPointerException("Argument \'phoneNumber\' of type String \(#0 out of 1, zero-based\) is marked by @androidx.annotation.NonNull but got null for it");
    }

setFlashlightStatus 을 통한 스마트폰 손전등 상태 확인을 하는 코드도 보이는 것을 확인할 수가 있습니다.

스마트폰 손전등 상태 확인
스마트폰 손전등 상태 확인

public static void setFlashlightStatus(boolean p0){
       if (!FlashlightUtils.init()) {
          return;
       }
       Camera$Parameters parameters = FlashlightUtils.mCamera.getParameters();
       if (p0) {
          if (!"torch".equals(parameters.getFlashMode())) {
             try{
                FlashlightUtils.mCamera.setPreviewTexture(FlashlightUtils.mSurfaceTexture);
                FlashlightUtils.mCamera.startPreview();
                parameters.setFlashMode("torch");
                FlashlightUtils.mCamera.setParameters(parameters);
             }catch(java.io.IOException e3){
                e3.printStackTrace();
             }
          }
       }else if(!"off".equals(parameters.getFlashMode())){
          parameters.setFlashMode("off");
          FlashlightUtils.mCamera.setParameters(parameters);
       }
       return;
    }
}

그리고 악성코드에 포함된 인터넷 주소들은 다음과 같습니다.

악성코드에 포함된 인터넷 주소
악성코드에 포함된 인터넷 주소

http://scripts.sil(.)org/OFL
0type.googleapis(.)com/google.crypto.tink.AesGcmKey
UnityEngine(.)Mesh/MeshData::CopyIndicesIntoPtr
UnityEngine(.)Mesh/MeshData::GetIndexDataPtr",
UnityEngine(.)Mesh/MeshData::SetVertexBufferParamsFromPtr
https://www.googleapis(.)com/auth/fitness.activity.write
UnityEngine(.)Mesh/MeshDataArray::ApplyToMeshImpl
https://da.chartboost(.)com
https://www.googleapis(.)com/auth/drive
https://adc3-launch-staging.adcolony(.)com/v4/launch
https://www.google(.)com/dfp/inAppPreview
https://www.googleapis(.)com/auth/fitness.activity.read
https://ms.applvn(.)com
https://i.l.inmobicdn(.)net/sdk/sdk/OMID/omsdk-v1.js
https://www.inmobi(.)com/products/sdk/#downloads
vnd.android.cursor(.)dir/event
https://prod-a.applovin(.)com,https://rt.applovin.com/4.0/pixhttps://rt.applvn(.)com/4.0/pix
https://ms.applovin(.)com
https://ms.applvn(.)com/
https://play.google(.)com
http://schemas.android(.)com/apk/lib/com.inmobi.ads
https://facebook(.)com/device?user_code=%1$s&qr=1
https://pagead2.googlesyndication(.)com/pagead/gen_204?id=gmob-apps
cdn2.inner-active(.)mobi/ia-sdk-config/apps/
www.baidu(.)com
type.googleapis(.)com/google.crypto.tink.AesCmacKey
https://vid.applovin(.)com/
https://pdn.applovin(.)com/
https://img.applovin(.)com/
https://d.applovin(.)com/
https://assets.applovin(.)com/
https://cdnjs.cloudflare(.)com/
http://pdn.applovin(.)com
http://img.applovin(.)com
http://d.applovin(.)com
http://assets.applovin(.)com
http://cdnjs.cloudflare(.)com/
https://rt.applovin(.)com/
UnityEngine(.)Mesh/MeshDataArray::ApplyToMeshesImpl
type.googleapis(.)com/google.crypto.tink.XChaCha20Poly1305Key
https://init.supersonicads(.)com/sdk/v
https://www.googleapis(.)com/auth/drive.appdata
https://www.googleapis(.)com/auth/games.firstparty
type.googleapis(.)com/google.crypto.tink.AesGcmSivKey
type.googleapis(.)com/google.crypto.tink.KmsEnvelopeAeadKey
www.google(.)com
https://cdn2.inner-active(.)mobi/IA-JSTag/Production/centering_v1.css
UnityEngine(.)Mesh/MeshData::GetVertexAttributeFormat
type.googleapis.com/google(.)crypto.tink.ChaCha20Poly1305Key
https://ads.inmobi(.)com/sdk
UnityEngine(.)Mesh/MeshData::GetIndexFormat
https://www.google(.)com/dfp/debugSignals
https://googleads.g.doubleclick(.)net/mads/static/mad/sdk/native/production/mraid/v3/mraid_app_expanded_banner.js",
UnityEngine.Mesh/MeshData::GetSubMeshCount
https://graph(.)%s

기타 등등 이 포함이 돼 있으며 2021-12-02 07:05:03 UTC 기준으로 탐지하는 백신 업체 들은 다음과 같습니다.
Alibaba:TrojanSpy:Android/Facestealer.9919b512
Avast-Mobile:Android:Evo-gen [Trj]
Avira (no cloud):ANDROID/Spy.Facestealer.mjdnz
DrWeb:Android.PWS.Facebook.93
ESET-NOD32:Multiple Detections
Fortinet:Android/Facestealer.CC!tr.spy
Ikarus:Trojan.AndroidOS.Facestealer
McAfee:Artemis!BA1562E5B57E
McAfee-GW-Edition:Artemis!Trojan
Microsoft:Program:Win32/Uwamson.A!ml
Symantec:Trojan.Gen.2
Trustlook:Android.PUA.General
입니다. 일단 기본적으로 구글 플레이 스토어 에서도 악성코드는 유포되고 있으니 백신 앱은 필수 사용을 해야 하면 그리고 가능한 VPN은 인지도가 있는 제품을 사용하는 것이 안전하면 그리고 사용자 가 많은 제품을 사용하는 것이 안전하면 특히 구글 플레이 스토어 에서 무료로 제공되는 VPN이라도 사용을 안 하는 것이 좋습니다. 세상에는 공짜는 없습니다.

반응형
그리드형

댓글

비밀글모드

  1. 무료 VPN 위장 악성 앱이로군요
    유의해야겠습니다
    2021.12.06 07:23 신고
    • 인지도 있는 VPN 을 사용하는것이 좋죠.
      2021.12.06 11:12 신고
  2. 무료를 빙자한 악성코드 조심해야겠네요
    잘 보고 갑니다
    2021.12.06 08:11 신고
    • 기본 보안수칙은 필수 입니다.
      2021.12.06 11:13 신고
  3. 무료일때는 한번 더 확인이 필요한 것 같아요. 잘 알고 갑니다.
    2021.12.06 12:17 신고
    • 기본적인 보안 수칙을 지키는것이 그나마 안전 합니다.
      2021.12.06 20:56 신고
  4. VPN 선택도 참 중요한 것 같더라고요~@_@/
    2021.12.07 16:31 신고
    • 그냥 돈주고 인지도 있는 VPN 사용 하는것이 제일 좋죠.
      2021.12.07 17:13 신고