Database Schema Zafiyet Örnekleri
Database schema, veritabanının iskeleti gibidir.
Nasıl ki bir bina yapılmadan önce mimari planı çizilir,veritabanı da oluşturulmadan önce schema (şema) tasarlanır.
Demiştik bir önceki konumuzda. @'ReDLiNe Zafiyet Örnekleri ile ilgili bir soruda bulunmuştu.
O soru üzerine bu konuyu açmaya karar verdim.
Database schema İskeletin ise şimdi zafiyetlerini inceleyelim.
Database schema yanlış veya dikkatsiz tasarlanan bir şema olursa,sisteminize sızılmasına
verileri manipüle etmesine sebeb olabilir.
Bu nedenle şema güvenliği,veritabanı yönetiminin en önemli ana konudur.
Database Schema Zafiyetleri
Veri Tipi Uyumsuzlukları
SQL:
CREATE TABLE users (
id VARCHAR(10),
age VARCHAR(10)
);
age sayısal bir değer olması gerekirken metin olarak tanımlandığı için
Mantıksal karşılaştırmalar (>, <, =) hatalı çalışabilir.
Uygulama güvenlik açıklarına sebeb olur.
“type confusion” (tip karışıklığı) üzerinden SQL Injection varyasyonları deneyebilir.
Şifrelerin Düz Metin Olarak Saklanması
Mantıksal karşılaştırmalar (>, <, =) hatalı çalışabilir.
Uygulama güvenlik açıklarına sebeb olur.
“type confusion” (tip karışıklığı) üzerinden SQL Injection varyasyonları deneyebilir.
Şifrelerin Düz Metin Olarak Saklanması
Kod:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50),
password VARCHAR(50)
);
Bu sql,veritabanı sızdığında tüm kullanıcı hesaplarının direkt ele geçirlimesine sebeb olur.
Şifreleri SHA-256,bcrypt,Argon2 gibi algoritmalarla hashlemek gerek güvenliği için.
Gereksiz,Yetkilendirme
Şifreleri SHA-256,bcrypt,Argon2 gibi algoritmalarla hashlemek gerek güvenliği için.
Gereksiz,Yetkilendirme
SQL:
GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%';
appuser tüm veritabanı üzerinde tam yetki sahibidir.
appuser’ın kimlik bilgilerini ele geçirirse tam veritabanı kontrolünü sağlar.
Denormalized Schema
Tüm verileri tek bir tabloya doldurmak güvenlik açısından da risktir.
Böyle bir yapıda hassas veriler birbirine karışabilir ve yetkilendirme sınırları bulanıklaşır.
SQL Injection’a Açık Alan Tanımlamaları
Bazı tablolar dinamik olarak oluşturulan sorgulara direkt kullanıcı girdisi alacak şekilde tasarlanır.
Bu gibi durumlarda zayıf şema tasarımıyla birleştiğinde SQL Injection zafiyeti ortaya çıkar.
appuser’ın kimlik bilgilerini ele geçirirse tam veritabanı kontrolünü sağlar.
Denormalized Schema
Tüm verileri tek bir tabloya doldurmak güvenlik açısından da risktir.
Böyle bir yapıda hassas veriler birbirine karışabilir ve yetkilendirme sınırları bulanıklaşır.
SQL Injection’a Açık Alan Tanımlamaları
Bazı tablolar dinamik olarak oluşturulan sorgulara direkt kullanıcı girdisi alacak şekilde tasarlanır.
Bu gibi durumlarda zayıf şema tasarımıyla birleştiğinde SQL Injection zafiyeti ortaya çıkar.
Kod:
SELECT * FROM users WHERE username = '$input';


