آموزش روش‌های کاربردی برای ایمن‌ سازی Memcached

آموزش ایمن‌ سازی Memcached
Avatar
نویسنده: پارسا مهرآئین
چهارشنبه 16 شهریور 1401
مطالعه: ۱۰ دقیقه ۰ نظر ۱۴۰۵ بازدید

 ایمن‌ سازی Memcached یکی از مواردی مهمی است که اخیرا مورد توجه کاربران قرار گرفته است. در ۲۷‌فوریه‌۲۰۱۸، CloudFlare مقاله‌ای درباره حجم حملات شدید به Memcached منتشر کرد. Memcached سیستم کش و حافظه پنهان محبوبی است که روی سرور نصب می‌شود و اغلب برای کاهش زمان پاسخ‌دهی و کاهش بار اسکریپت مورد استفاده است. وقتی درخواست‌های  پایگاه داده MySQL در سایت زیاد باشد، Memcached مقداری از اطلاعات دیتابیس را در رم ذخیره می‌کند.

حملات Amplification محل استقرار Memcached را هدف گرفته‌اند که در اینترنت با استفاده از UDP در‌معرض دید واقع شده است. برای کاهش این حملات، بهتر است Memcached را به Local Interface یا حافظه محلی تبدیل کنید. UDP را غیرفعال و از سرور خود با روش‌های معمولی محافظت کنید. در این مقاله، نحوه انجام ایمن‌ سازی Memcached در سرور لینوکس به‌همراه سایر عملیات‌ها را خواهید آموخت؛ پس تا پایان با ما همراه باشید.

بررسی آسیب‌پذیری Memcached در پورت UDP

ایده کلی در پشت همه حملات Amplification یکسان است. مهاجم می‌تواند IP را جعل و درخواست‌های جعلی را به سرور UDP آسیب‌پذیر ارسال کند. سرور UDP بدون اطلاع از جعلی‌بودن درخواست، پاسخ را آماده می‌کند. مشکل زمانی رخ می‌دهد که هزاران پاسخ به یک میزبان جعلی ارسال می‌شود و منابع را اشغال می‌کند.

اصلی‌ترین مشکل سیستم‌های حاوی UDP به پاسخ‌هایی حجیم‌تر از درخواست‌ها مربوط می‌شود. بدین‌صورت که مهاجم جعلی با سرعت پورت محدود (مانند ۱ گیگابایت‌بر‌ثانیه) می‌تواند به‌راحتی با‌توجه‌به حجیم‌تر‌بودن پاسخ‌ها، حملات بسیار بزرگی را انجام دهد که به ۱۰۰ گیگابیت‌بر‌ثانیه می‌رسد و پهنای باند را اشغال کند.

مشکل اصلی سیستم Memcached حجم‌تربودن پاسخ‌های UDP است. داده‌ها در UDP سیستم Memcached با سرعت زیاد به کاربران تحویل داده می‌شود و درخواستی بسیار کوچک است و پاسخ آن می‌تواند تا حدود ۱ مگابایت حجیم باشد. مهاجمان ابتدا بسته‌ای بزرگ را روی سرور Memcached می‌یابند و با IPهای جعلی درخواست‌ها را ارسال می‌کنند.

برای مثال، در سیستم Memcached با پاسخ‌هایی حجیم، شاهد هستیم که ۱۵ بایت درخواست به ۱۳۴ کیلوبایت پاسخ منجر می‌شود. با غیرفعال‌سازی UDP و کاهش حجم پاسخ‌ها، به‌راحتی می‌توانید از سیستم Memcached خود محافظت کنید. همچنین، حتماً IP استفاده‌شده را به localhost تنظیم کنید تا از آن استفاده خارجی نشود.

خرید سرور لینوکس

آموزش ایمن‌ سازی Memcached در سرورهای لینوکسی

به‌طورپیش‌فرض، اوبونتو و دبیان Memcached را به رابط محلی (Local Interface) 127.0.0.1 متصل می‌کنند. تأسیسات نصب‌شده در شبکه 127.0.0.1 در‌برابر حملات شبکه آسیب‌پذیر نیستند. برای ایمن‌سازی سرویس Memcached روی این سرورها، باید پارامترهای کانفیگ سرویس را تغییر دهید. ایمن‌ سازی Memcached در مدیریت سرور Centos ،Fedora ،Ubuntu و Debian با ایجاد تغییرات فایل کانفیگ صورت می‌گیرد. برای انجام این کار، فایل کانفیگ Memcached را به‌صورت زیر ویرایش کنید:

اگر از سرورهای Centos یا Fedora استفاده می‌کنید:

sudo nano /etc/sysconfig/memcached

یا اگر از سرورهای Ubuntu، Debian استفاده می‌کنید:

sudo nano /etc/memcached.conf

OPTIONS="-l 127.0.0.1"

بررسی کنید که -1 روی این IP شبکه تنظیم شده باشد:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0" 

اگر آدرس listening در آینده تغییر کند، بهترین کار غیر‌فعال‌کردن UDP است؛ زیرا احتمال بروز حملات از این بخش بسیار زیاد است. برای غیر‌فعال‌سازی UDP و بدون تغییرماندن TCPها، گزینه زیر را به پایین فایل خود اضافه کنید:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"
ایمن‌ سازی Memcached در لینوکس
نحوه ایمن سازی Memcached در توزیع‌های لینوکس چطور است؟

فایل را ذخیره کنید و ببندید. همچنین برای اعمال تغییرات، سرویس Memcached خود را مجدداً راه‌اندازی کنید:

sudo service memcached restart

کد زیر را اجرا و بررسی کنید که Memcached در‌حال‌حاضر به رابط محلی متصل است و فقط به TCP گوش می‌دهد:

sudo netstat -plunt

خروجی:

Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      23803/Memcached

شما باید Memcached را فقط متصل به 127.0.0.1 با استفاده از TCP مشاهده کنید.

آسیب‌ پذیری فایروال Memcached 
نحوه بررسی آسیب‌پذیری Memcached

اجازه دسترسی ازطریق شبکه خصوصی

دستورالعمل‌های یادشده به Memcached می‌گویند که فقط به‌صورت local فعال باشد. این کار با قرارندادن رابط Memcached درمعرض دید، از حملات Amplification جلوگیری می‌کند. اگر به اجازه دسترسی از سرورهای دیگر نیاز دارید، باید پیکربندی دیگری را تنظیم کنید. درصورت نیاز به گسترش دسترسی Memcached و اتصال به شبکه خصوصی، امن‌ترین گزینه ایجاد محدودیت در فایروال سیستم است.

۱. محدودکردن دسترسی به IP با فایروال

قبل از محدودکردن دسترسی IP با فایروال، بهتر است برای محدودکردن دسترسی ماشین‌هایی که می‌توانند وارد سرور شما شوند، قوانین فایروال را تنظیم کنید. برای پیکربندی قوانین فایروال خود، باید آدرس‌های IP خصوصی سرورهای سرویس‌گیرنده را بدانید. اگر از فایروال UFW استفاده می‌کنید، با تایپ‌کردن موارد زیر دسترسی به Memcached خود را می‌توانید محدود کنید:

sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable

همچنین، اگر از Iptables استفاده می‌کنید، فایروالی با قوانین ذکر‌شده را با دستورهای زیر می‌توانید ایجاد کنید:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

پس‌ازآن، سرویس Memcached را برای اتصال به رابط شبکه خصوصی سرور خود می‌توانید تنظیم کنید.

مقاله زیر راهنمای کامل سرویس فایروال وب یا WAF است، آن را از دست ندهید.

فایروال وب چیست؟

Memcached .۲ را به رابط شبکه خصوصی متصل کنید

اکنون که فایروال شما به‌درستی عمل می‌کند، پیکربندی‌های لازم را برای اتصال Memcached به شبکه‌های خصوصی می‌توانید انجام دهید.

در سرورهای اوبونتو یا دبیان، فایل /etc/memcached.conf را دوباره باز کنید:

sudo nano /etc/memcached.conf

در این فایل، خط مربوط به -l 127.0.0.1 را پیدا و آدرس شبکه خصوصی‌تان را به‌جای آن وارد کنید:

-l memcached_servers_private_IP

پس از اتمام کار، فایل را ذخیره کنید و ببندید.

نحوه ایمن‌ سازی Memcached
نحوه ایمن‌ سازی Memcached چگونه است؟

برای سرورهای CentOS و Fedora باید فایل /etc/sysconfig/Memcached را دوباره باز کنید:

sudo vi /etc/sysconfig/Memcached

در این فایل، IP شبکه خصوصی خود را در جلو متغیر OPTIONS قرار دهید:

OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"

عبارت memcached_servers_private_IP می‌تواند رنجی از آی‌پی‌های شبکه (192.168.0.0/16) یا آی‌پی مشخصی مثل 192.168.100.20 باشد. پس از اتمام کار، فایل را ذخیره کنید و ببندید. سپس، دوباره سرویس Memcached را مجدداً راه‌اندازی کنید:

sudo service memcached restart

تنظیمات جدید ثبت‌شده خود را با استفاده از netstat بررسی کنید:

sudo netstat -plunt

خروجی:

Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
[...]
tcp        0      0 memcached_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/Memcached

در‌نهایت، اتصال از سرور خارجی ثبت‌شده را بررسی کنید تا مطمئن شوید که دسترسی‌های لازم را برای اتصال به Memcached دراختیار دارید. همچنین، سعی کنید با استفاده از سرورهای غیرمجاز دیگر، به سرویس Memcached خود متصل شوید تا فایروال و سایر اقدامات امنیتی Memcached خود را بتوانید بررسی کنید.

نحوه نصب Memcached
آموزش مرحله به مرحله ایمن سازی Memcached

استفاده از UDP ایمن در Memcached

با‌توجه‌به گزارش‌های پیش رو و مشکلات عنوان‌شده، بهتر است از UDP استفاده نکنید؛ اما اگر در هر شرایطی به استفاده از UDP در Memcached نیاز داشتید، باید نکاتی را رعایت کنید تا در‌معرض خطر حملات Amplification قرار نگیرید. همان‌طور‌که گفتیم، دلیل اصلی بروز این حملات حجم پاسخ‌های ارسالی به کاربر است؛ یعنی با ریکوئست‌های سبک می‌توانند حجم زیادی از داده‌ها را دریافت و سیستم شما را اشغال کنند.

  • اگر از UDP استفاده می‌کنید، همیشه باید با حجم بسته کوچک‌تر از درخواست پاسخ دهید. با انجام این کار، خطر حمله Amplification به‌شدت کاهش می‌یابد و کسی نمی‌تواند از پروتکل‌های شما سوءاستفاده و سرورتان را مشغول کند.
  • فراموش نکنید همیشه و همه‌جا باید از سیستم فایروال قوی استفاده کنید. فایروال بسیاری از این حملات را پوشش خواهد داد و از آن‌ها جلوگیری خواهد کرد. در‌نهایت، سرور شما ایمن‌تر از قبل خواهد بود.
  • برای حفظ امنیت بیشتر، به‌هیچ‌عنوان پروتکل UDP را بدون احراز هویت پیاده‌سازی نکنید. حتماً از سیستم‌های امنیتی برای تشخیص کاربران جعلی استفاده کنید تا درمعرض خطر کمتری قرار بگیرید.

هر آنچه باید درمورد علت بروز حملات DDos و نحوه مقابله با آن‌ها بدانید در مقاله زیر آمده است.

حملات DDos چیست؟

استفاده از سیستم Cloudflare

اگر از سیستم Cloudflare استفاده می‌کنید، نیازی نیست نگران این‌ نوع حمله‌ها باشید. معماری Anycast Cloudflare به‌خوبی برای توزیع بار در زمان بروز حملات Amplification عمل می‌کند و به‌هیچ‌عنوان نمی‌گذارد سیستم شما زیر بار بسیار زیاد از مدار خارج شود. درنهایت، شما پشت Cloudflare ایمن هستید.

ناگفته نماند با سیستم Cloudflare نیز نمی‌توان با اطمینان کامل گفت که حملات رخ نخواهند داد؛ زیرا کلادفلیر تنها از حملات به آدرس دامنه‌تان جلوگیری می‌کند و درصورتی‌که IP شما در‌معرض دید قرار بگیرد، همچنان Cloudflare بی‌فایده خواهد بود و سرورتان مستقیماً در‌معرض خطر قرار می‌گیرد.

نحوه پیکربندی Memcached
چطور سرور Memcached را ایمن کنیم؟

بررسی آسیب‌پذیری Memcached

پس از انجام مراحل یادشده، نوبت به بررسی و تست نفوذ سیستم می‌رسد. شما باید سیستم فایروال و UDP خود را تست کنید تا مطمئن شوید که سرویس Memcached شما کاملاً ایمن است و دربرابر حملات آسیب‌پذیر نیست.

۱. بررسی آسیب‌پذیری UDP

همان‌طور‌که مشاهده کردید، پورت UDP سیستم Memcached آسیب‌پذیر است و مهاجمان به‌راحتی می‌توانند در کارتان خلل ایجاد کنند. با اجرای دستور زیر، می‌توانید آسیب‌پذیری Memcached دربرابر UDP را بررسی کنید:

$ echo -en "\x00\x00\x00\x00\x00\x01\x00\x00stats\r\n" | nc -q1 -u 127.0.0.1 11211
STAT pid 21357
STAT uptime 41557034
STAT time 1519734962
...

اگر پاسختان خالی نبود، نتیجه می‌گیریم که سرور Memcached شما آسیب‌پذیر است.

۲. بررسی آسیب‌پذیری فایروال Memcached 

برای بررسی فایروال و آزمایش اینکه آیا می‌توان ازطریق UDP به آن‌ها دسترسی پیدا کرد یا نه، باید nmap را اجرا و تست کنید:

$ nmap TARGET -p 11211 -sU -sS --script memcached-info
Starting Nmap 7.30 ( https://nmap.org ) at 2018-02-27 12:44 UTC
Nmap scan report for xxxx
Host is up (0.011s latency).
PORT      STATE         SERVICE
11211/tcp open          memcache
| memcached-info:
|   Process ID           21357
|   Uptime               41557524 seconds
|   Server time          2018-02-27T12:44:12
|   Architecture         64 bit
|   Used CPU (user)      36235.480390
|   Used CPU (system)    285883.194512
|   Current connections  11
|   Total connections    107986559
|   Maximum connections  1024
|   TCP Port             11211
|   UDP Port             11211
|_  Authentication       no
11211/udp open|filtered memcache

جمع‌بندی

برای ایمن‌ سازی Memcached روش‌های مختلفی وجود دارد. سیستم Memcached آسیب‌پذیری‌هایی در پورت UDP دارد که باعث می‌شود حملات Amplification به‌راحتی انجام شوند و سیستم Memcached شما را از کار بیندازند. با ایجاد فایروال‌های مناسب و غیرفعال‌سازی UDP و محدود‌سازی IP به localhost در‌برابر این حملات مقاوم شوید. این حملات تأثیر بسیار زیادی بر اشغال‌سازی شبکه و سرور Memcached شما می‌گذارند؛ به‌طوری‌که کاملاً سرور را از مدار خارج می‌کنند. در‌نهایت، حتماً تغییرات اعمال‌شده را با استفاده از روش‌های مختلف بررسی کنید و مطمئن شوید که سیستمتان دربرابر تمام حملات ذکرشده ایمن است. در این مطلب سعی کردیم ایمن‌ سازی Memcached را مختصراً توضیح دهیم.

سؤالات متداول

۱. Memcached برای چه کاری استفاده می‌شود؟

Memcached محل ذخیره داده با کارایی فراوان و استفاده آسان محسوب می‌شود. این سیستم کاملاً مقیاس‌پذیر و منبع‌باز است که برای ارائه پاسخ‌های کوتاه‌تر از میلی‌ثانیه و به‌عنوان سیستم کش یا حافظه پنهان سشن‌ها استفاده می‌شود.

۲. Memcached چقدر ایمن است؟

Memcached همچون سایر پایگاه‌های داده و سیستم‌ها بسیار ایمن است؛ اما مسائل امنیتی بسیاری هستند که به سرور مربوط می‌شوند و ارتباطی با Memcached ندارند.

۳. باگ امنیتی Memcached چیست؟

سیستم Memcached در استفاده از پورت UDP باگ امنیتی دارد که باعث بروز حملات amplification می‌شود. برای حل این مشکل، باید پورت UDP را ببندید.

۴. چگونه امنیت Memcached را افزایش دهیم؟

با استفاده از این راهکارهای ساده، امنیت Memcached را افزایش دهید:

  • غیرفعال‌سازی پورت UDP
  • محدود‌سازی IP به Localhost
  • استفاده از فایروال قوی
  • استفاده از Cloudflare

۵. آیا Memcached از SQL پشتیبانی می‌کند؟

خیر، Memcached فقط از get/set و ارتباط بین جداول پشتیبانی می‌کند که سیستمی key-value است و از کوئری‌های SQL پشتیبانی نمی‌کند.

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

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


ارسال دیدگاه در وبلاگ پارس‌پک را مطالعه کرده و آن‌ها را می‌پذیرم.