spacer.png, 0 kB
Bilgi için: bilgi at bilgiguvenligi gov tr   

 

spacer.png, 0 kB
spacer.png, 0 kB
Yazarın bu bölümdeki diğer yazıları...
Linux tabanlı işletim sistemleri ve Linux Audit - I Yazdır E-posta
Omer Faruk SEN, Endersys   
26.11.2011

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.

  1. 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ı

  2. Audit sisteminin yapılandırma dosyaları (/etc/audit/auditd.conf ve /etc/audit/auditd.rules)

  3. Her bir audit olayının sistemde okunabilir halde durduğu dosya ( /var/log/audit/audit.log)

  4. 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.

resim-1.jpg

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

  1. Control : Kontrol komutları. Neyin dinleneceğini belirtmek yerine kural ekleme , silme gibi işlemler için kullanılır.

  2. 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.

  3. 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

Bu yazıya ilk yorumu yazın

Sadece kayıtlı kullanıcılar yorum yazabilir.
Lütfen sisteme giriş yapın veya kayıt olun.

 
spacer.png, 0 kB
spacer.png, 0 kB
Copyright 2012 TÜBİTAK-BİLGEM. Sitenin teknik altyapısında Joomla kullanılmıştır. Yazar ve site referans gösterilmeden alıntı yapılamaz. Görüşleriniz
spacer.png, 0 kB