Play Integrity API'ye genel bakış

Play Integrity API, kullanıcı işlemlerinin ve sunucu isteklerinin Google Play tarafından yüklenen ve orijinal, sertifikalı bir Android cihazda çalışan orijinal uygulamanızdan gelip gelmediğini kontrol etmenizi sağlar. Arka uç sunucunuz; kurcalanmış uygulama sürümleri, güvenilmeyen cihazlar veya emülasyon ortamları gibi riskli etkileşimleri tespit ederek kötüye kullanımı ve yetkisiz erişimi önlemek, sahtekarlık ve hileyle mücadele etmek ve kullanıcıları saldırılardan korumak için uygun işlemleri gerçekleştirebilir.

Play Integrity API'ye Genel Bakış
flow

API, aşağıdakiler gibi olası tehditleri tespit etmenize yardımcı olan değerlendirmeler döndürür:

  • Yetkisiz erişim: accountDetails değerlendirmesi, kullanıcının Google Play'de uygulamanızı veya oyununuzu yükleyip yüklemediğini ya da bunlar için ödeme yapıp yapmadığını belirlemenize yardımcı olur.
  • Kod kurcalama: appIntegrity değerlendirmesi, Google Play tarafından tanınan değiştirilmemiş ikili programınızla etkileşim kurup kurmadığınızı belirlemenize yardımcı olur.
  • Riskli cihazlar ve emüle edilmiş ortamlar: deviceIntegrity değerlendirmesi, uygulamanızın orijinal ve sertifikalı bir Android cihazda veya PC Üzerinde Google Play Games'in orijinal bir örneğinde çalışıp çalışmadığını belirlemenize yardımcı olur.

Google Play geliştiricileri, aşağıdakiler gibi daha geniş bir potansiyel tehdit aralığını tespit etmek için ek değerlendirmeler almayı da etkinleştirebilir:

  • Yama uygulanmamış cihazlar: deviceIntegrity değerlendirmesindeki MEETS_STRONG_INTEGRITY yanıtı, bir cihazın son güvenlik güncellemelerini uygulayıp uygulamadığını belirlemenize yardımcı olur (Android 13 ve sonraki sürümleri çalıştıran cihazlar için).
  • Diğer uygulamalar tarafından riskli erişim: appAccessRiskVerdict; ekranı kaydetmek, yer paylaşımları göstermek veya cihazı kontrol etmek (ör. erişilebilirlik iznini kötüye kullanarak) için kullanılabilecek uygulamaların çalışıp çalışmadığını belirlemenize yardımcı olur.
  • Bilinen kötü amaçlı yazılımlar: playProtectVerdict, Google Play Protect'in açık olup olmadığını ve cihazda riskli ya da tehlikeli uygulamalar bulup bulmadığını belirlemenize yardımcı olur.
  • Aşırı etkinlik: recentDeviceActivity düzeyi, bir cihazın son zamanlarda anormal derecede fazla istek gönderip göndermediğini belirlemenize yardımcı olur. Bu durum, otomatik trafiğe işaret edebilir ve saldırı belirtisi olabilir.
  • Tekrarlanan kötüye kullanım ve yeniden kullanılan cihazlar: deviceRecall (beta), uygulamanız yeniden yüklense veya cihaz sıfırlansa bile daha önce işaretlediğiniz bir cihazla etkileşimde bulunup bulunmadığınızı belirlemenize yardımcı olur.

API; telefonlar, tabletler, katlanabilir cihazlar, Android Auto, Android TV, Android XR, ChromeOS, Wear OS ve PC Üzerinde Google Play Games gibi çeşitli Android form faktörlerinde kullanılabilir.

Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler

Uygulamanızın Play Integrity API'den en iyi şekilde yararlanabilmesi için önerilen şu uygulamalara uyun:

Kötüye kullanıma karşı bir stratejiniz olsun.

Play Integrity API; kötüye kullanıma karşı tek mekanizma olarak değil, genel stratejinizin bir parçası olarak diğer sinyallerle birlikte kullanıldığında en iyi performansı gösterir. Bu API'yi, uygulamanız için diğer uygun güvenlikle ilgili en iyi uygulamalarla birlikte kullanın. Varsayılan olarak uygulamanız,tüm yüklemelerde günde toplam 10.000 istek gönderebilir. Günlük maksimum sınırınızı artırma isteğinde bulunabilirsiniz.

Harekete geçmeden önce telemetri verilerini toplayın ve kitlenizi anlayın

Uygulamanızın davranışını Play Integrity API kararlarına göre değiştirmeden önce, API'yi yaptırım olmadan uygulayarak mevcut kitlenizle ilgili mevcut durumu anlayabilirsiniz. Mevcut yükleme tabanınızın hangi kararları döndürdüğünü öğrendikten sonra planladığınız yaptırımların etkisini tahmin edebilir ve kötüye kullanımı önleme stratejinizi buna göre ayarlayabilirsiniz.

Bütünlük kararlarını nasıl isteyeceğinize karar verme

Google Play Integrity API, bütünlük kararlarını istemek ve almak için iki seçenek sunar. Standart istekler, klasik istekler veya her iki istek türünün bir kombinasyonunu kullanmanız fark etmeksizin bütünlük değerlendirmesi yanıtı aynı biçimde döndürülür.

Standart API istekleri tüm uygulamalar veya oyunlar için uygundur ve herhangi bir kullanıcı işleminin ya da sunucu isteğinin gerçek olup olmadığını kontrol etmek için talep üzerine yapılabilir. Standart istekler en düşük gecikme süresine (ortalama birkaç yüz milisaniye) ve kullanılabilir bir karar alma konusunda yüksek güvenilirliğe sahiptir. Standart istekler, akıllı cihaz üzerinde önbelleğe alma özelliğini kullanırken belirli saldırı türlerine karşı koruma sağlama yetkisini Google Play'e verir.

Bütünlük kararı talep etmenin orijinal yöntemi olan Classic API istekleri de kullanılmaya devam edecek. Klasik isteklerin gecikme süresi daha yüksektir (ortalama birkaç saniye) ve belirli saldırı türlerinin riskini azaltmak sizin sorumluluğunuzdadır. Klasik istekler yeni bir değerlendirme başlattığı için standart isteklere kıyasla kullanıcının verilerini ve pilini daha fazla kullanır. Bu nedenle, çok hassas veya değerli bir işlemin gerçek olup olmadığını kontrol etmek için tek seferlik olarak nadiren yapılmalıdır. Klasik istek göndermeyi ve daha sonra kullanmak üzere önbelleğe almayı düşünüyorsanız saldırı riskini azaltmak için standart istek göndermeniz gerekir.

Bu iki istek türü arasındaki temel farklar aşağıdaki tabloda açıklanmıştır:

Standart API isteği Klasik API isteği
Gereken minimum Android SDK'sı* Android 6.0 (API düzeyi 23) veya sonraki sürümler Android 6.0 (API düzeyi 23) veya sonraki sürümler
API ısınma şartı ✔️ (birkaç saniye) ❌
İsteğin normal gecikme süresi Birkaç yüz milisaniye Birkaç saniye
Olası istek sıklığı Sık (herhangi bir işlem veya istek için talep üzerine kontrol) Nadir (en yüksek değere sahip işlemler veya en hassas istekler için tek seferlik kontrol)
Tekrar oynama ve benzer saldırılara karşı çözüm Google Play'den otomatik çözüm nonce alanı, sunucu tarafı mantığıyla kullanılır

* Play Integrity API kitaplığı 1.4.0 ve sonraki sürümler için desteklenen minimum Android SDK, her iki istek türü için de aynıdır ve kitaplığın minSdkVersion tarafından belirlenir. 1.3.0 ve önceki sürümlerde, Standart API istekleri için gereken minimum Android SDK'sı Android 5.0 (API düzeyi 21), Klasik API istekleri için ise Android 4.4'tür (API düzeyi 19).

Klasik isteklerle ilgili dikkat edilmesi gereken noktalar bölümünde daha fazla farkın yer aldığı bir tablo görebilirsiniz.

Uygun bir zamanda bütünlük değerlendirmesi isteme

Dolandırıcıların uygulamanız tarafından gerçekleştirilen bütünlük kontrolünü atlatmasını önlemek için, erişime karşı korumak istediğiniz işlem veya sunucu isteğinin zamanına mümkün olduğunca yakın bir zamanda uygulama erişim riski kararı talep etmeniz gerekir.

API isteklerinizin kopyalanmasını zorlaştırma

Standart API isteklerinde, kurcalama ve benzeri saldırılara karşı koruma sağlamak için kullanılan requestHash adlı bir alan bulunur. Bu alanda, uygulamanızın isteğindeki tüm alakalı değerlerin bir özetini eklemeniz gerekir. Uygulamanızın standart isteklerini korumak için içerik bağlamayı kullanma ile ilgili talimatları uygulayın.

Klasik API isteklerinde, tekrar oynatma ve kurcalama saldırıları gibi belirli saldırı türlerine karşı koruma sağlamak için kullanılan nonce (bir kez kullanılan sayı) adlı bir alan bulunur. Uygulamanızın klasik isteklerini korumak için tek seferlik rastgele sayı oluşturma ile ilgili talimatları uygulayın.

Bütünlük kararlarını önbelleğe almaktan kaçınma

Bütünlük kararlarının önbelleğe alınması, proxy saldırısı riskini artırır. Bu saldırıda kötü niyetli bir kişi, iyi bir cihazdan alınan kararı başka bir ortamda kötüye kullanım amacıyla yeniden kullanır. Yanıtları önbelleğe almak yerine standart bir API isteği göndererek istediğiniz zaman karar alabilirsiniz.

Kademeli bir yaptırım stratejisi uygulayın.

Play Integrity API'nin bütünlük değerlendirmesi kapsamında verilebilecek birbirinden farklı yanıtlar, kötüye kullanıma karşı çok katmanlı bir strateji geliştirmenize olanak tanır. Bunu yapmak için uygulamanızın arka uç sunucusunu, olası her yanıta veya yanıt grubuna göre farklı şekilde davranacak şekilde yapılandırabilirsiniz.

Cihazın güvenilirliğini değerlendirmeden önce API yanıtındaki diğer temel sinyalleri kontrol etmek önemlidir:

  • İstek ayrıntıları: requestDetails değerlerinin beklediğiniz değerlerle eşleştiğinden emin olun. Özellikle tekrar saldırılarını önlemek için requestHash veya nonce değerlerini doğrulayın.
  • Uygulama bütünlüğü: appRecognitionVerdict değerinin PLAY_RECOGNIZED olduğunu kontrol ederek uygulamanın imzalama sertifikasının Google Play tarafından tanındığını ve üzerinde değişiklik yapılmadığını doğrulayın.
  • Hesap ayrıntıları: appLicensingVerdict değerinin LICENSED olduğunu kontrol ederek kullanıcının uygulamayı Google Play'den yüklediğini veya güncellediğini doğrulayın.

Uygulamanız, bu temel kontroller başarısız olduğunda (örneğin, uygulama içi Google Play çözüm iletişim kutusunu kullanarak) durumu yönetebilmelidir. Ayrıca uygulamanız, istek sırasında ortaya çıkabilecek hata kodlarını da işleyebilmelidir.

Temel kontroller geçildikten sonra, Play Console'dan API yanıtınızda ek cihaz etiketleri almayı etkinleştirerek yaptırım stratejinizi cihaz güvenilirliğine göre kademelendirebilirsiniz. Her cihaz, ölçütlerini karşıladığı tüm etiketleri döndürür. Android SDK sürümünü öğrenmek için API yanıtında yer alan deviceAttributes alanını kullanmanız gerekir. Cihaz güven katmanlarının kapsamı, daha güvenilir cihazlardan daha az güvenilir cihazlara kadar değişir:

  • MEETS_STRONG_INTEGRITY (Android 13 ve sonraki sürümler): Donanım tabanlı güvenlik sinyalleri ve yeni bir güvenlik yaması gerektiren en yüksek cihaz güven düzeyi.
  • MEETS_DEVICE_INTEGRITY (Android 13 ve sonraki sürümler) ve MEETS_STRONG_INTEGRITY (Android 13'ten önceki sürümler): Sonraki güven katmanı. Her ikisi de donanım tabanlı güvenlik sinyallerini kullanır.
  • MEETS_DEVICE_INTEGRITY (Android 13 öncesi): Bir sonraki katman, mümkün olduğunda donanım tabanlı onayı, yedek olarak da yazılım destekli onayı kullanır.
  • MEETS_BASIC_INTEGRITY: Hiçbir cihaz etiketi almamanın hemen öncesindeki en zayıf güven katmanıdır.

Örneğin, tüm cihaz etiketlerini almayı etkinleştirdikten sonra MEETS_STRONG_INTEGRITY, MEETS_DEVICE_INTEGRITY ve MEETS_BASIC_INTEGRITY etiketlerini döndüren bir cihaza, yalnızca MEETS_BASIC_INTEGRITY etiketini döndüren bir cihaza kıyasla daha fazla güvenebilirsiniz. Her senaryoda sunucudan farklı şekilde yanıt verebilirsiniz.

Ardından, katmanlı yaptırım stratejinize başka sinyaller ekleyebilirsiniz. Örneğin, recentDeviceActivity içinde daha yüksek seviyeler döndüren cihazları daha az güvenilir olarak değerlendirebilirsiniz.

Sunucunuzdan uygulamanıza çeşitli yanıtlar gönderme

Çeşitli karar sonuçlarına sahip olmak, sunucudan her yanıt için uygulamaya ikili bir "izin ver" veya "reddet" yanıtı göndermekten daha zordur. Örneğin, İzin ver, Sınırlarla izin ver, CAPTCHA tamamlandıktan sonra sınırlarla izin ver ve Reddet gibi bir dizi ilgili yanıt kullanabilirsiniz.

Cihaz hatırlama özelliğini kullanarak kullanıcı gizliliğini korurken tekrarlanan kötüye kullanımı tespit etme

Cihaz hatırlama, uygulamaların belirli bir cihazla ilişkili bazı özel verileri, kullanıcı gizliliğini koruyacak şekilde saklayıp hatırlamasını sağlar. Veriler, Google sunucularında saklandığı için uygulamanız yeniden yüklendikten veya cihaz sıfırlandıktan sonra bile uygulamanız, cihaz bazında verileri güvenli bir şekilde geri çağrılabilir. Bu sayede, geçmişte kötüye kullanımda bulunduğunu tespit ettiğiniz bir cihazı güvenilir bir şekilde yeniden tanımlayarak harekete geçebilir ve cihazın tekrar kötüye kullanım için kullanılmasını engelleyebilirsiniz. Cihaz hatırlama verilerini oluşturan üç değerin anlamını kendiniz tanımlayabilirsiniz:

  • Bunları üç ayrı işaret veya boole olarak kullanabilirsiniz. Örneğin, değerler bir cihazın hesap oluşturup oluşturmadığını, ücretsiz deneme sürümünü kullanıp kullanmadığını veya yüksek düzeyde kötüye kullanım yapıp yapmadığını gösterebilir.
  • Alternatif olarak, değerlerin tüm durumlarını en fazla sekiz özel etikette birleştirebilirsiniz. Örneğin, üç değerin de değiştirilmediği varsayılan durum için bir etiket ve özel anlamları olan yedi etiket kullanabilirsiniz. Bu sayede, tüm cihazları tanımladığınız davranışlara veya işlemlere göre sekiz gruba kadar segmentlere ayırabilirsiniz. Bu senaryoda, üç writeDates arasından en son güncellenen, etiketi en son ne zaman güncellediğinizi gösterir.

Cihaz hatırlama verileriyle çalışırken ön koşulları ve diğer hususları da göz önünde bulundurun.

Son cihaz etkinliğini kullanarak büyük ölçekli kötüye kullanımı tespit etme

Çok sayıda bütünlük jetonu isteyen cihazları bulmak için Google Play Integrity API'deki son cihaz etkinliği özelliğini kullanın. Yüksek hacimli etkinlikleri kötüye kullananlar genellikle gerçek cihazlardan geçerli onay sonuçları oluşturur ve bunları botlara sağlayarak root erişimli cihazlara ve emülatörlere yönelik saldırıları otomatikleştirir. Son cihaz etkinliği düzeyini kullanarak uygulamanızın son bir saat içinde o cihazda kaç doğrulama oluşturduğunu kontrol edebilirsiniz.

İşlem yapılabilir hata mesajları gösterme

Mümkün olduğunda, kullanıcıya faydalı hata mesajları göstererek sorunu düzeltmek için neler yapabileceklerini açıklayın. Örneğin, tekrar denemelerini, internet bağlantılarını etkinleştirmelerini veya Google Play Store uygulamasının güncel olup olmadığını kontrol etmelerini söyleyin.

Beklenmedik sorunlar veya kesintiler için bir planınız olsun

Google Play durum kontrol panelinde, Play Integrity API'nin hizmet durumuyla ilgili bilgilerin yanı sıra kesintiler ve aksamalar hakkında bilgiler gösterilir. Düşük bir ihtimal de olsa büyük ölçekli bir Play Integrity API kesintisi yaşanması durumunda arka uç sunucunuzun nasıl çalışmasını istediğinizi önceden planlamanız gerekir. Arka uç sunucunuzun, cihazlara özel Android platformu anahtar onayı anahtarlarının iptal edildiği durumlarda da çalışmaya hazır olması gerektiğini unutmayın.

Uçtan uca kurumsal sahtekarlık çözümlerini değerlendirme

Eksiksiz bir sahtekarlık ve bot yönetimi çözümü arayan kurumsal müşteriler, mobil için reCAPTCHA Enterprise'ı satın alabilir. Bu çözüm, geliştiricilere sahtekarlık risk puanları sağlayan Android için SDK'lar içerir. reCAPTCHA Enterprise, Play Integrity API sinyallerini otomatik olarak içerir ve bunları müşteriler için reCAPTCHA ağı ve uygulama sinyalleriyle birleştirerek sorunsuz, görünmez bir sahtekarlık yönetimi çözümü sunar. Ayrıca, Google Play Integrity API'nin kullanılamadığı Android uygulamaları için de koruma sağlayabilir.

Yüksek değerli veya hassas özelliklere erişirken riskli trafiğe meydan okuma

Erişimi tamamen reddetmek yerine Play Integrity API ile korumak için uygulamanızdaki veya oyununuzdaki yüksek değerli ya da hassas işlemleri belirleyin. Mümkün olduğunda, yüksek değerli işlemlerin devam etmesine izin vermeden önce riskli trafiği sorgulayın. Örneğin, uygulama erişim riski, ekranı kaydedebilecek bir uygulamanın çalıştığını gösterdiğinde, korumak istediğiniz işlevlere erişmesine izin vermeden önce kullanıcıdan ekranı kaydedebilecek uygulamaları devre dışı bırakmasını veya kaldırmasını isteyin.

Hizmet şartları ve veri güvenliği

Play Integrity API'ye erişerek veya kullanarak Play Integrity API Hizmet Şartları'nı kabul etmiş olursunuz. API'ye erişmeden önce geçerli tüm şartları ve politikaları okuyup anlayın.

Google Play'de, geliştiricilerin uygulamalarının veri toplama, paylaşma ve güvenlik yöntemlerini açıklayarak kullanıcıları bilgilendirmeleri için Veri Güvenliği bölümü bulunur. Veri formunuzu doldurmanıza yardımcı olması için Google Play Integrity API'nin verileri nasıl işlediği ile ilgili bu bilgilere göz atın.