• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
روشهای شناسایی و مقابله با حملات DOS/DDOS
#1
بیخود دلتون رو صابون نزنید؛ نمیخوام راه حلهای جالب و قطعی معرفی کنم، بلکه تازه میخوایم یخورده روی این موضوع همفکری کنیم و اینکه کسی تجربه و اطلاعات بیشتری اگر داره مطرح کنه.

بنظر بنده جلوگیری از حملات DDOS از دید برنامه نویسی یکی از مبهم ترین و ناخوشایندترین کارهاست. یجورایی شبیه بیماری صعب العلاج میمونه یا حتی لاعلاج که درمان راحت و قطعی نداره. بخصوص در حمله های DDOS بزرگ که از IP های زیادی، حجم عظیمی داده های آشغال به سرور شما ارسال میشن.

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

بعضیا DDOS رو خوب درک نکردن و فکر میکنن که برنامه نویس عادی در سطح اپلیکیشن و سایت وب خودش میتونه و باید اون رو هندل کنه؛ اما اینطوری نیست! یعنی همیشه اینطوری نیست. بعضی وقتا هست، بعضی وقتا نیست، بعضی وقتا میشه، بعضی وقتا نمیشه. بخاطر اینکه حملات DDOS از نظر قدرت و نوع انواع متعددی دارن و تشخیص و جلوگیری همزمان تمام اونا بسیار دشوار و پیچیده است و خیلی مواردش اصلا در سطح اپلیکیشن های عادی وب نیستن.
خیلی حمله های DDOS هست که در همون قدمهای اول، یعنی قبل از اینکه نوبت بخواد به برنامهء شما برسه و قدرت پردازش و پهنای باند کافی برای سرور باقی مونده باشه که بخواد در اختیار برنامهء شما قرار بگیره و برنامهء شما بتونه با تصمیم و عکس العمل خودش در این زمینه موثر باشه، بخشهای پایه ای تری رو از کار میندازن. در اینطور موارد در سطح برنامه های عادی نمیشه کار خاصی کرد، و باید راهکارها در سطوح دیگر و اساسی تر و لایه های دیگری پیاده بشن.

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

تشخیص و بخصوص جلوگیری از DDOS کار مشکل و آزاردهنده ای است، بخاطر اینکه اولا که باید درخواستهای جعلی رو از درخواستهای عادی تشخیص داد که این میتونه دشوار و غیرمطمئن باشه، و دوما اینکه جلوی یک نیروی حیوانی رو خیلی وقتا فقط میشه با نیروی حیوانی قوی تری گرفت، یعنی قدرت بیشتر (قدرت پردازشی و پهنای باند)، و سوما اینکه خود تشخیص و جلوگیری از این درخواستها نیاز به منابع پردازشی و پهنای باند کافی داره که برنامه و سرور شما بهش نیاز داره اما حمله کننده بهش نیازی نداره، چهارما اینکه خیلی از مکانیزم های امنیتی مهم و پیشرفته، مثل هش پسورد، تولید کپچا، رمزنگاری، و غیره که برای تامین امنیت دربرابر انواع حمله های دیگری غیر از DDOS نیاز هستن خودشون پردازش و زمان قابل توجهی رو مصرف میکنن که این باعث کاهش استقامت در برابر حمله های DDOS میشه؛ یعنی شما اگر بخواید به DDOS اولویت بدید و دربرابرش حداکثر استقامت رو بدست بیارید، نیاز دارید که برنامه رو تا حداکثر ممکنه بهینه کنید که هیچ، تازه بیاید و از امنیت در یکسری بخشهای دیگر هم بزنید که برنامه سبک و سریع بشه، که البته بنده این رو توصیه نمیکنم (طبیعتا چون امنیت برنامه دربرابر حمله های دیگر پایین میاد) مگر در مواردی که واقعا مجبور باشید و جلوگیری از حمله های DDOS در اولویت باشن، پنجما اینکه حتی همون کدهایی که برای تشخیص و جلوگیری از DDOS مینویسید هم باعث سنگین تر شدن و کندتر شدن برنامه میشن که این میتونه به نفع هکر تموم بشه (البته مسلما در جای خودش وقتی درست طراحی و پیاده سازی بشه میتونه حداقل دربرابر انواع مشخصی از حمله های DDOS به صرفه باشه و خیلی بیشتر از چیزی که خودش پردازش مصرف میکنه جلوی حمله و بار پردازشی ناشی از حملات رو بگیره).
  پاسخ
تشکر شده توسط : nimaee mohsenkw
#2
DDOS هنوزم کابوس خیلی از شرکت های هاستینگ هست
خود من با پارس دیتا این مشکل رو دارم، خیلی راحت mysql شون در برابر DDOS از پا در میآد، اونم تو لینوکس!!!!
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط :
#3
کپی این تاپیک در فروم برنامه نویس که بخاطر پست و مطالب بیشتر در اونجا شاید خوب باشه بخونید: http://barnamenevis.org/showthread.php?448140
  پاسخ
تشکر شده توسط :
#4
خب پا پیش می کشم Big Grin چون تجربه خیلی خیلی بدی رو ازش دارم.
DDOS و در مقام بالاتر BOTNET ها هدفشون تنها این هست سرویس بخوابه و خوابیدن سرویس یعنی ضرر. حالا اینکه چرا می خوان این کار رو انجام بدن بماند. همونطور که vejmad گفت بسته به نوع حملات شما توانایی مقابله رو داری. DDOS یک بدی رو داره. حمله کننده فقط درخواست میده. تولید درخواست خیلی راحتتر از پاسخ دادن به درخواست هست. مگر اینکه حمله تشخصیص داده بشه و پردازشی انجام نشه.
هرچقدر مرحله پیاده سازی نزدیک به رسیدن درخواست باشه بهتر میشه DDOS رو هندل کرد. که قاعدتا کرنل بهترین جا هست. توی لینوکس با تنظیمات iptable میشه DDOS های عادی رو هندل کرد. فقط زمانی که حمله میشه باید شب بیداری بکشی Big Grin
اما گزینه سخت افزاری. خوبه اما اون هم در مقابل حملات سنگین جواب نمیده.
البته یک راه خصمانه دیگه ای هم هست. اونم استفاده از دیتابیسهایی هست که از لاگ حملاتی DDOS که انجام شده جمع آوری میشه. ولی این راه خصمانه ممکنه ip کاربری که تنها یک قربانی برای سو استفاده بوده باشه.

راستی یاد حمله اخیری افتادم که باعث شده بود سرعت اینترنت توی اروپا افت پیدا کنه و بعد مشخص شد که یک شرکتی می خواسته به یک شرکت دیگه حمله DDOS کنه زده زیربنای اینترنت اروپا رو داغون کرده Big Grin
  پاسخ
تشکر شده توسط : Reza hamid_80386 vejmad
#5
نقل قول: راستی یاد حمله اخیری افتادم که باعث شده بود سرعت اینترنت توی اروپا افت پیدا کنه و بعد مشخص شد که یک شرکتی می خواسته به یک شرکت دیگه حمله DDOS کنه زده زیربنای اینترنت اروپا رو داغون کرده Big Grin
یعنی تا این حد ؟؟؟؟؟؟
DDOS حملات هزینه بری هست ، تا وقتی رقیب شاخی نشیم خیالمون راحته Big Grin
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط :
#6
ولی بعضی ها مریض هستن رسماً
چند روز قبل از عید یه شخصی به شرکت ما گفت سایت شما ضعف امنیتی داره و پیشنهاد secure کردن رو در ازای دریافت پول داد، من بهش گفتم شما یه inject بزن، یه سری رکورد بکش بیرون، به ما بده که بعدش وارد مذاکره بشیم...
یارو چند روزی خودش رو کشت نتونست رکوردی بیرون بکشه، منم نشسته بودم لاگ کوئری هاش رو میدیدم فقط

اون آخرا قاطی کرد زد به کانال DDOS، دیگه کل سرور که ما و چند تا هاست دیگه روش بودیم، خوابید Big Grin
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : vejmad
#7
(۱۳۹۳ فروردین ۳۰, ۱۲:۳۰ ق.ظ)hamid_80386 نوشته: ولی بعضی ها مریض هستن رسماً
چند روز قبل از عید یه شخصی به شرکت ما گفت سایت شما ضعف امنیتی داره و پیشنهاد secure کردن رو در ازای دریافت پول داد، من بهش گفتم شما یه inject بزن، یه سری رکورد بکش بیرون، به ما بده که بعدش وارد مذاکره بشیم...
یارو چند روزی خودش رو کشت نتونست رکوردی بیرون بکشه، منم نشسته بودم لاگ کوئری هاش رو میدیدم فقط

اون آخرا قاطی کرد زد به کانال DDOS، دیگه کل سرور که ما و چند تا هاست دیگه روش بودیم، خوابید Big Grin


سلام.خب یجورایی شما هم حقت بوده این بلا سرت بیاد.وقتی به طرف میگی روی سایت کار کن ، دیگه نامردیه بشینی لاگ بخونی که اگه موردی دیدی خودت ببندی.
  پاسخ
تشکر شده توسط :
#8
(۱۳۹۳ فروردین ۳۰, ۰۱:۰۱ ق.ظ)b3hz4d نوشته:
(۱۳۹۳ فروردین ۳۰, ۱۲:۳۰ ق.ظ)hamid_80386 نوشته: ولی بعضی ها مریض هستن رسماً
چند روز قبل از عید یه شخصی به شرکت ما گفت سایت شما ضعف امنیتی داره و پیشنهاد secure کردن رو در ازای دریافت پول داد، من بهش گفتم شما یه inject بزن، یه سری رکورد بکش بیرون، به ما بده که بعدش وارد مذاکره بشیم...
یارو چند روزی خودش رو کشت نتونست رکوردی بیرون بکشه، منم نشسته بودم لاگ کوئری هاش رو میدیدم فقط

اون آخرا قاطی کرد زد به کانال DDOS، دیگه کل سرور که ما و چند تا هاست دیگه روش بودیم، خوابید Big Grin


سلام.خب یجورایی شما هم حقت بوده این بلا سرت بیاد.وقتی به طرف میگی روی سایت کار کن ، دیگه نامردیه بشینی لاگ بخونی که اگه موردی دیدی خودت ببندی.

چه ربطی داره؟ Huh
توقع داشتی هرکسی هر ادعایی رو کرد رو قبول کنیم و یه پولی بهش دو دستی تقدیم کرد؟ Dodgy
سرور اشتراکی تامین امنتیتش به عهده مدیر سرورشه. امنیت اسکریپت هم مهم ترینش همین sql injection و xss ـه که به عهده برنامه نویسه و به راحتی میشه اونا رو امن کرد و به هیچ احدی پول مفت نداد Rolleyes
میثم محمودی | انجمن کد ایگنایتر فارسی
--------------------------
هرگز نمي توان با آدمهاي کوچک کارهاي بزرگ انجام داد
  پاسخ
تشکر شده توسط : hamid_80386
#9
نقل قول:چه ربطی داره؟ Huh
توقع داشتی هرکسی هر ادعایی رو کرد رو قبول کنیم و یه پولی بهش دو دستی تقدیم کرد؟ Dodgy
سرور اشتراکی تامین امنتیتش به عهده مدیر سرورشه. امنیت اسکریپت هم مهم ترینش همین sql injection و xss ـه که به عهده برنامه نویسه و به راحتی میشه اونا رو امن کرد و به هیچ احدی پول مفت نداد

بازم خدارو شکر که دست سرور بود، واِلا باید این حمله رو هم هندل میکردیم و به قول وحید بی خوابی میکشیدیم... Wink


نقل قول:سلام.خب یجورایی شما هم حقت بوده این بلا سرت بیاد.وقتی به طرف میگی روی سایت کار کن ، دیگه نامردیه بشینی لاگ بخونی که اگه موردی دیدی خودت ببندی
نه سیستم خودش بلاک میکنه، من فقط دست و پا زدنش رو میدیدم میخندیدم Big Grin
هر که با مرغ هوا دوست شود - خوابش آرامترین خواب جهان خواهد بود.
  پاسخ
تشکر شده توسط : Maysam.m
#10
سلام.من گفتم هرکی درخواست پول کرد بهش پول بدین ؟ من گفتم "وقتی به طرف میگی روی سایت کار کن ، دیگه نامردیه بشینی لاگ بخونی". خودت قبول کردی که اون شخص روی سایتت کار کنه، چرا میای دورش بزنی.
خوبه مثلا شما یک دمو از کدی که نوشتی و میخوای بفروشی بدی ، من از همونجا کد تو رو بردارم ؟ یکم انصاف هم خوبه.پس نگو پول مفت.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان