Duyuru

Siber Savaş Akademisi 2025 Yılı Staj Başvuruları Açıldı!

BAŞVUR BAŞVUR

Mobil Uygulamalarda Deep Link Zafiyetleri Nedir? Nasıl Gerçekleşir?

Mobil Uygulamalarda Deep Link Zafiyetleri Nedir? Nasıl Gerçekleşir?

Deep Link Nedir?

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:

Mobil Uygulamalarda Kullanılan Deep Link Çeşitleri

Android ekosisteminde iki temel deep link türü bulunmaktadır:

Implicit (Örtük) Deep Link

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.

  1. Örnek Senaryo:

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"));
  1. Çalışma Prensibi:
  2. Kullanıcı privia://product/14226 URL’sine tıkladığında, sistem bu URL’yi Privia uygulamasına bir Intent olarak iletir.
  3. Privia uygulaması, URL içerisindeki ürün ID’sini (14226) alır ve ilgili sayfayı açar.
  4. Açılacak aktivite, URL parametrelerine göre belirlenir.

Explicit (Açık) Deep Link

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.

  1. Örnek Senaryo:

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);
  1. Çalışma Prensibi:
  2. privia://product/14226 URI’si, doğrudan ProductActivity bileşenine yönlendirme yapar.
  3. Privia uygulaması yüklü değilse, bağlantı çalışmaz ve kullanıcı uygulama mağazasına yönlendirilerek uygulamanın yüklenmesi sağlanabilir.

Deep Link Güvenlik Açıkları ve Etkileri

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 ve Phishing

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.

Data Interception

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.

Traffic Hijacking

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.

Deep Link Exploitation

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

Statik Analiz

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.

AndroidManifest.xml İncelemesi

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.

Şekil 1: AndroidManifest.xml Dosyasının İncelenmesi
Şekil 1: AndroidManifest.xml Dosyasının İncelenmesi

WebViewActivity ve Güvenlik Ayarları

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.

Şekil 1: WebViewActivity’nin İncelenmesi

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.

Şekil 1: WebViewActivity’nin incelenmesi 2

İlgili kod incelendiği zaman;

  1. Uygulama, Intent nesnesinden alınan URL’yi sorgulayarak /web veya /webview yollarına göre farklı işlemler gerçekleştirmektedir. Örneğin, /webview yolunda getQueryParameter(“url”) metodu ile “url” parametresi çekilir.
    1. Kod, elde edilen “url” değerinin “insecureshopapp.com” ile bitip bitmediğini denetler. Bu kodun amacı uygulama için güvenilir domain olan “insecureshopapp.com” uzantılı URL’lere izin vermektir.
    1. Eğer “url” değeri insecureshopapp.com ile bitiyorsa, bu değer data değişkenine atanır ve webView.loadUrl(data); metodu ile WebView bileşeni içerisinde yüklenir. Aynı zamanda Prefs.INSTANCE.getInstance(this).setData(data); ile uygulama içinde (örneğin SharedPreferences) saklanır.

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.

Dinamik Analiz

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.

Şekil 1: Kampanya Deep Link’i

Şekil 1: Kullanıcının Uygulamada Yönlendirildiği Sayfa

Örnek Saldırı Simülasyon Yöntemi

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"
Şekil 1: ADB Komutunun Kullanılması
Şekil 1: Yönlendirilen Sayfa

Deep Link’lerin Güvenliğini Sağlama

  1. Scheme URL’leri veya App Link’ler yerine Intent URL’leri tercih edilerek uygulama daha güvenli hale getirilebilir. Burada Intent URL’leri hedef uygulamanın paket adını ve ilgili bileşenlerini açıkça belirterek deep link manipülasyonunu önler. Bağlantının ele geçirilmesi veya sahte deep link’lerin oluşturulma olasılığı azalmış olur.
  2. Kötü amaçlı eylemleri ve hassas verilere yetkisiz erişimi önlemek için kullanıcılar tarafından sağlanan girdileri doğrulayarak daha güvenli hale getirilebilir. Bu sayede kötü amaçlı girdilerin (XSS, SQL injection vb.) deep link üzerinden iletilmesi engellenerek hassas verilere yetkisiz erişimin önüne geçilebilir.
  3. Uygulama eğer hassas verileri deep link aracılığıyla iletiyorsa bu verileri korumak için güçlü şifreleme teknikleri kullanılmalıdır.

Yazar: Ayşenur Bayram

Bunlar İlginizi Çekebilir

Siber Güvenlik Nedir?

Siber Güvenlik Terimleri

1 Nisan 2021

Siber Güvenlik Nedir?

Devamını Oku
Siber İstihbarat Nedir?

Siber Güvenlik Terimleri

17 Haziran 2020

Siber İstihbarat Nedir?

Devamını Oku
URL Adresi Nedir? Nasıl Çalışır?

Siber Güvenlik Terimleri

30 Mart 2021

URL Adresi Nedir? Nasıl Çalışır?

Devamını Oku