Snortیک نرمافزار تشخیص نفوذ بهصورت کدباز است که بر روی محیطهای Linux عرضه میگردد و با توجه به رایگان بودن آن، به یکی از متداولترین سیستمهای تشخیص نفوذ شبکههای رایانهیی مبدل شده است. از آنجاکه برای معرفی آن نیاز به معرفی کوتاه این دسته از ابزارها داریم، ابتدا به مفاهیمی اولیه دربارهی ابزارهای تشخیص نفوذ میپردازیم، به عبارت دیگر معرفی این نرمافزار بهانهیی است برای ذکر مقدمهیی در باب سیستمهای تشخیص نفوذ.
Intrusion Detection System (IDS) یا سیستم تشخیص نفوذ به سختافزار، نرمافزار یا تلفیقی از هر دو اطلاق میگردد که در یک سیستم رایانهیی که میتواند یک شبکهی محلی یا گسترده باشد، وظیفهی شناسایی تلاشهایی که برای حمله به شبکه صورت میگیرد و ایجاد اخطار احتمالی متعاقب حملات، را بر عهده دارد.
IDSها عملاً سه وظیفهی کلی را برعهده دارند : پایش، تشخیص، واکنش. هرچند که واکنش در مورد IDSها عموماً به ایجاد اخطار، در قالبهای مختلف، محدود میگردد. هرچند دستهیی مشابه از ابزارهای امنیتی به نام Intrusion Prevention System (IPS) وجود دارند که پس از پایش و تشخیص، بستههای حملههای احتمالی را حذف میکنند. نکتهیی که در این میان باید متذکر شد، تفاوت و تقابل میان Firewallها و IDSها است. از آنجاکه ماهیت عملکرد این دو ابزار با یکدیگر به کلی متفاوت است، هیچیک از این دو ابزار وظیفهی دیگری را به طور کامل برعهده نمیگیرد، لذا تلفیقی از استفاده از هردو ابزار میتواند امنیت کلی سیستم را بالا ببرد.
در حالت کلی IDSها را میتوان به دو دستهی کلی تقسیمبندی نمود :
- Network IDS (NIDS)
- Host IDS (HIDS)
HIDSها، اولین سیستم IDSی هستند که در یک سیستم رایانهای باید پیادهسازی شود. معیار تشخیص حملات در این سیستمها، اطلاعات جمعآوری شده بر روی خادمهای مختلف شبکه است. برای مثال این سیستم با تحلیل صورت عملیات انجام شده، ذخیره شده در پروندههایی خاص، سعی در تشخیص تلاشهایی که برای نفوذ به خادم مذکورد انجام شده است دارد. این تحلیلها میتواند به صورت محلی بر روی خود خادم انجام گردد یا به سیستم تحلیلگر دیگری برای بررسی ارسال شود. یک HIDS میتواند تحلیل اطلاعات بیش از یک خادم را بر عهده بگیرد.
با این وجود، اگر نفوذگر جمعآوری صورت عملیات انجامشده بر روی هریک از خادمهای مورد نظر را به نحوی متوقف کند، HIDS در تشخیص نفوذ ناموفق خواهد بود و این بزرگترین ضعف HIDS است.
NIDSها، به عنوان دومین نوع IDSها، در بسیاری از موارد عملاً یک Sniffer هستند که با بررسی بستهها و پروتکلهای ارتباطات فعال، به جستجوی تلاشهایی که برای حمله صورت میگیرد میپردازند. به عبارت دیگر معیار NIDSها، تنها بستههایی است که بر روی شبکهها رد و بدل میگردد. از آنجاییکه NIDSها تشخیص را به یک سیستم منفرد محدود نمیکنند، عملاً گستردهگی بیشتری داشته و فرایند تشخیص را به صورت توزیعشده انجام میدهند. با این وجود این سیستمها در رویایی با بستههای رمزشده و یا شبکههایی با سرعت و ترافیک بالا کارایی خود را از دست میدهند.
با معرفی انجام شده در مورد دو نوع اصلی IDSها و ضعفهای عنوان شده برای هریک، واضح است که برای رسیدن به یک سیستم تشخیص نفوذ کامل، بهترین راه استفادهی همزمان از هر دو نوع این ابزارهاست.
Snort، در کاملترین حالت نمونهیی از یک NIDS است.
(برای دیدن منبع این قسمت اینجا را ببینید.)
یکی از اساتید در اینجا این مفهوم را بسیار شیرین توضیح داده اند که جا داره ضمن تشکر و کسب اجازه از ایشان توضیح کامل ایشان را هم عرض کنم:
یکی از سرویسهای مهم در یک Network امن وجود یک سیستم Intrusion Detection در شبکه است . شاید ترجمه فارسیش خیلی گویای تعریف این سیستم در شبکه نباشد . بنابراین بد نیست که یک مثال در مورد آن بزنم . ببینید شما برای کنترل ورود و خروج به یک اداره یک درب در ساختمان دارید که پس از شناسائی فرد مورد نظرتون درب رو بر روی او باز می کنید . این در حالی است که شما تا قبل از اینکه درب رو باز نکردید نمی تونید تشخیص بدید طرف مجاز به ورود هست یا نه . حالا هر چقدر هم شما یک نگهبان خیلی قوی و گردن کلفت ( Firewall ) برای درب ورودی بگذارید باز احتمال داره پشت درب 10 نفر آدم مثل خودش وایساده باشند و وقتی درب رو باز می کنه اون نگهبان رو کتک بزنن و بیهوش کنند و وارد بشن ( DoS ) . برای اینکه از این مشکل جلوگیری بشه در خیلی از جاها یک سیستم آیفون تصویری به عنوان مثال درست می کنند که قبل از اینکه درب رو باز کنند پشت درب رو ببینند که تشخیص بدهند به صورت نسبی ( به نسبی بودنش دقت کنید ) تشخیص بدهند که آیا درب رو باز کنند یا نه .
حالا عین همین قضیه در شبکه هستش البته با کمی تغییر در جزئیات . به این معنا که عاملی در سر راه مسیر های ورودی خارجی به شبکه ( مثل اینترنت ) قرار می دهند که ترافیک های آزار دهنده برای شبکه ( مثل حمله های DoS ) رو قبل از ورود به شبکه شناسائی کنه و جلوی ورود اونها به شبکه رو بگیره . حالا شاید سئوال پیش بیاد پس Firewall این وسط چیکاره هستش ؟! در حقیقت خیلی روشها هستش که می تونه خود Firewall رو هم از کار بندازه ( مثل مثالی که زدیم یک سری آدم گردن کلفت ترتیب نگهبان درب رو بدن ! نه اون جهت ها ) تعریفی که من از Firewall اینجا مد نظرم هستش این هستش که تنها سیاست های تعریفی ما رو اعمال می کنه ! مثلا فلان Source به فلان Destination مجاز باشد یا نباشد ! یا فلان Port بسته . اما در اینجا بحث Intrusion Detection هستش که تشخیص شرایطی رو می ده که از قبل مدل تعریف شده صرف براش وجود نداره و فقط یک سری تعریف در مورد وضعیت غیر طبیعی براش شده که شاید در نهایت مورد های اشتباهی هم در تشخیص داشته باشه ( به اون کلمه نسبی که گفتم توجه کنید برای همینجا بود ها ! ) ....
و بالاخره اصل مطلب..!
معرفي Snort :
Snort يك سيستم تشخيص تهاجم رايگان متعلق به نسل سوم ميباشد. Snort توانايي تحليل ترافيك بلادرنگ شبكه و ثبت رويدادنامه بستهها روي IP هاي شبكه را داراست. Snort همچنين ميتواند اعمال تحليل قرارداد، جستجو و انطباق محتوا را انجام داده و براي تشخيص بسياري از حملهها و كاوشها، مانند سرريز بافر، پويش درگاه، حملات CGI و كاوش SMB به كار گرفته شود. Snort از يك زبان تعريف قوانين قابل انعطاف براي تفسير ترافيكي كه بايد ثبت گشته يا عبور داده شود، استفاده ميكند. علاوه بر اين Snort از يك مكانيسم هشداردهي5 بلادرنگ براي ثبت رويدادها در فايلها، انتقال آنها از طريق سوکت ها در لينوكس و يا يك پيغام Winpopup به كاربران سيستمهاي ويندوز از طريق smbclient استفاه ميكند.
معماري Snort
Snort در واقع از سه بخش اساسي تشكيل شده است. شكل 1 يك طرح ساده از معماري Snort را نشان ميدهد. اين سه مؤلفه عبارتند از:
1) واگشاي بسته( Packet Decoder):
اين مؤلفه هر سه رسانه Ethernet7، 8SLIP و 9PPP را پشتيباني ميكنند. در واقع اطلاعات مربوط به بسته هاي شبكه را به فرمت مناسبي براي مولفه موتور تشخيص مهيا مي كند.
2)موتور تشخيص( ِDetection Engine):
قلب سيستم Snort را تشكيل ميدهد. اين مؤلفه مسؤوليت تحليل بستهها بر اساس قوانين Snort (كه در هنگام اجرا در حافظه بارگذاري شدهاند) را بر عهده دارد. Snort از يك پايگاه داده حاوي الگوهاي فراوان براي تشخيص حملات استفاده ميكند. موتور تشخيص به صورت بازگشتي هر بسته ورودي را با قوانين تعريف شده خود مقايسه ميكند. با پيدا شدن اولين قانوني كه با وضعيت بسته منطبق باشد، عمل ( Action) ذكر شده در دستور در مورد آن بسته اجرا ميشود. بستهاي كه با هيچ قانوني منطبق نباشد، به سادگي ناديده گرفته ميشود. موتور تشخيص Snort قابليتي براي اضافه كردن plugin و پیمانههای( Module) جديد دارد كه منجر به افزايش قدرت تحليل آن ميگردند.
3)رويدادنگار( Logger)هشدار دهنده(Alerter):
رويدادنگار و هشدار دهنده در واقع دو زيرمؤلفه جداگانه هستند. رويدادنگار به شما اجازه ميدهد تا همه اطلاعات مربوط به ترافيك شبكه را به فرمت قابل فهم براي انسان و يا tcpdump مشاهده كنيد. به طور پيش فرض همه رويدادها در شاخه /var/log/snort و همه هشدارها در شاخه /var/log/Snort/alerts ثبت ميشوند:
قوانين Snort :
قوانين Snort در يك فايل با فرمت ASCII نگهداري ميشوند كه به سادگي قابل ويرايش باشند. اين فايل از بخشهاي زير تشكيل شده است:
متغيرها( Varible):
براي تعريف متغيرهايي كه در ايجاد قوانين Snort كاربرد دارند، استفاده ميشوند.
قوانين( Rule): براي تشخيص تهاجم به كار ميروند. قوانين بايد با سياستهاي كلي تشخيص تهاجم در سازمان مربوطه هماهنگ باشند.
پيش پردازنده( Preprocessor):
نقش pluginها را بازي ميكنند و براي گسترش توانايي تحليل Snort به كار ميروند. به عنوان مثال قابلیت portscan به Snort اين امكان را ميدهد تا حملات پويش درگاه را كشف كند.
فايلهاي include: براي دربرگرفتن فايلهاي قوانين ديگر.
پیمانههای24 خروجي: به مدير سيستم Snort اجازه ميدهد تا خروجي رويدادنامهها و هشدارها را مشخص كند.
قوانين Snort از دو بخش منطقي تشكيل ميشوند:
سرآيند(Header)قانون و گزينهها( Options).
قوانين بايد در يك خط بيان شوند. علاوه بر اين بايد آدرسهاي IP را شامل شوند، زيرا عمل ترجمه نام به IP در Snort امكان.پذير نيست. شکل كلي دستورات Snort را ميتوان به صورت زير بيان كرد:
Action Protocol Source_Ip_Address Source_Port --> Destination_Ip_Address Destination_Port (Options)
Action: بيانگر عملي است كه در قبال انطباق با يك بسته روي آن انجام ميشود. ميتواند يكي از مقدارهاي alert، log، pass، activate يا dynamic باشد.
Protocol: پروتكل ارتباطي را نشان ميدهد. ميتواند يكي از مقدارهاي TCP، IP ، UDP ،ICMP يا IGMP باشد.
Port: شماره درگاه را نشان ميدهد
Direction: جهت ارتباط را نشان ميدهد. ميتواند يكي از مقدارهاي -> يا <> باشد.
Options: گزينههاي مختلف اجراي دستور را نشان ميدهند.
براي مشخصكردن IPها به جاي نحوه آدرسدهي سنتي مبتني بر كلاسهاي IP از مكانيسم آدرسدهي ( Classless Inter-Domain Routing)CIDR استفاده ميشود. اين ساختار براي استفاده بهينه از فضاي آدرسدهي نسبت به مكانيسم مبتني بر كلاس به كار ميرود. در اين روش، بازه آدرسهاي IP با تركيب آدرس IP ابتدايي و نقاب شبكه ( Network Mask)متناظر با آن نشان داده ميشوند. شکل نمايش IP در CIDR به صورت زير است:
xxx.xxx.xxx.xxx/n
تعداد 1 هاي موجود در نقاب شبكه(از سمت چپ) را نشان ميدهد. براي مثال عبارت:
192.168.12.0/23
نقاب شبكه 255.255.252.0 را روي آدرس شبكه 192.168.12 ، با آغاز از 192.168.12.0 اعمال ميكند كه در واقع بازه آدرسي 192.168.12.0 - 192.168.13.255 را تعريف ميكند. مثالهاي زير نمونهاي از آدرسدهي مبتني بر CIDR را نشان ميدهند.
مثال:
تعريف يك آدرس IP خاص:
192.168.30.2/32 = 192.168.30.2
تعريف يك كلاسC:
192.168.30.0/24 = 192.168.30.0 - 192.168.30.255
شكل ذیل يك مثال از فرمت كلي يك دستور Snort را نشان ميدهد:
اولين اقدام قبل از نوشتن قوانين، تعيين سياست تشخيص تهاجم ميباشد. اين سياست اتفاقاتي را كه بايد ثبت شوند يا هشدار داده شوند و يا اينكه ناديده گرفته شوند، مشخص ميكند. براي بررسي يك سياست ساده به Common snort Alerts مراجعه كنيد.
توصيف حملات در Snort :
توصيف حملات در Snort با استفاده از قوانين آن صورت ميگيرد كه در بخش قبل معرفي شدند. در ادامه چند نمونه از توصيف حملات در Snort مورد بررسي قرار ميگيرند:
alert tcp any any -> 192.168.1.0/24 143 (content: "|90C8 C0FF FFFF|/bin/sh"; msg: "IMAP buffer overflow!"
ستور فوق براي همه بستههاي با قرارداد TCP كه مقصد آنها، درگاه 143 از آدرسهاي IP كلاس C (با شروع از آدرس 192.168.1.0) است و داراي محتواي مشخص شده هستند، پيغام "IMAP buffer overflow" را چاپ ميكند.
alert tcp any any -> 192.168.1.0/24 21 (content: "USER root"; nocase; msg: "FTP root user access attempt"
دستور فوق براي همه اتصالاتي كه سعي ميكنند با شناسه كاربري root و از طريق درگاه 21 (درگاه كنترلي ftp) به بازه آدرس خاصي متصل شوند، پيغام هشدار مربوطه را چاپ ميكند.
alert any any -> 192.168.1.0/24 any (flags: SF; msg: "Possible SYN FIN scan"
دستور فوق براي اتصالاتي كه پرچم SYN و FIN آنها روشن باشد، پيغام هشدار ميدهد.
راهاندازي و اجراي Snort:
Snort يك نرم افزار منبعباز( Open Source) ميباشد كه ميتوان منبع و يا RPM آن را از وب سايت اختصاصي Snort از اينجا دريافت كرد.
Snort را ميتوان در سه مد عملياتي زير به كار گرفت:
1)گوش كننده بستهها (Packet Sniffer) :
تنها بستهها از شبكه دريافت شده و اطلاعات سرآيند TCP/UDP/ICMP و نيز داده هاي مربوط به برنامه كاربردي روي خروجي تعريف شده نوشته ميشوند. براي اجراي Snort در اين حالت كافي است از گزينه vd استفاده كنيم:
#snort –vd
2)ثبت كننده بستهها (Packet logger) :
اطلاعات فوق روي ديسك سخت ثبت مي شوند. براي اجراي Snort در اين مد ميتوان از دستور زير كمك گرفت:
#snort –dev –l /var/log/today.log
3)يك سیستم تشخيص تهاجم كامل مبتني بر شبكه (NIDS):
به واسط Ie0 گوش كرده و از فايل قوانين خود (موجود در مسير /etc/Snort.rules) به عنوان فايل پيكربندي استفاده كرده و در مد daemon اجرا ميشود:
# snort -D -i le0 -c /etc/snort.rules
Snort قوانين را به ترتيبي كه در فايل قوانين Snort آمده است، اعمال نميكند. بلكه اعمال قوانين به صورت پيش فرض به ترتيب Alert، Pass و Log ميباشد. براي تغيير اين ترتيب ميتوان از گزينه –o استفاده كرد. گزينه –A مربوط به هشدارها(Alert) ميباشد.
چهار حالت براي نحوه هشدار دادن وجود دارد: full، fast، none و unsock. گزينه unsock به Snort اجازه ميدهد تا هشدارهاي خود را روي سوکت هاي Unix بفرستد، با اين فرض كه در سمت ديگر سوکت(Socket) يك نرمافزار براي شنيدن اين هشدارها به گوش ايستاده است.
منبع
مترجم آقای "رضا سعدالدین" برگرفته از اینجا
من که خیلی استفاده کردم. امیدوارم که برای شما هم مفید واقع شده باشد. اگر هنوز هم سوالاتی در ذهن دارید می توانید این راهنما های گام به گام را مطالعه فرمایید و یا اینجا ثبت نام کرده و از انجمن snort استفاده کنید.
دوستان عزیز می توانید نمونه هایی از گزارشات snort و همچنین اطلاعاتی در زمینه تهیه صفحات "هشدار" یا " گزارش" به صورت دلخواه را در اینجا مشاهده کنید.
موضوعات مشابه: