مقابله با حملات اجرای کد از راه دور
مقالات تخصصی IT و هاستینگ

اجرای کد از راه دور (Remote Code Execution) در وردپرس

اگر در مورد حفظ امنیت وب سایت خود جدی هستید، وقت آن است که با خطرات آسیب پذیری های اجرای کد از راه دور و نحوه مبارزه با آنها آشنا شوید.

Remote code execution یا به اختصار RCE چندین تکنیک مختلف هک و حملات سایبری را شامل می شود اما تمامی آنها یک بخش عمده مشترک دارند. RCE که گاهی اوقات تزریق کد (code injection) نامیده می شود، روشی رایج برای هکرها جهت به خطر انداختن انواع وب سایت ها، از جمله سایت هایی است که وردپرس را به عنوان سیستم مدیریت محتوای خود اجرا می کنند. در این مقاله، حمله اجرای کد از راه دور و اقداماتی که برای جلوگیری از آن باید انجام دهید، بررسی خواهد شد.

حمله اجرای کد از راه دور

تصویر(1)

حمله اجرای کد از راه دور (RCE) چیست؟

اجرای کد از راه دور (RCE) نوعی آسیب پذیری است که برای هکر این امکان را فراهم می کند تا به رایانه یا پایگاه داده مرتبط با شخص دیگری، دسترسی داشته باشد و در آن تغییر ایجاد نماید. طی حمله RCE، هکر توسط بدافزار به سرور یا رایانه دسترسی پیدا می کند. این حمله بدون اطلاع مالک سخت افزار انجام می شود و مهم نیست که داده ها در کجای دنیا ذخیره می شوند.

جزئیات حملات RCE

حملات اجرای کد از راه دور مشابه حمله موریانه ها است:

  • موریانه در زیر خانه حفاری می کند.
  • صاحب خانه از آن اطلاعی ندارد زیرا اگر از آسیبی که موریانه ایجاد خواهد کرد مطلع بود، با آن مقابله می کرد.
  • موریانه پایه های خانه را می خورد تا جایی که دیگر پابرجا نخواهد ماند.

این استعاره دقیقاً مشابه نحوه عملکرد حمله RCE نیست و در واقع حمله RCE بدتر است. برخلاف موریانه ای که باید در خانه باشد تا آسیب ایجاد نماید، هکر می تواند از هر جایی به وب سایت شما دسترسی یابد. حملات RCE فوق العاده خطرناک هستند زیرا هکرها می توانند هر کد مخربی را روی سرور آسیب پذیر اجرا کنند. واقعاً هیچ محدودیتی برای آسیبی که یک هکر ماهر RCE می تواند به سایت وردپرسی شما وارد کند در صورت دسترسی به آن وجود ندارد.

یک مثال از اجرای کد از راه دور

در سال 2018، مایکروسافت یک آسیب‌پذیری اجرای کد از راه دور که در نرم‌افزار Excel وجود داشت را فاش کرد. مهاجم می توانست از این آسیب پذیری برای اجرای کد دلخواه در متن کاربر سوء استفاده کند. اگر کاربر فعلی با دسترسی مدیریت وارد شده باشد، مهاجم می تواند کنترل سیستم آسیب دیده را در دست بگیرد. سپس هکر این امکان را دارد تا برنامه های موردنظر را نصب کند، داده ها را مشاهده، ویرایش و حذف نماید یا اکانت های جدید با دسترسی کامل ایجاد کند. کاربرانی که دسترسی حساب‌های آنها کمتر است، نسبت به کاربرانی که دسترسی مدیریتی دارند، کمتر تحت تأثیر قرار خواهند گرفت.

انواع مختلف اجرای کد از راه دور

تصویر(2)

آشنایی با انواع مختلف اجرای کد از راه دور

برای درک بهتر هک های RCE، باید با انواع مختلف اجرای کد از راه دور آگاه باشید:

  • تزریق SQL یا SQL Injections

وب سایت های وردپرسی از پایگاه داده MySQL استفاده می کنند. تزریق SQL زمانی اتفاق می افتد که یک مهاجم به پایگاه داده وردپرس و داده های وب سایت دسترسی پیدا کند. با تزریق SQL، ممکن است مهاجم بتواند یک حساب کاربری جدید در سطح مدیریت ایجاد کند و از آن برای ورود و دسترسی کامل به وب‌سایت وردپرسی بهره ببرد. همچنین SQL Injection می تواند داده های جدیدی از جمله لینک هایی به وب سایت های مخرب یا اسپم را در پایگاه داده وارد کند.

بسیاری از آسیب پذیری های RCE به SQL وردپرس حمله می کنند. به عنوان مثال، اگر برنامه‌ای نیاز به خواندن نام‌های کاربری پایگاه داده داشته باشد، ممکن است یک توسعه‌دهنده با استفاده از کدهایی مانند نمونه زیر برای جستجوی نام کاربری، این کار را انجام دهد:

 

مشکل این کوئری مربوط به RCE چیست؟ 

بازدیدکنندگان سایت وردپرسی شما، حتی هکرهایی که قصد سوءاستفاده دارند، می توانند یک نام کاربری ایجاد کنند. به عنوان مثال، هکر ممکن است "1"1"= –، OR" را وارد کند، که منجر به یک عبارت SQL مانند نمونه زیر می شود:

 

با فرض اینکه برنامه به جستجو در کل پایگاه داده برای یافتن نام‌های کاربری سایت می‌پردازد و سپس هر فیلدی را که در آن یک نام خالی وجود دارد انتخاب می‌کند، وقتی 1 برابر با 1 است، مورد دوم همیشه درست خواهد بود. آنچه در نهایت اتفاق می افتد این است که تمام نام های کاربری موجود در پایگاه داده SQL، به هکرها ارائه می شوند. اما نشت داده به این شکل، تنها خطر تزریق SQL نیست. مهاجم می تواند دستورات زیادی را به پایگاه داده SQL ارسال کند که داده های مهم سایت وردپرسی را بازنویسی یا حذف نماید.

  • اسکریپت بین سایتی (Cross-Site Scripting)

Cross-Site Scripting یکی دیگر از آسیب پذیری های RCE است و به جای سرورها مستقیماً بر بازدیدکنندگان سایت تأثیر می گذارد. اسکریپت بین سایتی (XSS) یک حمله بدافزار است که با سوء استفاده از آسیب پذیری های Cross-Site در سایت های وردپرسی انجام می شود. در واقع این رایج‌ترین راه برای هک شدن سایت‌های وردپرسی است زیرا بسیاری از افزونه‌های وردپرس آسیب‌پذیری‌های XSS دارند. در هر صفحه وب، کد و محتوا به روش های یکسان ارائه می شوند. با این حال، مرورگرها می‌توانند کد را از محتوا جدا کنند زیرا همیشه در تگ‌های اسکریپت قرار می گیرند. این بدان معنی است که بدون فیلتر مناسب، مهاجمان می توانند کدهای مخرب را در هر مکانی از صفحه وب که امکان افزودن متن وجود دارد، قرار دهند.

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

مقابله با حملات اجرای کد از راه دور

تصویر(3)

با این توانایی خطرناک برای اجرای کدها از راه دور، مهاجم به راحتی می تواند رمز عبور را سرقت کند و وانمود نماید که از کاربران واقعی است. همچنین آنها می توانند اطلاعات شخصی کاربر، مانند جزئیات کارت اعتباری یا اطلاعات حساب را مشاهده کنند.

  • پیمایش دایرکتوری (Directory Traversal)

حمله Directory Traversal اپلیکیشن یا بازدیدکنندگان سایت وردپرسی شما را هدف قرار نمی دهد بلکه بحث اصلی، خود وب سایت خواهد بود. آسیب پذیری RCE از نحوه ذخیره فایل های سایت در سیستم فایل سرور وب سایت شما سوء استفاده می کند. معمولا داده ها در یک مسیر استاندارد مانند home/exampleuser/public_html/ ذخیره می شوند. اسکریپت های داخل دایرکتوری با استفاده از یک مسیر نسبی مانند:

 

که مستقیماً به مسیر زیر اشاره دارند به فایل ها دسترسی پیدا می کنند:

 

هنگامی که یک اسکریپت برای دسترسی به فایلی که خارج از دایرکتوری فعلی است پیکربندی می شود، این کار را به سادگی با افزودن یک "../" انجام می دهد. این بخش به مسیری اشاره دارد که یک پله بالاتر از دایرکتوری فعلی است.

به عنوان مثال، دایرکتوری /home/exampleuser/public_html/../ به /home/exampleuser/ هدایت می شود. اگر یک اسکریپت مجاز به خواندن یا آپلود هر نام فایلی باشد، مهاجم اپلیکیشن را به سمت دایرکتوری های قبلی هدایت می کند، مانند:

 

 

اگر ویژگی‌های امنیتی مهمی مانند "فیلتر کردن ورودی" (input filtering) را پیاده‌سازی نکرده‌ باشید، هکر می‌تواند به فایل‌های اصلی سرور دسترسی مستقیم پیدا کند که این خبر بدی برای امنیت سایت شما خواهد بود.

برای جلوگیری از حملات اجرای کد از راه دور (RCE) چه کاری می توانید انجام دهید؟

اطلاعات دقیق این مقاله جهت ترساندن یا ایجاد هراس در شما نیست بلکه هدف آن نشان دادن اهمیت روزافزون اقدامات امنیتی در سایت وردپرسی است. اکثریت قریب به اتفاق حملات RCE را می توان تنها با آگاهی و آمادگی قبل از وقوع آنها، کاهش داد یا کاملاً متوقف کرد. به عنوان مدیر سایت وردپرسی،لازم است بدانید که سرورهای سایت چگونه اطلاعاتی که کاربران ارائه می دهند را پردازش می کنند.

پیشگیری از حملات اجرای کد از راه دور

تصویر(4)

نحوه جلوگیری از حملات اجرای کد از راه دور (RCE)

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

  • بروزرسانی وردپرس - نصب خودکار آخرین نسخه وردپرس را فعال کنید.
  • بروز رسانی افزونه ها - بروزرسانی خودکار افزونه ها را فعال نمایید. 
  • بروزرسانی‌های قالب - بروزرسانی خودکار قالب را فعال کنید.
  • اسکن خودکار جهت رفع آسیب‌پذیری ها - این کار را می توانید به کمک وب‌سایت هایی که چنین خدماتی ارائه می دهند، انجام دهید.

پیشگیری از وقوع RCE

1. فقط از اپلیکیشن ها و افزونه های معتبر استفاده کنید

فرآیند «escaping» به عنوان اولین خط دفاعی شما در برابر آسیب‌پذیری‌های RCE عمل می‌کند. با این حال، راه های دیگری وجود دارند که می توان به کمک آنها کد را توسط سرورها و مرورگرها، فراتر از تگ های اسکریپت تفسیر کرد. اگر هدف شما پیگیری تک تک آنها به تنهایی باشد، بسیار پیچیده خواهد بود و به زمان و منابع زیادی نیاز خواهید داشت. خوشبختانه توسعه‌دهندگان آسیب‌پذیری‌های RCE را همواره مورد بررسی قرار می دهند. بهتر است از یک CMS (سیستم مدیریت محتوا) قابل اعتماد و معتبر مانند وردپرس استفاده کنید زیرا ابزارهایی وجود دارند که مختص پلتفرم، قالب ها و افزونه هایی که روی آن اجرا می کنید ساخته شده اند. همواره ضروری است که تمام اپلیکیشن ها و افزونه ها را هنگام انتشار نسخه جدید بروز نگه دارید. وقتی آسیب‌پذیری‌ها کشف می‌شوند، توسعه‌دهندگان نرم‌افزار شبانه‌روز کار می‌کنند تا از نقاط ضعفی که کشف شده جلوتر باشند.

2. اطلاعات ورودی کاربران را اعتبارسنجی کنید

بهترین مکان برای شروع جلوگیری از آسیب پذیری های RCE جایی است که کاربران سایت با اپلیکیشن شما تعامل دارند. ساده ترین روش، حذف و فیلتر کردن کاراکترهایی است که نامطلوب می باشند.روش دیگر، حفظ محتوا با escaping است. escaping فرآیندی است که در آن به رایانه خود دستور می دهید تا آنچه که کد به نظر می رسد را متن معمولی بداند.

3. اصل کمترین سطح دسترسی

ممکن است موارد نادری وجود داشته باشند که آسیب‌پذیری RCE روز صفر (zero-day) ایجاد شود که در این وضعیت مدیریت، CMS و توسعه دهندگان برنامه با نوع جدیدی از حمله مواجه خواهند شد که با آن آشنایی ندارند. حتی در چنین مواردی، تنظیم چند قانون ساده می‌تواند سطح آسیبی که مهاجم وارد می کند را کاهش دهد.

به عنوان مثال، تصور کنید در حال طراحی برنامه ای هستید که داده ها را از پایگاه داده می خواند. در این صورت لازم نیست به برنامه جدید توانایی یا دسترسی حذف یا نوشتن رکوردهای پایگاه داده ارائه شود. در این حالت، حتی اگر مهاجمان سعی در به خطر انداختن اسکریپت داشته باشند، با خطا مواجه می گردند. اصل کمترین سطح دسترسی برای توابع PHP نیز مفید است. توابع PHP یک هدف استاندارد برای انواع مهاجمان آنلاین هستند. توابع قدرتمندی که ممکن است برای برنامه شما مورد نیاز نباشند، مانند ini_set() یا exec()، باید غیرفعال گردند. این امر مانع سوء استفاده هکرها و مهاجمان از آنها برای اهداف مخرب می شود.

حملات اجرای کد از راه دور در وردپرس

تصویر(5)

4. محتوا-امنیت-سیاست

"محتوا-امنیت-سیاست" هدری (header) است که در HTTP توسط اکثر مرورگرهای مدرن استفاده می شود و تعیین می کند که مرورگر چه نوع محتوایی را قرار است در وب سایت شما بارگذاری نماید. هنگامی که هدرها را از برنامه یا وب سرور خود ارسال می‌کنید، می‌توانید انواع اسکریپت‌ها و مکان هایی را که مجاز به اجرا هستند، مشخص نمایید. استفاده از این استراتژی به جلوگیری از تزریق اسکریپت های مخرب توسط هکرها کمک می کند.

5. جلوگیری از خواندن کوکی ها توسط اسکریپت

گزینه دیگر، جلوگیری از خواندن کوکی ها توسط اسکریپت ها است. این کار از ارسال درخواست ها به سایت های دیگر جلوگیری می کند. فعالیت فوق با تنظیم ویژگی های SameSite=Strict یا HttpOnly انجام می شود. در این صورت حتی زمانی که کد یک هکر در سایت وردپرسی شما اجرا می گردد، از دسترسی آنها به کوکی های اعتبارسنجی کاربران سایت جلوگیری خواهید کرد که به میزان قابل توجهی آسیب احتمالی را در طول حمله اجرای کد از راه دور وردپرس، کاهش می دهد.

جمع بندی

زمانی که تهدیدات امنیتی احتمالی را در سایت وردپرسی خود کشف می کنید، ممکن است نگران شوید اما حقیقت این است که تهدیدات بسیار زیاد هستند اما راه حل ها می توانند ساده باشند. با اجرای چند روش مهم حفظ امنیت وردپرس همراه با 5 مرحله ای که در بالا ذکر شد، خط دفاعی بهتری خواهید داشت.

اشتراک گذاری:

نظرات

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *