Man-in-the-Middle (MITM) — serangan "manusia di tengah", di mana penjahat cyber menyadap, membaca atau mengubah lalu lintas antara dua pihak tanpa sepengetahuan mereka. Menurut data Kaspersky, 2025, jumlah serangan MITM pada perangkat seluler meningkat 35% dalam dua tahun terakhir. Masalah utama penyadapan lalu lintas adalah bahwa pengguna tidak melihat tanda-tanda serangan — koneksi terlihat normal.
Poin Utama
Man-in-the-Middle (MITM) — jenis serangan cyber di mana penjahat cyber diam-diam menyusup ke saluran komunikasi antara dua pihak. Penjahat cyber dapat menyadap, membaca, dan memodifikasi data yang dikirimkan, tetap tidak terlihat oleh kedua pihak.
Di aplikasi seluler, serangan MITM sangat berbahaya karena perangkat terus-menerus terhubung ke berbagai jaringan — rumah, kantor, Wi-Fi publik di kafe dan bandara. Setiap pergantian jaringan berpotensi menciptakan celah untuk serangan. Menurut Verizon Mobile Security Index (2025), 43% organisasi setidaknya pernah mengalami serangan MITM pada perangkat seluler perusahaan.
Bahaya utama MITM — kerahasiaan: pengguna dan server tidak menerima sinyal tentang penyadapan. Sesi terlihat normal, data dikirimkan, tidak ada kesalahan sertifikat (jika penyerang menggunakan sertifikatnya sendiri). Deteksi serangan hanya mungkin dilakukan di tingkat infrastruktur jaringan atau dengan alat khusus.
Pengembang harus memahami mekanisme serangan MITM untuk merancang perlindungan di tingkat aplikasi, tidak hanya mengandalkan keamanan lapisan transportasi.
Klasifikasi serangan MITM mencakup beberapa jenis yang berbeda dalam metode penyusupan ke saluran komunikasi. Dalam pengembangan seluler, tiga jenis paling relevan.
ARP Spoofing — teknik di mana penyerang mengirimkan paket ARP palsu ke jaringan lokal, menghubungkan alamat MAC-nya dengan alamat IP gateway. Setelah itu, semua lalu lintas korban diarahkan melalui perangkat penyerang, yang meneruskannya ke gateway, tetap tidak terlihat.
Untuk melakukan serangan, alat seperti Ettercap atau BetterCAP yang mengotomatiskan ARP-spoofing sudah cukup. Serangan hanya mungkin dilakukan dalam satu subnet, sehingga pengguna jaringan Wi-Fi publik paling rentan. Jaringan modern dengan inspeksi ARP dinamis (DAI) pada switch terkelola memblokir jenis serangan ini.
Perlindungan di tingkat aplikasi dari ARP Spoofing tidak mungkin — ini masalah infrastruktur jaringan. Namun, aplikasi dapat mendeteksi anomali dalam koneksi jaringan dengan bantuan perpustakaan seperti TrustKit untuk iOS atau Network Security Config untuk Android.
DNS Spoofing (atau DNS Cache Poisoning) — pemalsuan catatan DNS di jalan dari klien ke server DNS. Penyerang menyadap permintaan DNS aplikasi dan mengembalikan alamat IP palsu, mengarahkan lalu lintas ke servernya sendiri alih-alih ke server yang sah.
Serangan sangat efektif di jaringan publik di mana server DNS ditetapkan secara otomatis melalui DHCP. Penyerang dapat mengkonfigurasi server DNS sendiri yang mengembalikan alamat IP palsu untuk domain target. Pengguna melihat URL yang sah di browser, tetapi terhubung ke server penyerang.
Perlindungan dari DNS Spoofing di sisi aplikasi dilakukan melalui DNS-over-HTTPS (DoH) atau DNS-over-TLS (DoT), yang mengenkripsi permintaan DNS. Android 9+ dan iOS 14+ mendukung DoH sistem, aplikasi dapat secara eksplisit mengaktifkan opsi ini.
SSL Stripping — serangan di mana penyerang menurunkan koneksi HTTPS yang aman menjadi HTTP yang tidak aman. Teknik ini mengeksploitasi fakta bahwa banyak pengguna secara manual mengetik example.com alih-alih https://example.com, dan koneksi pertama dibuat melalui HTTP.
Alat seperti sslstrip (Moxie Marlinspike, 2009) dan bettercap secara otomatis menyadap permintaan HTTP, membuat koneksi HTTPS dengan server atas nama mereka sendiri, dan mengirimkan lalu lintas yang didekripsi ke klien melalui HTTP. Browser tidak menampilkan ikon gembok — pengguna tidak tahu bahwa koneksi tidak aman.
Perlindungan modern — HTTP Strict Transport Security (HSTS): server memberi tahu browser bahwa semua koneksi masa depan harus melalui HTTPS. HSTS Preload List juga melindungi dari serangan pertama, tetapi memerlukan pendaftaran domain sebelumnya.
Serangan MITM tipikal pada aplikasi seluler melalui empat tahap. Setiap tahap menggunakan kerentanan yang berbeda, dan untuk perlindungan penuh, semua vektor harus diblokir.
Tahap pertama — penyusupan: penyerang berada di jalur lalu lintas antara perangkat dan server. Ini bisa berupa ARP Spoofing di jaringan lokal, titik Wi-Fi palsu (Evil Twin), atau kompromi server DNS penyedia. Perangkat seluler sangat rentan saat terhubung secara otomatis ke jaringan terbuka.
Tahap kedua — penyadapan: setelah penyusupan, penyerang mulai membaca semua paket yang dipertukarkan aplikasi dan server. Pada tahap ini, ia mengumpulkan metadata: URL permintaan, ukuran paket, cookie, header. Bahkan jika data dienkripsi, metadata dapat mengungkapkan struktur aplikasi dan logika bisnis.
Tahap ketiga — dekripsi (jika lalu lintas dienkripsi): penyerang membuat dua koneksi TLS — satu dengan server (menggunakan sertifikat palsu), satu dengan klien. Aplikasi menganggap koneksi aman, tetapi penyerang melihat semua data dalam bentuk terbuka. Tanpa Certificate Pinning, ini berfungsi untuk sertifikat apa pun yang diinstal di penyimpanan sistem.
Tahap keempat — modifikasi dan eksfiltrasi: penyerang tidak hanya dapat membaca, tetapi juga memodifikasi data yang dikirimkan. Di aplikasi keuangan, ini dapat berarti mengubah nomor rekening penerima, di permintaan API — mengubah parameter otorisasi. iOS dan Android merekomendasikan implementasi pemeriksaan integritas respons di tingkat aplikasi.
Mari kita lihat contoh praktis perlindungan dari serangan MITM menggunakan Certificate Pinning di Kotlin dan Swift. Contoh-contoh ini memblokir penggantian sertifikat bahkan dengan penyimpanan sistem yang dikompromikan.
OkHttp — perpustakaan HTTP standar untuk Android yang mendukung CertificatePinner. Tentukan hash SHA-256 sertifikat server Anda — sertifikat lain akan ditolak.
import okhttp3.CertificatePinner
import okhttp3.OkHttpClient
val certificatePinner = CertificatePinner.Builder()
.add(
"api.example.com",
"sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
)
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
Di iOS, gunakan URLSessionDelegate untuk verifikasi manual sertifikat server. Bandingkan SecCertificateRef dengan salinan yang disimpan secara lokal.
class SessionDelegate: NSObject, URLSessionDelegate {
func urlSession(
_ session: URLSession,
didReceive challenge: URLAuthenticationChallenge,
completionHandler: @escaping (
URLSession.AuthChallengeDisposition,
URLCredential?
) -> Void
) {
guard let serverTrust = challenge.protectionSpace
.serverTrust else { return }
let pinnedCert = SecCertificateCreateWithData(
nil,
pinnedCertData as CFData
)
let serverCerts = (0..<SecTrustGetCertificateCount(serverTrust))
.compactMap { SecTrustGetCertificateAtIndex(serverTrust, $0) }
if serverCerts.contains { CFEqual($0, pinnedCert) } {
completionHandler(.useCredential, URLCredential(trust: serverTrust))
} else {
completionHandler(.cancelAuthenticationChallenge, nil)
}
}
}
Android mendukung perlindungan deklaratif melalui file XML network_security_config.xml, yang memblokir lalu lintas di tingkat OS tanpa menulis kode.
<!-- network_security_config.xml -->
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">api.example.com</domain>
<pin-set expiration="2027-07-01">
<pin digest="SHA-256">AAAAAAAAAAAAAAAAAAAAAAAAAAAA</pin>
</pin-set>
</domain-config>
</network-security-config>
Perlindungan komprehensif dari serangan MITM mencakup langkah-langkah di tingkat aplikasi, server, dan infrastruktur jaringan. Di bawah ini adalah rekomendasi utama untuk Android dan iOS.
Gunakan Certificate Pinning — pengikatan sertifikat server dalam kode aplikasi. Berbeda dengan verifikasi TLS standar yang mempercayai sertifikat apa pun dari penyimpanan sistem, Certificate Pinning memeriksa sertifikat tertentu atau kunci publiknya. OkHttp di Android dan TrustKit di iOS menyediakan implementasi siap pakai dari mekanisme ini.
Paksakan HTTPS dan HSTS: semua permintaan jaringan harus melalui HTTPS, dan server harus mengembalikan header Strict-Transport-Security. Untuk Android, tambahkan android:usesCleartextTraffic="false" ke manifes — ini melarang koneksi HTTP di tingkat OS. iOS secara default melarang HTTP sejak iOS 9 melalui App Transport Security (ATS).
Implementasikan pemeriksaan integritas respons: tandatangani respons server dengan tanda tangan digital yang diperiksa aplikasi. Bahkan jika penyerang menyadap lalu lintas HTTPS (melalui proxy dengan instalasi ulang sertifikat), ia tidak dapat memalsukan tanda tangan tanpa kunci privat server. Gunakan JWT dengan RS256 atau tanda tangan HMAC untuk operasi kritis.
Di sisi server, aktifkan HTTP Public Key Pinning (HPKP) — direktif yang memberi tahu browser atau aplikasi sertifikat mana yang dianggap valid untuk domain tertentu. Namun, HPKP memerlukan kehati-hatian: konfigurasi yang salah dapat memblokir akses ke aplikasi untuk waktu yang lama. Google merekomendasikan penggunaan HPKP hanya dalam kombinasi dengan sertifikat cadangan.
Menurut NIST SP 800-52 Rev. 2 (2024), kombinasi TLS 1.3, Certificate Pinning dan HSTS menghilangkan 99% vektor serangan MITM yang diketahui pada aplikasi seluler. Pengembang disarankan untuk menguji perlindungan dengan alat seperti mitmproxy sebelum mempublikasikan aplikasi.
Pertanyaan yang Sering Diajukan
Tanda-tanda serangan MITM meliputi perlambatan koneksi yang tiba-tiba, peringatan tentang sertifikat yang tidak tepercaya (yang sebelumnya tidak ada), ketidakcocokan URL dan konten halaman. Di aplikasi seluler — kesalahan Network Security Config atau aktivasi Certificate Pinning.
VPN mengenkripsi lalu lintas hingga server VPN, yang melindungi dari penyadapan di jaringan lokal. Namun, VPN tidak melindungi jika penyerang mengontrol server VPN, atau jika serangan MITM terjadi di sisi penyedia. Certificate Pinning di tingkat aplikasi tetap menjadi metode yang lebih andal.
Evil Twin — titik Wi-Fi palsu yang meniru jaringan yang sah (misalnya, "Airport_Free_WiFi"). Ini bukan jenis MITM yang terpisah, tetapi metode penyusupan: dengan terhubung ke Evil Twin, pengguna secara otomatis menjadi korban serangan MITM, karena semua lalu lintas melewati penyerang.
Certificate Pinning meningkatkan keamanan, tetapi memerlukan pembaruan aplikasi saat sertifikat server berubah. Disarankan untuk menentukan tidak hanya satu, tetapi beberapa sertifikat cadangan (backup pins). Saat sertifikat utama kedaluwarsa, aplikasi akan menggunakan sertifikat cadangan tanpa perlu pembaruan.
Alat paling populer: mitmproxy — penyadapan dan modifikasi lalu lintas HTTP/HTTPS, BetterCAP — ARP spoofing dan penyadapan di jaringan lokal, Wireshark — analisis paket, sslstrip — penurunan HTTPS ke HTTP. Pengetahuan tentang alat-alat ini membantu pengembang menguji perlindungan aplikasi mereka.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga