Yazılara geri dön
Yazı

LLM ve iptables ile Anormal sudo Oturum Süresi Tespiti

Syslog üzerindeki uzun sudo oturumlarını LLM ile analiz edip iptables ile otomatik IP engelleme yöntemi. Linux sistem yöneticileri için uygulama adımları.

Yapay ZekasudoLLMiptableslog analysis

Ben son zamanlarda hafif LLM entegrasyonlarını log analizinde deniyorum, özellikle ayrıcalık yükseltme desenleri etrafında. sudo loglarında tekrarlanan bir sinyal oturum süresidir—mevcut yönetici görevleri genellikle dakikalar içinde tamamlanır, fakat güvenliği aşılmış hesaplar veya betikler bazen sudo oturumlarını saatler açık bırakır. Ortamımda önce sudo oturum loglarını başlangıç ve bitiş zaman damgalarıyla zenginleştirdim, ardından bu verinin kayan pencerelerini küçük bir yerel LLM'e besleyerek aykırı değerleri işaretlemeye başladım. Hedefim auditd veya fail2ban gibi araçları değiştirmek değil, eşik tabanlı kuralların kaçırdığı düşük hacimli, yavaş kötüye kullanımları davranışsal bir katmanla yakalamaktır.

İlk olarak güvenilir sudo oturum verisine ihtiyaç duyduğumu fark ettim. Varsayılan olarak sudo logları sadece komut çalıştırmalarını gösterir, oturum sınırlarını değil. Bu durumu pam_exec ve basit bir sarmaç betik kullanarak giderdim—bu sarmaç oturum başlangıcı ve sonunu özel bir etiketle syslog'a kaydeder. İşte sarmaçın temel kısmı:

#!/bin/bash
# /usr/local/lib/sudo-session-logger
SESSION_START=$(date +%s)
logger -t sudo-session "START uid=$(id -u) user=$USER pid=$$"
"$@"
SESSION_END=$(date +%s)
DURATION=$((SESSION_END - SESSION_START))
logger -t sudo-session "END uid=$(id -u) user=$USER duration=$DURATION"

Bu betiği çalıştırılabilir yaptım ve /etc/pam.d/sudo dosyasında şu şekilde referans gösterdim:

session    optional     pam_exec.so /usr/local/lib/sudo-session-logger

Artık her sudo oturumu iki syslog satırı üretiyor: biri başlangıçta, biri bitişte saniye cinsinden süreyle. Bu logları rsyslog üzerinden ayrı bir dosyaya (/var/log/sudo-session.log) topluyorum ki işleme daha kolay olsun.

Sonra LLM kısmına geçtim. Ollama ile yerel olarak çalıştırılan kuantize edilmiş Llama 3 8B modelini kullandım—API çağrısı yok, harici bağımlılık yok. Son saatlik sudo-session loglarını okuyan, kullanıcı ve kaynak IP'ye (PAM'ın RHOST'undan) göre gruplayıp oturum süresini hesaplayan bir Python script yazdım. Sabit eşikler belirlemek yerine, son oturumları JSON dizisi olarak LLM'e sundum ve bağlam (gündelik saat, kullanıcı davranışı, süre aykırı değerleri) göz önünde bulundurarak hangilerinin anormal olduğunu sordum. Prompt şu şekilde görünüyor:

Analyze these sudo session durations (in seconds) for user alice from 10.0.0.45:
[320, 180, 210, 4800, 190]
Which session(s) are likely anomalous and why? Respond in JSON: {"anomalous": [indices], "reason": "short explanation"}

Model, geçmişe göre 4800 saniyelik (80 dakikalık) oturumu anormal olarak doğru şekilde işaretledi. Yanıtı ayrıştırdım ve güven seviyesi yüksekse eylem tetikledim.

Otomasyon için ipset üzerinden iptables ile entegrasyon yaptım. LLM bir oturumu anormal olarak işaretlediğinde, kaynak IP'yi çıkarıp sudo_abusers adlı ipset'e ekliyorum; bu ipset INPUT zincirindeki DROP kuralına referans veriyor:

# Setup (run once)
ipset create sudo_abusers hash:ip timeout 3600
iptables -I INPUT -m set --match-set sudo_abusers src -j DROP

Python scripti şu komutu çalıştırıyor:

ipset add sudo_abusers $IP

Bir saatlik zaman aşımı ayarladım, böylece engeller yenilenmedikçe süresi doluyor—yanlış pozitiflerden kaynaklanan kilitlenmeleri önlerken hâlâ devam eden kötüye kullanımı bozar. Ayrıca her engellemeyi LLM'nin gerekçesiyle birlikte /var/log/sudo-llm-block.log dosyasına kaydediyorum denetim için.

Bu yaklaşım mükemmellik yakalamak değil, sinyali güçlendirmek hakkında. LLM'nin Linux iç yapılarını anlaması gerekmiyor—sadece bir hizmet hesabından 3'da gelen 90 dakikalık sudo oturumunun, aynı IP'den son 20 oturumunun desenine uymadığı fark edebiliyor olması yeterli. iptables ipset güncellemelerinin hızıyla birleştiğinde bu, duyarlı bir geri bildirim döngüsü oluşturur.

Daha önceki yazımda Fail2ban + LLM ile SSH üzerinden brute force saldırılarına akıllı müdahale (https://furkanikkan.com/urun/fail2ban-llm-ssh-brute-force-saldirilarina-akilli-mudahale-136) konusunda bahsettiğim gibi, burada da modeli yerel tutmak ve entegrasyonu basit tutmak anahtardır. Ollama ve 200 satırlık bir Python script ile bu işi gecikme veya dış risk wprowaden yapıyor. Zaten sudo loglarını topluyorsanız, oturum sınırlarını ekleyip LLM tabanlı anomali tespiti eklemek, imza tabanlı araçların kaçırdığı yavaş hareket eden ayrıcalık kötüye kullanımını yakalamak için düşük maliyetli bir yoludur.


Kapak görseli: ₡ґǘșϯγ Ɗᶏ Ⱪᶅṏⱳդ · CC0 (Openverse / kamu malı) · https://www.flickr.com/photos/148598741@N02/51973552248