دموی رایگان

آموزش گام‌به‌گام ایمن‌سازی صفحه ورود وردپرس؛ شش لایهٔ دفاعی

دلوین خیری مقدم خواندن ~۸ دقیقه امنیت و پشتیبان‌گیری
آموزش گام‌به‌گام ایمن‌سازی صفحه ورود وردپرس؛ شش لایهٔ دفاعی
صفحهٔ ورود، درِی است که تقریباً تمام تلاش‌های خودکار نفوذ از آن شروع می‌شود؛ ایمن‌سازی صفحه ورود وردپرس یعنی سخت‌کردن همین یک نقطه در شش لایه: اعتبارنامهٔ قوی و نام کاربری غیرقابل حدس، ورود دومرحله‌ای برای دسترسی‌های مدیریتی، محدودسازی تلاش ناموفق، کوچک‌کردن سطح ورود، پایش تلاش‌های ناموفق و روتین دوره‌ای بازبینی. هیچ لایه‌ای به‌تنهایی کافی نیست؛ ترکیب لایه‌هاست که کار مهاجم را بی‌صرفه می‌کند.

بیشتر ورودهای غیرمجازی که در ممیزی‌های امنیتی بررسی کرده‌ایم، از یک الگوی ساده شروع شده‌اند: نام کاربری «admin»، رمزی که در چند سایت دیگر هم استفاده شده و صفحهٔ ورودی که هیچ سقفی برای خطا ندارد. مهاجم خودکار روزی صدها ترکیب را روی همین یک صفحه امتحان می‌کند؛ نه چون سایت شما خاص است، چون صفحهٔ ورود همهٔ سایت‌ها جای شناخته‌شدهٔ تلاش است. امنیت، از در شروع می‌شود نه از انبار.

در این آموزش، صفحهٔ ورود را لایه‌به‌لایه سخت می‌کنیم: از سیاست اعتبارنامه تا ورود دومرحله‌ای، محدودسازی تلاش، کوچک‌کردن سطح ورود و پایش لاگ‌ها. نکتهٔ مهم ترتیب است: لایه‌ها همدیگر را پشتیبانی می‌کنند و برداشتن هر لایه، بقیه را شکننده می‌کند. بحث خود حملهٔ بروت‌فورس و فیلترکردن آن در سطح سرور، موضوع جدای است که در آموزش جلوگیری از حملهٔ بروت‌فورس باز شده؛ آن‌جا ماجراهای مقابله با خود حمله است و این‌جا ساختن خودِ در ورود.

ایمن‌سازی صفحه ورود وردپرس یعنی چه؛ نگاه لایه‌ای

ایمن‌سازی صفحه ورود وردپرس یعنی رساندن هزینهٔ حمله به نقطه‌ای که ادامهٔ تلاش برای مهاجم بی‌صرفه شود — نه یک دیوار جادویی. این نگاه «دفاع در عمق» نام دارد: چند لایهٔ مستقل که هر کدام یک فرض مهاجم را می‌شکنند. فرض اول او «رمز حدس‌زدنی» است؛ لایهٔ اعتبارنامه می‌شکندش. فرض دوم «تلاش بی‌نهایت» است؛ لایهٔ محدودسازی می‌شکندش. فرض سوم «دسترسی پنهان‌ماندن» است؛ لایهٔ پایش می‌شکندش.

به تجربهٔ ما دو اشتباه رایج همین‌جا شکل می‌گیرد. اول، تکیه بر یک لایهٔ تبلیغ‌شده: تیمی فقط آدرس ورود را عوض می‌کند و خیالش راحت است، در حالی که مهاجم خودکار آدرس‌های رایج را می‌داند. دوم، سخت‌گیریِ ضدبهره‌وری: سیاستی که رمز را آن‌قدر پیچیده می‌کند که تیم آن را یادداشت می‌کند و روی میز می‌گذارد؛ نتیجه، ضعیف‌تر از قبل است. لایه‌های این آموزش هر دو اشتباه را تصحیح می‌کنند: واقعی‌اند و اجراکردنی. پیش از رفتن سراغ لایه‌ها، یک قاعدهٔ ذهنی را نگه دارید: هر اقدامی که فقط ظاهر را عوض می‌کند و رفتار مهاجم را تغییر نمی‌دهد، آرامش می‌فروشد نه امنیت.

لایهٔ اول؛ اعتبارنامهٔ قوی و نام کاربری غیرقابل حدس

لایهٔ اول با سه تصمیم شروع می‌شود. تصمیم اول، حذف نام‌های کاربری قابل حدس است: «admin» و نام دامنه و نام شرکت، سه گزینهٔ اول هر لیست امتحان خودکار هستند؛ نام کاربری مدیر را چیزی بگذارید که ربطی به برند ندارد. تصمیم دوم، طول رمز به‌جای عجیب‌بودن آن است: رمز طولانی از حروف بی‌ربطِ ساده، در برابر تلاش خودکار مقاوم‌تر از رمز کوتاهِ پرنقطه‌است؛ مدیر رمزها برای هر سایت یک رمز یکتا می‌سازد و حافظهٔ تیم را درگیر نمی‌کند. تصمیم سوم، جداسازی حساب‌هاست: هر انسان یک حساب با کمترین نقش لازم؛ حساب مدیر فقط برای کارهای مدیریتی و هیچ‌گاه برای نوشتن محتوا.

دو قاعدهٔ تکمیلی این لایه را کامل می‌کنند. قاعدهٔ اول، ممنوعیت اشتراک حساب: حسابی که چند نفر می‌دانند، در واقع حسابی است که هیچ‌کس مسئولش نیست؛ خروج اعضای تیم را در همان روز ثبت کنید، نه آخر فصل. قاعدهٔ دوم، بازبینی دوره‌ای نقش‌ها: کاربری که پروژه‌اش تمام شده، دسترسی‌اش هم تمام است. به تجربهٔ ما لیست کاربران هر شش‌ماه یک‌بار پاک‌سازی می‌شود و هر بازبینی، چند حساب بلااستفاده پیدا می‌کند که هر کدام یک درِ فراموش‌شده‌اند.

لایهٔ دوم؛ ورود دومرحله‌ای برای دسترسی‌های مدیریتی

ورود دومرحله‌ای یعنی رمز کافی نیست؛ بعد از رمز، یک کد موقت از کانال دوم خواسته می‌شود. برای دسترسی‌های مدیریتی این لایه قابل مذاکره نیست: حساب مدیر بدون ورود دومرحله‌ای، ضعیف‌ترین حلقهٔ کل سایت است. روش رایج، اپلیکیشن‌های کد یک‌بارمصرف مبتنی بر زمان (TOTP) است که هر سی ثانیه کد تازه می‌سازند و به پیامک وابسته نیستند؛ کانال پیامکی به‌خاطر ریسک رهگیری شماره و تأخیر پیام، گزینهٔ دوم است نه اول.

اجرای این لایه سه جزئیات دارد که فرقِ «فعال‌بودن» و «کارکردن» را می‌سازد. اول، کدهای بازیابی را همان روز فعال‌سازی روی کاغذ و در جای امن نگه دارید؛ باقی‌ماندن تیم بدون این کدها، بعد از گم‌شدن گوشی، روزهای قفل‌ماندن می‌سازد. دوم، همهٔ حساب‌های ادمین را پوشش بدهید، نه فقط حساب اصلی؛ مهاجم ضعیف‌ترین حساب مدیر را پیدا می‌کند. سوم، ورود دومرحله‌ای را برای نویسنده‌ها هم در نظر بگیرید؛ حساب نویسنده‌ای که هک شود، مسیر انتشار محتوای مخرب می‌شود. به تجربهٔ ما مخالفت‌های درونی با این لایه در همان هفتهٔ اول تمام می‌شود؛ بعد از آن، کد دومرحله‌ای به بخشی از عادت ورود تبدیل می‌شود.

لایهٔ سوم؛ محدودسازی تلاش ناموفق و آستانهٔ قفل

شش لایهٔ سخت‌کردن صفحهٔ ورود
لایه‌ها همدیگر را کامل می‌کنند؛ هیچ لایه‌ای به‌تنهایی کافی نیست.

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

دو مرز را رعایت کنید. اول، آستانهٔ خیلی سفت‌گیرانه خودش سلاح محروم‌سازی می‌شود: مهاجمی که می‌داند پنج تلاش، حساب شما را قفل می‌کند، می‌تواند عمداً حساب‌های پرتکرار را قفل کند و کسب‌وکار شما را زمین بزند؛ قفل تدریجی و مبتنی بر نشانی، این ریسک را کم می‌کند. دوم، فهرست سفید برای تیم ثابت: اگر همهٔ اعضای مدیریتی از چند نشانی مشخص کار می‌کنند، برای آن‌ها سقف ملایم‌تری بگذارید. تنظیم این لایه در اکثر افزونه‌های امنیتی وردپرس و در سطح سرور ممکن است؛ مهم این است که فقط یکی از آن دو را به‌عنوان مرجع نگه دارید تا دو سیاستِ متناقض همدیگر را باطل نکنند.

لایهٔ چهارم؛ کوچک‌کردن سطح ورود بدون شکنجهٔ تیم

لایهٔ چهارم، اندازهٔ خود در را کوچک می‌کند. اقدام اول، بستن ثبت‌نام آزاد است: اگر سایت شما فروشگاه عضویت‌محور نیست، گزینهٔ «هرکسی می‌تواند ثبت‌نام کند» باید خاموش باشد؛ هر حساب خودساخته، یک قابلیت ورود اضافه است. اقدام دوم، محدودسازی دسترسی مدیریتی به نشانی‌های مشخص است وقتی تیم ثابت است؛ صفحهٔ مدیریتی که فقط از چند نشانی پاسخ می‌دهد، برای بقیهٔ دنیا در واقع وجود ندارد. اقدام سوم، قضاوت دربارهٔ XML-RPC است: اگر سرویس خاصی از آن استفاده نمی‌کند، بستنش یک راه ورود کامل را حذف می‌کند؛ اگر وابسته‌اید، محدودش کنید، نه خاموش‌کاری کورکورانه.

دربارهٔ تغییر آدرس صفحهٔ ورود، صادق باشیم: این کار مقدار نویز لاگ را کم می‌کند ولی به‌خودی‌خود امنیت جدی نمی‌سازد، چون آدرس‌های رایج در ابزارهای حمله ثبت‌اند. پس تغییر آدرس را در ردهٔ «تمیزکاری» بگذارید، نه «دیوارکشی»؛ دیوارکشی همان لایه‌های قبل است: ورود دومرحله‌ای و سقف تلاش. ترتیب هم مهم است: اول لایه‌های اصلی، بعد آدرس؛ وگرنه درِ واقعی هنوز همان‌جاست و فقط تابلوی آن عوض شده است.

لایهٔ پنجم؛ پایش تلاش‌های ناموفق و روتین دوره‌ای

چک‌لیست انتشار صفحهٔ ورود سخت‌شده
پنج تیک ساده؛ هر تیک یک فرض مهاجم را می‌شکند.

لایهٔ پنجم دید می‌دهد: پایش تلاش‌های ناموفق یعنی می‌دانید کی، از کجا و روی کدام حساب امتحان می‌کند. حداقل پایش سه چیز را ثبت می‌کند: تلاش‌های ناموفق به تفکیک نشانی و حساب، ورودهای موفق جدید (به‌ویژه از نشانی‌های ناآشنا) و تغییرات نقش کاربران. روتین هفتگی ده‌دقیقه‌ای کافی است: لاگ هفته را نگاه کنید، الگوی نشانی‌های پرتکرار را ببینید و اگر الگویی از یک نشانی ادامه داشت، مسدودی موقت را تمدید کنید.

هشدارهای خودکار را هم روی دو رویداد بگذارید: ورود موفق به حساب مدیر و ساخت حساب جدید با نقش مدیریتی. این دو رویداد آن‌قدر کم‌تکرار و آن‌قدر پراهمیت‌اند که هشدارشان آزاردهنده نمی‌شود. و یادتان باشد پایش، جای بازبینی امنیتی دوره‌ای را نمی‌گیرد: هر فصل یک‌بار، لیست کاربران، افزونه‌های فعال و وضعیت به‌روزرسانی را همان‌طور که در آموزش آپدیت وردپرس آمده مرور کنید؛ صفحهٔ ورود سخت‌شده، روی هسته و افزونه‌های به‌روز معنا دارد، نه روی زیربنای کهنه.

جمع‌بندی؛ این لایه‌ها کجای زنجیرهٔ امنیت می‌نشینند

جمع ببندیم: صفحهٔ ورود با شش لایه سخت می‌شود — اعتبارنامهٔ قوی و نام کاربری غیرقابل حدس، ورود دومرحله‌ای برای همهٔ دسترسی‌های مدیریتی، سقف تلاش ناموفق با قفل تدریجی، کوچک‌کردن سطح ورود، پایش لاگ‌ها با هشدار رویدادهای حساس و بازبینی فصلی. هیچ‌کدام به ابزار گران نیاز ندارد؛ به تصمیم و تداوم نیاز دارد. اگر با وجود همهٔ این‌ها اتفاقی افتاد، مسیر نجات در آموزش بازیابی سایت هک‌شده آمده و از همان‌جا لایه‌های جاافتاده را ببندید.

نقطهٔ شروع عملی، دیدن وضعیت فعلی است: ممیزی رایگان دامنه ضعف‌های ظاهرشدنی سایت را نشان می‌دهد و صفحهٔ امنیت و زیرساخت سوئیت توضیح می‌دهد لایه‌های امنیتی در سطح پلتفرم چطور حفاظت می‌کنند؛ فهرست کامل مقاله‌های این حوزه در هاب امنیت و پشتیبان‌گیری کنار هم است. به تجربهٔ ما تیم‌هایی که این شش لایه را یک‌بار درست بسته‌اند، سال‌ها در آسایش‌اند؛ هزینهٔ یک‌روزهٔ بستن در، در برابر هزینهٔ بازپس‌گیری سایت، عددی نیست که مقایسه بخواهد.

دموی رایگان پلتفرم

پلن پیشرو — ۷٫۹ میلیون تومان/ماه (انتشار خودکار + اپراتور)

دموی رایگان پلتفرم

رصد ما، رشد شما.

سؤالات پرتکرار

چند تلاش ناموفق قبل از قفل منطقی است؟

به تجربهٔ ما آستانهٔ پنج تا ده تلاش با تأخیر تدریجی تعادل خوبی است؛ سفت‌تر از این، به سلاح محروم‌سازی مهاجم تبدیل می‌شود و شل‌تر از این، تلاش خودکار را متوقف نمی‌کند.

آیا فقط تغییر آدرس صفحهٔ ورود کافی است؟

نه؛ تغییر آدرس فقط نویز لاگ را کم می‌کند و آدرس‌های رایج در ابزارهای حمله ثبت‌اند. بدون ورود دومرحله‌ای و سقف تلاش، درِ اصلی همان‌جاست و فقط تابلو عوض شده است.

ورود دومرحله‌ای پیامکی یا اپلیکیشن؟

اپلیکیشن‌های کد زمان‌محور (TOTP) گزینهٔ اول‌اند و پیامک گزینهٔ دوم؛ کدهای بازیابی را هم از روز اول روی کاغذ و در جای امن نگه دارید تا گم‌شدن گوشی به قفل‌ماندن تیم نرسد.

این کارها را خودمان انجام دهیم یا پشتیبانی؟

چهار لایهٔ اول با دسترسی مدیریتی و افزونهٔ امنیتی قابل اجراست؛ پایش منظم و بازبینی فصلی یا به یک مسئول مشخص داخلی سپرده می‌شود یا به پشتیبانی زیرساخت، مهم این است که مالک داشته باشد.