
در 27 فوریه 2018، CloudFlare مقاله ای در مورد حجم حملات جدی علیه Memcached منتشر کرد. Memcached یک سیستم کش محبوب در سمت سرور است که اغلب برای کاهش زمان پاسخ و بار اسکریپت استفاده می شود. هنگامی که پرس و جوهای MySQL زیادی در سایت وجود دارد، Memcached برخی از اطلاعات پایگاه داده را در RAM ذخیره می کند. حملات تقویتی، پیاده سازی های Memcached را هدف قرار می دهند که از طریق UDP در معرض اینترنت قرار می گیرند. برای کاهش این حملات، بهتر است Memcached را به رابط محلی یا حافظه محلی تبدیل کنید. UDP را غیرفعال کنید و سرور خود را با روش های معمول ایمن کنید. در این مقاله، نحوه ایمن سازی Memcached در سرور لینوکس را به همراه سایر عملیات یاد خواهید گرفت. پس تا انتها همراه ما باشید.
بررسی آسیب پذیری Memcached در پورت UDP
ایده کلی در پشت همه حملات تقویتی یکسان است. یک مهاجم می تواند IP را جعل کند و درخواست های جعلی را به یک سرور UDP آسیب پذیر ارسال کند. سرور UDP بدون اینکه بداند درخواست جعلی است، پاسخ را آماده می کند. مشکل زمانی رخ می دهد که هزاران پاسخ به یک هاست جعلی ارسال می شود و منابع را اشغال می کند.
مشکل اصلی سیستم های مبتنی بر UDP به پاسخ های بزرگتر از درخواست ها مربوط می شود. بنابراین، یک مهاجم سرکش با سرعت پورت محدود (مانند 1 گیگابیت بر ثانیه) به راحتی می تواند حملات بسیار بزرگی را انجام دهد که به 100 گیگابیت در ثانیه می رسد و به دلیل اندازه بزرگتر پاسخ ها، پهنای باند را اشغال می کند.
مشکل اصلی سیستم Memcached حجم زیاد پاسخ های UDP است. داده های UDP سیستم Memcached با سرعت بالا به کاربران تحویل داده می شود و درخواست بسیار کم است و پاسخ آن می تواند تا 1 مگابایت باشد. مهاجمان ابتدا یک بسته بزرگ را در سرور Memcached پیدا کرده و درخواست هایی را با آدرس های IP جعلی ارسال می کنند. به عنوان مثال، در یک سیستم Memcached با پاسخ های بزرگ، می بینیم که یک درخواست 15 بایتی منجر به پاسخ 134 کیلوبایتی می شود. با غیرفعال کردن UDP و کاهش اندازه پاسخ، می توانید به راحتی سیستم Memcached خود را ایمن کنید. همچنین مطمئن شوید که IP استفاده شده را روی لوکال هاست تنظیم کنید تا از آن به صورت خارجی استفاده نشود.
آموزش امنیت Memcached در سرورهای Centos، Fedora، Ubuntu و Debian
به طور پیش فرض، اوبونتو و دبیان Memcached را به رابط محلی 127.0.0.1 متصل می کنند. نصب های نصب شده در شبکه 127.0.0.1 در برابر حملات شبکه آسیب پذیر نیستند. برای محافظت از سرویس Memcached در این سرورها، باید پارامترهای پیکربندی سرویس را تغییر دهید. ایمن سازی Memcached در مدیریت سرور Centos، Fedora، Ubuntu و Debian با ایجاد تغییراتی در فایل پیکربندی انجام می شود. برای انجام این کار، فایل پیکربندی Memcached را به صورت زیر ویرایش کنید:
اگر از سرورهای Centos یا Fedora استفاده می کنید:
sudo nano /etc/sysconfig/memcached
یا اگر از سرورهای اوبونتو، دبیان استفاده می کنید:
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"
اگر آدرس گوش دادن در آینده تغییر کند، بهتر است UDP را غیرفعال کنید. زیرا احتمال حملات از این قسمت بسیار زیاد است. برای غیرفعال کردن UDP و بدون تغییر ماندن TCP، گزینه زیر را به پایین فایل خود اضافه کنید:
PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 127.0.0.1 -U 0"
چگونه 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 فقط از طریق TCP به 127.0.0.1 متصل است.
نحوه بررسی آسیب پذیری Memcached
اجازه دسترسی از طریق یک شبکه خصوصی
این دستورالعملها به Memcached میگویند که فقط به صورت محلی فعال شود. این از حملات Amplification با افشا نشدن رابط Memcached جلوگیری می کند. اگر به مجوز دسترسی از سرورهای دیگر نیاز دارید، باید پیکربندی دیگری را تنظیم کنید. اگر نیاز به گسترش دسترسی به Memcached و اتصال به یک شبکه خصوصی دارید، امن ترین گزینه ایجاد محدودیت در فایروال سیستم است.
1. دسترسی 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 را برای اتصال به رابط شبکه خصوصی سرور خود پیکربندی کنید.
مقاله زیر راهنمای کامل Web Firewall یا WAF است، آن را از دست ندهید.
فایروال وب چیست؟
Memcached .2 را به رابط شبکه خصوصی وصل کنید
اکنون که فایروال شما به درستی کار می کند، می توانید تنظیمات لازم را برای اتصال Memcached به شبکه های خصوصی انجام دهید.
در سرورهای اوبونتو یا دبیان، فایل /etc/memcached.conf را دوباره باز کنید:
sudo nano /etc/memcached.conf
در این فایل، خط -l 127.0.0.1 را پیدا کنید و به جای آن آدرس شبکه خصوصی خود را وارد کنید:
-l memcached_servers_private_IP
پس از اتمام، فایل را ذخیره و ببندید.
چگونه 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 می تواند طیفی از آدرس های IP شبکه (192.168.0.0/16) یا یک آدرس IP خاص مانند 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
استفاده از UDP امن در Memcached
با توجه به گزارشات آتی و موارد ذکر شده، بهتر است از UDP استفاده نکنید. اما اگر در هر شرایطی مجبور به استفاده از UDP در Memcached هستید، باید نکاتی را دنبال کنید تا در معرض خطر حملات تقویتی قرار نگیرید. همانطور که گفتیم دلیل اصلی این حملات حجم پاسخ های ارسالی به کاربر است. یعنی با درخواست های سبک می توانند حجم زیادی از داده ها را دریافت کنند و سیستم شما را اشغال کنند.
- اگر از UDP استفاده می کنید، همیشه باید از آن استفاده کنید اندازه بسته کوچکتر از درخواستی است پاسخ. با انجام این کار، خطر حمله تقویت تا حد زیادی کاهش می یابد و هیچکس نمی تواند از پروتکل های شما سوء استفاده کند و سرور شما را بیش از حد بارگذاری کند.
- به یاد داشته باشید که همیشه از یک فایروال قوی در همه جا استفاده کنید. فایروال بسیاری از این حملات را پوشش می دهد و از آن جلوگیری می کند. در نهایت سرور شما نسبت به قبل از امنیت بیشتری برخوردار خواهد بود.
- برای امنیت بیشتر، به هیچ وجه پروتکل UDP را بدون احراز هویت اجرا نکنید. به یاد داشته باشید که از سیستم های امنیتی برای شناسایی کاربران جعلی استفاده کنید تا در معرض خطر کمتری قرار بگیرید.
هر آنچه که باید در مورد دلایل حملات DDos و نحوه مقابله با آنها بدانید در مقاله زیر آمده است.
حملات DDos چیست؟
با استفاده از سیستم Cloudflare
اگر از سیستم Cloudflare استفاده می کنید، لازم نیست نگران این نوع حملات باشید. معماری Anycast Cloudflare برای توزیع بار در طول حملات تقویتی به خوبی کار می کند و هرگز اجازه نمی دهد سیستم شما تحت بار زیاد از زنجیره خارج شود. بالاخره پشت کلودفلر در امان هستید.
نیازی به گفتن نیست که حتی با سیستم Cloudflare نیز نمی توان با اطمینان کامل گفت که حملات رخ نمی دهند. زیرا Cloudflare فقط از حملات علیه آدرس دامنه شما جلوگیری می کند و اگر آدرس IP شما فاش شود، Cloudflare همچنان بی فایده خواهد بود و سرور شما مستقیماً در معرض خطر قرار می گیرد.
چگونه سرور Memcached را ایمن کنیم؟
بررسی آسیب پذیری Memcached
پس از انجام مراحل ذکر شده نوبت به بررسی و تست نفوذ سیستم می رسد. شما باید فایروال و سیستم UDP خود را آزمایش کنید تا مطمئن شوید که سرویس Memcached شما کاملاً ایمن است و در برابر حملات آسیب پذیر نیست.
1. آسیب پذیری UDP را بررسی کنید
همانطور که می بینید، پورت UDP سیستم Memcached آسیب پذیر است و مهاجمان به راحتی می توانند عملکرد شما را مختل کنند. با اجرای دستور زیر میتوانید آسیبپذیری Memcached را در برابر UDP بررسی کنید:
$ echo -en "x00x00x00x00x00x01x00x00statsrn" | nc -q1 -u 127.0.0.1 11211 STAT pid 21357 STAT uptime 41557034 STAT time 1519734962 ...
اگر پاسخ شما خالی نباشد، نتیجه می گیریم که سرور Memcached شما آسیب پذیر است.
2. بررسی آسیب پذیری فایروال 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 دارای آسیبپذیریهای پورت UDP است که باعث میشود حملات Amplification به راحتی سیستم Memcached شما را خراب کنند. با ایجاد فایروال مناسب و غیرفعال کردن UDP و محدود کردن IP ها به لوکال هاست در برابر این حملات مقاوم باشید. این حملات تاثیر زیادی بر استفاده از سرور و شبکه Memcached شما دارند. بنابراین آنها به طور کامل سرور را از زنجیره خارج می کنند. در نهایت فراموش نکنید که تغییرات اجرا شده را با استفاده از روش های مختلف تست کنید و از ایمن بودن سیستم خود در برابر تمامی حملات ذکر شده مطمئن شوید. در این مقاله سعی شده است تا امنیت Memcached به اختصار توضیح داده شود.
سوالات متداول
1. Memcached چیست و چگونه کار می کند؟
Memcached یک ذخیرهسازی داده بسیار کارآمد و با کاربری آسان است. این یک سیستم متن باز کاملا مقیاس پذیر است که پاسخ های زیر میلی ثانیه ای را ارائه می دهد و به عنوان یک سیستم کش جلسه استفاده می شود.
2. Memcached چقدر امن است؟
مانند سایر پایگاه های داده و سیستم ها، Memcached بسیار امن است. اما مسائل امنیتی زیادی وجود دارد که مربوط به سرور است و به Memcached مربوط نمی شود.
3. نقص امنیتی Memcached چیست؟
سیستم Memcached یک نقص امنیتی در استفاده از پورت UDP دارد که باعث حملات تقویتی می شود. برای حل این مشکل، باید پورت UDP را ببندید.
4. چگونه امنیت Memcached را افزایش دهم؟
با استفاده از این راه حل های ساده، امنیت Memcached را افزایش دهید:
- پورت UDP را غیرفعال کنید
- IP را به Localhost محدود کنید
- از فایروال قوی استفاده کنید
- با استفاده از Cloudflare
5. آیا Memcached از SQL پشتیبانی می کند؟
نه، Memcached فقط از get/set و رابطه بین جداول پشتیبانی می کند که یک سیستم کلید-مقدار است و از پرس و جوهای SQL پشتیبانی نمی کند.
{ “@context”: “https://schema.org”، “@type”: “FAQPage”، “mainEntity”: [{
“@type”: “Question”,
“name”: “Memcached چیست و چگونه کار میکند؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Memcached محل ذخیره داده با کارایی فراوان و استفاده آسان محسوب میشود. این سیستم کاملاً مقیاسپذیر و منبعباز است که برای ارائه پاسخهای کوتاهتر از میلیثانیه و بهعنوان سیستم کش یا حافظه پنهان سشنها استفاده میشود.”
}
},{
“@type”: “Question”,
“name”: “Memcached چقدر ایمن است؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “Memcached همچون سایر پایگاههای داده و سیستمها بسیار ایمن است؛ اما مسائل امنیتی بسیاری هستند که به سرور مربوط میشوند و ارتباطی با Memcached ندارند.”
}
},{
“@type”: “Question”,
“name”: “باگ امنیتی Memcached چیست؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “سیستم Memcached در استفاده از پورت UDP باگ امنیتی دارد که باعث بروز حملات amplification میشود. برای حل این مشکل، باید پورت UDP را ببندید.”
}
},{
“@type”: “Question”,
“name”: “چگونه امنیت Memcached را افزایش دهیم؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “با استفاده از این راهکارهای ساده، امنیت Memcached را افزایش دهید:
غیرفعالسازی پورت UDP
محدودسازی IP به Localhost
استفاده از فایروال قوی
استفاده از Cloudflare”
}
},{
“@type”: “Question”,
“name”: “آیا Memcached از SQL پشتیبانی میکند؟”,
“acceptedAnswer”: {
“@type”: “Answer”,
“text”: “خیر، Memcached فقط از get/set و ارتباط بین جداول پشتیبانی میکند که سیستمی key-value است و از کوئریهای SQL پشتیبانی نمیکند.”
}
}]
}
منبع:
blog.cloudflare.com
آموزش امنیت Memcached اولین بار در پارسپک نوشته شد. به نظر می رسد.