Google Firebase Nedir? Saldırı ve Savunma yöntemleri neler?

Merhaba, bu yazımda sizlere Google Firebase üzerindeki bazı saldırı yöntemlerinden bahsedeceğim. Öncelikle Firebase nedir öğrenelim.

Google Firebase; web ve mobil uygulama geliştiricilerinin server tarafıyla uğraşmasına gerek kalmadan kullanıcı verilerini eş zamanlı ve senkron bir şekilde tutulmasını sağlayan platformdur. Server-Side dediğimiz arkaplandaki verilerin tutulması ve gerektiğinde kullanıcıya aktarılması her platformun ortak sorunudur ve Google Firebase bu konuda geliştirilmiş ortak bir çözümdür.

Google firebase üzerinde şimdiye kadar çeşitli güvenlik açıkları keşfedilmiştir. Bu yazımda güvenlik kurallarının doğru yapılandırılmamasından kaynaklanan bir güvenlik açığından bahsedeceğim. Ek olarak zafiyeti nasıl giderebileceğinizi de öğrenmiş olacaksınız.

Öncelikle testlerimizi gerçekleştirmek için bir adet Firebase database oluşturmamız gerekiyor.
firebase.google.com adresine giderek “Get started” butonuna tıklayıp kendimize yeni bir Firebase database oluşturmak için işlemlere başlıyoruz.

Oluşturacağımız Firabase projesine bir isim belirleyip devam ediyoruz.

Sonraki adımda ise “Enable Google Analytics for this project” seçeneğini kapatıp “Create project” butonuna tıklayarak Firebase projemizi oluşturuyoruz.

Projemizi oluşturduğumuza göre şimdi sıra Database oluşturmaya geldi. Sol menüdeki Realtime Database bölümüne gelerek “Create Database” butonuna tıklayıp kendimize bir Database oluşturuyoruz. İşlem adımlarını sırasıyla resimlerde göstermeye çalıştım.

Şimdi her şey hazır! Yanlış yapılandırılmış bir Firebase veri tabanına nasıl saldırabileceğinizi buradan sonra öğreneceksiniz.

Açılan ekrandaki üst menüde Data ve Rules butonlarını görebiliyor olmalısınız.

Firebase veri tabanının güvenliğini sağlayan güvenlik kurallarının yapısı JavaScript benzeri bir syntax yapısına sahip bir programlama diline benzemektedir. Güvenlik kuralları “rules” : { … } kod bloğu içerisinde tanımlanmaktadır.
tahmin edebileceğiniz üzere “.read” okuma izni, “.write” yazma izni anlamına gelmektedir.

Firebase veri tabanı oluşturulduğunda güvenlik kuralları default olarak aşağıdaki gibi olur.

{
  "rules": {
    ".read": false,
    ".write": false
  }
}

Yukarıdaki default güvenlik kuralı; admin dışında hiç kimsenin veri tabanı üzerinde veri okuyup yazamayacağı anlamına gelmektedir.

Aşağıdaki güvenlik kuralı ise veri tabanındaki bilgiler herkes tarafından okunabilir, fakat admin dışında hiç kimse veri tabanına yazı yazamaz anlamına gelmektedir.

{
  "rules": {
    ".read": true,
    ".write": false
  }
}


NOT: Admin yetkisine sahip kullanıcılar veri tabanı üzerinde sınırsız yetkiye sahiptirler.

Bu kuralları isteğinize göre üst menüdeki Rules bölümüne gelerek değiştirebilirsiniz. Değişiklik yaptıktan sonra “Publish” butonuna tıklayıp kaydetmeyi unutmayın:). devam edelim..

Kuralların uygulanıp uygulanmadığını test etmek için sağ üst köşede bulunan “Rules Playground” butonuna tıklayarak Firebase‘in bize sunmuş olduğu Simulator‘u açıyoruz.

Sağ tarafta açılan Simulator ekranından READ kısmını seçip RUN butonuna tıklayıp check ettiğimizde “Simulated read allowed” yazısını görmekteyiz. Bu da kuralın doğru çalıştığı anlamına gelmektedir.

Şimdi asıl zafiyetin olduğu kısma gelelim. Bazı geliştiriciler “.write” kuralını “true” olarak ayarlamaktadır.
Bu şu anlama gelmektedir; Firebase uygulamamızın URL adresini bilen bir saldırgan verita banına istediği veriyi ekleyip silebilir!

Tabii ki de kural yapılandırmaları bundan ibaret değil. Çeşitli sınırlandırmalar mevcut. Ben mantığı anlattıktan sonra size düşen çeşitli yöntemler geliştirip bunları doğru yolda kullanmak olacak. Her şeyi devletten beklememek lazım:).

Şimdi farz edelim ki elinizde test etmek için bir mobil uygulama var. Uygulamayı inceleyip Firebase database adresini buldunuz. Hemen kontrol edip izinlerini check etmeniz gerekmekte. Bunun için basit bir curl komutu yeterli olacaktır.

Ben kendi oluşturduğum Firebase projesi üzerinden gideceğim.

Hedef Database => https://*******-ddbe0-default-rtdb.firebaseio.com/.json

Veritabanı Kuralları:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Kullanacağımız curl komutu:

curl -X PUT -d '{ "f1": "*****", "f2": "******" }' 'https://*****-ddbe0-default-rtdb.firebaseio.com/.json'


Öncelikle “.write” kuralının false olduğunu düşünüp ne ile karşılaşacağımıza bakalım. Sonra da “true” değerini verip veri yazabilecek miyiz bir bakalım. False ile başlıyoruz.

Evet, görüldüğü üzere veri yazmaya çalıştığımızda “Permission denied” hatası aldık çünkü yazma izni kapalıydı. Fakat okuma izni açık olduğu için veri tabanını okuyabildik, her ne kadar boş olsa da ?.

Şimdi yazma iznini açıp kontrol edelim.

Harika! Yanlış yapılandırmadan oluşan açığı sömürüp veri tabanına yazmayı başardık.

f1 ve f2 değerlerini sizlere göstermek için random yazdım. Test yapacağınız uygulamadaki gerek metinleri gerek içerikleri değiştirmek için o veri tabanındaki değerleri yazmanız gerekecektir, bunu da bilmek gerek. Aksi halde değiştirdiğiniz veriler mobil uygulama içinde gözükmeyecektir. Son söylediklerim uygulamayı hackleyip mesaj bırakacak çılgın kardeşlerim için geçerli :).

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu