با سلام خدمت شما کاربران عزیز ، امروز درمورد هک وردپرس میخوام مطلبی رابراتون بزارم امیدوارم که براتون مناسب باشه . wordpress security croppedوردپرس به عنوان یکی از محبوب های CMS در اینترنت، مشکلات امنیتی دارد که همه ی ما از آنها آگاه هستیم. این مورد در نسخه های قدیمی تر آن بیشتر به چشم می خورد و برای رفع آن بهتر است که همیشه وردپرس را به آخرین نسخه ی موجود آپدیت نماییم. این مشکلات گاهی حتی در نسخه های جدید وردپرس نیز به چشم می خورند. در این مقاله سعی خواهیم کرد تا راه های اصلی شناسایی نقاط آسیب پذیر وردپرس را توضیح دهیم.
حدس زدن رمز عبور ادمین
خیلی از مدیران وبسایت با اسکریپت وردپرس، رمز عبور ساده ای را برای کاربر ادمین وردپرس انتخاب می کنند. صفحه ی ورود به بخش ادمین معمولا در مسیر /wp-login.php قرار دارد.
ابزارهایی وجود دارند که می توانند به صورت خودکار به کمک یک دیکشنری حاوی رمز عبور، یا همان حملات Bruteforce برای یافتن رمز عبور ادمین وردپرس تلاش نمایند.
وارد کردن Arbitrary Strings
بیایید نگاهی بیاندازیم به کادر جستجو که در آن می توانیم دنبال یه string بگردیم. ما به دنبال searchstring گشته ایم و هیچ نتیجه ای پیدا نکرده ایم.
حالا ببینیم چه اتفاقی می افتد اگر ما به دنبال چیزی بگردیم که کاراکترهای غیر مجاز هم داشته باشد. کاراکترهایی مانند، چپ/راست، آپاسترف و غیره.
بگذارید یک <b> را جستجو کنیم و نتیجه را ببینیم.
وقتی به دو تصویر جستجو نگاه می کنید در ابتدا تفاوتی مشاهده نمی کنید. اما اگر با دقت نگاه کنید متوجه می شوید که جمله ی “The search didn’t find any search page that matched the search query.” با خط بولد نوشته شده است. چرا اینگونه است؟ دلیل آن این است که ما به دنبال <b> گشته ایم که داخل یک پوشش قرار نگرفته و مستقیما داخل کد html قرار دارد. دلیل این مورد نگذاشتن درست ورودی کاربر، داخل یک حصار، توسط برنامه نویس است. از آنجایی که ما کاراکتر مخصوص گذاشته ایم، ورودی کاربر مستقیما داخل اچ تی ام ال قرار گرفته و به کاربر بازگردانده شده است.
کاراکتر <b> داخل زبان html به معنی bold شدن یک خط از ابتدا تا انتها، توسط مرورگر وب است. در ابتدا این به نظر یک مشکل امنیتی بزرگ، نمی آید. اما ما راهی یافته ایم که بتوانیم کد را مستقیم داخل کد HTML یک صفحه قرار دهیم. این یعنی ما می توانیم یک کد جاوا اسکریپت بنویسیم و آن را جستجو کنیم. کد ما احتمالا با جستجو، مستقیما بر روی سیستم میزبان سایت، اجرا خواهد شد.
حالا مهاجم می تواند یک لینک مخصوی ایجاد کند که شامل کد جاوا اسکریپت مخرب باشد و آن را به سمت قربانی ارسال کند. وقتی کاربر برروی لینک کلیک می کند، کد جاوا اسکریپت مخرب اجرا شده و می تواند کوکی های جلسه ی ارتباطی کاربر را سرقت کند که می تواند به مهاجم امکان ورود با نام کاربر را داده و در ادامه، اکانت کاربر را در دست بگیرد.
این مورد همچنین در صورتی که وبسایت داده ها را مستقیما داخل کوئری SQL ذخیره می کند، می تواند مشکل امنیتی برای دیتابیس سرور ایجاد کند. اگر این اتفاق بیافتد، ما می توانیم به کل دیتابیس مورد استفاده ی وبسایت دسترسی داشته باشیم.
همیشه سعی نمایید، که دسترسی عمومی به ایندکس ها را در هر جایی که ممکن است مسدود کنید. اگر وب سرور آپاچه یا سیستم دیگری که از فایل .htaccess استفاده می کند، استفاده می کنید، این کار آسان است. فایل .htaccess را داخل فولدر اصلی سایت خود بیابید. منظور فولدری است که فایل index.php شما آنجا قرار دارد. دستور Options –Indexes را داخل فایل وارد نموده و ذخیره نمایید.
در صورتی که وب سرور شما برای کار با فایل های PHP در زمانی با مشکل مواجه بوده است، بسیار مهم است که فولدرهایی را که تنها سرور به آنها دسترسی دارد را مسدود نمایید. اگر کد PHP بر روی مرورگر کاربر شما به جای صفحه ی وب مشاهده گردد ، آنها ممکن است اطلاعات دیتابیس و یا اطلاعات دیگری درباره ی PHP/MySQL شما بیابند. فولدر wp-includes مهمترین فولدری است که می بایست مسدود شود. برای انجام این کار در فایل .htaccess دستور زیر را وارد نمایید.
RewriteRule ^(wp-includes)\/.*$ ./ [NC,R=301,L]
اگر زیرفولدری برای wp-include وجود دارد، کد زیر را برای هر کدام از آنها داخل فایل .htaccess وارد نمایید.
RewriteRule ^(wp-includes|subdirectory-name-here)\/.*$ ./ [NC,R=301,L]
پلاگین WP-DB Manager برای تهیه ی بک آپ از کل سایت وردپرس شما بسیار مناسب است. این پلاگین همچنین آسیب پذیری های وردپرس را به شما اطلاع داده و بخش های دیتابیس را که به صورت پابلیک قابل مشاهده است را مشخص می کند. همیشه از سایت خود بک آپ تهیه نمایید تا در صورت بروز بدترین حالت نیز بتوانید سایت را به آسانی ریستور نمایید.
دیتابیس هک گوگل
ابتدا می بایست نگاهی به دیتابیس هایی مانند (GHDB(Google Hacking DataBase بیاندازیم و به دنبال واژه ی wordpress یا چیزی مشابه آن بگردیم.
شما سه ستون در تصویر بالا مشاهده می کنید. ستون اول ستون Data است که اطلاعات کوئری جستجو های ذخیره شده در در GHDB نمایش می دهد. بعد از آن ستون Title است که کوئری هایی را که ما در واقع می بایست داخل سرچ گوگل قرار داده تا به آسیب پذیری وردپرس برسیم را نشان می دهد. بعد از آن Summery یا خلاصه است که اطلاعات کافی برای جستجوی ستون عنوان در اینترنت را به ما می دهد.
مثال اول به دنبال فایل های حاوی اطلاعات می گردد و از یک کوئری جستجو filetype:avastlic استفاده می کند. این مستقیما به به وردپرس مربوط نیست اما کوئری از یک وبلاگ وردپرس گرفته شده است. یک ورودی کاملا مرتبط با وردپرس در زیر نشان داده شده است که به دنبال فایل هایی می گردد که شامل رمز عبور هستند.
کوئری زیر به دنبال فایل های با پسوند SQL که شامل کلمه ی wp-content/backup در آدرس باشند، می گردد.
filetype:sql inurl:wp-content/backup-*
حالا بگذارید توسط کوئری جستجوی بالا در گوگل به دنبال فایل های حاوی رمز عبور بگردیم. نتایج جستجوی کوئری در زیر قابل مشاهده است.
گوگل ۷٫۱۷۰ نتیجه پیدا کرده است که ما می توانیم برای یافتن رمز عبور آنها را بررسی کنیم. اگر در نتایج آن دیتابیس های SQL جستجو نماییم، به احتمال زیاد، چند نام کاربری و رمز عبور خواهیم یافت.
حال چه کاری می بایست انجام دهیم؟
وقتی برنامه ای را به یک زبان برنامه نویسی می نویسیم، می بایست از خود بپرسیم، جه مشکلات امنیتی بیشتر در زمان استفاده از این زمان بروز می کند. بنابراین اگر ما از PHP استفاده می کنیم، احتمالا موارد SQL injection و یا XSS flaw وجود خواهند داشت. اما اگر با زبان برنامه نویسی C/C++ کار می کنیم، احتمالا با buffer overflows و format strings روبرو خواهیم بود.
خوب حالا چه کاری برای مقابله با آن می توانیم انجام دهیم؟ اول از همه می بایست اطلاعات کلی در مورد این مشکل امنیتی داشته باشیم. ( بدون در نظر گرفتن اینکه آیا ما کد آسیب پذیر نوشته ایم یا نه ) . روش اصلی برای مقابله با حملات به این صورت است: هرگزبه چیزی را که از سمت کاربر می آید اعتماد نکنید. حتی اگر دیتا ورودی در حالت عادی از سمت کاربر نمی آید ( مانند یک فرم نامرئی)، این احتمالا وجود دارد که کاربری بتواند آن را تغییر دهد. این به ما یک راهنمای خوب در زمان توسعه دادن یک برنامه می دهد.
در ادامه می بایست از خودمان بپرسیم: کدام داده های ورودی می توانند از سمت کاربر بیایند؟ جواب این سوال آنقدر که به نظر میرسد، آسان نیست. بعضی وقتها در واقع جواب آن به خاطر فراموش شدن امکانت مخفی که فراموش شده اند، بسیار سخت است.
مهمترین کاری که می توان انجام داد، بررسی تمام مسیرهای ورودی برای کاراکترهای غیر مجاز است.
در پایان، مهم نیست که تمام ورودی را بررسی و حفاظت کنیم. چون احتمالا به دلیل اینکه نمی دانیم تمام ورودی های ممکن چه می توانند باشند، نمی توانیم به صورت قطعی این کار را انجام دهیم. برای همین در صورتی که بتوانیم همه ی مقدارهای ورودی که می دانیم می توانند از سمت یک کاربر ارسال شوند، را بررسی نماییم، در واقع توانسته ایم به صورت خوبی جلوی حملات احتمالی را بگیریم.
افزونه هایی که توصیه می کنیم
افزونه های وردپرس که به شما توصیه می کنیم نصب نمایید، در صورتی که به خوبی استفاده شوند، می توانند، یک سایت وردپرس را به خوبی مقاوم نمایند.
۱- Exploit Scanner
هر چند وقت یک بار، این افزونه را اجرا کنید تا فعالیت های مخرب را مشخص کند. این افزونه مستقیما مشکل را رفع نمی کند، اما یک راهنمای رفع مشکل کامل برای شما ارائه می کند. اگر هر زمانی به هک شدن سایت خود شک دارید، وقت اجرای این افزونه است.
۲- WP security Scan
همراه با Exploit scanner شما می توانید، این افزونه را استفاده کنید. این افزونه نه تنها دنبال مشکلات امنیتی می گردد، بلکه راه های رفع آن را به صورت دقیق ارائه می کند.
۳- Limit Login Attempts
این افزونه را تنظیم نمایید تا جلوی حملات Bruteforce را بگیرید. با این پلاگین می توانید، ماکزیمم تعداد تلاش برای ورود را مشخص نموده و همچنین زمانی که امکان ورود برای آن آی پی قفل می شود را تعیین نمایید.
۴- Block Bad Queries ( مسدود کردن کوئری های بد )
Block Bad Queries افزونه ای است که تلاش خواهد کرد، کوئری های مخرب را مسدود کند. این افزونه در کوئری ها به دنبال String های بلند مشکوک می گردد.
۵- آنتی ویروس
یک محافظ ضد بدافزار می تواند بر روی کل سایت شما به کمک افزونه ی Antivirus قرار گیرد. این افزونه به دنبال ویروس ها، کرم ها، روت کیت ها و انواع دیگر بدافزار می گردد. همیشه دقت نمایید که آن را به روز رسانی کنید.