قوی تر کردن سایت وردپرسی در مقابل حملات – امنیت وردپرس (قسمت 5)
در این مقاله شما را با دانش کافی برای مدیریت یک سایت وردپرسی امن تجهیز خواهیم کرد و سطح دانش مبتدی در زمینه امنیت وردپرس را به متوسط تبدیل می کنیم. ما برروی اکثر موارد امنیتی تمرکز خواهیم کرد تا مطمئن شویم که سایت و اطلاعات شما امن خواهند ماند. این موارد باعث کسب یک دید پایهای مناسب در مورد امنیت وردپرس خواهد شد.
آنچه خواهید خواند:
از چه چیزی محافظت میکنید؟
اکثر مدیران سایت فکر می کنند که آنها از سایت و فایلهای آن محافظت میکنند. این در حالیست که تجربه و آمار نشان میدهند که مهمترین چیزهایی که از آنان محافظت می کنیم، کاربران و اطلاعات آنان است.اکثریت این اطلاعات برروی پایگاه داده MySQL نگهداری میشوند، پایگاه دادهای که به عنوان back-end برای سایت وردپرسی شما سرویس میدهد.
ابتدا از دادههای کاربرانتان محافظت کنید. به یاد داشته باشید که مشتریانتان با دادن اطلاعات شخصی خود به شما اعتماد کرده اند و زمانی که شما این اعتماد را با ارائه یک سایت غیرامن زیر سوال میبرید و سایتتان هک میشود، برگرداندن این اعتماد بسیار سخت خواهد بود. هک همیشه اتفاق میفتد، اما وظیفه شما این است که احتمال هک شدن را به پایینترین میزان احتمال ممکن کاهش دهید.
سپس از سایت خود محافظت کنید. شما همچنین از فایلهای سایتتان محافظت میکنید و این نیز به اندازه مساله قبلی مهم است. معمولا این فایلها دارای اطلاعات حساس مربوط به کاربران را در خود ندارند ولی اگر مهاجم بتواند آنها را بخواند و یا تغییر دهد، می تواند مجموعه از اطلاعات کاربران را جمع آوری کرده و یا حتی اطلاعات لازم برای ورود به پایگاه داده را به دست آورده و به مستقیما وارد پایگاه داده شود. زمانی که فایلهای شما به سرقت روند، در نظر داشته باشید که اطلاعات کاربرانتان نیز به سرقت رفته است.
نرمافزارهای قابل اعتماد نصب کنید
این مساله شاید به طور قطع برایتان آسان به نظر بیاید، اما راه معمول آلوده شدن سایتها از طریق نصبهای آلوده توسط مدیران سایت است.
یکی از شگفت انگیزترین چیزها در مورد اجتماع وردپرس این است که تعداد زیادی افزونهه و قالب رایگان و متن باز وجود دارد. همچنین تعداد زیادی از نرمافزارهای PHP وجود دارند که در کنار وردپرس برای شما مهیا هستند. متاسفانه افرادی وجود دارند که این نرمافزارها و افزونه و قالبهای امن را به چیزی خطرناک و آلوده تبدیل میکنند. به اینها اسکریپتهای نال شده و یا همان nulled script میگویند.
اسکریپت نال شده برای مثال افزونهای است مثل ACME که هکر، سورس کد آن را تغییر داده و آن را تبدیل به اسکریپتی آلوده میکند. استفاده از این اسکریپت میتواند باعث ایجاد دربپشتی یا همان back-door در سایت شده و دسترسی لازم را به هکر دهد. اسکریپتهای نال شده همچنین میتوانند برای ارسال ایمیلهای اسپم از سمت سایت شما مورد استفاده قرار بگیرند. این اسکریپتها اکثرا از طریق سایتهای سومی مورد عرضه قرار میگیرند و سایتهای اصلی ارائه دهنده افزونهها و قالبها هیچگاه کد مخربی را انتشار نمیدهند.
برای جلوگیری از سواستفاده از طریق اسکریپتهای نال شده، تنها راه این است که افزونهها و یا قالبهای مورد نیاز خود را از منابع قابل اطمینان دانلود کنید. سایت WordPress.org اصلیترین مکان برای پیدا کردن افزونهها و قالبهای وردپرسی است. افزونهها و قالبهای تجاری را نیز میتوانید از سایتهای قابل اطمینان و معتبر تهیه کنید.
اگر میخواهید در مورد اعتبار یک سایت تحقیق کنید، کافیست نام دامنه را داخل کوتیشن در گوگل جستجو کنید و ببینید که افراد دیگر در مورد اعتبار این سایت چه چیزهایی گفته اند. همچنین میتوانید سورس کد PHP را دانلود کرده و آن را به یک توسعه دهنده با تجربه بدهید تا بررسی کند که آیا کد مخربی در آن وجود دارد یا نه.
بهروزرسانی هسته، قالبها و افزونهها
به روز نگه داشتن وردپرستان یکی از مهمترین کارهایی است که میتوانید برای تامین امنیت سایت خود انجام دهید، همانطور که قبلا گفتیم، شما میتوانید با استفاده از افزونههای امنیتی همچون افزونه wordfence میتوانید از بهروزرسانیهای جدید وردپرسی برای هسته، افزونه و یا قالب با خبر شوید و سریعتر آنها را به روز کنید.
اگر هرروز وارد بخش مدیریت سایت وردپرسی خود میشوید، به ادمین بار در بالا توجه کنید، در این قسمت بهروزرسانیهای لازم انجام نشده را خواهید دید. بعضی از افزونهها به صورت خود به خود شروع به بهروزرسانی میکنند ولی همهی افزونهها چنین نیستند. مدیریت سایت با به روز نگه داشتن هسته و قالب و افزونهها یکی از مهمترین مواردی است که باعث افزایش قابل توجه امنیت سایت شما خواهد شد.
بهروزرسانی خودکار وردپرس چگونه کار میکند
در اکتبر سال ۲۰۱۳ و با انتشار وردپرس نسخه ۳.۷، وردپرس پشتیبانی بهروزرسانی خودکار وردپرس را شروع کرد. در این نسخه از وردپرس، بهروزرسانی خودکار برای انتشارهای جزئی و فایلهای ترجمه در هسته وردپرس فعال شد. دلیل اینکه تیم امنیتی وردپرس اینکار را انجام داد این بود که بهروزرسانیهای امنیتی وردپرس معمولا بصورت انتشارهای جزئی انتشار مییافت.
موضوع جالب دیگری که کمتر از آگاه هستند این است که تیم امنیتی وردپرس قابلیت بهروزرسانی خودکار را برای افزونهها روی سایت نیز فعال کرده است و این در صورتی است که این افزونه یک آسیبپذیری مهمی در خود داشته باشد. این قابلیت نیز به صورت پیشفرض، در نسخههای فعلی وجود دارد. تیم امنیتی وردپرس این قابلیت را در دهم آپریل سال ۲۰۱۴ برای رفع مشکل امنیتی جدی به وجود آمده در افزونه JetPack استفاده کرد.
در حال حاضر تیم امنیتی وردپرس بهروزرسانی امنیتی خودکار برای قالبها را انجام نمیدهد، چرا که این کار ریسک بالایی دارد. آنها راه حلی برای تشخیص این مساله که فایلهای قالب مورد استفاده سایتها همان فایلها پیشفرض و اصلی هستند و یا اینکه تغییر یافتهاند، ندارند. از این رو ممکن است بهروزرسانیهای امنیتی خودکار، باعث به وجود آمدن مشکلاتی در پوستههای شخصی سازی شده شود. بنابراین خودکار کردن بهروزرسانیهای امنیتی برای پوستهها با ایجاد مشکل در ظاهر پوسته، کار مفیدی به نظر نمیرسد.
ما پیشنهاد میکنیم که تنظیمات بهروزرسانی وردپرس خود را بصورت پیشفرض نگه دارید و آن را تغییر ندهید. ممکن است بخاطر استفاده از سیستم کنترل ورژن و یا داشتن هاستهای مدیریت شده برای سیستم بهروزرسانی بخواهید که این تنظیمات را تغییر دهید.
مجوز فایلها و ساختار پوشهبندی در وردپرس
وردپرس در واقع نرمافزاری است که با PHP نوشته شده و برروی وبسرور اجرا میشود. این موضوع به این معنی است که وردپرس مجموعه ای از فایلهای PHP به همراه عکسها، فایلهای HTML و فایلهای جاوااسکریپت و دیگر منابع میباشد. در طول پردازشهای عمومی وردپرس، فایلهای بسیار کمی تغییر مییابند. در حقیقت، در اکثر درخواستهای ارسالی از سمت کاربر، تنها فایلی که تغییر میکند، فایلهای Log هستند که در خارج از بسته نصبی وردپرس قرار گرفته اند.
زمانی که مجوزهای سختگیرانه ای را برروی فایلهای سایت خود لحاظ می کنید، این سیاست باعث میشود که وردپرس نتواند هسته فایلهای خود، افزونهها و پوستههای سایتتان را بهروزرسانی کند. این به آن معنی است که بهروزرسانی های امنیتی خودکار برای هسته و افزونههای وردپرس که کمی قبلتر در موردش صحبت کردیم نیز غیرفعال میشود. همچنین به این معنی است که شما نمیتوانید هسته، پوسته و افزونههای وردپرس خود را از طریق بخش مدیریت سایت به روزرسانی کنید.
محدود کردن مجوز فایلها، شما را مجبور میکند تا فایلهای هسته، پوسته و افزونه وردپرس خود را بصورت دستی بهروزرسانی کنید. این کار شدیدا طاقت فرساست. ما در ادامه مقالهای برای انجام این کار و روش قدم به قدم آن را تهیه خواهیم کرد و در اختیار شما خواهیم گذاشت. این مقاله به شما دیدی از مشقتبار بودن این کار را خواهد.
ما معمولا به کاربران توصیه میکنیم که مجوز فایلها را به اندازه محدود نکنند که دیگر نتوان از طریق رابط کاربری وب پنل مدیریت وردپرس، سیستم را بهروز نگه داشت. در هر حال اگر علاقمند به دانستن این باشید که مجوزها در هاست چگونه دسته بندی میشوند و چگونه میتوان مجوز فایلها را محدودتر کرد، ما مقاله ای در این مورد برای شما آماده خواهیم کرد. در این مقالات به شما چند تا از قالبهای مجوز دهی و جزئیات مورد نیاز برای درک این مجوز را خواهیم آموخت.
گذرواژههای قوی
همانطور که همهی ما میدانیم انتخاب یک گذرواژه قوی بسیار مهم است، ولی دلایل آن را کمتر کسی میداند. در این اینجا ما ابتدا به روشهایی که هکرها برای حدس گذرواژه شما به کار میبرند خواهیم پرداخت. سپس زمانی که این روشها را درک کردیم، در مورد اینکه چه ویژگیهایی باعث قوی شدن یک گذرواژه میشوند و اینکه تفاوتهای بین گذرواژه های قوی و ضعیف چیست، ادامه خواهیم داد.
گذرواژههای قوی برای حفاظت از حملات بروت فورس
معمولترین روش حدس زدن گذرواژه شما توسط هکرها این است که وارد صفحهی ورود وردپرس شده و سپس مرتبا و پشت سرهم، نام کاربری و گذرواژه را وارد کرده و دکمهی ورود را بزنند. این روش همانطور که قبلا هم گفتهایم حمله بروت فورس نام دارد، بخاطر اینکه هیچ هنری در این روش دیده نمیشود و هیچ پیچیدگی خاصی ندارد و تنها به سادگی تعداد زیادی گذرواژه تست میشود.
یک هکر برای حدس زدن گذرواژه بصورت دستی و تایپ کردن، میتواند در بهترین حالت در هر ۳ ثانیه یک گذرواژه را امتحان کند، این درصورتی است که به یک سرعت اینترنت بسیار بالا متصل باشد و سایت شما نیز سرعت بالایی در پاسخگویی به کاربر داشته باشد و البته هکری با سرعت تایپ بسیار بالا باشد. بیشتر هکرها از اسکریپتها برای انجام حمله بروت فورس به سایتها استفاده میکنند. این روش به آنها اجازه میدهد که با سرعت بالاتری – مثلا ۱۰ گذرواژه در ثانیه – حمله کنند. این اسکریپتها به طور پیاپی گذرواژههای مختلف و در صورت نیاز حتی نام کاربریهای مختلف را در فرم صفحهی ورود وارد میکنند تا اینکه به نتیجه برسند.
حتی اجرای اسکریپتهای خودکار برای حمله بروت فورس خیلی ساده به نظر نمیآید. معمولا حساب کاربری مدیر سایت مورد هدف قرار دارد. هکرها اغلب تلاش میکنند تا نام کاربری admin را مورد هدف قرار دهند که برای سالیان سال، نام کاربری پیشفرض حساب مدیریت سایتهای وردپرسی بوده است. در غیر اینصورت آنها تلاش میکنند تا از طریق اسکن نام کاربری نویسندههای نوشتهها، دریابند که نام کاربری مدیر سایت چیست و بعد از آن شروع به بروت فورس آن حساب خواهند کرد، به این امید که آن حساب دسترسی لازم برای مدیریت سایت را داشته باشد.
افزونههای امنیتی بسیاری با محدود کردن تعداد دفعات حدس گذرواژه به تعداد مشخصی در ساعت، از سایتهای وردپرسی در مقابل این حملات محافظت میکنند. همچنین برخی از آنها مانند افزونه وردفنس، جلوی اسکن author=N را برای تشخیص نویسنده نوشتهها میگیرند تا هکر نتواند بدین وسیله نام کاربری مدیر سایت را پیدا کند.
بنابراین از نظر تئوری، برای جلوگیری از اینکه هکر نتواند کدهای PHP شما را تغییر داده و کدهای مخرب خود را اضافه کند، کافیست که به سادگی، فایلهای PHP خود را غیرقابل تغییر کنید. این کار را میتوانید با دادن مجوزهای سختگیرانه به فایلهای سایت خود انجام دهید. با این حال، این کار یک ایراد جدی نیز با خود به همراه دارد.
حملات بروت فورس که از فرم صفحهی ورود استفاده میکنند، دلیل خوبی برای استفاده کردن از یک گذرواژهی قوی محسوب میشود. حتی یک گذرواژه مدیریت شده قوی میتواند جلوی اینگونه از حملات را به خوبی بگیرد. با این حال، دلیلی وجود دارد که باید از گذرواژههای بسیار قوی استفاده کرد که در ادامه آن را بیان میکنیم.
گذرواژههای قوی برای محافظت در مقابل حملات پسورد کرکینگ
برای لحظهای فرض کنید که هکری موفق شده ات تا وارد سایت شما شده و دسترسی به پایگاه داده شما داشته باشد. معمولا در این شرایط، او سعی میکند که بدافزارهایی را نصب کرده و اطلاعات کاربران شما را دانلود کند. این در حقیقت یکی از بدترین سناریوهایی است که میتواند اتفاق بیفتد. در دنیای واقعی، این سناریوها اتفاق میافتد و متاسفانه حقیقتی تلخ است. در نتیجه شما علاوه بر امن کردن سایتتان، نیاز دارید تا کارهایی را انجام دهید تا در صورت وقوع چنین سناریوهایی، مقدار خسارت وارده را کمتر کنید.
در دوران اولیه اینترنت، بسیاری از سایتها گذرواژههای کاربران را بصورت plain-text ذخیره میکردند. اگر هکری میتوانست وارد سایت شود و این گذرواژهها را بدزدد، می توانست از آنها برای ورود به بسیاری از سایتهای دیگر استفاده کند. برای مثال، اگر کاربری ایمیلی از سایت gmail داشت، منطقی به نظر میرسید که همین گذرواژه که از سایت هک شده دزدیده شده بود را برای ورود به حساب جیمیل استفاده کنند تا ببینند آیا میتوانند وارد ایمیل آن شخص شوند یا خیر.
وردپرس گذرواژههای شما را بصورت hash ذخیره می کند و یا باعث میشود تا جلوی دزدی گذرواژههایتان گرفته شود. این یک متد ریاضی که بوسیله آن میتوان فهمید که آیا گذرواژه درستی را تایپ کرده اید یا نه، ولی از آن نمیتوان برای مهندسی معکوس برای دسترسی به گذرواژه اصلی استفاده کرد.
با استفاده از hash امنیت به طور چشمگیری بهبود یافته است و گذرواژهها دیگر بصورت نوشتار ساده نگهداری نمیشوند. با این حال، نرمافزارهای کرکینگ میتوانند با استفاده از دیکشنری تلاش برای تولید همان hashهای یافت شده در پایگاه داده بکنند و بدین طریق به گذرواژه شما بصورت مهندسی معکوس دست یابند. به همین دلیل این مساله مهم است که گذرواژهای سخت را انتخاب کنید که قابل حدس نبوده و همچنین تک کلمهای نباشد.
بیاید تا باهم به چند مثال گذرواژهها نگاهی بیندازیم:
- مثال اول : banana – این گذرواژه به راحتی کرک میشود، به این دلیل که مطمئنا در دیکشنری یافت میشود.
- مثال دوم: Banana- سختتر است اما با این حال نرمافزارهای کرک در کسری از دقیقه آن را پیدا میکنند.
- مثال سوم: Banana1- بازهم سختتر، اما معمولا هکرها یکی از حروفها را بصورت upper-case انتخاب میکنند و چندتا عدد به ادامهی گذرواژه شما استفاده میکنند، بنابراین این نیز قابل کرک است.
- مثال چهارم: BananaPear243 – این برای کرکرها بسیار چالش برانگیز است. ممکن است روزها زمان ببرد تا این گذرواژه را حدس بزنند، اما همچنان قابل کرک است زیرا ساختاری قابل پیشبینی دارد و بر پایه کلمات زبان انگلیسی ساخته شده است.
- مثال پنجم: D$Twr&@8z – این دیگر واقعا برای کرکها گزینه بسیار سختی خواهد بود. آنها باید تمام ترکیبات گذرواژهها را تا طول ۱۰ کاراکتر و شامل کاراکترهای حروفهای بزرگ و کوچک، شمارهها و سمبلها را امتحان کنند. تعداد گزینههای موجود ۸۰ به توان ۱۰ خواهد بود ( ۸۰ کاراکتر محتمل با طولی به اندازه ۱۰ کاراکتر ) که عدد بسیار بزرگی میشود. عدد دقیق تعداد احتمالات 10,737,418,240,000,000,000 است.
نکته مهم: دلیل اینکه شما باید از گذرواژههای قوی برروی سایت خود استفاده کنید و کاربرانتان را به استفاده از این نوع از گذرواژهها تشویق کنید این است که در صورت بروز سناریوای مثل هک شدن سایتتان، کار هکر را برای کرک کردن گذرواژههای پایگاه دادهتان سخت کنید و پتانسیل ایجاد خسارت بیشتر را کم کنید. از آنجاییکه این گذرواژهها برروی سایتهای دیگر نیز امتحان خواهد شد و سعی در دسترسی به حسابهای دیگر خواهند داشت. برای مثال، اگر کاربری این اشتباه را بکند که از گذرواژه یکسانی برای حساب کاربری سایت شما و حساب ایمیل خود در سایت gmail استفاده کرده باشد، اگر گذرواژه قوی باشد، احتمال کرک کردن آن و دسترسی به حساب gmail نیز بسیار پایین تر خواهد بود و از بروز چنین مشکلاتی جلوگیری میشود. با تشویق و اجبار کاربرانتان به استفاده از گذرواژههای قوی برروی حسابهای کاربری سایتتان، به کاربران و مشتریان خود کمک میکنید تا امنیت بالاتری را در دنیای اینترنت تجربه کنند.
فقط از SSH و SFTP استفاده کنید
اکثر مدیران سایت برای انتقال فایلها و مدیریت آنها از FTP و یا SFTP یا همان secure-FTP استفاده میکنند. FTP یک پروتکل بسیار قدیمی است که تاریخ ایجاد آن تقریبا به اوایل روزهای شروع اینترنت برمیگردد. در این پروتکل هیچگونه رمزنگاری برای اطلاعات ورود استفاده نشده است. همچنین این پروتکل فایلها را نیز رمز نمیکند، در نتیجه تمام فایلها به صورت plain-text و یا نوشتار خام برروی شبکه انتقال مییابند.
اگر شما در یک کافیشاپ و یا هرجای دیگری که وایفای عمومی ارائه میدهد باشید و از آنجا سعی کنید تا سایت خود را با FTP مدیریت کنید، یک هکر میتواند به سادگی اطلاعات ورود و گذرواژه شما را به راحتی بدست آورد و دسترسی کامل به سایت پیدا کند.
حتی اگر داخل یک شبکه عمومی نباشید و از شبکه امن خانگی یا محل کارتان استفاده کنید، بازهم اگر کسی در مسیر ارسال اطلاعات شما از gateway شبکه شما به بعد، حضور داشته باشد و شنود کند، میتواند به اطلاعات ورود شما دسترسی پیدا کند. پس در هر صورت وقتی FTP را انتخاب میکنید، اجازه میدهید که این اطلاعات بصورت رمز نشدهای در مسیرهایی که از امنیت آن اطلاع ندارید، عبور کند.
بنابراین استفاده از sFTP را برای خود یک قانون کنید، زیرا از یک الگوریتم رمزنگاری قوی برای ورود و انتقال فایلها استفاده میکند. البته جایگزینهایی برای sFTP نیز وجود دارد، مانند SCP که مخفف secure copy via SSH استو یا FTPS که از TLS برای رمزنگاری استفاده میکند. اکثر مدیران سایتهای وردپرسی از sFTP استفاده میکنند و علت آن سیستم این پروتکل است که از SSH برای ارتباط استفاده میکند که بصورت پیشفرض برروی اکثر وبسرورهای لینوکسی نصب شده است.
پایگاه داده خود را امن کنید
در اکثریت کانفیگها، وردپرس از پایگاه داده MySQL برای ذخیره سازی اطلاعات استفاده میکند. این اطلاعات شامل نوشتهها، صفحهها و دیدگاهها و مهمتر از همه اطلاعات کاربران شما شامل آدرس ایمیل و hash گذرواژههای آنهاست.
معمولا این پایگاه داده MySQL را برروی یک ماشین مجزا از وب سرور سایتتان که حاوی فایلهای سایت وردپرس و کدهای PHP است، نگهداری میکنند و این دو سرور از طریق مسیر شبکه با یکدیگر در ارتباط هستند.
معمولا این وظیفه شما نیست که سرور پایگاه داده خود را امن کنید و سرویس دهنده هاست باید این کار را انجام دهد. سرور پایگاه داده MySQL نباید از طریق اینترنت برای همگان در دسترس باشد.همچنین دسترسی به سرور پایگاه داده از طریق سایت شما، باید محدود به اطلاعات و جداول متعلق به سایت شما باشد.
به عنوان مدیر سایت، وردپرس شما دسترسی نامحدودی به اطلاعات و جداول پایگاه داده MySQL شما دارد. با اتصال پایگاه داده MySQL، سایت شما میتواند جداولی بسازد و یا پاک کند، تمام اطلاعات موجود متعلق به سایتتان را بخواند و آنها را اضافه کند و یا تغییر دهد.
این مسئولیت با شماست که مطمئن شوید که هکرها قادر نخواهند بود تا از طریق وب سرورتان به پایگاه داده MySQL شما دسترسی پیدا کنند.
محافظت از فایل wp-config.php از خوانده شدن
فایل wp-config.php وردپرس که در پوشه root وردپرس شما قرار دارد، حاوی نام کاربری و گذرواژه ورود به پایگاه داده شماست. همچنین این فایل به هرکسی که آن را میخواند، میگوید که پایگاه داده شما برروی کدام سرور در حال اجراست. با این اطلاعات، هکر میتواند به راحتی به پایگاه داده سایت شما متصل شده و اطلاعات شما را از آن بدزدد و هر تغییری که میخواهد برروی پایگاه داده اعمال کند.
به همین دلیل، اینکه هیچکس برروی اینترنت نتواند محتویات فایل wp-config.php سایت شما را بخواند، بسیار مهم است. این فایل در پوشهای نگهداری میشود که از دید عموم اینترنت میتوان به آن دسترسی داشت. تنها دلیلی که این فایل از طریق کل اینترنت قابل خواندن نیست، پسوند این فایل یعنی “.php” است. وقتی که کسی میخواهد به این فایل از طریق اینترنت عمومی دسترسی پیدا کند، وب سرور شما محتوای آن را به او نشان نخواهد داد، بلکه سعی خواهد کرد که آن را بصورت یک PHP اپلیکیشن اجرا کند و در نهایت اینکار fail شده و کاربر معمولا یک صفحه خالی مشاهده خواهد کرد.
همینطور که میبینید اطلاعات ورود به پایگاه داده شما در فایلی ذخیره شده که به راحتی میتوان آدرس آن را یافت و تنها چیزی که مانع از دیدن محتویات آن میشود، وبسروری است که خوشبختانه طوری تنظیم شده است تا فایلهایی با پسوند مشخص را بصورت نوشتار یا همان text نشان ندهد.
هکرها از روشهای و تریکهای مختلفی برای گول زدن وبسرور شما استفاده خواهند کرد که فایل wp-config.php شما را بخوانند. این روشها می توانند بهره برداری از آسیبپذیری یک افزونه باشد که منجر به فریب وب سرور و دیدن محتوای فایل wp-config.php شود. یا اینکه میتواند آپلود کردن یک backdoor که ما به آن درب پشتی میگوییم باشد، که این backdoor به او اجازه میدهد تا فایلهایی با پسوند php را با فرمت text مشاهده کنند. در حالت کلی، تا زمانی که سایت شما آسیب پذیری امنیتی ای نداشته باشد، فایل wp-config.php شما از طریق این روشها قابل دسترسی نخواهد بود.
ادیت کردن فایل wp-config.php با استفاده از text editorها باعث ایجاد یک فایل موقت یا به اصطلاح temporary میشود که باعث در معرض خطر گرفتن محتویات این فایل در اینترنت میشود. برای مثال اگر شما فایل wp-config.php را با ادیتوری مانند vim باز کنید و آن را تغییر دهید، یک فایل به نام “wp-config.php.swp.” ساخته میشود. هر کسی با دسترسی به سایت شما و از طریق آدرس http://example.com/.wp-config.php.swp می تواند این فایل را دانلود و محتویات آن که حاوی اطلاعات همان فایل wp-config.php است را ببیند. همانطور که میدانیم این فایل نیز حاوی نام کاربری و گذرواژه ورود به پایگاه داده شما میباشد. برای جلوگیری از این اتفاق هیچگاه فایلهایتان را بصورت مستقیم برروی سایتتان تغییر ندهید.
هیچگاه فایل پشتیبانی از wp-config.php با پسوندی به غیر از php تهیه نکنید. برای مثال ممکن است شما یک کپی از این فایل را بردارید و با نام wp-config.php.old ذخیره کنید. همین فایل میتواند از طریق اینترنت خوانده شود.
اگر شما فایل پشتیبانی با فرمت ZIP از سایت خود تهیه کرده باشید و آن را همانطور که بود، در یک پوشه عمومی در وبسرور خود رها کرده باشید، فایل wp-config.php شما از طریق دانلود کردن این فایل zip در دسترس خواهد بود و به راحتی میتوان آن را باز کرد و خواند. در ضمن شکستن رمز فایلهای ZIP دارای رمزعبور اصلا کار سختی نیست، به همین دلیل به این رمزعبورها نیز تکیه نکنید.
انتقال فایل wp-config.php به پوشه ای بالاتر از root
شما میتوانید فایل wp-config.php را یک شاخه بالاتر از محل اصلی نصب وردپرس خود ببرید. اگر محل نصب وردپرس شما پوشه root وب شماست، در اینصورت میتوانید فایل wp-config.php را به خارج از قسمت public_html که دسترسی عمومی وب است، انتقال دهید.
خیلیها این حرکت را یک روش بسیار خوب برای بهبود امنیت سایت می دانند، مثلا اگر روی به هر دلیلی PHP interpreter روی سرور از کار بیفتد، وب سرور فایلهای با پسوند php را بصورت text ارائه میدهد، و در این صورت wp-config.php شما در دسترس عموم نیست. این اتفاق یعنی همان غیرفعال شدن php interpreter یک اتفاق بسیار نادر است و در نتیجه این راه جل یک شرایط بسیار بد با احتمال بسیار کم را حل میکند.
اینکه این موضوع یک پیشرفت در امنیت وردپرس است یا نه، موضوعی است که بین حرفهای های وردپرس بحث میشود. مزیتهای آن اینست که در صورت بروز احتمال پایین غیرفعال شدن interpreter php، فایل wp-config.php شما بصورت عمومی در دسترس نخواهد بود. اشکال این روش این است که شما باید برای اینکار، یک پوشه بالاتر از root وب خود و به open_basedir اضافه کنید. در این شرایط شما تعداد دایرکتوریهایی که php به آن دسترسی دارد را افزایش میدهید که این مساله میتواند به مهاجم راهی برای دسترسی به آن دایکتوریها را فراهم کند.
دانستن این نکته مفید است که مقادیر ثابتی که در فایل wp-config.php تعریف شده اند که شامل اطلاعات نام کاربری و گذرواژه و hostname پایگاه داده شماست، میتواند از هر بخشی از اپلیکیشن وردپرس در دسترس باشد. بنابراین اگر مهاجم بتواند کد php را در داخل اپلیکیشن وردپرس شما اجرا کند، می تواند مقادیر ثابت ذکر شده را در فایل wp-config.php را بخواند، حتی اگر شما آن را در یک پوشه بالاتر از وب root ذخیره کرده باشید.
در این شرایط ما به شما پیشنهاد نمیکنیم که فایل wp-config.php را به یک پوشه بالاتر از وب root خود انتقال دهید، دلیل آن هم این است که این روش مزیتهای بسیار کمی دارد. در صنعت امنیت به اینکار ”security through obscurity” میگویند، یعنی اینکه سعی کنید برای امن کردن چیزی، آن را پنهان کنید.
حفاظت در مقابل حملات SQL Injection
راه حل عمده دیگری که هکرها برای دسترسی به پایگاه داده سایت شما از آن استفاده میکنند، حمله SQL injection نام دارد که احتمالا آن را میشناسید و یا اینکه اسمش به گوشتان خورده است. این حمله درواقع اجرای دستورات SQL برروی پایگاه داده شما از طریق آسیبپذیری در اپلیکیشن است. ما بعدها در مورد SQL injection بصورت مفصلتر صحبت خواهیم کرد.
این نوع آسیب پذیریها، پایگاه داده سایت شما را به راحتی در اختیار مهاجمین میگذارد. به همین دلیل، باید همیشه افزونهها، پوستهها و هسته وردپرس خود را به روز نگه دارید.
محافظت از فایلهای پشتیبان
فایلهای پشتیبان هیچوقت آنطور که باید مورد احترام قرار نگرفته اند. فایلهای پشتیبان علاوه بر اینکه شامل تمام فایلهای سایت شما هستند، یک نسخه از پایگاه داده شما را نیز شامل میشوند. متاسفانه ما شاهد این مشکل هستیم که مدیران سایت با بیاحتیاطی با فایلهای پشتیبان برخورد میکنند و آنها را در مسیرهای عمومی قرار میدهند تا به راحتی قابل دانلود باشند. مواظب باشید که شما مرتکب چنین اشتباهاتی نشوید.
اگر فایلهای پشتیبان خود را بصورت آفلاین نگهداری میکنید. برای مثال اگر آنها را دانلود کردهاید و برروی سیستم کاری و یا usb flash خود نگهداری میکنید، مطمئن شوید که آنها را در جای امن ذخیره کرده باشید.
سایت خود را با HTTPS بالا بیارید
پروتکلی که برای مرورگر شما برای صحبت با سرور استفاده میکند HTTP نام دارد که در سال 1989 توسط آقای تیم برنرز لی ابداع شد. HTTP اصلالتا به عنوان یک پروتکل plain-text طراحی شده است. مرورگر به وبسرور اتصال یافته و درخواستی را به بصورت text فرستاده و پاسخ را نیز بصورت text دریافت میکند. هرکسی که در شبکه مشغول شنود باشد، میتواند این بستهها را به راحتی ببیند.
در سال ۱۹۹۴، شرکت Netscape پروتکل HTTPS را ابداع کرد که شکل رمزنگاری شدهای از پروتکل HTTPS است و اطلاعات بین مرورگر و وبسرور رمز میشوند. این پروتکل از ابتدا، بیشتر برای تراکنشهای مالی تجارت الکترونیک استفاده میشد. اما امروزه و در چند سال اخیر پیشنهاد شده است تا تمامی ارتباطات وب رمز شوند و از این رو بیشتر سایتها علاقه به استفاده از آن را دارند.
چگونه HTTPS را برروی وردپرس فعال کنیم
پروتکل HTTPS باید برروی وبسرور فعال شود. اگر شما از شرکت هاستینگ، هاست اشتراکی وردپرس تهیه کردهاید، در اینصورت این شرکت است که باید دستورالعمل فعال کردن HTTPS را در اختیارتان بگذارد. ممکن است آنها از شما بخواهند تا گواهینامه SSL را بخرید و یا اینکه خود آنها نیز بفروشند و یا به رایگان در اختیارتان بگذارند.
سایت LetsEncrypt یک مشارکت غیرانتفاعی بین برندهای مختلف است که گواهینامه SSL رایگان را از سال ۲۰۱۵ در اختیار همگان قرار میدهند که به راحتی هم قابل نصب است.
زمانی که شما HTTPS را برروی سایتتان فعال کردید، نیاز دارید تا تنظیماتی را برروی وردپرس انجام دهید و قوانینی را برای آن وضع کنید تا مطمئن شوید که سایتتان فقط از طریق پروتکل HTTPS قابل دسترسی است که این کار پروتکل HTTP قدیمیتان را غیرفعال میکند.
بعد از اینکه HTTPS را برروی سایتتان فعال کردید، به آدرس سایتتان یعنی https://example.com بروید و مطمئن شوید که میتوانید از طریق HTTPS به آن دسترسی پیدا کنید.
- سپس وارد محیط مدیریت وردپرس شده و به قسمت تنظیمات عمومی وردپرس بروید.
- بخش “آدرس وردپرس” را تغییر دهید، در نتیجه آدرس بجای http:// با https:// شروع خواهد شد.
- بخش “آدرس سایت” را تغییر دهید، در نتیجه آدرس به جای http:// با https:// شروع خواهد شد.
- تغییرات را ذخیره کنید.
حالا فایل htaccess. را برای تغییر باز کنید و تکه کد زیر را به بالای آن اضافه کنید.
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]
قسمت example.com را با آدرس سایت خود جایگزین کنید. این باعث میشود تا تمامی درخواستها برای صفحات معمولی http به سمت صفحات https ریدایرکت شوند.
زمانی که این تغییرات را در فایل htaccess. انجام دادید، نوبت به تغییر فایل wp-config.php میرسد.حالا کد زیر را بالای قسمت “/* That’s all, stop editing! Happy blogging. */” وارد کنید.
define('FORCE_SSL_ADMIN', true);
فایل wp-config.php را ذخیره کنید. حالا شما باید سایتی داشته باشید که فقط از طریق HTTPS قاب دسترسی است. اگر کسی تلاش کند تا از طریق پروتکل HTTP با آن ارتباط برقرار کند، به سمت همان صفحات با پروتکل HTTPS منتقل خواهد شد.
در این مرحله مهم شما باید سایتتان را بازدید کنید تا مطمئن شوید که هیچ چیزی را از منابع و صفحات غیر امن بارگذاری نمیکند. به زبان دیگر، تمام منابعی که برروی صفحات شما بارگذاری میشوند باید از سمت سایتهای HTTPS باشند. معمولا این مساله وجود دارد که سایتهایی که جدیدا به HTTPS بهروزرسانی شدهاند، منابعی مانند عکسها و فونتها را از صفحات غیرامن بارگذاری میکنند. در این مورد باید با توسعه دهنده سایتتان در ارتباط باشید و یا اینکه خودتان بصورت تکی تمامی آدرسها را با آدرسهای امن جایگزین کنید.
زمانی که این تغییرات را انجام دادید و تمامی منابع با نسخههای امنتر جایگزین شدند، کارتان در رابطه با بالا آوردن سایت با پروتکل HTTPS به پایان رسیده است.
اپلیکیشنها، Log فایلها و دیگر فایلهای روی سرور را امن کنید
وقتی که به سایت وردپرسی فکر میکنید، این فکر میتواند شما را کمک کند تا سایت را مجموعه ای از فایلهایی بدانید که برای همگان از طریق اینترنت قابل دسترس است. هر فایلی که در پوشه عمومی سرور شما قرار دارد و برای دسترس عموم بلاک نشده است، توسط همگان از طریق اینترنت قابل دسترس است.
وقتی که به سایتتان با این دید نگاه میکنید، درک خواهید کرد که موارد زیر بصورت عمومی قابل مشاهده هستند:
- فایلهای پشتیبانی که تصادفا در دایرکتوری وب ذخیره شدهاند. این فایلها قابل دانلود هستند و حاوی فایل wp-config.php که اطلاعات ورود به پایگاه داده سایت در آن ذخیره شده است.
- فایلهای Log. برای مثال فایلهای web log و error log. فایل error log سرور شما، ساختار سایت را میتواند در اختیار هکر بگذارد که به او در ورود به سایت کمک شایانی میکند. همچنین این فایل گاها ممکن است دارای اطلاعات ورود نیز باشد.
- اپلیکیشنهای Php دیگری که ممکن است در کنار سایتتان باشد.ممکن است آنها را فراموش کرده و مدیریت نکرده باشید.
- فایلهای تستی که یادتان رفته پاکشان کنید. ممکن است شما از یک اسکریپت برای تهیه پشتیبان استفاده کنید و یا یک اسکریپت کاربردی عادی استفاده کرده و یادتان رفته باشد تا پاکش کنید.
- یک کپی کامل از سایت وردپرسیتان که در پوشه old و یا backup آن را ذخیره کردهاید. با انجام این کار شما یک سایت کامل قابل اجرا را برروی یکی از زیرپوشه ها ایجاد کرده اید که باید آن را نیز مدیریت و امن کنید. تعداد بسیار زیادی فایلها مدیریت نشده در این پوشهها وجود دارد که اگر آسیبپذیر باشند، میتوانند مقدمات نفوذ به سایت را فراهم نمایند.
- فایلهای موقتی که توسط ویرایشگرهایی مانند ViM ساخته شدهاند و حاوی تمام محتوای فایل تغییر یافته هستند. ویرایش فایل wp-config.php بصورت مستقیم در سایتتان و با استفاده از ویرایشگرهایی همچون ViM، یک نسخه موقت از آن را با نام wp-config.php.swp. تهیه میکند که حاوی اطلاعات نام کاربری و گذرواژه پایگاه دادهتان است و از طریق اینترنت قابل دانلود است.
وقتی که پوشهها و فایلهای سایتتان را مشاهده میکنید، حتما توجه کنید که با در دسترس بودن این فایلها و پوشهها در امان هستید و مشکلی با دسترسی همگان به این منابع ندارید.
یکی از رایجترین موردهایی که ما معمولا در مورد سایتهای هک شدهای میبینیم که مدیران آن به امنیت اهمیت میدهند و کارشان را در این مورد به نحو احسنت انجام میدهند، همین مساله است. آنها هنوز نمیدانند که سایتشان چرا هک شده و هکر همچنان چگونه میتواند فایلهای آنان را تغییر دهد و درب پشتی در آنها کار بگذارد. وقتی که سایت اینگونه مشتریان را بررسی میکنیم میبینیم که یک نسخه کپی از اصل سایت در یکی از زیرپوشهها وجود دارد که مدیریت نشده است. هکر توانسته است تا از یکی از آسیبپذیریهای این نسخه ساتفاده کرده و به سایت اصلی از این طریق دسترسی پیدا کند.
گاهی اوقات نیز ما اپلیکیشنهای مختلف دیگری را مانند phpmyadmin را مییابیم که بصورت مدیریت نشده و فراموش شده در هاست هستند و در واقع اینها راههای برای آلوده کردن سایت وردپرسی در اختیار هکرها قرار میدهند.
نصب فایروال وردپرس
در این مقاله ما بیشتر در مورد اینکه چگونه میتوانید سایتتان را امنتر کنید و امنیت عملیاتی خود را بالا ببرید و از سایت و اطلاعات کاربرانتان محافظت کنید، صحبت کردهایم. ما قویا پیشنهاد میکنیم تا علاوه بر همهی اینها، شما باید یک فایروال برای محافظت از سایتتان نصب کنید.
به طور کلی ما فکر میکنیم که یک فایروال خوب، ویژگیهای زیر را دارد:
- آنالیز بدافزار (Malware Scanning) – فایروال مورد نظر باید قابلیت تشخیص بدافزار را داشته باشد که توسط هکرها برروی سایت شما نصب میشوند. این قابلیت درواقع شناسایی تغییرات و ترمیم مجدد آنها را شامل میشود.
- محافظت در مقابل حملات Brute-force
- محافظت در مقابل تکنیکهای شناسایی. برای مثال محافظت در مقابل اسکن author = N که هکرها برای پیدا کردن نام کاربری شما استفاده میکنند.
- یک فایروال کامل WAF یا همان Web Application Firewall که rule-set به روز شدهای دارد.
- مهار و بلاک کردن خزندههای وب بصورت rate based و البته اطمینان از اینکه خزندههای گوگل به سایت شما دسترسی نامحدود داشته باشند.
- احراز هویت دو مرحلهای- ایجاد قابلیتی برای ورود از طریق موبایل و یا دستگاه دیگری که از طریق آن بتوان هویت شما را احراز کرد.
- بررسی گذرواژه – محصولی که انتخاب میکنید باید به شما کمک کند تا مطمئن شوید شما و دیگر کاربران سایت از گذرواژههای قوی استفاده می کنند.
- بلاک کشورها – اگر شما مورد هدف کشور خاصی قرار گرفتهاید، باید بتوانید تا دسترسی آنها را به قسمتی خاص و یا کل سایت را بلاک کنید.
- تکنیکهای پیشرفته بلاک شامل بلاک بازه مشخصی از آدرسهای IP و یا بر اساس اطلاعات user-agent.
فایروالهای بسیاری برای وردپرس هم اکنون موجود هستند. ما پیشنهاد میکنیم که محصولات مختلف را در کنار هم به مقایسه بگذارید و محصولی را که نیازهای شما را به خوبی جواب میدهد و همینطور مناسب دانش فنی شماست و با بودجه شما هماهنگ است، انتخاب کنید. البته مطمئن شوید که یک تیم پشتیبانی با سرویس دهی خوب برای پاسخگویی به مشکلات شما در پشت صحنه این فایروال وجود دارد.
استفاده از Logها برای تشخیص و اجتناب از حملات
یکی از مهمترین منابع اطلاعاتی سایتتان همین فایلهای Log هستند که معمولا مدیران سایتها تا زمانی که نیاز نداشته باشند، آنها را نادیده میگیرند. دوتا از مهمترین Log فایلهای سایت که در دسترس هستند یکی access log و دیگری error log هستند.
برای دسترسی به این فایلها باید با شرکت هاستینگ تماس بگیرید و از آنها مکان این فایلها را بپرسید. در نظر داشته باشید که برخی از هاستینگ ها چندین error log تولید میکنند و هرکدام را در مکان متفاوتی ذخیره میکنند و بستگی به این دارند که error در کجا رخ داده است. بنابراین از پشتیبانی بپرسید که آیا برای error log تنها یک فایل دارند یا اینکه بقیه فایلها کجا نگهداری میشوند.
فایل Access Log وب سرور
اگر از افزونههای امنیتی استفاده میکنید، احتمالا میتواند ترافیک سایت خود را بصورت زنده از طریق پنل مدیریت وردپرس مشاهده کنید. اگر افزونه امنیتی این چنینی ندارید، هنوز هم میتوانید این ترافیک را با استفاده از فایل access log مربوط به وب سرورتان مشاهده نمایید.
هر سطر از این log چیزی شبیه به عکس پایینی است. این مثال از log وب سرور Apache است که اکثر سایتهای وردپرسی برروی آن میزبانی میشوند.
وقتی که به access log نگاه میکنیم، درخواستهای جالبی را میبینیم که میتوانند به ما در دیباگ کردن سایتمان کمک کنند.برای مثال :
::1 - - [12/Sep/2015:06:01:36 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.10 (Ubuntu) (internal dummy connection)"
همانطور که میبینید این درخواست از سمت آدرس 1:: آمده است که یک IPv6 است و به معنی آدرس خانه و آدرس loopback استفاده میشود. بنابراین در اینجا ماشین به سمت خودش درخواستی فرستاده است. در این مثال اگر شما internal dummy connection را در گوگل جستجو کنید، در خواهید یافت که وب سرور آپاچی این درخواست را برای خودش فرستاده تا مطمئن شود که سیستم همچنان آماده پردازش است.
یکی درخواست جالب دیگر :
91.196.50.33 - - [11/Sep/2015:18:58:29 +0000] "GET http://testp1.piwo.pila.pl/testproxy.php HTTP/1.1" 404 457 "-" "Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/31.0"
این درخواست دیگری است که فرستنده آن را به سمت سرور من ارسال کرده است تا ببیند که آیا روی سرور من پراکسی سرور اجرا شده است یا خیر. اگر سرور من سرویس پراکسی دهد، به این معنی است که آنها میتوانند برای رفتن به یک سایت دیگری، از سایت من استفاده کنند. این مورد برای پنهان کردن هویت در اینترنت بسیار مفید است.
فایل Error Log وب سرور
فایل error log وب سرور شما دارای اطلاعات زیادی است که به شما نشان میدهد چه حملاتی روی سایتتان انجام شده است. در بالا در مورد افزونههای امنیتی و تماشای ترافیک زنده سایتتان صحبت کردیم. برخی از این افزونهها مانند افزونه Wordfence اطلاعات جغرافیایی افرادی که به سایت شما درخواست میفرستند را نشان میدهد. با این حال همین افزونهها نیز تمامی اطلاعات موجود در فایل error log را نشان نمیدهد و معمولا error های page not found را نشان میدهند. به همین دلیل شما باید شخصا این فایل را مورد بررسی قرار دهید.
یک رکورد معمولی از این فایل مانند مثال پایین است. اگر دقت کرده باشید وقتی در بالا در مورد درخواستی برای چک کردن proxy سرور صحبت کردیم، گفتیم که این درخواست چه پیامی را دریافت خواهد کرد. این رکورد error مربوط به آن در خواست را نشان میدهد:
[Fri Sep 11 18:58:29.320573 2015] [:error] [pid 26947] [client 91.196.50.33:60137] script '/var/www/html/testproxy.php' not found or unable to stat
همانطور که میبینید اخطار page-not-found در فایل error log برای این درخواست نوشته شده است. فایل error log حاوی اطلاعات بسیار کمتری نسبت به فایل access log است. به طور کلی تمامی درخواستها به سمت سایت شما در access log ذخیره میشوند که این باعث میشود تا فیلتر کردن درخواستهای مشکوک کمی چالش برانگیز باشد. اما فایل error log تنها زمانی رکورد ایجاد میکند که مشکلی پیش آید، بنابراین اگر به دنبال یک حرکت مشکوک هستید، در اینصورت ابتدا به سراغ error log بروید.
در اینجا سطر جالبی از این فایل را مشاهده میکنید که یک تلاش برای هک کردن سایت را نشان میدهد:
[Fri Sep 11 15:37:43.722390 2015] [:error] [pid 1336] [client 127.0.0.1:43067] PHP Warning:<span class="Apple-converted-space"> </span>session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in /usr/local/files/site/wp-content/plugins/someplugin/cptclass.php on line 4, referer: http://example.com/page.html
برخی از اطلاعات را برای اینکه مشخصات افراد در امان باشد،تغییر دادهایم، اما همانطور که میبینید مهاجم یک کوکی مخصوص را به سمت سایت فرستاده است، با این امید که بتواند یک آسیبپذیری مشخص را اکسپلویت کرده و یا اینکه با این تریک بتواند اطلاعات حساسی که نیاز دارد را بدست آورد. کوکی میتواند باعث ایجاد error شده و مسیرهای فایلها را به همراه اطلاعات مفید دیگر نشان دهد. همچنین این کوکی ممکن است به اشتباه توسط قسمتی از اپلیکیشن پردازش شده و یک آسیبپذیری را اکسپلویت کند – مثلا یک آسیبپذیری SQL injection، البته اگر کوکی در پایگاه داده ذخیره شده باشد.
فایلهای error log منبع غنی از اطلاعات هستند که ویژگیای که آنها را مفید میسازد این است که زمانی درون این فایلها نوشته میشود که اتفاق خاصی بیفتد. بنابراین ما به مدیران سایت پیشنهاد میکنیم که error log ها را به طور منظم چک کنند. این باعث میشود تا حملهها را کشف کرده و تنظیمات غلط را برروی وب اپلیکیشنهای خود بیابند.
هاست اشتراکی: تعهدات شرکتهای هاستینگ در چه محدوده ای است
اگر شما از هاستهای اشتراکی استفاده میکنید، آنها به شما وب سروری کارآمد و در کنار آن پایگاه داده با یک پنل مدیریت برای مدیریت سایتتان در اختیار شما خواهند گذاشت. شما در یک سرور با دیگر مشتریان در اشتراک خواهید بود ولی فایلهای مجزا و پایگاه داده خودتان را خواهید داشت تا بتوانید سایت خودتان را میزبانی کنید. در دید مشتریانتان سایت شما به نظر برروی وب سرور خودتان است و دامین اختصاصی خودتان را دارید.
اگر شما از هاست اشتراکی که البته محبوبترین و کم هزینهترین نوع هاست محسوب میشود، استفاده میکنید، این قسمت به شما دیدی درباره وظایف شما و شرکت هاستینگ در مورد تامین امنیت میدهد.
شرکت هاستینگی که با آن قرارداد دارید، در مقابل موارد زیر مسئول است:
وب هاستینگ شامل قسمتهای بسیار زیادی از جمله فیزیکی و مجازی میشود. بهترین راه برای فکر کردن درباره مدل کاری وب هاستینگ، تصور آن همانند لایههای شبکه OSI است. این از لایه فیزیکی شبکه شروع میشود و به سمت بالا تا لایه اپلیکیشن میرسد. بنابراین، از ابتدا شروع می کنیم که نزدیکترین لایه به دنیای فیزیکی و کابل کشی شبکه است. شرکت خدمات هاستینگ شما باید برای موارد زیر متعهد باشد:
- کابل کشی شبکه
- مسیریابهای (Routers) شبکه و امنیت آنها. اگر برای مثال سایت شما مورد هدف حملات DDOS قرار گرفت، هاستینگ شما باید از DDOS mitigation استفاده کند که از مسیریابی برای بخشی از پردازش عملیات فیلترینگ جهت توقف حمله استفاده میشود.
- سوئیچها – سوئیچهای شبکه میتوانند از راه دور در دسترس باشند که هاستینگ باید آنها را امن کند.
- سرمایش و کنترل جریان برق
- امنیت فیزیکی اطلاعات شما، سایتما و هرگونه فایل پشتیبانای از اطلاعات شما
- ماشینهای فیزیکی که سایت شما برروی آن میزبانی میشوند شامل : تامین برق، هارد درایوها، رم، CPU و دیسک کنترلرها و غیره.
باید به این نکته مهم توجه کنید که زمانی که از امنیت صحبت میکنیم، شرکت هاستینگ باید مسئول تامین امنیت فیزیکی سایت شما باشد. آنها معمولا تمهیداتی مانند احراز هویت بیومتریک مانند اثر انگشت و یا عنبیه چشم را در بخش ورودی دیتاسنتر لحاظ میکنند. این حفاظت ممکن است چند لایه باشد و علاوه بر لایههای بیومتریکی، لایههای دیگری نیز وجود داشته باشد تا مطمئن شویم، شخصی که وارد دیتا سنتر میشود، همان شخصی است که مجوز لازم را دارد.
حالا کمی از لایه سخت افزار و فیزیکی شبکه فاصله بگیریم، علاوه بر اینها شرکت هاستینگ شما باید برای موارد زیر نیز متعهد شود:
- سیستم عامل هاست که برروی سرورهای فیزیکی اجرا شدهاند و تامین امنیت این سیستم عاملها
- ماشینهای مجازی مختلف که برروی سرور فیزیکی قرار دارند و سایت شما را میزبانی می کنند، شامل امنیت این ماشینهای مجازی. بیشتر شرکتهای هاستینگ از مجازی سازی استفاده میکنند و به همین دلیل ماشینهای مجازی زیادی برروی سرورهای فیزیکی خود دارند.
- اگر برروی یک ماشین مجازی، چندین کاربر سایتهایشان را میزبانی میکنند، این وظیفه شرکن هاستینگ است تا از دسترسی کاربران به فایلهای یکدیگر جلوگیری کند. معمولا برای این کار از مجوزهای کاربران و مجوز فایلها استفاده میشود تا این مالکیت و حریم شخصی را مدیریت کند. پلانهای هاستینگی که ماشین مجازی را بصورت اختصاصی در اختیارتان میگذارند کمی از این پلانها گرانتر هستند. اما در واقع شما برروی یک ماشین مجزا و سیستم عاملی مجزا از دیگران قرار دارید.
- ماشین فیزیکی ای که پایگاه داده شما برروی آن قرار دارد و طبیعتا امنیت این پایگاه دادهها. شرکت هاستینگ باید تدابیری را مهیا کند تا شما نام کاربری و گذرواژه خودتان را داشته باشید و با آن به پایگاه داده خود دسترسی پیدا کنید، به طوری دیگر کاربران توانایی خواندن و یا تغییر اطلاعات پایگاه داده شما را نداشته باشند.
- هاستینگ همچنین باید در مورد دیگر نرمافزارهای سمت سرور همچون Node.js و Redis نیز باید مسئول باشد.
اگر سایت شما هک شد، هاستینگ شما میتواند در مورد موارد زیر به شما کمک کند. در نظر داشته باشید که شرایط و قوانین بین شرکتهای مختلف کاملا متغیر است. بنابراین سعی کنید شرکتی را انتخاب کنید که پشتیبانی بهتری به شما ارائه میدهد.
- شناسایی یک هک. شرکتهای هاستینگ معمولا یک آنالیزر بدافزار را برروی فایلهای مشتریانشان اجرا میکنند تا آنها را اسکن کند و میتواند در مورد فایلهای آلوده به شما اخطار دهد.
- سر و سامان دادن به سایت هک شده. شرکتهای هاستینگ ممکن است سایت شما را بطور کلی از هک برگردانده و مثله روز اول تحویل شما دهند و یا ممکن است کلا برای سایت هک شده شما کاری نکنند و یا اینکه بعضی از مراحل را انجام دهند. این بستگی به سطحی از پشتیبانی که ارائه میدهند دارد. معمولا قیمت اصلیترین فاکتوری است که سطح پشتیبانی را مشخص میکند و سرویسهایی با قیمت بالاتر، سطح بالاتری از پشتیبانی را ارائه میدهند.
شرکت ارائه دهنده هاست شما در مورد موارد زیر معمولا مسئولیتی ندارد:
توجه کنید که بعضی از شرکتهای هاستینگ گران قیمت، ممکن است خدمات زیر را ارائه دهند اما به طور کلی، هاستینگهایی با قیمتهای عادی که هاست اشتراکی ارائه میدهند معمولا در این موارد کمکی نمیکنند و مسئولیتی نیز ندارند. این موارد مسئولیتهای شما محسوب میشوند:
- اطمینان از امن بودن اپلیکیشنهای نصب شده. اسکریپتهای نال شده نصب نکنید.
- اطمینان از اینکه اطلاعات ورود به پایگاه داده شما امن خواهند ماند و بصورت عمومی در دسترس نخواهند بود.
- به روز نگه داشتن پوستهها، افزونهها و هسته وردپرس. اگر آسیبپذیری جدیدی اعلام شد و نحوه ترمیم آن انتشار یافت، این وظیفه شماست تا آن ترمیم را اجرا کنید. در برخی شرایط، پیش آمده است که حتی هاستینگهایی با قیمت کم نیز اقدام به یک برروزرسانی سریع و اجباری برای تعداد زیادی از مشتریانشان در مورد یک آسیب پذیری جدی کرده اند. اما در شرایط نرمال اینگونه نخواهد بود.
- نصب یک وب اپلیکیشن فایروال. هاستینگها معمولا نمیتوانند پیش بینی کنند که شما از چه نرمافزاری استفاده میکنند، از این رو نمیتوانند فایروالی مخصوص نرمافزار شما را ارائه دهند.
- اسکن سورس کد سایت برای تغییرات غیرمجاز. نرم افزارهای بسیار زیادی برای استفاده در سایت شما موجود است. هاستینگها هیچگاه نمیتوانند یک کپی از تمامی آنها را نگهداری کنند و سورس آنها را با نرم افزار شما مقایسه کنند و بدانند که تغییر یافته است یا خیر. برعکس افزونه ای مانند افزونه Wordfence یک کپی از هر ورژن از قالبها و افزونهها و فایلهای هستههایی که تا هم اکنون برروی wordpress.org انتشار یافته است را دارد، بنابراین در این راه میتواند به شما بسیار کمک کند.
- محافظت در مقابل حملات brute-force. وبسایتها از نسخههای مختلفی از سیستمهای انتشار محتوا از جمله وردپرس و جوملا و دروپال قدرت میگیرند و نرمافزارهایی مانند phpmyadmin نیز برای مدیریت پایگاه دادهها برروی سرور نصب شده اند. هر کدام از اینها، صفحه ورود و مکانیزم احراز هویت مخصوص به خود را دارند. اکسن تمامی نرمافزارهای شما و محافظت از صفحه ورود تک تک آنها برای هاستینگ شما وظیفهی مشخصی محسوب نمیشود.
- ایجاد مکانیزم احراز هویت دو مرحلهای برای سایتتان و یا مکانیزمهای مختلف دیگر برای ورود به سایت.
همانطور که در دیدید، قالب کلی مسئولیت های شما در مورد امنیت سایتتان و اطلاعات داخل پایگاه داده است. شرکت هاستینگ شما تمامی لایههای امنیتی پایین تر از آن را برای شما مهیا میکند. در این نقطه، شما نیاز دارید تا مطمئن شوید که تمامی کدهایتان امن است، اطلاعات ورود امن هستند، از گذرواژههای قویای استفاده شده است و سورس کد و تمامی اطلاعاتی که باید مخفی بمانند، در مکان امنی هستند.
اگر با هرگونه مشکل امنیتی ای مواجه شدید، حتما از پشتیبانی هاستینگتان کمک بخواهید. حتی هاستینگ های ارزان قیمت نیز سطوح مختلفی از پشتیبانی را به شما ارائه خواهند داد، مخصوصا اگر مشکل شما باعث ایجاد مشکل برای دیگر کاربران نیز شود و یا اینکه مشکل شما، مشکل کاربران دیگر نیز باشد.
امن کردن لینوکس سرور برای هاستینگ اختصاصی
در این بخش ما فرض میکنیم که شما با SSH آشنا هستید و یکی از لینوکسهای خانواده دبیان، مانند اوبونتو را استفاده میکنید. همچنین ما در نظر میگیریم که شما ترمینال لینوکس را باز کردهاید و آمادهاید تا دستورات را وارد کنید. ما چندین دستور را در زیر معرفی خواهیم کرد تا به شما کمک کند که بدانید چه سرویسهایی در حال اجراست و همچنین سیستم لینوکس خود را امنتر کنید.
هاست شخصی وردپرس برروی ماشینهای مجازی پیچیدهتر از هاست اشتراکی است، ولی این پیچیدگی همراه با مزیتهایی است. شما میتوانید عملکرد ماشین مجازی خود را مانیتور کنید. همچنین شما میتوانید تمامی تنظیمات را برای راه اندازی سایت خود تغییر دهید و شخصی سازی کنید. این شخصی سازی میتواند هرچیزی باشد، برای مثال انتخاب فایروال خاص برای نصب و یا تغییر تنظیمات وبسرور.
وقتی که شما از هاست شخصی استفاده میکنید، مسئولیت تامین امنیت ماشین مجازی و تمامی سرویسهایی که برروی آن در حال اجراست، به عهده خودتان است. ما در اینجا چند نکته کوچک را ارائه خواهیم کرد تا در امن کردن ماشین لینوکسی و سایت وردپرسیتان به شما کمک کند.
سرویسهایتان را چک کنید
زمانی که سایت وردپرستان را راه اندازی کردید و بالا آمد، اولین چیزی که باید چک کنید، سرویسهای روی ماشینتان است که از طریق اینترنت قابل دسترسی است. شما میتوانید این کار را با استفاده از وارد کردن دستور زیر در ترمینال لینوکس انجام دهید:
netstat -aptn|grep LISTEN
دستور Netstat به همراه این پارامترها، تمامی ارتباطات TCP روی ماشین شما را نشان خواهد داد. وقتی که شما با آن را با دستور grep به این صورت استفاده میکنید، فقط سرویسهایی را خواهید دید که در حال گوش دادن یا همان Listening برای یک اتصال جدید هستند. این یک راهکار عالی برای این است که بدانید چه سرویسهایی روی ماشینتان وجود دارد که برروی اینترنت در دسترس است و افراد میتوانند به آن متصل گردند.
در نظر داشته باشید که در مثال زیر، ما این دستور را به عنوان کاربر root استفاده کردهایم. اگر شما با کاربر root وارد نشدهاید ( که احتمالا هم همینگونه است ) پیشنهاد میکنیم تا این دستور را با دستور sudo اجرا کنید. به اینصورت ‘sudo netstat -aptn|grep LISTEN’
اجرای دستور netstat با مجوزهای root باعث میشود که شما بتوانید process ID و نام متعلق به هر پورت را ببینید. در غیر اینصورت این اطلاعات را نحواهید دید.
اینجا مثالی از خروجی netstat را مشاهده میکنید:
به آدرسهای IP و پورتهای مقابل آنها توجه کنید.
- خیلی راحت و امن میتوانید تمام آدرسهای ۱۲۷.۰.۰.۱ را نادیده بگیرید.چون این سرویسهای فقط از روی همان ماشین قابل دسترسی هستند.
- شما باید در مورد سرویسهایی که روی 0.0.0.0 در حال گوش دادن هستند حساس باشید، چون این به معنی دسترس بودن بصورت عمومی است.
- همچنین شما باید در مورد سطرهایی که به صورت IPV6 و به این شکل 80::: نوشته میشوند نیز حساس باشید. به این دلیل که آنها هم بصورت عمومی در دسترس هستند. سه تا colon نیز به معنای دسترس بودن برای عموم است.
- شما باید در مورد سرویسهایی که برروی IP External تان در حال گوش دادن هستند نیز حساس باشید.چون آنها نیز بصورت عمومی دسترس پذیر هستند. مانند 69.46.36.6:80
خوب در مورد مثال بالا میدانیم که 127.0.0.1:3306 متعلق به MySQL است و فقط از طریق همان ماشین قابل دسترسی خواهد بود، که این خبر خوبی است و جای نگرانی ندارد.
0.0.0.0:22 به دلیل اینکه برای عموم در دسترس است، شاید نگران کننده باشد. اما میدانیم که این پورت مربوط به سرویس SSH بوده و امن است.
همچنین ممکن است که 0.0.0.0:443 را ببینید که HTTPS server شما است و این هم بسیار خوب است و مورد امنیتی خاصی ندارد.
اگر در لیست خروجیها، پورتی را مشاهده کردید که سرویس مربوط به آن را نمیشناسید، بیشتر بگردید. شما میتوانید process name را در سمت راست شماره پورت پیدا کنید. آن را در گوگل جستجو کنید و ببینید که آیا قادر به شناسایی سرویس هستید یا خیر. اگر باز هم نتوانستید سرویس مورد نظر را بیابید، به آن پورت telnet کنید و ببینید که چه پاسخهایی میگیرید.
همانطور که میبینید، netstat یک راهکار عالی برای چک کردن این است که روی سرور شما چه سرویسهایی در حال اجراست. سرویسهایی که نمیخواهید بصورت عمومی در دسترس باشند نباید برروی 0.0.0.0 یا ::: و یا آدرس IP پابلیک سرور در حال گوش دادن باشند. اگر سرویسی را پیدا کردید که نمیخواهید در دسترس عموم باشد، تنظیمات آن را تغییر دهید تا مطمئن شوید که فقط از روی ماشین خودتان قابل دسترسی باشد.
همه چیز را upgrade کرده و به روز نگه دارید
همانطور که همیشه برای وردپرس آسیبپذیریهای جدید ظاهر میشود، برای لینوکس هم همینطور است. این دستورات را اجرا کنید:
apt-get update
apt-get upgrade
همچنین میتوانید از بستهی “unattended-upgrades” استفاده کنید تا مطمئن شوید که اوبونتو شما همیشه بهروز است.
دستورات بالا مخصوص لینوکس اوبونتو است. اگر شما یکی از توزیعهای ردهت و یا فدورا را استفاده میکنید، بجای آن خیلی راحتی از دستور زیر استفاده کنید:
yum check-update
و
yum update
اگر از unattended upgrades و یا دیگر مکانیزمهای بهروز کردن خودکار سیستم استفاده نمیکنید، پیشنهاد میکنیم که هفته ای یک بار وارد سیستم لینوکس خود شده و بستهها را به صورت دستی بهروز کنید.
محافظت از SSH در مقابل حملات brute-force
یکی از جالبترین ابزارها برای لینوکس سرور fail2ban نام دارد. این ابزاری برای محافظت در مقابل حملات brute-force است که IP آدرسهایی که چندین بار موفق به ورود نشدهاند را بلاک میکند. نصب این ابزار بسیار راحت است:
apt-get update
apt-get install fail2ban
کار تمام است. این دستورات ابزار fail2ban را نصب کرده و فعال میکند و شما یک محافظ در مقابل حملات بروت فورس خواهید داشت.
یک فایروال نصب کنید
نصب فایروال برروی سرور لینوکسی که بصورت عمومی در دسترس است، ایده بسیار خوبیست. این باعث پیشگیری از نصب تصادفی سرویسهایی میشود که برای عموم در دسترس است. همچنین جلوی بیشتر حملات را میگیرد. با این حال، فایروال میتواند عملکرد یک سرور شلوغ و یا سروری که چندین ارتباط شبکه به آن متصل شده است را پایین آورد.
همچنین فایروال برروی سرور لینوکستان میتواند یک حس اشتباه امنیت را به شما بدهد. برای مثال فرض کنید که یک فایروال نصب کردهاید ولی نسخهی آسیبپذیری از SSH را برروی سرور خود دارید و این سرویس برای همگان در دسترس است، در اینصورت فایروال نمیتواند از شما محافظت کند.
فایروالهای بسیار زیادی برای نصب روی لینوکس وجود دارد. در اینجا ما چندتا از آنها را معرفی خواهیم کرد و از آنجاییکه اوبونتو توزیع محبوب ماست و ما نیز از آن استفاده میکنیم، در اینجا چند فایروالی که با اوبونتو بیشتر مرتبط هستند را ذکر کرده ایم:
- فایروال UFW، که به آن Uncomplicated Firewall نیز میگویند، فایروالی است که به راحتی تنظیم و کانفیگ میشود. از iptables برای راهاندازی rule های فایروالی استفاده میکند و رابط کاربری گرافیکی به نام Gufw نیز دارد.
- فایروال Shorewall به آسانی ufw کانفیگ نمیشود، ولی رابط کاربری بهتری نسبت به iptables دارد و ویژگیهای زیادی دارد.
- و در نهایت IPTables لینوکس که یک ابزار command line که در بیشتر فایروالها برای پیاده سازی ruleها به کار میرود. Shorewall و UFW و دیگر محصولات فایروال از iptables در درون سیستم خود استفاده کردهاند. شما میتوانید iptables را خودتان شخصا کانفیگ کنید.
جلوگیری از لاگین بصورت Plain-Text
هیچگاه سرویسهایی را که اجازه لاگین بصورت رمزنشده و یا plain-text را میدهند، نصب نکنید. این شامل FTP که از لاگین بصورت plain-text روی پورت ۲۱ استفاده می کند، telnet که روی پورت ۲۳ است، POP روی پورت ۱۱۰ و یا هر سرویس دیگری که نام کاربری و یا گذرواژه را بصورت plain-text برروی شبکه ارسال میکند.
به طور کلی
تعداد سرویسهایی را که برروی ماشینتان اجرا می کنید به حداقل برسانید. تعداد کاربران و حسابهای کاربری که دسترسی دارند را نیز به حداقل تعداد برسانید.
مطمئن شوید که توزیع لینوکس مناسب و با پشتیبانی مناسب را انتخاب میکنید. شما میتوانید با اجرای دستور “do-release-upgrade” اوبونتو خود را upgrade کنید.
شما میتوانید با استفاده از دستور زیر، تمام فایلهای تغییر یافته در ۲۴ ساعت اخیر برروی ماشین لینوکسی را ببینید:
find /usr -mtime -1 -ls
شما میتوانید usr/ را به home/ و یا root/ تغییر دهید. این بستگی دارد که میخواهید فایلهای تغییر یافته کدام مسیر را مشاهده کنید. این میتواند به شما در پیدا کردن فایلهای آلوده کمک کند.
با احتیاط تمامی ترافیکهای غیرمعمول ، یا پردازش برروی cpu و یا disk سرور را کنترل کنید. اگر از سرویسهایی مانند Linode استفاده میکنید، آنها به شما مجموعه از چارتها را ارائه میدهند که برای مانیتور کردن منابع سیستم از آن میتوانید استفاده کنید و در صورت بروز فشار برروی سرور از طریق ایمیل به شما اخطار میدهند.
امن کردن ماشین لینوکسی توسط خودتان یک مسئولیت بزرگ است که به راحتی میتوانید آن را به شرکت هاستینگ بسپارید. اما مزیتهایی که با شخصیسازی لینوکس خود به دست میاورید، کلیدی هست. و البته اینکار بسیار لذت بخشتر است.
کارهای اشتباهی که باید از آنها اجتناب کنید
روی شاخهی /wp-admin/ گذرواژه نگذارید
یکی از معمولترین اشتباهاتی که مدیران وردپرس انجام میدهند این است که برروی ناحیه مدیریت سایت خود و برروی پوشه wp-admin گذرواژه میگذارند. آنها با تغییر فایل htaccess. باعث میشوند تا زمانی که کسی میخواهد به این پوشه دسترسی پیدا کند و یا وارد پنل مدیریت شود، وب سرور یک احراز هویت ساده را به آنها نشان دهد.
این احراز هویت ساده یک فرم ساده ای است که در مرورگر بصورت پاپ آپ ظاهر میشود و از شما نام کاربری و گذرواژه ورود را میخواهد و پیاده سازی آن اصلا کار سختی نیست و فقط باید چند خط کد به htaccess. اضافه کرد.
مشکل این کار این است که بعضی از بازدیدکنندگان سایتتان نیاز دارند تا از این ناحیه برای ورود به پنل خود استفاده کنند. همچنین AJAX handler وردپرس نیز در این پوشه قرار دارد. اینکه این بخش فقط توسط مدیران باید قابل دسترسی باشد یک اشتباه رایج است و هر ویژگیای در وردپرس که نیاز به AJAX داشته باشد باید به این پوشه دسترسی پیدا کند.
لطفا Table Prefix پایگاه داده خود را تغییر ندهید
یک باور عمومی اشتباه وجود دارد که با تغییر پیشوند جداول، پایگاه داده شما در مقابل بسیاری از حملات مصون خواهد ماند. این کاملا اشتباه است.
دستوری در MySQL وجود دارد به این شکل “show tables”. این دستور تمام جداول شما را نشان میدهد. هر ربات و یا انشان مهاجمی این دستور را قبل از دسترسی به جداول پایگاه داده شما اجرا میکند و پیشوندهای جداول شما را میبیند و قبل از انجام هرگونه درخواست دیگری آن را لحاظ میکند.
پیشوند پیشفرض جداول در وردپرس “_wp” است. اکثر هاستینگها بعد از اینکه سایتتان را کانفیگ کردید، آن را تغییر میدهند. بنابراین احتمالا این پیشوند پیشفرض تغییر یافته است و شما نیازی ندارید تا افزونه و یا اسکریپتی برای انجام اینکار نصب کنید و سایت خود را وارد ریسکهای غیرضروری کنید.
نتیجه گیری
امنیت وردپرس نیاز به یک فرآیند یادگیری دارد، یک نصب اولیه امن در ابتدای تنظیمات سایت و بعد از آن مدیریت سایت و فعالیتهایی برای داشتن یک سایت امن. ما امیدواریم که توانسته باشیم برای شما مطالب پایه ای از امنیت وردپرس را ارائه کرده و به شما راهنمایی برای راه اندازی یک سایت وردپرسی امن تقدیم کرده باشیم.
ما شما را با این سه مفهوم پایه از امنیت تنها میگذاریم:
- Availability – شما باید مطمئن باشید که سایتتان همیشه و در همه زمان در دسترس است. این به معنی آن است که سایتتان عملکرد خوبی برای بازدیدکنندگان دارد و حملات تکذیب سرویس را تشخیص و رد میکند.
- Integrity – شما باید مطمئن شوید که پایگاه دادهتان مشکلی ندارد، تنها نویسندگان شما میتوانند محتوا به سایت شما اضافه کنند و فایلهای سایت شما خراب نیستند و یا آلوده نشدهاند.
- Confidentiality – شما باید مطمئن شوید که اطلاعات خصوصی شما شامل سورس کد و نام کاربری و گذرواژه شما امن خواهد بود و در دسترس هکرها و یا افراد دیگر نباشد.
سه گانه AIC یعنی (availability, integrity, confidentiality) یک راه عالی برای ارزیابی امنیت شماست و به شما یادآور میشود که هدفهای شما چه چیزهایی هستند. موفق باشید و امن بمانید!