Back to posts
Post

Auditd ile Yetkisiz Crontab Değişikliklerini Anlık SIEM'e Aktarma

Auditd ile /var/spool/cron izleme, -k cron_tamper kuralı ve real-time alerting için rsyslog/forwarder örneği.

Siber GüvenlikcronauditdSIEMlog monitoring

Crontab dosyalarına yapılan yetkisiz değişiklikler, genellikle izinsiz erişim veya geri kapı kurma girişimlerinin ilk işaretleridir. Benim ortamımda, bu tür müdahaleleri anlık olarak tespit edip SIEM sistemine iletmek için auditd kullanıyorum. -w /var/spool/cron -p wa -k cron_tamper kuralı, bu dizindeki dosyalara yazılma veya özellik değişikliği olduğunda olay üretir.

Auditd Kuralını Tanımlama

Öncelikle, auditd hizmetinin çalıştığından emin oluyorum. Ardından, crontab dizinini izlemek için aşağıdaki kuralı /etc/audit/rules.d/cron_tamper.rules dosyasına ekliyorum:

-w /var/spool/cron -p wa -k cron_tamper

Kuralı aktif etmek için auditd servisini yeniden başlatıyorum:

systemctl restart auditd

Kuralın yüklü olduğunu doğrulamak için:

auditctl -l | grep cron_tamper

Bu komut, kuralı listeliyorsa doğru şekilde yüklendiğini gösterir.

Olayları Gerçek Zamanlı Görüntüleme

Auditd, olayları /var/log/audit/audit.log dosyasına yazar. Bu logu izlemek için ausearch veya tail -f kullanırım. Anlık görüntüleme için:

ausearch -k cron_tamper -i

-i seçeneği, sayısal UID/GID değerlerini kullanıcı ve grup isimlerine çevirir, okunabilirliği artırır.

SIEM Entegrasyonu için Log İletimi

Benim ortamımda, audit loglarını rsyslog üzerinden bir log toplayıcıya (örnek: Elastic Stack, Splunk veya Graylog) iletiyorum. /etc/rsyslog.d/20-auditd.conf dosyasına şu satırı ekliyorum:

if $programname == 'auditd' then @log-to-playıcı-adresi:514

Bu yapılandırma, auditd tarafından üretilen tüm mesajları UDP 514 portu üzerinden belirtilen SIEM sistemine gönderir. Daha güvenilir bir aktarım için TCP tercih edilebilir; bu durumda @@ kullanılır.

Değişiklikten sonra rsyslog’u yeniden başlatıyorum:

systemctl restart rsyslog

Test: Crontab Değişikliği Simülasyonu

Kuralın çalışıp çalışmadığını test etmek için, bir kullanıcının crontab’ını geçici olarak değiştiriyorum:

echo "* * * * * /tmp/gecis.sh" | crontab -

Bu komut, mevcut kullanıcının crontab’ına bir giriş ekler. Anlık olarak ausearch komutu ile olayın loglandığını görüyorum:

ausearch -k cron_tamper -i | tail -20

Çıktıda, exe="/usr/bin/crontab", key="cron_tamper" ve değişiklik içeren bir olay görüyorum. Bu, kuralın doğru tetiklendiğini bestätir.

Uyarı ve Koruma Önerileri

  • Audit loglarının kendisi de değiştirilebilir; bu yüzden /var/log/audit/ dizinine sadece gerekli kullanıcıların erişimi olmalı ve loglar uzak sisteme senkronize edilmelidir.
  • -p wa izni, yazma ve özellik değişikliklerini yakalar; ancak okuma (r) izini eklemek genellikle gereksizdir ve yüksek üretilmeli sistemlerde performans etkisi yaratabilir.
  • Çok sayıda sistem varsa, audit kurallarını yapılandırma yönetimi araçları (Ansible, Puppet, SaltStack) ile dağıtmak tutarlılığı sağlar.

Bu yöntemle, crontab üzerinden yapılan yetkisiz müdahaleleri gerçek zamanlı olarak tespit edip, olay yanıt sürecini hızlandırabiliyorum. Daha önce sistemd servislerinde bellek sızıntılarını takip ettiğim yazımda (https://furkanikkan.com/urun/memoryusage-ve-watchdogsec-ile-systemd-servisindeki-bellek-sizintilarini-erken-yakala-74) benzer bir izleme prensibi uyguladım; burada da aynı fikir: kritik kaynakları izle, anormaliyeti hızlıca gör.


Cover image: CNE CNA C6F · PDM (Openverse / kamu malı) · https://www.flickr.com/photos/94966166@N02/52401144971