[LinuxFocus-icon]
<--  | Ana Sayfa  | Eri�imd�zeni  | ��indekiler  | Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Deutsch  Francais  Nederlands  Turkce  Polish  

[Photo of the Author]
Mulyadi Santosa
<a_mulyadi/at/softhome.net>

Yazar hakk�nda:

Ad�m Mulyadi Santosa. Indonesiya'da serbest yazar ve dan��man olarak �al���yorum. �lgi alanlar�m, clustering, sistem g�venli�i ve bilgisayar a�lar�d�r. Bir de haz�r clustering ��z�mleri sunan bir �irketim var. OpenMosix ve openSSI dikkatimi �eken projelerdendir. Bo� zamanlar�m�nda okumay� ve spor yapmay� seviyorum. Bu konularda sohbet etmek isterseniz bana yazabilirsiniz.



T�rk�e'ye �eviri:
Erdal Mutlu <erdal(at)linuxfocus.org>

��erik:

 

Syscalltracker ile Linux i� olaylar�n� izleme

[Illustration]

�zet:

Bazen Linux sistemimize daha yak�ndan bakmak isteriz. Bir�ok �etele dosyalar�n� (log) inceleyen program, sald�r� belirleme (instrusion detection) ara�lar�, b�t�nl��� (integrity) denetleyen ara�lar vs programlar vard�r. Ben size Linux'u �ekirdek seviyesinde izleme olana�� sa�layan bir d�zenekten s�zedece�im. Bu d�zenek sayasinde, daha �ok g�venirlik ve daha geni� olanaklara sahip olacaks�n�z.


_________________ _________________ _________________

 

Giri�

G�n�n birinde bir ileti listesinde clustering arac� konusunda konu�urken, rastlant� sonucu bir �ekirdek yamas�ndan dolay� sistemde olu�an bozukluklar�n tart���ld��� bir konu ba�l��� g�z�me �arpt�. Sonra birisi, sorunu ya�ayan ki�inin tarif etti�i �ekilde ayn� sorunu tekrar olu�turmaya �al��t���n� yazd�. Bu ki�i sorunu belirlemede Syscalltracker ad�nda bir ara� kullan�yordu. Ben de kendi kendime sordum: "Bu Syscalltracker nas�l bir ara� acaba? Bununla neler yap�labilir?" Benim gibi bir kullan�c� i�in "Syscalltracker" ad� pek bir �ey ifade etmiyordu ve ben gizemli bir ku�kuya d��t�m :-)

 

Syscalltracker

http://syscalltrack.sourceforge.net �ekirdek mod�lleri toplulu�u olup, Linux �ekirde�i taraf�ndan kullan�lan sistem �a�r�lar�n�n izlenmesi i�in kullan�lmaktad�r. Genellikle, s�radan hata belirleme ara�lar� kullanarak ve �etele dosyalar�na bakarak bulamayaca��m�z sistem hatalar�n�, bu ara�la bulabiliriz. ��te bir �rnek: Diyelim ki /etc dizininde yer alan inetd.conf (inetd servisinin yap�land�rma dosyas�d�r.) ad�nda bir yap�land�rma dosyan�z var. Burada sisteminizde �al��mas� gereken baz� servisleri a�t���n�z ve �al��mamas� gerekenleri iptal ettiniz. Daha sonra inetd servisini �al��t�rd�n�z ve her�ey yolunda gitti. Ancak, birden bire /etc/inetd.conf dosyas� yokoldu. �ans�n�z vard� ve yedek dosyay� al�p yerine koydunuz. inetd tekrar �al��t�rd���n�zda, yap�land�rma dosyan�za bilinmeyen bir servisi �al��t�ran sat�rlar eklemi� oldu�unu g�rd�n�z. �a��rd�n�z. "Bunu kim yapm�� olabilir? "Bunu inetd taraf�ndan �al��t�r�lm�� bir servis mi yapt� acaba? Sistemin g�venli�ini delen bir g�venlik a���� m� var?" H�zl�ca sistem �etele dosyas�na "cat" ile bakt�n�z, "top" ve "ps" ile sisteminizde s�rad��� programlar veya kullan�c�lar�n varl���na bakt�n�z. Ancak, hi� bir �ey g�remediniz.

Bu t�r sorunlar� izlemik i�in bir yol var. %100 ��z�m sa�layan bir yol de�il, ama bir�ok durumda etkili olan bir yoldur. Bu yol veya ��z�m�n temeli, kabuk ortam�nda �al��t�r�lan her komut veya servis, ba�ka bir deyi�le t�m s�re�ler sistem �a�r�lar� (system calls) ad� verilen, bilinen yordamlar� �al��t�rmalar� gerekmeleri esas�na dayanmaktad�r. Bir dosya m� silmek istiyorsunuz? O zaman unlink kullan�yorsunuz demektir. Kabuk program� m� �al��t�r�yorsunuz? exec() veya execve() kullan�yor olmal�s�n�z. B�ylece sistemle ilgili t�m i�lemler sonu�ta bir veya birden fazla sistem �a�r�s� kullan�m�n� gerektirmektedir. B�ylece, sistem �a�r�lar�n� izleyecek y�ntemin ne kadar g��l� bir silah oldu�u ortaya ��kmaktad�r.

 

�lginiz �ekti mi?

E�er, �ektiyse bir deneme yapmakta fayda vard�r. Bu yaz�da ben i�letim sistemi olarak RedHat 7.3'� kullanmaktay�m. �nternet taray�c�n�z� kullanarak http://syscalltrack.sourceforge.net adresinin dosya indirme k�sm�ndan gerekli paketi elde edebilirsiniz. Bu yaz�da ben syscaltrack-0.82.tar.gz s�r�m�n� kulland�m. Bu dosyan�n yakla��k b�y�kl��� 500Kb idi. Paketi bir dizinde a��n. S�zgelimi, bu dizin /usr/src olsun:

# tar xzvf syscalltrack-0.82.tar.gz

Ard�ndan, /usr/src dizininde Linux �ekirdek kaynaklar�n�n bulundu�undan emin olun.

# rpm -qa | grep -i kernel-source

veya

# ls -al /usr/src/linux-2.4

E�er, sisteminizde �ekirdek kaynak dosyalar� y�klenmemi�se, RedHat'in 2. y�kleme CD'sini kullanarak, gerekli paketi y�klemen�z gerekecektir:

# rpm -replacepkgs -Uvh /path/to/your/RPM/kernel-source-2.4.18-3.i386.rpm

Syscaltracker'� derlerken, sisteminizde hangi �ekirdek s�r�m� ile yamalar� kullan�yorsan�z, ayn�s�yla derleme yapman�z gerekti�ine �zen g�steriniz. S�zgelimi, e�er RedHat 7.3 standart �ekirde�ini kullan�yorsan�z, RedHat CD'si ile birlikte gelen �ekirdek kaynak kodlar�n� kullanman�z gerekecektir. E�er, ba�ka bir �ekirdek s�r�m� kullanmak istiyorsan�z, onun kaynak kodunu kullanarak derleme yapman�z gerekir.

�ekirdek kaynak kodunun yan�s�ra, Syscalltracker'�n derlenmesini kolayla�t�rmak i�in RedHat'in �ekirdek yap�land�rma dosyas�na sahip olman�zda fayda vard�r. Bunun i�in /boot dizinine bakman�z gerekir:

# ls -al config*

E�er, 'config-2.4.18-3' gibi bir dosya varsa, onu /usr/src/linux-2.4. dizini alt�na '.config' ad� alt�nda kopyalamal�s�n�z:

# cp /boot/config-2.4.18-3 /usr/src/linux-2.4/.config

E�er, bu dosya orada yoksa, �ekirdek kaynak kodunun bulundu�u dizin i�inde yer alan configs dizininden yap�land�rma dosyas�n� elde edebilirsiniz. Kullanman�z gereken yap�land�rma dosyas�s� sisteminizde �al��an �ekirdek ile uyumlu olmal�d�r. Bunun i�in ilk �nce

# uname -a

komutunu kullanarak, ne �al��t���na bir bak�n. Komut ��kt�s�, o anda sisteminizde �al��an �ekirde�in s�r�m numaras�n� g�stermesi gerekir. Diyelim ki, elde edilen ��kt� "kernel-2.4.18-3-i386", o zaman kernel-2.4.18-3-i386.config yap�land�rma dosyas�n� alman�z gerekecektir.

# cd /usr/src/linux-2.4
# cp configs/kernel-2.4.18-3-i386.config ./.config

�imdi de a�a��daki komutlar� �al��t�r�n:

# cd /usr/src/linux-2.4.18-3
# make mrproper
# make menuconfig

Gereksiniminize uygun ayarlar� yap�p, kaydedip ��k�n. E�er, �ekirde�inizi kendiniz derlediyseniz ve eski yap�land�rma dosyas�n� kay�p ettiyseniz (Umar�m etmemi�sinizdir :-)), gerekli ayarlar� tekrar dikkatlice yapmal�s�n�z.

 

Syscalltracker'�n derlenmesi

�imdiye kadar gerekli olan her�eyi yerine getirdik. Art�k, Syscalltracker'�n derlenmesine ge�ebiliriz:

# cd /usr/src/syscalltrack-0.82
# ./configure (veya ./configure -with-linux=/path/to/your/linux/kernel/source)
# make && make install

E�er, derleme ba�ar�yla sonu�land�ysa, iki adet yeni mod�l elde etmi� olacaks�n�z:

  1. /lib/modules/2.4.18-3/syscalltrack-0.82/sct_rules.o

  2. /lib/modules/2.4.18-3/syscalltrack-0.82/sct_hijack.o

Bu mod�ller sistem �a�r�lar�n� izlemeye yaramaktad�r. Mod�lleri yazan ki�i, sistem �a�r�lar�n� yakalama veya ele ge�irme (system call hijacking) terimini kullanmaktad�r. Bunun anlam�, as�l sistem �a�r�s�ndan �nce, �nceden belirlenmi� bir yordam� �al��t�rmakt�r. Mod�lleri y�klemek i�in, root kullan�c�s� olarak, Syscalltracker ile birlikte gelen a�a��daki program� �al��t�rabilirsiniz:

# sct_load

lsmod ile �ekirde�inizin mod�lleri y�kledi�inden emin olun. A�a��dakine benzer bir �ey g�rmeniz gerekecektir:

Module     Size  Used by    Not tainted
sct_rules  257788   2
sct_hijack 110176   1      [sct_rules]
<…..cut………..>
 

Kurallar

Tebrikler! Mod�lleri y�klediniz, o zaman Syscalltracker �al���yor demektir. Ancak bitmedi. Syscalltracker'�n bir�eyler yapmas� i�in hala kurallar yazman�z gerekecektir. �sterseniz basit bir kural ile i�e ba�layal�m:

rule
 {
   syscall_name=unlink
   rule_name=unlink_rule1
   action
   {
     type=LOG
     log_format {%comm : %params delete by %euid --> %suid}
   }
   when=before
}

Syscalltracker i�in tan�mlanan her kural rule kelimesiyle ba�lamaktad�r. Ard�ndan "{" i�areti gelmekte. Daha sonra, "syscall_name" parametresini kullanarak hangi sistem �a�r�s�n� izlemek istedi�inizi belirtmeniz gerekir. Kullanabilece�iniz bir�ok sistem �a�r�s� vard�r. Bunlar�n listesini /usr/local/lib/syscalltrack-0.82/syscalls.dat-2.4.18-3 dosyas�nda bulabilirsiniz. Baz� sistem �a�r� isimlerinin anlam�n� tahmin etmek zor olabilir. �imdilik unlink()'i se�elim. Bu sistem �a�r�s�, birisi veya bir�eyin herhangi bir �ey silmek istedi�inde kullan�lmaktad�r. Bence ba�lamak i�in iyi bir se�imdir. B�ylece, amac�m�z sistemdeki silme i�lemlerini izlemek olmu� oluyor.

"rule_name" parametresini kullanarak kurala bir isim vermeniz gerekecektir. �stedi�iniz ismi verebilirsiniz. Anlaml� bir isim vermeniz yeterlidir. Ben "unlink_rule1" ismini verdim. "action" k�sm�na ise, Syscalltraker'�n bu sistem �a�r�s� �al��t�r�ld���nda hangi i�lemleri yerine getirmesi gerekti�ini yazman�z gereklidir. Syscalltracker'�n desteklemi� oldu�u �e�itli i�lemler vard�r. Biz burada LOG'u se�iyoruz. Buna g�re �etele bilgileri /dev/log ayg�t�na yaz�lacakt�r. Syscalltracker'�n internet sistesindeki yap�lmas� d���n�lenlerin listesinde, sistem �a�r�lar�n� yeniden yazma �zelli�inin yap�laca�� yaz�lm��. Buna g�re, as�l sistem �a�r�s� parametrelerin de�i�tirilebilece�i m�mk�n olacakt�r:-)

LOG i�lemi i�in ��kt� bi�imini belirtmeniz gerekecektir. Ayr�nt�l� bilgi elde edebilmek i�in, tan�mlanm�� makrolar vard�r:

%ruleid -> kural ad�
%sid    -> sistem �a�r�s� tan�mlama numaras�
%sname  -> sistem �a�r�s� ad�
%params -> sistem �a�r�s� parametresi
%pid    -> sistem �a�r�s�n� kullanan s�recin numaras�
%uid    -> kullan�c� numaras�
%euid   -> etkin kullan�c� numaras�
%suid   -> kay�t eden kullan�c� numaras�
%gid    -> kullan�c� grup numaras�
%egid   -> etkin grup numaras�
%sgid   -> kay�t eden grup numaras�
%comm   -> sistem �a�r�s�n� �al��t�ran program�n ad�
%retval -> sadece LOG'un "after" de�eri i�in
              �al���r ve sistem �a�r�s�n�n d�n�� de�erini verir.

�rne�imiz i�in ben a�a��dakileri yazd�m:

.log_format {%comm : %params delete by %euid --> %suid}

Bunun anlam� unlink sistem �a�r�s�n� kullanan her komutu kaydetmek istiyoruz demektir. Kay�t etme i�lemi, etkin kullan�c� numaras� (effective user id) ile kay�t edilen kullan�c� (recorded user id) numaras�n� da i�ermektedir.

when (ne zaman) parametresinde before (�nce)" veya "after (sonra)" dan birini se�ebiliriz. "before" se�ildi�inde sistem �a�r�s�n� �al��t�rmadan �nce, "after" ise, sonra kay�t yap�lmaktad�r.

Kural "}" ile sona erdirilmektedir. Kural� herhangi bir metin dosyas�na yazabilirsiniz. S�zgelimi, dosyan�n ad� "try.conf" olsun ve /tmp dizininde bulunsun. Kural� etkin k�lmak i�in, Syscalltracker'a y�klemeniz gerekecektir.

# sct_config upload /tmp/try.conf

E�er, kural�n yaz�m�nda yaz�m hatas� yoksa, "Successfully uploaded rules from file '/tmp/try.conf' " mesaj�n� elde edeceksiniz.

Tamam, �imdi deneme zaman�. X Pencere sisteminde iki adet xterm a��n. Birinde Syscalltracker'�n �etele komutunu a�a��daki gibi �al��t�r�n:

# sctlog

Kurala uygun bir sonu� ortaya ��kt���nda bu pencereden �etele biligisini g�rebileceksiniz. Di�er, xterm penceresinde a�a��daki komutlar� �al��t�r�n:

# cd /tmp
# touch ./dummy
# rm ./dummy

Yukar�daki kurala g�re a�a��dakine benzer bir ��kt� elde edeceksiniz:

"rm" : "./dummy" delete by 0 --> 0

Bu ��kt�dan da anla��ld��� gibi, "rm" komutu "./dummy" parametresiyle etkin kullan�c� nosu 0, yani root kullan�c�s� taraf�ndan �al��t�r�l�m�� oldu�u ortaya ��kmaktad�r. Bu komutun sonucunda da unlink() sistem �a�r�s� kullan�lm��t�r.

�ste ba�ka bir kural:

rule
{
   syscall_name = unlink
   rule_name = prevent_delete
   filter_expression {PARAMS[1]=="/etc/passwd" && UID == 0}
   action {
     type = FAIL
     error_code = -1
   }
   when = before
}

Bu, yukar�da tan�mlanm�� kurala benzemektedir. Ancak, bunun FAIL hareketi vard�r. Bu hareket i�in, araya girilmi� sistem �a�r�s�na d�n�� de�eri vermek gerekir. Ben burada i�leme izin verilmedi�i anlam�na gelen "-1" de�erini verdim. Bu numaralar�n tam listesi /usr/include/asm/errno.h dosyas�nda yer almaktad�r.

"filter expression"'�n yer ald��� sat�rda, ilgili sistem �a�r�s� �al��t�r�ld���nda parametresi "/etc/passwd" de�erine e�it oldu�u ko�ulu tan�mlad�m. Bu b�l�mde PARAMS de�i�keni kullan�ld�. Asl�nda her b�l�m�n kendine �zg� parametreleri vard�r. Bir de, yapm�� oldu�um sa�lama m�kemmel de�ildir, ��nk� birisi "cd /etc && rm -f ./passwd" komutlar�n� kullanabilir. O zaman benim kural�m bir i�e yaramaz. Ama, biz deneme yapt���m�zdan dolay� sorun de�il. Ben ayr�ca, bu kuralda kullan�c� numaras�n�n (UID) 0'a e�it olmas� ko�ulunun sa�lanmas�n� da arad�m.

Kural� �nceki kural�n yer ald��� dosyaya ekleyin:

# sct_config delete
# sct_config upload /tmp/try.conf

Kurallar�n dosyadaki yaz�l�� s�ralar�n�n �nemli olduklar�na dikkat edin. E�er, "prevent_delete" kural�n� "unlink_rule1 kural�ndan �nce yaz�p, a�a��daki komutu �al��t�r�rsan�z:

# rm -f /etc/passwd

"prevent_delete" devreye girecek ve t�m hareket iptal olacak ve "unlink_rule1" dikkate al�nmayacakt�r. E�er, tersini yaparsan�z, �etele bilgisini elde edeceksiniz, ancak dosyay� silmekten kurtaramayacaks�n�z!

G�zlem yap�labilecek di�er ilgin� bir sistem �a��rs� da ptrace dir. "man ptrace" sayfas�ndan da anla��ld��� gibi, bu sistem �a�r�s�, bir program�n �al��mas�n�n denetlemeye ve g�zlemlemeye yaramaktad�r. �yi ellerde, ptrace �ok g�zel bir hata belirleme arac� olabilir. Ancak, k�t� ellere d��erse, sistemin g�venlik a��klar�n� belirleme ve g�venli�ini k�rmaya yarayabilir. �yleyse, bunu izleyecek bir kural olu�tural�m:

rule
{
    syscall_name=ptrace
    rule_name=ptrace_rule1
    action {
        type=LOG
      log_format {%comm : %params issued ptrace by %euid --> %suid}
  }
    when=before
}

Kural� denemek i�in strace program�n� kullanmal�y�z. �lk �nce yukar�daki kural� Syscalltracker'a y�klememiz gerekir. Daha sonra sctlog program�n� bir yerde �al��t�r�p, ba�ka bir yerde de strace'i �al��t�r�n:

# strace /bin/ls

sctlog, a�a��dakilere benzer birka� sat�r g�r�nt�leyecektir:

"strace" : 3, 2019, 24, -1073748200 issued ptrace   by 0 --> 0
"strace" : 24, 2019, 1, 0 issued ptrace   by 0 --> 0
"strace" : 3, 2019, 44, -1073748200 issued ptrace   by 0 --> 0
"strace" : 3, 2019, 24, -1073748200 issued ptrace   by 0 --> 0
"strace" : 3, 2019, 0, -1073748216 issued ptrace   by 0 --> 0
"strace" : 7, 2019, 1, 0 issued ptrace   by 0 --> 0

Strace program�n� bilmeyenler i�in s�ylyorum. Bu program ba�ka programlar�n kulland�klar� sistem �a�r�lar�n� izlemeye yaramaktad�r ve �ok g��l� bir ara�t�r. Strace kendi i�inde ba�ka programlar� izleyebilmek i�in ptrace'i kullanmaktad�r. Syscalltracker, strace ile birlikte dosya ve sistem olaylar�n� izlemek i�in ideal bir ikili olu�turmaktad�r. Bence bunlardan s�zetmek yerinde oldu. Strace, Redhat'in 7.3/8/9 s�r�mleriyle birlikte gelmektedir. Yapman�z gerek ilgili RPM dosyas�n� y�klemektir (Redhat 7.3 i�in):

# rpm -Uvh /path/to/your/Redhat/RPM/strace-4.4-4.i386.rpm

�imdi, sistem incileme konusunda bir ad�m daha ilerlemi� oldunuz. Syscalltracker, sistem �a�r�lar� hakk�nda bir�ok bilgiye eri�me olana��n�n yan�s�ra, kullan�c�lara bir�ok esneklik de sa�lamaktad�r. Son olarak, y�klenmi� olan kurallar� g�r�nt�lemek isterseniz:

# sct_config download

Y�klenmi� t�m kurallar� silmek i�in:

# sct_config delete

komutunu �al��t�rmal�s�n�z. Syscalltracker'� kullanmak istemedi�inizde, ge�ici bellekten onu silmek i�in a�a��daki komutu �al��t�r�n:

# sct_unload


Bir olas�l�k, Syscalltracker'� bellekten silerken "Device or resource busy" mesaj�n� alabilir ve silemezsiniz. B�y�k bir olas�l�kla Syscalltracker o anda �al��maktad�r. Bu y�zden biraz bekledikten sonra tekrar deneyin. E�er, �ok fazla kural eklemezseniz, Syscalltracker sisteminize �ok y�k olu�turmaz. Sonu� olarak �unu s�yleyebilirim: B�rak�n Syscalltracker �ekirdekle birlikte �al��s�n ve sizde b�ylece sisteminizi daha yak�ndan izleme olana�� elde etmi� olursunuz.  

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

<--, Bu say�n�n ana sayfas�na gider

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Mulyadi Santosa, FDL
LinuxFocus.org
�eviri bilgisi:
de --> -- : Mulyadi Santosa <a_mulyadi/at/softhome.net>
en --> tr: Erdal Mutlu <erdal(at)linuxfocus.org>

2003-12-26, generated by lfparser version 2.45