11.11.2012

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

انواع مختلفی از حملات سیل DDoS وجود دارد که اصلی ترین آنها در زیر ذکر شده است:

  • سیل SYN-ACK
  • سیل HTTP
  • سیل ICMP
  • سیل UDP

سیل SYN-ACK

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

سیل HTTP

سیل HTTP- زمانی اعمال می شود که سرویس با آن کار می کند پایگاه داده. هدف حمله یا وب سرور، یا به اسکریپتی که با پایگاه داده کار می کند. تعداد زیادی از درخواست های GET به پورت 80 ارسال می شود تا وب سرور نتواند به درخواست های نوع متفاوت توجه کند. فایل های گزارش رشد می کنند و کار با پایگاه داده غیرممکن می شود.

سیل ICMP

سیل ICMP- راه اسان کاهش توان عملیاتیو افزایش باردر پشته با ارسال درخواست های مشابه ICMP PING. اگر توجه کمی به فایروال ها شود خطرناک است، زیرا سروری که به درخواست های بی پایان ECHO پاسخ می دهد محکوم به فنا است. بنابراین در صورت یکسان بودن ترافیک ورودی و خروجی، فقط قوانین را در آن بنویسید iptables.

سیل UDP

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

در اصل، تعریف نوع حمله DDoSاغلب نیازی به صرف زمان زیادی نیست. دانستن چند نشانه کافی است. اگر به طور قابل توجهی افزایش حجم فایل های گزارش- داری باهاش ​​سر و کار داری سیل HTTP. اگر یک دسترسی محدود به خدماتدر نتیجه بیش از تعداد اتصالات مجاز است سیل SYN-ACK. اگر خروجی و ترافیک ورودیتقریبا برابر- داری باهاش ​​سر و کار داری سیل ICMP. نکته اصلی این است که نگهداری را فراموش نکنید امنیت سرور شمااز DDoS و توجه لازم را به آن داشته باشید. بهترین کار این است که مراقب باشید

DoS (مخفف Denial of Service "denial of Service") - حمله هکریبر روی یک سیستم محاسباتی به منظور از کار افتادن آن، یعنی ایجاد چنین شرایطی که در آن کاربران با وجدان سیستم نتوانند به منابع (سرور) سیستم ارائه شده دسترسی پیدا کنند یا این دسترسی مشکل باشد.

دو نوع حملات DoS/DDoS وجود دارد و رایج‌ترین آنها مبتنی بر ایده سیل است، یعنی سیل کردن قربانی با تعداد زیادی بسته. سیل می تواند متفاوت باشد: سیل ICMP، سیل SYN، سیل UDP و سیل HTTP. ربات های DoS مدرن می توانند از همه این نوع حملات به طور همزمان استفاده کنند، بنابراین شما باید از قبل از محافظت کافی در برابر هر یک از آنها مراقبت کنید.

تشخیص حمله DoS

سیل SYN

وجود یک سیل SYN به راحتی با شمارش تعداد اتصالات TCP "نیمه باز" مشخص می شود. در یک وضعیت عادی، آنها نباید اصلا باشند (یا مقدار بسیار کمی: حداکثر 1-3).

حفاظت از DoS

    قطعات - بسته ها را مسدود می کند. از آنجایی که بسته های ICMP به دلیل هدف عملکردی پروتکل باید بسیار کوچک باشند و به طور معمول در MTU قرار گیرند، وجود قطعات آنها معمولاً نشان دهنده یک خطا یا تلاش برای حمله است. iptables -A INPUT -p icmp -f -j DROP

    جلوگیری از جعل از طرف شما iptables -A INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-level info --log-prefix "DROP SYN,ACK:" iptables - یک INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-پرچم SYN,ACK SYN,ACK -j REJECT --reject-با tcp-reset

    به هر حال، اگر بسته ای با مجموعه پرچم های SYN و ACK دریافت کنیم (فقط یک پاسخ به یک بسته SYN دارای چنین ترکیبی از پرچم ها است) در اتصالی که هنوز باز نشده است، به این معنی است که شخصی بسته SYN را به میزبان دیگری ارسال کرده است. از طرف ما، و جواب به ما رسید. البته مهاجم همچنان باید شماره سکانس را حدس بزند، اما بهتر است چنین فرصتی به او ندهید. طبق قانون فوق، هاست ما با یک بسته RST پاسخ می دهد که پس از دریافت آن هاست مورد حمله، اتصال را می بندد. افزودن چنین قاعده‌ای به پیکربندی فایروال خود بسیار توصیه می‌شود، زیرا اگر مهاجمی موفق شود از طرف شما جعل کند، هنگام بررسی این قسمت، مسیر به شما منتهی می‌شود.

سیل SYN

یکی از راه های رایج نه تنها برای مسدود کردن کانال ارتباطی، بلکه برای ورود نیز می باشد پشته شبکهسیستم عامل به حالتی می رسد که دیگر نمی تواند درخواست های اتصال جدید را بپذیرد. بر اساس تلاشی برای مقداردهی زیادی از اتصالات TCP همزمان با ارسال یک بسته SYN با آدرس برگشتی ناموجود. پس از چندین بار تلاش برای ارسال یک بسته ACK پاسخ به یک آدرس غیرقابل دسترسی، اکثر سیستم عامل ها یک اتصال ناپایدار را در صف قرار می دهند. و تنها پس از تلاش n، اتصال بسته می شود. از آنجایی که جریان بسته های ACK بسیار زیاد است، به زودی صف پر می شود و هسته از تلاش برای باز کردن اتصال جدید خودداری می کند. باهوش‌ترین ربات‌های DoS همچنین قبل از شروع حمله، سیستم را تجزیه و تحلیل می‌کنند تا درخواست‌ها را فقط برای باز کردن پورت‌های حیاتی ارسال کنند. شناسایی چنین حمله ای ساده است: فقط سعی کنید به یکی از سرویس ها متصل شوید. اقدامات دفاعی معمولاً عبارتند از:

صف اتصالات TCP "نیمه باز" را افزایش دهید:

# sysctl -w net.ipv4.tcp_max_syn_backlog=1024

کاهش زمان نگهداری اتصالات "نیمه باز":

# sysctl -w net.ipv4.tcp_synack_retries=1

فعال کردن مکانیسم syncookies TCP:

# sysctl -w net.ipv4.tcp_syncookies=1

سیل UDP

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

محدودیت 5 اتصال را در پورت 80 تنظیم کنید. iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-بالای 5 -j رد کردن # فقط یک اتصال همزمان از یک IP به iptables smtp مجاز است -A FORWARD -p tcp --syn --dport smtp -m connlimit --connlimit-above 1 -j DROP # محدودیت 200 اتصال را در پورت 1720 تنظیم کنید. iptables -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-بالای 200 -j REJECT # udp 5060 $IPT -A INPUT -p udp --dport 5060 -m connlimit --connlimit-a -j LOG --log-level info --log-prefix "REJECT 5060: " $IPT -A INPUT -p udp --dport 5060 -m connlimit --connlimit-bove 60 -j REJECT # tcp 1720 $IPT -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-بالای 60 -j LOG --log-level info --log-prefix "REJECT 1720: " $IPT -A INPUT -p tcp --syn --dport 1720 -m connlimit --connlimit-بالای 60 -j REJECT

سیل ICMP

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

sysctl net.ipv4.icmp_echo_ignore_all=1

یا با فایروال:

Iptables -A INPUT -p icmp -j DROP --icmp-type 8

سیل HTTP

    تعداد فرآیندهای ps aux | grep apache | wc -l

    تعداد اتصالات در پورت 80 netstat -na | grep ":80" | wc -l

    مشاهده لیست آدرس های IPدرخواست اتصال از آن انجام می شود: netstat -na | grep ":80" | مرتب سازی | uniq -c | sort-nr

sysctl

    حفاظت از جعل net.ipv4.conf.default.rp_filter = 1

    هر دقیقه اتصال TCP را بررسی کنید. اگر خودروی قانونی در طرف مقابل باشد، بلافاصله پاسخ می دهد. مقدار پیش فرض 2 ساعت است. net.ipv4.tcp_keepalive_time = 60

    ده ثانیه دیگر دوباره امتحان کنید net.ipv4.tcp_keepalive_intvl = 10

    تعداد بررسی قبل از بستن اتصال net.ipv4.tcp_keepalive_probes = 5

دبیان: مبارزه با DDoS

به طور پیش فرض، سیستم عامل دبیان و سایر سیستم عامل ها قادر به پشتیبانی از تعداد زیادی از اتصالات ایجاد شده توسط بات نت نیستند. برای تقویت پشته TCP/IP باید تغییرات پیکربندی هسته انجام شود. نمونه ای از چنین پیکربندی:

net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.core.rmem_max = 996777216 net.core.wmev199_ .tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_mem= 786432 1048576 996777216 net.ipv4.tcp_wmem = 4096 87380 4194304 net.ipv4.tcp_max_orphans = 2255360 net.core.netdev_max_backlog = 10000 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp_max_syn_backlog = 2048 net.ipv4.tcp_synack_retries = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 4949kernel .

پیکربندی هسته را با دقت تغییر دهید و سرور را راه اندازی مجدد کنید...

FreeBSD: مبارزه با DDoS

ما زمان انتظار برای یک بسته پاسخ را به یک درخواست SYN-ACK کاهش می دهیم (محافظت در برابر سیل SYN):

# sysctl net.inet.tcp.msl=7500

سرور را به سیاهچاله تبدیل می کنیم. بنابراین، هنگام تلاش برای اتصال به پورت‌های خالی، هسته بسته‌های پاسخی را ارسال نمی‌کند (بار دستگاه را در طول DDoS کاهش می‌دهد، اما در پورت‌های تصادفی):

# sysctl net.inet.tcp.blackhole=2 # sysctl net.inet.udp.blackhole=1

ما تعداد پاسخ‌ها به پیام‌های ICMP را به 50 در ثانیه محدود می‌کنیم (محافظت در برابر سیل ICMP):

# sysctl net.inet.icmp.icmplim=50

افزایش می دهیم بیشترین مقداراتصالات به سرور (محافظت در برابر انواع DDoS):

# sysctl kern.ipc.somaxconn=32768

DEVICE_POLLING را روشن می کنیم - خود نظرسنجی درایور شبکه توسط هسته در بارهای بالا (به طور قابل توجهی بار روی سیستم را در طول DDoS "a کاهش می دهد):

هسته را با گزینه "options DEVICE_POLLING" بازسازی کنید. مکانیسم نظرسنجی را فعال کنید: "sysctl kern.polling.enable=1"; یک ورودی "kern.polling.enable=1" را به /etc/sysctl.conf اضافه کنید.

برای اینکه در هنگام فروپاشی یک طوفان DDoS در سیستم ها وارد بن بست نشوید، باید آنها را با دقت برای چنین وضعیتی آماده کنید:

    همه سرورهایی که دسترسی مستقیم به شبکه خارجی دارند باید برای راه اندازی مجدد از راه دور ساده و سریع آماده شوند (sshd پدر دموکراسی روسیه را نجات خواهد داد). یک مزیت بزرگ وجود یک رابط شبکه دوم اداری است که از طریق آن می توانید در صورت مسدود شدن کانال اصلی به سرور دسترسی داشته باشید.

    نرم افزار مورد استفاده در سرور باید همیشه به روز باشد. همه سوراخ ها وصله شده اند، به روز رسانی ها نصب می شوند (ساده به عنوان یک بوت، توصیه هایی که بسیاری از آنها پیروی نمی کنند). این شما را از حملات DoS که از باگ‌های سرویس‌ها سوء استفاده می‌کنند محافظت می‌کند.

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

    در رویکردهای سرور (نزدیکترین روتر) باید یک سیستم تجزیه و تحلیل ترافیک (NetFlow برای کمک) نصب شود که به شما امکان می دهد در مورد حمله اولیه به موقع یاد بگیرید و اقدامات به موقع برای جلوگیری از آن انجام دهید.

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

حمله SYN Flood از یک مشخصه پیاده سازی پروتکل کنترل انتقال (TCP) استفاده می کند که به آن دست دادن سه طرفه می گویند. مراحل زیر در یک دست دادن معمولی سه طرفه رخ می دهد:

1. مشتری با ارسال یک پیام SYN (همگام سازی) به سرور درخواست اتصال می کند.
2. سرور این درخواست را با ارسال SYN-ACK به مشتری تأیید می کند.
3. مشتری با ACK پاسخ می دهد و اتصال برقرار می شود.

یک حمله سیل SYN با پاسخ ندادن به سرور با کد ACK مورد انتظار کار می کند. با این اتصالات نیمه باز، بک لاگ TCP ماشین های مورد نظر پر می شود و در نتیجه همه اتصالات جدید ممکن است نادیده گرفته شوند. این باعث می شود که کاربران قانونی نیز نادیده گرفته شوند.

این حمله می تواند به دو صورت انجام شود:

1. حمله مستقیم

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

2. استفاده از جعل آدرس IP

این یک شکل حمله پیچیده تر از حمله مستقیم است. در این روش، ماشین مخرب سیل درخواست SYN را از آدرس‌های IP جعلی به ماشین مورد نظر ارسال می‌کند و باعث می‌شود سرور SYN-ACK را به یک آدرس IP جعلی ارسال کند - که ACK ارسال نمی‌کند زیرا "می‌داند" که هرگز نمی‌فرستد. یک SYN ارسال کرد.

شناسایی حمله سیل SYN

علامت کلی حمله SYN Flood برای بازدیدکنندگان وب سایت این است که بارگذاری یک سایت زمان زیادی طول می کشد، یا برخی از عناصر یک صفحه را بارگذاری می کند اما برخی دیگر را بارگذاری نمی کند. اگر به حمله SYN Flood به سرور وب مشکوک هستید، تو می توانیبرای بررسی درخواست های اتصال به سرور وب که در وضعیت "SYN_RECEIVED" هستند استفاده کنید.

netstat -tuna | grep:80 | grep SYN_RECV

اگر اتصالات متعددی را با این حالت نشان دهد، سرور ممکن است تحت حمله SYN Flood باشد. اگر حمله مستقیم با تعداد زیادی بسته SYN_RECV از یک آدرس IP منفرد باشد، می توانید با افزودن آن آدرس IP در فایروال، این حمله را متوقف کنید. اگر APF یا فایروال روی سرور خود نصب کرده اید، می توانید با اجرای دستور زیر این کار را انجام دهید:

apf -d IPADDRESS
csf -dIPADDRESS

دفاع از SYN Flood Attack

استفاده از کوکی های SYN

این موثرترین روش برای دفاع از حمله SYN Flood است. استفاده از کوکی‌های SYN به سرور اجازه می‌دهد تا هنگام پر شدن صف SYN از قطع شدن اتصالات جلوگیری کند. در عوض، سرور طوری رفتار می کند که گویی صف SYN بزرگ شده است. سرور پاسخ مناسب SYN+ACK را به مشتری ارسال می کند اما ورودی صف SYN را رد می کند. اگر سرور سپس پاسخ ACK بعدی را از مشتری دریافت کند، می‌تواند ورودی صف SYN را با استفاده از اطلاعات کدگذاری شده در شماره توالی TCP بازسازی کند.

کوکی های SYN را می توان با افزودن موارد زیر به /etc/sysctl.conf فعال کرد

net.ipv4.tcp_synccookies=1

پس از اصلاح فایل پیکربندی sysctl، باید دستور زیر را برای بارگیری تنظیمات sysctl از فایل /etc/sysctl.conf اجرا کنید.

افزایش صف بک لاگ SYN

یک تکنیک دفاع اختیاری افزایش اندازه صف بک لاگ SYS است. اندازه پیش فرض 1024 است. این کار را می توان با افزودن موارد زیر به /etc/sysctl.conf انجام داد.

net.ipv4.tcp_max_syn_backlog=2048

کاهش تلاش‌های مجدد SYN_ACK

بهینه سازی پارامتر هسته tcp_synack_retries باعث می شود که هسته اتصالات حالت SYN_RECV را زودتر ببندد. مقدار پیش فرض 5 است.

net.ipv4.tcp_synack_retries = 3

تنظیم زمان SYN_RECV

کاهش مقدار زمان برای SYN_RECV به کاهش حمله سیل SYN کمک می کند. مقدار پیش فرض 60 است و می توانیم آن را به 40 یا 45 کاهش دهیم. این کار را می توان با افزودن خط زیر به sysctl.conf انجام داد.

net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv=45

جلوگیری از جعل IP

پارامتر sysctl زیر به محافظت در برابر جعل IP که برای حملات سیل SYN استفاده می شود کمک می کند.

net.ipv4.conf.all.rp_filter = 1

بسیاری از شرکت های میزبان با استقرار فایروال هایی که از دفاع سیل SYN مانند Netscreen یا Appsafe استفاده می کنند، در برابر حمله SYN محافظت می کنند.

هدف حملات DoS/DDoS ایجاد اختلال در سرویس در دسترس بودن اساسی است. هدف اصلی حملات DoS/DDoS خارج کردن شی مورد حمله از سرویس و غیرقابل دسترس کردن منابع آن برای کاربران قانونی است. حمله انکار سرویس را می توان به دو روش انجام داد: استفاده از آسیب پذیری ها در نرم افزارسیستم مورد حمله و با ارسال تعداد زیادی بسته شبکه ای که به طور خاص ساخته شده اند (flood).

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

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

برای بسیاری از DoS/ حملات DDoSنتایج پردازش توسط سرور بسته های ارسال شده توسط مهاجم برای دومی مورد توجه نیست. این به این معنی است که یک مهاجم می تواند جریانی از ادعاهای نادرست را از آدرس های IP نادرست ارسال کند (به این مفهوم جعل گفته می شود)، که مانع از شناسایی و مقابله موثر با چنین حملاتی می شود.

برای انجام یک حمله DoS موفق، به پهنای باند کانال نسبتاً بالایی نیاز است. بنابراین، حمله انکار سرویس در بیشتر موارد از چندین ماشین به طور همزمان انجام می شود. حمله ای که شامل تعداد زیادی ماشین می شود DDoS نامیده می شود. شایان ذکر است که برای یک حمله توزیع شده می توان از ماشین های آلوده به نرم افزار خاصی که متعلق به مهاجم نیست استفاده کرد. چنین ماشین های آلوده ای "زامبی" نامیده می شوند. یکی از راه‌های بدست آوردن «زامبی»، معرفی گسترده «تروجان‌ها» در رایانه‌های کاربران صلح‌جو است. با دریافت دستوری از خارج، چنین "تروجان" یک رایانه "آرامش آمیز" با دسترسی به اینترنت را به منبع درخواست های نادرست با هدف بارگیری منابع سرور تبدیل می کند.

رایج ترین حملات DoS عبارتند از:

TCP SYN Flood یا فقط TCP SYN

پینگ مرگ

بیایید نگاهی دقیق‌تر به حمله TCP SYN (tcp syn flood) بیندازیم، که هدف آن سرویس‌های کاربردی با استفاده از پروتکل لایه انتقال TCP است. این پروتکل به دلیل تضمین 100٪ تحویل تمام داده های ارسالی در سیستم های اطلاعاتی گسترده شده است. گره های شبکه در حال تعامل با استفاده از این پروتکل به عنوان یک انتقال، اتصالات TCP را بین خود برقرار می کنند، که در آن کنترل می شود که گیرنده تمام بسته های ارسال شده توسط فرستنده را دریافت کند. این به این صورت است که گیرنده به فرستنده اطلاع می دهد که کدام بسته ها را دریافت کرده است. اگر همه بسته های در نظر گرفته شده برای او به دست گیرنده نرسیده باشد، فرستنده آنها را دوباره ارسال می کند. همانطور که می بینید مزیت این پروتکل امکان برقراری ارتباط است. برای ذخیره اطلاعات در مورد وضعیت فعلی اتصال، به ویژه از میدان پرچم های بیت در بسته های مورد استفاده توسط پروتکل استفاده می شود. 8 بیت برای این فیلد رزرو شده است، اما 2 تای آنها رزرو شده است و در حال حاضر فقط 6 پرچم استفاده می شود: URG (پرچم فوری)، ACK (پرچم تایید)، PSH (پرچم تابع فشار)، RST (پرچم بازنشانی)، SYN (همگام سازی) ) و FIN (پرچم پایانی). متأسفانه مکانیسم برقراری اتصال که توسط استاندارد ایجاد شده است کامل نیست و حمله مورد بررسی فقط از کاستی های خود استفاده می کند.

هدف اصلی این حمله TCP SYN فراتر رفتن از محدودیت تعداد اتصالات TCP است که در حالت راه اندازی هستند. روش برقراری اتصال TCP را در نظر بگیرید. ابتدا کلاینتی که اتصال را آغاز می کند یک درخواست TCP-SYN به سرور ارسال می کند. با دریافت چنین درخواستی، سرور حافظه را برای پارامترهای اتصال در یک بافر طراحی شده اختصاص می دهد. سپس بسته ای را با پرچم های SYN+ACK به مشتری TCP ارسال می کند. پس از دریافت بسته SYN+ACK، کلاینت باید یک بسته تایید را به سرور ارسال کند، یعنی. یک بسته با مجموعه پرچم ACK. هنگامی که سرور این بسته را دریافت و پردازش می کند، اتصال برقرار می شود. در بالا توضیح داده شد

این روش در شکل نشان داده شده است. 1.1

برنج. 1.1

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

فقدان بازخورد از سوی مهاجم، شناسایی و دفع حمله TCP-SYN را به یک چالش تبدیل می کند.

تعیین اهداف برای محافظت در برابر تهدیدات

در حال حاضر، هیچ روش موثری برای شناسایی حملات TCP SYN در ادبیات باز شناخته نشده است. سیستم عامل های مدرن مکانیسم هایی برای محافظت از سرور مورد حمله دارند، مانند کوکی های SYN. هنگامی که سیستم عامل تشخیص دهد که برخی از پارامترها بیش از حد مجاز است، به طور خودکار محافظت را روشن می کند. به عنوان مثال، ویندوز 2000 مقادیر سه پارامتر را کنترل می کند: TcpMaxHalfOpen، TcpMaxHalfOpenRetried، TcpMaxPortsExhausted. آستانه‌های این تنظیمات دارای مقادیر پیش‌فرض هستند و توسط مدیر قابل تغییر هستند. اگر مقادیر اولیه برای یک سرور خاص مناسب نباشد، مدیر کار دشواری برای پیکربندی موثر حفاظت دارد. علاوه بر این، این روش نیازمند تغییرات مناسب در پیاده سازی پشته TCP/IP است که برخی از کارشناسان شبکه آن را "نقض جدی" پروتکل TCP می دانند.

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

هدف از کار استاد ایجاد یک روش ریاضی منطقی برای تشخیص حملات TCP SYN است. برای انجام این کار، ساخت یک مدل ریاضی که تعامل یک سرور TCP با کلاینت ها را توصیف می کند، ضروری است. پارامترهای اولیه برای چنین مدلی باید ویژگی های سرور و کانال ارتباطی باشد و پارامتر خروجی باید بیانیه ای در مورد وجود یا عدم وجود حمله TCP-SYN باشد.

تا بتوانیم از روش پیشنهادی در عمل برای حفاظت از منابع حیاتی استفاده کنیم شبکه شرکتیابزارهایی نیز برای تعیین مقادیر واقعی پارامترهای ورودی مدل برای یک سرور خاص و شبکه ای که به آن متصل است مورد نیاز است.

سلب مسئولیت 1: لطفاً مرا به خاطر این واقعیت که مقاله نسبتاً مچاله شده است و بسیاری از موضوعات به طور کامل پوشش داده نشده است، ببخشید. در نظرات بپرسید. من، به نوبه خود، سعی خواهم کرد بیشترین را فاش کنم موضوعات جالبدر مقالات آینده

سلب مسئولیت 2: مقالات زیادی در شبکه با عناوین "چگونه از سرور خود در برابر حملات SYN محافظت کنیم" یا "محافظت DDoS لینوکس" وجود دارد. باید به شما هشدار دهم که به هیچ وجه نباید کورکورانه به بسیاری از آنها اعتماد کرد! آنها اغلب توسط افرادی نوشته می شوند که به خوبی درک نمی کنند که در طول حمله چه اتفاقی می افتد، و انجام کارهای احمقانه را توصیه می کنند - شخصی sysctl را "بهینه سازی" می کند تا حتی ترافیک عادی از رفتن به سرور متوقف شود، و بیشتر آنها نیز فعال کردن syncookies را توصیه می کنند، که به طور قطعی است. انجام شده با اکثر حملات واقعی غیرممکن است!

این مقاله 3 هدف دارد:

حمله SYN چیست؟

سیل SYN یا حمله SYN یک تکنیک انکار سرویس است که بر میزبان هایی که فرآیندهای سرور TCP را اجرا می کنند تأثیر می گذارد. این حمله از این واقعیت سوء استفاده می کند که TCP پس از دریافت یک بخش SYN در پورتی که در وضعیت LISTEN است، وضعیت جلسه را ذخیره می کند. ایده اصلی این است که از این رفتار سوء استفاده شود و باعث شود میزبان حالت زیادی را برای جلسات نیمه باز نادرست ذخیره کند که هیچ منبعی برای ایجاد اتصالات جدید باقی نماند (RFC4987).

مقابله با سیل SYN نسبتاً دشوار است، به همین دلیل است که این نوع حمله بسیار محبوب است. چرا؟

1) معمولاً از IP های منبع تصادفی استفاده می شود که ممنوع کردن آنها بی فایده است زیرا در هر بسته مجدداً تولید می شوند.
2) حمله SYN منابع کمی را از طرف مهاجم و مقدار زیادی را از طرف قربانی مصرف می کند.
3) حفاظت در برابر این نوع حمله کاملاً پیچیده، پر از نکات ظریف است و درک و اجرا زمان می برد.

من معتقدم که سرورهایی که به طور بالقوه قابل حمله هستند (در واقع همه سرورهایی که آدرس IP عمومی دارند، به ویژه سرورهای وب) باید از قبل در برابر حملات SYN محافظت شوند.

شکل 1: حمله SYN

حملات SYN چگونه انجام می شود؟

نمونه ای از ابزاری که اغلب برای انجام حملات استفاده می شود hping3 است. قبل از اینکه مهاجمان این کار را برای شما انجام دهند می توانید از آن برای تست استرس سرور خود استفاده کنید.

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

# hping3 -S<--fast|--faster|--flood>-p 80 xx.xx.xx.xx

80 (HTTP) در این مثال پورت مقصد است. به گزینه های دیگر (hping3 --help) نگاهی بیندازید تا ببینید حملات چگونه می توانند با یکدیگر متفاوت باشند.

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

چگونه یک حمله SYN را شناسایی و اندازه گیری کنیم؟

1) در طول یک حمله SYN، مهاجم بسیاری از اتصالات را به سرور شما باز می کند، اما هرگز آنها را نمی بندد، و اتصالات همچنان در حالت SYN_RECV باقی می مانند. آنها را می توان به این صورت محاسبه کرد:

# netstat -anutp | grep SYN_RECV | wc -l

اگر این عدد بیش از 30 باشد، احتمالاً تحت حمله SYN هستید.

2) می توانید بار شبکه فعلی را با استفاده از vnstat نظارت کنید:

# vnstat -l -i eth0

این یک ابزار بسیار مفید است که به شما کمک می کند تا بفهمید یک حمله چقدر قوی است.

F2 را فشار دهید، به "Display options" بروید و "Display Threads in a other color" را انتخاب کنید. در صورتی، می‌توانید بار ناشی از وقفه‌های سیستم را ببینید.

4) SYN هایی را که سرور دریافت می کند مرور کنید - چه چیزی مشترک است؟ "-c 100" به tcpdump می گوید که خود را به 100 بسته محدود کند.

# tcpdump -i eth0 -nn "tcp port 80" و "tcp == 2" -c 100

در نهایت، به یاد داشته باشید که بسیاری از حملات SYN "یکنواخت" نیستند، آنها اوج و فرورفتگی دارند که باید در فرآیند تجزیه و تحلیل در نظر گرفته شوند.



شکل 2. دینامیک یک حمله معمولی

اول چیزهای مهم

NIC، قطع، صف ...

اولین چیزی که باید روی آن کار کرد راننده است کارت شبکه. هنگامی که یک فریم به کارت شبکه می رسد، باید یک وقفه سیستمی را آغاز کند، که به پردازنده می گوید وظیفه فعلی را به حالت تعلیق درآورد و بخش ورودی از ترافیک را پردازش کند. با این حال، اگر هر فریم باعث وقفه فوری شود و CPU را از کار فعلی منحرف کند، کاهش عملکرد قابل توجهی حتی در ساده‌ترین عملیات شبکه، مانند انتقال فایل از طریق FTP، قابل مشاهده است. بنابراین، این وقفه ها در صفی سازماندهی می شوند که در کارت شبکه جمع می شوند و در یک زمان توسط پردازنده پردازش می شوند. معمولاً این 250-1000 بار در ثانیه اتفاق می افتد، هر چه کمتر - هرچه بار CPU کمتر باشد، تاخیر بیشتر است.

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

1) اولین و توصیه شده استفاده از صف های سخت افزاری است. NIC های مدرن دارای صف های وقفه متعدد هستند، معمولاً 4-16. به دلایلی، در لینوکس آنها اغلب به طور پیش فرض غیرفعال هستند. ما باید آنها را فعال کنیم و سپس آنها را به طور مساوی در بین پردازنده ها توزیع کنیم.

2) روش دوم RPS - Receive Packet Steering نام دارد. زیباست مکانیزم جدیدهسته که به طور خودکار بار را بین تمام هسته ها توزیع می کند، فرقی نمی کند که کارت چندین صف سخت افزاری داشته باشد یا خیر. از این روش فقط در صورتی استفاده کنید که تعداد هسته‌های شما بیشتر از صف‌های سخت‌افزاری باشد (به هر حال، SMT/HyperThreading را غیرفعال کنید - در هنگام حمله مفید خواهد بود).


شکل 3. کارت شبکه 10 گیگابایتی اینتل

مراحلی که باید انجام داد:

1) سازنده و مدل کارت شبکه را مشخص کنید (اینتل بود بهتر بود)

# ethtool -i eth0

2) نصب کنید آخرین درایورها. به وب سایت سازنده تراشه کارت شبکه بروید و دانلود کنید آخرین نسخهدرایورهای لینوکس (برای ساخت آن، به منابع هسته فعلی نیاز دارید)

3) صف های سخت افزاری را تنظیم کنید. برای انجام این کار، باید از مستندات درایور کارت شبکه که همراه آن است استفاده کنید. برای igb( درایورهای اینتل) با 8 صف و 4 پورت به صورت زیر است:

# rmmod igb
# modprobe igb QueuePairs=1,1,1,1 RSS=8,8,8,8 IntMode=3,3,3,3 InterruptThrottleRate=3000300030003000

برای درایور igb در RHEL/CentOS، می‌توانید به سادگی خط گزینه‌های درایور را به /etc/modprobe.conf اضافه کنید و راه‌اندازی مجدد کنید:

گزینه های igb QueuePairs=1,1,1,1 RSS=8,8,8,8 IntMode=3,3,3,3 InterruptThrottleRate=3000,3000,3000,3000

4) بارهای وقفه را به طور مساوی بین هسته ها توزیع کنید.
تعیین اینکه کارت از کدام اعداد وقفه استفاده می کند (در مورد ما، eth0) ضروری است.

# cat /proc/interrupts | grep eth0

در اینجا می‌توانید تمام شماره‌های وقفه‌ای که NIC شما استفاده می‌کند و نحوه توزیع آنها در هسته‌ها را مشاهده کنید. این اعداد را یادداشت کنید. اکنون باید وابستگی SMP را تغییر دهیم تا هر وقفه هسته خودش را اختصاص دهد (وقفه 1 > cpu 1، وقفه 2 > cpu 2 و غیره). در اینجا نحوه انجام آن آمده است:

#پژواک > /proc/irq/xx/smp_affinity

5) اختیاری: RPS را فعال کنید (ممکن است به این مورد نیاز نباشد، به بالا مراجعه کنید)

# echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus

دستگاه مناسب (اگر eth0 نباشد) و تمام صف های دریافتی که پشتیبانی می کند (rx-0..n) را انتخاب کنید.

sysctl

مورد بعدی sysctl نام دارد. این یک رابط نرم افزاری است که به شما امکان می دهد بسیاری از تنظیمات سیستم را در لحظه پیکربندی کنید. با این حال، در این مقاله، از بحث در مورد نحوه استفاده از آنها برای محافظت در برابر حملات SYN خودداری می کنیم - قبلاً در اینترنت مطالب زیادی در این مورد نوشته شده است.

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

تنها چیزی که من می خواهم به عنوان مهم و اغلب مورد استفاده نادرست توجه داشته باشم، به اصطلاح syncookies است. به طور خلاصه، این یک مکانیسم در سراسر سیستم برای مبارزه با حملات SYN با ارسال کوکی ها در پاسخ به هر درخواست SYN برای تایید مشروعیت اتصال است. واقعیت این است که اگر نرخ حمله 40 درصد از پهنای باند مؤثر سرور یا کمتر باشد، این می تواند واقعا مفید باشد (منظورم از موثر این است. توان عملیاتی، که سرور در واقع قادر به پردازش آن است). در موارد دیگر، استفاده از syncookies منجر به افزایش بار در شبکه، CPU و در نتیجه انکار سرویس می شود.

من شخصاً در اکثر موارد syncookies را غیرفعال می کنم.

تکنیک های امنیتی اولیه با iptables

فراموش نکنید که دیوار آتش خود را "تقویت" کنید: تمام ترافیک ورودی به جز آنچه واقعاً در سرور شما مورد نیاز است را مسدود کنید. اجازه مدیریت فقط از شبکه های قابل اعتماد.

ساده ترین مورد حمله از 1 IP بدون جایگزینی آدرس (جعل) است. مقابله با این موارد آسان است:

# iptables -A INPUT -p tcp -m حالت -- حالت NEW -m اخیر -- به روز رسانی -- ثانیه 60 -- تعداد بازدید 20 -j DROP
# iptables -A INPUT -p tcp -m حالت --state NEW -m اخیر --set -j ACCEPT

این قوانین تعداد بسته های SYN در هر آدرس را به 20 بسته در دقیقه محدود می کند. فقط همیشه از آن استفاده نکنید! می توانید ترافیک قانونی را از پشت NAT مسدود کنید.

بسیاری از حملات SYN را می توان با پارامترهای هدر TCP «غیر معمول» و تکراری فیلتر کرد که به ابزارهای «sin» حمله می کنند.

اولین چنین پارامتر MSS (حداکثر اندازه بخش) است - حداکثر اندازه بخش که میزبان شروع کننده اتصال می خواهد اجازه دهد. اکثر ابزارهای حمله (از جمله hping) این گزینه را به طور پیش فرض فعال نمی کنند. از طرف دیگر، من هنوز مشتری های قانونی را ندیده ام که آن را نصب نکنند. مقادیر "نرمال" از 536 تا 65535 متغیر است، بیایید از آن استفاده کنیم:

# iptables -t mangle -I PREROUTING -p tcp -m tcp --dport 80 -m state --state NEW -m tcpmss ! --mss 536:65535 -j DROP

ضمناً جدول mangle سریعتر از فیلتر است زیرا زودتر پردازش می شود اما تمام ترافیک از آن عبور می کند و راهی برای جدا کردن INPUT و OUTPUT و FORWARD وجود ندارد.

یکی دیگه فوق العاده پارامتر مفیداندازه پنجره TCP است. اکثر مهاجمان هر بار آن را تولید نمی کنند و در طول حمله یکسان می ماند. برای فیلتر و مسدود کردن بخش ها بر اساس اندازه پنجره، به ماژول u32 برای iptables نیاز دارید. هنگامی که اندازه پنجره حمله (به عنوان مثال، 512) را می دانید، آن را به هگز (در مورد ما 0x200) تبدیل کنید و دستور زیر را اجرا کنید:

# iptables -t mangle -I PREROUTING -d xx.xx.xx.xx -p tcp -m u32 --u32 "6&0xFF=0x6 && 32&0xFFFF=0x200" -j DROP

اما مراقب باشید! اندازه پنجره های شناخته شده مورد استفاده توسط سیستم عامل های محبوب را مسدود نکنید: 14600، 1892، 65535، 62240، 5840، 32120، 5720، 4128، 8760، 16384، 62920، 643820 و 17.

در نهایت به پارامتر TTL (Time To Live) اشاره می کنیم. من می‌خواهم این آخرین پارامتری باشد که بررسی‌های شما بر اساس آن انجام می‌شود، زیرا محدوده مقادیر کم است و تقریباً مطمئناً شخص اشتباهی را مسدود خواهید کرد. اما هنگامی که بسته های حمله زیادی را مشاهده می کنید، و آنها فقط با TTL مطابقت دارند - این می تواند کمک کند.

# iptables -A FORWARD -p tcp -m ttl --ttl-eq=55 -m state --state NEW -j DROP

اگر هیچ چیز کمک نمی کند

با حرفه ای ها تماس بگیرید! جدی میگم آنچه در اینجا توضیح داده می شود فقط نوک کوه یخ است. به یاد داشته باشید، دو استراتژی دفاعی وجود دارد که باید با هم استفاده شوند:

1) افزایش/بهینه سازی منابع محاسباتی/شبکه ​​برای پردازش تعداد بیشتری از درخواست ها.
2) جداسازی ترافیک ناخواسته از ترافیک قانونی به منظور انسداد بیشتر.

بنابراین، شما 3 دلیل برای درخواست کمک از خارج دارید:
1) شما پهنای باند یا منابع محاسباتی کافی برای جداسازی ترافیک ناخواسته از قانونی ندارید.
2) حمله پیچیده است و بسته های ناخواسته تفاوتی ندارند یا تقریباً با بسته های قانونی تفاوتی ندارند. حرفه ای ها از روش های فیلترینگ پیشرفته تر و گاهی سخت افزار و نرم افزار تخصصی گران قیمت استفاده می کنند.

و در نهایت