اذهب إلى المحتوى

هجمات القوة الغاشمة على مواقع ووردبريس والحماية منها


Ali Alrohia

يهدف هجوم القوة الغاشمة Brute Force Attack -وهو أبسط نوع من الهجمات لاكتساب وصول للموقع من خلال تجريب أسماء مستخدمين وكلمات مرور مرارًا وتكرارًا حتى يتمكن من الدخول وهو مختلف عن عمليات الاختراق التي تُركز على نقاط ضعف الموقع. ينجح هذا الهجوم مع الأشخاص الذين يستعملون كلمات مرور بسيطة مثل "123456" واسم مستخدم شائع مثل "admin".

يُركز هذا الهجوم على النقطة الأضعف في أمن الموقع وهي المستخدم، ونظرًا لطبيعة هذا الهجوم سوف تجد أن ذاكرة خادمك تُستهلك سريعًا مما يؤدي لمشاكل في الأداء لأن عدد طلبات http (عدد المرات التي يزور فيها شخص ما موقعك) يكون مرتفعًا للحد الذي يستهلك فيه كامل ذاكرة الخادم.

هذا الهجوم ليس هجومًا خاصًا بمواقع ووردبريس بل يُمكن أن يُطبق على أي تطبيق ويب لكن ووردبريس هدف متكرر كونه مُستخدم على نطاق واسع.

حماية نفسك من هجمات القوة الغاشمة

يوجد نقطة تُستهدف باستمرار في ووردبريس وهي ملف "wp-login.php" حيث يُنفذ الهجوم عليه مرارًا وتكرارًا حتى يتمكن المهاجم من الدخول أو يتوقف الخادم عن العمل. تستطيع حماية الخادم باتّباع بعض الخطوات.

لا تستخدم admin كاسم للمستخدم

تفترض غالبية الهجمات أن المستخدمين يستعملون admin كاسم مستخدم كون الإصدارات الأولى من ووردبريس كانت تستخدم هذا الاسم افتراضيًا لحساب المدير، لذا إن كنت لا تزال تستخدم اسم المستخدم هذا عليك إنشاء حساب جديد ونقل جميع المنشورات إلى الحساب الجديد ثم تغيير الحساب القديم ذو اسم المستخدم admin لرتبة مشترك أو حذف الحساب نهائيًا.

تستطيع أيضًا استخدام الإضافة Change Username لتغيير اسم المستخدم الخاص بحسابك.

كلمات مرور قوية

الهدف من استخدام كلمة المرور هو أن تكون صعبة التخمين وبالتالي يصعب على هجوم القوى الغاشمة النجاح في توقعها. تستطيع استخدام العديد من مولدات كلمات المرور التلقائية لإنشاء كلمة مرور آمنة.

يوفر ووردبريس مقياس لقوة كلمة المرور يُعرض عند تغيير كلمة المرور في ووردبريس، لذا استخدمه لاختيار كلمة مرور قوية يصعب تخمينها. تستطيع استخدام إضافة Force Strong Password لإجبار المستخدمين على اختيار كلمات مرور قوية.

أمور يجب عليك تجنبها عند اختيار كلمة المرور:

  • أي تشكيل باستخدام اسمك الحقيقي أو اسم موقعك أو الشركة التي تعمل بها أو اسم المستخدم.
  • كلمة من القاموس في أي لغة كانت
  • كلمة مرور قصيرة.
  • أي كلمة مرور مكونة فقط من الأحرف أو الأرقام (يُفضل استخدام مزيج من الاثنين)

إن كلمة المرور القوية ليست ضرورية فقط لحماية محتوى المدونة حيث أن المخترق الذي يتمكن من الوصول لحساب مدير موقعك يستطيع تثبيت شيفرة برمجية خبيثة يُمكن أن تُعرض خادمك بأكمله للخطر.

تستطيع تفعيل الاستيثاق الثنائي لزيادة قوة كلمة المرور ورفع سوية أمن مدونتك.

الإضافات

يوجد العديد من الإضافات التي تحد من محاولات تسجيل الدخول ضمن موقعك، ويوجد أيضًا العديد من الإضافات التي تستطيع استخدامها لحجب الزوار من الوصول لصفحة wp-admin.

حماية الخادم من هجوم القوة الغاشمة

إن قررت حجب صفحة wp-login.php أو wp-admin عن الزوار سوف تحصل على الخطأ 404 أو 401 عند محاولة الوصول لهذه الصفحات، ولتجنب ذلك سوف تحتاج إضافة السطر التالي لملف ‎.htaccess.

ErrorDocument 401 default

تستطيع تحويل الخطأ 401 إلى الصفحة 401.html لكن الهدف ليس تحويله إلى ووردبريس، كما تستطيع استخدام مسار error_page في خادم Nginx لكن يجب عليك استخدام رابط مُجرد.

error_page  401  http://example.com/forbidden.html;

وتستطيع أيضًا استخدام العنصر httpErrors في خادم IIS ضمن ملف web.config وذلك بضبط "errorMode="custom.

<httpErrors errorMode="Custom">
<error statusCode="401"
subStatusCode="2"
prefixLanguageFilePath=""
path="401.htm"
responseMode="File" />
</httpErrors>

احم ملف wp-login.php باستخدام كلمة مرور

تُضيف حماية ملف wp-login.php ومجلد wp-admin طبقة إضافية للخادم، ولأن حماية مجلد wp-admin باستخدام كلمة المرور يُمكن أن يُعطل أي إضافة تستخدم ajax فإن حماية ملف wp-login.php كاف.

عليك إنشاء ملف ‎.htpasswd لحماية ملف wp-login.php بكلمة مرور، وتملك العديد من الاستضافات أدوات لعمل هذا لكن إن كنت تريد تنفيذ هذه الخطوة يدويًا تستطيع استخدام htpasswd، وكما هو حال ملف ‎.htaccess فإن ملف .htpasswd هو ملف بدون اسم.

تستطيع وضع هذا الملف خارج مجلد الويب العام الخاص بالاستضافة (أي خارج مجلد /public_html/ أو /domain.com/) أو تستطيع وضعه في نفس المجلد لكن عندها عليك إجراء خطوات أمنية إضافية ضمن ملف ‎.htaccess.

يجب عليك إخبار ملف ‎.htaccess بمكان رفعك للملف ‎.htpasswd وعلى فرض أنك رفعته للمسار الرئيسي للمستخدم وكان اسم المستخدم هو mysecretuser عندها عليك إضافة ما يلي إلى ملف ‎.htaccess.

# Stop Apache from serving .ht* files
<Files ~ "^\.ht">
 Order allow,deny
 Deny from all
</Files>
# Protect wp-login.php
<Files wp-login.php>
 AuthUserFile ~/.htpasswd
 AuthName "Private access"
 AuthType Basic
require user mysecretuser
</Files>

يعتمد الموقع الحقيقي لملف AuthUserFile على الخادم وتتغير 'require user' حسب اسم المستخدم الذي تختاره.

إن كنت تستخدم خادم Nginx تستطيع حماية ملف wp-login.php بكلمة مرور باستخدام الوحدة HttpAuthBasicModule. يجب أن تكون هذه الوحدة ضمن وحدات خادمك.

location /wp-login.php {
   auth_basic "Administrator Login";
   auth_basic_user_file .htpasswd;
}

يعتمد مسار اسم الملف على مسار ملف تهيئة خادم nginx وهو nginx.conf حيث يجب أن يتضمن هذا الملف التنسيق التالي:

user:pass
 user2:pass2
 user3:pass3

لسوء الحظ لا يوجد طريقة سهلة لضبط كلمة مرور لحماية ملف wp-login.php في خادم ويندوز IIS. إن كنت تستخدم معالج ‎.htaccess مثل Helicon Ape تستطيع استخدام مثال ملف ‎.htaccess المذكور سابقًا وإلا سوف تُضطر للطلب من مزود الاستضافة ضبط عملية التحقق الأساسية.

يجب تشفير جميع كلمات المرور باستخدام الدالة crypt(3)‎ كما تستطيع استخدام المولد htpasswd لتشفير كلمات المرور.

تقييد الوصول لملف wp-login.php باستخدام عنوان IP

إن كنت الشخص الوحيد الذي يلج لمنطقة المدير وتملك عنوان IP ثابت تستطيع حجب الوصول لملف wp-login.php (ومجلد wp-admin) لأي شخص غيرك من خلال ملف ‎.htaccess أو web.conf، ويُشار لهذا بالقائمة البيضاء لعنوان IP.

اقتباس

ملاحظة: عليك الانتباه أن مزود الخدمة لديك أو حاسوبك ربما يُغير عنوان IP باستمرار ويُدعى هذا بعنونة IP الديناميكية بدلا من عنونة IP الثابتة. تستطيع الاتصال بمزود الخدمة للحصول على عنوان IP ثابت أو تغيير إعدادات الحاسوب التي تُغير عنوان IP لتتمكن من استخدام الميزة السابقة.

يجب عليك في جميع الأمثلة استبدال العنوان 203.0.113.15 بعنوان IP خاصتك، ويُمكن لمزود خدمة الإنترنت خاصتك مُساعدتك في تأسيس عنوان IP التابع لك أو تستطيع استخدام خدمة ويب مثل What Is My IP.

يوجد أمثلة عن استخدام عدة عناوين IP أيضًا وهي مناسبة في حال استخدمت أكثر من مزود خدمة إنترنت واحد أو إن كنت تملك مجموعة عناوين IP صغيرة أو إن كان هناك أكثر من شخص يُسمح له بالوصول للوحة تحكم الموقع.

أنشئ ملف باستخدام محرر نص صريح وسمه ‎.htaccess وأضف ما يلي:

# Block access to wp-login.php.
<Files wp-login.php>
 order deny,allow
 allow from 203.0.113.15
 deny from all
</Files>

تستطيع إضافة المزيد من عناوين IP المسموح لها الوصول للوحة التحكم باستخدام:

# Block access to wp-login.php.
<Files wp-login.php>
 order deny,allow
 allow from 203.0.113.15
 allow from 203.0.113.16
 allow from 203.0.113.17
 deny from all
</Files>

إن كنت تستخدم Apache 2.4 ووحدة modauthzhost عندها عليك استخدام صيغة مُختلفة قليلًا:

# Block access to wp-login.php.
<Files wp-login.php>
 Require ip 203.0.113.15
</Files>

إن أردت إضافة أكثر من عنوان IP واحد عليك استخدام:

# Block access to wp-login.php.
<Files wp-login.php>
 Require ip 203.0.113.15 203.0.113.16 203.0.113.17
 # or for the entire network:
 # Require ip 203.0.113.0/255.255.255.0
</Files>

تستطيع من أجل Nginx استخدام كتلة الموقع ضمن كتلة خادمك والتي تعمل مثل مثال Apache السابق.

error_page  403  http://example.com/forbidden.html;
location /wp-login.php {
  allow   203.0.113.15
  # or for the entire network:
  # allow   203.0.113.0/24;
  deny    all;
}

لاحظ أن ترتيب deny/allow مهم جدًا وربما تظن أن تستطيع التبديل بينهما وكل شيء سوف يعمل لكن في الحقيقة فإن تغيير ترتيب المثال السابق سوف ينتج عنه منع وصول جميع العناوين.

تستطيع في خادم IIS استخدام ملف web.config لتقييد عناوين IP التي تملك وصولًأ، والأفضل أن تُضيفها في مسار <location إضافي.

<location path="wp-admin">
 <system.webServer>
   <security>
     <ipSecurity allowUnlisted="false"> <!-- this rule denies all IP addresses, except the ones mentioned below -->
       <!-- 203.0.113.x is a special test range for IP addresses -->
       <!-- replace them with your own -->
       <add ipAddress="203.0.113.15" allowed="true" />
       <add ipAddress="203.0.113.16" allowed="true" />
     </ipSecurity>
   </security>
 </system.webServer>
</location>

رفض وصول الطلبات بدون مرجعية

تستطيع منع أي شخص لم يُرسل نموذج تسجيل الدخول الوصول له وهذا امتداد لمواجهة التعليقات المزعجة:

# Stop spam attack logins and comments
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_METHOD} POST
    RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
    RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
    RewriteCond %{HTTP_USER_AGENT} ^$
    RewriteRule (.*) http://%{REMOTE_ADDR}/$1 [R=301,L]
</ifModule>

رفض وصول الطلبات بدون مرجعية في Nginx:

location ~* (wp-comments-posts|wp-login)\.php$ {
      if ($http_referer !~ ^(http://example.com) ) {
           return 405;
      }
}

رفض وصول الطلبات بدون مرجعية في Windows Server IIS:

<rule name="block_comments_without_referer" patternSyntax="ECMAScript" stopProcessing="true">
<match url="(.*)" ignoreCase="true" />
 <conditions logicalGrouping="MatchAll">
   <add input="{URL}" pattern="^/(wp-comments-post|wp-login)\.php" negate="false"/>
   <add input="{HTTP_REFERER}" pattern=".*example\.com.*" negate="true" />
   <add input="{HTTP_METHOD}" pattern="POST" />  </conditions>
 <action type="CustomResponse" statusCode="403" statusReason="Forbidden: Access is denied." statusDescription="No comments without referrer!" />
</rule>

استبدل example.com باسم نطاقك فإن كنت تستخدم ووردبريس متعدد المواقع بأسماء نطاقات مرتبطة به عندها عليك تغيير example.com إلى (example.com|example.net|example4.com)، وإن كنت تستخدم تعليقات Jetpack لا تنسى إضافة jetpack.wordpress.com/ كمرجع:

(example.com|jetpack\.wordpress\com)

ModSecurity

تستطيع اتّباع النصائح في إيقاف عمليات تسجيل دخول هجوم القوى الغاشمة في ووردبريس إن كنت تستخدم ModSecurity، لكن هذا يتطلب وصولًا على مستوى المدير للخادم ويُمكن أن تحتاج مساعدة من فريق دعم الاستضافة.

إن كنت تستخدم ModSecurity 2.7.3 فتستطيع إضافة القواعد ضمن ملف ‎.htaccess.

اطلع على ْقواعد ModSecurity لتخفيض هجمات القوى الغاشمة.

Fail2Ban

عبارة عن عملية بايثون تعمل في الخلفية تتحقق من ملفات السجلات التي يولدها Apache (أو SSH مثلًأ) وفي بعض الحالات يُمكن أن تُضيف قاعدة للجدار الناري. تستخدم هذه العملية مُرشح يتضمن عبارة منطقية وعند تفعيلها 5 مرات مثلًا خلال 5 دقائق تستطيع حجب عنوان IP لمدة 60 دقيقة (أو أي أرقام أخرى تختارها في المثال السابق). يتطلب تثبيت وضبط Fail2Ban صلاحيات المستخدم الجذر root.

Blocklists

إن معظم هجمات القوى الغاشمة تنطلق من روسيا وكازاخستان وأوكرانيا لذلك تستطيع حجب عناوين IP التابعة لهذه البلدان. يتوفر على الإنترنت قوائم حجب تستطيع تحميلها وباستخدام شيفرة على Shell تستطيع تحميل قواعد الحجب مع iptables.

عليك الانتباه إلى أنك تحجب مستخدمين شرعيين مع المهاجمين لذلك عليك دعم وشرح هذا القرار لعملائك. يوجد إلى جانب قوائم الحجب حسب الدولة قوائم تتضمن عناوين IP مُرسلي رسائل البريد المزعج أو العشوائي. تستطيع استخدام هذه القوائم لحجبهم ضمن iptables. يُستحسن تحديث هذه القوائم دوريًا كما يتطلب تثبيت وضبط قوائم الحجب وiptables صلاحيات root.

خدمات الوكيل/ السحابة

تستطيع خدمات مثل CloudFlare وSucuri CloudProxy مُساعدتك على تخفيض هذه الهجمات من خلال حجب عناوين IP قبل وصولها لخادمك.

اطلع على أداة السكين السويسرية لحماية ووردبريس وهي أداة مجانية مفتوحة المصدر تستطيع مساعدتك على حماية wp-login.php و/wp-admin/ لكن ليس /wp-admin/admin-ajax.php بضغطة زر واحدة والكثير غير ذلك.

ترجمة -وبتصرف- للمقال Brute Force Attacks من موقع ووردبريس.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...