اسنورت (SNORT) در سال 1998 توسعه یافت و اکنون توسط سیسکو نگهداری می شود، یک سیستم پیشرو در صنعت تشخیص نفوذ/سیستم پیشگیرانه نفوذ (IDP/IPS) است. این ابزار به صورت لحظه ای، ترافیک را رصد کرده و بر اساس الگوها و قوانین تعبیه شده در پایگاه داده خود، پاسخی تولید می کند. با استفاده از تجزیه و تحلیل پروتکل و بازرسی محتوا، SNORT می تواند طیف وسیعی از حملات را شناسایی کند. از جمله این حملات می توان به مواردی نظیر انکار سرویس توزیع شده (Distributed Denial of Service یا DDoS)، سرریز بافر (Buffer overflow)، واسط دروازه مشترک (Common Gateway Interface یا CGI)، انسداد پیام سرور (Server Message Block یا SMB) اشاره کرد. وقتی SNORT با مقایسه رفتار ترافیک با الگوها و قوانین پایگاه داده خود، یک الگوی مشابه در ترافیک پیدا میکند، میتواند عملی را انجام دهد (Chapman, 2016). در این بخش سعی می شود تا با ارائه مثالی، ساختار و پیکربندی قوانین Snort را تشریح کنیم. توضیحات در ادامه بر اساس منبع (Sanders & Smith, 2014) آورده شده است.
قبل از بررسی هر جزء خاص از این قانون، باید بدانید که قوانین دارای دو بخش مجزا هستند: سربرگ قانون (Rule header) و گزینه های قانون (Rule options). سربرگ قانون تمامی مواردی است که قبل از پرانتز رخ می دهد و گزینه های قانون در داخل پرانتز نمایش داده می شوند. این تفکیک در شکل زیر نشان داده شده است.

نمونه یک قانون یا امضا در اسنورت (SNORT)
1- سربرگ قانون (Rule Header)
سربرگ قانون همیشه اولین بخش از قانون (rule/signature) است و جزء ضروری قانون تلقی می شود. سربرگ مسئول آن است که در یابد “چه کسی (Who)“ در الگوی ترافیک مشارکت دارد. سربرگ قانون همیشه از قسمت های یکسانی تشکیل شده است: اقدام قانون (rule action)، پروتکل (protocol)، میزبانهای مبدا/مقصد (source/ dest hosts)، پورتهای مبدا/مقصد (source/dest ports)، و جهت ترافیک (direction of the traffic).
اقدام قانون (Rule action)
اولین بخش از هر قانون، اعلان عمل (action declaration) است که به موتور IDS می گوید که در هنگام صدور هشدار چه کاری انجام دهد. در اسنورت، سه اقدام ممکن وجود دارد:
الف) هشدار (Alert): در این حالت Snort ابتدا ایجاد هشدار کرده و در ادامه بسته را رویدادنگاری میکند.
ب) رویدادنگاری (Log): در این حالت اسنورت فقط بسته را رویدادنگاری میکند.
ج) گذر (Pass): در این حالت اسنورت هیچ کاری بر روی بسته انجام نمیدهد.
پروتکل (Protocol)
این فیلد به موتور IDS می گوید که قانون باید بر روی چه پروتکلی اعمال شود. برخی از این پروتکل ها عبارتند از tcp، idp، icmp، ip.
میزبان منبع و مقصد (Source and Destination Hosts)
در قانونی که تصمیم به وضع آن داریم، به دنبال یافتن الگوی ترافیکی نفوذ هستیم. در بخش قبل متوجه شدیم که می توان بررسی قانون را تنها به یک سری پروتکل خاص محدود کرد. حال اگر بخواهیم این محدودیت روی گروه خاصی از سیستم ها نیز صورت گیرد، به جای تعریف پروتکل می بایست به اعمال محدودیت بر محدوده ای از آدرس های IP پرداخت. این IP ها می توانند بیانگر میزبانان منبع یا میزبانان مقصد باشند. از متغیرهای $HOME_NET و $EXTERNAL_NET برای تعریف آدرس های IP در قانون استفاده شده است. اگر نیازی نیست که قانون بر گروه خاصی از میزبان ها محدود شود، کلمه کلیدی any مورد استفاده قرار می گیرد. متغیرهای $HOME_NET و $EXTERNAL_NET دو متغیر مهم شبکه هستند. متغیر $HOME_NET برای شناسایی محدوده آدرس IP استفاده می شود که Snort مسئولیت محافظت از آن ها را بر عهده دارد. متغیر $EXTERNAL_NET برای شناسایی محدودههای آدرس IP استفاده می شود که توسط Snort محافظت نمی شوند. این اغلب شامل هر محدوده آدرسی است که به سازمان تعلق ندارد و خارج از محیط شبکه در نظر گرفته می شود. متغیر $EXTERNAL_NET، به طور کلی شامل هر چیزی است که بخشی از $HOME_NET نباشد.
جهت ترافیک (Traffic Direction)
قطعه نهایی پازل هنگام ایجاد یک هدر قانون، مشخص کردن مقصد ترافیک است. در اینجا فقط دو گزینه ممکن وجود دارد:
->: بیانگر ترافیک منبع به مقصد یک طرفه است.
<>: بیانگر ترافیک دو طرفه است.
از آنجا که در اینجا فقط دو گزینه وجود دارد، هنگام نوشتن قوانین باید تصمیم بگیرید که آیا جهت ارتباط مهم است یا خیر. اگر جهت ارتباط مهم نیست، ترتیب میزبانی منبع و مقصد و شماره پورت در سربرگ اهمیتی ندارد. با این حال، اگر جهت مهم باشد، ابتدا میزبان منبع و شماره پورت باید فهرست شود. در مورد سربرگ یا هدر قانون مثالی که در شکل بالا نشان داده شده است، ما نگران دانلود کردن محتوای شرورانه (evil) از یک وب سرور خارجی توسط کاربران هستیم. این بدان معنی است که منابع بالقوه بسته های شیطانی سرورهای وب خارجی هستند و مقصد یکی از میزبان های داخلی ما است. بنابراین، میزبانها و پورتهای خارجی در ابتدا فهرست میشوند ($EXTERNAL_NET 80)، به دنبال آن نشانگر جهت مبدا به مقصد (<-)، و پس از آن میزبان و پورت داخلی ($HOME_NET any) استفاده می شوند.
2- گزینه های قانون (Rule Options)
در حالی که بخش سرصفحه قانون مسئول “چه کسی (Who)” است، بخش گزینه های قانون مسئول “چه چیزی (What)” است. این بخش دقیقاً به موتور IDS میگوید که در بسته هایی که در حال بررسی است به دنبال چه چیزی است و چگونه آن را پیدا کند. محتویات بخش گزینه های قانون متغیر است و می تواند شامل چندین چیز باشد، اما مهم نیست که چه چیزی را انتخاب می کنید، بخش گزینه ها همیشه باید در پرانتز قرار گیرد. در این پرانتز، گزینه های فردی به شکل زیر است:
;<option>: <option values>
نام گزینه (option) و مقادیر آن (option values) با یک دونقطه (:) از هم جدا می شوند و مقادیر گزینه با نقطه ویرگول (;) خاتمه می یابند. اگر مقادیر گزینه حاوی فاصله باشد، آن مقادیر باید در گیومه (quotes) محصور شوند. در برخی موارد، گزینه ها مقادیری ندارند و به سادگی به این صورت فراخوانی می شوند:
;<option>
توجه داشته باشید که نام گزینه با نقطه ویرگول خاتمه می یابد. اگر نتوانستید دونقطه یا نقطه ویرگول را در صورت لزوم اضافه کنید، موتور IDS مورد استفاده شما هنگام تجزیه آن قانون، مقداردهی اولیه نمی شود.
برخی از گزینه های قانونی که می توانند مورد استفاده قرار گیرند در ادامه توضیح داده شده اند.
Message (msg): متن توصیفی مرتبط با قانون است که معمولاً به عنوان “نام” قانون در نظر گرفته می شود، و این همان چیزی است که در ابتدا برای تحلیلگر، هنگام بررسی هشدارهای تولید شده توسط یک موتور IDS نمایش داده می شود. برخی از نمونه ها عبارتند از:
ET POLICY Outgoing Basic Auth Base64 HTTP Password detected unencrypted
OS-WINDOWS SMB NTLM NULL session attempt
EXPLOIT-KIT Blackholev2 exploit kit jar file downloaded
Signature Identifier (sid): برای شناسایی منحصر به فرد قوانین استفاده می شود. هر قانون باید یک SID منحصر به فرد داشته باشد که صرفاً یک مقدار عددی است. توجه به این نکته ضروری است که برخی از محدوده ها رزرو شده در نظر گرفته می شوند. برای مثال، ممکن است SIDهای بین 2000001 تا 2999999 برای تهدیدهای نوظهور مورد استفاده قرار گیرد.
Revision (rev): گزینه revision برای نشان دادن تعداد دفعات تغییر یک قانون استفاده می شود. هنگامی که یک قانون جدید ایجاد می شود، باید به آن rev:1 اختصاص داده شود. نشان می دهد که این اولین تجدید نظر قانون است. به جای اینکه هر بار که یک قانون تغییر می کند یک SID جدید ایجاد کنید، باید همان SID را حفظ کنید و شماره ویرایش را افزایش دهید. در صورتی که Snort یا Suricata با یک SID تکراری مواجه شوند، از قانون با شماره ویرایش بالاتر استفاده خواهند کرد.
برای روشن تر شدن قوانین در SNORT به مثال زیر که در شکل ابتدای متن نیز به تصویر در آمده است، دقت کنید.
alert tcp $EXTERNAL_NET 80 -> $HOME_NET any (content:”evil”; sid:55555555; rev:1;)
در وهله اول باید در نظر داشت که این قانون تنها بر روی پروتکل tcp اعمال می شود. بر اساس این قانون در صورتی که پیام های ارسالی از شبکه خارجی در پورت 80 به هر پورت شبکه داخلی حاوی رشته “evil” باشد، مظنون خواهند بود. شناسه این قانون 55555555 است که تحت عنوان شناسه امضا (Signature Identifier) و یا به اختصار SID نیز شناخته می شود. به همین دلیل است که یک قانون یا rule تحت عنوان امضا یا signature نیز شناخته می شود. همچنین از عبارت rev:1 مشخص است که این قانون یک بار ویرایش شده است.
منابع: