Memperkenalkan QRIS Spoofing, Celah Baru untuk Penipuan-Penipuan QRIS
Uwrite.id - Halo, saya Reinhart Previano Koentjoro dari Jakarta.
Melalui artikel ini saya ingin mengedukasi masyarakat terkait salah satu celah dalam sistem QRIS yang berpotensi dimanfaatkan dalam penipuan QRIS hari-hari ini, termasuk kejadian penipuan QRIS palsu dalam beberapa masjid di Indonesia selama bulan Ramadhan ini.
Seluruh investigasi ini saya lakukan sebelum saya akhirnya mendengar klarifikasi sang pelaku yang mengaku bahwa QRIS toko “Restorasi Masjid” ini didapatkan melalui proses pendaftaran yang sah melalui aplikasi Pulsabayar dan Youtap. Alias tanpa menyunting isi QRIS asli tersebut.
Dan terakhir, Anda bisa follow saya di sini untuk memantau perkembangan terkini terkait celah penipuan QRIS yang satu ini.
Namun saya masih curiga bahwa sang pelaku juga menggunakan celah penyuntingan QRIS ini, karena Kode Kategori Merchant (MCC) yang tertera dalam kode QRIS palsu tersebut adalah “1111”, yang tidak valid alias tidak terdaftar dalam daftar MCC resmi dalam standar ISO 18245. Anda dapat melihat spesifikasi teknis tentang kode-kode ini dalam:
- Spesifikasi teknis kode QR pembayaran EMVCo berbasis Merchant-Presented Mode (MPM) versi 1.1 (PDF)
- Daftar kode MCC yang diakui oleh Visa (per 2021) (PDF). Perlu diketahui bahwa EMVCo merupakan perusahaan kerjasama antara Europay, Mastercard, dan Visa (EMV) yang mengembangkan standar interoperabilitas sistem pembayaran elektronik di dunia.
Ada banyak hal teknis yang perlu saya jabarkan di sini, karena celah penipuan ini bersifat high-tech dan membutuhkan keahlian dalam membuat program komputer (programming). Dan untuk mengawalinya, mari kita bahas tentang rahasia umum di balik kode-kode QRIS.
Dan, jika pada artikel sebelumnya saya menggunakan salah satu kode QRIS pribadi saya untuk membandingkan isi QRIS dengan kode QR pembayaran lawas di Indonesia, kali ini saya akan menggunakan kode yang sama untuk membuktikan bahwa celah penyuntingan QRIS, alias QRIS Spoofing, masih terjadi.
Rahasia Umum di Balik Sebuah QRIS
Sebelum Anda dapat memahami cara kerja modus penipuan QRIS yang satu ini, Anda perlu memahami beberapa istilah di bawah ini, menggunakan bahasa yang sangat sederhana:
- Merchant alias toko adalah… ya… toko itu sendiri. Atau bisa dikaitkan dengan lembaga dan perusahaan tertentu seperti Badan Zakat dan Amil Nasional (BAZNAS) dan Palang Merah Indonesia (PMI).
- Acquirer adalah lembaga (bank, penyedia jasa dompet digital, atau payment gateway) yang berhasil mengajak dan membantu merchant tersebut untuk menerima pembayaran menggunakan QRIS
- Penyedia Jasa Dompet Digital adalah perusahaan Payment Gateway di balik jalannya aplikasi dompet digital yang Anda gunakan sehari-hari, baik dari bank (seperti Sakuku dari BCA), non-bank (seperti DANA), maupun campuran (seperti LinkAja)
- Payment Gateway, atau istilah yang lebih panjangnya, Penyedia Jasa Sistem Pembayaran (PJSP) adalah lembaga atau perusahaan yang membantu mengoperasikan sistem transaksi keuangan secara elektronik, terutama melalui Gerbang Pembayaran Nasional (GPN) sebagai tulang punggung di balik sistem QRIS.
- Payload adalah istilah teknis dalam dunia IT untuk menjelaskan isi dari sebuah pesan atau kode, seperti pada barcode atau kartu NFC, yang dapat diartikan menjadi pesan atau perintah tertentu (seperti jenis kartu, sisa saldo, password Wi-Fi, dsb.)
- JSON adalah salah satu format teks yang digunakan oleh para pengembang aplikasi untuk menyimpan data secara terstruktur di dalam satu file teks (plaintext)
- National Merchant ID (NMID) adalah Nomor Induk Merchant yang secara resmi terdaftar di dalam sistem QRIS. Setiap kode QR yang dikeluarkan oleh bank atau PJSP berbeda dapat (dan seharusnya) merujuk kepada NMID yang sama bagi merchant tersebut. NMID dapat berubah sesuai lokasi merchant, seperti jaringan minimarket yang memiliki beberapa cabang.
- Merchant PAN adalah Nomor Induk Acquirer yang terdaftar di dalam sistem QRIS. Informasi ini juga sering muncul pada kode QRIS Statis versi terkini (keluaran akhir 2021) yang mengandung teks “Dicetak Oleh: 936… (kode Merchant PAN)”.
- Merchant ID yang terdaftar di dalam PJSP tersebut merupakan kedua nomor induk internal yang digunakan layaknya nomor rekening merchant pada sistem QRIS tersebut.
Proses Pemalsuan
Step 1: Ketahui isi QRIS yang akan dituju
Melalui artikel saya yang sebelumnya, saya sudah menjelaskan cara membaca isi QRIS yang sebenarnya. Secara pribadi saya merekomendasikan aplikasi “EMV QR Reader” untuk Android yang juga saya pakai untuk memperjelas cara kerja celah penipuan ini.
Update 14 April 2023: Terdapat koreksi di dalam gambar ini, di mana kode QRIS Dinamis seharusnya memiliki nilai “12”, bukan “11”, pada bagian [6].
Setiap kode QRIS memiliki setidaknya 5 informasi vital yang dapat dipakai untuk membuat kode-kode QRIS palsu yang akan didemonstrasikan melalui artikel ini, yakni:
- National Merchant ID (NMID), alias nomor induk merchant nasional,
- Merchant ID lokal, alias nomor induk merchant dalam PJSP tersebut,
- Globally Unique Identifier (kode PJSP alfanumerik), seperti ID.CO.TELKOM.WWW dan ID.OVO.WWW,
- Merchant PAN (kode PJSP numerik), seperti 936008980290034873, dan
- Kode kurs yang diterima merchant, dalam hal ini nilainya adalah 360 untuk menandakan kurs Rupiah.
Kode QRIS milik saya tersebut memiliki informasi vital sebagai berikut:
- National Merchant ID (NMID): ID1022147754108
- Merchant ID lokal: 000195290034873
- Globally Unique Identifier (kode PJSP alfanumerik): ID.CO.TELKOM.WWW
- Merchant PAN (kode PJSP numerik): 936008980290034873
- Kode kurs yang diterima merchant: 360 - Rupiah
Step 2: Mari kita Coding!
Setelah informasi-informasi berikut telah berhasil didapat, saatnya kita membuat kode QRIS palsu yang menggunakan nama merchant yang berbeda dengan saya.
Misalnya Nayla. Atau lebih tepatnya lagi, Ini Nayla Bukan Reinhart.
Untungnya, kita tidak harus mengingat setiap kode dan makna dalam spesifikasi EMVCo tersebut untuk dapat membuat QRIS palsu. Dalam kasus ini saya hanya perlu membuat program Node.js dengan salah satu library (alias kode program pendukung) untuk membuat kode QRIS yang valid.
Jika Anda sering membuat program Node.js, Anda dapat memverifikasi kode program yang saya buat untuk membuat kode palsu ini di https://gist.github.com/reinhart1010/33f16eb2e779042f0b06f8c2adfb055b. Perlu diketahui bahwa saya sengaja memasukkan data invalid seperti kode bahwa QRIS ini merupakan QRIS dinamis (12, bukan 11), padahal tidak ada biaya tetap yang ditagihkan kepada pengguna melalui kode tersebut.
Payload yang dikeluarkan oleh program tersebut adalah:
00020101021226680016ID.CO.TELKOM.WWW011893600898029003487302150001952900348730303UMI51440014ID.CO.QRIS.WWW0215ID10221477541080303UMI5204549953033605802ID5924Ini Nayla Bukan Reinhart6013Jakarta Pusat61051026062370511100027433310611100027433310703A17630488A8
Dan dengan sedikit editan saya dapat membuat kode QRIS palsu seperti ini.
Yang pastinya tetap dapat centang biru dari aplikasi Gojek dan berhasil di-scan melalui GoPay dan DANA:
Oh iya, saya juga bisa memasukkan karakter khusus di dalamnya, seperti (#_ )^; Bukan Reinhart Zheyeng… di dalam QRIS yang juga berhasil di-scan oleh DANA dan LinkAja:
Dan lihat, semua dana tersebut akhirnya masuk ke dalam rekening pribadi saya!!!
Setelah kasus penipuan itu viral, saya mengecek bahwa beberapa PJSP sudah mulai memperketat proses validasi untuk mencegah serangan seperti ini terjadi.
Sebenarnya, saya ingin mencoba menyunting kode QRIS Infaq Dompet Dhuafa yang sama-sama dikeluarkan oleh Bank NOBU (dengan salah satu varian QRIS penipuan “Restorsi Masjid” tersebut) dan beberapa kali ditolak oleh GoPay dan DANA, meskipun dengan nomor-nomor induk merchant (NMID, PAN, dll.), Kode Kategori Merchant, lokasi dan kode pos merchant, bahkan Kode Metode Akuisisi Merchant (Merchant Criteria) yang sama dengan Dompet Dhuafa.
Step 3 (Bonus): Membuat stiker QRIS yang semakin mirip dengan aslinya
Sebagai bonus, saya akan merubah gaya/style teks pada kode QRIS tersebut untuk memastikan bahwa stiker kode ini sangat mirip dengan stiker QRIS pada umumnya, yang semakin sulit untuk dideteksi masyarakat awam bahwa kode ini sebenarnya adalah kode palsu.
Sebagai informasi, setiap teks dalam stiker QRIS yang dikeluarkan sejak Maret 2021 ditulis menggunakan font GPN Sans yang hanya tersedia untuk Bank Indonesia, ASPI, dan para PJSP yang bekerjasama dalam pengembangan sistem GPN dan QRIS.
Agar stiker QRIS palsu tersebut terlihat lebih asli, saya memutuskan untuk menggunakan font Red Hat Display yang tersedia dan dapat diunduh secara gratis. Kedua font ini memiliki perbedaan visual yang minim sebagai berikut.
Namun, jika dilihat dari jauh, teks yang ditulis menggunakan font ini akan terlihat sangat mirip antara satu dengan lain, seperti logo resmi QRIS yang disunting pada gambar berikut.
Dengan font gratis ini saya dapat membuat kode-kode QRIS palsu yang sangat mirip dengan aslinya:
Saya bisa membayangkan apa yang akan terjadi jika celah ini terus dibiarkan begitu saja. Misalnya, saat penipuan modus tagihan Pos Indonesia yang dulu sempat viral (menggunakan QRIS NOBU dan Xendit), di mana para penipu dapat saja merubah nama merchant QRIS menjadi “Pos Indonesia”, padahal Pos Indonesia juga mengoperasikan PJSP tersendiri untuk aplikasi dompet digital mereka, Pospay.
Atau sekelompok penipu online shop yang menyamarkan identitas dirinya dengan merubah nama, lokasi, dan kode pos. Atau untuk mendukung jalannya bisnis pembuatan website penipuan yang menargetkan masyarakat melalui banyak hal, seperti event gim berhadiah dan konten-konten dewasa.
Meskipun demikian, sama halnya dengan rekening bank, setiap NMID dalam QRIS masih dapat dilacak pemiliknya, karena setiap pendaftar wajib menyertakan KTP (bahkan NPWP) untuk dapat mendaftarkan dirinya atau tokonya kepada PJSP QRIS apapun.
Jika Anda tertarik untuk mengetahui perkembangan terkini terkait celah penipuan ini, Anda bisa follow saya melalui Twitter, Mastodon, Fediverse, dan kanal lainnya di sini.
Tulis Komentar