از چند سال قبل یک نظریه بین وردپرسکاران مطرح شد که تغییر پیشوند جداول وردپرس امنیت سایت را بالا میبرد و از حملات هکرها به پایگاه داده شما جلوگیری میکند.
توجه کنید که تغییر پیشوند جداول وردپرس یک کار پرخطر و ریسکی بوده که عملا هیچ تاثیری در افزایش امنیت سایت شما ندارد. اما چرا ما این حرف را میزنیم؟ در صورتی که بسیاری از سایتهای ایرانی و غیرایرانی آموزشهای مختلفی برای تغییر دیتابیس وردپرس دارند.
در این مقاله بررسی میکنیم این نظریه به چه دلیل مطرح شده و چرا نباید آن را جدی گرفت.
نظریه تغییر پیشوند جداول وردپرس از کجا به وجود آمد؟
یک نوع حملات وجود دارند به اسم حمله تزریق کد به پایگاه داده یا SQL Injection که مهاجم سعی میکند با پیدا کردن یک آسیبپذیری، مثلا در یک پلاگین وردپرس، پایگاه داده را هدف قرار داده و به آن دسترسی پیدا کند. به کمک SQL Injection دقیقا همان سطح دسترسی که وردپرس به سایت شما دارد، در اختیار مهاجم قرار میگیرد و این بسیار خطرناک است.
از آنجا که تمام اطلاعات وردپرس مثل نام کاربری و رمز عبور کاربران، پستها، صفحات، پلاگینها و غیره در پایگاه داده ذخیره میشوند. اگر حمله با موفقیت انجام شود، مهاجم به تمام اطلاعات شما دسترسی پیدا میکند. میتواند دستورات SQL اجرا کند و خروجی آن را ببیند. البته به جز blind SQL با حمله تزریق کد کور که خارج از بحث این پست است.
اینم بخونید بد نیست؛ معرفی ۲ افزونه قدرتمند برای تغییر آدرس ورود به مدیریت وردپرس
نظریه تغییر پیشوند جداول وردپرس از چند سال قبل با این مفهوم مطرح شد که :
اگر حمله تزریق کدی انجام شود و مهاجم کنترل دیتابیس را به دست بگیرد، شما با تغییر این پیشوندها به یک پیشوند منحصر به فرد(Unique)، میتوانید جلوی دسترسی او را به اطلاعات پایگاه داده بگیرید.
به محض مطرح شدن و محبوب شدن این نظریه، بسیاری از افراد شروع به تولید پلاگینهایی کردند که عملیات تغییر پیشوند جداول وردپرس را خودکار (Automate) کند تا کار شما راحتتر شود. حالا که این مقاله را مینویسم این ترفند به عنوان یک مسئله امنیتی مورد قبول واقع شده و همه آن را توصیه میکنند.
چرا تغییر پیشوند جداول وردپرس تاثیری در امنیت سایت ندارد؟
فرض کنید که شما منزل نیستید و برای امنیت خانه چراغهای آن را خاموش کردهاید تا اگر خدایینکرده دزدی به خانه زد، وسایل شما را نبیند و نتواند چیزی را سرقت کند.
در جواب به من میگویید این که راه حل نیست. کافیست تا سارق چراغها را روشن کند یا همراه خودش چراغ قوه داشته باشد. کار چندان سختی نیست. موافقید؟
این مثال دقیقا مصداق تغییر پیشوند جداول وردپرس است. وقتی حمله تزریق کد انجام شد، انگار که مهاجم در خانه شماست. تغییر پیشوند wp- به هر چیز دیگر فقط مثل این است که چراغهای خانه خاموش باشند.
خب، اولین کاری که حملهکننده انجام میدهد چیست؟ یک همچین چیزی را اجرا میکند :
حالا با هم ببینیم که خروجی Query بالا دقیقا چیست :
عبارت بالا از پایگاه داده میپرسد که چه پیشوندی برای Table یا جدول Postmeta استفاده شده است. به همین راحتی. چراغها روشن شد.
مهم نیست حمله از طرف یک ربات باشد، یا اسکریپت یا به صورت دستی انجام شده باشد. قبل از هر چیز با ابزاری مثل sqlmap بررسی میشود که وضعیت پیشوند جداول به چه صورت است. با تغییر پیشوند جداول وردپرس SQL injection برای مهاجم سختتر نمیشود. فقط یک بررسی کوچک مثل تکه کد بالا کافیست تا به چیزی که میخواهد برسد.
چرا تغییر پیشوند جداول وردپرس یک کار ریسکی و خطرناک است؟
چون بیشتر کاربران برای انجام این تغییر از افزونههای امنیتی استفاده میکنند و این افزونهها وقتی اجرا میشوند برای ذخیره تغییرات نیاز به فضا دارند. یعنی در طول انجام پردازش نصف جداول شما یک پیشوند دارند و نصف جداول همان پیشوند قبلی را دارند.
اگر این عملیات به هر دلیلی متوقف شود و افزونه نتواند کار خودش را به درستی انجام دهد، شما میمانید و با یک دیتابیس آسیب دیده و سایتی که غیرقابل دسترس شده است. باید سراغ فایلهای بک آپ خود بروید و اگر فایل پشتیبانی نداشته باشید باید بیخیال اطلاعات قبلی شده و یک دیتابیس جدید بسازید.
و اینکه افزونه تغییر پیشوند جداول وردپرس باید به فایل wp-config دسترسی کامل داشته باشد و تغییراتش را با موفقیت اعمال کند. به خاطر همین نیاز به یک سری مجوز یا Premonition دارد. اگر این فایل قابل نوشتن یا Writable نباشد عملیات شکست خورده یا به اصطلاح failed میشود.
در آزمایشی که تیم Wordfence انجام داد. یک سایت وردپرسی بر روی یک سرور آزمایشی اجرا شد و یک افزونه تغییر پیشوند جداول وردپرس روی آن نصب شد. افزونه موفق شد فایل wp-config را ویرایش کند. اما بنا به دلایلی نتوانست اسم جداول را تغییر دهد. به نظر میرسید که کاربر پایگاه داده دسترسی لازم را به دیتابیس ندارد.
و جالب اینکه وقتی صفحه را refresh کردند، با خوشآمدگویی معروف وردپرس مواجه شدند. مثل زمانی که تازه میخواهید وردپرس را نصب کنید. به همین راحتی سایت ناپدید شده بود.
تغییر پیشوند Tableهای وردپرس بیشتر شبیه به یک توهم امنیتی است!
راستش این تغییر به شما فقط توهم امنیت را میدهد. اما در واقعیت هیچ کمکی به امنیت سایت شما نمیکند. فقط خطر و پیچیدگی برایتان به همراه میآورد. با سختتر کردن کار کمکی به خودتان نمیکنید.
اما چرا ما بر خلاف تمام سایتها این مطلب را نوشتیم؟ من محمد انوری به افزونه و سایت Wordfence اعتماد کامل دارم و مدت زیادی از سرویس آنها استفاده کردم. وقتی چنین مقالهای از طرف آنها منتشر میشود برای من تا حد زیادی قابل استناد است. همینطور خود من هم مطالعاتی درباره انواع دیتابیس داشتم که نتیجه آن مطالعات همان چیزی بود که در این مقاله خواندید. یعنی گاهی توهم امنیت به جانمان میافتد.
احتمالا با خودتان میپرسید حالا چه کار کنیم؟ برای مقابله با حملات SQL Injection چه راهکاری دارید؟ توصیه میکنم از فایروال استفاده کنید. یعنی قبل از اینکه مهاجم بتواند حمله را انجام دهد و دیتابیس را در دست بگیرد جلوی او را بگیرید.
افزونه امنیتی Wordfence security مجهز به یک فایروال است. اما این فایروالها چطور کار میکنند؟ برای مثال داخل افزونه وردفنس یک موتور تجزیه SQL وجود دارد که دستورات sql را همانطور که پایگاه داده درک میکند، میبیند. یک سری قوانین هم دارد که اگر دستورات دریافتی را خطرناک دید فورا آنرا بلاک کند. اگر یک کاربر مثل من در حال نوشتن و ارسال پست بود و به این شکل با دیتابیس در ارتباط بود، کاری با او نداشته باشد.
امیدوارم این مقاله به دردتان خورده باشد. اگر تجربه مشابه یا متفاوتی از تبدیل پیشوند جداول وردپرس داشتید در قسمت نظرات با من مطرح کنید امیدوارم سایت امنی داشته باشید.