Reverse Engineering

Reverse Engineering Aplikasi Kurir SiCepat Palsu


Dalam era di mana informasi sensitif yang kita punya seringkali dihadapkan pada risiko kebocoran data, pengetahuan tentang security awareness menjadi penting. Belakangan ini, aplikasi penipuan online semakin umum terjadi. Oleh karena itu, saya ingin mengajak Anda untuk menjelajahi postingan ini, yang akan memberikan wawasan tentang taktik yang digunakan oleh para pelaku jahat dalam menciptakan aplikasi palsu.

Latar Belakang

Pada kesempatan kali ini, saya ingin membagikan hasil analisis reverse engineering terhadap aplikasi paket kurir SiCepat palsu. Dengan memahami cara kerja aplikasi palsu, kita dapat meningkatkan kesadaran akan pentingnya memvalidasi sumber aplikasi sebelum menginstalnya.

Kejadian ini terjadi pada awal tahun 2023 yang memanfaatkan modus penipuan baru berkedok file ekstensi gambar palsu yang dikirim pelaku ke korban. Pelaku mengakui dirinya sebagai kurir paket, dan ingin konfirmasi kepada korban bahwa paket pesanannya telah sampai dengan mengirimkan foto berekstensi .apk melalui WhatsApp.


File didapat langsung dari korban yang mengalami kejadian ini. Singkatnya, korban diminta untuk memeriksa keberadaan lokasi paket pesanan melalui apk yang dikirim pelaku. Namun, dalam hal ini korban mengaku tidak memesan paket pada waktu itu. Selain itu, korban juga tidak mengenal nomor yang mengirimkan pesan tersebut.


Informasi Aplikasi

Sebenarnya aplikasi SiCepat yang asli tersedia di PlayStore yang dikembangkan oleh PT. SiCepat Ekspress Indonesia. Namun pada kasus ini pelaku membuat aplikasi web view yang serupa dengan tampilan official website SiCepat. Lanjut, hal pertama yang saya lakukan adalah mengunduh file tersebut dan mencari informasi dasar dari file tersebut. Berikut adalah informasi yang didapat.


Hal yg saya lakukan ini adalah untuk memverifikasi integritas dan membandingkan apakah file yang dimiliki sama dengan file yang asli. Jika terdapat perbedaan nilai hash, artinya salah satu dari file tersebut mengalami modifikasi. Modifikasi dalam hal ini bisa jadi salah satu dari file tersebut palsu, dan berpotensi menyebabkan serangan keamanan.


Basic dari file Ekstensi APK

File APK (Android Package Kit) adalah file arsip yang berisi semua source code yang diperlukan untuk menjalankan aplikasi Android. Setiap APK memiliki berkas yang disebut AndroidManifest.xml. Berkas ini berisi informasi penting tentang aplikasi, seperti nama paket, versi, permissions, ataupun aktivitas-aktivitas yang dimiliki aplikasi.

File APK sebenarnya dibuat menggunakan format arsip ZIP, yang berarti Anda dapat membuka dan mengekstraknya seperti arsip ZIP biasa. Walaupun kita bisa mengekstraknya, tetapi hasil unzip tersebut tidak akan berbentuk human-readable code karena seluruh file tersebut sudah dicompile dan dipaketkan menjadi 1 file APK. Dari situ, kita bisa memainkan proses yang biasa disebut dengan Dekompilasi.


Melakukan Dekompilasi

Dekompilasi merupakan proses mengembalikan file APK kembali menjadi source code semula, sebelum file tersebut dicompile dan disatukan menjadi 1 file APK. Singkatnya jika proses compile berjalan maju, maka proses dekompilasi ini berjalan mundur. Setelah melakukan decompile, saya mendapat 8 folder dan 1 file AndroidManifest.xml seperti pada gambar di bawah.


Berdasarkan gambar di atas, kita bisa lihat dengan jelas file MainActivity.java dan AndroidManifest. Kelas MainActivity biasanya merupakan aktivitas pertama yang dijalankan aplikasi ketika pengguna membuka aplikasi, seperti halnya main class pada sebuah program. Dengan membaca kedua kelas tersebut, kita bisa mengetahui gambaran umum dari aplikasi ini tanpa membaca keseluruhan kelas satu per satu.


Static Analysis

Static analysis digunakan untuk menganalisis program tanpa harus menjalankan program tersebut. Salah satu proses yang terlibat adalah seperti yang sudah saya lakukan pada bagian sebelumnya, yaitu dekompilasi. Tujuannya adalah untuk memahami, menganalisis, dan mendeteksi kerentanan pada program, sebelum akhirnya dilakukan proses yang dinamakan Dynamic Analysis. Pertama, saya akan bongkar dan menganalisis AndroidManifest nya terlebih dahulu


Berdasarkan Android Manifest, Aplikasi SiCepat palsu ini meminta user untuk mengizinkan akses ke 4 hal seperti pada gambar di atas. Dari sini kita perlu curiga karena untuk apa aplikasi kurir membutuhkan akses ke SMS, sedangkan aplikasi SiCepat versi aslinya saja tidak membutuhkan akses ke perizinan tersebut.

Image


Selain itu, dalam AndroidManifest juga tertulis <receiver android> untuk menangani peristiwa yang terjadi baik saat aplikasi sedang berjalan maupun tidak. Receiver ini terdapat pada kelas ReceiveSMS dan SendSMS. Oleh karena itu, kita perlu mengecek kedua kelas tersebut.


Intinya program ini melakukan pencurian data SMS ketika korban menginstall aplikasi tersebut. SMS akan dikirimkan melalui API Bot Telegram yang diduga milik pelaku. Baris ke 36 dan 38 merupakan titik awal terjadinya pencurian data karena akan melakukan permintaan koneksi ke URL yang sudah didefinisikan. Hal yang sama juga terjadi pada kelas SendSMS. Namun ketika saya coba mengakses url API Bot telegram itu, saya mendapatkan kode 401: Unauthorized.


Asumsi saya adalah pelaku lupa mengatur botnya secara publik agar bisa diakses pengguna lain (korban) sehingga pesan SMS yang didapatkan bisa dikirim ke alamat API tersebut (namun ternyata tidak). Atau mungkin juga berkaitan dengan token API yang sudah expired, mengingat kejadian ini sudah lama terjadi dan baru saya analisis sejak postingan ini ditulis.


Dynamic Analysis

Setelah puas dengan informasi dan logika program yang didapat dari hasil Static Analysis, selanjutnya saya melakukan Dynamic Analysis. Berbeda dengan static analysis, jenis proses ini melibatkan eksekusi program saat melakukan analisis. Saya menginstall aplikasi SiCepat palsu ini pada Android Emulator dengan bantuan Genymotion. Perangkat yang digunakan pada emulator adalah Google Pixel dengan Android versi 11. Setelah selesai set up perangkat emulator, selanjutnya adalah menginstall aplikasi ke emulator.


Saya dapat peringatan ketika hendak menginstall aplikasi tersebut. Namun saya tidak peduli dengan peringatan ini, karena device yg digunakan hanyalah emulator. Ketika selesai diinstall, aplikasi SiCepat palsu ini tidak visible pada App Drawer atau list aplikasi pada home screen, hmm menarik..

Namun ketika dicek pada App List Settings, aplikasi ini terdaftar disana. Berikut adalah tampilan aplikasi ketika dibuka. Tampilan ini sama persis dengan web official SiCepat, tetapi dalam versi mobile web view. Pelaku melakukan ini untuk meyakinkan korban bahwa aplikasi ini asli


Untuk memastikan bahwa aplikasi ini benar-benar mencuri data SMS, saya mengizinkan akses SMS pada aplikasi palsu ini. Lalu saya mulai dynamic analysis dengan mengkonfigurasi Genymotion agar bisa terhubung ke proxy BurpSuite. Tujuannya adalah untuk melakukan intercepting request terhadap traffic yang keluar-masuk device emulator.


Karena permission SMS sudah diizinkan, langsung saja saya coba untuk menerima SMS dummy pada emulator. Untungnya Genymotion menyediakan fitur semacam ini.


Dan ternyata benar. Aplikasi ini benar-benar mencuri data SMS. Ketika emulator menerima pesan SMS dari +994459204720, BurpSuite langsung menerima GET request pada API bot telegram tepat pada waktu yang sama ketika emulator menerima SMS. Header request dan response ketika emulator menerima SMS adalah sebagai berikut.


Setiap SMS yang masuk akan langsung dikirim ke API Telegram, sedangkan data yang dikirimkan ke API adalah pesan SMS dan nomor pengirim SMS. Pada static analysis sempat disinggung bahwa response code API yang diterima adalah 401, hal ini sama persis ketika dilakukan dynamic analysis. Walupun saya menutup aplikasi SiCepat palsu, tetap saja jika ada SMS yang masuk ke device akan dikirimkan ke API tersebut.

Kesimpulan

Setelah saya cek HTTP History di BurpSuite, tidak ada traffic lain yang mencurigakan selain GET request ke API Bot Telegram. Hasil dari static analysis juga menunjukkan hanya ada request ke API Telegram saja jika dilihat pada source code yang ada. Saya telah melakukan hal ini beberapa kali dan memang hanya traffic itu satu-satunya jalan untuk mengirimkan SMS dari korban ke pelaku.

  • Lalu bagaimana pelaku bisa mendapat pesan SMS dari korban jika response yang didapat saja 401: Unauthorized?


Karena peristiwa ini terjadi pada awal tahun 2023, sedangkan saya baru analisis sejak tulisan ini di posting, jadi bisa saja sejak awal ketika kejadian ini terjadi, token API Telegram milik pelaku masih worked dan belum expired. Jika benar seperti itu, kemungkinan besar pelaku bisa mendapatkan tiap SMS yang masuk pada device korban.

  • Apa yang terjadi jika pelaku mendapat tiap SMS yang masuk pada device korban?


Pelaku bisa saja login ke tiap akun e-commerce, sosial media, game, atau aplikasi lainnya. Jika ia tahu username dari akun yang Anda miliki, pelaku hanya perlu melakukan Forgot Password, dan kode OTP akan dikirim ke device korban. Karena device sudah dibajak, maka pelaku bisa dapat kode OTP tersebut, lalu akan mengganti password akun Anda dan berhasil membajak akun Anda.

Dalam situasi terburuk, seperti yang beredar pada berita, korban memang bisa berpotensi kehilangan jutaan uang karena kasus ini. Misalnya jika pelaku ingin mendapat akun rekening dari korban, pelaku tinggal login ke akun media sosial yang dimiliki korban dan mengumpulkan informasi yang terhubung pada sosial media tersebut. Contohnya Account payment, billing information, atau sejenisnya yang biasanya berisi nomor kartu.

Jika sudah dapat nomor kartu, pelaku bisa masuk ke akun m-banking korban dan langsung memilih opsi lupa password. Karena nomor kartu sudah didapat, pelaku hanya perlu menunggu kode OTP yang masuk pada device korban. Lalu pelaku akan dapat OTP tersebut karena device sudah terinfeksi, dan akhirnya akun m-banking korban telah diretas. Kurang lebih begitu gambaran umum tentang cara korban memanfaatkan SMS untuk melakukan account takeover.


  • Jika sudah terinstall tetapi perizinan aplikasi di turn off, apakah tetap berbahaya?


Berdasarkan analisis dinamis yang saya lakukan, jika perizinan dimatikan maka tidak ada permintaan koneksi untuk mengirimkan SMS ke pelaku. Jadi, pelaku tidak akan bisa mencuri data korban jika aplikasi palsu ini tidak diberi izin untuk mengakses SMS. Meskipun demikian tetap saja kita perlu aware terhadap keamanan data pribadi dengan tidak menginstall aplikasi seperti ini.


  • Apakah pelaku hanya bisa mencuri SMS yang diterima korban dari nomor lain? atau bisa juga sebaliknya menerima SMS yang dikirim korban ke nomor lain?


Pelaku bisa mencuri SMS yang diterima korban dari nomor lain, hal ini sudah terbukti dengan step by step yang sudah dijelaskan pada postingan ini. Namun tidak menutup kemungkinan kalau pelaku juga bisa bertindak sebaliknya, yaitu menerima SMS yang dikirim korban ke nomor lain.

Sayangnya, emulator yang saya gunakan tidak bisa mengirim SMS ke nomor lain. Meskipun begitu, hasil dekompilasi pada static analysis menemukan kelas SendSMS yang isi dan cara kerjanya hampir mirip dengan kelas ReceiveSMS.