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