WordPress Xmlrpc Saldırısını Engelleme

Cpanel Erdinç Koç 8 Görüntüleme

WordPress xmlrpc.php Saldırısı Nasıl Önlenir?

WordPress kullanıcıları için güvenlik, her zaman kritik bir konudur. Birçok WordPress sitesi, xmlrpc.php dosyası üzerinden yapılan saldırılara maruz kalabilmektedir. Bugün, bu yazıda xmlrpc.php saldırıları nasıl önlenir sorusuna detaylı bir yanıt vereceğiz.

xmlrpc.php Nedir?

xmlrpc.php, WordPress sitelerinin farklı uygulama ve hizmetlerle uzaktan iletişim kurmasını sağlayan bir dosyadır. Bu dosya, uzaktan erişim protokolü olan XML-RPC’yi kullanarak sitenize erişim sağlar. Örneğin, mobil uygulamalar veya harici blog yazılımı gibi hizmetler ile siteye bağlanmak bu dosya üzerinden gerçekleşir.

Her ne kadar xmlrpc.php dosyası yararlı bir işlev sunsa da, aynı zamanda siber saldırılara açık bir kapı bırakabilir. Bu dosya üzerinden yapılan yaygın saldırılar arasında Brute Force (Kaba Kuvvet) ve DDoS (Dağıtık Hizmet Engelleme) saldırıları bulunmaktadır. Bu saldırılar, sitenizin yavaşlamasına veya erişilemez hale gelmesine neden olabilir.

xmlrpc.php Dosyası Üzerinden Yapılan Saldırı Türleri

  1. Brute Force (Kaba Kuvvet) Saldırıları: Kötü niyetli kişiler, xmlrpc.php dosyasını kullanarak sitenize çok sayıda oturum açma denemesi yapar. Genellikle şifreleri deneme yanılma yoluyla bulmaya çalışırlar.
  2. DDoS Saldırıları: Aynı dosya üzerinden çok sayıda istek gönderilerek sitenizin aşırı yüklenmesi sağlanır. Bu da sitenizin yavaşlamasına veya tamamen çökmesine yol açar.
  3. Pingback Saldırıları: XML-RPC, pingback adını verdiğimiz bir özelliği de destekler. Bu özellik üzerinden sahte pingback istekleri ile siteniz saldırıya uğrayabilir ve bu da DDoS saldırılarına benzer bir sonuç doğurabilir.

xmlrpc.php Saldırılarını Önleme Yöntemleri

  1. xmlrpc.php Dosyasını Devre Dışı Bırakmak Eğer siteniz xmlrpc.php dosyasına gerçekten ihtiyaç duymuyorsa, bu dosyayı tamamen devre dışı bırakabilirsiniz. Bunun için aşağıdaki kodu WordPress sitenizin .htaccess dosyasına eklemeniz yeterli olacaktır.
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

Bu kod, xmlrpc.php dosyasına yapılan tüm istekleri engeller ve sitenizi bu dosya üzerinden yapılan saldırılardan korur.

Ancak sunucu sahipleri birden fazla wordpress site barındırıyorlar ise tek tek yapmak oldukça zahmetli olacaktır bunun için sizlere basit kullanışlı bir bash script ile bu durumdan kendini nasıl kurtarabilirsiniz onu anlatacağım evet şimdi basit kullanışlı bash  script oluşturalım öncelikle putty aracılığı ile ssh login olalım ardından aşşağıdaki kodu komut satırına uygulayalım.

nano xmlrpc.sh

yukarıdaki komutu yazdıktan sonra aşşağıdaki bash scriptimizin kodunu kopyalayıp yapıştıralım.

#!/bin/bash

# Ana kullanıcı dizini (cPanel kullanıcı dizinlerinin bulunduğu yer )
BASE_DIR="/home"

# Kullanıcı dizinlerini bul
for user_dir in "$BASE_DIR"/*; do
    if [ -d "$user_dir" ]; then
        # Her kullanıcının public_html dizinini tanımla
        PUBLIC_HTML_DIR="$user_dir/public_html"

        # Eğer public_html dizini varsa
        if [ -d "$PUBLIC_HTML_DIR" ]; then
            echo "Processing $PUBLIC_HTML_DIR"

            # WordPress sitelerini tanımlamak için dosya/dizin kontrolleri
            if [ -f "$PUBLIC_HTML_DIR/wp-config.php" ] || [ -d "$PUBLIC_HTML_DIR/wp-content" ] || [ -d "$PUBLIC_HTML_DIR/wp-includes" ]; then
                echo "WordPress installation detected in $PUBLIC_HTML_DIR"

                # .htaccess dosyalarını bul ve işleme al
                find "$PUBLIC_HTML_DIR" -name ".htaccess" | while read htaccess_file; do
                    # Yedekleme dosyasının yolunu belirle
                    backup_file="${htaccess_file}.backup"

                    # .htaccess dosyasının yedeğini al
                    if [ -f "$htaccess_file" ]; then
                        echo "Backing up $htaccess_file to $backup_file"
                        cp "$htaccess_file" "$backup_file"
                        
                        # XML-RPC engelleme kuralını ekle
                        if ! grep -q "XML-RPC" "$htaccess_file"; then
                            echo "Blocking XML-RPC in $htaccess_file"
                            echo -e "\n# Block XML-RPC" >> "$htaccess_file"
                            echo "RewriteEngine On" >> "$htaccess_file"
                            echo "RewriteCond %{REQUEST_URI} ^/xmlrpc\.php [NC]" >> "$htaccess_file"
                            echo "RewriteRule .* - [F,L]" >> "$htaccess_file"
                        else
                            echo "XML-RPC block already present in $htaccess_file"
                        fi
                    fi
                done
            else
                echo "WordPress kurulumu bulunamadı $PUBLIC_HTML_DIR"
            fi
        else
            echo "public_html dizini bulunamadı $user_dir"
        fi
    else
        echo "$user_dir is not a directory"
    fi
done

Yukarıdaki kodu yapıştırdıktan sonra CTRL + O tuşuna basarak değişiklikleri kaydedebilirsiniz. Ardından CTRL + X tuşuna basın. Eğer değişiklik varsa kaydetmeyi isteyip istemediğinizi soracaktır. Evet için Y, veya Hayır için N yazın ve Enter tuşuna basın.

Ardından ise xmlrpc.sh çalıştırabilmek için izin verelim onuda aşşağıda verdiğim şekilde izin verebiliriz.

chmod +x xmlrpc.sh

izinlerimizi verdikten sonra sıra geldi bash scriptimizi çalıştırmaya.

sh xmlrpc.sh

komutu ile xmlrpc bash scriptimizi çalıştırabilirim bash script içinde cpanel sunucular içinde wordpress olan tüm siteleri tarayıp ardında wordpress olan sitelere xmlrpc için kural oluşturacak. Merak etmeyin bu kuralı oluştururken her ihtimale karşı script eski htaccess dosyanızın yedeğinide almış olacak. Bu şekilde bir nebzede olsa xmlrpc.php saldırılarından kendimizi arındırmış olacağız.

pleks sunucular için ise bash scripti aşşağıda veriyorum geri kalan herşey yukarıda belirttiğim gibi aynıdır.

#!/bin/bash

# Ana dizin (Plesk kullanıcı dizinlerinin bulunduğu yer)
BASE_DIR="/var/www/vhosts"

# Kullanıcı dizinlerini bul
for user_dir in "$BASE_DIR"/*; do
    if [ -d "$user_dir" ]; then
        # Her kullanıcının web dizinini tanımla
        WEB_ROOT_DIR="$user_dir/httpdocs"  # Plesk'te varsayılan dizin genellikle httpdocs'dur

        # Eğer httpdocs dizini varsa
        if [ -d "$WEB_ROOT_DIR" ]; then
            echo "Processing $WEB_ROOT_DIR"

            # WordPress sitelerini tanımlamak için dosya/dizin kontrolleri
            if [ -f "$WEB_ROOT_DIR/wp-config.php" ] || [ -d "$WEB_ROOT_DIR/wp-content" ] || [ -d "$WEB_ROOT_DIR/wp-includes" ]; then
                echo "WordPress installation detected in $WEB_ROOT_DIR"

                # .htaccess dosyalarını bul ve işleme al
                find "$WEB_ROOT_DIR" -name ".htaccess" | while read htaccess_file; do
                    # Yedekleme dosyasının yolunu belirle
                    backup_file="${htaccess_file}.backup"

                    # .htaccess dosyasının yedeğini al
                    if [ -f "$htaccess_file" ]; then
                        echo "Backing up $htaccess_file to $backup_file"
                        cp "$htaccess_file" "$backup_file"
                        
                        # XML-RPC engelleme kuralını ekle
                        if ! grep -q "XML-RPC" "$htaccess_file"; then
                            echo "Blocking XML-RPC in $htaccess_file"
                            echo -e "\n# Block XML-RPC" >> "$htaccess_file"
                            echo "RewriteEngine On" >> "$htaccess_file"
                            echo "RewriteCond %{REQUEST_URI} ^/xmlrpc\.php [NC]" >> "$htaccess_file"
                            echo "RewriteRule .* - [F,L]" >> "$htaccess_file"
                        else
                            echo "XML-RPC block already present in $htaccess_file"
                        fi
                    fi
                done
            else
                echo "WordPress kurulumu bulunamadı $WEB_ROOT_DIR"
            fi
        else
            echo "httpdocs dizini bulunamadı $user_dir"
        fi
    else
        echo "$user_dir is not a directory"
    fi
done

 

Bu gönderiye oy ver

Sosyal Ağlarda Paylaş

Bir yanıt yazın

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