Hacklenmeye Karşı Dosya Bütünlüğü Takibi

Son dönemlerde, yeni geliştirilen bir takım yöntemler ve zafiyetler sonucu sıklıkla Web sitelerinin hacklendiğine şahit oluyoruz. Aslında bunun temel nedeni bazı önemli teknik ayrıntılara dikkat edilmemesinden kaynaklanıyor ve hacklenmek kaçınılmaz olabiliyor. Bunun farkına varıldığında iş işten çoktan geçmiş olabiliyor. Fakat çok pratik bir yol sayesinde Web site veya uygulamanız hacklenince anında haberdar olabilir ve hızlıca gerekli önlemleri alabilirsiniz.

 

Hacklenme son zamanlarda çoğunlukla iki amaç için yapılabiliyor. İlk olarak hedefe veya hedef üzerinden belirli bir kitleye spesifik bir mesaj iletmek için, diğeri ise o siteye zararlı bir malware yazılımını yükletmesini sağlayacak kod parçasını yüklemek veya sitenin arama motoru trafiğini belirli yerlere yönlendirmek için yapılabiliyor. Arama motorundan siteye gelen trafiği istenilen yerlere yönlendirmek için sitenin .htaccess dosyası değiştirerek gerekli eklemeler yapılıyor. Böylelikle siteye arama motorları sonuçları üzerinden gelen ziyaretçiler çaktırmadan ve otomatik bir şekilde başka bir yere yönlendirilmiş oluyor. Bunun için de alttaki htaccess kodları kullanılabiliyor:

RewriteEngine On
RewriteCond %{HTTP_REFERER} .google.$ [NC,OR]
RewriteCond %{HTTP_REFERER} .aol.$ [NC,OR]
RewriteCond %{HTTP_REFERER} .msn.$ [NC,OR]
RewriteCond %{HTTP_REFERER} .altavista.$ [NC,OR]
RewriteCond %{HTTP_REFERER} .ask.$ [NC,OR]
RewriteCond %{HTTP_REFERER} .yahoo.$ [NC,OR]

 

En çok kullanılan diğer yöntemde ise sitenin ana sayfası yani “index.php” dosyası değiştirilerek yerine başka bir şey konulabiliyor ya da içersine zararlı kod parçaları gömülebiliyor. Her iki yolda da dosyaların kendisi değiştiriliyor. Yani artık eski dosyanın yerine artık boyutu ve içeriği değiştirilmiş aynı isimde fakat farklı yeni dosyalar karşımıza çıkıyor. İşte tam bu noktada hacklenmenin farkına varacağımız yer ortaya çıkmış oluyor. Bir dosyanın benzersiz içerik ve boyut bilgisinin özet bir şekilde kodlanmış olduğu hash (SHA1) kodu oldukça işe yarıyor. Yani orjinal dosyamızın (index.php veya .htaccess) orijinal hash kodu ile hacklendikten sonraki haline ait hash kodunun otomatik olarak karşılaştırılması neticesinde ortaya çıkan fark sonucu anında istenilen bir adrese e-posta bildirimi ile iletilebiliyor. Böylece hacklendikten sonra hızlı bir şekilde aksiyon alınabiliyor. Aynı dosyanın ilk özet ve sonraki değiştirilmiş özet hallerinin karşılaştırılması prensibine dayanan bu dosya bütünlüğü takibi ile hızlıca zararla telafi edilebiliyor:

<?php

$hash1 = sha1_file('.htaccess');
$hash2 = sha1_file('index.php');

if(($hash1 == 'fa7cdb22b81b0b713bfed609acc984591f9bed2f') &&
   ($hash2 == 'b4bb6070800a340566d7d6872516d248d4a7aff3')) {
    mail("EMAIL", "Durum Ok!", "Durum Ok!");
} else {
    mail("EMAIL", "Alarm!", "Dosyalar değiştirilmiş!");
}
?>

Yukarıdaki kodda görülebileceği gibi iki farklı dosyanın hash kodu alınıyor, eğer dosyalar hacklenirse, doğal olarak hash kodları değişeceğinden, bu durum anında e-posta olarak belirteceğiniz adrese bildiriliyor. Bu koruma yönetimini otomatikleştirmek için yukarıdaki yaklaşımı kullanan HashWatch PHP Class isimli bir php sınıfından faydalanıyoruz. Bu class’ı kendi alanınıza kurduktan sonra öncelikle hash değerlerinin tutulacağı ve php tarafından yeniden yazılabilir bir klasör oluşturuyorsunuz. Ardından bir config dosyası oluşturuyorsunuz. Hash değerlerini oluştumak ve saklamak için:

<?php

$hw = new HashWatch('path/to/config.HashWatch.php');
$hw->buildHashes();

Var olan güncel dosya ile önceden kayıt edilmiş olanları karşılaştırmak için ise alttaki betiği kullanıyorsunuz:

<?php

$hw = new HashWatch('path/to/config.HashWatch.php');
$warnings = $hw->compareHashes();

if (!empty($warnings)) {

    // e-posta gönder, sms gönder... vs...

}

 

Ayarlamalar kısmı oldukça basit. Config dosyasının içinde değiştirilmesi ve kullanılması zorunlu olan sadece $paths_to_watch ve $hash_folder_path isimli iki parametre var. Siteyi her güncellediğinizde bu scripti çalıştırın. Bu güncellemeye göre yeni hash değerleriniz oluşturulur. Bunu ister elle isterseniz de script şeklinde yapabilirsiniz. Ardından bir cron job oluşturarak kayıtlı olan hash değerleri ile var olan dosyanızın hash değerlerini otomatik olarak karşılaştırın. Aşağıdaki bağlantıya gittiğinizde indireceğiniz dosyada örnek script de var. Ayrıca WordPress siteleri için dosya bütünlüğü kontrolü yapan eklentileri de bu iş için kullanabilirsiniz.

HashWatch: https://github.com/august/HashWatch

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir