Ana Sayfa » *nix » FreeBSD üzerinde Aide ile Dosya Bütünlüğü Kontrolü

FreeBSD üzerinde Aide ile Dosya Bütünlüğü Kontrolü


BerbatKötüİdare EderGüzelHarika (Henüz Puan Verilmedi. Oy kullanarak siz de katkı yapabilirsiniz.)
Loading...

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYAIkxyL' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
aide_logo Aide, *nix tabanlı sistemlerde dosya bütünlüğünü kontrol etmeye ve raporlamaya yarayan küçük ve kullanışlı bir uygulamadır. Bir şekilde sisteminize sızıldığını düşündüğünüz zamanlarda değiştirilen dosyaları saptamak oldukça önemli bir durum olduğundan ileriye dönük bir güvenlik önlemi olarak Aide kullanmak mantıklı bir tutum olabilir.

Bu nedenle, Aide'den biraz bahsetmek ve sistemler için kurulum ve yapılandırma notlarını paylaşmak istiyorum.

Aide Nedir ?


Advanced intrusion detection environment'ın kısaltması olan Aide, *nix sistemlerdeki binary'ler, kütüphaneler, ve yapılandırma dosyaları gibi sistem dizin ve dosyalarında meydana gelen herhangi bir değişikliği tespit etmeye ve raporlamaya yarayan, epey de evveliyatı olan güzel bir araçtır. Aide'yi yapılandırdıktan sonra cron'a yazarak zamanlanmış bir görev olarak çalıştırıp periyodik olarak sistem dosya bütünlüğü ile ilgili rapor mailleri göndermesini sağlamak mümkündür.

Evet, hepimiz network ve sunucularımızın güvenliğini sağlamak için çeşitli politikalar izliyoruz. Örneğin sunucularımızı bir IPS ve Firewall'un arkasında tutup kontrollü erişim sağlıyoruz. Tüm uygulamalarımızı güncel tutuyoruz, güvenlikle ilgili gerekli yapılandırma işlemlerini uyguluyoruz vs. vs. Ancak tüm bunlar malesef sistemlerimize sızılamayacağı anlamına gelmiyor. İşte bu noktada aide kullanmak ve sistem dosyalarında değişiklik olup olmadığının periyodik kontrolünü yapmak yerinde bir tutum olabilir.

Çünkü şu ya da bu şekilde sisteme sızan kötü niyetli birisinin izleyeceği yollardan birisinin, sunucuya sızıldığını mümkün olduğunca sistem yöneticisine sezdirmemek ve sunucu kaynaklarını phsing vs. amacı ile sömürmek olduğunu biliyoruz.

Bu gibi durumlarda örnek olarak, bir şekilde sisteme sızıldıktan sonra tespit edilmesi istenmeyen bağlantı, süreç, dosya ve dizinlerin görüntülenmesini engellemek üzere ls, ps, netstat ve who gibi araçların değiştirildiği malumdur. Mesela böyle bir durumda saldırgan tarafından çalıştırılmış süreç ps çıktısında görüntülenmeyecektir ya da görüntülenmesi istenmeyen tcp oturumları netstat çıktısında yer almayacaktır vs.

Bunun dışından bir aralar ortalıkta ssh için bir patch dolaşıyordu ve bu patch ssh login bilgilerini plain-txt olarak gizlenmiş bir dosyaya yazıyordu ve saldırganın ssh bağlantısı who çıktısında görüntülenmiyordu.

İşte tüm bu tip durumlara kısa sürede müdahale etmek ve sisteme nasıl sızıldığını tespit etmek oldukça önemlidir, zira sisteminizde bir arka kapı oluşmuşsa sistem ip adreslerinizin lamer forumlarında yayınlandığını görmeniz pek uzun zaman almayacaktır.

Hal böyle olunca aide gibi araçlar epey iş gören uygulamalardır. Tabii  sunucuya sızan saldırganın aide'nin çalışmasını da engelleyebileceğini ve bu durumda aide'nin hiç bir faydası olmayacağını da düşünebiliriz ancak bir sonraki başlıkta değineceğim teknik detaylarda da anlatacağım gibi bu durumun önüne geçmek de mümkündür.

Sonuç olarak ek bir güvenlik önlemi olara aide kullanmak mantıklıdır diyebiliriz. Aide'nin ne olduğu ile ilgili bilgilerden sonra şimdi biraz da nasıl çalıştığına değinmek istiyorum.

Çalışma Prensibi


Temel olarak aide sistem dosya ve dizinlerinin her biri için izin, inode numarası, kullanıcısı, grubu, dosya ebatı, değiştirilme, oluşturulma ve erişim tarihlerinin tutulduğu bir hash alır ve kendi oluşturduğu bir database dosyasına kaydeder. Böylece ileriki bir zamanda dosya bütünlük kontrolü yapmak istendiği zaman dosyaların o anki hali databasede bulunan veri ile karşılaştırılır ve değişiklikler saptanır.

Sisteminizde hangi dosyalarda ne tip değişikliklerin kontrol edileceği yapılandırma dosyasının ön tanımlı olarak mevcuttur. Bunun yanı sıra, kendi özel dosya ve dizinleriniz için de kurallar oluşturmak mümkündür.

Ayrıca, yapılandırma ve db oluşturma işlemlerinden sonra, aide'nin db ile o anki sistem durumunu karşılaştırmasını ve size mail ile bir durum raporu göndermesini sağlayacak basit bir cron job oluşturabilirsiniz. Bu şekilde sisteminizin dosya bütünlüğünü periyodik olarak takip edebilirsiniz.

Ancak sisteminizde genel olarak uygulama yüklemek/kaldırmak, yapılandırma dosyalarında değişiklik yapmak gibi işlemlerin ardından ek olarak aide database'inizi update etmeniz gerekir.

Bunun dışında, bir önceki başlıkta da bahsettiğim gibi sisteminize sızan bir saldırgan elbette bu db dosyasını da tahrip edebilir. Bu tip bir durumla karşılaşmamak için izlenebilecek yöntem ise db dosyasını örnek olarak bir CD'nin içerisinde sadece okuma işlemi yapılabilecek şekilde tutmaktır.

Oluşturduğunuz db dosyasını bir CD'ye kopyalar ya da read-only şekilde erişim sağlanan bir NFS dizininde tutup, yapılandırma dosyası içerisinde database'in yerini bu sadece okunabilir mecra olarak set ederseniz, saldırgan'ın database dosyasını bozma şansı kalmaz.

Zannediyorum ki çalışma prensibi ile ilgil bu kadar teorik bilgi yeter. Şimdi pratikteki kurulum ve yapılandırma bilgilerine değinmek istiyorum.

Kurulum


Aide, oldukça geçmişi olan bir uygulama olduğu için bir çok *nix sistemin paket depolarında bulunmaktadır. Örnek olarak RHEL tabanlı bir sisteminiz varsa yum, Debian kullanıyorsanız apt-get ya da BSD tabanlı bir sistemde ise port ağacından kurmak mümkündür.

Ben burada sistemler için kurulum ve yapılandırma işlemlerinden bahsedeceğim.

Üzerinde Aide Kurulumu

Deminde bahsettiğim gibi aide FreeBSD port ağacında bulunuyor dolayısı ile ekstra bir efora gerek kalmaksızın aşağıdaki şekilde kurulumunu yapabilirsiniz.

/usr/ports/security/aide dizinine geçip herzamanki gibi make install demek yeterli:

# cd /usr/ports/security/aide/
# make install clean

Kurulum sırasında sisteminize Aide'nin ihtiyaç duyduğu Bison ve Mhash paketleri de yüklenecektir.
Kurulumdan sonra yapılandırma ve database oluşturma işlemi yapılabilir.

Yapılandırma


Aide'nin yapılandırılması, conf dosyasının ihtiyaçlarınıza göre düzenlenmesi (düzenlemeseniz de olur) ve database oluşturulmasından ibarettir.

Önce, conf dosyasının yapısından ve nelerin düzenlenebileceğinden bahsedelim.

Conf Dosyası

Aide'nin default yapılandırma dosyası /usr/local/etc/ altındaki aide.conf isimli dosyadır. Bu dosyada oluşturulacak db'nin lokasyonu, hangi dosya ve dizinlerin takip edilmek üzere hash bilgisinin alınacağı ile ilgil temel bilgiler yer alır.

Ayrıca kendi özel kurallarınızı da bu dosya da tanımlayabilirsiniz. Ön tanımlı olarak tüm sistem dosya ve dizinleri için birer kural bulunmaktadır.

Örnek olarak database dosyasının tutulacağı path şu şekilde görünür:

database=file:///var/db/aide/databases/aide.db
database_out=file:///var/db/aide/databases/aide.db.new

Görüldüğü gibi aide.db isimli ana database dosyası ön tanımlı olarak /var/db/aide/databases/ set edilmiştir. aide.db.new isimli dosya ise yeni db oluşturduğunuz zaman meydana gelen db dosyasının adıdır. İlk sefer db oluştururken bu dosyanın adını aide.db olarak değiştirecegiz.

Bir de bütünlük denetiminde göz edilecek kriterler ve bunlar için oluşturulmuş şablonlar bulunur:

# Templates:
# (default) R :  [R]ead-only (+p+i+n+u+g+s+m+md5+tiger+rmd160+sha1-a)
#       L :  [L]og file (+p+i+n+u+g-s-a-m-md5-tiger-rmd160-sha1)
#       N :  ignore [N]othing (+p+i+n+u+s+g+s+a+m+c+md5+tiger+rmd160+sha1)
#       E :  ignore [E]verything (-p-i-n-u-s-g-s-a-m-c-md5-tiger-rmd160-sha1)

Bu şablonlar dizin ya da dosyalar için tanımlanmış dosya ya da dizinler için denetlenecek kriterleri belirler.

Örnek olarak R (read-only) olarak geçen şablon dosya ya da dizinin erişim zamanı hariç (-a) diğer tüm kriterleri gözetir. Gözetilmeyecek kriterlerin başında (-) gözerilecek kriterlerin başında (+) işareti bulunur.

Kriterlerin bir listesi şu şekildedir:

#       p :  permission and file mode bits      a: access timestamp
#       i :  inode number                       m: modification timestamp
#       n :  number of links (ref count)        c: inode creation timestamp
#       u :  user id of owner                 md5: MD5 signature
#       g :  group id of owner              tiger: tiger signature

Örnek olarak log dosyaları için aşağıda bir örneği bulunan L şablonu kullanılır.

#       L :  [L]og file (+p+i+n+u+g-s-a-m-md5-tiger-rmd160-sha1)

Yani, log dosyalarının permission, inode, link sayısı, kullanıcısı ve grubu dikkate alınırken, dosya ebatı, değiştirilme ve son erişim bilgileri göze alınmaz. Haliyle log dosyalarının ebatları ve erişim ile değiştirilme tarihleri sürekli değişeceği için en mantıklı kullanım şekli budur.

Bir diğer örnek olarak yukarıda N ismi ile geçen şablon dosya ya da dizinin tüm kriterlerini gözedecektir.

Bunun dışında, hiç bir şekilde dosya bütünlüğünün kontrol edilmesini istemediğiniz dizinleri, başlarına (!) işareti koymak sureti ile belirtebilirsiniz. Ayrıca başında (=) işareti koyulan dizinler için sadece dizinin kendisi (altındaki dosyalar değil) bütünlük kontrolüne tabi tutulur.

Demin de dediğim gibi aide.conf dosyası içerisinde önemli olan tüm sistem ve dosya dizinleri ön tanımlı olarak eklidir. Dosyaya göz atarsanız, bu dizin ve dosyaların neler olduğunu görebilir ve kendi özel dosya ve dizinleriniz için benzer eklemeler yapabilirsiniz.

Yapılandırma dosyası düzenlendikten sonraki adım database oluşturmaktır.

Aide Database'inin Oluşturulması

Database oluşturmak için kullanılan komut şu şekildedir:

# aide -i

Bu komutu verdiğiniz zaman aide, belirlenen dosya ve dizinlerin herbiri için belirlenen kurallar dahilinde birer hash alıp /var/db/aide/databases/ dizini altına oluşturacağı aide.db.new ismi db dosyasına kaydedecektir.

Şimdi aide.db.new isimli dosyanın adını aide.db olarak değiştiriyoruz.

mv /var/db/aide/databases/aide.db.new /var/db/aide/databases/aide.db

Böylece, aide conf dosyasında da belirtildiği üzere karşılaştırma işlemleri için aide.db isimli dosyayı kullanacaktır. (Daha önce de söylediğim gibi db dosyanızı read-only bir medyaya aktarıp, aide.conf dosyasında db yolunu bu medya'yı gösterecek şekilde düzenleyebilirsiniz.)

Sistem Dosya Bütünlüğünün Kontrol Edilmesi

Bütünlük kontrolü için -C (check) parametresi kullanılmaktadır.
Şimdi test etmek için check işlemi yapalım.

# aide -C

Herhangi bir dosyada değişiklik olmadığı ya da herhangi yeni bir dosya eklenmediği için çıktı şöyle olacaktır.

AIDE, version 0.13.1

### All files match AIDE database. Looks okay!

Sistem dosyalarından birini editler ya da yeni bir dosya eklerseniz ikinci check işleminde aide değişiklikleri bildirecektir.

Örnek olarak /etc/hosts dosyasına bir ekleme yapıp /etc/ altında test isimli bir dosya oluşturduktan sonra check işlemi yaparsam görüntü şu şekilde olur:

# echo "falan filan" >> /etc/hosts
# touch /etc/test
# aide -C
AIDE found differences between database and filesystem!!
Start timestamp: 2009-10-18 22:49:01

Summary:
  Total number of files:	409
  Added files:			1
  Removed files:		0
  Changed files:		2

---------------------------------------------------
Added files:
---------------------------------------------------

added: /etc/test

---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /etc
changed: /etc/hosts

--------------------------------------------------
Detailed information about changes:
---------------------------------------------------

Directory: /etc
  Mtime    : 2009-10-18 00:32:06              , 2009-10-18 22:48:57
  Ctime    : 2009-10-18 00:32:06              , 2009-10-18 22:48:57

File: /etc/hosts
  Size     : 1327                             , 1339
  Mtime    : 2009-10-17 22:19:18              , 2009-10-18 22:48:51
  Ctime    : 2009-10-17 22:19:18              , 2009-10-18 22:48:51
  MD5      : wMixP5TURLvum8yLpTh6og==         , 5jIP11Vhya32XbwxA1S2qg==

Görüldüğü gibi yaptığım değişiklikler listeleniyor.

Son olarak, aide'nin belirli zamanlarda çalışıp raporlama yapması ve mail yolu ile raporlama yapması için küçük bir script yazıp cron'a ekleyebilirsiniz.

Aide Cron Job Scripti

Ben bu iş için aşağıdaki gibi küçük bir script hazırladım.

Shell Çıktısı
#!/bin/sh

# Raporlamanin yapilacagi e-posta adresi
posta_adresi=posta @ adresiniz . com

#Aide Chek ve Rapor Olustur
/usr/local/bin/aide -C > /tmp/aideraporu.txt

# Raporu postala
cat /tmp/aideraporu.txt | mail -s "Aide Raporu" "$posta_adresi"

# Gecici rapor dosyasini sil
rm /tmp/aideraporu.txt

Scripti kendinize göre düzenleyip aşağıdaki şekilde cron'a eklerseniz her gece saat 23:59 da çalışacak ve belirttiğiniz adrese bir rapor gönderecektir.

59 23 * * * /bin/sh /yol/aide-check.sh

Aide, hafif paranoyal bir güvenlik önlemi olsa da sisteminizde sizden habersiz bir aktivite olması durumunda epey işe yarayacak bir yazılımdır.

Aide'in beklenmedik sistemsel değişiklikleri rapor etmemesi dileklerimle :)

Visited 752 times, 1 visit(s) today
Kategoriler: *nix,Scripts,Security |

Bu yazılar da ilginizi çekebilir:


- Scalpel ile Data Recovery
- FreeBSD – Jail Sistemleri Ramdisk Üzerinde Çalıştırmak
- Ossec Merkezi Agent Yapılandırması
- FreeBSD üzerine Rsyslog Kurulumu ve Yapılandırması
- Pure-FTPd Server ClamAV Entegrasyonu- FreeBSD

Yorumlar


  1. Yasin Evrenkaya | (Ağustos 5th, 2010 4:20 pm)

    Ellerinize sağlık.

    [Cevapla]

Trackbacks

Yorumda bulunun.