با اسنورت از شبکه خود محافظت کنید

برای آشنایی با Snort ابتدا به بررسی اجمالی یکی از مهم‌‌‌ترین ابزارهای امنیتی شبکه به نام سیستم تشخیص نفوذ یا IDS می‌پردازیم. با یک مثال شروع می‌کنیم، فرض کنید برای کنترل عبورو مرور و ایجاد امنیت در یک شرکت، برای در ورودی ساختمان شرکت یک نگهبان باتجربه و قوی گذاشته ‌ایم. همچنین قوانین و سیاست‌های امنیتی ورود و خروج، مشخصات افراد مجاز و موارد ضروری دیگر را با وی هماهنگ کرده ‌ایم.
برای شناسایی هر فرد و تشخیص مجاز بودن او نیاز است که در باز شود و آن شخص پس از دیده شدن، مورد تایید واقع شده و اجازه ورود یا خروجش صادر شود.

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

یک سیستم تشخیص نفوذ که موضوع بحث ماست هم وظایفی مشابه یک سیستم دوربین مداربسته انجام می‌دهد که قادر است یک نفوذ را پیش از رخداد آن تشخیص دهد تا مدیران امنیت شبکه برای آن چاره‌ای بیابند.

تعریف سیستم تشخیص نفوذ
سیستم‌های تشخیص نفوذ به زبان ساده سیستم‌هایی هستند که با نظارت روی یک کامپیوتر یا بررسی ترافیک یک شبکه، موارد مشکوک، سوءاستفاده‌ها و دسترسی‌هایی برخلاف سیاست‌های امنیتی ما را کشف می‌کنند و هشدار لازم را به مسئولان مربوطه می‌دهند تا اقدامات لازم هرچه سریع‌تر انجام شود.

IDS چگونه کار می‌کند؟
همان‌طور که بیان شد، این ابزارها با قرارگیری در یک کامپیوتر یا نقاط مختلف یک شبکه، از تکنیک‌های زیر استفاده می‌کنند:

  • تشخیص ناهنجاری(Abnormal): در این مورد IDS‌ها براساس ویژگی‌های هر کاربر (مانند نرخ تایپ، مدت نشست، فرمان‌های صادر شده و…) یک profile می‌سازند. همچنین ترافیک عادی شبکه را استخراج می‌نمایند (مانند مقدار پهنای باند مورد استفاده، پروتکل مورد استفاده و…) در نتیجه موارد متناقض را شناسایی می‌کنند.
  • تشخیص سوءاستفاده (Misuse): سیستم‌های تشخیص نفوذ با شناخت نقاط آسیب پذیر سیستم و نیز الگوی بسیاری از حملات شبکه ای، می‌توانند تا حد امکان از سوءاستفاده‌های خرابکارانه و حملات جلوگیری نمایند. در اصطلاح به این الگو‌ها،‌ امضا (Signature) می‌گویند.

انواع IDS
IDS‌ها دسته ‌بندی‌ها و انواع مختلفی دارند. مثلا از لحاظ معماری به سه دسته زیر تقسیم می‌شوند:

  • HIDS
  • NIDS
  • DIDS

HIDS – Host-based IDS: وظیفه محافظت از یک سیستم میزبان یا یک سرور خاص و بررسی ترافیک شبکه آن را بر عهده‌دارند.
NIDS – Network-based IDS: شناسایی نفوذهای غیرمجاز را در تمام نقاط شبکه و روی تمام تجهیزات و ترافیک شبکه انجام می‌دهند.
DIDS – Distributed IDS: تشکیل شده از تعدادی HIDS یا NIDS یا ترکیبی از هر دو به همراه یک مدیریت مرکزی.

نکته مهم: امنیت یک امر مطلق نیست و نمی‌‌توان با داشتن چندین ابزار امنیتی مانند
Firewall،IDS Antivirus و… به امنیت کامل در یک کامپیوتر یا شبکه دست یافت؛ استفاده از این ابزارها یک امنیت نسبی و موقتی را فراهم می‌کند.
نکته: IDS و Firewall مکمل هم محسوب می‌شوند زیرا تشخیص نفوذ به عهده IDS و جلوگیری از نفوذ به عهده Firewall است. (البته ابزارهایی به نام IPS (Intrusion Prevention System) نیز هستند که براساس IDS‌ها کار می‌کنند ولی به دلیل قرارگیری برخط (In-line) در شبکه، علاوه بر نظارت و تشخیص نفوذ، می‌توانند به صورت فعال اقدام به پیشگیری از نفوذهای تشخیص داده شده نمایند).
درواقع اگر بسته‌ای طبق قوانین موجود در Firewall مجاز شناخته شود، اجازه عبور آن داده می‌شود، درغیر این صورت بسته توسط Firewall حذف می‌شود.

Snort چیست؟
Snort یک NIDS آزاد و متن‌باز و همچنین کم حجم است که روی اغلب platform‌ها به کار می‌رود. این سامانه توسط Marty Roesch (یکی از موسسان گروه sourcefire) نوشته شده است. اگرچه sourcefireوظیفه پشتیبانی یک نسخه تجاری Snort را به عهده‌دارد ولی همیشه یک نسخه متن‌باز (GNU release) از آن موجود است (در این‌جا از نسخه 2.9.6 استفاده می‌شود).
Snort ترافیک شبکه (محتوای بسته‌های ردو بدل شده) را تحلیل می‌کند و محتویات آن‌ها را با پایگاه‌داده الگوی حملات خود مقایسه می‌کند و نفوذ را
تشخیص می‌دهد؛ در نهایت اخطارها و گزارشات لازم را ارایه می‌کند.

Snort علاوه بر NIDS بودن، برای موارد زیر هم به کار می‌رود:

  • packet sniffer
  • packet logger
  • IPS – Active IDS

Snort چگونه عمل می‌کند؟
ابزار Snortاز چهار بخش مطابق شکل تشکیل شده است. پس از دریافت بسته‌ها و آماده‌‌سازی آن‌ها، بسته‌ها با قوانین موجود در موتور تشخیص Snort (قلب Snort) که بر مبنای امضا کار می‌کند (signature-based ) مقایسه می‌شوند و در صورت تطابق، اخطار مربوطه تولید می‌شود.


نصب و پیکر‌بندی Snort به عنوان NIDS
نصب و پیکر‌بندی Snort بسته به میزان ترافیک شبکه، فضای ذخیره‌‌سازی و شرایط متعدد دیگردر شبکه شما، پیش نیازهای مختلفی دارد، از جمله:

  • فضای ذخیره‌‌سازی بالا برای ذخیره گزارش‌ها
  • کنترل از راه دور سیستم Snort
  • یک یا چند کارت شبکه سریع به منظور جمع‌آوری درست و کامل بسته‌ها (کارت شبکه دوم هم برای اتصالات معمولی و مدیریت سیستم Snort)

حافظه اصلی کافی
سیستم عامل: خانواده BSD به دلیل داشتن پشته پروتکلی TCP/IP بهتر، گزینه مناسبی هستند ولی از خانواده Linux از نسخه کرنل 2.4 به بعد هم می‌توان استفاده کرد. (ما در این نوشتار از سیستم عامل دبیان گنو/لینوکس 7.4.0 با نسخه کرنل 3.2.0 استفاده کرده ‌ایم.)
نکته: می‌توان از سیستم عامل‌های دیگر از جمله مکینتاش و ویندوز هم استفاده کرد.

نرم‌افزار:
در کنار Snort می‌توان از ابزارهای پایگاه‌داده، PHP، وب سرور و… نیز به منظور مدیریت بهتر گزارشات استفاده کرد.
Snort را می‌توان به دو روش زیر روی سیستم عامل دبیان گنو/لینوکس نصب کرد:

  • ۱. نصب از طریق بسته‌های نرم‌افزاری و استفاده از پیکر‌بندی پیش فرض
  • ۲. نصب از طریق کدمنبع و اعمال پیکر‌بندی دستی ابزارهای مرتبط با Snort

نکته: تنها یکی از روش‌ها را استفاده کنید! (روش دوم، روش پیشنهادی و بهتر است)

در این‌جا به دلیل پرهیز از پیچیدگی مطلب، روش اول را بررسی می‌کنیم:
۱. بسته‌های مورد نیاز Snort در مخازن پیش فرض دبیان نیست، بنابراین مسیر زیر را به فایل sources.list می‌افزاییم:

deb http://ftp.us.debian.org/debian stable main contrib non-free
# cat deb http://ftp.us.debian.org/debian stable main contrib non-free>> /etc/apt/sources.list

۲. لیست مخازن را به روز می‌کنیم:

# aptitude update

۳. نصب بسته:

# aptitude install snort

استفاده از Snort
همان طور که قبلا گفته شد، Snort می‌تواند در چند حالت مختلف پیکر‌بندی و استفاده شود که تنها به توضیح سه حالت اول می‌پردازیم:

  • sniffer mode
  • packet logger mode
  • NIDS mode
  • In-line mode) IPS)

sniffer mode
در این حالت، Snort تمام بسته‌های ردوبدل شده در شبکه را به طور پیوسته در کنسول نمایش می‌دهد:

snort -v

گزینه v- تنها سرآیند پروتکل‌های IP, TCP, UDP, ICMP را نشان می‌دهد.
این گزینه کند است و ممکن است بعضی بسته‌ها، drop یا گم شوند.

snort -vd

گزینه d- داده‌های لایه application یا packet data را هم نمایش می‌دهد.

Snort -vde

گزینه e- برای نمایش سرآیند بسته‌های لایه data link به کار می‌روند.

snort -devi eth0

می توان sniff (شنود) بسته‌ها را به یک رابط خاص شبکه محدود کرد.
مثال: ابتدا دو پنجره ترمینال باز کنید. در ترمینال اول دستور زیر را وارد نمایید:

snort -devi lo

با این کار snort شروع به sniff بسته‌ها روی رابط loopback می‌کند.
در پنجره ترمینال دوم هم دستور ping را بزنید:

ping -c 4 localhost

مشاهده می‌کنید که snort شروع به نمایش بسته‌ها می‌کند؛ بسته‌هایی از نوع پروتکل ICMP . در پایان با زدن ctrl+c به sniff کردن snort پایان ‌دهید و گزارش نهایی را ببینید.

Packet logger mode
بسته‌ها را روی دستگاه ذخیره‌‌سازی شما ثبت می‌کند. درواقع در این حالت بسته‌ها دیگر نمایش داده نمی‌‌شوند بلکه درون فایلی ذخیره می‌شوند. برای ذخیره log‌ها در یک مکان مشخص، پوشه‌ای با نام دلخواه snort_logs ایجاد می‌کنیم (فرض می‌کنیم این پوشه را در مسیر جاری ایجاد نموده ‌ایم):

snort -i lo -l ./snort_logs

چون بسته‌ها در حالت باینری درون این پوشه ذخیره می‌شوند (فایلی شبیه snort.log.1398813163 ) و کل بخش‌های یک بسته در حالت باینری log می‌شوند، بنابراین نیازی به نوشتن گزینه‌های v- و d- و e- نیست. (ابزارهایی مانند tcpdump و ethereal از این فرمت باینری پشتیبانی می‌کنند).
حال اگر بخواهیم بسته‌های log شده را از فایل‌های باینری مشاهده کنیم (حالت playback ) از گزینه r- استفاده می‌کنیم:

snort -dvr packet.log | less

(خروجی را به دستور less برای نمایش و بررسی بهتر pipe می‌نماییم).
حتی می‌توان log‌ها را براساس مواردی فیلتر نمود:

مثال: می‌خواهیم یک IP خاص را از خروجی log جدا کنیم.

snort -dr snort.log.1398813163 not host 10.42.0.1

یا فیلتر کردن براساس شماره پورت:

snort -dr snort.log.1398813163 not port 22

NIDS mode
در این حالت که پیچیده‌‌‌ترین حالت است، snort با استفاده از فایل مربوط به مجموعه قوانین و الگوهای حملات و رفتارهای خاص به نام snort.conf، روی ترافیک شبکه تحلیل انجام می‌دهد. برای فعال‌‌سازی این حالت از دستور زیر استفاده می‌کنیم:

snort -dh 192.168.1.0/24 -i eth0 -l ./snort_logs -c snort.conf

اگر با 1- مسیر فایل‌های log را مشخص نکرده باشیم، مسیر پیش فرض var/log/snort/ است.
اگر محتویات یک بسته با یکی از قوانین موجود در snort مطابقت داشته باشد، بدنه آن قانون روی بسته اعمال می‌شود.

منابع:
کتاب‌ها و مقالات:
۱. امینی مرتضی، سیستم تشخیص نفوذ، مرکز امنیت داده و شبکه شریف، نیمسال اول ۹2-۹1
۲. حمیدی آلاله و ضیایی سیده مارال، معرفی سیستم‌های تشخیص نفوذ، آزمایشگاه تخصصی آپا دانشگاه فردوسی مشهد، تیر۸۸
۳. سجادی سیدداوود، فتحی علیرضا و متقی مهدی، لینوکس، شبکه، امنیت، انتشارات ناقوس، ۲۰۱۱
۴. روغنی محمد تقی، شبکه صفرتاصد، انتشارات ناقوس، ۱۳۹۲
۵. پورمحسنی سجاد، بررسی و شناسایی سیستم‌های تشخیص نفوذ شبکه‌های کامپیو‌تری، دانشگاه علم و صنعت ایران
۶. مقالات مربوط به سیستم‌های تشخیص نفوذ و نرم‌افزار snort از مرکز تخصصی آپا دانشگاه صنعتی اصفهان
۷. آشتیانی امیر، آموزش ضد امنیت شبکه و معرفی متدهای مربوطه
۸. Toby Kohlenburg ,Erin Heffernan, Snort Intrusion Detection and Prevention Toolkit, 2007
۹. Snort Users Manual 2.9.6, 2013
سایت‌ها:
۱. سایت snort.org
۲. نصب snort از طریق کدمنبع روی گنو/لینوکس(دانشگاه Maryland)
۳. سایت WonderHowTo
۴. فروم آشیانه
۵. ویکی aanval
۶. سایت OpenToDo