Logsentinel

GELİŞTİRİLME AŞAMASINDA. Bu proje, bir sistemin loglarını (örneğin syslog, auth.log, nginx.log) toplayarak anomali tespiti yapan ve şüpheli aktivitelerde kullanıcıya e-posta/SMS ile uyarı gönderen bir sistem geliştirmeni içerir.

author image

Written by

Furkan İbiş

Published on

May 26

Logsentinel

Amaç

İşletim sisteminden bağımsız olarak, sistem loglarını analiz edip anomali tespiti yapabilecek ve bu durumları admin'e e-posta/SMS yoluyla bildirecek bir proje tasarlamak.

Planlama

Proje, çalıştığı sistemin işletim sistemi türünü tespit ederek, ilgili sistemin log kayıt yapısına uygun şekilde işlem yapacaktır. Bu nedenle, farklı işletim sistemlerinin loglama yöntemlerinin detaylı olarak öğrenilmesi gerekmektedir.

Linux Logları

Linux sistemlerde loglar genel olarak /var/log dizini altında tutulur. Bu dizindeki dosyaları okuyarak ve analiz ederek gerekli tespitlerin yapılması hedeflenmektedir.
Çeşitli olay türleri için farklı log dosyaları ve log formatları kullanılmaktadır; dolayısıyla farklı log tipleri için ayrı log analiz sınıfları tasarlanmalıdır.

Ancak asıl zorluk logları okumaktan ziyade, farklı Linux dağıtımlarının log yapılarında oluşabilecek değişkenliklere uyum sağlayabilmektir. Projenin bu çeşitliliği kapsayacak esneklikte tasarlanması kritik öneme sahiptir.

Projenin işletim sisteminden bağımsız çalışabilmesi için, özellikle Linux dağıtımları arasında logların nasıl tutulduğunun analiz edilmesi gereklidir. Bu kapsamda ilk olarak Debian tabanlı GNU/Linux sistemlerde log dosyalarının nasıl organize edildiğine bakalım:

Debian (ve Ubuntu) Log Dağılımı

Debian tabanlı sistemlerde loglar genellikle /var/log/ dizini altında yer alır ve aşağıdaki gibi sınıflandırılmıştır:

Sistem Logları:

  1. Authorization Logs (/var/log/auth.log)
    Parola denemeleri, sudo komutu kullanımları ve SSH oturumları gibi yetkilendirme loglarını içerir.

  2. Daemon Log (/var/log/daemon.log)
    Arka planda çalışan servislerin (örneğin cron, bluetoothd, sshd) loglarını içerir.

  3. Debug Log (/var/log/debug)
    Sistem ve uygulama düzeyinde debugging logları burada yer alır.

  4. Kernel Log (/var/log/kern.log)
    Linux çekirdeği tarafından üretilen logları içerir.

  5. System Log (/var/log/syslog)
    Genel sistem loglarını kaydeder. Network bağlantıları, servis başlangıç/kapanışları gibi bilgiler burada toplanır.

Uygulama Logları:

  1. Apache Logları (/var/log/apache2/)

    • access.log: Sunucuya gelen başarılı istekleri kaydeder.
    • error.log: Sunucu tarafında meydana gelen hatalar burada yer alır.
  2. X11 Logları (/var/log/Xorg.0.log)

    • X11 sunucusu tarafından kullanıcı oturumları ve ekran konfigürasyonları ile ilgili loglar tutulur.

Bu log yapısına dayalı olarak Log Sentinel projesinin ilk sürümünü Debian sistemleri için tasarlayacağım. İlerleyen aşamalarda diğer dağıtımlar (Red Hat, Arch, vs.) ve uygulama tabanlı log mekanizmaları için de destek eklenecektir.

Denemeler

İlk aşamada, kendi cihazım Ubuntu tabanlı bir sistem olduğu için işletim sistemini tespit edecek, ardından eğer Linux ise dağıtım (distro) bilgisine ulaşacak şekilde ilerleyeceğim. Daha sonra, belirlenen dağıtıma uygun log dosyalarını okumaya başlayacağım.

Ubuntu sistemlerde loglar genellikle /var/log dizini altında bulunduğundan, bu klasör altındaki tüm log dosyalarının yol bilgilerini dinamik olarak almak istiyorum. Bu yolları aldıktan sonra, ilgili dosyaları sırasıyla okuyarak analiz etmeyi hedefliyorum.

Kod yazmak yerine bu işlemi daha hızlı ve dinamik yapmak adına os.system modülünü kullanarak, find, grep ve awk komutlarıyla sadece .log, .log.1 gibi uzantılara sahip dosya yollarını filtreleyeceğim.

sudo find /var/log -type f -name "*" | grep -E '\.log(\.[0-9]+)?$' | awk '{$1=$1; print}'

Bu komut, /var/log dizini altında istediğim yapıya uygun olan tüm dosyaların tam yol bilgisini sağlayacak.

Artık log dosyalarını okuyabiliyorum; ancak karşılaştığım temel problem, her log dosyasının kendi özel formatına sahip olması. Bu da logların işlenmesini ve analizini zorlaştırıyor. Şu aşamada bu sorunu nasıl daha etkili çözeceğime karar veremedim, fakat ilerleyen adımlarda bu yapılar arasında ortak desenler (pattern’ler) bulmaya çalışacağım.