|
Sözlük manası incelemek, denetlemek olan audit kelimesi işletim sistemlerinde kullanıcı ve sistem aktivitelerinin kayıt altına tutulup ileriye dönük inceleme yapılabilmesine olanak sağlayan bir altyapıdır. Her işletim sisteminin kendine ait bir audit alt yapısı mevcuttur.
Audit loglaması ve Syslog loglaması arası fark nedir?
Syslog sistem tarafında log atmak ve almak için kullanılan bir bileşendir. Fakat syslog’a nelerin, hangi işlemlerin log atılacağı tamamen uygulamanın yazarının tercihidir. Bu şekilde olan bir sürecte tam bir kayıt altına alma işlemi gerçekleşmeyecektir. Onun yerine uygulamanın veya kullanıcıların yaptığı her işlemin çekirdek tarafında loglanabileceği bir arabirim olan audit mekanızması gerçellenmiştir. Ayrıca syslog olayın olduğunu loglarken , audit biro lay olmadan ÖNCESİNİ ve SONRASINI da kayıt altına alabilmektedir.
Linux Audit Nedir?
Linux çekirdeğinin ve dolayısıyla çekirdek içinde bulunan system call adı verilen sistem çağrılarının kayıt altına alınıp ileriye dönük analiz yapılabilmesini sağlar. Yanlız unutulmamalıdır ki her audit işlemi , işletim sistemi çekirdeğini az veya çok meşgul edecektir. Bu yüzden audit yapılacak bileşenlerin dikkatli seçilmesi gerekmektedir.
Linux audit sistemi aşağıdaki 4 bileşenden oluşur.
-
Sistemlerde oluşan çekirdek olaylarının (syscall) toplanması ve de audit altyapısını kullanan kullanıcı programların loglaması için bir altyapı
-
Audit sisteminin yapılandırma dosyaları (/etc/audit/auditd.conf ve /etc/audit/auditd.rules)
-
Her bir audit olayının sistemde okunabilir halde durduğu dosya ( /var/log/audit/audit.log)
-
Binary olan audit loglarını incelemek için yardımcı programlar.
audispd(8), ausearch(8), aureport(8), auditctl(8).
Linux audit Red Hat firması tarafından geliştirilmesine başlanmış ve Linux çekirdeğine girmiş bir çekirdek (kernel) bileşenidir. http://people.redhat.com/sgrubb/audit/ adresinden geliştirilmesi takip edilebilen Linux audit sistemi sadece Red Hat tarafından değil diğer bütün Linux dağıtımları tarafından da desteklenmektedir.
Linux Audit Büyük Resim
Linux Audit sisteminin daha iyi anlaşılabilmesi için aşağıdaki resimden faydalanabilirsiniz.
Linux Audit Çekirdek Bileşeni
Red Hat Enterprise Linux 5 ile gelen çekirdek içine audit bileşeni otomatik olarak gömülmüştür. (Kernel module olarak değil, çekirdek dosyasının içinde yer almaktadır) /boot/vmlinuz-2.6.18-92.el5 gibi bir dosya olan çekirdek dosyası içinde gömülü geldiği için audit sistemini başlangıçta kapatılması istenirse /boot/grub/grub.conf dosyası içinde ilgili kernel stanza’sı sonuna audit=0 eklenmelidir. Örnek vermek gerekirse:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-92.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ audit=0
initrd /initrd-2.6.18-92.el5.img
Bu işlemden sonra işletim sistemi tarafında da auditd servisi kapatılmalıdır. (chkconfig auditd off && service auditd stop) ve daha sonra işletim sistemi reboot edilmelidir. Eğer reboot edilmeden auditd servisi geçici olarak kapatılmak istenirse
# audictl –e 0
komutu ile audit sisteminin kernel tarafı kapatılır. Ayrıca ek olarak uditd servisi kapatılmalıdır. (chkconfig auditd off && service auditd stop). Eğer auditctl –e 0 verilmek yerine sadece chkconfig auditd off && service auditd stop komutu verilirse çekirdek tarafından gönderilen audit logları auditd’ye değil syslog’a gönderilecek ve bu sefer bu loglar /var/log/audit/audit.log dosyası yerine /var/log/messages dosyasına akmaya başlayacaktır.
Audit sistemini enable etmek için Red Hat Enterprise Linux 5’te herhangi birşey yapılmasına gerek yoktur. Zaten öntanımlı olarak açık gelmektedir. Fakat kurmak, servisi enable etmek ve başlatmak için aşağıdaki komutlar verilir.
# yum –y install audit
# chkconfig auditd on
# service auditd start
Linux Audit yapılandırma dosyaları
Red Hat Enterprise Linux işletim sisteminde iki adet yapılandırma dosyası mevcuttur.
/etc/audit/auditd.conf
Bu dosya auditd servis yazılımının (daemon) yapılandırma dosyasıdır.Bu servis nelerin audit edileceğini değil sadece bu mesajları işleyen auditd servisinin aldığı audit mesajlarını ne yapacağını ve sistem diski dolması durumunda ne yapılacağı gibi işlerden sorumlu bir bileşendir. Aşağıda RHEL ile gelen öntanımlı auditd.conf gösterilmektedir.
#
# This file controls the configuration of the audit daemon
#
log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 20
num_logs = 4
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file = 5
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
##tcp_listen_port =
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
enable_krb5 = no
krb5_principal = auditd
##krb5_key_file = /etc/audit/audit.key
log_file
auditd tarafından alınan logların düz okunabilir metin olarak nereye kayıt edileceği bu direktif ile belirtilir.
log_format
Log dosyasının hangi formatta olacağı burada belirtilir. RAW veya NOLOG kullanılabilir. RAW ise mesajın kernel’ın gönderdiği şekilde ama düz metin olarak kayıt eder.
log_group
/var/log/audit/ dizini altındaki log dosyalarının hangi gruba ait olacağını belirtir. Eğer root dışında başka bir grup belirtilirse dosyanın sahibi root, grubu ise belirtilen grup olur.
log_group=root
-rw------- 1 root root 390129 Oct 31 16:16 audit.log
-r-------- 1 root root 5243040 Oct 31 12:12 audit.log.1
-r-------- 1 root root 5243064 Oct 29 06:24 audit.log.2
-r-------- 1 root root 5243057 Oct 26 23:38 audit.log.3
log_group=baskagrup
-rw-r----- 1 root baskagrup 389166 Oct 31 16:16 audit.log
-r-------- 1 root root 5243040 Oct 31 12:12 audit.log.1
-r-------- 1 root root 5243064 Oct 29 06:24 audit.log.2
-r-------- 1 root root 5243057 Oct 26 23:38 audit.log.3
priority_boost
auditd sürecinin başlanğıçta hangi priorty’de başlayacağını belirtir. Buradaki 4 değeri öntanımlı değerdir.
flush ve freq
none, incremental, data ve sync değerlerini alan flush, logların ne kadar sürede bir diske yazılacağını belirtir. İncremental değerini almış ise bir sonraki satır olan freq değeri diske flush etmeden önce ne kadar kadar kayıtı diske yazacağını belirtir.
num_logs
log dosyalarının kaç adet tutulacağını belirtir. Değeri 4 log dosyaları en fazla 3 kere döndürülür.
num_logs=4
-rw------- 1 root root 390129 Oct 31 16:16 audit.log
-r-------- 1 root root 5243040 Oct 31 12:12 audit.log.1
-r-------- 1 root root 5243064 Oct 29 06:24 audit.log.2
-r-------- 1 root root 5243057 Oct 26 23:38 audit.log.3
disp_qos
auditd’nin dispatcher adı verilen program ile nasıl haberleşeceğini belirtir. blocking/lossless veya non-blocking/lossy değerlerini alır. Bu iki program arasında 128k ‘lık bir tampon değeri vardır.
dispatcher
auditd tarafından başlatılan ve de auditd’ye gelen dosyaların bir kopyasınında burada belirtile n programa gönderilmesini sağlayan bir opsiyondur.
name_format, name
auditd log satırlarında makinaların adlarının nasıl gösterileceğini belirtir. Default değeri none’dır. Bu değer fqd değerini alırsa
node=server.endersys.com type=CONFIG_CHANGE msg=audit(1320072332.262:549010): audit_enabled=1 old=1 by auid=4294967295 res=1
numeric olursa
node=10.123.18.10 type=CONFIG_CHANGE msg=audit(1320072332.262:549010): audit_enabled=1 old=1 by auid=4294967295 res=1
NONE olursa
type=CONFIG_CHANGE msg=audit(1320072376.797:549022): audit_enabled=1 old=1 by auid=4294967295 res=1
name_format= user yapılıp , name = TEST yapılırsa
node=TEST type=CONFIG_CHANGE msg=audit(1320072421.562:549026): audit_enabled=1 old=1 by auid=4294967295 res=1
max_log_file
auditd.log dosyalarının en fazla kac MB olabileceğini belirtir.
max_log_file_action
max_log_file boyutuna ulaşıldıktan sonra ne yapılacağını beliritir. Red Hat’te default olara rotate seçilmiştir. Yani 5 MB a ulaşınca dosyalar rotate edilir num_logs adedi kadar
space_left
/var/log/audit ‘in olduğu disk bölmesi yüzde kaç dolunca mesaj atmaya başlanacağını belirtir.
space_left_action
Disk belirli bir seviyede dolunca uyarı mesajının ı hangi metodla belirtileceğini ifade eder. Olası değerler ignore, syslog, email, exec, suspend, single ve halt ‘tır. RHEL 5 syslog değerini kullanır.
admin_space_left, admin_ space_left_action
space_left değerinden daha küçük olma durumunda olan bu değer admin userını ne zaman uyarılacağını belirtir.
disk_full_action
ignore, syslog, exec, suspend, single ve halt değerlerini alan ve Red Hat’in suspend aksiyonunu kullandığı bu değer disk dolunca hangi işlem yapılacağını belirtir. Suspend ile auditd hala çalışmaya devam eder fakat diske yazma işlemi yapılmaz.
disk_error_action
Red Hat’te default aksiyonu SUSPEND olan bu değer diskte hata durumu olması durumunda ne yapılacağını beliritir. Alabileceği değerler ignore, syslog, exec, suspend, single ve halt tır.
tcp_listen_port , tcp_listen_queue , tcp_max_per_addr, tcp_client_ports, tcp_client_max_idle
auditd ‘nin başka hostların audit loglarını alması için bir tcp portunu dinlemesi için kullanılan parametrelerdir.
enable_krb5, krb5_principal, krb5_key_file
Uzak bir makinadan audit mesajları geliyorsa bu gelen mesajların önce authenticate olunmasını sonra şifreli bir şekilde alınmasını sağlar.
Auditd yapılandırması ile alakalı daha fazla bilgi için man auditd.conf komutu vererek man sayfasına bakabilirsiniz.
/etc/audit/audit.rules
Bu dosya çekirdeğe yüklenen ve çekirdeğin hangi sistem çağrılarını veya hangi durumları audit log’u olarak üreteceğinin yapılandırıldığı yapılandırma dosyasıdır. Bu dosya audit servisi başlangıç dosyası (/etc/init.d/auditd) içinde auditctl komutuna parametre olarak yüklenip çekirdeğe auditctl tarafından gönderilir. Aşağıda RHEL 5 ile gelen ön tanımlı audit.rules dosyası gösterilmektedir. Aslında buradaki her bir satır auditctl komutuna verilen bir parametredir. (Ör: -D satırı aslında , auditctl –D şeklinde çalıştırılır)
# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
# First rule - delete all
-D
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
# Feel free to add below this line. See auditctl man page
Audit kurallarının yazıldığı dosyadır. Genelde auditctl komutları 3 ana başlıktan oluşur. Bu ana parametreler
-
Control : Kontrol komutları. Neyin dinleneceğini belirtmek yerine kural ekleme , silme gibi işlemler için kullanılır.
-
File System: Watches olarak ta adlanrılabilen bu tip komutlar istenilen dosya veya dizin ile alakalı audit loglarının oluşturulmas için kullanılır.
-
System Call: Çekirdekte çalışan sistem çağrılarını n loglanması için kullanılır.
den oluşmaktadır.
Bu üç ana parametrelerin nelerden oluştuğuna girmeden önce Red Hat Enterprise Linux ile gelen ön tanımlı yapılandırmadaki –D ve –b 320 satırlarını açıklayalım. –D, kernela yüklenen bütün audit kuralların silinmesini sağlar. –b 320 ise 320 adet buffer tanımlaması yapmaktadır. Eğer bu buffer dolarsa audit eventleri kayıp olur. Bu değer tamamen ne kadar çok audit logunun istenildiğine göre ayarlanabilir. Yoğun bir sistem için başlangıç olarak -b 8192 kullanılabilir.
Kontrol Kuralları
-D Kernela yüklenen bütün audit kuralların silinmesini sağlar. Genelde audit.rules dosyasındaki ilk satır budur.
-b backlog tampon boyutunu belirler. Dosya sisteminin yazma hızına ve sistemin yoğunluğu ve istenilen audit eventlerin çokluğuna göre bu değer uygun bir boyuta ayarlanmalıdır.
-f Çekirdeğin kritik durumlarda ne yapacağını belirtir. Alacağı değerler 0,1,2 dir. 0=silent 1=printk 2=panic masına gelmektedir. Bu kritik durumlar
-
auditd servisine iletim hataları
-
backlog limitinin aşılması
-
sistem hafızasının bitimesi
-
anlık oran limitinin aşılması (rate limit exceed)
-e enable flag. Bu audit sisteminin kernelda kapatılması, açılması ve kalıcı olarak ve değiştirilmeyecek şekilde açılmasıdır. –e 0 , e 1 veya –e 2 şeklinde değerler alır. 0 audit sistemini kapatır, 1 açar ve 2 de kalıcı olarak açılmasını sağlar ( 2 değeri verildikten sonra audit kurallarında bir değişiklik yapılması için reboot gerekmetedir.)
-l audit kurallarının listelenmesini sağlar.
Dosya Sistemi Kuralları
Sistem üzerindeki dosyalar (UNIX’te dosya sistemi üzerindeki herşeyin bir dosya olduğunu belirtelim) üzerinde yapılan işlemlerin kuralları aşağıdaki gibi tanımlanır.
-w <dosya veya dizin> -p <izinler> -k <anahtar kelime>
-w ‘ye parametre olarak dosya veya dizin verilir.
-p ‘ye parametre olarak verilen izinler aşağıdaki anahtar kelimelerden biri veya birden fazlası birleştirilerek kullanılabilir.
r - dosyanın okuması
w - dosyaya yazma
x – dosyanın çalıştırılması
a – dosya tanımlarının değiştirilmesi (izin veya özellik)
-k benzer kural setlerini gruplamak için kullanılan bir anahtar kelimedir. Tamamen istenilen 31 karakteri aşmayacak şekilde bir değeri olabilir. –D veya –l ‘ye parametre olarak verilerek sadece istenilen keyword’e sahip kuralların silinmesi veya listelenmesi sağlanabilir.
Sistem Çağrıları Kuralları
-a aksiyon,list -S syscall -F alan=değer -k <anahtar kelime>
-a iki değer alır. Aksiyon ve list.
Aksiyon always veya never değerini alır ilgili kural için bir event oluşturulup oluşturulmayacağını içerir.
List (bazı durumlarda filtre olarak ta tanımlanabiliyor) olarak alabileceği değerler entry, exit, user, task ve exclude‘tur . Linux çekirdeği bu 5 filtreden birini kullanmaktadır.
Entry, sistem çağrılarının başında exit ise sistem çağrılarının sonunda kullanılmaktadır. Daha çok tercih edilen exit filtresidir zaten ileriki Linux çekirdeği sürümlerinde entry filtresinin kaldırılması düşünülmektedir.
User filtresi userland programlarda oluşacak durumların loglanması için kullanılır ve alabileceği filtre alanları ise uid, auid, gid ve pid ‘tir.
Task çok nadir kullanılmakta ve sadece fork ve clone sistem çağrıları için kullanılır.
Exclude filtresi bazı eventleri loglama dışı bırakmak için kullanılır.
En çok kullanılan aksiyon ve list çifti always, exit‘dir. Zaten internet üzerinde bulunabilecek çoğu örnekte de bu çift kullanılmaktadır.
-S ile kural yazılacak ve loglanması istenen sistem çağrıları belirtilir.
-F alan=değer Burada istenilen filtreler belirtilir. Mesela -F auid>=500 -F auid!=1002 ile user id’si 500 den büyük ve 1002 olmayan kullanıcılar için bir filtre yazılır. Birden fazla –F satırı varsa and’lenerek ilgili filtre oluşturulur.
-k benzer kural setlerini gruplamak için kullanılan bir anahtar kelimedir. Tamamen istenilen 31 karakteri aşmayacak şekilde bir değeri olabilir. –D veya –l ‘ye parametre olarak verilerek sadece istenilen keyword’e sahip kuralların silinmesi veya listelenmesi sağlanabilir.
Örnek audit.rules kuralları
Yukarıda anlatılan audit.rules kural satırlarını birkaç örnekle açıklayalım.
-w /etc/passwd -p wa -k identity
/etc/passwd dosyasına yazılma veya attribute değişikliği yapıldığında identity ifadesi ile taglenerek audit logu oluşturulur.
-w /etc/shadow -p ra -k identity
/etc/shadow dosyası okunduğunda veya attribute değişikliği yapıldığında identity ifadesi ile taglenerek audit logu oluşturulur.
-a always,exit -F arch=ARCH -S adjtimex -S settimeofday -S stime -k time-change
Üssteki örnekte ARCH yerine 32 bit veya 64 bit olmasına göre b32 veya b64 değeri kullanılabilir. Adjtimex, settimeofday sistem çağrılarının çıkışında time-change anahtar kelimesi ile etiketlenerek loglanılması sağlanır. Yanlız stime sadece 32 bit te kullanılabildiği gözden kaçırılmamalıdır.
-a always,exit -F arch=ARCH -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=500 -F auid!=4294967295 -k access
-a always,exit -F arch=ARCH -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EPERM -F auid>=500 -F auid!=4294967295 -k access
Yukarıdaki iki örnek sistemde uid’si 500’den büyük olan normal kullanıcıların izin verilmeyen (EPERM ve EACCESS’i başarısız olan) dosyaları okumaya çalıştığında log oluşmasını sağlar ve acesss anahtar kelimesi ile etiketler.
Daha fazla örnek için Audit sisteminin yazarının tavsiye yazdığı örnek audit rules dosyası incelenebilir. /usr/share/doc/audit-*/stig.rules dosyasında daha fazla ayrıntı bulabilirsiniz.
Yazının devamında Linux Audit log dosyası ve Linux Audit raporlama komutları üzerinde durulacaktır.
Kaynaklar
[1] http://blog.endersys.com/2010/10/red-hat-linux-audit-daemon-loglarinin-rsa-envision-ile-uyumlu-hale-getirme/
[2] http://people.redhat.com/sgrubb/audit/visualize/
[3] http://people.redhat.com/sgrubb/audit/
[4] http://www.suse.com/documentation/sled10/pdfdoc/auditqs_sp2/auditqs_sp2.pdf
[5] http://code.google.com/p/aureport-gui/
[6] http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html
Favori olarak ekle (0) | Görüntüleme sayısı: 1066
Sadece kayıtlı kullanıcılar yorum yazabilir. Lütfen sisteme giriş yapın veya kayıt olun. |