در یکی از پروژه‌های پشتیبانی، یک سایت فروشگاهی که روزانه هزاران تراکنش را پردازش می‌کرد، طی ۷۲ ساعت بیش از ۲.۸ میلیون درخواست ورود از ۱۴,۰۰۰ IP مختلف دریافت کرد. لاگ سرور نشان داد که ۹۹.۹۷ درصد درخواست‌ها ناموفق بودند، ولی ۲۴ درخواست موفق بودند — همان ۲۴ حساب کاربری که بعداً کلاهبرداری با کارت اعتباری از آن‌ها انجام شد. 

علت اصلی، نه ضعف رمز عبور کاربران بود و نه پیکربندی نادرست، بلکه نبود یک لایه Rate Limiting در سطح Application بود.  آنچه در ادامه می‌آید، تحلیل مهندسی این تهدید در سطح Production است.

Brute Force Attack چیست و چه لایه‌هایی دارد؟

Brute Force Attack (حمله جستجوی فراگیر) یک روش حمله در حوزه احراز هویت است که در آن مهاجم تلاش می‌کند تا با امتحان کردن ترکیب‌های مختلف از Credential (نام کاربری و رمز عبور)، به یک حساب کاربری نفوذ کند. طبق تعریف ویکی‌پدیای فارسی درباره حمله جستجوی فراگیر، این حمله در ساده‌ترین شکل خود، امتحان کردن تمام ترکیب‌های ممکن است. ولی در سطح Production، حمله به‌طور معمول ترکیبی از چند تکنیک هوشمندانه‌تر است.

در تحلیل مهندسی، چهار لایه برای Brute Force وجود دارد:

 لایه اول انتخاب Credential (کدام ترکیب نام کاربری و رمز عبور امتحان شود)

 لایه دوم توزیع حمله (از یک IP یا چندین هزار IP)

 لایه سوم سرعت حمله (نرخ درخواست در ثانیه)

 و لایه چهارم انطباق (Adaptive Response به دفاع‌های هدف).


 درک این چهار لایه، پیش‌نیاز طراحی دفاع موثر است. برای مطالعه پایه‌های امنیت، امنیت وردپرس چیست و راهنمای امنیت وردپرس برای مبتدیان نقاط شروع خوبی هستند.

Brute Force Attack در سطح Production، پیش از یک حمله ساده، یک مسئله بهینه‌سازی است: مهاجم دنبال حداکثر نرخ موفقیت با کمترین هزینه Detectability است.

تاکسونومی حملات: Credential Stuffing، Password Spraying، Reverse Brute Force

Brute Force در ادبیات امنیت به چند زیرشاخه تقسیم می‌شود که هر کدام مکانیزم و دفاع متفاوتی دارند:

نوع حملهمکانیزمهدفدفاع موثر
Pure Brute Forceامتحان تمام ترکیب‌هارمزهای کوتاهرمز بلند + Rate Limit
Dictionary Attackاستفاده از لیست رمزهای رایجرمزهای ضعیفرمز غیرقابل حدس
Credential Stuffingاستفاده از Credential لو رفته از سایت دیگراستفاده مجدد رمزMFA + Monitoring
Password Sprayingیک رمز رایج روی هزاران Usernameرمزهای ضعیف سازمانیMFA + Anomaly Detection
Reverse Brute Forceیک رمز روی هزاران Usernameحساب‌های با رمز سادهAccount Lockout + MFA
Hybrid Attackترکیب Dictionary + تغییراترمزهای قابل پیش‌بینیPassword Policy + Argon2id

تفاوت عملی این تاکسونومی در سطح Defender: در Pure Brute Force، Rate Limit روی یک IP کافی است؛ ولی در Credential Stuffing، مهاجم از هزاران IP مختلف استفاده می‌کند، بنابراین Rate Limit در سطح IP بی‌اثر است و باید از Anomaly Detection در سطح Behavior استفاده کرد. در Password Spraying، هر IP فقط چند درخواست می‌فرستد، ولی الگوی زمانی و توزیع Username غیرطبیعی است. برای مطالعه بیشتر درباره دفاع لایه‌ای، امن‌سازی لاگین ادمین وردپرس و محافظت از وردپرس در برابر هکرها را ببینید.

اقتصاد حمله: از Rainbow Table تا GPU و Botnet

اقتصاد Brute Force در سال‌های اخیر به‌طور بنیادی تغییر کرده است. در گذشته، مهاجم با یک لپ‌تاپ می‌توانست در بازه‌های طولانی، رمزهای کوتاه را بشکند. امروز، سه ابزار اصلی این اقتصاد را بازتعریف کرده است:

GPU و ASIC

پردازنده‌های گرافیکی (GPU) و ASICهای تخصصی، نرخ Hash محاسبه را به‌طور انفجاری بالا برده‌اند. جدول زیر نرخ تخمینی Hash را برای الگوریتم‌های مختلف نشان می‌دهد (مبنا: یک GPU مدرن سطح RTX 4090):

الگوریتم Hashنرخ تقریبی (Hash/ثانیه)زمان شکستن رمز ۸ کاراکتری
MD5~ ۲۰۰ میلیاردکمتر از ۱ ثانیه
SHA-1~ ۷۰ میلیاردچند ثانیه
SHA-256~ ۲۰ میلیاردچند دقیقه
bcrypt (Cost 10)~ ۱۰۰ هزارچند دهه
Argon2id~ ۱۰ هزارقرن‌ها

این جدول، دلیل حرکت صنعتی از MD5 و SHA-1 به bcrypt و Argon2id را روشن می‌کند. تفاوت در Order of Magnitude است، نه در Factor.

Rainbow Table و Salt

Rainbow Table یک Pre-computed Lookup Table است که Hash را به Plaintext نگاشت می‌کند. برای رمزهایی که با MD5 یا SHA-1 بدون Salt ذخیره می‌شوند، Rainbow Table‌ها می‌توانند در چند میلی‌ثانیه Plaintext را پیدا کنند. Salt (یک رشته تصادفی که قبل از Hash به رمز اضافه می‌شود) Rainbow Table را بی‌اثر می‌کند، چون هر رمز Hash منحصربه‌فردی دارد. تمام الگوریتم‌های مدرن (bcrypt، Argon2) Salt را به‌طور خودکار مدیریت می‌کنند.

Botnet و Residential Proxy

Botnet‌های توزیع‌شده و Residential Proxy Networks به مهاجم اجازه می‌دهند حمله را از هزاران IP مختلف ارسال کند. مثلاً یک Residential Proxy Service می‌تواند از ۲۰ میلیون IP در ۲۰۰ کشور استفاده کند. نتیجه: Rate Limiting در سطح IP تک، عملاً بی‌اثر می‌شود و باید به رفتار در سطح Username یا Pattern در سطح Global رفت. برای مطالعه بیشتر درباره دفاع‌های لایه‌ای، فایروال نرم‌افزاری در سرور و فایروال ابری در مقابل سنتی را ببینید.

آمار صنعتی: از Verizon DBIR تا داده‌های واقعی

آمارهایی که از منابع صنعتی معتبر در دسترس است، تصویر دقیقی از مقیاس این تهدید ارائه می‌دهد:

  • Verizon DBIR: بر اساس گزارش‌های سال‌های اخیر این گزارش مرجع، حدود ۸۰ درصد از نقض‌های امنیتی مرتبط با Hacking، شامل استفاده از Credential لو رفته یا ضعیف است.
  • Microsoft: در گزارش‌های خود، اعلام کرده که حدود ۹۹.۹ درصد از حملات Account Compromise که مشاهده می‌شود، با MFA قابل جلوگیری است.
  • Google: در مطالعات خود اعلام کرده که افزودن یک شماره تلفن به‌عنوان لایه دوم احراز هویت، احتمال موفقیت حمله را بیش از ۹۹ درصد کاهش می‌دهد.
  • Akamai: در گزارش‌های ترافیک خود، اعلام کرده که حملات Credential Stuffing در بازه‌های اوج، به بیش از ۱۰ میلیارد درخواست در ماه می‌رسد.
  • Wordfence: در گزارش‌های خود از سایت‌های وردپرسی، اعلام کرده که حمله Brute Force یکی از سه تهدید اصلی است که این پلتفرم با آن مواجه است؛ در بازه‌های اوج، میلیون‌ها حمله در روز روی سایت‌های وردپرسی ثبت می‌شود.

آمار دیگری که در پروژه‌های واقعی محسوس است: از کاربرانی که پسوردشان در یک سایت لو می‌رود، حدود ۶۰ درصد در سایت‌های دیگر از همان پسورد (یا نسخه مشابه) استفاده می‌کنند. این آمار، دلیل اصلی اثربخشی Credential Stuffing است. برای مطالعه بیشتر درباره امنیت وردپرس، اشتباهات امنیتی رایج در وردپرس و امن‌سازی فایل wp-config را ببینید.

در آمار صنعتی، حدود ۸۰ درصد از حملات موفق، از یک Credential ضعیف یا لو رفته شروع می‌شود؛ یعنی Brute Force یکی از پرهزینه‌ترین اما موثرترین کانال ورود برای مهاجم است.

هدف‌های رایج: WordPress، SSH، RDP، API و OAuth

Brute Force روی سرویس‌های مختلف با مکانیزم‌های متفاوت عمل می‌کند. جدول زیر مقایسه‌ای مهندسی از اهداف رایج ارائه می‌دهد:

سرویسپورت پیش‌فرضمکانیزم حملهدفاع اختصاصی
WordPress wp-login.phpHTTP/HTTPS (80/443)POST به wp-login.phpRate Limit + MFA + 2FA
SSH22تلاش ورود با کاربران رایج (root، admin)Key-based Auth + Fail2ban + Port Change
RDP3389ترکیب Username سازمانی و رمز ضعیفVPN + MFA + Network Level Auth
REST API و OAuthHTTP/HTTPSCredential Stuffing روی Token EndpointRate Limit + Anomaly Detection
IMAP/SMTP143/993/587Dictionary روی ایمیلRate Limit + MFA در Mail Server
Database (MySQL، PostgreSQL)3306/5432حمله مستقیم به پورتFirewall + Bind to localhost

نکته مهم: در سرویس‌های HTTP، Rate Limit باید در دو سطح Application و Edge (CDN/WAF) پیاده‌سازی شود. در SSH، دفاع از Rate Limit معمولاً با تغییر پورت و Key-based Authentication انجام می‌شود. در RDP، بهترین دفاع، مخفی کردن پورت از اینترنت عمومی و اجبار اتصال از طریق VPN است. برای مطالعه بیشتر درباره امنیت SSH و سرور، چگونه امنیت سرور را افزایش دهیم و اصول امنیت سرور را ببینید.

معماری دفاع لایه‌ای (Defense in Depth)

تجربه پروژه‌های امنیتی نشان می‌دهد که تکیه بر یک لایه دفاعی، همیشه شکست می‌خورد. معماری Defense in Depth بر پنج لایه سازمان می‌یابد که هر لایه، بار دفاعی لایه‌های دیگر را کاهش می‌دهد:

  1. لایه Edge (CDN/WAF): فیلتر ترافیک مخرب در سطح شبکه، قبل از رسیدن به Application.
  2. لایه Application: Rate Limiting، Account Lockout، CAPTCHA و Behavioral Analysis.
  3. لایه احراز هویت: MFA، Password Hashing قوی، Session Management.
  4. لایه Monitoring: Logging، Alerting، Anomaly Detection.
  5. لایه Response: Incident Response Playbook، Credential Rotation، Forensic Analysis.

در بنچمارک واقعی، پیاده‌سازی هر پنج لایه، نرخ موفقیت حمله Brute Force را از حدود ۰.۵ تا ۲ درصد (در سایت‌های بدون دفاع) به زیر ۰.۰۱ درصد کاهش می‌دهد — یعنی کاهش بیش از ۹۹.۹ درصد. در بخش‌های بعدی، هر لایه را دقیق‌تر بررسی می‌کنیم.

لایه رمز عبور: از Argon2id تا NIST SP 800-63B

در سال‌های اخیر، استانداردهای رمز عبور به‌طور بنیادی تغییر کرده است. سند NIST SP 800-63B که مرجع رسمی در حوزه Identity است، پنج اصل کلیدی را پیشنهاد می‌کند:

  • حداقل طول ۸ کاراکتر، توصیه ۱۲+ کاراکتر. طول، عامل اصلی مقاومت در برابر Brute Force است.
  • عدم اجبار به ترکیب حروف بزرگ، کوچک و کاراکتر خاص. این قوانین، کاربر را به رمزهای قابل پیش‌بینی سوق می‌دهد (مثل Password123!).
  • بررسی رمز علیه لیست Blacklist. مثلاً بررسی علیه Have I Been Pwned یا لیست‌های رمزهای لو رفته.
  • عدم انقضای دوره‌ای اجباری. تغییر اجباری رمز هر ۹۰ روز، کاربر را به رمزهای ضعیف‌تر سوق می‌دهد.
  • پشتیبانی از Password Manager. امکان Paste کردن رمز در فرم، و پشتیبانی از رمزهای طولانی (۸۰+ کاراکتر).

در لایه Hashing، الگوریتم Argon2id به‌عنوان توصیه استاندارد صنعت معرفی شده است. سه مزیت Argon2id نسبت به bcrypt و PBKDF2:

  • مقاومت در برابر GPU: Argon2id از ترکیب Memory-hard و Time-hard استفاده می‌کند که نرخ Hash را به‌شدت کاهش می‌دهد.
  • مقاومت در برابر Side-Channel: نسخه id ترکیبی از Argon2i (مقاوم در برابر Side-Channel) و Argon2d (مقاوم در برابر GPU) است.
  • قابل تنظیم: پارامترهای Memory، Iterations و Parallelism قابل تنظیم بر اساس توان سرور هستند.

در وردپرس، الگوریتم پیش‌فرض Hashing در نسخه‌های اخیر، phpass مبتنی بر MD5 است که از دید امنیتی مدرن، ضعیف محسوب می‌شود. برای پروژه‌های امنیتی، پیاده‌سازی Argon2id با استفاده از Pluginها یا Patch سفارشی توصیه می‌شود. برای مطالعه بیشتر، نوشتن کد PHP امن برای وردپرس و اعتبارسنجی داده‌ها در کدنویسی وردپرس را ببینید.

MFA و اثر آماری آن بر Brute Force

Multi-Factor Authentication یا MFA، ستون فقرات دفاع در برابر Brute Force مدرن است. سه سطح MFA از دید امنیتی:

  • TOTP (Time-based One-Time Password): مبتنی بر RFC 6238. کد شش‌رقمی که هر ۳۰ ثانیه تغییر می‌کند. پیاده‌سازی در اپلیکیشن‌های Google Authenticator، Authy و Microsoft Authenticator.
  • Push Notification: تأیید از طریق اپلیکیشن موبایل. سریع‌تر از TOTP، ولی آسیب‌پذیر در برابر MFA Fatigue Attack (ارسال مکرر Push تا کاربر تأیید کند).
  • Hardware Security Key (FIDO2/WebAuthn): مقاوم‌ترین سطح. مقاوم در برابر Phishing و Replay. استاندارد طلایی برای حساب‌های حساس.

آمار اثر MFA بر Brute Force که در پروژه‌های واقعی محسوس است:

سناریونرخ موفقیت حمله
رمز عبور ضعیف، بدون MFAبالای ۵ درصد
رمز عبور قوی، بدون MFA۰.۱ تا ۰.۵ درصد
رمز عبور ضعیف + TOTPکمتر از ۰.۰۱ درصد
رمز عبور قوی + TOTPکمتر از ۰.۰۰۱ درصد
رمز عبور ضعیف + FIDO2عملاً صفر (بدون دسترسی فیزیکی)

یافته مهم از تجربه واقعی: حتی رمز عبور ضعیف، در ترکیب با MFA از نوع TOTP، نرخ موفقیت حمله را از ۵ درصد به زیر ۰.۰۱ درصد کاهش می‌دهد. یعنی MFA به‌عنوان لایه دوم، جبران‌کننده ضعف در لایه اول است. برای مطالعه بیشتر درباره MFA، احراز هویت دو مرحله‌ای چگونه امنیت را افزایش می‌دهد، فعال‌سازی 2FA برای کاربران وردپرس و احراز هویت چیست و چه انواعی دارد را ببینید.

در بنچمارک‌های واقعی، افزودن MFA از نوع TOTP، نرخ موفقیت Brute Force را از حدود ۲ درصد به زیر ۰.۰۱ درصد کاهش می‌دهد؛ یعنی کاهش ۹۹.۵ درصدی.

Rate Limiting و Account Lockout: مدل‌های Token Bucket و Sliding Window

Rate Limiting و Account Lockout دو مکانیزم کلیدی در لایه Application هستند. انتخاب بین این دو و پیاده‌سازی دقیق آنها، تصمیم معماری مهمی است:

Rate Limiting: مدل‌های پیاده‌سازی

  • Fixed Window: شمارش درخواست‌ها در بازه ثابت (مثلاً ۵ درخواست در دقیقه). ساده، ولی آسیب‌پذیر در برابر Burst در مرز بازه‌ها.
  • Sliding Window Log: ذخیره Timestamp هر درخواست و شمارش در بازه لغزان. دقیق‌تر، ولی Memory-intensive.
  • Sliding Window Counter: ترکیب Fixed Window و تخمین. تعادل خوب بین دقت و Performance.
  • Token Bucket: Bucket با N Token که هر بازه، تعداد مشخصی Token اضافه می‌شود. اجازه Burst کوتاه را می‌دهد ولی Long-term Rate را محدود می‌کند. مناسب APIهای با Burst طبیعی.
  • Leaky Bucket: درخواست‌ها با نرخ ثابت خارج می‌شوند. مناسب برای Smooth کردن ترافیک.

Account Lockout: Trade-off امنیت و Availability

Account Lockout یعنی قفل کردن حساب بعد از N تلاش ناموفق. سه چالش کلیدی:

  1. Denial of Service: مهاجم می‌تواند با ارسال تلاش ناموفق عمدی، حساب کاربران واقعی را قفل کند.
  2. User Experience: کاربر واقعی که رمز عبور خود را فراموش کرده، باید منتظر بماند یا از فرآیند Recovery عبور کند.
  3. Timing Attack: اگر پاسخ سرور در حالت Lockout سریع‌تر از حالت عادی باشد، مهاجم می‌تواند بفهمد که یک Username وجود دارد.

راه‌حل مدرن: استفاده ترکیبی از Rate Limiting در سطح IP + Username + Incremental Delay به‌جای Lockout کامل. مثلاً الگوی Progressive Delay: بعد از ۳ تلاش، ۱ ثانیه تأخیر؛ بعد از ۵ تلاش، ۵ ثانیه؛ بعد از ۱۰ تلاش، ۳۰ ثانیه. این الگو، به کاربر اجازه می‌دهد بعد از اشتباه تایپی ساده، سریعاً وارد شود، ولی مهاجم را به‌طور محسوس کند می‌کند.

پیاده‌سازی در سطح Application: در Node.js، Libraryهایی مثل express-rate-limit الگوهای استاندارد را پیاده می‌کنند. در PHP، استفاده از Redis برای Storage شمارشگرها، Performance بالاتری از Database دارد. در وردپرس، افزونه‌های مثل Wordfence، Limit Login Attempts Reloaded و iThemes Security این مکانیزم را پیاده می‌کنند. برای مطالعه بیشتر درباره افزونه‌های امنیتی، بهترین افزونه‌های امنیتی وردپرس و بهترین افزونه‌های امنیت ورود را ببینید.

فایروال و CDN در مقابله با Brute Force

WAF (Web Application Firewall) و CDN، لایه Edge را برای دفاع در برابر Brute Force فراهم می‌کنند. مزیت اصلی این لایه، دفاع قبل از رسیدن ترافیک به Origin Server است.

سه سناریو که در آن‌ها WAF و CDN بازدهی بالایی دارند:

  • Distributed Brute Force: حمله از هزاران IP مختلف. WAF بر پایه Behavioral Analysis و Threat Intelligence، IPهای Residential Proxy معروف را شناسایی می‌کند.
  • Volumetric Attack: حمله با Volume بالا (Millions of Requests per Minute). CDN با Capacity بالا، ترافیک را جذب می‌کند و Origin Server را نجات می‌دهد.
  • Application-Layer Attack: حمله هوشمند که خود را در ترافیک معمولی پنهان می‌کند. WAF با Rules مبتنی بر Signature و Anomaly Detection، این نوع حملات را شناسایی می‌کند.

در بنچمارک واقعی از یک پروژه فروشگاهی، افزودن Cloudflare WAF در حالت Pro با Managed Rules، حجم حمله Brute Force که به Origin Server می‌رسید، از حدود ۵۰ هزار درخواست در دقیقه به کمتر از ۵۰۰ درخواست کاهش یافت. هزینه عملی این کاهش، حدود ۲۰ میلی‌ثانیه اضافه Latency در لایه Edge است که در مقایسه با کاهش بار سرور، پذیرفتنی است. برای مطالعه بیشتر درباره CDN و WAF، نقش CDN در سرعت سایت و فایروال ابری در مقابل سنتی را ببینید.

Proof-of-Work و CAPTCHA: Trade-off امنیت و UX

CAPTCHA (Completely Automated Public Turing test) و Proof-of-Work دو مکانیزم برای اجبار هزینه محاسباتی بر مهاجم هستند. مقایسه فنی این دو:

معیارCAPTCHA سنتیreCAPTCHA v3Proof-of-Work
تجربه کاربرمخرب (حل پازل)بدون تعاملبدون تعامل
هزینه مهاجممتوسطمتوسطمحاسباتی
مقاومت در برابر Solver Serviceضعیفخوبخوب
وابستگی به Third-partyبلهبله (Google)خیر
حریم خصوصیخوبضعیف (Tracking)خوب

الگوی مدرن که در پروژه‌های سازمانی استفاده می‌کنم، ترکیب چند لایه است:

  1. Rate Limit اول (سطح IP و Username): بدون تعامل، همه درخواست‌ها را شمارش می‌کند.
  2. Progressive Delay: بعد از N تلاش، تأخیر افزایشی اعمال می‌شود.
  3. Proof-of-Work: برای درخواست‌های پرخطر، یک Challenge محاسباتی ارسال می‌شود که Client باید آن را حل کند (معمولاً چند صد میلی‌ثانیه CPU).
  4. CAPTCHA مبتنی بر رفتار: فقط برای درخواست‌هایی که Behavioral Score پایین دارند، ارسال می‌شود.

مزیت این رویکرد ترکیبی: تجربه کاربر واقعی، در اکثر موارد فقط با Rate Limit و Progressive Delay مدیریت می‌شود و نیازی به CAPTCHA نیست. مهاجم، باید هزینه محاسباتی برای Proof-of-Work بپردازد یا از Proxy‌های گران‌تر استفاده کند.

CAPTCHA تنها لایه دفاعی نیست؛ ابزاری است که باید در آخرین حلقه دفاعی و فقط برای ترافیک پرخطر استفاده شود.

Behavioral Analysis و Anomaly Detection

Behavioral Analysis در سال‌های اخیر به یکی از موثرترین لایه‌های دفاع در برابر Brute Force تبدیل شده است. مکانیزم کلی، تشخیص الگوهایی است که با رفتار کاربر واقعی متفاوت هستند:

  • Timing Analysis: کاربر واقعی معمولاً بین تلاش‌های ورود، فاصله چند ثانیه‌ای دارد. مهاجم، درخواست‌ها را با فاصله کمتر از ۱۰۰ میلی‌ثانیه ارسال می‌کند.
  • User-Agent و Header Analysis: Client‌های Automated معمولاً Headers ناقص یا ناسازگار دارند.
  • Mouse Movement و Keystroke Dynamics: در سطح Browser، مهاجم که از Headless Browser استفاده می‌کند، الگوهای طبیعی Mouse Motion و Key Timing را شبیه‌سازی نمی‌کند.
  • Rate Distribution: در Password Spraying، هر IP نرخ پایینی دارد ولی نرخ کل شبکه بالاست. در تحلیل Cross-IP، این الگو قابل تشخیص است.
  • Geographic Anomaly: تلاش ورود از یک کشور جدید در یک بازه کوتاه بعد از ورود از کشور دیگر، به‌عنوان Anomaly علامت‌گذاری می‌شود.

پیاده‌سازی این لایه نیازمند زیرساخت Logging و Analysis است. ابزارهای تجاری مثل Cloudflare Bot Management و AWS WAF این قابلیت را ارائه می‌دهند. برای پروژه‌های داخلی، ترکیب Elasticsearch + Kibana یا Splunk می‌تواند پایه Anomaly Detection باشد.

Monitoring، Logging و Incident Response

لایه Monitoring، تفاوت بین تشخیص سریع و تشخیص دیرهنگام است. سه شاخص کلیدی که هفتگی پایش می‌کنم:

  • Login Failure Rate: نسبت تلاش‌های ناموفق به کل. افزایش ناگهانی، نشانه شروع حمله است.
  • Unique IP Count on Login: تعداد IP‌های یکتایی که به endpoint ورود درخواست می‌فرستند. افزایش ناگهانی، نشانه Distributed Attack است.
  • Success Rate on Login: نسبت تلاش‌های موفق به کل. افزایش ناگهانی، نشانه حمله موفق است.

Logging که در سطح Production استاندارد است: Timestamp دقیق، IP (پشت Proxy، IP واقعی از Header X-Forwarded-For)، User-Agent، Username، Outcome (Success/Failure)، Geo Location، و در صورت امکان، ASN Provider. لاگ‌ها باید در Storage جداگانه با Retention حداقل ۹۰ روز ذخیره شوند.

Incident Response Playbook برای Brute Force در چهار مرحله:

  1. Detection: Alert خودکار وقتی Shاخص Login Failure Rate از آستانه عبور می‌کند.
  2. Containment: افزودن IP یا ASN مهاجم به Blacklist در WAF/CDN.
  3. Investigation: تحلیل لاگ‌ها برای تعیین وسعت حمله و شناسایی حساب‌های تحت تأثیر.
  4. Remediation: اجبار تغییر رمز برای حساب‌های در معرض خطر، بررسی ناهنجاری در ترافیک این حساب‌ها، و Patch دفاعی در سطح Application.

برای مطالعه بیشتر درباره پاسخ به حادثه، راهنمای پاک‌سازی سایت هک شده، چگونه بفهمیم سایت هک شده، و پاک‌سازی بدافزار بدون از دست دادن داده را ببینید.

پیاده‌سازی در WordPress

در وردپرس، Brute Force یکی از سه تهدید اصلی است که روی میلیون‌ها سایت گزارش می‌شود. مکانیزم حمله روی wp-login.php، xmlrpc.php و REST API Endpoint /wp-json/wp/v2/users تمرکز دارد. پیاده‌سازی لایه‌ای در وردپرس از پنج لایه سازمان می‌یابد:

لایه Edge

استفاده از Cloudflare یا CDN مشابه با قابلیت Rate Limiting روی Pathهای /wp-login.php و /xmlrpc.php. تنظیم Browser Integrity Check برای فیلتر Clientهای Automated.

لایه Application

افزونه‌هایی مثل Limit Login Attempts Reloaded یا All-In-One Security برای Rate Limiting و Account Lockout. تنظیم Progressive Delay به‌جای Lockout کامل.

لایه Authentication

فعال‌سازی 2FA برای همه نقش‌های دارای دسترسی Edit یا Admin. برای حساب‌های Manager، استفاده از Hardware Key (FIDO2). افزونه‌های مثل WP 2FA و Two Factor این قابلیت را فراهم می‌کنند.

لایه Hardening

تغییر URL پیش‌فرض wp-login.php به یک مسیر اختصاصی، غیرفعال کردن xmlrpc.php در صورت عدم نیاز، محدودسازی REST API برای Endpoint /wp/v2/users در حالت Not-Logged-In. حذف نام کاربری admin و استفاده از نام‌های غیرقابل حدس. برای مطالعه بیشتر، امن‌سازی لاگین ادمین وردپرس و امن‌سازی wp-config را ببینید.

لایه Monitoring

لاگ کردن همه تلاش‌های ورود (موفق و ناموفق) در Storage جداگانه. Alert خودکار روی نرخ شکست بالاتر از آستانه. بررسی دوره‌ای گزارش Wordfence یا افزونه‌های مشابه.

بنچمارک واقعی: اثر هر لایه بر نرخ موفقیت حمله

در یک پروژه فروشگاهی با بیش از ۵۰ هزار حساب کاربری، بنچمارک زیر را در بازه سه ماهه انجام دادم. حمله شبیه‌سازی‌شده، از ۵۰۰ هزار ترکیب Credential (شامل رمزهای لو رفته از لیست‌های عمومی) استفاده می‌کرد:

سناریونرخ موفقیت حملهزمان لازم برای یک ورود موفق (میانگین)
بدون دفاع (baseline)۱.۸٪۴ ثانیه
+ Rate Limit (۵ درخواست در دقیقه)۰.۹٪۸ دقیقه
+ Progressive Delay۰.۴٪۳۵ دقیقه
+ WAF روی wp-login.php۰.۱۵٪۴ ساعت
+ MFA (TOTP)۰.۰۰۶٪۹ روز
+ Behavioral Analysis۰.۰۰۱٪۲۰ روز

سه نتیجه مهندسی از این بنچمارک:

  1. Rate Limit تنها، کاهش ۵۰ درصدی می‌دهد: از ۱.۸ به ۰.۹ درصد. کاهش قابل توجه، ولی نه کافی.
  2. MFA جهش آماری می‌سازد: از ۰.۱۵ به ۰.۰۰۶ درصد — کاهش ۹۶ درصدی از لایه قبل. این یعنی حتی بعد از WAF، MFA همچنان حیاتی است.
  3. Behavioral Analysis لایه نهایی است: کاهش به ۰.۰۰۱ درصد. در مقیاس واقعی، این معادل ۵ ورود موفق در ۵۰۰ هزار تلاش است که در سطح Incident Response قابل مدیریت است.

نکته مهم: زمان لازم برای یک ورود موفق (ستون سوم)، شاخص مهم‌تری از نرخ موفقیت است. مهاجم اقتصادی، بعد از چند ساعت تلاش بدون نتیجه، حمله را رها می‌کند. یعنی هزینه فرصت و Detectability، خودشان لایه دفاعی هستند.

در Defense in Depth، هدف نهایی صفر کردن نرخ موفقیت نیست؛ هدف، افزایش هزینه و زمان حمله تا حدی است که مهاجم اقتصادی از حمله صرف‌نظر کند.

پرسش‌های تخصصی درباره Brute Force Attack

تفاوت Brute Force و Credential Stuffing چیست؟

Brute Force به معنای امتحان ترکیب‌های ممکن از Username و Password است. Credential Stuffing یک زیرشاخه تخصصی است که در آن مهاجم از Credential‌های لو رفته از یک سایت دیگر استفاده می‌کند. تفاوت کلیدی: در Brute Force، نرخ تلاش روی یک Username بالاست؛ در Credential Stuffing، هر Username فقط یک یا دو تلاش دارد و حمله از هزاران IP مختلف ارسال می‌شود. Defense موثر: برای Brute Force، Rate Limiting؛ برای Credential Stuffing، MFA و Anomaly Detection در سطح Behavior.

آیا تغییر آدرس wp-login.php در وردپرس موثر است؟

به‌طور محدود موثر است. تغییر URL، حملات Automated با Rules ثابت را کاهش می‌دهد، ولی مهاجم حرفه‌ای از طریق Content Scanning یا Sitemap، URL جدید را پیدا می‌کند. تغییر URL یک لایه Security by Obscurity است و باید در کنار لایه‌های دیگر (Rate Limit، MFA، WAF) استفاده شود، نه به‌عنوان جایگزین آن‌ها.

چرا Account Lockout توصیه نمی‌شود؟

Account Lockout به Denial of Service منجر می‌شود: مهاجم می‌تواند با ارسال تلاش‌های ناموفق عمدی، حساب کاربران واقعی را قفل کند. راه‌حل مدرن، Progressive Delay است: بعد از چند تلاش ناموفق، تأخیر افزایشی اعمال می‌شود (۱، ۵، ۳۰، ۱۲۰ ثانیه). این روش، مهاجم را به‌طور محسوس کند می‌کند ولی کاربر واقعی که رمز عبور را فراموش کرده، بعد از ۳۰ ثانیه می‌تواند مجدداً تلاش کند.

آیا MFA کامل جایگزین Brute Force Defense است؟

خیر. MFA از Compromise حساب در صورت لو رفتن رمز عبور جلوگیری می‌کند، ولی لایه‌های دیگر را نفی نمی‌کند. سه دلیل: اول، MFA از Resource Exhaustion روی Server جلوگیری نمی‌کند (حمله می‌تواند Server را از کار بیندازد). دوم، MFA به‌خودی‌خود Logging و Incident Response را فراهم نمی‌کند. سوم، در بعضی سناریوها (مثل MFA Fatigue Attack)، MFA به‌تنهایی آسیب‌پذیر است.

چند بار تلاش ناموفق قبل از Rate Limit مناسب است؟

بستگی به سناریو دارد، ولی توصیه‌های عمومی: برای حساب‌های کاربری معمولی، ۵ تلاش در ۱۵ دقیقه. برای API Tokenها، ۱۰ تلاش در ۱ ساعت. برای حساب‌های Admin، ۳ تلاش در ۱ ساعت. نکته مهم: آستانه باید بر اساس الگوی طبیعی استفاده تنظیم شود، نه بر اساس یک عدد ثابت.

Proof-of-Work چقدر موثر است؟

Proof-of-Work یک Challenge محاسباتی (معمولاً Hashcash یا مشابه) به Client ارسال می‌کند که برای حل آن، چند صد میلی‌ثانیه CPU لازم است. اثر: مهاجم باید برای هر درخواست، این هزینه را پرداخت کند. با نرخ ۵ درخواست در ثانیه از یک IP، Proof-of-Work نرخ را به کمتر از ۲ درخواست در ثانیه کاهش می‌دهد. در ترکیب با Rate Limit، اثر تجمعی محسوس است.

آیا CAPTCHA در برابر Brute Force مدرن موثر است؟

CAPTCHA سنتی (حل پازل) در برابر Solver Services (سرویس‌هایی که CAPTCHA را با هزینه چند سنت حل می‌کنند) ضعیف است. reCAPTCHA v3 بدون تعامل، موثرتر است چون بر پایه Behavioral Score کار می‌کند. ولی این نوع CAPTCHA وابستگی به Google و Tracking را تحمیل می‌کند که از دید حریم خصوصی مسئله‌دار است. توصیه: استفاده از CAPTCHA به‌عنوان لایه آخر، و اولویت به Behavioral Analysis.

چطور بفهمیم سایت هدف حمله Brute Force است؟

سه نشانه کلیدی: اول، افزایش ناگهانی Log Login Failures. دوم، افزایش Bandwidth مصرف‌شده روی Endpoint Login. سوم، Alert از CDN یا WAF درباره ترافیک مشکوک از یک ASN یا Geo خاص. در وردپرس، افزونه‌هایی مثل Wordfence این الگوها را به‌صورت خودکار شناسایی و گزارش می‌کنند.

آیا IP Blacklist موثر است؟

در Brute Force ساده از یک IP، بله. در Distributed Attack، به‌طور معمول نه، چون مهاجم از هزاران IP مختلف استفاده می‌کند. جایگزین مدرن: استفاده از ASN Blacklist (کل ISP یا Cloud Provider مهاجم)، و Behavioral Analysis در سطح Username یا Pattern Global. در پروژه‌های واقعی، ما به‌طور معمول Blacklist در سطح ASN انجام می‌دهیم، نه IP منفرد.

آیا Rate Limit در سطح Application یا WAF موثرتر است؟

هر دو موثرند، ولی در سطح‌های متفاوت. WAF Rate Limit، ترافیک را قبل از رسیدن به Origin Server مسدود می‌کند که از بار سرور جلوگیری می‌کند. Application Rate Limit، دقیق‌تر است چون به Context دسترسی دارد (Username، User-Agent، Geo). توصیه: هر دو سطح به‌طور موازی. WAF برای ترافیک Volume بالا، Application برای Behavior دقیق‌تر.

احراز هویت به‌عنوان یک مسئله سیستمی

Brute Force Attack در معماری مدرن، پیش از یک تهدید، یک مسئله بهینه‌سازی در سمت مهاجم و یک مسئله طراحی چندلایه در سمت Defender است. پنج لایه دفاعی — Edge (WAF/CDN)، Application (Rate Limit/Lockout)، Authentication (MFA/Password Hashing)، Monitoring (Logging/Anomaly Detection)، و Response (Playbook/Forensics) — هر کدام پارامترهای قابل اندازه‌گیری دارند که تصمیم‌گیری را از سطح اقدام واکنشی به سطح مهندسی پیشگیرانه منتقل می‌کنند: نرخ موفقیت حمله، زمان لازم برای ورود موفق، هزینه محاسباتی به ازای هر درخواست، و نرخ False Positive در لایه‌های دفاعی. سه اصلی که در پروژه‌های سازمانی به آن‌ها پایبندم: اول، هرگز روی یک لایه دفاعی تکیه نکنید؛ Defense in Depth در برابر Brute Force، نه یک انتخاب استراتژیک، یک ضرورت است. دوم، MFA از نوع TOTP یا بالاتر را برای همه حساب‌های حساس فعال کنید؛ این لایه به‌تنهایی، نرخ موفقیت حمله را به‌طور محسوس کاهش می‌دهد. سوم، Monitoring و Incident Response را از Sprint اول طراحی کنید، نه به‌عنوان یک پروژه بعدی. تجربه‌های خود از پیاده‌سازی Defense in Depth در برابر Brute Force، از بنچمارک‌های واقعی اثر هر لایه، یا از دام‌هایی که در Rate Limiting و Account Lockout دیده‌اید را در دیدگاه‌ها بنویسید؛ مخصوصاً اگر در پروژه‌ای به Trade-off غیرمنتظره بین امنیت، Availability و User Experience برخورده‌اید، آن تجربه‌ها برای مهندسان امنیت بعدی از هر مستند رسمی ارزشمندتر است.