|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English Deutsch Francais Nederlands Turkce Polish |
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�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. |
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 :-)
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.
# 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.
�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:
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………..>
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
|
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Mulyadi Santosa, FDL LinuxFocus.org |
�eviri bilgisi:
|
2003-12-26, generated by lfparser version 2.45