Android SafetyNet Api Kullanarak Root Kontrolü
Merhaba arkadaşlar, son iki yazımda android ile kod güvenliği üzerine durmuştum. Bugün ise android programlamada güvenliğin farklı bir boyutu olan SafetyNet Api’den bahsedeceğim.
SafetyNet Api Nedir?
Android cihaz ve çevre birimlerin sağlıklı çalışıp çalışmadığını kontrol etmek için Google tarafından geliştirilen bir Api’dir.
SafetyNet Api, geliştiricilerin gerçek bir Android cihazına iletişim kurup kurmadıklarını anlamarına yardımcı olur ve cihazın güvenli ve tanınmış bir durumda olduğunu da doğrulamak için uzaktan değerlendirmelerini sağlar.
SafetyNet Api’nin temel amacı Android cihazlar için Uyumluluk Testini (CTS) gerçekleştirmektir.
Uyumluluk Testi Paketi (Compatibility Test Suite / CTS ) Nedir?
CTS adı verilen bu paket; bir uygulamanın, geliştirilmekte olduğu platforma özgü niteliklerini test ederek, uygulamanın standardizasyon ve taşınabilirlik özelliklerini mümkün olduğunca arttırmaya yarayan araçların genel adıdır.
Android’in her sürümü için CTS paketlerini Compatibility Test Suite Downloads linkinden edinebilirsiniz.
Android CTS Test Dizisi
Bir Android aygıtın CTS uyumluluğunu sağlamak için aşağıdaki parametrelerden geçmesi gerekmektedir.
- Cihazın köklendiği (Rootlandığı) düşünülüyor mu?
- Donanım bilgisi tanındı mı?
- Yazılım aklı başında mı?
- Cihaz izleniyor mu?
- Cihaz kötü amaçlı uygulamalarla mı bulaştı?
- Cihazın profili tanınıyor mu?
Tüm bu aşamalardan geçen bir cihazın güvenlik açığı içermediğinden emin olabiliriz.
Google, bir cihazın güncel olup olmadığını veya SafetyNet hizmetinin bir parçası olarak kamu yararına açık olup olmadığını kontrol etmez. Beklenen normal ve güvenli bir duruma kıyasla değiştirilmiş olup olmadığını kontrol eder.
Değiştirilen durumun “rootlu”, “izleniyor” veya “kötü amaçlı yazılım bulaşmış” gibi birden fazla tanımı vardır.
Niçin SafetyNet Api Kullanmalıyız?
Bilindiği üzere Android işletim sistemi açık kaynak bir işletim sistemidir ve modifiye edilmesi kolaydır. Modifiye edilen bir işletim siteminde kasıtlı yada kasıtlı birçok güvenlik açığı bulunabilir.
İşte bunun farkında olan Google, biz geliştiricilere SafetyNet Api’yi sunarak, güvenlik zaafiyetinin önüne geçmeye çalışmıştır.
Birçok bankacılık uygulaması da hassas verilerini korumak için bu Api’yi kullanmaktadır.
SafetyNet Api Nasıl Çalışır?
Google Play hizmetlerinin bir parçası olan “snet” adlı bir hizmet sürekli android cihazlarda arkaplanda çalışmaktadır. Bu hizmet sık sık Android cihazından çeşitli veri parçaları toplar ve Google’a geri gönderir. Google bu bilgileri ekosistem analizi ve tehdit profil oluşturma gibi birçok amaç için kullanır.
SafetyNet, kullanılan aygıtın profilini oluşturmak için uygulamanızın yüklü olduğu aygıttaki yazılım ve donanım bilgilerini inceler. Hâlihazırda Googlenin elinde ekosistem profili olduğu için oradan kolayca cihazın durumunu sorgular ve bize güvenli olup olmadığını bildirir.
SafetyNet Api Nasıl Kullanılır?
SafetyNet Api dökümantasyonunu okuduğumuzda başta işler çok karışık gelebilir. 3. parti, açık kaynak kodlu bir kütüphane olan SafetyNetHelper vasıtası ile uygulamalarınıza kolayca SafetyNet Entegrasyonunu yapabilirsiniz.
Bunun için öncelikle Google Cloud Console üzerinden bir SafetyNet Api key oluşturmanız gerekmektedir.
ardından aşağıdaki kodlarda anlatıldığı gibi basit bir yöntem ile cihazızın güvenlik zaafiyeti olup olmadığını kolayca kontrol etmeniz mümkündür.
final SafetyNetHelper safetyNetHelper = new SafetyNetHelper(API_KEY);
safetyNetHelper.requestTest(context, new SafetyNetHelper.SafetyNetWrapperCallback()
{
@Override
public void error(int errorCode, String msg) {
//handle and retry depending on errorCode
Log.e(TAG, msg);
}
@Override
public void success(boolean ctsProfileMatch, boolean basicIntegrity) {
if (ctsProfileMatch) {
//profile of the device running your app matches the profile of a device that has passed Android compatibility testing.
else if(basicIntegrity){
//then the device running your app likely wasn't tampered with, but the device has not necessarily passed Android compatibility testing.
} else {
//handle fail, maybe warn user device is unsupported or in compromised state? (this is up to you!)
}
}
});
Bu kütüphane kullanılarak oluşturulmuş örnek bir uygulamaya da Google Play Store üzerinden erişebilir ve test edebilirsiniz.
Peki SafetyNet Kesin Çözüm Mü?
Şimdi gelelim en önemli soruya, diyelim ki bir banka uygulaması geliştiriyorsunuz ve SafetyNet api ile kontrollerinizi gerçekleştirip uygulamanızı handle ettiniz.
Artık gönül rahatlığı ile arkanıza yaslanabilir misiniz?
Maalesef bunun mümkün olduğunu söyleyemeyeceğim. Nihayetinde açık kaynak dünyasınının iyi getirileri olduğu kadar kötü getirileri de olabilmektedir. Bunlardan bir tanesi de Suhide uygulamasıdır. ShiftDelete.net sitesinde 01 Eylül 2016 tarihinde yayınlanan bir habere göre Android’de Root Gizlemek Artık Mümkün!
haberden bazı alıntılar şunlardır;
Google bu tarz durumlardan kullanıcının göreceği zararları minimuma düşürmek için SafetyNet isimli bir API kullanıyor. Geliştiriciler tarafından da kullanılabilen bu API sayesinde cihazdaki root yetkisi uygulamalar tarafından sorgulanabiliyor.
Bu durum çoğu zaman root yetkisine sahip olan cihazların çeşitli uygulamalara girememesine neden oluyordu.
Fakat artık can sıkıcı olan bu durum için somut ve kalıcı bir çözüm mevcut. Rootdünyasının en tanınan isimlerinden birisi olan Chainfire akıllı telefonunuzun root yetkisine sahip olup olmadığı bilgisini gizleyen bir uygulama yazmayı başardı.
SuHide isimli uygulama, SafetyNet isimli API nedeniyle yaşanan engellemelere karşı koyabilen bir algoritmaya sahip ve herhangi bir ayara veya özelleştirmeye ihtiyaç olmadan aktifleşebiliyor.
Bu da demek oluyor ki siz uygulamanızda root kontrolü yapsanız bile birileri çıkıp bu engeli de aşabilecektir.
Yararlı olması dileğiyle.