Wordpress Sunucu Güvenliği
Wordpress Nedir?
Bir içerik yönetim sistemi (CMS)
Dünyadaki web sitelerinin %25’i
İçerik yönetim sistemlerinin de %67’si
Bir PHP/MySQL uygulaması
Wordpress.com isimli bir de SaaS servisi var
Wordpress Efsaneleri
Güvenli değil
Yavaş
Kurumlar için uygun değil
Desteği yok
Ölçeklenemez
Esnek değil
Kendim yazarım daha iyi
Nasıl Güvenlik?
Sunucu işletim sistemi
Web sunucu
Uygulama sunucu
Veritabanı sunucusu
Wordpress’in kendisi
Wordpress’in eklentileri ve temaları
GNU/Linux
Uzun ömürlü bir dağıtım sürümü kullanımı
Güvenlik güncellemelerinin yapılması VE etkinleştirilmesi
Güvenlik duvarının hizmet verilen portlar (80, 443, 22) dışındakileri engellemesi
SELinux (ya da benzer bir güvenlik modelinin) etkin olması
/tmp dizininin noexec bağlanması
SSH servisine parola ile ve root kullanıcısı ile girilememesi
Windows?
Apache Web Servisi
Gerekli olmayan Apache modüllerinin yüklenmemesi
ServerTokens / ServerSignature ile dışarı en az bilgi verilmesi
Git/SVN dosyalarına erişim engellenmesi
Zayıf SSL şifreleme yöntemlerinin kapatılması
Öntanımlı gelen TraceEnable’ın kapatılması
Wordpress dizini için sadece @AllowOverride FileInfo@ ve @FollowSymLinks@ özelliklerinin açık olması
Yandex, Google, Bing, vs botların zaptedilmesi
PHP modülü yerine PHP uygulama sunucusu kullanımı
MaxClients ve ServerLimit ile ayağın yorgana göre uzatılması
Nginx?
PHP Uygulama Servisi
disable_functions ile tehlikeli ve kullanılmayan fonksiyonların kapatılması
open_basedir ile erişilen dizin kısıtlaması (web dizini + /tmp)
enable_dl, expose_php, short_open_tag kapatılması
Dışarıdan veri çekilmiyorsa, allow_url_fopen, allow_url_include 'un kapatılması
Dosya upload’u alınmıyorsa, file_uploads’un kapatılması
session.cookie_httponly ayarı ile cookie’lerin sadece HTTP üzerinden erişilebilmesi
display_errors kapalı, log_errors açık
Gerekli olmayan PHP modüllerinin yüklenmemesi
MySQL Veritabanı Servisi - 1
MySQL’in güncel bir majör sürümünün çalıştırılması
InnoDB depolama motoru kullanılması
Her bir InnoDB tablosu için ayrı dosya oluşturulması
root parolası atanması :P
test veritabanı ve kullanıcılarının kaldırılması
Uygulamanın bağlantısı için ayrı bir veritabanı/kullanıcı oluşturulması, kullanıcının sadece o veritabanına erişebilmesi
MySQL Veritabanı Servisi - 2
Uzaktan bağlantıya izin verilmemesi (uygulama servisi aynı sunucudaysa)
Bağlantı için TCP/IP yerine UNIX soketi kullanılması (uygulama servisi aynı sunucudaysa)
phpMyAdmin kuruluyorsa, bir paket deposundan kurulması (düzenli güncelleme için) ve SSL’e zorlanması
MySQL’in toplam harcayabileceği belleğin MySQLTuner, TunerPrimer gibi bir araçla kontrol edilmesi
Yine benzer araçlar yardımıyla performans ayarlarının yapılması
Wordpress Kullanıcı Girişi
Login’in SSL’e zorlanması
/wp-admin + wp-login.php için IP kısıtlaması
wp-admin/admin-ajax.php dosyasına dikkat!
Self-signed sertifikaya dikkat!
Captcha ile spam botlarını engelleme
n kere hatalı denemeyi engelleme
İki öğeli doğrulama (E-posta, SMS, Google, vs)
Ek HTTP doğrulama
Her yönetici logininde e-posta gönderimi
Dosya Sistemi
777 vermeyin!
Tüm uygulama dizinlerinin sahibi uygulama sunucusunun kullanıcısı dışında bir kullanıcı olmalı (ör: mahmut)
Öntanımlı yalnızca wp-content/uploads dizini sahibi uygulama sunucusunun kullanıcısı (ör: apache:apache)
Temanın ya da eklentilerin başka yazması gereken dizinler varsa (ör: wp-content/gallery), onlara da aynı biçimde izin verilmeli
Uygulama sunucusuna yazma izni verdiğiniz tüm dizinlerde PHP motoru kapatılmalı (php_admin_flag engine off)
Sorun: Web arayüzünden güncelleme, eklenti/tema kurulumu yapılamıyor. Otomatik güncelleme çalışmıyor.
Çözüm: wp-cli (elle ya da deployment aracı ile)
wp-cli
Wordpress’in öntanımlı arayüzü web tarayıcı gerektiriyor
wp-cli ile tarayıcı olmadan konsoldan yönetim mümkün
Güncelleme, eklenti ve tema yönetimi, kullanıcı işlemleri, veritabanı işlemleri ve daha niceleri
Web arayüzünden yapılamayan ek işlemleri de destekliyor (ör: minör güvenlik güncellemesi)
Otomasyonu kolaylaştırır (betik içinde kullanılabilir)
Ve Diğerleri - 1
xmlrpc.php dosyasına çağrıları engelleme (XML-RPC kullanılmıyorsa)
Yönetim arayüzünden eklenti/tema düzenlenmesini engelleme
Gerekli olmayan eklentilerin ve temaların kaldırılması
wp-config.php dosyasında anahtar değerlerini rastgele üretilmiş anahtarlar ile doldurmak
wp-config.php dosyasını yalnızca web sunucu kullanıcısının okuyabileceği hale getirmek
Tekrarlayan giriş hatalarında IP’lerin kısa süreli engellenmesi
Kullanıcıları zor parolalar kullanmaya zorlama
admin hesabının adını değiştirme
Ve Diğerleri - 2
Veritabanı öneki değiştirme
Kullanıcı isimlerinin gizleme
Wordpress sürümünü gizleme
wp-config.php dosyasının yerinin değiştirilmesi
Her bir alt dizin içine boş birer index.php dosyası yerleştirme
Dosya veri bütünlüğünün ve değişikliğinin takibi
Düzenli Wordpress dizininin + veritabanının yedeğinin alınması
Farklı Yöntemler
MySQL ve web dizininin tamamen salt-okunur olması; ayrı bir sistemde güncellemelerin yapılarak, diğerine doğrudan kopyalanması
Tüm uygulama dosyalarının immutable yapılması. Sadece root olarak deployment’ın gerçekleştirilmesi
x saat geriden gelen yedek (MySQL replikasyon + rsync + cron)
WP Security Audit Log
Wordpress Güvenlik Güncellemeleri
Wordpress 3.7 sürümünden itibaren tüm sürümlere minör güvenlik güncellemesi yapıyor.
Web arayüzünden yalnızca son sürüme güncelleme var ancak ayar dosyalarından otomatik minör güvenlik güncellemesi ayarlanabiliyor.
Uygulama sunucusunu uygulama dosyalarına yazamayacak biçimde ayarladıysanız, cron + wp-cli ile güvenlik güncellemelerini otomatik yapabilirsiniz.
Olası eklenti güvenlik güncellemelerinin ayrıca takip edilmesi gerekiyor. Test etmeden uygulamayın.
Wpscan ile Güvenlik Taraması
Verilen URL’deki bir Wordpress’i analiz ediyor
Kendi veritabanında belirlenmiş açıkları tarıyor
Wordpress core’u, eklentileri, temalarını, kullanıcılarını ve timthumblarını inceliyor
Verilen bir sözcük listesine göre parola deneyebiliyor
Güvenlik veritabanı güncellenebiliyor
Uygulama: http://wpscan.org
Güvenlik veritabanı: https://wpvulndb.com/
Eklenti ve Tema Seçimi - 1
Eklenti ve tema denemek için ayrı bir test Wordpress’iniz olsun, kurup/kaldırma veritabanınızı kirletebilir
Eklenti gerçekten gerekli mi?
Ne kadar zamandır geliştiriliyor, ne kadar sık sürüm çıkarıyor?
Ne kadar yaygın kullanılıyor?
İstediğinizden çok fazlasını mı sunuyor?
Eklenti ve Tema Seçimi - 2
Wpscan’in güvenlik açığı veritabanında var mı?
İnsanların eklenti/tema ile ilgili yorumları ve yaşadıkları sorunlar neler?
Temayı theme-check eklentisi nasıl değerlendiriyor?
Eklenti/tema dış servis kullanıyor mu?
Belli özellikleri ücretli mi satılıyor?
wp_options tablosunu hunharca kullanıyor mu?
Sistemime Dalmışlar!
Geçmiş olsun
Yedeğiniz yok mu? Çok ayıp.
Genellikle uygulama dosyalarında değişiklik oluyor.
wp-config.php dosyasını kontrol edin, fazlalık var mı?
wp-content dizini ve wp-config.php dışındaki her şeyi silip, Wordpress’i kaynak kodundan tekrar açın.
wp-content/plugins dizinini aynı şekilde orijinal paketlerinden tekrar açın.
Bu sunumdaki önerileri uygulayın.
Veritabanı ve Wordpress yönetici parolalarını değiştirin.
Sorun tekrarlıyorsa, veritabanı içinde ava çıkın.
Sistemime Tekrar Tekrar Dalıyorlar!
Bu sunumdaki önerileri uygulayın :)
Gerçekten uyguladınız mı?
Emin misiniz?
O zaman sunucu loglarına, kullandığınız eklentilerin ve temanın kaynak kodlarına bir yolculuk sizi bekliyor.
Paylaşımlı Hosting ve Olmayan Kabuk Erişimi
Kolay gelsin. Başka bir sunumun konusu :)
Ya da bir (sanal) sunucuya geçip önerdiklerimizi uygulayın :)
Sorular
?