آموزش جلوگیری از حمله SYN Flood با PfSense بصورت تصویری

چگونه جلوی حمله SYN Flood را بگیریم؟ در ششم فوریه سال 2000 یعنی تنها شش هفته پس از آغاز هزاره سوم ، بزرگترین سامانه های تجارت الکترونیک جهان ، همانند آمازون ، ebay و یاهو مورد هجوم و حمله سایبری قرار گرفتند و همچون برگهای خزان زده یکی پس از دیگری فرو ریختند ، زیان به بار آمده آنچنان بزرگ و گسترده بود که در تاریخ نهم فوریه همان سال ، دادستانی کل امریکا ، پایبندی خود به شناسایی مهاجمان و تضمین امنیت اینترنت را اعلام کرد (افرایم توربان و همکاران ،2006) ، سامانه های یاد شده با حمله منع سرویس (DOS) به زانو درآمده و از دسترس کاربران خارج شده بودند.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

در یکی از شناخته شده ترین روشهای این دسته از حملات ، مهاجم با ارسال بسته های سیل آسا به سوی کارگزار (Server) شبکه و با بهره گیری از معماری پروتکل معروف TCP/IP موجب هدر رفت منابع سرورهای حیاتی شبکه و در نهایت از کار افتادن و یا کند شدن آنها می شود در حقیقت در حمله DOS و یا گونه توزیع شده آن یعنی DDOS مولفه دسترس پذیری (Availability) امنیت اطلاعات هدف قرار گرفته و از دسترسی کابران معتبر به سرویسهای ارائه شده در شبکه جلوگیری می شود.

حمله SynFlood

حمله SYN Flood که در ادبیات امنیت اطلاعات به Neptune نیز مشهور است ، یکی از ساده ترین و در عین حال خطرناک ترین نوع حملات کلاس DOS است که از گستردگی بسیار بالایی در بین انواع مختلف حملات این کلاس برخوردار بوده و براساس انجام ناقص فرآیند ایجاد یک ارتباط در پروتکل TCP استوار است . برقراری یک ارتباط (اتصال) TCP ، دست تکانی سه مرحله ای (Three Way Handshake) نام دارد در این فرآیند ، اولین مرحله برای تقاضای یک ارتباط ، ارسال یک بسته TCP با پرچم SYN=1 از سوی مشتری (Client) برای ماشین سرویس دهنده است در مرحله دوم یک بسته با پرچم های SYN=1 و ACK=1 از سوی سرویس دهنده برای متقاضی ارتباط ارسال می گرددکه به معنای پذیرش درخواست برقراری ارتباط است در مرحله سوم با ارسال بسته ای با پرچم ACK=1 از سوی مشتری برای سرویس دهنده ، فرآیند دست تکانی سه مرحله ای کامل شده و ارتباط TCP برقرار می گردد .

پس از برقراری اتصال داده می تواند در دو جهت انتقال یابد. نکته بسیار حیاتی آن است که پردازش TCP در سمت سرویس دهنده ، مجبور است پس از دریافت هر بسته SYN ، محتوای فیلد شماره ترتیب (Sequence Number ) آنرا در حافظه ذخیره کند تا در مرحله سوم بتواند از آن استفاده کند ، هر بار که سرویس دهنده یک بسته SYN دریافت کند یک ارتباط نیمه باز وغیر فعال بوجود می آید و پردازه TCP ، از تمام ارتباطات نیمه باز یک صف تشکیل داده و اطلاعات لازم از هر ارتباط نیمه باز را در آن ذخیره می کند و این آغاز نقطه ضعف و آسیب پذیری این فرآیند است چراکه اگر یک بسته SYN به مقصد برسد و اطلاعات مربوط به آن در صف ذخیره گردد ولی مرحله سوم ایجاد اتصال ادامه نیابد ، اطلاعات درون صف تا مدت زمان زیادی باقی خواهند ماند تا آنکه زمان سپری شده از یک آستانه مشخص ، بگذرد و پردازه TCP اطلاعات را از صف پاک کند ، مدت زمانی که TCP برای تکمیل شدن یک ارتباط نیمه باز صبر می کند بسیار زیاد بوده و بسته به نوع پیاده سازی پروتکل TCP می تواند از 45 تا 360 ثانیه باشد.

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

1-به تعویق انداختن تخصیص منابع تا زمان کامل شدن اتصال با استفاده از کوکی (Cookie)

در این رویکرد اطلاعات دریافت شده از اولین بسته ارسال شده از طرف مشتری (بسته SYN) به جای ذخیره شدن در حافظه رم در بخش داده (Payload) بسته دوم (SYN+ACK) ذخیره می گردد و به آدرس مشتری فرستاده می شود این کار تولید کوکی نام دارد ، بنابراین دو حالت پیش خواهد آمد :

1-اگر فرستنده اولین بسته یک نفوذگر باشد ، سرویس دهنده بسته سوم را دریافت نخواهد کرد ، کوکی گم شده و سرویس دهنده منابع خود را اختصاص نخواهد داد.

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

این قابلیت بصورت پیش فرض در PfSense فعال است. به هر حال برای فعال کردن این قابلیت در محیط مدیریت PfSense از مسیر System\Advanced\System Tunables گزینه net.inet.tcp.syncookies را یافته و مقدار آن را به 1 تغییر دهید و سپس تغیر انجام شده را ذخیره کنید.

2- فعال کردن SYN Proxy

با فعال کردن این گزینه ، به هنگام درخواست اتصال از نوع TCP از سوی مشتری ، فایروال برای سرویس دهنده همانند یک Proxy عمل کرده و به جای سرویس دهنده فرآیند دست تکانی سه مرحله ای را انجام می دهد بنابراین چنانچه درخواست ایجاد ارتباط از سوی یک نفوذگر باشد اجازه برقراری ارتباط با سرویس دهنده داده نخواهد شد و سرویس دهنده هیچ بسته ای از مشتری بداندیش دریافت نخواهد کرد . ناگفته نماند که فعال کردن این قابلیت کارآیی فایروال را بشدت تحت تاثیر قرار داده و در حالتی که شما از قابلیت Load Balancing نرم افزار PfSense استفاده می کنید ممکن است موجب اختلال در عملکرد قانون (Rule) مربوطه گردد. بنابراین در برخورد با این قابلیت با احتیاط رفتار کنید.برای فعال کردن این قابلیت در محیط مدیریت نرم افزار PfSense باید از مسیر Firewall\Rules\WAN قانونی را که اجازه دسترسی کاربران اینترنت به سرویس دهنده شبکه داخلی شما را می دهد ویرایش کنید و در بخش Advanced Options و در قسمت State type گزینه SynProxy را انتخاب کرده و تغییر انجام شده را ذخیره کنید.

3-مجموعه قوانین ضد جعل (Anti Spoof) را در رابط WAN فعال کنید.

هرچند که این قوانین بصورت پیش فرض برای رابط WAN فعال هستند اما در صورتی که به هر دلیلی آنها را غیر فعال کرده اید می توانید دوباره نسبت به فعال سازی این قوانین ارزشمند و پرفایده اقدام کنید. برای این کار کافیست از مسیر Interfaces\WAN گزینه های Block private networks and loopback addresses و Block bogon networks را در حالت انتخاب قرار دهید و تغییرات انجام شده را ذخیره کنید با این کار در مسیر Firewall\Rules\WAN به صورت خودکار دو قانون جداگانه ساخته خواهد شد که یکی ورود بسته های با آدرس IP مبدا متعلق به فضای آدرسهای خصوصی (Private) و دیگری ورود بسته های با آدرس IP مبدا متعلق به گروه آدرس های Bogon را مسدود می کند. به زبان ساده تر شبکه داخلی شما را در برابر حملات جعل آدرس صورت گرفته از محیط اینترنت محافظت می کند.آدرس های خصوصی در RFC1918 معرفی شده و برای استفاده در شبکه های خصوصی و محلی در نظر گرفته شده اند و شامل آدرس های موجود در فضای آدرس دهی زیر هستند :

10.0.0.0    -   10.255.255.255  (10/8 )
     172.16.0.0   -   172.31.255.255  (172.16/12)
     192.168.0.0  -   192.168.255.255 (192.168/16)

آدرس های خصوصی را آدرس های نامعتبر(Invalid Ip Address) نیز می نامند چرا که این آدرس ها قابل مسیر یابی (Routing) در شبکه جهانی اینترنت نیستند و کاربرد اصلی آنها در شبکه های محلی است.آدرس های Bogon شامل آدرسهای IP اختصاص نیافته توسط موسسه آیکان (ICANN ) و یا آدرس های کنار گذاشته شده (reserved) برای مصارف خاصی بجز آنچه در RFC1918 آمده هستند.PfSense یک فهرست داخلی از آدرس های Bogon را نگهداری کرده و در دوره های زمانی یک ماهه این فهرست را به روز می کند. دوره زمانی بروز رسانی فهرست آدرسهای Bogon توسط PfSense از مسیر System\Advanced\Firewall & NAT و در بخش Update Frequency قابل تنظیم است.

4- تخصیص منابع و پهنای باند سخاوتمندانه

تا حد امکان منابع سخت افزاری و پهنای باند سخاوتمندانه ای در اختیار ماشین PfSense و سرویس دهنده خود قرار دهید و در صورت امکان از رویکرد توزیع بار (load balancing) و افزونگی ( Redundancy) در محیط شبکه خود استفاده کنید.

5-تعداد اتصالات هم زمان به سرویس دهنده را محدود کنید.

دیواره آتش PfSense حالتمند (StateFull) بوده و جدول وضعیت (State Table) آن اطلاعاتی دقیق از اتصالات برقرار شده را نگهداری می کند. برخلاف بسیاری از فایروالها که اجازه تنظیم جدول وضعیت خود را به کاربر نمی دهند PfSense اجازه تنظیم و نظارت دقیق بر جدول وضعیت را به کاربر می دهد ، که این توانایی مرهون استفاده هنرمندانه PfSense از فایروال بسیار توانای سیستم عامل FreeBsd یعنی Pfاست. برای نمونه مدیر شبکه بنا بر نیاز امکان اعمال تنظیمات ذیل را خواهد داشت :

1-تغییر اندازه جدول وضعیت با توجه به میزان حافظه موجود در ماشینی که PfSense در آن نصب گردیده است.

در محیط مدیریت نرم افزار از مسیر System\Advanced\Firewall & NAT می توانید به این تنظیمات از دسترسی داشته باشید برای مثال گزینه Firewall Maximum States بیشینه تعداد اتصالات همزمانی را که فایروال قادر به ردیابی آنهاست مشخص می کند بنا براین با فرض اینکه فایروال برای نگهداری هر ورودی جدول وضعیت دو کیلو بایت حافظه رم نیاز داشته باشد برای آنکه قادر به ردیابی تعداد 1000000 (یک میلیون) اتصال همزمان باشد نیاز به دو گیگا بایت حافظه رم خواهد داشت.

2-به ازای هر قاعده (Rule) تعریف شده می توان قابلیتهای ذیل را در اختیار داشت :

  • محدود کردن بیشینه اتصالات همزمانی که هر client می تواند برقرار کند
  • محدود کردن تعداد رکورد های وضعیت ذخیره شده در جدول وضعیت به ازای هر client
  • محدود کردن ایجاد اتصال جدید در هر ثانیه
  • تعریف زمان انقضای وضعیت ذخیره شده در جدول وضعیت
  • سایر ...

برای دسترسی به این تنظیمات از مسیر Firewall\Rules\WAN قانون مورد نظر را ویرایش کرده و از بخش Advanced Options می توانید نسبت به تغییر تنظیمات پیش فرض متناسب با حجم کار سرویس دهنده ، پهنای باند در اختیار ، منابع سخت افزاری ، تعداد کاربران ، نرخ دسترسی کاربران و میانگین تعداد اتصالات همزمانی که هر کاربر برقرار می کند اقدام کنید. به هر حال بهینه کردن این تنظیمات از محیطی به محیط دیگر متفاوت است.


نظرات