Hacking 4G LTE Mobile WIFI TP-Link M7000

Banyak Modem WIFI 4G (mobile hotspot) memakai Linux dan bisa dihack, misalnya: IMEI bisa diganti, Band yang aktif bisa dibatasi (agar lebih cepat pencarian signalnya), bisa dibuat agar bisa blokir iklan, dan memberi peringatan (via telegram) agar tidak lupa mematikan devicenya.

Menu custom buatan saya

Sebelum kecewa: saya tidak akan memberikan skrip penggantian IMEI. Ini merupakan hal yang illegal, tapi saya akan memberikan petunjuk mengenai dasar teorinya saja.

WIFI 4G TP Link

Mencari Informasi

Banyak sekali Modem 4G yang bisa dibeli, banyak yang tidak bermerk dari China (atau memiliki merk yang kurang terkenal). Kelebihan membeli benda bermerk adalah: kita bisa mencari informasinya dari nama brand dan modelnya. Untuk informasi modem, ada banyak informasi dari situs Rusia 4pda.to.

Perlu diperhatikan: jika kita tidak mendaftar ke situs 4pda.to, maka kita bisa membaca posting, tapi ketika akan mendownload file attachment, akan muncul 404 (not found). Jika kita sudah mendaftar, maka file-file akan bisa didownload.

Pendaftarannya agak repot karena menggunakan Captcha dengan karakter Cyrillic (Rusia). Bentuknya adalah pengucapan yang harus kita jadikan angka (misalnya jika muncul teks “seribu lima ratus dua belas” maka masukkan 1512).

Captchanya seperti ini

Gunakan fitur kamera Google Translate untuk menjawab captchanya. Mungkin diperlukan beberapa percobaan sampai berhasil.

Bagaimana Andaikan informasi tidak tersedia di internet? biasanya saya akan mencoba-coba hack via software. Kebanyakan router/modem 4G memiliki bug command injection, dan sering memakai user/password default. Lalu jika gagal, saya akan membongkar untuk melihat nomor model di hardware (kadang dari sini bisa ketemu merk lain yang ada bugnya). Berikutnya jika ada port UART, akan saya akses dari situ (misalnya ketika saya melakukan hacking tablet ini), dan terakhir jika flash memorinya memakai SPI, akan saya baca langsung dengan flash reader (seperti ketika saya melakukan reverse engineering pokemon go).

Mengaktifkan telnet

Dari informasi di forum: setelah login ke web admin (192.168.0.1), tekan F12 di console, lalu paste ini. Security modem ini kurang bagus (ada command injection), yang memungkinkan kita memulai telnet daemon (dan kebetulan busyboxnya dicompile dengan support telnetd).

Globals.models.PTModel.add({applicationName: "telnet", enableState: 1, entryId: 1, openPort: "2300-2400", openProtocol: "TCP", triggerPort: "$(busybox telnetd -l /bin/sh )", triggerProtocol: "TCP"})

Sekarang device bisa ditelnet dan kita langsung mendapatkan akses root.

Akses root via telnet

Eksplorasi sistem

Dengan melihat berbagai file standard dan beberapa perintah standard Linux, didapat informasi berikut:

  • SOC nya adalah MDM9207 (dari cat /proc/cpuinfo)
  • Memori 64MB, dan yang tersisa sangat kecil (hasil dari cat /proc/meminfo dan dari free), dan tidak ada swap
  • Versi kernel lama, tidak bisa memakai zram (dari uname -a, dmesg, lsmod, dan find /lib/modules)
  • Flash storagenya 256Mb, dan tersisa beberapa puluh megabyte (ingat, device ini tidak punya sdcard), dan semua partisi sifatnya writable (dari perintah df dan mount)

Karena semua dimount writable, artinya kita bisa memodifikasi file apa saja. Ini merupakan kabar baik, karena kadang modem/router memakai filesystem yang sifatnya read only, dan untuk memodifikasinya, kita harus re-flash firmwarenya.

Kabar buruknya: kalau kita sampai salah memodifikasi/menghapus/menimpa, maka risikonya adalah akan menjadi ganjal pintu (bricked).

Menginstall dropbear

Walau telnet mudah dipakai dan diaktifkam tapi kurang aman (tidak memakai enkripsi). Sebenarnya untuk pemakaian pribadi, risikonya tidak terlalu besar karena hanya yang join WIFI yang sama yang bisa mengakses (kecuali pihak operator seluler tiba-tiba member IPV6 publik tanpa firewall).

Kita bisa menginstall dropbear sebagai ssh client dan server. Ukuran dropbear beberapa ratus kilobyte (sudah semuanya: client, server, scp, keygen). Ada yang sudah mengkompilasi secara statik di sini. Tapi karena CPU lambat dan memori modem ini kecil, menggunakan SSH akan terasa lambat dibanding telnet.

Mengaktifkan adb

Alternatif lain yang cukup aman dan mudah adalah: adb (android debug bridge) melalui USB. Jadi kita bisa mengakses shell hanya jika terhubung secara fisik melalui kabel USB. Kita bisa menjalankan perintah, dan juga menyalin file dengan adb. Koneksinya lebih cepat dari SSH/SCP.

usb_composition

Karena modem saya tidak punya microsd, saya tidak mengaktifkan Mass Storage, hanya ADB dan RNDIS (agar network bisa diakses via USB, tanpa via WIFI).

Setting usb_composition

Blokir iklan

Saya menggunakan Ad blocker di Chrome dan Firefox di PC, di Android yang diroot, saya menggunakan AdAway, di iOS saya memakai Hush. Di jaringan rumah saya memakai dnsmasq + hosts file untuk memblokir iklan.

Perlu dicatat: blokir di sini hanya berdasarkan DNS saja, jadi iklan seperti Youtube akan tetap muncul. Tapi khusus untuk Youtube, kami berlangganan Youtube Premium, jadi tidak menjadi masalah.

Modem ini memakai dnsmasq, jadi cara termudah untuk blokir iklan di level modem adalah mengganti /etc/hosts di modem dengan file yang memblokir iklan (memetakan domain iklan ke 127.0.0.1). Ada banyak sumber file hosts untuk blokir iklan di Internet, misalnya repository ini. Perlu diperhatikan: memory free di modem ini sangat kecil (64Mb) dan tidak punya swap space, jadi jangan gunakan file hosts yang terlalu besar.

Masalah adblocking adalah: beberapa fitur website kadang tidak jalan, atau ada popup yang menghadang (meminta kita mematikan adblocker). Jadi fitur blokir ini perlu bisa dimatikan/nyalakan, solusi untu kini adalah skrip CGI.

Selain blokir iklan, berbagai koneksi dan berbagai port juga bisa diblokir dengan iptables jika dibutuhkan. Teorinya VPN juga bisa dijalankan langsung di modem ini, tapi tidak saya coba karena memori free-nya sangat mepet.

Skrip CGI dengan Perl

Di dalam direktori /WEBSERVER/wwwterdapat direktori cgi-bin. Ini bisa diduga merupakan kumpulan binary Common Gateway Interface, alias skrip yang akan dijalankan untuk menangani request web. Dulu di awal saya belajar membuat aplikasi web (akhir 1990-an), CGI merupakan cara paling populer menangani request web.

Saya memeriksa berbagai direktori untuk mengecek apakah ada interpreter python, php, atau lua, dan semuanya tidak ada. Tapi ternyata ada Perl versi lama (versi 5.20 dari tahun 2014), tanpa modul CGI.pm (yang biasanya dipakai untuk membuat CGI).

Untungnya protokol CGI ini relatif mudah, jadi tanpa library pun, saya bisa membuat aplikasi web sederhana. Saya jadi teringat pernah menulis tutorial Perl di majalah cetak MasterWeb sekitar 22 tahun yang lalu.

Cover majalah MasterWeb edisi 4 tahun 2002
Kenangan pernah menulis tutorial Perl di majalah

Sebelum membuat aplikasi kompleks, mulai dulu dengan hello world, seperti ini:

#!/usr/bin/perl
print "Content-type: text/plain\r\n\r\n";
print "Hello world";

Baris pertama mencetak header HTTP (diakhiri dengan 2 CRLF), dan berikutnya adalah bodynya. Setelah men-chmod filenya, saya coba akses di http://192.168.0.1/cgi-bin/hello, dan hasilnya keluar Hello world.

Setelah berhasil, kita cek lagi: apakah kita berjalan sebagai user root atau user web server? jika sebagai user web server, kita akan butuh melakukan su sebelum melakukan sesuatu sebagai root (jika kita berjalan sebagai root, maka tentunya tidak butuh).

my $username = $ENV{LOGNAME} || $ENV{USER} || getpwuid($<);
print $username;

Ternyata kita berjalan sebagai user root, ini memudahkan banyak hal (dan sekaligus berbahaya kalau membuat kesalahan).

Dasar Teori pengantian IMEI

IMEI dan berbagai informasi yang dibutuhkan modem (misalnya: band mana saja yang perlu discan) disimpan dalam memori Non Volatile (NV). Jika ini diubah, maka IMEI akan berubah (biasanya setelah restart, agar modem membaca lagi konfigurasinya).

Tergantung SOC modemnya, pergantian IMEI ini bisa sangat sulit, dan bisa sangat sederhana. Untuk Qualcomm, kita bisa mendownload program diagcmd dari 4pda (yang sebenarnya adalah modifikasi dari source code ini). Program ini dapat digunakan untuk berkomunikasi dengan bagian modemnya. Kita cukup mengetikkan ./diagcmd <hex numbers> dan akan keluar balasan dari modemnya dalam bentuk heksa juga.

Angka heksa pertama adalah commandnya, kita bisa melihat command apa saja yang diterima modem dari file ini. Contoh sederhana: meminta versi software (DIAG_VERNO_F), atau membaca SMS (DIAG_SMS_READ_F). Untuk menipulasi NV, yang penting di sini adalah perintah DIAG_NV_READ_F (38 desimal atau 26 hex), dan DIAG_NV_WRITE_F (39 desimal atau 27 hex).

Khusus untuk modem Quallcom, NV ini dibagi menjadi banyak alamat (numerik) yang memiliki arti, misalnya string banner informasi ada di lokasi 71 desimal. Daftar yang cukup lengkap bisa dilihat di sini.

Terlihat juga bahwa ada informasi IMEI di alamat 550 desimal (atau dalam heksa: 0x226 . Tentunya ini bisa dibaca, misalnya dengan perintah: diagcmd 26 26 02 (26 pertama artinya DIAG_NV_READ_F, dan alamat 0x226 ditulis dalam big endian sebagai 26 02).

Kalau bisa dibaca, tentu ada kemungkinan bisa ditulisi, dan dalam kasus ini memang bisa. Karena mengganti IMEI merupakan hal yang tidak legal, saya tidak akan memberitahukan detailnya (silakan lihat situs 4pda untuk info lebih lanjut, atau bisa dikira-kira sendiri dari penjelasan saya).

Notifikasi Telegram

Waktu mengoprek modem ini kali pertama, saya sampai lupa kalau tidak dicharge (awalnya saya memakai telnet sebelum memakai adb). Setelah itu saya lupa mematikan setelah jalan-jalan, jadinya hampir habis batere. Supaya tidak kejadian lagi, sekarang modemnya akan memberi notifikasi ke telegram ketika posisinya menyala, dan tidak dicharge.

Program kecil semacam ini bisa ditulis dalam apa saja, tapi karena ingin menghemat space dan memori, saya tuliskan ini dalam C (tapi untuk mengirimkan ke telegram, saya memanggil curl). Compiler yang saya pakai adalah gcc dari Linaro.

Di modem ini defaultnya tidak ada cron, jadi programnya hanya sleep 15 menit, memeriksa status batere, lalu mengirimkan pesan.

Jadi selama modem masih hidup, saya akan mendapatkan pesan dari telegram tiap 15 menit. Jadi jika sudah di rumah dan masih menerima status modem, berarti saya belum mematikan devicenya.

Penutup

Saya masih suka menghack berbagai benda yang saya pakai sehari-hari, walau tidak semuanya saya tuliskan di blog. Hack seperti yang saya tuliskan di posting ini tidak rumit, hanya butuh waktu untuk searching internet, dan semuanya berbasis software saja. Tidak seperti ketika saya memodifikasi router WRT54GL (17 tahun yg lalu) dan Router D-LINK DIR-300 (14 tahun yang lalu) yang keduanya butuh menyolder .

Semoga postingnya bisa menginsiprasi untuk menghack modem 4G yang dimiliki.

Satu tanggapan pada “Hacking 4G LTE Mobile WIFI TP-Link M7000”

  1. Saya tidak memahami apa yang anda tulis, tapi saya tetap membacanya sampai akhir. Terimakasih untuk ilmu yang semoga nanti bermanfaat bagi saya.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.