CyberFlow Logo CyberFlow BLOG
Mssql Pentest

SQL Tabanlı Kalıcılık Mekanizmalarını Anlamak ve Yönetmek

✍️ Ahmet BİRKAN 📂 Mssql Pentest

SQL Agent job, trigger ve CLR kullanarak kalıcılık mekanizmalarını nasıl görselleştirileceğini ve yönetileceğini keşfedin.

SQL Tabanlı Kalıcılık Mekanizmalarını Anlamak ve Yönetmek

SQL Server ortamında kalıcılık ile ilgili riskleri ve mekanizmaları gözden geçirmek son derece kritik. SQL Agent job, trigger ve CLR gibi kavramları öğrenerek güvenlik önlemlerinizi artırın.

Giriş ve Konumlandırma

SQL Tabanlı Kalıcılık Mekanizmalarını Anlamak ve Yönetmek

Siber güvenlik alanında, özellikle de veritabanı ortamlarında kalıcılık mekanizmaları, güvenlik profesyonellerinin hayati bir dikkatle ele alması gereken konular arasında yer almaktadır. SQL (Structured Query Language) tabanlı kalıcılık mekanizmaları, veri tabanlarında belirli bir süre boyunca gizli kalabilen veya denetimlerden kaçabilen otomatik yürütme kaynaklarını ifade eder. Bu mekanizmalar, SQL Server gibi kurumsal veri tabanı sistemlerinde veri güvenliği ihlalleri gerçekleştirirken saldırganlar tarafından kullanılabilir.

Bu yazıda, SQL tabanlı kalıcılık mekanizmaları; yani iş, tetikleyici ve CLR (Common Language Runtime) gibi bileşenlerin nasıl çalıştığını, bu yapıların potansiyel risklerini ve güvenlik uygulamaları üzerindeki etkilerini derinlemesine inceleyeceğiz. Kalıcılık, bir veri değişikliği veya olay sonrasında sistemin bir durumu devam ettirme yeteneğini ifade eder ve bu durum güvenlik açısından kritik bir konu olduğunu ortaya koyar. Çünkü bazı saldırganlar, gerçekleştirdikleri eylemleri gizli tutmak için bu kalıcılık mekanizmalarını kullanarak sistemden ayrılırlar.

Önemi ve Siber Güvenlik Bağlamı

SQL tabanlı kalıcılık mekanizmalarının öneminin temelinde, siber güvenlik ve penetrasyon testleri (pentest) bağlamında bu mekanizmaların potansiyel yarattığı riskler yatmaktadır. Kalıcılık, bir erişim veya davranışın uzun süre fark edilmeden sürdürülebilmesini sağladığı için, sistemlerin güvenliğini tehdit eder. Bu tür mekanizmaların varlığı, bir sistemin ne kadar güvenli olduğunu gerçek anlamda ölçmek için önemli bir kriterdir. Ayrıca, kalıcılığa yönelik değerlendirme ve denetim süreçleri, güvenlik açıklarını belirlemek ve kapatmak için kritik öneme sahiptir.

Veritabanı yöneticileri ve güvenlik uzmanları için, SQL Agent Job, trigger ve diğer otomatik çalıştırılabilen nesnelerin analizi, veri tabanının yapılandırmasını anlamada hayati bir rolle sahiptir. İlgili nesnelerin görünürlüğünün artırılması, potansiyel risklerin fark edilmesi için bir ön adımdır. Aksi takdirde, görünmeyen kalıcılık yüzeyleri, saldırganlar tarafından istismar edilebilir ve uzun dönemli bir tehdide dönüşebilir. Bu nedenle, bu yapıların denetimi, SQL tabanlı veri tabanlarının kuruluş güvenliği açısından dikkate alınması gereken bir konudur.

Teknik İçeriğe Hazırlık

Bu yazının ilerleyen bölümlerinde, SQL tabanlı kalıcılık mekanizmalarını daha ayrıntılı bir şekilde irdeleyeceğiz. İlk adım olarak, SQL Agent Job envanterinin nasıl görüntüleneceğini ele alacağız. Ayrıca, trigger ve CLR gibi diğer kalıcılık kaynaklarını nasıl analiz edeceğimizi de açıklayacağız. Her bir mekanizmanın nasıl çalıştığını ve hangi koşullarda risk oluşturduğunu anlamak, güvenlik stratejilerinin etkili bir şekilde uygulanabilmesi için gereklidir.

-- Tanımlı SQL Agent Job kayıtlarını listeleyen sorgu
SELECT name FROM msdb.dbo.sysjobs;

Yukarıdaki örnek sorgu, SQL Agent Job envanterini görmek için kullanılabilir. Bu tür sorgular, sistemin otomatik çalışan görevlerini belirlemek ve gereksiz veya şüpheli olanları incelemek için faydalıdır. İzleme ve denetim noktaları oluşturmanın yanı sıra, denetimler sırasında dikkat edilmesi gereken bazı risk göstergeleri mevcuttur. İşte burada, otomatik çalışan veri tabanı mantığının değerlendirilmesi gerektiği açığa çıkar.

Sürecin sonunda, görselleştirilen verilerin analizi, güvenlik şirketlerinin ve veritabanı yöneticilerinin sistem güvenliğini artırmak için gerekli önlemleri almasına yardımcı olacaktır. Yazımızın devamında, kalıcılık kavramına dair derinlemesine bilgi sağlayarak okuyucuları güvenlik önlemleri geliştirmeye ve uygulamaya yönlendireceğiz.

Teknik Analiz ve Uygulama

SQL Agent Job Envanterini Görüntüleme

SQL Server'da kalıcılık mekanizmalarının yönetiminde ilk adım, zamanlanmış işlerin (SQL Agent Jobs) envanterini görüntülemektir. Bu işlemi gerçekleştirmek için aşağıdaki SQL sorgusu kullanılabilir:

SELECT name 
FROM msdb.dbo.sysjobs;

Bu sorgu, sistemde tanımlı tüm SQL Agent işlerinin adlarını listeleyecektir. Zamanlanmış görevlerin envanterinin çıkartılması, potansiyel kalıcılık yüzeylerini ve bu yüzeylerin ne tür işlemler gerçekleştirdiğini anlamak için kritik bir adımdır.

Kalıcılık Mekanizmaları

Kalcılığın sağlanması, veri tabanı ortamlarında uzun süreli etkiler yaratabilen belirli mekanizmaların uygulanmasıyla mümkün olur. Bu mekanizmalar, SQL Server'ın işleyişinde otomatikleştirilen çeşitli süreçlere dayanır. Örneğin, bir trigger, belirli bir olay gerçekleştiğinde otomatik olarak devreye girer:

SELECT name 
FROM sys.triggers;

Bu sorgu, sistemde tanımlı tüm trigger nesnelerinin adlarını listeleyerek, otomatik tetiklemelerin ve bunların potansiyel etkilerinin analizi için bir temel sağlar.

Kalıcılık Kavramı

Kalcılık, veritabanı güvenliği açısından uzun süreli ve görünmeyen davranışlar oluşturan nesneleri ifade eder. Bir davranışın kalıcı olabilmesi için belirli koşullar altında otomatik olarak devreye girmesi gerekmektedir. Örneğin, iş ve tetikleyici nesneleri bu tanıma uymaktadır.

Trigger Envanterini Listeleme

Trigger'ların yönetimi, güvenlik açısından önem arz eder. Belirli veri değişiklikleri veya olaylar sonrasında otomatik olarak devreye giren bu nesnelerin izlemesi, veri güvenliğini sağlamada hayati bir role sahiptir. Herhangi bir güvenlik açığı, bu tetikleyicilerin geçişinden dolayı fark edilmeyebilir. Dolayısıyla, aşağıdaki sorgu ile sistemdeki trigger'lar görüntülenmelidir:

SELECT name 
FROM sys.triggers;

Risk Göstergeleri

Kalcılık yüzeylerinin yönetilmesi sırasında bazı göstergeler, güvenlik ihlali açısından risk taşıyan durumların fark edilmesine yardımcı olabilir. Örneğin, aşağıda genel bazı risk gösterge türleri ve bunların etkileri belirtilmiştir:

  • Bilinmeyen Zamanlanmış Görev: İş gerekçesi belirsiz olan bir zamanlanmış görev, görünmeyen otomasyon yüzeyi oluşturabilir.
  • Beklenmeyen Tetikleyici: Uygulama tasarımında beklenmeyen bir otomatik veri işleme mantığı, veri bütünlüğünü tehdit edebilir.

Otomatik Tetikleme Kavramı

Otomatik tetikleme, veri tabanında meydana gelen değişiklikler ya da belirli olaylar sonrasında devreye giren bir sistemdir. Örneğin, bir INSERT, UPDATE ya da DELETE komutu çalıştırıldığında belirli bir tetikleyici otomatik olarak faaliyete geçer.

CLR Assembly Nesnelerini Görüntüleme

Kalıcılık risklerini anlamak için, sunucu üzerinde yüklü olan Assembly nesneleri de incelenmelidir. Bu nesneler, genişletilmiş çalışma yüzeyleri oluşturmak amacıyla kullanılır ve aşağıdaki sorgu ile görüntülenebilir:

SELECT name 
FROM sys.assemblies;

Yüklenen bu nesnelerle ilgili yapılacak incelemeler, güvenlik değerlendirmeleri açısından kritik öneme sahiptir.

Kalıcılık Yüzeyi Katmanları

Veritabanı ortamlarında, kalıcılığın ve otomatik süreçlerin yönetimi için farklı katmanlar bulunmaktadır. Bu katmanlar, belirli aralıklarda ya da planlı zaman dilimlerinde otomatik olarak çalışan görevleri kapsar:

  • Zamanlama Katmanı: Otomatik görevlerin düzenli olarak çalıştığı katmandır.
  • Veri Değişikliği Katmanı: Veri değişikliği ile tetiklenen otomatik işlemlerin yer aldığı katmandır.
  • Kod Genişletme Katmanı: Sunucuya eklenen assembly ve modüllerin bulunduğu katmandır.

Bu katmanların her biri farklı denetim gereksinimlerine sahiptir ve güvenlik açısından düzenli olarak izlenmelidir.

Zamanlanmış Görev Kavramı

Zamanlanmış görevler, belirli zaman dilimlerinde otomatik olarak çalışma yeteneğine sahip olan nesnelerdir. Bu görevlerin yönetimi, veri tabanı güvenliğini sağlamak için düzenli denetim gerektirir. Aksi takdirde, görünmeyen otomasyon tehlikeleriyle karşılaşmak olasıdır.

CLR Modüllerini Listeleme

Son olarak, CLR tabanlı modüllerin listelemesi de önemli bir risk değerlendirmesi sağlar. Aşağıda bu modülleri görüntülemek için kullanılacak sorgu verilmiştir:

SELECT name 
FROM sys.assembly_modules;

Bu sorgu ile sistemde yüklü olan tüm CLR modüllerinin adları elde edilebilir ve bu modüllerin güvenliği hakkında bilgi edinilebilir.

Savunma Önlemleri

SQL Server'da kalıcılığa yönelik riskleri azaltmak için çeşitli savunma önlemleri uygulanmalıdır. Bunlar arasında, otomatik çalışan nesnelerin düzenli olarak gözden geçirilmesi, sahiplik ve değişikliklerin izlenebilir hale getirilmesi bulunmaktadır. Özellikle, otomatik olarak çalışan ya da genişletilmiş nesne oluşturma yeteneğine sahip hesapların sınırlandırılması önerilmektedir.

Bu analizlerin genel amacı, SQL Server'da otomatik çalışan nesneleri yalnızca gerekli, sahipliği belli ve denetlenebilir şekilde tutmaktır. Böylece, kalıcılığa ilişkin potansiyel riskler en aza indirilmiş olur.

Risk, Yorumlama ve Savunma

Risk Değerlendirmesi ve Yönetimi

Siber güvenlikte, SQL tabanlı kalıcılık mekanizmalarının doğru yönetimi, hem güvenlik ihlallerinin engellenmesi hem de var olan zafiyetlerin giderilmesi açısından kritik öneme sahiptir. Bu aşamada itibariyle, SQL Server ortamındaki çeşitli bileşenlerin analiz edilmesi ve gözlemlenen risklerin anlamlandırılması gerekmektedir.

SQL Agent Job Envanteri ve Risk Göstergeleri

SQL Server'da tanımlı job'ların bilinmesi, zamanlanmış görevlerin otomatik olarak çalışıp çalışmadığını ve potansiyel riskleri gösterebilir. Aşağıdaki SQL komutu, mevcut job'ların listesini vermektedir:

SELECT name FROM msdb.dbo.sysjobs

Belirli kriterlere göre sınıflandırılmamış ya da amacı tam olarak açıklanmayan job'lar, "Unknown Scheduled Job" riski taşıyabilir. Bu durum, sistemin görünmeyen otomasyon katmanlarında suistimallere yol açabilir. Bunun yanı sıra, job'ların sahipliğinin ve değişikliklerinin düzenli olarak izlenmesi gerekse de, bu işlemlerin hangi kullanıcı hesabı üzerinden yapıldığının denetlenmesi önemlidir.

Trigger ve Data Change Layer Riskleri

Trigger'lar, belirli veri değişikliği veya olaylar sonrası otomatik devreye giren veri tabanı nesneleridir. Beklenmeyen bir trigger varlığı, uygulama tasarımında teknoloji açısından güçlükler çıkarabilir ve bu durum şu SQL sorgusuyla tespit edilebilir:

SELECT name FROM sys.triggers

Özellikle, uygulama mantığında öngörülmeyen otomatik veri işleme senaryolarının tespit edilmesi, güvenlik incelemeleri açısından kritik bir risk göstergesi olarak öne çıkmaktadır. "Unexpected Table Trigger" olarak adlandırılan bu durum, veritabanı üzerinde kontrolsüz veri işleme aktivitelerine yol açabilir.

CLR Assembly Kontrolü

SQL Server üzerinde sunucuya yüklenen yönetilen kod bileşenleri, yani CLR (Common Language Runtime) modülleri, veri tabanı sisteminin genişletilmiş çalışma yüzeylerini oluşturur. Bu bileşenlerin detayları aşağıdaki sorguyla elde edilebilir:

SELECT name FROM sys.assemblies

Denetlenemeyen veya amacı belirsiz olan CLR modülleri, "Unreviewed Custom Assembly" riski ile ilişkilendirilebilir ve bu durum sistem bileşenleri üzerinde daha fazla zafiyet yaratabilir. CLR bileşenlerinin düzenli olarak kontrol edilmesi, siber güvenlik risklerinin azaltılmasında önemlidir.

Güvenlik Önlemleri ve Hardening Önerileri

SQL tabanlı kalıcılık mekanizmalarının güvenlik anlamında yönetilmesi için şu önlemler alınabilir:

  1. Görünürlük Sağlama: Tüm job, trigger ve CLR nesnelerinin görünür hale getirilmesi gerekmektedir. Bu, bilinçli kararlar verilmesini kolaylaştıracaktır.

  2. Sahiplik ve Değişiklik Yönetimi: Otomatik çalışan veya genişletilmiş nesnelerin sahipliklerinin belirlenmesi ve değişiklik haklarının kısıtlanması önerilmektedir. "Limit Creation Rights" politikası, bu tür risk yüzeylerini azaltabilir.

  3. İzleme Mekanizmaları: Yeni nesne oluşturma, değiştirme ve silme işlemlerinin izlenebilir hale getirilmesi, olası tehditleri ortaya çıkarmak için faydalı olacaktır. "Track Object Changes" uygulaması bu yönde önemli bir adım olacaktır.

Sonuç

SQL tabanlı kalıcılık mekanizmalarının yönetimi, siber güvenlik stratejileri içinde hayati bir yerde durmaktadır. İşletmelerin güvenlik politikalarının güçlendirilmesi için bu mekanizmaların dikkatlice izlenmesi, düzenli olarak denetlenmesi ve en iyi uygulamaların uygulanması gerekir. Unutulmamalıdır ki, her bir otomatik nesnenin görünür hale getirilmesi ve yönetilmesi, potansiyel zafiyetleri minimize edecektir. Bu bağlamda, düzenli güvenlik değerlendirme süreçleri, sistemin güvenliğini artırmak adına kritik bir yere sahiptir.