Register Now

Login

Lost Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Login

Register Now

Canyoupwn.me ~

TR | WordPress Hardening

wordpress-bg-medblue

WordPress Hardening

WordPress, açık kaynaklı ve ücretsiz olarak kullanılabilen dünya üzerinde en çok tercih edilen blog sistemlerinden biridir. WordPress’i kolayca kurabilir, sitenizi yayınlayabilir ve içerik eklemeye başlayabilirsiniz.

WordPress topluluk tarafından geliştirilmiştir. Bu sayede isteyen herkes gelişmesine, daha kullanışlı ve sağlam bir hal almasına olanak sağlamaktadır.
WordPress güvenlik kayıtlarına göre yüklenen WordPress yazılımlarının %70’inde saldırganlar tarafından hedef alınabilecek zararlılar bulunmaktadır. Buna ek olarak 2012 yılında 170 bin WordPress sitesi hacklenmiştir ve bu sayı her yıl giderek artmaktadır.

Çok az sayıda trafik alan ya da içinde önemli dosyaların, belgelerin bulunmadığı bir blogun sahibi olduğunu düşündüğünüzde neden saldırgan bize saldırsın ki diye düşünebilirsiniz.Bunun en çok tercih edilme sebebi ise saldırganların sizin sunucunuzu spam mailleri yollamak üzere ele geçirmek istemesidir.

Bu yazıda, sahip olduğunuz WordPress sitesini nasıl tehditlerden korumanız gerektiğini konuşacağız.

Saldırganların size hangi yollardan saldıracağını anlamak için WordPress güvenlik raporundaki sayılara bakabiliriz. Geçen yılki verilere göre:

  • %41’lik kısım hosting platformunda bulunan güvenlik zaafiyetlerinden ötürü
  • %29’luk kısım WordPress temalarını kullanarak
  • %22’lik kısım WordPress pluginlerinden
  • %8’lik kısım ise kullanılan zayıf parolalardan dolayı hacklenmiştir.

Görüldüğü üzere saldırıların %41’lik kısmı hosting platformlarında yer almaktadır. Bu, birçok tekniği içeren bir konu olsa da buna bir örnek verebiliriz. Örneğin URL parametrelerini kullanarak SQL Injection saldırısı gerçekleştirilebilir. Bu teknik, saldırganlara istedikleri kodları sizin veritabanınıza kaydetmeyi-örneğin şifrenizin değiştirilmesi gibi- verilerinizi silmeyi ya da değiştirmeyi mümkün kılar.

%51’lik bir kısım ise WordPress plugin ve temalarından kaynaklanan zaafiyetlerden ötürüdür. Saldırgan kişiler plugin ve temaların içine şifrelenmiş şekilde çalıştıralabilir kod parçaçıkları bırakabilir. Bu teknik ile siteniz üzerine bir arka kapı bırakabilir, daha sonra sizin haberiniz olmadan siteniz üzerine erişim sağlayabilirler.

Listenin sonunda yer alan zayıf parolalar ise tahmin edilmesi kolay olduğu için ve kaba kuvvet saldırı ile kolayca elde edilebileceği için tehlike arz etmektedir.

Şimdi ise yapmanız gerekenlerin yer aldığı kısıma geçelim. Unutulmamalıdır ki saldıraya uğramadan sitenizi güvenli hale getirmek, saldırıya uğradıktan sonra düzeltmekten çok daha karlı bir iştir.

Güvenli Bir Hosting Şirketinden Hosting Hizmeti Almak

Yukarda bahsedildiği gibi saldırıların hatrı sayılır bir kısmı hosting şirketlerinde yer alan zaafiyetlerden dolayı olmaktadır.Hosting şirketi tercih ederken aşağıdaki gibi koşulları arayabiliriz;

  • PHP ve MySQL’in son sürümünü destekeleyen
  • WordPress ile optimize bir şekilde çalışabilecek
  • WordPress ile birlikte kullanılabilecek bir güvenlik duvarı olan
  • Zararlı yazılım taraması barındıran
  • Önemli WordPress güvenlik sorunları karşısında çözüm bulmuş hosting şirketleri tercih edilmelidir.

Eğer paylaşımlı bir hosting almayı düşünüyorsanız, hosting şirketinizin sizin alanınızı diğerlerinde izole ettiğine emin olmanız gerekmektedir. Bu sayede aynı alanda bulunan sitelerde meydana gelen saldırılar, sizi etkilemeden ortadan kalkabilir.

Ayarların Yüklenmesinin Önemi

WordPress Güvenlik Anahtarları olarak adlandırılan yazılım yenilikleri WordPress’in 2.5, 2.6, 2.7 sürümleri ile birlikte gelmeye başlamıştır. Bu anahtarlar sitenizi ziyaret edenlerin çerezlerinin daha güvenli bir şekilde saklanmasına olanak vermektedir. Ayrıca bu anahtarlar sizin parolarına eklenen ek özellikler ile birlikte parolanızın kırılmasını güçleştirecektir.

Bu anahtarlar wp-config.php dosyası içinde yer alır ve değiştirilebilir. Eğer bu anahtarları yükleme esnasında eklemediyseniz, bu dosya üzerinde ekleyebilirsiniz.

WordPress veritabanı üzerinde yer alan tüm tablolara bir ön ek getirir. Default olarak gelen bu ön ek “wp_“‘dir. Örneğin kayıtlar adında bir tablo oluşturmak istediğinizde bu wp_kayitlar şeklinde gözükecektir. Bu ön eki değiştirmenin önemi saldırganların siteniz üzerinde SQL Injeciton saldırı gerçekleştirmesi sırasında tablo isimlerini tahmin edememesini sağlamaktır.

Ön eki değiştirmek için wp-config.php dosyasında

$table_prefix = ‘wp_’;

satırınu değiştirebilirsiniz.

Bu ayarı değiştirmeniz daha önce oluşturmuş ve wp_ ön ekine sahip olan tablo isimlerinizi değiştirdiğiniz anlamına gelmez. Eğer bu işlemi tablo oluşturulmasında sonra yapıyorsanız, tablolarınızı güncellemeniz gerekmektedir.

Bunun için iThemes Security uygulmasını kullanabilir, otomatik olarak tablolarınız güncelleyebilirsiniz. Buna ek olarak bu işlemi elle yapmak da isteyebilirsiniz fakat bu işlem biraz zaman alabilir.

Bu işlemi PHPMyAdmin üzerinde her veritabanı ve her veritabanı içindeki tüm tablolar için tek tek yapmak koşuluyla aşağıdaki komut ile yapabilirsiniz. Tabi pluginlerin oluşturduğu tabloları da unutmamanız gerekmektedir.
RENAME table `wp_links` TO `newprefix_links`;

Elle komut girmek istemiyorsanız bunu yine PHPMyAdmin üzerindeki seçeneklerden de yapabilirsiniz.

Bir sonraki adımda yapmanız gereken işlem tablo ön eklerinin referans alındığı meta isimlerini değiştirmek olacaktır.Bunun için yine PHPMyAdmin üzerinden basit bir sorgu kullanmanız gerekmektedir.

UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE( `meta_key`, ‘wp_’, ‘newprefix_’ )

Son olarak ise options tablosunu da güncelleyerek bu kısmı bitirmiş olursunuz.

UPDATE `newprefix_options` SET `option_name` = ‘newprefix_user_roles’ WHERE `option_name` = ‘wp_user_roles’

WordPress’inizi Güncel Tutun

WordPress’in her sürümü önceki sürümlerde görülmüş bir güvenlik açığını giderir. Dahası, WordPress’in güncel sürümünü kullanıyorsanız bu, sizin saldıralar karşısında daha fazla açığa sahip olduğunuz anlamına gelir. WordPress’inizi güncel tutmak bu ve buna benzer sebeplerden dolayı oldukça önemlidir.

WordPress yılda iki defa büyük sürüm güncellemesi yayınlar. Bu güncellemelerde daha çok yeniliklerden bahsedilir. Buna ek olarak sene içerisinde küçük güncellemeler de yapılır. Bunun da amacı büyük güncellemelerdeki hataları ve güvenlik zaafiyetlerini gidermektir.

WordPress’in 3.7 sürümü ve sonrası kullanıcılarına otomatik güncelleme seçeneği sunar. Fakat bu otomatik güncelleme sadece küçük güncellemeleri kapsar. wp-config.php dosyası içerisine ufak bir kod ekleyerek bu işlemi kendiniz yapabilirsiniz.
define( ‘WP_AUTO_UPDATE_CORE’, true );

Bu şekilde tüm güncellemeleri otomatik şekilde almış olacaksınız. Fakat büyük güncellemelerden sonra sitenizde sorun çıkması ya da sitenizin çökmesi mümkün olabilir.Bu gibi durumlar için önlem almak istiyorsanız otomatik güncelleme seçeneğini kapatmanız gerekmektedir.

WordPress Pluginleri ve Temaları

Temalar ve pluginlerin içindeki güvenlik açıkları başlarda öğrendiğimiz gibi saldırı olayların yarısından fazlasını kapsamaktadır. Siteniz üzerinde kullandığınız pluginleri seçerken oldukça dikkat etmeniz gerekmektedir.

Eğer bir işlemi basit fonksiyonlar ile yapma imkanınız varsa plugin kullanmamayı tercih edin.
Bütün pluginlerin tam amacına hizmet etmek için yazılmadığını unutmayın. Ekleyecek olduğunuz pluginin ne yaptığından emin olun, kaynak koduna bakın.
Kullanmadığınız pluginleri kapatıp kaldırın.
Pluginleri seçerken güncel olanlarını tercih edin.

Kullanmış olduğunuz temanın son sürümünü kullandığınıza ve kodların düzgün bir şekilde yazıldığına emin olun. Temalarınızı ve pluglerinizin kalitesini WordPress’in tema kontrol ve plugin kontrol uygulamalarıyla kontrol edebilirsiniz.

Buna ek olarak bilinmeyen kaynaklardan ücretsiz WordPress temaları indirirken dikkatli olmanız gerekmektedir. Bilinmeyen kaynaklardan zararlı kodların gelebileceğini unutmamak gerekir. Eğer içinizde buna dair bir şüphe varsa, WordPress’in kendi temalarına bağlı kalmayı tercih edin.

Kullanmakta olduğunuz pluginler için otomatik güncelleme işlemini aktif etmek istiyorsanız aşağıdaki kod parçasını wp-config.php dosyası içine ekleyebilirsiniz.

add_filter( ‘auto_update_plugin’, ‘__return_true’ );

Aynı işlemi temalarınız için de yapabilirsiniz.

add_filter( ‘auto_update_theme’, ‘__return_true’ );

Pluginlerinizi ve temalarınızı otomatik olarak update ederken sitenizde herhangi bir sorun çıkabilir. Bu sorun siz bilgisayarınız başında değilken çıktığında ise sizin için sorun oluşturabilir. Bu durumda güncellemeleri manuel olarak yapmak bu gibi olaylardan kaçınmak için tercih edilebilir.

Dosya İzinleri

Dosya izinlerini doğru ayarlamak oldukça önemlidir. Bütün izinlerin 777 olarak ayarlanması zararlı kodların siteniz üzerinde izinsiz çalışmasına sebep olabilir.

WordPress için tavsiye edilen dosya izinleri aşağıdaki gibidir.

  • Dizinler için 755 ya da 750
  • Dosyalar için 644 ya da 640
  • wp.config.php dosyası ise 600 olarak ayarlanmalıdır.

PHP Hata Mesajlarının Kapatılması

Eğer bir plugin ya da tema siteniz üzerinde hata verirse, dışarıya verilen hata mesajı içerisinde siteniz üzerinde yer alan yazılımlar hakkında bilgi verilmemeye dikkat edilmemelidir. Aşağıdaki kod parçasını wp-config.php hata mesajlarını engelleyebilirsiniz.

error_reporting(0);
@ini_set(‘display_errors’, 0);

.htacces Dosyası
.htacces dosyası URL’leri yönlendirme ve kalıcı bağlantı linklerini ayarlamada kullanılan önemli konfigürasyon dosyasıdır. Bu dosya sıkılaştırma işlemleri için de kullanılabilir.

Örneğin wp-config.php dosyası siteniz için önemlidir. İçerisinde veritabanı bağlantı ayarları, tablo ön ekler, güvenlik anahtarları ve diğer önemli bilgiler yer alır. Bu dosyası .htaccess içinde düzeneleme yaparak koruyabilirsiniz.

<files wp-config.php>
order allow,deny deny from all 
</files>

Sitenizi admin paneline sadece belirli IP’lerden gelen istekleri kabul etmek için aşağıdaki gibi ayarlama yapabilirsiniz.

order deny,allow
allow from 192.168.5.1
allow from 123.123.7.8
deny from all

Eğer sitenizi ziyaret eden şüpheli biri ile karşılaştıysanız yine aynı şekilde o kişiyi engelleyebilirsiniz.

order allow,deny
deny from 123.123.8.9
allow from all

Genel olarak /wp-includes/ dizini önemli bilgileri içeren bir dizindir. Sitenizi ziyaret eden kişilerin bu dizine girmesine gerek yoktur. Aşağıdaki kod satırını ekleyerek bu dizini koruyabilirsiniz.

# Block the include-only files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

.htaccess dosyasının kendisini korumak için ise aşağıdaki kodu uygulayabilirsiniz.

<Files .htaccess> order allow,deny deny from all </Files>

Ayrıca yapılan isteklerde verilen bilgiler içerisinden kullanmakta olduğumuz apache sürümü bilgilerinin gösterilmesini engellemek adına apache2.conf dosyası içerisinde aşağıdaki değişikliği yapabiliriz.

ServerSignature Off
ServerTokens Prod

ServerSignature Off ile hata sayfalarında apache sürüm bilgisinin dışarıya vurulması engellenir.

ServerTokens Prod ile de http istek başlıklarında server kısmında ne yazacağı ayarlanmış olur. Bunu Prod olarak belirleyerek sadece Apache yazmasını sağlamış oluruz.

Parolalar

Zayıf parolalar saldırganların sitenize kaba kuvvet saldırıları uygulayarak sitenizi ele geçirmeyi deneyebilir. Ayrıca zayıf parolaların tahmin edilme olasılığı da oldukça yüksektir.

  • Parolalar düzenli olarak değiştirilmelidir.
  • Otomatize toollar yardımı ile güçlü parolalar oluşturulmalıdır.
  • Sitenize kayıt olacak diğer kullanıcıların da güçlü parola kullanması için parola politikası belirlenmelidir.

Çoğu WordPress sitesinin en yetkili hesap adı admin olarak seçilmektedir ve bu admin adı eski WordPress sürümlerine default olarak gelmekteydi. Bu durum saldırganlar tarafından bilindiği için yapmaları gereken sadece şifreler için kaba kuvvet saldırısı yapmak olacaktır. Aşağıdaki SQL komutu ile PHPMyAdmin üzerinde yeni bir kullanıcı adı alabilirsiniz.

UPDATE wp_users SET user_login = ‘newusername’ WHERE user_login = ‘admin’;

Giriş Denemelerinin Sınırlanması
Saldırganlar farklı kullanıcı adları ve parolalar ile birlikte sürekli olarak sitenize girmeyi deneyebilir. Bu gibi saldırı türünden kurtulmak için yapılması gereken çözümlerin başında LoginLockDown, LoginSecuritySolution gibi pluginler yükleyerek giriş denemelerini kontrol etmektir.

Bir saldırgan belirli sayıda giriş yapmayı denediğin ve sizin belirlediğiniz eşiği aştığında bir süre için siteye erişiminin engellenmesi gerekmektedir. Bu süreyi ve deneme sayısı belirlemek size kalmıştır. Ayrıca bu pluginler yardımıyla sitenize giriş yapmayı deneyen kişilerin IP adreslerinin de kaydını tutabilmektesiniz. Daha sonra bu IP adresini kullanarak sitenize giremeyecek kişileri düzenleyebilirsiniz.

Ayrıca yanlış giriş denemelerinin sonucunda gösterilen hata mesajlarında kullanıcı adı hatalı ya da parola hatalı gibi olmamalıdır. Bu, karşı tarafa girilen kullanıcı adının var olup olmadığı hakkında karşı tarafa bilgi verir. Bunun yerine kullanıcı adı ya da şifre hatalı gibi bir mesaj gösterilebilir.

İki Aşamalı Güvenlik

İki aşamalı doğrulama saldırganlar için sitenize kaba kuvvet saldırıları ile girilmesini bir kat daha zorlaştıracaktır. Bu sayede her giriş denemesinde güvenlik kodu girilmesi zorunlu hale gelecektir.Aşağıda iki aşamalı güvenlik hizmeti veren bazı WordPress pluginleri yer almaktadır.

  • Clef
  • Clockwork SMS
  • Duo Two-Factor Authentication
  • OpenID
  • Google Authenticator
  • Authy Two Factor Authentication
  • Stealth Login Page

Giriş Sayfasının Saklanması

Default olarak giriş sayfası /wp-admin altında yer aldığı için bunu bilen kötü amaçlı kişiler giriş yapmayı deneyebilir. Bu dizini başta bir yere taşımak yine saldırganların kaba kuvvet saldırı yapmasını engellemeye yardımcı olacaktır.Bu işlemi gerçekleştirmek için bazı pluginler yer almaktadır.

  • Hide Login
  • Lockdown WP Admin
  • Rename wp-login.php

WordPress Sürüm Numarasının Kaldırılması

Default olarak WordPress meta tagleri içerisine hangi WordPress sürümünü kullandığınız ekler. Bu bilgi saldırganlar için sisteminiz tanınmasa ve o sistem üzerinde hangi zaafiyetlerin yer aldığının bilinmesine sebep olmaktadır. Bu meta tagini kaldırmak için temanızda yer alan function.php içerisine aşağıdaki kodu ekleyebilirsiniz.

remove_action(‘wp_head’, ‘wp_generator’);

Yine bu işlemi Remove Version adlı plugini yükleyerek de yapabilirsiniz.

Düzenli Yedekleme Yapılması

Siteniz üzerinde her türlü güvenlik önlemini aldığınızı düşünseniz bile belirli alarak siteniz yedeğini almanız gerekmektedir. Ne durumda olursa olsun sitenizin saldırganlar tarafında hedef alınamayağı kesin değildir.

Çoğu hosting şirketi günlük olarak sitelerin yedeklerini almaktadır. Fakat eğer onların da aldıkları yedekler zarar görürse, sizin yedekleriniz de kaybolmuş olacaktır.
Bu yüzünden sitenizin yedeğini kendiniz düzenli olarak almalısınız.

WordPress bu işlemi sizin için yapabilmekte olup yedeğinizi istediğini zaman alabilir, istediğiniz zaman geri yükleyebilirsiniz.

Bu işlemi yaparken BackupBuddy, Backup Creatır, UpdraftPlus Backup and Restoration for WordPress, WordPress Backup to Dropbox gibi pluginleri tercih edebilirsiniz.

Sitenin Taranması

Eğer sitenizin tehlike altında olduğunu düşünüyorsanız, hosting şirketiniz ile görüşüp saldırganın yüklediği dosyaları sitenizden kaldırtabilirsiniz. Fakat bazı saldırganların hedefi sitenizi spam mailleri göndermek için kullanmaktır ve siz dosyaları kaldırdığınızda bile bu işlem devam edecektir.Sitenizde yer alan zararlıları ve şüpheli dosyaları kaldırmanın en güzel yolu sitenizi düzenli aralıklarla taramaktır. Bunun için aşağıdaki pluginleri kullanabilirsiniz.

  • Ultimate Security Checker
  • AntiVirus
  • WP Antivirus Site Protection
  • Sucuri Sitecheck
  • CodeGuard
  • Theme Authenticity Checker

Bu konuda son oalrak WP Changes Tracker plugininden bahsedebiliriz. Bu plugin sizin sitenizdeki, temanızdaki, plugininizdeki tüm değişikliklerin logunu tutar. Bu bir tarama aracı olmasa da siteniz üzerindeki tüm değişiklikleri gözlemleyerek bu karara siz varabilirsiniz.

Hepsi Bir Arada Pluginler

Eğer teknik konularda çok fazla bilginiz yoksa ya da bu işler ile kendiniz uğraşmak istemiyorsanız bazı hazır pluginler sayesinde sitenizi koruma altına alabilirsiniz. Bunların amacı genel olarak sitenizi saldırganlar korumak için önlem almak olsa da bazıları günlük taramalar yapar ve güvenlik duvarları oluşturur.

  • Acunetix WP Security
  • Sucuri Security
  • Wordfence Security
  • BulletProof Security

Sonuç Olarak

Siteniz için güvenlik önlemleri almak sizin için oldukça önemli bir ihtiyaçtır. Eğer bu ve buna benzer önlemleri almazsanız, saldırılara karşı oldukça açık durumda kalırsınız. Bu sitenizin spam mailleri gönderdiği için diğer sitelerce kara listeye alınmasına sebep olabilir. En kötü durumda ise sahip olduğunuz verileri kaybedebilirsiniz.

Günlük yarım saatlik bir özen göstererek sitenizin güvenliğini iyi derecede sağlayabilir ve saldırganlar tarafından hedef alınması güç bir site haline gelebilirsiniz.

About Ali TONKAZ

Sakarya Üniversitesi