Android Play Integrity API Kullanarak Cihaz Doğrulaması yapmak

Gorkem KARA
4 min readJun 7, 2023

--

Selamlar, Play Integrity API’yi kullanmanın bize katkısı nedir ne işe yarar? Bu sorulara cevapları getirerek başlayalım.

Neden ihtiyacımız var?

Uygulamalardaki SSL/TLS sertifikalarının güvenliğini sağlamak için kullanılan SSL Pinning mekanizması, etkisiz hale getirmek için bazı saldırı yöntemleri var. SSL pinning, uygulamanın yalnızca önceden belirlenmiş bir SSL/TLS sertifikasıyla güvenli bir şekilde bağlantı kurmasına izin verir ve saldırganların, uygulamanın kullanıcısıyla olan iletişimini ele geçirmesini veya dinlemesini zorlaştırır. Uygulamanın iletişimini dinlemek veya manipüle etmek için kullanılabilecek şifreleme korumasını kaldırılabilir. Yani SSL Pinning atlatması, hassas bilgileri ele geçirilmesine veya kullanıcıların kimlik bilgilerinin çalınmasına neden olabilir.

Uygulamama ne katkısı var?

Play Integrity API’si ile cihaz doğrulaması yetkisiz istemcilerin yani hackerların arka uç kaynaklarınıza erişmesini engelleyerek API kaynaklarınızı kötüye kullanımdan korumaya yardımcı olur. Bir oyun uygulamanız veya kredi kartı bilgilerini aldığınız yapılar mevcutsa kesinlikle kullanmanız gerekiyor yoksa müşterilerinin cihazlarına sızan zararlı yazılımlar ile müşterilerinizin manipüle olmasını engelleyemezsiniz.

Nasıl kullanabilirim?

Öncelikle Mobile App Attestation olarak Android de iki adet yöntem var. Birisi SafetyNet ve onun yerine gelen Play Integrity Api. Safetynet yakın zamanda kullanımdan kaldırılacaktır. Bu yüzden Play Integrity API’nin nasıl çalıştığına bakalım.

Play Integrity API çalışma mantığı
  1. Server üzerinde kurulumlar tamamlanır. (sdk initialize and play integrity request design)
  2. Şu özelliklerde bir nonce (string) oluşturma;
  • String
  • URL-safe
  • Encoded as Base64 and non-wrapping
  • Minimum of 16 characters
  • Maximum of 500 characters

3. Android uygulamasına gönderilen nonce ile android sdk’sında yapılacak kurulumlar.

4. Andorid uygulaması üzerinden Integrity SDK’sına nonce gönderimi ile alınan tokenin servise gönderilmesi

5. Sunucunun play integrity requestine androidden gelen token’i göndermesi.

6. Sunucu dönen response ile ilgili android uygulamasına bildirim yapması

7. Android uygulamasına güvenli girişin kullanılarak bazı etkilerin veya uygulamaya komple girişin yasaklanması.

Play Console üzerinde düzenlemeler

Play Console’da Setup -> App integrity alanına girin. Integrity API tab’ında Google Cloud project satırını göreceksiniz. Bir projeniz yoksa oluşturun. Bir projeniz varsa dahi edit diyip istediğiniz projeyi linkleyin.

Projeyi linklemezseniz benim gibi uzun uğraşlar verip sorunun bundan kaynaklandığını görebilirisiniz.

  • Daha sonra View project diyip Google Cloud’a gidin.
  • Yukarıdaki arama butonuna Play Integrity API yazın.
  • Yukarıda resimdeki gibi bir view görmeniz gerekiyor.
  • Manage’a tıklayın. Açılan sayfadan Credentials tab’ına tıklayın.
  • Açılan alanda sağ taraftaki Create Credentials -> Service Account diyin.
  • Açılan sayfada “Service Account Name” alanını doldurun doldurmaya başlayınca alt taraftaki alana otomatik id oluşturulacaktır.
  • Başka hiç bir şeye dokunmadan create continue diyin.
  • Ve az önceki sayfaya geri dönün.
  • yukarıdaki service account a tıklayın ve açılan sayfada Keys tabına gidin
  • Add Key -> Create New Key -> Json diyip ilgili client secret json dosyasını indirin.

Server kurulumu

Maven Dependency;

<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-playintegrity</artifactId>
<version>v1-rev20230514-2.0.0</version>
</dependency>

Java;

node js için buradan bakabilirsiniz;

Android (kotlin) Kurulumu

Sdk Kurulumu;

Gradle/Grovy Bağımlılığı Eklenmesi

implementation "com.google.android.play:integrity:1.1.0"

Nonce oluşturulması

private fun generateNonce(): String {
val length = 50
var nonce = ""
val allowed = Utilities.SPECIAL_CHARACTER_PROHIBITED
try {
for (i in 0 until length) {
nonce += allowed[floor(Math.random() * allowed.length).toInt()].toString()
}

} catch (e: Exception) {
Log.e("something went wrong try again later" + "\n\nDescription: " + e.message)
}
return nonce
}

Play Integrity SDK kurulumu

val integrityManager = IntegrityManagerFactory.create(context)
val integrityTokenResponseTask = integrityManager.requestIntegrityToken(
IntegrityTokenRequest.builder()
.setNonce(generateNonce())
.setCloudProjectNumber(CLOUD_PROJECT_NUMBER)
.build()
)
integrityTokenResponseTask.addOnSuccessListener { integrityTokenResponse: IntegrityTokenResponse ->
val integrityToken = integrityTokenResponse.token()
Log.d("integrityToken $integrityToken")
}
integrityTokenResponseTask.addOnFailureListener { e: Exception ->
Log.e("something went wrong try again later" + "\n\nDescription: " + e.message)
}

Cloud Project Number; Yukarıda View project diyip Google Cloud’a gittiğinizde anasayfada gözüken numarayı buraya yazacaksınız.

Sonra ilgili integrityToken servise gönderilip doğrulamalar yapıldığında servisten gelen bilgiler doğrultusunda uygulamaya girişin yapılıp yapılamayacağına karar verilmelidir.

Umarım ayrıntılardan sıkılmayıp buraya kadar her şeyi doğru yapabilmişsinizdir. Sorun yaşadığınızda buradan yorum olarak yazabilirsiniz.

Teşekkürler.

Görkem KARA

--

--

Gorkem KARA
Gorkem KARA

No responses yet