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


امروزه مقوله امنیت و شاخه های آن در فضای وب به امری حیاتی و همه گیر تبدیل شده است، مخصوصا برای صاحبان سایت ها و مهم تر از آن برای مدیران سرورهای وب، چرا که آسیب پذیری و ضعف امنیتی به عنوان عاملی بازدارنده در مسیر پیشرفت و توسعه اهدافشان در وب است، بعضا شاهد هستیم که افراد مختلف با انگیزه های متفاوت اقدام به هک و ایجاد اختلال در سایت ها و سرورها و در نتیجه باعث از دسترس خارج شدن و یا در حالتی پیشرفته تر از کنترل خارج شدن آنها می شوند، این افراد برای رسیدن به مقاصدشان از شیوه های متفاوتی استفاده می کنند که البته بسته به میزان هوشمندی مدیران سرور و رعایت نکات امنیتی در سیستم های مدیریت محتوا، خیلی از این روش ها به راحتی قابل پیشگیری است؛ اما آنچه در این مطلب قصد داریم به آن بپردازیم، آشنا کردن شما با نوعی از ایجاد اختلال در وب موسوم به حمله های 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 connection  ظاهر خواهد شد، بهترین کار در چنین حالتی این است که با تنظیم یک دستور هِدر 500 HTTP، به ربات های جستجوگر بگوییم که سایت ما فعلا دچار مشکلی است و بعدا مراجعه نمائید!، چرا که در غیر اینصورت با وجود down بودن دیتابیس سرور، ربات ها با دریافت وضعیت HTTP 200، صفحه خالی را ایندکس می کنند که این حالت اصلا مناسب نیست، در php این کار را با دستورات header می توان انجام داد.
header('HTTP/1.0 500 Internal Server Error');
- مصرف بیش از حد منابع سرور
یکی دیگر از نشانه های حمله ddos می تواند مصرف بیش از حد و غیر طبیعی منابع سرور مثل حافظه و یا پهنای باند در یک بازه زمانی کوتاه باشد.
- افزایش انفجاری درخواست ها
یکی دیگر از نشانه های حمله ddos، وجود شمار زیادی درخواست http به سرور است که با مشاهده فایل log و قسمت آمار، می توان به این موضوع پی برد.
- اختلالات در سرویس های جانبی نظیر ایمیل
گاهی مواقع حملات ddos سرویس های جانبی یک سرور نظیر سرویس ایمیل را هدف می گیرند، در این مواقع ارسال و دریافت ایمیل ممکن است به کندی صورت گیرد یا دچار وقفه شود، البته همانطور که گفتیم، هر وقفه و اختلالی به معنی حمله ddos نیست، تنها به عنوان یک نشانه می توان آن را محسوب کرد.

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


چند روش به عنوان شایع ترین ها در این نوع حملات استفاده می شود، که در زیر به آنها به طور مختصر و جهت آشنایی اشاره می کنیم:
- روش Ping Flood یا طوفان درخواست ها
در این شیوه مهاجم سعی می کند با ارسال درخواست ها (یا بسته های ping) به سمت کامپیوتر هدف (قربانی)، و با تکرار این عمل، کل منابع سرور را اشغال کند تا در نهایت آن را به طور کامل از کار بیندازد، در این شیوه معمولا از کامپیوترهای موجود در یک شبکه یا از سرورهایی به طور همزمان درخواست به سمت سرور قربانی ارسال می شود تا در نهایت موجب از کار افتادن آن شود.
- روش Smurf attack یا استفاده از نقص تنظیمات
یک Smurf attack نوع خاصی از طوفان درخواستها به یک سرور است که طی آن به دلیل وجود ضعف در تنظیمات سرویس، اجازه ارسال بسته هایی از اطلاعات به تمام کامپیوتر های موجود در یک شبکه در عوض ارسال آن به یک کامپیوتر خاص از طریق آدرس 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، آی پی هایی را که بیشترین تقاضا را به سرور داشته اند و ناشناس هستند، توسط فایروال ها بلاک و مسدود کرد، یا با نصب بسته های امنیتی خاص و به روزرسانی و ارتقا سخت افزاری و نرم افزاری، آسیب پذیری سرور را کاهش داد، آگاهی از روند عادی سرور نیز می تواند کمک بزرگی در این خصوص محسوب شود، چرا که اگر مدیر سرور نسبت به عادی یا غیر عادی بودن ترافیک آن، آشنایی داشته باشد، به سرعت می تواند پی به وجود این نوع حمله ها ببرد و در جهت رفع آن برآید، به عنوان یک کاربر در سرویس های میزبانی وب، بهترین کار این است که به محض مشکوک بودن به چنین حمله هایی، موضوع را به هاست خود اطلاع دهید تا در کوتاه ترین زمان جلوی آن گرفته شود.

پروتکل امن https و کدگذاری ssl چیست؟

همان طور که می دانیم، اطلاعاتی که به طور معمول در صفحات وب رد و بدل می شوند در بستر پروتکل HTTP یا Hyper Text Transfer Protocol انتقال می یابند، این پروتکل استانداردی تعریف شده است که با آن متن ساده یا plain text را منتقل می کنند، از طرفی این داده ها به دلیل رمزنگاری نشدن، برای افراد سوم شخص قابل خواندن هستند، مثلا اگر پسورد خود را در بستر این پروتکل به سروری منتقل کنید، ممکن است از طریق سرویس دهنده اینترنت، قابل روئیت باشد (با استفاده از برنامه هایی تحت عنوان sniffer)، لذا http از لحاظ امنیتی برای کارهایی که به اطلاعات حساس از جمله حسابهای بانکی و رمزهای مشتریان مربوط می شود اصلا مناسب نیست، از این رو بانک ها و فروشگاههای اینترنتی و در کل سایتهایی که امنیت کاربران برایشان اهمیت زیادی دارد، از پروتکلی دیگر به نام HTTPS یا Hyper Text Transfer Protocol Secure بدین منظور استفاده می کنند.

پروتکل HTTPS چیست و چه فرقی با HTTP دارد؟


HTTPS پروتکلی است که در بستر آن امکان رمزنگاری (encrypt) اطلاعات فراهم می شود، به لحاظ تخصصی در HTTP پورت 80 مورد استفاده قرار می گیرد، در حالی که در HTTPS این پورت 443 است؛ از طرفی همانطور که گفتیم در HTTP داده ها به صورت متن ساده یا plain text هستند اما در HTTPS رمزنگاری داده ها به وسیله SSL انجام می شود.

ssl به چه معناست؟


ssl مخففی است از سرواژه های Secure Sockets Layer و در اصطلاح به سیستم امن و رمزی انتقال داده اطلاق می شود، ssl را ابتدا شرکت Netscape به منظور نقل و انتقال امن و رمزی اطلاعات ایجاد نمود و اکنون تقریبا تمام مرورگرهای استاندارد از جمله فایر فاکس، اینترنت اکسپلورر، اپرا، گوگل کروم و سافاری آن را پشتیبانی می کنند؛ همچنین در این رابطه شرکتهایی وجود دارند که گواهی ssl ارائه می کنند.

شیوه رمزنگاری اطلاعات در ssl به چه صورت است؟


در یک بیان ساده، پس از برقراری اتصال امن، ssl اطلاعات را به وسیله دو کلید رمزنگاری می کند، کلید عمومی برای اشخاص سوم شخص قابل خواندن است اما کلید دوم تنها توسط ارسال کننده و دریافت کننده داده، قابل استفاده است.

چگونه از استفاده کردن یک سایت از پروتکل امن اطمینان حاصل کنیم؟


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

چرا در برخی از سایت ها، مرورگر تقاضای تایید اعتبار می کند؟


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

چگونه برای سایت خود گواهی ssl تهیه کنیم؟


برای داشتن یک ارتباط امن در بستر HTTPS برای سایت خود، نیاز به گواهی معتبر ssl دارید، این گواهی از طریق نمایندگی ها و سرویس دهنده های هاست نیز قابل خریداری است، علاوه بر این به سروری با قابلیت پشتیانی از ssl و یک ip اختصاصی احتیاج خواهید داشت.
و در پایان

چند

نکته:


- اگرچه HTTPS و رمزنگاری ssl امن و قابل اطمینان است، اما به دلیل وجود محدودیتهایی، معمولا سرعت انتقال اطلاعات از این طریق نسبت به شیوه معمول یعنی HTTP پائین تر است، لذا برای افزایش کارایی، بهتر است تنها در صفحاتی از این پروتکل استفاده کنید که اطلاعات حساسی در آنها رد و بدل می شود.
- در استفاده از سرور HTTPS دقت داشته باشید که مخصوصا در مورد تصاویری که بارگذاری می شوند، آنها را با محتوایی که از قسمت HTTPS فراخوانی می شوند در یک صفحه قرار ندهید (یا لااقل به صورت آدرس کامل http://www قرار ندهید)، چرا که موجب می شود تا مرورگر کاربران برای هر تصویر، سوالی مبنی بر معتبر نبودن اتصال و ادامه دادن یا ندادن درخواست، از آنها داشته باشد و واضح است که این موضوع موجب نارضایتی کاربران خواهد شد.

مفهوم پلتفرم (Platform) و فریم ورک (Framework)

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

پلتفرم (Platform)


پلتفرم در واقع بستری است که برنامه های نرم افزاری نوشته شده برای یک وسیله در آن قابل اجرا و استفاده است، این بستر هم شامل ملزومات سخت افزاری (مانند نوع سیستم و CPU) و هم شامل ملزومات نرم افزاری (مانند سیستم عامل) است، به طور مثال برنامه های کاربردی و بازی هایی که همه روزه با آنها سر و کار داریم بدون وجود دستگاه هایی مانند کامپیوترهای شخصی (PC)، تلفن های همراه، لپ تاپ ها، کنسول های بازی و... عملا قابل استفاده نیستند (سخت افزار) و از طرفی هر برنامه ای در یک سیستم عامل خاص (و یا حتی تحت نسخه خاص) قابل اجرا است (نرم افزار) که در مجموع به آنها پلتفرم می گوییم، مانند پلتفرم ویندوز xp 64 bit، پلتفرم ویندوز 8، پلتفرم ویندوز موبایل، پلتفرم لینوکس، پلتفرم آندروید، پلتفرم جاوا، پلتفرم PC، پلتفرم XBOX و...، یا در حوزه وب در حال حاضر برنامه های نوشته شده به زبان ASP.NET نیاز به سرور با سیستم عامل به فرض ویندوز 2008 دارند (پلتفرم ویندوز سرور 2008)، با دقت در عبارت متوجه می شویم که یک پلتفرم در واقع معرف ملزومات سخت افزاری (سرور) و همچنین ملزومات نرم افزاری (سیستم عامل ویندوز سرور 2008) مورد نیاز برای اجرای یک برنامه کاربردی (ASP.NET) است، همچنین ممکن است به نسخه ویژه یک نرم افزار نیز اشاره شده باشد (نسخه 2008)، یا در مورد PHP می توان به پلتفرم لینوکس سرور یا ویندوز سرور اشاره کرد که در واقع به معنی سروری است که روی آن سیستم عامل لینوکس یا ویندوز نصب و فعال باشد و لذا به طور خلاصه می گوییم PHP با پلتفرم لینوکس سرور یا ویندوز سرور قابل اجرا و سازگار است.

فریم ورک (Framework)


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