infolightbulb_outlinenew_releasesreportwarning

Wordpress Sunucu Güvenliği

Doruk Fişek

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

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

  • ?