Mergen · Tespit

Kural Referansı

Mergen 54 yerleşik tespit kuralıyla gelir (40 PostgreSQL/sistem + 14 MongoDB) ve admin-tanımlı bildirimsel bir custom-rule motoruyla. Her kuralın ne yakaladığı, önem seviyesi ve lisans katmanı aşağıda.

Critical · Warning · Info Katman: temel (her zaman açık) · gelişmiş (advanced_analytics lisansı)
Tespit nasıl çalışır

Ajan wire protokolünü yakalar (eBPF uprobe satır-içi, ya da AF_PACKET ağ yakalama / off-host toplayıcı), her ifadeyi bir AST'ye ayrıştırır (ifade türü, okunan/yazılan tablolar, kolonlar, WHERE yüklemleri, fonksiyon çağrıları) ve her kuralı bu ayrıştırılmış akışa karşı değerlendirir — sorgular, bind parametreleri, sonuç satırları ve hatalar. MongoDB için OP_MSG komutları (sıkıştırılmış dahil) fiil + koleksiyon + filtre şekline ayrıştırılır.

Yerleşik kurallar

Enjeksiyon

5
sql_injection crit basic Zincirli sorgular (; ile), UNION tabanlı enjeksiyon ve WHERE totolojileri (1=1, 'a'='a').
jsonb_filter_bypass warn advanced Boş kapsayıcıya karşı JSONB @> içerme — her zaman doğru olan filtre atlatması.
hibernate_native_query_marker info advanced ORM native-query yorum işaretleri — ORM katmanından kaçan ham SQL'i envanterler (enjeksiyon yüzeyi).
mongo_where_injection Mongo crit basic Filtrelerde $where sunucu-taraflı JavaScript (NoSQL enjeksiyonu).
mongo_js_execution Mongo crit basic eval / mapReduce sunucu-taraflı JavaScript çalıştırma.

Keşif

4
system_catalog_recon crit advanced Sistem kataloğu okumaları; kimlik/rol katalogları (pg_shadow, pg_authid) Kritik seviyededir.
large_object_read warn basic Doğrudan pg_largeobject okuması — lo_* izin kontrollerini atlar.
mongo_unfiltered_read Mongo warn basic Filtresiz find / count / distinct.
mongo_enumeration Mongo info basic listDatabases / listCollections numaralandırma.

Sızdırma

9
excessive_data_export warn advanced Etkin satır filtresi olmayan SELECT * (CTE ve alt sorgu farkındalıklı).
exfil_direct warn advanced COPY TO, pg_read_file, pg_read_binary_file, pg_ls_dir, lo_export, lo_get, lo_put.
exfil_byte_volume warn advanced Bir pencerede eşiği aşan kümülatif sonuç-byte hacmi — yavaş sızdırma.
exfil_time_pattern warn advanced Düzenli aralıklı tekrarlı sorgulama (beaconing / zamanlı kazıma).
dblink_usage warn advanced dblink() ile veritabanları arası erişim — yanal hareket ve SSRF yüzeyi.
foreign_data_access crit advanced FDW yüzeyi: CREATE SERVER / USER MAPPING, foreign table, file_fdw dosya okuma.
mongo_unfiltered_delete Mongo crit basic Boş filtreyle delete — koleksiyon-geneli yıkım.
mongo_unfiltered_update Mongo crit basic Boş filtreyle update — koleksiyon-geneli değişiklik.
mongo_excessive_data_export Mongo warn basic Koleksiyon-geneli okuma/dışa-aktarma desenleri.

Uyumluluk / KVKK

5
pii_content warn basic Sorgu literalleri, bind parametreleri veya sonuç satırlarında PII (kimlik no, kart, e-posta…).
turkish_pii crit basic KVKK Türk PII: TCKN, IBAN, GSM, plaka — geçerlilik kontrolleriyle (TCKN sağlaması).
ozel_nitelikli_veri_access crit basic KVKK özel nitelikli (sağlık, din, biyometrik…) kişisel veri erişimi.
sensitive_column_read warn basic Operatörce etiketlenmiş hassas kolonlara dokunan okumalar (yapılandırılabilir liste).
mongo_pii_in_response Mongo warn basic Yanıt belgelerinde PII desenleri.

Yetki

9
role_privilege_escalation crit advanced CREATE/ALTER ROLE SUPERUSER / CREATEROLE / BYPASSRLS (kritik); REPLICATION (uyarı).
role_impersonation warn advanced Yüksek yetkili bir role SET SESSION AUTHORIZATION / SET ROLE.
priv_esc_chain crit advanced Oturum penceresinde ilişkilendirilen çok adımlı yetki yükseltme zincirleri.
dangerous_grant crit basic pg_execute_server_program / pg_read_all_data… GRANT'ı (kritik); GRANT TO PUBLIC (uyarı).
ddl_by_non_admin crit basic Yapılandırılmış admin izin listesi dışındaki bir kullanıcının DDL çalıştırması.
security_definer_function warn advanced CREATE FUNCTION … SECURITY DEFINER — kalıcı yetki yükseltme yüzeyi.
dangerous_extension crit advanced Güvenilmeyen dilde CREATE EXTENSION (plpython3u, plperlu…).
mongo_auth_bypass Mongo crit basic Hassas alanlarda karşılaştırma-operatörü enjeksiyonu ({password:{$ne:""}}).
mongo_privileged_op Mongo crit basic createUser / dropUser / rol atamaları / createRole …

Hizmet Reddi (DoS)

6
resource_abuse warn basic Backend'i durduran / satır-byte patlatan primitifler: pg_sleep, generate_series bombaları.
cartesian_product warn basic Filtresiz çok-tablolu kartezyen çarpımlar.
unbounded_recursive_cte warn basic Üst düzey LIMIT olmadan WITH RECURSIVE.
redos warn basic Felaket geri-izlemeli regex operandları (iç içe niceleyiciler).
lock_abuse warn basic Açık LOCK TABLE … IN ACCESS EXCLUSIVE MODE.
failed_login_burst crit basic Kayan pencerede N kimlik doğrulama hatası (varsayılan 60sn'de 5).

DDL / Kalıcılık

7
dangerous_ddl crit basic COPY FROM/TO PROGRAM (uzaktan kod çalıştırma), güvenilmeyen dilde CREATE FUNCTION, riskli DDL.
trigger_backdoor warn advanced CREATE EVENT TRIGGER — DDL ile tetiklenen kalıcılık.
audit_tamper crit advanced Loglama/replikasyonda ALTER SYSTEM; archive_command / *_preload_libraries (kritik).
mongo_destructive_command Mongo crit basic drop, dropDatabase, dropIndexes, renameCollection, dropAll*.
mongo_admin_command Mongo warn basic replSet* / shard / fsync / compact küme yönetimi.
mongo_profiling_change Mongo warn basic Profil-seviyesi değişiklikleri (denetim-izi kurcalama).
mongo_session_kill Mongo warn basic killSessions / killOp — oturum/işlem sonlandırma.

Anomali

5
off_hours_query info basic Yapılandırılmış mesai saatleri penceresi dışındaki etkinlik.
bulk_delete crit basic WHERE olmadan DELETE (tam tablo silme); tablolar izin listesine alınabilir.
large_result_set info basic Alışılmadık derecede çok satır döndüren tek bir sorgu.
ueba_anomaly crit advanced Varlık-başına davranışsal temel: hız/tablo/byte/mesai-dışı/yazma-oranı/yeni-tablo üzerinde EWMA + sağlam z-skor.
ueba_peer_anomaly crit advanced Uygulama grubuna karşı akran-grubu aykırı değeri (medyan + MAD sağlam istatistik).

Denetim

4
login_audit info basic Giriş-başına denetim kaydı: login_success (Info) / login_failed (Warning), kullanıcı/db/IP ile.
query_error info basic SQLSTATE + mesaj ile başarısız ifadeler (izin-reddi vb. Warning).
clock_anchor_skew warn basic Ajan saati DB / konsola göre 5 dakikayı aşınca uyarı (denetim-zamanı bütünlüğü).
framer_desync_burst warn advanced Wire-protokol desync patlamaları — yakalama-bütünlüğü / atlatma sinyali.

Custom (özel) kurallar

Yerleşiklerin ötesinde, adminler konsolda bildirimsel özel kurallar tanımlar (Rules → Custom rules). Bunlar heartbeat kanalıyla ajanlara iletilir (sürüm-korumalı, yeniden başlatma yok) ve yerleşik kurallarla aynı ayrıştırılmış akışta değerlendirilir. Kod çalıştırma YOK: eşleşme tamamen bildirimseldir ve regex'ler doğrusal-zamanlı (RE2-sınıfı) bir motor kullanır — bir özel kural ajanı ReDoS ile kilitleyemez.

{
  "id": "crown_jewel_read",
  "severity": "critical",         // info | warning | critical
  "db_engine": "pg",              // pg | mongo
  "enabled": true,
  "match": {
    "statement_kinds": ["Select"],
    "tables_regex": "^payroll_",
    "columns_regex": "salary|iban",
    "command_regex": "",          // raw-SQL escape hatch
    "user_in": [],
    "user_not_in": ["app_readonly"],
    "require_no_where": false
  },
  "message_template": "payroll read: {kind} on {tables} by {user}",
  "rate": { "count": 10, "window_secs": 60, "group_by": "user" }
}

Alanlar

id Kararlı kural kimliği; tespitlerde rule_id olarak görünür; yerleşiklerle aynı şekilde host/grup/global kapatılabilir.
severity info | warning | critical (warn / crit takma adları; başka her şey info'ya düşer).
db_engine pg (ayrıştırılmış SQL akışı) veya mongo (ayrıştırılmış MongoDB komut akışı).
enabled false ise tanım derlenmez.
match Eşleşme koşulları (VE anlamı). Boş nesne her ifadeyle eşleşir.
message_template Tespit mesajı; aşağıdaki yer tutucular.
rate Varsa: penceredeki eşleşme sayısı eşiği.

Eşleşme koşulları (VE — mevcut her koşul sağlanmalı)

Boş bir match her ifadeyle eşleşir — her zaman en az bir ekseni kısıtlayın.

statement_kinds Ayrıştırılmış ifade türü (Select, Insert, Update, Delete, Copy, CreateRole, AlterRole, Grant). Boş = herhangi.
tables_regex İfadenin okuduğu veya yazdığı herhangi bir tablo.
columns_regex İfadenin okuduğu herhangi bir kolon.
command_regex Ham SQL metni — AST alanları yetmeyince kaçış kapısı.
user_in / user_not_in Oturum kullanıcısı izin / red (tam eşleşme).
require_no_where Yalnızca WHERE yüklemi OLMAYAN ifadelerde tetiklenir (tam-tablo şekli).
time_window Kuralı bir UTC zaman penceresine sınırlar: {start, end (HH:MM), negate, days}. start>end gece-aşımı; negate pencere DIŞINDA eşleşir; days Mon=0..Sun=6. Yoksa = her zaman.
MongoDB (db_engine: "mongo")

command_regex → komut fiili, tables_regex → koleksiyon, require_no_where → filtre belgesi yok. Diğer match alanları uygulanmaz.

Mesaj şablonu yer tutucuları

{kind} · {tables} · {columns} · {user}

Hız (rate)

rate ile kural yalnızca window_secs içinde ≥ count kez eşleştiğinde tetiklenir (kayan pencere). group_by:"user" kullanıcı-başına pencere tutar; aksi halde geneldir.

Güvenlik

Geçersiz regex o kuralı tümüyle atlar (loglanır) — asla çökme veya yarı-eşleşme olmaz. Önem takma adları warn/crit; bilinmeyen → info. Kapsam (host/grup/global aç-kapa) ve alarm, yerleşik kurallarla birebir aynıdır.