Bir denetim izini korumanın yolları vardır: hash zinciri, imza, ya da SQL Server 2022 ile gelen append-only ledger tablosu. Hepsi işe yarar. Ama kayıtla aynı yerde duran her korumanın tek başına kapatamadığı bir boşluk vardır ve deneyimli bir denetçi o boşluğu ilk yarım saatte bulur. Bu yazı, o boşluğun ne olduğunu ve kurumun dışına önceden yazılmış bir defter özetinin onu nasıl kapattığını anlatıyor.

İçeride Kalan Korumanın Boşluğu

Ledger tablosunda veritabanı motoru kayıt değiştirmeyi ve silmeyi herkes için reddeder. Hash zincirinde ortadaki bir kaydı değiştirirseniz sonraki bütün özetler tutmaz. Bu, ucuz müdahaleleri ya engeller ya da fark edilir kılar: araya kayıt sıkıştırmak, tek bir satırı sessizce düzeltmek, bir kaydı silip yerine başka bir şey koymak.

Boşluk şurada: veritabanının tamamına hükmeden biri, eski bir yedeğe dönebilir ya da veritabanını baştan kurup geçmişi yeniden yazabilir. Sonuç kendi içinde kusursuz tutarlı bir kayıttır. İçeriden yapılan doğrulama "sağlam" der ve doğru söyler; çünkü sorduğu soru "bu kayıt kendi içinde tutarlı mı" sorusudur, "bu kayıt dünkü kayıtla aynı mı" sorusu değil.

Bu ihtimal teorik değildir. Denetimin varlık sebebi tam olarak budur: kurumun kendi kayıtlarına kendi verdiği not yeterli sayılmaz. Bu yüzden bir kontrolün "geçmişi yeniden yazma" senaryosuna cevabının olması gerekir.

Dış Özet Nedir

Dış özet çok kısa bir cümledir: "şu saat itibarıyla kaydın tamamının özeti şudur." Bu cümle imzalanır ve kaydın durduğu yerin dışına, düzenli aralıklarla yazılır.

Aylar sonra denetçi o eski özeti alır ve kaydı ona karşı doğrular. Tutuyorsa, kayıt özetin yazıldığı andan beri değişmemiştir. Tutmuyorsa geçmiş yeniden yazılmıştır ve bu, bir denetim izinin taşıyabileceği en güçlü kurcalama işaretidir.

Bu karşılaştırmanın en önemli özelliği, kurumun söylediğine güvenmeyi gerektirmemesidir. Denetçi iki farklı zamanda ortaya çıkmış iki şeyi karşılaştırır: o zaman dışarı yazılmış özet ve bugünkü kayıt.

Sektörde adı

Bu yöntemin İngilizce karşılığı external anchoring. Aynı fikir sertifika şeffaflık günlüklerinde ve SQL Server'ın kendi ledger özelliğinde de kullanılır: bir değeri, sonradan değiştiremeyeceğiniz bir yere erkenden yazmak. Özetin yazılacağı yerin bir blok zinciri olması gerekmez; kurumun veritabanı yöneticisinin silemediği her depo iş görür.

Neden Önceden Yazılmış Olması Gerekir

Dışarı yazılmış özetin bütün gücü yazıldığı zamandan gelir. Denetim günü kurumdan hem kayıtları hem özetleri birlikte alan bir denetçi hiçbir şey doğrulamış olmaz: ikisi de aynı anda, aynı taraf tarafından üretilmiş olabilir. Geçmişi yeniden yazan biri, özetleri de yeniden üretebilir. Değeri olan özet, yazıldığı günden beri kilitli bir depoda durduğu gösterilebilen özettir.

Bu yüzden özet, denetim takvimine değil kendi takvimine bağlanır ve sonradan değiştirilemeyecek bir yere yazılır. Yazma aralığı kanıtın çözünürlüğünü belirler: saatte bir yazılan bir özet, en fazla bir saatlik bir pencere için "bu aralıkta henüz dışarıda bir tanık yok" der.

Dış Özet Nerede Durmalı

Doğru yer, kurumun veritabanı yöneticisinin sonradan içeriğini değiştiremeyeceği bir yerdir. Uygulamada birkaç seçenek vardır ve birbirini tamamlarlar.

  • Değiştirilemez depo. Saklama kilidi olan bir nesne deposu ya da WORM paylaşımı. Yazılan dosya, saklama süresi bitmeden kimse tarafından silinemez. Veritabanı ekibinin bu depoda silme yetkisi olmamalıdır.
  • SOC ya da SIEM. Özetin yayımlandığı olay güvenlik ekibinin toplayıcısına da gider. Bu, veritabanı ekibinden bağımsız ikinci bir kopyadır ve özet beklenen zamanda gelmezse alarm kurulabilir.
  • İç denetim arşivi. Dönem paketleri ve o döneme ait özet dosyaları düzenli olarak iç denetime teslim edilebilir. Kurum içindedir ama bilgi teknolojileri hattının dışındadır.

SQL Change Guard Bunu Nasıl Yapıyor

Denetim kayıtları SQL Server 2022'nin append-only ledger tablosunda durur. Defter özeti varsayılan olarak saatte bir alınır; imza anahtarı ve dış depo klasörü tanımlı kurulumda API özeti kurumun RSA anahtarıyla imzalar ve kurumun değiştirilemez deposuna iki dosya olarak yazar: özetin kendisi ve imzası. Worker yalnız turu başlatır ve imza anahtarına erişmez. İkisi de kurulum sırasında yapılandırılır; tanımlı değilse dış dosya yazılmaz ve hazırlık ekranı bunu gösterir. Aynı anda deftere bir olay yazılır ve bu olay SIEM'e de gider; bu olaylar ciddiyet eşiğiyle süzülemez ve akışın kapatılması da SOC'a ayrı bir olay olarak gider.

Özet beklenen sürede alınamazsa ürünün hazırlık ekranı ve Defter Durumu penceresi bunu gösterir. Veritabanı eski bir yedekten geri yüklenirse ve bu SQL Server'ın geri yükleme geçmişinde görünüyorsa ürün bunu ayrı bir olay olarak yazar; dış depodaki son özetle süreklilik kopuyorsa bu da ayrı bir olaydır. Dönem paketi, dönemde yayımlanan özetleri ve özetler arasındaki boşlukları listeler.

Denetçi doğrulamayı üründen bağımsız yapar: kurumun kendi ortamında bir yedekten geri yüklenen kopyada çalışır (yedek kurumdan çıkmaz), değiştirilemez depodan aldığı özet dosyalarının imzasını openssl ile kontrol eder ve SQL Server'ın kendi yordamı sys.sp_verify_database_ledger ile kopyayı o özetlere karşı doğrular. Adımlar kanıt doğrulama sayfasında yazılıdır.

Kendi Düzeninizi Kurarken

Bu düzeni kurarken cevaplanması gereken beş soru vardır ve çoğu teknik değildir.

  • Özet nereye yazılacak? Saklama kilidi olan bir depo seçilmeli ve saklama süresi denetim saklama süresinden kısa olmamalıdır.
  • O depoda kimin yetkisi var? Veritabanı ekibinin silme yetkisi olmamalı; yetki değişiklikleri de kayıt altına alınmalıdır.
  • Açık anahtarın parmak izi nerede yayımlanacak? Özet dosyalarının imzasını doğrulamak için denetçinin bu değeri paketlerden bağımsız bir yerden alması gerekir.
  • Özet gelmezse kim uyarılacak? SOC tarafında "özet bu süre içinde gelmediyse alarm" kuralı kurulmalıdır.
  • Boşluk çıkarsa ne olacak? İki özet arasında uzun bir boşluk tek başına kurcalama değildir, ama açıklanması gerekir. Dönem paketi bu boşlukları kendiliğinden listeler.

Bu beş soruya cevabınız varsa, denetim izinizin en zayıf noktası kapanmış demektir. Cevabınız yoksa, elinizdeki kayıt yalnızca kendi kendisiyle tutarlıdır.

Sık Sorulan Sorular

Özet hangi bilgiyi taşır, kayıt içeriği dışarı çıkar mı?

Özet dosyası yalnızca veritabanı adını, blok numarasını, özet değerini, son commit zamanını ve kurulum kimliğini taşır. Kayıt içeriği, betik metni ya da kişisel veri içermez. Bu yüzden özetin kurum dışındaki bir depoda durması bir veri paylaşımı değildir.

Dış özet, zaman damgasının yerine geçer mi?

Hayır, ikisi farklı şeyi çözer. Dışarı yazılmış özet, kaydın belli bir andan beri değişmediğini gösterir ve gücünü önceden yazılmış olmasından alır. Zaman damgası ise bir dosyanın o anda var olduğunu kurumun sunucu saatinden değil, dış bir otoriteden alır. SQL Change Guard denetim dosyasında RFC 3161 zaman damgasını destekler.

Özet dosyası silinirse ne olur?

Saklama kilidi olan bir depoda saklama süresi bitmeden silinemez; güvencenin bu kısmı ürüne değil kurumun deposuna dayanır. Kilit yoksa silme mümkündür, ama SIEM'e giden olaylar ve dönem paketindeki özet listesi eksik dosyayı gösterir. Bu yüzden deponun seçimi mekanizmanın kendisi kadar önemlidir.

Ürünün kendi doğrulaması yetmez mi?

Ürün, denetim dosyasını üretirken defteri dış özete karşı doğrular ve sonucu dosyaya yazar. Ama bu ürünün kendi değerlendirmesidir. Bağımsız doğrulama, denetçinin değiştirilemez depodan kendisinin aldığı özet dosyalarıyla, kurumun ortamında geri yüklenmiş bir kopyada kendisinin çalıştırdığı ya da izlediği doğrulamadır.

Düzeni birlikte kuralım

Değiştirilemez depo, parmak izinin yayımlanması ve SOC alarmı için pratik bir düzen çıkaralım.

Demo Planlayın →