پنجشنبه ۰۴ اردیبهشت ۱۴۰۴

Thursday, April 24, 2025 GMT +3:30

حمله DDoS چیست و چگونه از آن جلوگیری کنیم؟

web-ddos-attack

امروزه مقوله امنیت و شاخه های آن در فضای سایبری به امری حیاتی و همه گیر تبدیل شده است، مخصوصا برای صاحبان سایت ها و مهم تر از آن برای مدیران سرورهای وب، چرا که آسیب پذیری و ضعف امنیتی به عنوان عاملی بازدارنده در مسیر پیشرفت و توسعه اهداف در وب محسوب می شود، بعضا شاهد هستیم که افراد مختلف با انگیزه های متفاوت اقدام به هک و ایجاد اختلال در سایت ها و سرورها و در نتیجه باعث از دسترس خارج شدن و در حالت پیشرفته تر از کنترل خارج شدن آنها می شوند، این افراد برای رسیدن به مقاصدشان از شیوه های متفاوتی استفاده می کنند که البته بسته به میزان هوشمندی مدیران سرور و رعایت نکات امنیتی در سیستم های مدیریت محتوا (CMS) خیلی از این روش ها به راحتی قابل پیشگیری است، آنچه در این مطلب قصد داریم به آن بپردازیم آشنا شدن با نوعی از ایجاد اختلال در وب موسوم به حمله های DDoS یا Distributed Denial of Service attack است که بیشترین شیوع را در بین حملات مخرب دارد.

حمله DDoS چیست؟


به زبان ساده حمله DDoS یا DoS (مخفف Denial of Service attack) یعنی سرازیر کردن تقاضاهای زیاد به یک سرور (کامپیوتر قربانی یا هدف) و استفاده بیش از حد از منابع (شامل پردازنده، پایگاه داده، پهنای باند، حافظه و...) به طوری که سرویس دهی عادی آن به کاربرانش دچار اختلال شده یا به کلی از دسترس خارج شود (به دلیل حجم بالای پردازش یا به اصطلاح Overload شدن عملیات های سرور)، در این نوع حمله ها در یک لحظه یا طی بازه زمانی به صورت مداوم از طریق کامپیوترهای مختلف که ممکن است خواسته یا حتی ناخواسته مورد استفاده قرار گرفته باشند، به یک سرور (با آی پی مشخص) درخواست دریافت یا پردازش اطلاعات می شود و به دلیل محدود بودن قدرت پاسخ دهی سرور به کاربران در وضعیت عادی (یعنی قدرت سرور را به تعداد کاربرانش در حالت عادی در نظر گرفته اند نه در شرایط حجم درخواست های غیر طبیعی)، مشابه مواقعی که کامپیوترهای رومیزی دچار کندی یا توقف کامل می شوند دچار وقفه در سرویس دهی یا Down شدن آن می شود.

چه کسانی حمله DDoS را انجام می دهند؟


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

علائم حمله DDoS چیست؟


خوشبختانه یکی از موارد مثبت در هنگام بروز این نوع حملات این است که به سرعت می توان به نحوه عملکرد سرویس مشکوک شد و جلوی اختلال بیشتر را گرفت، پس از اینکه سروری مورد حمله DDoS قرار می گیرد ممکن است با توجه به اهداف و شیوه به کار رفته یک قسمت از منابع یا همه ی قسمت های اصلی آن دچار اختلال شود، در زیر لیستی از این علائم را ذکر می کنیم:
- کندی در پاسخگویی به درخواست ها
سروری که مود حمله قرار گرفته باشد معمولا خیلی کند و با وقفه به درخواست بارگذاری صفحات وب پاسخ می دهد، البته این نشانه همیشه دلیل حمله DDoS نیست چرا که این اتفاق به طور طبیعی نیز برای سرورها و سایت ها به دلایل فنی یا بازدید بالا ممکن است رخ دهد و کنترل این امر بستگی زیادی به قدرت سخت افزاری سرور و تنظیمات آن دارد، اما کند شدن غیرطبیعی فرآیندهای سرور همیشه می تواند یک هشدار برای مدیران امنیتی تلقی شود تا اوضاع را بررسی و کنترل کنند.
- عدم اتصال به پایگاه داده
گاهی ممکن است صفحات استاتیک وب که نیازی به اتصال پایگاه داده ندارند به راحتی بارگذاری شوند اما اتصال به پایگاه داده برای صفحات داینامیک برقرار نشود، در چنین مواقعی معمولا پیام تکمیل ظرفیت اتصال به پایگاه داده یا Too Many Connections  ظاهر خواهد شد، بهترین کار در چنین حالتی این است که با تنظیم یک دستور هدر 500 HTTP به ربات های جستجوگر بگوییم که سایت ما فعلا دچار مشکلی است و بعدا مراجعه نمائید!، چرا که در غیر اینصورت با وجود Down بودن دیتابیس سرور، ربات ها با دریافت وضعیت HTTP 200 صفحه خالی را ایندکس می کنند که این حالت قاعدتا مناسب نیست، در PHP این کار را با استفاده از دستورات header می توانیم انجام دهیم:
header('HTTP/1.0 500 Internal Server Error');
دقت کنیم که عدم اتصال به پایگاه داده می تواند از پائین بودن قدرت سخت افزاری یا مشکلات نرم افزاری و پیکره بندی نامناسب سیستم مدیریت پایگاه داده نیز ناشی شود، لذا این حالت نیز صرفا به عنوان نشانه وجود مشکل (نه الزما حمله DDoS) در سرور تلقی می شود که باید توسط مدیر فنی یا امنیت شبکه بررسی شود.
- مصرف بیش از حد منابع سرور
یکی دیگر از نشانه های حمله DDoS می تواند مصرف بیش از حد و غیر طبیعی منابع سرور از قبیل حافظه یا میزان دیتای رد و بدل شده بین سرور و کلاینت در یک بازه زمانی کوتاه باشد.
- افزایش انفجاری درخواست ها
یکی دیگر از نشانه های حمله DDoS وجود شمار زیادی درخواست HTTP به سرور است که با مشاهده فایل Log و قسمت آمار می توان به این موضوع پی برد.
- اختلالات در سرویس های جانبی نظیر ایمیل
گاهی مواقع حملات DDoS سرویس های جانبی سرور نظیر سرویس ایمیل را هدف می گیرند، در این مواقع ارسال و دریافت ایمیل ممکن است به کندی صورت گیرد یا دچار وقفه شود، البته همانطور که گفتیم هر وقفه و اختلالی به معنی حمله DDoS نیست، اختلال در سرویس های جانبی اگر بدون علت فنی خاصی باشد می تواند نشانه ای از حملات محسوب شود که با کنار هم قرار دادن شواهد دیگر می توانیم از وجود یا عدم وجود DDoS مطمئن شویم.

در حمله DDoS از چه روش هایی استفاده می شود؟


چند روش به عنوان شایع ترین ها در این نوع حملات استفاده می شود که در ادامه به طور مختصر و جهت آشنایی بیشتر به آنها اشاره می کنیم:
- روش Ping Flood یا طوفان درخواست ها
در این شیوه مهاجم سعی می کند با ارسال درخواست ها (یا بسته های Ping) به سمت کامپیوتر هدف (قربانی) و با تکرار این عمل، کل منابع سرور را اشغال کند تا در نهایت عملکرد آن را به طور کامل از کار بیندازد، در این شیوه معمولا از کامپیوترهای موجود در یک شبکه یا از سرورهایی به طور همزمان درخواست ها به سمت سرور قربانی ارسال می شود تا در نهایت موجب از کار افتادن و به اصطلاح Down آن شود.
- روش Smurf attack یا استفاده از نقص تنظیمات
یک Smurf attack نوع خاصی از طوفان درخواست ها به یک سرور است که طی آن به دلیل وجود ضعف در تنظیمات سرویس، بسته هایی از اطلاعات موسوم به ICMP (مخفف Internet Control Message Protocol) به تمام کامپیوترهای موجود در یک شبکه از طریق آدرس Broadcast آنها ارسال می شود، آدرس Broadcast می تواند به عنوان مثال آی پی اشتراکی سایت های موجود در یک سرور باشد، در این حالت اگر تنظیمات سرور به درستی انجام نشده باشد ارسال یک درخواست به این آی پی موجب تقسیم شدن آن بین تمام زیر شاخه ها و در نتیجه Overload شدن سرور می شود.
- حملات موسوم به SYN یا SYN flood
روش اخیر نیز در عمل مشابه با موارد گفته شده است، با این تفاوت که در اینجا مهاجم با ارسال درخواست هایی از نوع بسته های TCP/SYN در پشت چهره ای عادی و تایید شده به عنوان یک کاربر معمولی، از سرور تقاضای اتصال می کند که پس از ارسال پاسخ درخواست هیچ جوابی به پاسخ سرور داده نمی شود تا اتصال نیمه باز همچنان برقرار باشد (سرور در انتظار پاسخ مهاجم مدتی صبر می کند)، در این بین با افزایش این اتصالات نیمه باز، منابع سرور اشغال شده و نهایتا موجب بروز اختلال و از کار افتادن آن می شود.
- روش Teardrop یا Teardrop attacks
در این شیوه رشته ای از آی پی های ناقص به هم متصل شده و شبیه به هم را به سرور ارسال می کنند که اگر تنظیمات قسمت TCP/IP fragmentation re-assembly سرور دچار نقص در تشخیص آنها باشد، موجب بروز مشکل اضافه بار یا Overload در سرور خواهد شد.
ddos-attack-to-server

حمله DDoS چقدر طول می کشد؟


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

برای جلوگیری از حمله DDoS چه کارهایی را انجام دهیم؟


واقعیت این است که کنترل حمله های DDoS پس از وقوع کمی دشوارتر از پیشگیری از آن است، امروزه در سایت ها و انجمن های زیادی به افراد آموزش شیوه های هک و ایجاد حمله های DDoS داده می شود که این امر با افزایش شمار کاربران اینترنت (که می توانند میانجی و قربانی بالقوه برای حمله به سرورها باشند) و توسعه زیرساخت ها و سخت افزارهای شبکه به لحاظ کمی رو به گسترش است، البته آسیب پذیری در این رابطه بیشتر به امنیت سرور برمی گردد تا به امنیت سایتمان، در مورد سرور می توان پس از اطمینان از حمله DDoS، آی پی هایی را که بیشترین تقاضا را به سرور داشته اند و ناشناس هستند توسط فایروال ها بلاک و مسدود کرد، یا با نصب بسته های امنیتی خاص و به روزرسانی و ارتقاء سخت افزاری و نرم افزاری، آسیب پذیری سرور را تا حد چشمگیری کاهش داد، آگاهی از روند عادی سرور می تواند کمک بزرگی در این خصوص محسوب شود، چرا که اگر مدیر سرور نسبت به عادی یا غیر عادی بودن ترافیک آن آشنایی داشته باشد به سرعت می تواند پی به وجود این نوع حمله ها ببرد و در جهت رفع اختلال برآید، به عنوان یک کاربر عادی در سرویس های میزبانی وب بهترین کار این است که به محض مشکوک بودن به چنین حمله هایی موضوع را به پشتیبانی فنی هاست خود اطلاع دهیم تا در کوتاه ترین زمان جلوی آن گرفته شود.
دسته بندی: مهارتهای وب » دانستنی ها
related مطالب بیشتر:
مفهوم پلتفرم (Platform) و فریم ورک (Framework)
دلایل بهم ریختن قالب وبلاگ و سایت
IP چیست و چه کاربردی دارد؟
جلوگیری از بلاک یا ارسال ایمیل به اسپم با SPF
پروتکل امن HTTPS و رمزنگاری SSL چیست؟
دیدگاه
more ۴۰ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
برنامه نویس
۰۰:۵۵ ۱۴۰۰/۰۴/۲۷
سلام و عرض ادب خدمت استاد.
یه سوال خدمت شما داشتم.
چطور می تونیم از ادیتور مثل ckeditor یا tinymsc به جای textarea ساده استفاده کنیم و خیالمون از بابت حملات xss و .... راحت باشه؟ من PHP pure کار می کنم. کتابخانه HTML Purifier رو هم آشنایی دارم. آیا میشه به این کتابخانه از همه لحاظ اعتماد کرد؟ آیا راه ساده ای وجود داره برای ایمن کردن کدهای html که از طریق textarea تزریق میشن؟
الان خود شما از textarea ساده استفاده کردین و ادیتور متن ندارین، آیا این کار به دلیل رعایت امنیت هست؟
اگه بخوام ادیتور استفاده کنم، کدام ادیتور رو پیشنهاد میکنید؟
ممنونم.
در صورتی که با ساز و کار حملات XSS آشنا باشید مشکلی برای استفاده از ادیتورها وجود ندارد، چه از طریق Textarea چه ادیتور و حتی از طریق متد GET امکان حملات XSS وجود دارد، در این حملات معمولا کد اجرایی یا لینک مخرب به ورودی برنامه اضافه می شود و این ورودی بعدا می تواند در جایی از سایت به همان صورت چاپ شده و یک اسکریپت را در مرورگر کاربر اجرا (و به فرض اطلاعات کوکی را سرقت کند) یا کاربر بر روی یک لینک مخرب کلیک و به صفحه هکر هدایت شود.
با این توضیح حملات XSS زمانی تکمیل می شود که ورودی در جایی از برنامه به همان شکل اجرا گردد، لذا برای استفاده از ادیتورها انجام چند گام زیر توصیه می شود:
- تنها ثبت یک سری از تگ های امن HTML مانند br و... مجاز باشد، البته این تگ ها را هم بهتر است در سمت کاربر قبل از ارسال به سرور به یک عبارت اختصاصی (به فرض <-[BR]->) تبدیل کرده و کل ورودی را با توابعی مانند htmlentities از حالت تگ خارج کنیم.
- در صورتی که استفاده از htmlentities مورد نظر نباشد حداقل تگ های اسکریپت، لینک و... باید ایمن سازی شوند.
- قبل از ذخیره اطلاعات در دیتابیس حتما از روش های ایمن سازی مانند Bind و Prepared Statements استفاده کنیم (البته این مورد بیشتر به SQL Injection مربوط می شود اما در مجموعه اقدامات جهت حفظ امنیت سایت مورد نیاز است).
- دقت کنیم که هرکجا متن ارسال شده از سمت یک کاربر برای دیگران چاپ می شود به صورت امن باشد (تگ های اسکریپت با معادل HTML آنها غیرفعال شوند یا آدرس های لینک به صورت متنی و نمایشی چاپ شوند).
HTML Purifier را تست نکرده ایم اما به نظر همه موارد مورد نظر را انجام می دهد اما در کل ابتدا روی درک دقیق حملات XSS تمرکز کنید روش های ایمن سازی می توانند بسته به ساز و کار برنامه در هر قسمت متفاوت باشد.
TinyMCE قدیمی تر است و قبلا قدرتمندتر بود اخیرا بررسی نداشته ایم اما ظاهرا رقابت تنگاتنگ شده و در کل هر دو مناسب به نظر می رسند (به نظر بیشتر باید به معیار حجم کلی ادیتور و امکانات ارائه شده توجه داشته باشیم).
امیر
۲۰:۰۱ ۱۴۰۰/۰۲/۲۴
سلام میخام یه همچین کاری برای یه سایته خیلی ضعیف انجام بدم
ازین بات ها یا نرم افزارها باید بریزم؟ یا خودم دستی باید انجام بدم؟
به صورت دستی امکان ایجاد اختلال DDoS تقریبا غیرممکن است، باید درخواست هایی مانند cURL را پشت سرهم ارسال کنید و برای این کار باید به خط فرمان سرور دسترسی داشته باشید، به فرص دستور Bash زیر هر ثانیه اجرا و عبارت "Hi" را چاپ می کند:
while sleep 1; do echo "Hi"; done
برای cURL باید کدهای پیچیده تری نوشته شود، مثال:
https://linuxhint.com/curl_bash_examples
به نظر گزینه عملی این است که از ابزارهای شبیه سازی حمله DDoS استفاده کنید، برای این کار عبارت "DDoS Simulation Tools" را در گوگل جستجو نمائید.
aliakbar
۱۱:۵۵ ۱۴۰۰/۰۲/۰۱
من به سیستمم دیداست میزنن چیکار کنم ؟
یکی از دوستام ایپیمو داره هی دیداست میزنه . هی نتم قطع میشه یا داخل هیچ سایتی نمیره
به نظر نمی رسد مشکل کیفیت اتصال اینترنت مرتبط با حمله DDOS باشد، IP شما در استفاده از اینترنت ISPها معمولا با هر بار اتصال تغییر می کند و مقدار ثابتی نیست، سعی کنید از چند طریق مختلف به اینترنت متصل شده و امتحان کنید، همچنین اگر از برنامه پراکسی استفاده می کنید آنها را به درستی غیرفعال و تست کنید، متاسفانه مشکل بارگذاری سایت ها به خصوص در رابطه با اینترنت مخابرات مشکل فراگیری است که هر از چندگاهی شدت آن بیشتر می شود.
احمد
۲۱:۳۱ ۱۳۹۹/۱۲/۲۸
سلام مجدد عذرخواهی میکنم یه موردی دیگه بود فراموش کردم در مورد سوال هدر بگم اینکه روی لوکال به هدر ارسال میشه ولی روی هاست به هدر ارسال نمیشه این نمونه کدهام ببخشید.
if(a.length < 1) {
alert('لطفا فیلدها رو پر کنید');
}else {
$.ajax({
url: 'test.php',
type: 'post',
data:frm
})
.done(function (msg) {
window.location.href = 'zzzz.php';
});
}
})
یافتن علت مشکل نیاز به خطایابی آنلاین دارد، در هر صورت شایع ترین دلایل می تواند وجود خطا در کدهای جاوا اسکریپتی (در مرورگر کلید F12 را بزنید و از قسمت Console خطاها را بررسی کنید) یا خطا در خروجی سمت سرور باشد (به فرض وجود مشکل در اتصال به دیتابیس یا اجرای پرس و جوها)، در مورد تنظیم دستورات Header در PHP باید مطمئن شویم که BOM در فایل ها وجود نداشته باشد (با برنامه ++Notepad در قسمت Encoding فایل را بدون BOM ذخیره کنید) البته در این نمونه کد از متد window.location در سمت کاربر استفاده شده و بحث BOM خیلی مصداق ندارد و احتمالا مشکلی در خروجی PHP یا در اجرای دستورات جاوا اسکریپت وجود دارد، در صورت تمایل آدرس صفحه را درج کنید تا بررسی کنیم.
احمد
۲۱:۱۹ ۱۳۹۹/۱۲/۲۸
با سلام خسته نباشید ببخشید قبلا یه سری دستورات جی کوری رو از خودتون گرفتم وقتی فیلدهای فرمم تکمیل شده است توسط هدر بره به صفحه دیگر الان مشکلی دارم روی لبتاپ به صفحه هدر میره ولی با گوشی که وارد میشم به صفحه هدر نمیره دلیلش چیه ممنون از زحمات شما
احمد
۱۰:۵۸ ۱۳۹۹/۱۲/۲۶
با سلام و خسته نباشید ببخشید داخل جیکوری یدونه متغییر دارم الان میخوام همین متغییر رو با یه عدد دیگه جمع کنم ولی وقتی علامت جمع میزارم عملیات جمع رو انجام نمیده و دو عدد رو کنار هم چاپ میکنه بی زحمت مشکل از کجاست ممنون
var amount = localStorage.getItem('amount');
$("#jam").html(amount);
$("#kool").html(amount+12000);
برای جمع اعداد با عملگر + در جاوا اسکریپت در مواقعی که نوع متغیر Integer نیست یا برای اطمینان می توانیم از متد parseInt استفاده کنیم، به فرض:
$("#kool").html(parseInt(amount)+12000);
مهدی
۱۰:۴۲ ۱۳۹۹/۱۲/۲۳
فکر نکنم درخواست ping تاثیری در روند سایت داشته باشه و دیداس باهاش بزنن!!
خیر، این روش هم یکی از شیوه های متداول ایجاد اختلال در سرویس دهی سرورها است:
https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack
مهدی
۱۶:۵۰ ۱۳۹۸/۰۳/۲۲
با سلام و تشکر
شهرام
۲۲:۳۹ ۱۳۹۷/۰۴/۰۲
قطعی ترین راه مقابله با حمله ddos چیه؟
نصب و به روز بودن نرم افزارهای امنیتی و فایروال سرور و مانیتورینگ ترافیک شبکه!
تیبا
۱۹:۰۰ ۱۳۹۷/۰۲/۰۹
پس از ۵ سال از انتشار این مطلب در روز ۹ اردیبهشت ۹۷ تلگرام با یک حمله عظیم ddos مواجه شد که باعث قطعی ۱۱ ساعته آن شد
سارا
۱۹:۴۰ ۱۳۹۷/۰۱/۲۲
خیلی عالی بود
پژمان
۱۰:۳۴ ۱۳۹۶/۱۲/۲۲
مقاله خوبی بود
۱۴:۵۰ ۱۳۹۶/۱۰/۱۳
تشکر بابت ارائه مطالب مفید و دقیق شما. به نظر من مانیتورینگ هوشمند ترافیک ورودی و تشخیص آنومالی هوشمند بتونه راهکار موثری برای این حمله ها باشد. با تشکر فراوان
محسن عسگری
۱۲:۰۶ ۱۳۹۶/۰۹/۰۶
سلام من این مطلب ddos را از پسرم شنیدم و جهت تحقیق وارد سایت شما شدم مطالب جالب بود ولی من متوجه نشدم روش عملی ای حمله چطور است
قاعدتا هدف این مطلب آموزش نحوه ایجاد حمله DDOS نیست، برای آشنایی با ابزارهای ایجاد حمله DDOS باید به سایت ها و منابع مرتبط با آموزش شیوه های هک مراجعه نمائید.
۲۱:۰۶ ۱۳۹۶/۰۸/۱۰
با تشکر خیلی کاربردی بود خیلی خوبه که آدم راحت به جواب سئوالش برسه
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
6 × 2
20 × 20
=