Siber Savaş Akademisi 2025 Yılı Staj Başvuruları Açıldı!
Deep link, mobil uygulamalar içerisinde belirli bir sayfa, içerik veya etkinliği doğrudan açmak üzere tasarlanmış özel URL adresleridir. Bu linkler sayesinde, kullanıcılar bir bağlantıya tıkladıklarında uygulama içerisindeki belirlenmiş konuma otomatik olarak yönlendirilirler.
Örneğin, bir linke tıkladığımızda ekranda “Bu sayfayı uygulamada açmak ister misiniz?” uyarısı görmemiz, aslında bir deep link yönlendirmesinin aktif olduğunu gösterir. Deep link’ler, web sayfası açılışlarının aksine, kullanıcıları doğrudan uygulama içerisindeki spesifik içeriklere veya etkinliklere yönlendirmeyi amaçlar. Örneğin, MainActivity’i başlatmak için example://myapp şeklinde bir deep link kullanılabilir.
Deep link URL’sine tıklandığında, öncelikle uygulamanın cihazda yüklü olup olmadığı kontrol edilir:
Android ekosisteminde iki temel deep link türü bulunmaktadır:
Belirli bir URL şeması (URI scheme) içeren, ancak doğrudan hangi aktivitenin açılacağını belirtmeyen bağlantılardır. Uygulama, gelen URI verisini analiz ederek ilgili ekranı kendi içinde belirler.
Bir e-ticaret uygulaması düşünelim ve adı Privia olsun. Privia‘da belirli bir ürün sayfasına yönlendirme yapmak için aşağıdaki gibi bir Implicit Deep Link oluşturulabilir;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("privia://product/14226"));
Belirli bir aktiviteye doğrudan yönlendirme yapan bağlantılardır. Açılacak aktivite önceden belirlenmiştir ve doğrudan bir sınıf referansı (Activity) içerir.
Privia uygulamasındaki belirli bir ürün sayfasını doğrudan açmak için aşağıdaki şekilde bir Explicit Deep Link tanımlanabilir:
Intent intent = new Intent(this, ProductActivity.class);
intent.setData(Uri.parse("privia://product/14226"));
startActivity(intent);
Deep Linkler, doğru yapılandırılmadıklarında uygulamalar için çeşitli güvenlik riskleri oluşturabilirler. Bazı yaygın güvenlik açıklıkları ve bunların etkilerini inceleyelim:
Link Hijacking, kötü amaçlı bir uygulama, başka bir uygulamaya ait deep linkleri yakalayarak müdahalede bulunabilir. Bu durumda, kullanıcılar farkında olmadan kötü niyetli uygulamanın kontrolüne geçer.
Link Hijacking, Phishing saldırılarına zemin hazırlayabilir. Örneğin, kullanıcıya gerçek bir uygulama gibi görünen sahte bir oturum açma ekranı sunabilir. Kullanıcı, sahte ekranda oturum açmaya çalıştığında hassas bilgiler kötü niyetli kişilerin eline geçmiş olur.
Örnek Senaryo:
Banka uygulamasına ait bir deep link’in kötü niyetli bir uygulama tarafından ele geçirildiğini düşünelim. Kullanıcı, “Bankayı uygulamada aç” linkine tıkladığında, gerçek banka uygulaması yerine sahte oturum açma ekranı gösterilir. Bu sahte ekran, bankanın gerçek tasarımına benzetilir ve kullanıcı bu durumda giriş yaparken bilgilerini kötü niyetli kişilere kaptırmış olur.
Deep Linkler, authentication tokenları gibi hassas verileri iletebilirler. Eğer Deep Linkler uygun şekilde güvence altına alınmazsa, bir saldırgan bu verileri ele geçirebilir ve kullanıcının hesabına yetkisiz erişim sağlayabilir.
Örnek Senaryo:
Bir e-ticaret uygulamasında, kullanıcının sepetindeki ödemeyi tamamlaması için deep link kullanılarak ödeme token’ı gönderildiğini varsayalım. Eğer bu token, ağ üzerinden şifrelenmeden gönderiliyorsa, kötü niyetli bir saldırgan bu tokenı ele geçirerek kullanıcının hesabı üzerinden sahte işlemler gerçekleştirebilir.
Yanlış yapılandırılmış deep linkler, Traffic Hijacking saldırılarına neden olabilir. Bu saldırılarda, bazı uygulamalar popüler uygulamalara ait URL şemalarını kaydederek, kullanıcıları kendi uygulamalarına yönlendirebilir.
Örnek Senaryo:
Örneğin, bir sosyal medya uygulamasının socialapp:// şeklinde tanımlı linkleri varsa, kötü niyetli bir geliştirici aynı şemayı kullanarak sahte bir uygulama oluşturabilir. Kullanıcı, bir paylaşım bağlantısına tıkladığında, gerçek sosyal medya uygulaması yerine sahte uygulama açılır.
Zafiyetli bir mobil uygulama olan InsecureShop.apk dosyasını yükleyerek, Deep Link zafiyetlerini daha iyi anlayabiliriz. İlgili uygulamayı indirmek için aşağıdaki repoyu kullanabilirsiniz:
https://github.com/optiv/InsecureShop
Deep Link zafiyetlerini tespit edebilmek için öncelikle uygulamanın statik analizini gerçekleştirmemiz gerekir. Bu analizde, APK dosyasının içeriğine erişebilmek amacıyla Jadx aracını kullanacağız.
Jadx ile APK dosyasını açtıktan sonra, uygulama izinlerinin ve bileşenlerinin tanımlandığı AndroidManifest.xml dosyasını inceleyelim. Bu dosyada scheme, host ve path gibi parametrelerin tanımlandığı Intent Filter öğeleri deep link zafiyetleri için önemlidir.
XML dosyası incelendiğinde, WebViewActivity için scheme ve host değerlerinin tanımlandığı, ancak path parametresinin belirtilmediğini görmekteyiz. Bu eksiklik, aktiviteyi çağırırken gönderilen parametreler üzerinde yeterli kontrol yapılmaması durumunda açık yönlendirme (open redirect) veya diğer Deep Link zafiyetlerine yol açabilir.
WebViewActivity içerisinde yer alan ayarlar uygulamanın güvenliğini doğrudan etkileyebilir. Kod yapısı incelendiğinde “setJavaScriptEnabled(true)” ve “setAllowUniversalAccessFromFileURLs(true)” değerlerinin etkinleştirildiğini görüyoruz.
setJavaScriptEnabled(true): WebView’a JavaScript çalıştırmayı etkinleştirmesini söyler. Ancak, uygun şekilde yapılandırılmazsa Cross-Site Scripting (XSS) gibi saldırılara yol açabilir.
setAllowUniversalAccessFromFileURLs(true): Bu yöntem API seviyesi 30’da kullanımdan kaldırılmıştır. Normalde çalıştırılan bir JavaScript sadece ilgili dosyayla ilgili kaynaklara erişmelidir. Ancak “setAllowUniversalAccessFromFileURLs(true)” ayarı açıkken ilgili dosya dışında diğer dosyalara ve internetteki her şeye erişebilir hale gelir.
İlgili kod incelendiği zaman;
Uygulamanın zayıf noktası, endsWith tabanlı alan adı doğrulamasının saldırganlar tarafından kolayca yanıltılabilmesidir. “endsWith$default(queryParameter, “insecureshopapp.com”)” gibi kontrolün yüzeysel olması saldırganın URL sonuna “insecureshopapp.com” ekleyerek istenen herhangi bir sayfaya yönlendirme yapmasına sebep olur. Burada uygulama yalnızca son ek kontrolü yaptığı için, uygulama bağlantıyı güvenilir kabul eder ve WebView içerisine yükler.
Statik analizle belirlediğimiz deep link zafiyetini exploit ederek, bu zafiyetin nasıl kötüye kullanılabileceğini inceleyelim. Burada amaç, kullanıcının insecureshop uygulaması içerisinde kampanya sayfası yerine, belirlenen sayfaya yönlendirilmesidir.
Kampanyadan yararlanmak için görsele tıklayan kullanıcımız insecureshop uygulamasına yönlendirilir. Ancak uygulama içerisinde saldırganın yönlendirmek istediği zararlı sayfa açılır.
Saldırıyı daha hızlı ve pratik bir şekilde simüle etmek için ADB (Android Debug Bridge) kullanarak deep link’i tetikleyebiliriz. Bu yöntem, deep link üzerinden gönderilen parametrenin manipüle edilerek uygulamanın zafiyetli kod parçasını çalıştırmasını sağlar.
Örnek saldırımızı gerçekleştirmek için aşağıdaki ADB komutunu kullanabiliriz:
adb shell am start -W -a android.intent.action.VIEW -d "insecureshop://com.insecureshop/web?url=https://priviasecurity.com"
Yazar: Ayşenur Bayram
Bunlar İlginizi Çekebilir