Man-in-the-Middle (MITM) — saldırganın iki taraf arasındaki trafiği onların bilgisi olmadan dinlediği, okuduğu veya değiştirdiği bir “ortadaki adam” saldırısıdır. Kaspersky, 2025'e göre, mobil cihazlara yönelik MITM saldırılarının sayısı son iki yılda %35 arttı. Trafik dinlemesinin temel sorunu, kullanıcının saldırı belirtisi görmemesidir — bağlantı normal görünür.
Önemli Noktalar
Man-in-the-Middle (MITM), saldırganın iki taraf arasındaki iletişim kanalına gizlice sızdığı bir siber saldırı türüdür. Saldırgan, her iki taraf için de görünmez kalarak iletilen verileri dinleyebilir, okuyabilir ve değiştirebilir.
Mobil uygulamalarda MITM saldırıları özellikle tehlikelidir çünkü cihazlar sürekli olarak çeşitli ağlara bağlanır — ev, ofis, kafelerde ve havalimanlarında genel Wi-Fi. Her ağ değişimi potansiyel olarak saldırı için bir pencere oluşturur. Verizon Mobile Security Index (2025)'e göre, kuruluşların %43'ü en az bir kez kurumsal mobil cihazlarda MITM saldırılarıyla karşılaşmıştır.
MITM'nin ana tehlikesi gizliliktir: kullanıcı ve sunucu dinleme sinyali almaz. Oturum normal görünür, veriler iletilir, sertifika hatası yoktur (saldırgan kendi sertifikasını kullanıyorsa). Saldırı yalnızca ağ altyapısı düzeyinde veya özel araçlarla tespit edilebilir.
Bir geliştiricinin, yalnızca taşıma katmanı güvenliğine güvenmek yerine uygulama düzeyinde koruma tasarlamak için MITM saldırı mekanizmalarını anlaması gerekir.
MITM saldırılarının sınıflandırması, iletişim kanalına sızma yöntemine göre farklılık gösteren birkaç tür içerir. Mobil geliştirmede, üç tür en önemlisidir.
ARP Spoofing, saldırganın yerel ağa sahte ARP paketleri göndererek kendi MAC adresini ağ geçidinin IP adresiyle ilişkilendirdiği bir tekniktir. Bundan sonra, mağdurun tüm trafiği, görünmez kalarak ağ geçidine ileten saldırganın cihazı üzerinden yönlendirilir.
Saldırıyı gerçekleştirmek için ARP sahteciliğini otomatikleştiren Ettercap veya BetterCAP gibi araçlar yeterlidir. Saldırı yalnızca tek bir alt ağ içinde mümkündür, bu da genel Wi-Fi ağı kullanıcılarını en savunmasız hale getirir. Yönetilen anahtarlarda Dynamic ARP Inspection (DAI) ile modern ağlar bu tür saldırıyı engeller.
ARP Spoofing'ten uygulama düzeyinde korumak mümkün değildir — bu bir ağ altyapısı sorunudur. Ancak uygulama, iOS için TrustKit veya Android için Network Security Config gibi kitaplıkları kullanarak ağ bağlantısındaki anormallikleri tespit edebilir.
DNS Spoofing (veya DNS önbellek zehirleme), istemciden DNS sunucusuna giden yolda DNS kayıtlarının değiştirilmesidir. Saldırgan, uygulamanın DNS isteğini dinler ve sahte bir IP adresi döndürerek trafiği meşru sunucu yerine kendi sunucusuna yönlendirir.
Saldırı, DNS sunucusunun DHCP aracılığıyla otomatik olarak atandığı genel ağlarda özellikle etkilidir. Saldırgan, hedef alan adları için sahte IP adresleri döndüren kendi DNS sunucusunu kurabilir. Kullanıcı tarayıcıda meşru bir URL görür ancak saldırganın sunucusuna bağlanır.
DNS Spoofing'ten uygulama tarafında koruma, DNS sorgularını şifreleyen DNS-over-HTTPS (DoH) veya DNS-over-TLS (DoT) aracılığıyla uygulanır. Android 9+ ve iOS 14+ sistem düzeyinde DoH'yi destekler ve uygulama bu seçeneği açıkça etkinleştirebilir.
SSL Stripping, saldırganın güvenli bir HTTPS bağlantısını güvensiz HTTP'ye düşürdüğü bir saldırıdır. Teknik, birçok kullanıcının https://example.com yerine manuel olarak example.com yazması ve ilk bağlantının HTTP üzerinden kurulması gerçeğini kullanır.
sslstrip (Moxie Marlinspike, 2009) ve bettercap gibi araçlar otomatik olarak HTTP isteklerini dinler, kendi adlarına sunucuyla HTTPS bağlantısı kurar ve şifresi çözülmüş trafiği HTTP üzerinden istemciye iletir. Tarayıcı kilit simgesini göstermez — kullanıcı bağlantının güvenli olmadığını bilmez.
Modern koruma — HTTP Strict Transport Security (HSTS): sunucu, tarayıcıya tüm gelecekteki bağlantıların yalnızca HTTPS kullanması gerektiğini bildirir. HSTS Preload List ayrıca ilk saldırıya karşı da korur, ancak alan adının önceden kaydedilmesini gerektirir.
Bir mobil uygulamaya yönelik tipik bir MITM saldırısı dört aşamadan geçer. Her aşama farklı güvenlik açıklarını kullanır ve tam koruma için tüm vektörlerin kapsanması gerekir.
Birinci aşama — sızma: saldırgan, cihaz ve sunucu arasındaki trafik yoluna yerleşir. Bu, yerel ağda ARP Spoofing, sahte bir Wi-Fi erişim noktası (Evil Twin) veya sağlayıcının DNS sunucusunun ele geçirilmesi olabilir. Mobil cihazlar, açık ağlara otomatik olarak bağlandıklarında özellikle savunmasızdır.
İkinci aşama — dinleme: sızmadan sonra, saldırgan uygulama ve sunucu arasında değiş tokuş edilen tüm paketleri okumaya başlar. Bu aşamada meta veri toplar: istek URL'leri, paket boyutları, çerezler, başlıklar. Veriler şifrelenmiş olsa bile, meta veri uygulama yapısını ve iş mantığını ortaya çıkarabilir.
Üçüncü aşama — şifre çözme (trafik şifrelenmişse): saldırgan iki TLS bağlantısı kurar — biri sunucuyla (sahte sertifika kullanarak), diğeri istemciyle. Uygulama bağlantıyı güvenli olarak görür, ancak saldırgan tüm verileri düz metin olarak görür. Certificate Pinning olmadan, bu sistem deposunda yüklü herhangi bir sertifika için çalışır.
Dördüncü aşama — değiştirme ve sızdırma: saldırgan yalnızca iletilen verileri okumakla kalmaz, aynı zamanda değiştirebilir. Finansal uygulamalarda bu, alıcının hesap numarasını değiştirmek anlamına gelebilir; API isteklerinde, yetkilendirme parametrelerini değiştirmek. iOS ve Android, uygulama düzeyinde yanıt bütünlüğü kontrolleri uygulamayı önerir.
Kotlin ve Swift'te Certificate Pinning kullanarak MITM saldırılarına karşı korumanın pratik örneklerine bakalım. Bu örnekler, sistem deposu ele geçirilmiş olsa bile sertifika değişimini engeller.
OkHttp, CertificatePinner'ı destekleyen Android için standart HTTP kitaplığıdır. Sunucunuzun sertifikasının SHA-256 hash'ini belirtin — diğer tüm sertifikalar reddedilecektir.
import okhttp3.CertificatePinner
import okhttp3.OkHttpClient
val certificatePinner = CertificatePinner.Builder()
.add(
"api.example.com",
"sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
)
.build()
val client = OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build()
iOS'ta, sunucu sertifikasını manuel olarak doğrulamak için URLSessionDelegate kullanın. SecCertificateRef'i yerel olarak saklanan bir kopyayla karşılaştırın.
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, kod yazmadan işletim sistemi düzeyinde trafiği engelleyen network_security_config.xml dosyası aracılığıyla bildirimsel korumayı destekler.
<!-- 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>
MITM saldırılarına karşı kapsamlı koruma, uygulama, sunucu ve ağ altyapısı düzeyinde önlemler içerir. Aşağıda Android ve iOS için ana öneriler bulunmaktadır.
Certificate Pinning kullanın — uygulama kodunda sunucu sertifikasını bağlama. Sistem deposundaki herhangi bir sertifikaya güvenen standart TLS doğrulamasının aksine, Certificate Pinning belirli bir sertifikayı veya açık anahtarını kontrol eder. Android'de OkHttp ve iOS'ta TrustKit, bu mekanizmanın hazır uygulamalarını sağlar.
HTTPS ve HSTS'yi zorunlu kılın: tüm ağ istekleri HTTPS üzerinden gitmeli ve sunucu Strict-Transport-Security başlığını döndürmelidir. Android için manifest dosyasına android:usesCleartextTraffic="false" ekleyin — bu, işletim sistemi düzeyinde HTTP bağlantılarını engeller. iOS, iOS 9'dan itibaren App Transport Security (ATS) aracılığıyla varsayılan olarak HTTP'yi engeller.
Yanıt bütünlüğü kontrolleri uygulayın: sunucu yanıtlarını, uygulamanın doğruladığı dijital imzayla imzalayın. Bir saldırgan HTTPS trafiğini dinlese bile (sertifika yeniden yükleme ile proxy üzerinden), sunucunun özel anahtarı olmadan imzayı taklit edemez. Kritik işlemler için RS256 veya HMAC imzalı JWT kullanın.
Sunucu tarafında, HTTP Public Key Pinning (HPKP)'i etkinleştirin — tarayıcıya veya uygulamaya belirli bir alan adı için hangi sertifikanın geçerli sayılacağını söyleyen bir yönerge. Ancak HPKP dikkat gerektirir: yanlış yapılandırma, uygulamaya erişimi uzun süre engelleyebilir. Google, HPKP'yi yalnızca yedek sertifikalarla birlikte kullanmayı önerir.
NIST SP 800-52 Rev. 2 (2024)'ye göre, TLS 1.3, Certificate Pinning ve HSTS kombinasyonu, mobil uygulamalardaki bilinen MITM saldırı vektörlerinin %99'unu ortadan kaldırır. Geliştiricilerin, uygulamayı yayınlamadan önce mitmproxy gibi araçlarla korumayı test etmeleri önerilir.
Sıkça Sorulan Sorular
MITM saldırısının belirtileri arasında ani bağlantı yavaşlaması, güvenilmeyen sertifika uyarıları (daha önce olmayan), URL ile sayfa içeriği arasında uyuşmazlık bulunur. Mobil uygulamalarda — Network Security Config hataları veya Certificate Pinning'in tetiklenmesi.
VPN, VPN sunucusuna kadar trafiği şifreler ve bu da yerel ağda dinlemeye karşı korur. Ancak VPN, saldırgan VPN sunucusunu kontrol ediyorsa veya MITM saldırısı sağlayıcı tarafında gerçekleşiyorsa korumaz. Uygulama düzeyinde Certificate Pinning daha güvenilir bir yöntem olmaya devam eder.
Evil Twin, meşru bir ağı taklit eden sahte bir Wi-Fi erişim noktasıdır (örneğin, “Airport_Free_WiFi”). Bu, MITM'nin ayrı bir türü değil, bir sızma yöntemidir: Evil Twin'e bağlanarak, tüm trafik saldırgandan geçtiği için kullanıcı otomatik olarak MITM saldırısının kurbanı olur.
Certificate Pinning güvenliği artırır ancak sunucu sertifikası değiştiğinde uygulamanın güncellenmesini gerektirir. Bir değil, birden fazla yedek sertifika (backup pins) belirtilmesi önerilir. Birincil sertifikanın süresi dolduğunda, uygulama güncelleme gerektirmeden bir yedek kullanacaktır.
En popüler araçlar: mitmproxy — HTTP/HTTPS trafiğini dinleme ve değiştirme, BetterCAP — ARP sahteciliği ve yerel ağda dinleme, Wireshark — paket analizi, sslstrip — HTTPS'den HTTP'ye düşürme. Bu araçları bilmek, geliştiricilerin uygulamalarının korumasını test etmesine yardımcı olur.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun