تشخیص نفوذ در شبکه‌های کامپیوتری (تحقیقاتی)

تغییرات پروژه از تاریخ 1394/04/10 تا حالا

شناسایی حملات در شبکه‌های کامپیوتری از جنبهٔ اطّلاعات مورد استفاده در مرحلهٔ یادگیری، به دو دستهٔ تشخیص نفوذ و تشخیص ناهنجاری تقسیم می شود.

در تشخیص نفوذ، هم از ترافیک معمول و هم از ترافیک حمله استفاده می‌شود. برای انجام این مهم، روش‌های متنوّعی مورد استفاده قرار گرفته‌اند که در این پژوهش باید به اختصار مرور شده و در نهایت یکی از این روش‌ها برای تشخیص حملات مورد استفاده قرار گیرند.



![توضیح تصویر](https://boute.s3.amazonaws.com/168-intrusion-detection.jpg) 
# **1. مقدمه**
<br></br>
# 1.1 نفوذ چیست و چگونه انجام می شود؟


نفوذ<sup class="footnote-ref" id="fnref-1"><a href="#fn-1" rel="footnote">1</a></sup> به مجموعه ی اقدامات غیرقانونی که صحت و محرمانگی و یا دسترسی به یک منبع را به خطر می اندازد، اطلاق می گردد. نفوذ ها می توانند به دو دسته ی داخلی و خارجی تقسیم شوند. نفوذهای خارجی به آن دسته نفوذهایی گفته می شود که توسط افراد مجاز و یا غیرمجاز از خارج شبکه به درون شبکه ی داخلی صورت می گیرد و نفوذهای داخلی توسط افراد مجاز در سیستم و شبکه ی داخلی، از درون خود شبکه انجام می پذیرد. نفوذگرها عموماً از عیوب نرم افزاری، شکستن کلمات رمز، استراق سمع ترافیک شبکه و نقاط ضعف طراحی در شبکه، سرویس ها و یا کامپیوترهای شبکه برای نفوذ به سیستم ها و شبکه های کامپیوتری بهره می برند[1] . 

<br></br> 
# 1.2 سیستم تشخیص نفوذ چیست؟

"یک سیستم تشخیص نفوذ  را می توان مجموعه ای از ابزارها،روش ها و مدارکی در نظر گرفت که به شناسایی،تعیین و گزارش فعالیت های غیرمجاز یا تائید نشده تحت شبکه،کمک می کند[2]. اما در حقیقت سیستم های تشخیص نفوذ به صورت مستقیم نفوذ را تشخیص نمی دهند. در واقع این سیستم ها با بررسی فعالیت های در حال انجام در شبکه ، به کمک الگوریتم ها و یا الگوهایی که در خود دارند فعالیت های مشکوک را شناسایی کرده و به عنوان نفوذ معرفی می کنند. طبیعی است که امکان دارد بعضی از این فعالیت ها در واقع نفوذ نبوده و صرفا فعالیتی غیرعادی اما بی خطر باشند و سیستم در تشخیص نفوذ دچار اشتباه شده باشد.

ابزار های امنیتی دیجیتال را می توان به گونه ای معادل ابزار های امنیتی فیزیکی دانست[2]. به عنوان مثال اگر اطلاعاتی را که در شبکه ی خود داریم به عنوان اسنادی محرمانه در یک خانه تصور کنیم ، دیوار آتش<sup class="footnote-ref" id="fnref-2"><a href="#fn-2" rel="footnote">2</a></sup> نقش درهای قفل شده را دارند. در واقع درهای قفل شده نقش بازدارندگی و جلوگیری از نفوذ را دارند ، اما در صورت وقوع نفوذ هشدار دهنده نیستند! اما نقش سیستم های تشخیص نفوذ مثل سیستم های هشدار دهنده ی نصب شده در خانه است که در صورت وقوع نفوذ از وقوع آن جلوگیری نمی کنند اما به سیستم هشدار می دهند که نفوذی در حال انجام است. در واقع این سیستم ها نقش بازدارندگی ندارند!

در واقع یک شبکه ی امن مجموعه ای از سیستم ها است که مکمل یکدیگرند و با کار در کنار یکدیگر یک شبکه را امن می کنند. همان طور که دیدیم جلوگیری از نفوذ به عهده ی دیوار آتش بود اما وظیفه ی هشدار دادن به سیستم را سیستم های تشخیص نفوذ به عهده داشتند. بنابراین وظایف این اعضا مکمل و هماهنگ با یکدیگر است.

به طور کلی سه عملکرد اصلی عبارتند از[1] :
1) نظارت و ارزیابی
2) کشف   
 3) واکنش



![توضیح تصویر](https://boute.s3.amazonaws.com/168-intrusion.png)

<br></br> 
# 1.3 لزوم استفاده از سیستم های تشخیص نفوذ

در دنیای امروز، کامپیوتر و شبکه های کامپیوتری متصل به اینترنت نقش عمده ای در ارتباطات و انتقال اطلاعات ایفا می کنند. در این بین افراد سودجو با دسترسی به اطلاعات مهم مراکز خاص یا اطلاعات افراد دیگر و با قصد اعمال نفوذ یا اعمال فشار و یا حتی به هم ریختن نظم سیستم ها، عمل تجاوز به سیستم های کامپیوتری را در پیش گرفته اند Intruder و Cracker ،Hacker کلماتی هستند که امروزه کم و بیش در محافل کامپیوتری مطرح می باشند و اقدام به نفوذ به سیستمهای دیگر کرده و امنیت آن ها را به خطر می اندازد. بنابراین لزوم حفظ امنیت اطلاعاتی و حفظ کارآیی در شبکه های کامپیوتری که با دنیای خارج ارتباط دارند، کاملأ محسوس است[1].
اما هدف سیستم ها تشخیص نفوذ جلوگیری از آن نیست بلکه تشخیص نفوذ و البته ضعف های سیستم کلی و گزارش آن به مدیر سیستم است. در واقع کار اجزایی مثل دیوار آتش و سیستم تشخیص نفوذ مکمل یکدیگر برای حفظ امنیت و مقابله با نفوذ به یک سیستم است. اما در واقع سیستم های تشخیص نفوذ نخستین خط دفاعی در مقابل نفوذ های احتمالی می باشند[4] .

سیستم های تشخیص نفوذ برای بسیاری از سازمان ها ،از دفاتر کوچک تا شرکت های چند ملیتی ،ضرورتی هستند .برخی ازفواید این سیستم ها عبارتند از[2]:
·         کارایی بیشتر در تشخیص نفوذ،در مقایسه با سیستم های دستی

·         منبع دانش کاملی از حملات

·         توانایی رسیدگی به حجم زیادی از اطلاعات

·         توانایی هشدار نسبتا بلادرنگ که باعث کاهش خسارت می شود

·         دادن پاسخ های خودکار،مانند قطع ارتباط کاربر،غیر فعال سازی حساب کاربر،اعمال مجموعه دستورهای خودکار وغیره

·         افزایش میزان بازدارندگی

·         توانایی گزارش دهی


<br></br> 
# 1.4 روش های تشخیص نفوذ

"روش های تشخیص مورد استفاده در سیستم های تشخیص نفوذ به دو دسته تقسیم می شوند[3]:"
الف- روش تشخیص رفتار غیر عادی<sup class="footnote-ref" id="fnref-4"><a href="#fn-4" rel="footnote">4</a></sup>
ب-  روش تشخیص سوءاستفاده<sup class="footnote-ref" id="fnref-5"><a href="#fn-5" rel="footnote">5</a></sup> یا تشخیص مبتنی بر امضاء<sup class="footnote-ref" id="fnref-6"><a href="#fn-6" rel="footnote">6</a></sup>
<br></br> 
## 1.4.1 تشخیص رفتار غیر عادی

"برای تشخیص رفتار غیرعادی، باید رفتارهای عادی را شناسایی کرده و الگوها و قواعد خاصی برای آن ها پیدا کرد. رفتارهایی که از این الگوها پیروی می کنند، عادی بوده و رویدادهایی که انحرافی بیش از حد معمول آماری از این الگوها دارند، به عنوان رفتار غیرعادی تشخیص داده می شود.نفوذهای غیرعادی برای تشخیص بسیار سخت هستند، چون هیچگونه الگوی ثابتی برای نظارت وجود ندارد[3]. یکی از حالات غیر عادی بودن استفاده بیش از حد معمول از یک سیستم است. مثلا اگر شخصی که یک یا دو بار در روز وارد سیستم می شده امروز چندین برابر گذشته وارد سیستم شده است این یک فعالیت غیر عادی است. یا مثلا زمان استفاده از یک سیستم نیز می تواند عاملی برای تشخیص مشکوک بودن فعالیت باشد. مثلا اگر شخصی خارج از ساعت اداری وارد سیستم شود نیز یک فعالیت مشکوک انجام داده که می تواند برای تشخیص نفوذ آن وارد عمل شد.

تکنیک ها و معیارهایی که در تشخیص رفتار غیرعادی به کارمی روند، عبارتند از[1] :

۱)تشخیص سطح استانه <sup class="footnote-ref" id="fnref-7"><a href="#fn-7" rel="footnote">7</a></sup>
تعداد ورود و خروج به / از سیستم و یا زمان استفاده از سیستم، از مشخصه های رفتار سیستم و یا استفاده کننده است که می توان با شمارش آن به رفتار غیرعادی سیستم پی برد و آن را ناشی از یک نفوذ دانست. این سطح کاملاً ایستا و اکتشافی<sup class="footnote-ref" id="fnref-8"><a href="#fn-8" rel="footnote">8</a></sup> است.

۲)معیارهای اماری<sup class="footnote-ref" id="fnref-9"><a href="#fn-9" rel="footnote">9</a></sup>
در نوع پارامتریک، مشخصات جمع شده براساس یک الگوی خاص در نظر گرفته می شود و در حالت غیر پارامتریک بر اساس مقادیری که به تجربه حاصل شده است مقایسه صورت می گیرد. از IDS های معروف که از اندازه گیری آماری برای تشخیص نفوذ رفتار غیرعادی استفاده می کنند، می توان <sup class="footnote-ref" id="fnref-10"><a href="#fn-10" rel="footnote">10</a></sup>NIDS را نام برد.

۳)معیارهای قانونگرا<sup class="footnote-ref" id="fnref-11"><a href="#fn-11" rel="footnote">11</a></sup>
شبیه به معیارهای آماری غیرپارامتریک است، به طوری که داده ی مشاهده شده براساس الگوهای استفاده شده ی مشخصی به طور قابل قبول تعریف می شود. اما با الگوهایی که به عنوان قانون مشخص شده فرق دارد و به صورت شمارشی نیست.

۴)سایر معیارها



## *1.4.2تشخیص مبتنی بر امضا*

این روش به این ترتیب است که روش های مختلف نفوذی که از قبل استفاده شده و مقابله با آن ها تجربه شده است به صورت الگوهایی در سیستم قرار داده شده است. سیستم نیز فعالیت های انجام شده را با این الگوها مطابقت می دهد و طبیعی است که در صورت مطابقت یک فعالیت با یکی از این الگوها باید هشدار لازم را بدهد. در این روش ها، معمولاً تشخیص دهنده دارای پایگاه داده ای از امضاء ها یا الگوهای حمله است و سعی می کند با بررسی ترافیک شبکه الگوهای مشابه با آن چه را که در پایگاه داده ی خود نگهداری می کند بیابد.[3]
طبیعی است که چنین سیستم هایی توان تشخیص نفوذ هایی که با روش های جدید انجام شده و الگوی آن ها در سیستم موجود نیست را ندارند. در واقع این وظیفه ی مدیر سیستم است که با تحقیق و البته تجربه! الگوهای جدید و به روز نفوذ را در سیستم تشخیص نفوذ قرار دهد. در مقابل این سیستم ها در مقابل روش های نفوذی که شناخته شده بوده و الگوی آن ها در سیستم موجود است بسیار کارا هستند.

# 1.5 انواع معماری سیستم های تشخیص نفوذ [1]

•  سیستم تشخیص نفوذ مبتنی بر میزبان <sup class="footnote-ref" id="fnref-12"><a href="#fn-12" rel="footnote">12</a></sup>(HIDS)  
•  سیستم تشخیص نفوذ مبتنی بر شبکه (NIDS)  <sup class="footnote-ref" id="fnref-10"><a href="#fn-10" rel="footnote">10</a></sup>
•  سیستم تشخیص نفوذ توزیع شده (DIDS)  <sup class="footnote-ref" id="fnref-13"><a href="#fn-13" rel="footnote">13</a></sup> 

<br></br> 
# **2.کارهای مرتبط**
<br></br> 
# 2.1 معرفی راه های مختلف تشخیص نفوذ در روش تشخیص رفتار غیرعادی

روش های تشخیص نابهنجاری ،سعی در مدل کردن رفتار عادی سیستم دارد و هر اتفاقی که از این مدل تخلف کند،
**در قسمت آزمایش ها در مورد نتایج آزمایش های مربوط به روش های مهم مطرح شده و مقایسه ی بین آن ها توضیحات کامل ارائه خواهد شد.**
در واقع این تقسیم بندی ترکیبی از دسته بندی [2] و روش های دیگر به دست آمده از [5] و [6] و [7] است و در برخی نیز برداشت و توضیح من جایگزین متن اصلی شده است. (با ذکر منبع!)
روش های تشخیص نابهنجاری که در اینجا مورد بحث قرار می گیرد  (که در فازهای بعدی امکان اضافه شدن و تکمیل آن ها وجود دارد)،عبارتند از:

·         مدل های آماری

·         رویکرد سیستم امن

·         بازبینی پروتکل

·         بررسی فایل ها

·       ایجاد لیست سفید

·         شبکه های عصبی

·         الگوریتم ژنتیک

·         ماشین های بردار پشتیبان

·         درخت تصمیم
<br></br> 

## **مدل های آماری**

مدل های آماری [2] جزو اولین روش های استفاده شده برای تشخیص نفوذ است.در این روش بررسی می شود که فعالیت در حال بررسی تا چه میزان با فعالیت عادی و معمول یک کاربر مشابهت دارد. در واقع وجود تفاوت زیاد میان این رفتار با رفتار عادی می تواند معیار خوبی برای تشخیص نفوذ باشد. این میزان مشابهت با روش های مختلف آماری رخدادها می تواند بررسی شود که به اختصار در اینجا ذکر می شود :


·         **اندازه آستانه:**این روش مقادیری تنظیم شده و یا ابتکاری،برای روی دادن رخدادها و یا تعداد دفعات روی دادن آنها طی یک دوره زمانی ،نسبت می دهد.بعضی از نمونه های معمول عباتند از ،ورود کاربر و غیر فعال شدن کاربر پس از تعداد مشخصی شکست در ورود[2] .

·         **میانه و انحراف معیار:** با مقایسه رخدادها با پروفایل میانه و انحراف معیار ،فاصله اطمینانی برای نابهنجاری قابل تخمین است.پروفایل ها ،بر اساس داده های تاریخی و یا مقادیری از پیش تنظیم شده می آیند[2] . در واقع انتخاب یک پروفایل به عنوان پروفایل عادی و معیار تفاوت فعالیت انجام شده با فعالیت این پروفایل تعیین کننده است.

·         **مدل های چند متغیره:**محاسبه همبستگی بین مقیاس های رخداد های مختلف،با توجه به انتظارات پروفایل[2]

·         **مدل فرایند مارکوف** :این مدل انواع حملات را به عنوان متغیرهای حالت،در یک ماتریس حالت/گذر در نظر می گیرد.در این سیستم یک رخداد نابهنجار در نظر گرفته می شود،هرگاه احتمال وقوع آن رخداد برای حالت قبلی با مقدار وابسته اش،بسیار کم باشد [2].

**·**         **تحلیل دسته بندی:**این روش غیر پارامتری،بر مبنای نمایش جریان رخدادها به صورت برداری عمل می کند،که با استفاده از الگوریتم های دسته بندی در کلاس های مختلفی از رفتارها،گروه بندی می شوند.دسته بندی ها شامل فعالیت های مشابه یا الگوهای کاربر است،به نحوی که رفتار عادی از نابهنجار قابل تمایز است[2] .
<br></br> 
## **رویکرد سیستم امن**

اجرای کدها در یک برنامه دارای روندی شناسایی شده و معمول است. در واقع فراخوانی های سیستمی دارای روندی هستند که می توان به کمک آن برنامه ها را برای حالت عادی یا خطا یا نفوذ مدل سازی کرد و به کمک آن رفتارهای نا به هنجار را شناسایی نمود. برای مثال ،رفتار نابهنجار یک فراخوانی سیستمی اجرایی در یک وب سرور ،می تواند نمایانگر حمله سرریز پشته باشد. این روش ،توانایی تشخیص بسیاری از حملات معمول را دارد،ولی از تشخیص حملاتی که برا اساس شرایط مسابقه،تخلف در سیاست ها و یا جعل هویت هستند،عاجز است [2].
<br></br> 
## **بازبینی پروتکل**

بسیاری از شیوه های حمله،بر اساس استفاده غیر معمول یا نابهنجار از فیلدهای پروتکل ها است.روش های بازبینی پروتکل،با دقت فیلدها و رفتار پروتکل را بر اساس استانداردها و انتظارات بررسی می کنند. داده هایی که از این محدوده تخطی کنند،به عنوان داده های مشکوک در نظر گرفته می شوند [2] .

این رویکرد بسیاری از حملات معمول را شناسایی می کند ، ولی مشکل اساسی آن،رعایت ناچیز استانداردها در پیاده سازی بسیاری از پروتکل ها است.همچنین استفاده از این شیوه برای پروتکل های اختصاصی و یا نا آشنا،می تواند باعث ایجاد هشدارهای اشتباه شود[2].
<br></br> 

## **بررسی فایل ها**

این روش،از مجموع مقابله ای رمز شده داده های حساس سیستمی،برای شناسایی تغییراتی مانند نصب برنامه بصورت غیر مجاز،درهای پشتی به جای مانده از تروژانهای موفق قبلی و تخریب سیستم،استفاده می کنند.(این شیوه در برنامه های ضد ویروس،برای شناسایی تغییر در فایل های اجرایی استفاده می شود)این شیوه در بازیابی سیستم و بررسی های قانونی ،بسیار مفید است.مشکل این روش این است که ،تشخیص بعد از انجام تغییرات صورت می گیرد،همچنین در صورتی که مجموع مقابله ای اصلاح شود و یا فرایند تشخیص به خطر بیفتد،تشخیص انجام نخواهد شد[2].
<br></br> 

 

# **ایجاد لیست سفید**

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

<br></br>
## **شبکه عصبی**

  "شبکه های عصبی <sup class="footnote-ref" id="fnref-14"><a href="#fn-14" rel="footnote">14</a></sup> را می توان با اغماض زیاد، مدل های الکترونیکی از ساختار عصبی مغز انسان نامید، مغز به عنوان سیستم پردازش اطلاعات از تعداد زیادی نرون (نرون ساده ترین واحد ساختاری سیستم های عصبی) تشکیل شده است [5]. در واقع شبیه سازی یک شبکه عصبی مانند مغز انسان این قابلیت را دارد که مانند مغز انسان با گذشت زمان تجربه هایی را به دست آورده و ثبت کند. این تجربه ها به طور طبیعی در تعامل با محیط به دست می آید. در واقع یک سیستم مبتنی بر شبکه عصبی در تعامل با رخدادهای مختلف اعم از نفوذ یا غیر از آن می تواند الگوهایی را به دست آورده و ثبت کند.
  با توجه به این توضیحات قطعا پیاده سازی شبکه های عصبی احتیاج به محاسبات بالا دارد که این خود یک نقطه ضعف برای شبکه های عصبی در مقابل سایر روش های تشخیص نفوذ محسوب می شود. ضمن این که همانند مغز انسان این مدل شبکه ها نیز زمانی را برای یادگیری صرف می کنند! طولانی شدن این زمان نیز می تواند یک ضعف در این سیستم ها محسوب شود. 

سیستم تشخیص نفوذ بر اساس شبکه های عصبی برای سیستم کامپیوتری ویژه شامل مراحل سه گانه زیر است [6]:
1. مجموعه داده های آموزشی : بدست آوردن لاگهایی برای هر کاربر در دوره های زمانی چند روزه  برای هر کاربر  از طریق یک بردار نشان می دهیم که یک کاربر چه دستوارتی را اجرا می کند.
2. آموزش : شبکه عصبی را برای شناسایی کاربر بر اساس دستوراتی که در بردار می باشد .
3. کارایی : شبکه ، کاربر را برای هر دستور جدید شناسایی میکند ،یعنی اینکه اگر کاربری دستور جدیدی که در بردار مربوط به وی وجود ندارد را اجرا کند سیستم قادر به شناسایی آن کاربر خواهد بود .

 <br></br> 


## **الگوریتم ژنتیک**
در این الگوریتم 2 فاز کلی وجود دارد. در فاز اول ما آموزش هایی را به سیستم می دهیم و اطلاعاتی را در آن قرار می دهیم تا بتواند با الگو قرار دادن این آموزش ها و داده ها تشخیص نفوذ را انجام دهد. در فاز دوم به کمک این اطلاعات تشخیص نفوذ انجام می شود. در سیستم های تشخیص نفوذی که از الگوریتم ژنتیک برای آموزش استفاده می نمایند، یک سری قوانین اولیه دسته بندی شده در پایگاه داده قرار می دهیم و با بکارگیری الگوریتم ژنتیک <sup class="footnote-ref" id="fnref-15"><a href="#fn-15" rel="footnote">15</a></sup> قوانین جدیدی تولید شده و به قواعد قبل اضافه می شوند[7]. در شکل زیر ساختار یک الگوریتم ژنتیک ساده نشان داده شده است.
![توضیح تصویر](https://boute.s3.amazonaws.com/168-genetic.jpg)
الگوریتم های ژنتیک، از تکامل ژنتیکی به عنوان یک الگوی حل مسئله استفاده می کند. راه حل ها طبق یک الگو کد گذاری می شوند که تابع هر راه حل کاندید را ارزیابی می کند که اکثر آن نام دارد و برازندگی می شوند[7].
تکامل از یک مجموعه کاملا تصادفی از جامعه اولیه شروع می شود و در نسل های بعدی تکرار می شود. این فرآیند تکرار می شود تا این که به آخرین مرحله برسیم. شرایط خاتمه الگوریتم ژنتیک می تواند به صورت زیر باشد [7]:

+ به تعداد ثابتی از نسل ها برسیم.
+ بودجه اختصاص داده شده تمام شود 􀀁
+ بیشترین درجه برازش فرزندان حاصل شود یا دیگر نتایج
+ بهتری حاصل نشود
+ بازرسی دستی 􀀁
+ ترکیب های موارد ذکر شده در بالا.
<br></br>
   
   
## **ماشین های بردار پشتیبان**
ماشین های بردار پشتیبان خصیصه های ورودی با مقادیر حقیقی را با نگاشت غیرخطی به فضایی با ابعاد بالاتر می برد و با قرار دادن یک مرز خطی، داده ها را جدا می کند. پیدا کردن یک مرز تفکیک برای جدا سازی داده ها به مسئله بهینه سازی درجه دوم تبدیل می شود و از مرز خطی برای تقسیم بندی استفاده می شود. اما همه مسائل به از ویژگی به نام توابع پایه SVM صورت خطی قابل تفکیک نیستند و برای حل این مشکل استفاده می کند. این توابع الگوریتم های خطی را به غیرخطی تبدیل می کند و با بردن داده ها به فضایی با ابعاد بالاتر، تفکیک خطی را در آن فضا ممکن می سازند [7].
**این الگوریتم شامل مراحلی با عملیات های ریاضی است  لذا با توضیحات ارائه شده شاید کمی گنگ به نظر بیاید. اما نگران نباشید در بخش آزمایش ها به جزئیات پیاده سازی و انجام مرحله به مرحله آن خواهیم پرداخت و عملیات آن را به صورت کامل و با مثال توضیح خواهیم داد.**


<br></br> 



## **درخت تصمیم**

"درخت تصمیم <sup class="footnote-ref" id="fnref-16"><a href="#fn-16" rel="footnote">16</a></sup> یکی از روش های دسته بندی در حوزه داده کاوی است. در این بخش الگوریتمی ارائه می شود که با ساختن یک درخت تصمیم روی مجموعه ای از الگوها یا امضاهای شناخته شده از حملات، تعداد مقایسه های لازم برای شناسایی یک فعالیت مخرب را به نحو چشمگیری کاهش دهد [7] اگر ما یک الگوی نفوذ را در پایگاه داده های خود ذخیره کرده باشیم ، مجموعه خصوصیات این الگو می تواند معیاری برای بررسی سایر فعالیت ها باشد. حالا اگر داده های ورودی را بررسی کنیم و آن را با قانون های موجود و خصوصیات که در پایگاه داده موجود است مقایسه کنیم و این داده های ورودی با تمام آن خصوصیات مطابقت داشته باشند داده ورودی با الگوی متناظر با قانون منطبق است. مجموعه این خصوصیات گره ریشه درخت را تشکیل می دهند. حال اگر یک ویژگی را انتخاب کرده و مقدار آن را در قانونی تعیین کنیم می توان زیر مجموعه های مختلفی از قوانین تشکیل داد که گره های دیگر درخت را تشکیل می دهند.
  مسئله اصلی در ساخت درخت تصمیم، انتخاب ویژگی یا صفتی است که به نحو مناسب داده ها را در کلاسهای مربوطه دسته بندی نماید. هر درخت تصمیم شامل نود، یال و برگ است. نودهای درخت معادل صفاتی است عملیات دسته بندی داده را بر اساس مقادیر آن صفات انجام می دهیم. یال ها با مقادیری که هر صفت برای یک زیرمجموعه خاص از داده ها دارد برچسب می خورد و برگ ها معادل.کلاسی است که بخشی از داده ها در آن قرار می گیرند [7] .
درختهای تصمیم روشی برای نمایش یک سری از قوانین هستند که منتهی به یک رده یا مقدار میشوند.درختهای تصمیمی که برای پیش بینی متغیرهای دسته ای استفاده میشوند، درختهای classification نامیده میشوند زیرا نمونه ها را در دسته ها یا رده ها قرار میدهند. درختهای تصمیمی که برای پیش بینی متغیرهای یپیوسته استفاده میشوند درختهای regression نامیده میشوند[8] .

از دیگر مزایای درخت تصمیم عبارتند از [9] :

·          درخت تصمیم از نواحی تصمیم گیری ساده استفاده میکند.

·         مقایسه های غیر ضروری در این ساختار حذف میشوند.
 
·          آمادهسازی دادهها برای یک درخت تصمیم ساده یا غیر ضروری است.

·          درختهای تصمیم قادر به شناسایی تفاوتهای زیرگروه ها میباشد.

 

<br></br> 
<br></br> 


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

**نکته ی دیگر این که تقریبا سعی شد تمام رابطه و فرمول هایی که در مقاله ها گفته شده در این متن آورده شود اما تعداد بسیار کمی آورده نشده که به 2 دلیل بوده است. اول این که احساس می شد این روابط ربطی به موضوعات الگوریتمی و موضوع کلی بحث ندارد و صرفا محاسباتی برای پیدا کردن مقدار برخی متغیرهاست و دوم این که خود بنده (نویسنده) با وجود تلاش زیاد نتوانستم آن را به طور کامل درک کنم و طبیعتا از استفاده ی این فرمول ها که تعدادشان بسیار کم (در حد 3 یا 4) بود در متن این پروژه خودداری کردم.**


# **درخت تصمیم**:

درخت تصمیم به عنوان یک "مدل پیش بینی کننده بر اساس یادگیری ماشین و آمارها به منظور ایجاد یک ساختار درختی برای مدل کردن الگوهای داده ای" معرفی می شود. در واقع درخت های تصمیم مثال بارزی از الگوریتم کلاس بندی داده ها هستند. کلاس بندی روشی است که در آن هر کدام از داده ها به یکی از الگوهای تعیین شده نسبت داده می شوند[10].
مثلا درخت تصمیم در حوزه ی تشخیص نفوذ می تواند داده های شبکه را به کلاس های مخرب ، و یا هر مدل دلخواه دیگری    تقسیم بندی کند.
در واقع الگوریتم کلاس بندی مقدمه ای برای ساخت درخت است، به این ترتیب که با پیدا کردن الگوهای خاص در مجموعه ی داده ها درخت ها را ایجاد می کند. در شکل زیر مثالی از کلاس بندی و ایجاد یک خروجی به صورت درخت مشاهده می شود.

![توضیح تصویر](https://boute.s3.amazonaws.com/168-2.png)

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

به طور کلی ساختن یک درخت کاملا بهینه نشدنی است چرا که با افزایش خصوصیاتی در داده ها که برای ما مهم باشند تعداد حالات تولید درخت ها به صورت نمایی افزایش پیدا می کند. به همین خاطر انواع مختلفی از درخت ها وجود دارد که در جدول زیر 3 کلاس بندی کننده مختلف از درخت های تصمیم را با خصوصیات آن ها مشاهده می کنید [10]:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-21.png)

نکته ای که در مورد مقایسه ی این درخت ها وجود دارد این است که نمی توان به طور مطلق یکی را برتر از دیگران دانست. در واقع در شرایط مختلف و در مورد مجموعه ی داده های مختلف درخت های متفاوتی می توانند بهترین نتایج را ارائه دهند.
کلاس بندی های که درخت های تصمیم انجام می دهند می توانند یک گروه را برای این که کدام الگوها را نگه داری کنند ، کدام روش های دیوار آتش را پیاده سازی کنند و یا کدام فعالیت ها را در شبکه برای آنالیز کردن نشانه گذاری کنند کمک می کنند اما مانند دیوار آتش یا سیستم های جلوگیری از نفوذ (IPS) نمی توانند به تنهایی نمی توانند عملیاتی برای مقابله با نفوذ انجام دهند.
<br></br> 
حالا می خواهیم اجزای درخت های تصمیم را با جزئیات بیشتری بررسی کنیم :

یک درخت تصمیم از 3 بخش اصلی تشکیل شده است [11]:

1- گره تصمیم 1 که نمایانگر یک صفت یا خصوصیت قابل تست است.

2- یال که بیانگر مقدار یک صفت یا به طور واضح تر خروجی تست آن صفت است.

3- برگ که همان گره پاسخ نامیده شده و بیانگر کلاسی است که شیء به آن تعلق دارد.

الگوریتم های مختلفی برای تولید درخت تصمیم معرفی شدند که در جدول بالا 3 نمونه به طور اختصاری بررسی شدند. اما برای انتخاب روش مناسب برای ساخت یک درخت تصمیم پارامترهای مختلفی وجود دارد [11]:
<br></br> 
**1- معیار انتخاب صفت مناسب :**
همان طور که گفته شد گره تصمیم بیانگر یک صفت است. این که کدام صفت را برای قرار گرفتن در گره ریشه ی درخت یا زیر درخت قرار دهیم نیاز به تعیین یک معیار مناسب برای مشخص شدن توان هر گره برای انتخاب شدن دارد.
معیارهای مختلفی برای این کار وجود دارد که ما به توضیح آن چه برای درخت C4.5 تعیین شده است می پردازیم. این معیار gain ratio نام دارد. ورودی های این تابع یک صفت به نام A  و یک مجموعه از اشیاء با نام T است.  این تابع به این صورت تعریف می شود :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-9.png)

که در آن Ci تعداد اشیاء موجود در T است که به Ci تعلق دارد. و  ![توضیح تصویر](https://boute.s3.amazonaws.com/168-13.png)     زیر مجموعه ای از اشیاء است که در آن مشخصه ی Ak دارای مقدار ak است. و سپس مقدار مشخصات مشخصه ی Ak از رابطه ی زیر به دست می آید :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-10.png)

و در نهایت Gain Ratio با این رابطه و با درجه بندی شدن توسط رابطه ی بالا این گونه نوشته می شود :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-11.png)

همین مورد در درخت ID3 این گونه بیان می شود :
اغلب الگوریتم های یادگیری درخت تصمیم بر پایه یک عمل جستجوی حریصانه بالا به پائین در فضای درختهای موجود عمل میکنند. در درخت تصمیم (ID3) از یک مقدار آماری به نام بهره اطلاعات Information Gain استفاده می شود تا اینکه مشخص کنیم که یک ویژگی تا چه مقدار قادر است مثالهای آموزشی را بر حسب دسته بندی آنها جدا کند [9]. آنتروپی: [9] میزان خلوص (بی نظمی یا عدم خالص بودن)  مجموعه ای از مثالها را مشخص می کند. اگر مجموعه S شامل مثالهای مثبت و منفی از یک مفهوم هدف باشد آنتروپی S نسبت به این دسته بندی بولی بصورت زیر تعریف می شود : ![توضیح تصویر](https://boute.s3.amazonaws.com/168-daum_equation_1428910115242.png)  بهره اطلاعات [9] (Information Gain)  بهره اطلاعات یک ویژگی عبارت است از مقدار کاهش آنتروپی که بواسطه جداسازی مثالها از طریق این ویژگی حاصل میشود. بعبارت دیگر بهره اطلاعات (Gain(S,A برای یک ویژگی نظیر A نسبت به مجموعه مثالهای S بصورت زیر تعریف میشود: ![توضیح تصویر](https://boute.s3.amazonaws.com/168-daum_equation_1428910608348.png)  که در آن (Values A) مجموعه همه مقدار ویژگی های A بوده و VS زیرمجموعه ای از S است که برای آن A دارای مقدار V است. در تعریف فوق عبارت اول مقدار آنتروپی داده ها و عبارت دوم مقدار آنتروپی مورد انتظار بعد از جداسازی داده هاست
<br></br> 
**2- استراتژی تقسیم بندی :** 
روشی که در آن اعضای مجموعه ای که در مورد 1 ذکر شد را به کلاس صفت مناسب نسبت دهد.
<br></br> 
**3- محدوده ی توقف :**
این مورد تعیین کننده ی شرایطی است که با به وجود آمدن آن ادامه ی گسترش یک زیر درخت (و یا کل درخت) متوقف شود و در واقع زمان توقف ادامه ی تقسیم بندی مجموعه را بیان می کند. در واقع عملیات مقدار دهی به گره ها و یال ها در یک زیر درخت آنقدر ادامه پیدا می کنید تا همه ی داده ها در آن زیر درخت به یک کلاس تعلق پیدا کنند.

برای اضافه کردن اطلاعات به درخت تصمیم هر داده از ریشه شروع کرده و به گره ها می رود. در هر گره بررسی می شود که این داده به کدام کلاس مربوط است. این عمل آنقدر تکرار می شود تا به یک گره برگ برسیم. در آنجا برگی که این داده به آن تعلق پیدا کند محلی است که باید به آن جا اضافه شود.
<br></br> <br></br> 
ارتباط درخت تصمیم با سیستم های تشخیص نفوذ :
به طور خلاصه اگر بخواهیم فواید درخت تصمیم را برای سیستم های تشخیص نفوذ توضیح دهیم می توانیم فرآیندهای زیر را که به این سیستم ها کمک می کنند نام ببریم [10]:

-          استفاده به همراه روش ظرف عسل (Honey pot) که در آن یادگیری روش و تکنیک های نفوذ گران انجام شده و در شناسایی فعالیت های مخرب در شبکه کمک می کند.

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

-          کمک در تست های نفوذ با یاد گرفتن روش ها از تست کننده ها و پیدا کردن روش هایی برای شناخت روش های تست تست کننده ها.

-          شناخت و برجسته کردن ترافیک مخرب و مشکوک در شبکه

-          اولویت بندی کردن هشدارها با مشخص کردن هشدارهای با ارزش و اولویت کمتر.

-          نشانه گذاری روش های نفوذی که مکررا از آن ها استفاده می شود

-          شناسایی رفتارهای غیر عادی در شبکه که در فاز 1 در مورد آن ها توضیحات و مثال هایی ارائه شد

-          پشتیبانی و کمک به افزایش اطلاعات سیستم تشخیص نفوذ با پیدا کردن روش های تشخیص فعالیت های مخرب 

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

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

یکی دیگر از بزرگترین قابلیت های درخت تصمیم این است که تشخیص می دهد که روش های برخی از حملات زیرمجموعه ای از روش های دیگری است که در آموزش های قبلی فراگرفته است و این در تشخیص روش بسیاری از نفوذها مناسب است[12].
<br></br> <br></br> 
**پیاده سازی درخت تصمیم برای تشخیص نفوذ :**

نخستین کاری که باید انجام شود این است که داده ها و ابزارهای موجود که دریافت می کنیم باید پیش پردازش شوند. این پیش پردازش باید داده ها را به فرمی در آورد که درخت تصمیم بتواند از آن ها استفاده کند. در واقع داده های خام و پردازش نشده نمی تواند به عنوان ورودی درخت تصمیم مورد استفاده قرار گیرد!
نتیجه پردازش داده ها برای مرحله بعد که تعیین مجموعه قوانین است بسیار مهم است. در مرحله ی بعد آنالیز روی این داده ها انجام شده و از نتیجه ای آن برای تعیین قوانین تصمیم گیری استفاده می شود. شکل زیر مراحل کار درخت تصمیم را نشان می دهد [10]:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-1.png)
<br></br> <br></br> 

**گرد آوری داده ها :**

گرد آوری داده ها یکی از زمان بر ترین و مهم ترین کارها برای استفاده از یک روش مانند درخت تصمیم است. روشی که برای گردآوری داده ها انتخاب می شود باید به عملیاتی که تیم تشخیص نفوذ از درخت تصمیم انتظار دارند مربوط باشد. به عنوان مثال اگر درخت تصمیمی قرار است داده های مخرب را از بی خطر تشخیص دهد باید دو مجموعه داده که یکی شامل داده های نمونه ی مخرب و دیگری شامل داده های نمونه ی بی خطر است در اختیار داشته باشد. پیدا کردن و تقسیم بندی چنین داده هایی می تواند بزرگترین دغدغه برای پیاده سازی این تکنیک باشد.
برای جمع آوری داده ها نیز می توان از روش های زیر استفاده کرد [10]:

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

-          فایل هایی که در آن ها اطلاعات و داده های نفوذ های قبلی ذخیره شده اند نیز منابع بسیار مناسبی هستند.

-          اطلاعاتی که از تست های نفوذ به دست می آید قابل استفاده است. در واقع روش هایی که تست کننده ها برای نفوذ به سیستم استفاده می کنند تا بتوانند قابلیت آن را آزمایش کنند نیز همراه با داده هایی است که می توانیم در سیستم خود از آن ها استفاده کنیم.

-          و در نهایت داده های موجود در سایت ها مانند [www.openpacket.org](http://www.openpacket.org) که می توانند داده های مخرب که قبلا آزمایش شده اند را در اختیار شخص قرار دهند.

اکنون به بررسی نتایج آزمایش روی یکی از انواع درخت که j48 است می پردازیم [8] .
برای این آزمایش از نرم افزار weka استفاده شده است که از 3 روش اصلی برای انتخاب ویژگی ها استفاده می کند :

**الف - روش (Correlation-based Feature Selection (CFS :**
نوعی روش کاهش ویژگیهاست که براساس همبستگی ها پایه گذاری شده است.این الگوریتم نمره بالایی به ویژگیهایی می دهد که دارای وابستگی شدیدتر به کلاس و وابستگی ضعیفی با یکدیگر دارند.

**ب-  (Information Gain) :** 
در مورد این روش در همین بخش و در قسمت درخت ID3 توضیحات لازم داده شده است.

**ج – (Gain Ratio) :**
خاصیت آن حساسیت داشتن به این است که یک ویژگی با چه گستردگی و یکنواختی داده ها را جدا میکند.برای اینکار عبارتی
به صورت  زیر تعریف میشود:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-3.png)

حال با استفاده از این فرمول بهره به صورت زیر تعریف می شود :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-4.png)

برای این آزمایش نیز از مجموعه داده KDDCup99 استفاده شده که 10 درصد آن شامل 494021 رکورد است (در مورد این مجموعه داده در آزمایش های بعدی توضیحات بیشتری ارائه شده است.
در این جا به جای 5 کلاس معمول موجود در مجموعه داده ها از 11 زیر کلاس مربوط به این 5 کلاس نام برده شده است. که در جدول های بعدی آن ها را مشاهده خواهید کرد.

برای نرمال سازی داده ها که عبارت است از بردن مقادیر ویژگی ها به محدوده [0,1] و همه داده های غیر عددی به عددی تبدیل می شوند از رابطه ی زیر استفاده شده که در آن Fi مقدار ویژگی که قرار است نرمال شود ، (min(F و (max(F بزرگترین و کوچکترین مقادیر ویژگی و FNi ویژگی نرمال شده می باشد :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-12.png)

برای ارزیابی دسته ها از معیارهای استاندارد زیر استفاده شده است :

تی پی <sup class="footnote-ref" id="fnref-17"><a href="\#fn-17" rel="footnote">17</a></sup>  : این معیار بیانگر تعداد رکوردهایی است که دسته واقعی آن ها مثبت بوده و الگوریتم دسته بندی دسته آن ها را به درستی تشخیص داده است.
اف پی <sup class="footnote-ref" id="fnref-18"><a href="\#fn-18" rel="footnote">18</a></sup> : این معیار بیانگر تعداد رکوردهایی است که دسته واقعی آن ها منفی بوده و الگوریتم دسته بندی به اشتباه دسته آن ها را مثبت تشخیص داده است.
دقت <sup class="footnote-ref" id="fnref-19"><a href="\#fn-19" rel="footnote">19</a></sup> : مبتنی بر دقت دسته بندی است و مبین آن که چه اندازه می توان به خروجی اعتماد کرد.
فراخوانی <sup class="footnote-ref" id="fnref-20"><a href="\#fn-20" rel="footnote">20</a></sup> : برابر تعداد رکوردهای با برچسب مورد نظر است.

در جدول زیر ، زیر کلاس های حملات را که 11 زیر کلاس مشتق شده از 5 کلاس اصلی است مشاهده می کنید :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-22.png)

و اما دراین جدول مقدار به دست آمده برای هر یک از معیارهای CfS,Gr,IG را مشاهده می کنید :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-23.png)

مقایسه ی کلاس بندی های درست و غلط درخت تصمیم بر اساس 3 معیار CFS,GR,IG :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-24.png)

و در نهایت مقایسه TP ها در زیر حملات بر اساس 3 معیار CFS,GR,IG 

![توضیح تصویر](https://boute.s3.amazonaws.com/168-25.png)

اما برای نتیجه گیری همان طور که مشاهده می شود ، دقت به دست آمده از الگوریتم CFS از دو الگوریتم دیگر بیشتر است و این الگوریتم باعث بهبود بیشتری در الگوریتم درخت J48 نسبت به دو الگوریتم دیگر می شود.




<br></br> <br></br> <br></br> <br></br> 



# **ماشین بردار پشتیبان :**

ماشین بردار پشتیبان یک متد برمبنای یادگیری ماشین است که اساس آن یادگیری با کمک اطلاعات است که داده ها را با کمک بردارهای پشتیبان که الگوهای داده ای را بیان می کنند کلاس بندی می کند[13].
برای دسته بندی کردن داده ها به 2 دسته باید تابع  (f(X ای پیدا کنیم به طوری که Yi= f(Xi) که برای N داده به صورت (X1 , Y1) .... (Xi,yi) ........ (Xn,Yn) تابع f را بتوان به این صورت تعریف کرد :  

![توضیح تصویر](https://boute.s3.amazonaws.com/168-5.png)

که در آن l تعداد رکوردهایی هستند که برای آموزش استفاده می شوند. {Yi ϵ {-1,1 و ai عددی مثبت و کوچکتر از عدد ثابت C است و Xi نیز بردار پشتیبان است.اما اگر تابعی که برای دسته بندی استفاده می شود خطی نشود ، باید داده ها را به ابعادی بالاتر ببریم تا تابع جدا کننده ی آن ها تابعی خطی بشود. برای این کار تبدیل به صورت زیر در می آید :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-6.png)

که در آن (k(Xi,X تابع هسته نامیده می شود که همان تابعی است که برای بردن داده ها به بعد بالاتر از آن استفاده می شود.

<br></br> 

مدل ارتقاء یافته ماشین بردار پشتیبان [13]:

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

![توضیح تصویر](https://boute.s3.amazonaws.com/168-7.png)

حالا نتیجه ی آزمایش انجام شده روی ماشین بردار پشتیبان معمولی و ارتقاء یافته را نشان می دهیم [13] :

در این آزمایش نیز مثل آزمایش های قبل و بعد از مجموعه داده های KDD استفاده شده است. که به علت وجود توضیحات در سایر آزمایش ها از توضیح آن خودداری می کنیم. در این آزمایش از 10 درصد این داده ها استفاده شده که 1.5 درصد آن ها مربوط به نفوذ ها و بقیه مربوط به داده های معمولی و غیر نفوذ است. برای این آزمایش یک مجموعه داده آموزشی به همراه 3 مجموعه برای تست که همگی زیر مجموعه ی مجموعه داده های اصلی هستند در نظر گرفته شده است.
مفاهیمی که در جدول از آن ها استفاده شده در آزمایش قبلی (درخت تصمیم) شرح داده شده است. نتایج به صورت زیر است :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-26.png)

همان طور که در نتایج مشاهده می شود استفاده از ماشین بردار پشتیبان ارتقا یافته بیشتر از 80 درصد زمان بررسی داده ها را کاهش داده است! علاوه بر آن دقت تشخیص را نیز تا مقدار قابل توجهی بالا برده است. که از نظر تئوری هم همان طور که بیان شد این نتیجه کاملا قابل پیش بینی بود. چرا که در نظر گرفتن اهمیت و وزن خصوصیات داده ها یک مزیت بسیار اثرگذار است که در مقابل رفتار یکسان با همه خصوصیت ها قرار می گیرد.


<br></br> <br></br> 



مقایسه ی نتایج حاصل از دو روش درخت تصمیم و ماشین بردار پشتیبان بر روی داده های یکسان :

در این آزمایش از مجموعه داده های KDD99 استفاده شده است که داده های خام و مخرب TCP در طول 9 هفته می باشد. مجموعه ی داده ها به 24 نوع حمله (نفوذ) تقسیم بندی می شوند که این حمله ها نیز خود به 4 دسته اصلی تقسیم می شوند [12].

**1- حملات Dos :** در این حمله ها با ایجاد درخواست بیش از و به کارگرفته شدن بیش از حد منابع حافظه ای باعث اختلال در سیستم می شوند.

**2-حملات Remote to User:** در این نوع حملات نفوذگر در ماشین هدف اکانتی ندارد ، بنابراین با فرستادن پکت هایی در شبکه و با استفاده از آسیب پذیری ها به عنوان کاربر آن سیستم وارد می شود!

**3-حملات User to Root :** در این نوع حمله نفوذگر به یک اکانت معمولی دسترسی پیدا می کند و سپس با استفاده از نقاط آسیب پذیر به عنوان ریشه یا همان root دسترسی پیدا کرده و سیستم را در دست می گیرد.

**4-حملات  Probing:** در این نوع نفوذ ، نفوذگر با بررسی مداوم شبکه به نقاط آسیب پذیر یک سیستم پی می برد و با استفاده از آن ها به سیستم آسیب می زند.

یکی از نکات مهم انتخاب خصوصیت هایی است که می خواهیم آن ها را مورد بررسی قرار دهیم. این خصوصیات انواع مختلفی دارند. مثلا خصوصیت هایی که ارتباط هایی را بررسی می کنند که در 2 ثانیه گذشته دارای مقصد مشترکی بوده اند. یا ارتباط هایی که در 2 ثانیه گذشته سرویس مشترکی را داشته اند. بعضی دیگر نیز به دنبال خصوصیات رفتاری خاصی می گردند. مانند تعداد تلاش ناموفق برای ورود سیستم در یک زمان محدود.

اما برای تست یک روش تشخیص نفوذ مجموعه ی داده ای 2 قسمت می شود. تعدادی از آن ها که به صورت اتفاقی نیز انتخاب می شوند برای آموزش آن سیستم استفاده شده و بقیه برای تست استفاده می شوند. مثلا در آزمایش فعلی از حدود 11982 رکورد 5092 رکورد برای آموزش و 6890 رکورد برای تست استفاده می شوند.

هدف اصلی از این سیستم تشخیص نفوذ این است که تمامی این داده ها به 4 کلاس حمله که در بالا در مورد 4 نوع آن توضیح داده شد و یک کلاس معمولی که همان موارد بی خطر یا معمولی است تقسیم بندی شوند. در واقع ما 5 کلاس داریم که داده ها باید در یکی از این کلاس ها قرار گیرند.

روند کلی کار شامل 2 مرحله است که در ابتدا داده هایی برای آموزش سیستم به صورت تصادفی انتخاب می شوند که تعداد آن ها را در بالا ذکر کردیم. پس از این که سیستم آموزش لازم را دید باید به وسیله ی سایر داده ها آزموده شده و دقت آن در کلاس بندی داده های باقیمانده مورد ارزیابی قرار گیرد.
<br></br> 
نتایج مربوط به درخت تصمیم :

به صورت کلی هر کلاس بندی کننده (در این جا درخت تصمیم یا ماشین بردار پشتیبان) با داده های آموزشی ایجاد خواهد شد و هر داده به ترتیب با هر کدام از کلاس ها بررسی خواهد شد. هر کلاسی داده را به یکی از دسته های عادی یا حمله می دهد. طبیعی است که اگر کلاسی یک داده را در حالت معمولی قرار داد یعنی این که آن داده حداقل حمله ای از نوع آن کلاس نیست!
نتایج به دست آمده برای درخت تصمیم به این صورت است [12]:
![توضیح تصویر](https://boute.s3.amazonaws.com/168-27.png)
<br></br> 
نتایج مربوط به ماشین بردار پشتیبان [12]
برای ماشین بردار پشتیبان هم موارد ذکر شده در بخش بالا (درخت تصمیم) برقرار است. نتایج به دست آمده به این صورت است :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-28.png)

در این ماشین بردار پشتیبان از تابع هسته ی درجه ای استفاده شده است (که در قسمت ماشین بردار پشتیبان توضیح آن ارائه شد) که چون در هر مورد می توان درجه های مختلف را بررسی کرده و نتایج مختلف گرفت نتایج به دست آمده از درجه های مختلف را این گونه نشان می دهیم [12]:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-29.png)
<br></br> 
مقایسه بین نتایج درخت تصمیم و ماشین بردار پشتیبان :

درخت تصمیم در 3 مورد Probe , R2L , U2R دارای دقت بهتری بود در حالی که در مورد حملات DOS ماشین بردار پشتیبان دقت بهتری داشت. در مورد داده های Normal دقت مشابه بود. نکته مهمی که از نتایج به دست می آید این است که فاصله ی دقت این دو روش در 2 کلاس U2R , R2L زیاد است و درخت تصمیم با فاصله ی زیادی عملکرد بهتری دارد. همان طور که می دانیم این دو روش ذکر شده دارای آموزش کمتری نسبت به سایرین هستند بنابراین می توان نتیجه گرفت که درخت تصمیم با مجموعه داده های آموزشی کوچکتر نتایج خیلی بهتری ارائه می دهد.نمودار زیر هم کارایی درخت تصمیم و ماشین بردار پشتیبان را در مورد کلاس R2L نشان می دهد که واضح است که کارایی درخت تصمیم تا چه حد بهتر از ماشین بردار پشتیبان بوده است. در این نمودار از 30 نقطه داده ای برای نشان دادن کارایی ها استفاده شده است.

![توضیح تصویر](https://boute.s3.amazonaws.com/168-Untitled.png)



<br></br> <br></br> <br></br> <br></br> 

# **بهبود تشخیص نفوذ با استفاده از داده کاوی :**

در این جا ما به دنبال یافتن مهمترین ویژگیها و نحوه ارتباط بین آنها می باشیم درنتیجه برای تحلیل ارتباط ویژگیها میتوان از روشهای ارائه شده در تحلیل شبکه های اجتماعی بهره برد. برای این کار ابتدا لازم است مدل گراف ارتباط ویژگیها به دست آید.
مشکلی که در مدل دادهای سیستمهای تشخیص نفوذ وجود دارد این است که در این سیستمها، اطلاعاتی بین ویژگیها مبادله نمیشود درنتیجه لازم است مدل داده ای به نحوی به مدل گراف تبدیل شود، که نحوه انجام این تبدیل در بخش حاضر بیان میشود.[14]
<br></br> 
برای ایجاد مدل گراف ویژگی ها، ماتریس دقت معرفی می شود .ستونهای ماتریس دقت، نشاندهنده ویژگی ها و ردیفهای آن بیانگر انواع کلاسهای حملات در روشهای مختلف کلاس بندی می باشد،این ماتریس شاملf ستون و n*m   ردیف می باشد. به نحوی که تعداد f تعداد ویژگی های موجود در مجموعه داده و n تعداد روش های کلاس بندی و m تعداد انواع حملات می باشد. خانه (i,j) مقدار دقت کلاس i در عدم حضور ویژگی j  می باشد. علاوه بر میزان دقت، متغیر دیگری تحت عنوان زیر آستانه نیز در خانه های ماتریس قرار می گیرد. این متغیر دو مقدار صفر و یا یک را به خود می گیرد. درصورتی که حذف یک ویژگی از مجموعه ویژگی ها دقت کلاس را از حد آستانه تعیین  شده، پایین تر ببرد مقدار این متغیر به یک تنظیم می شود .مقدار یک بیان میکند که ویژگی j انتخاب شده برای کلاس i از اهمیت بالایی برخوردار است، چرا که حذف آن، دقت کلاس را بسیار کاهش داده است[14].
![توضیح تصویر](https://boute.s3.amazonaws.com/168-Untitled2.png)


برای محاسبه ماتریس دقت، الگوریتمهای دسته بندی مختلف به ازای حذف هر ویژگی، بر روی مجموعه داده اجرا میشوند. پس از اجرای هر روش دسته بندی، دقت دسته بندی مربوط به هرنوع حمله با استفاده از ماتریس اغتشاش که دقت هر دسته را نمایش می دهد در ماتریس دقت ثبت می شود .چنانچه میزان دقت هردسته کمتر از حد آستانه باشد، نشان دهنده اهمیت حضور ویژگی حذف شده می باشد .
حالا مدل گراف را با استفاده از این فرمول به دست می آوریم [14]: 
![توضیح تصویر](https://boute.s3.amazonaws.com/168-8.png)

این فرمول ، با استفاده از احتمال شرطی، وزن و جهت یال از ویژگی i به ویژگی j را به دست می آورد.[14] 
مقدار C نشان دهنده کلیه کلاس هایی است که متغیر زیر آستانه متناظر با آن ها در ماتریس دقت ، به ازای ویژگی انتخاب شده دارای مقدار 1 هستند. به همین ترتیب مقدار C تعداد کلاس هایی است که به ازای ویژگی i دارای مقدار یک هستند. در نهایت با کمک فرمول بالا و طبق احتمال شرطی جهت یال بین دو ویژگی i و j به دست می آید. خروجی این مرحله ماتریس گراف می باشد که دارای f سطر و f ستون است و مقدار خانه (i,j) وزن یال جهت دار از i به j را نشان می دهد.
<br></br> 
پس از ایجاد مدل گراف می خواهیم مدل سلسله مراتبی را ایجاد کنیم. اما قبل از آن ویژگی هایی که اندازه ی یال بین آن ها یک می باشد را حذف می کنیم. چرا که عدد 1 نشان دهنده این است که این ویژگی ها از نظر اهمیت مشابه هم هستند. این کار به منظور کاهش هزینه زمانی انجام می شود و پس از ایجاد مدل سلسله مراتبی دوباره آن ها را اضافه می کنیم.
برای ایجاد مدل سلسله مراتبی از 2 قانون استفاده می کنیم [14]:

1- در گراف ویژگی ها اگر یالی از i به j وجود داشته باشد ، گره i به عنوان پدر j انتخاب می شود.

2- یک گره نمی تواند 2 پدر داشته باشد! بنابراین اگر از دو گره j,k به i یال وجود داشته باشد ، در چنین شرایطی از مرکزیت وابستگی (که دارای یک رابطه ریاضی است) استفاده می شود که در نتیجه ی آن معلوم می شود که وابستگی i به j بیشتر است یا k. مثلا اگر وابستگی به k بیشتر باشد، k به عنوان پدر i شناخته شده و یال بین i و j حذف می شود.

در مدل سلسله مراتبی ویژگی هایی که در بالاترین سطح قرار گرفته اند مهم ترین و ویژگی های پایین ترین سطح غیر مهم و یا نامربوط هستند.
برای ارزیابی روش گفته شده از مجموعه داده KDD99 که برای ارزیابی تشخیص نفوذ جمع آوری شده ، استفاده شده است که دارای 4 میلیون رکورد با 41 ویژگی است که در این جا از بین آن ها 11000 رکورد انتخاب شده است. الگوریتم پیشنهادی نیز با استفاده از نرم افزار weka که ابزاری متن باز و مناسب برای این ارزیابی ها است، استفاده شده است.

در انجام آزمایش مدل سلسله مراتبی به این صورت در آمده است :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-Untitled3.png)

که در آن گره های 2،22،23 در بالاترین سطح قرار دارند پس با اهمیت ترین ها هستند و چون گره 2 از نظر اهمیت مشابه 33،35،41 است در نهایت 6 ویژگی به عنوان مهم ترین ویژگی ها معرفی شده اند. نتایج حاصل از اجرای الگوریتم در مقایسه با سایرین به این گونه است[14] :
![توضیح تصویر](https://boute.s3.amazonaws.com/168-Untitled4.png)

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


<br></br><br></br><br></br>



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





<br></br><br></br><br></br><br></br>
# **الگوریتم ژنتیک**

الگوریتم ژنتیک یک تکنیک برنامه نویسی است که از الگوی بیولوژیک به عنوان استراتژی حل مسائل استفاده می کند. این الگوریتم از داده هایی که مانند کروموزوم ها شبیه سازی شده اند و دارای خصوصیت ها و عملیات هایی مثل انتخاب کردن ، ترکیب شدن و جهش کردن هستند استفاده می کند. شروع کار با تولید جمعیتی از کروموزوم ها به صورت تصادفی می باشد که بیانگر همه راه حل های موجود برای یک مشکل که به عنوان نماینده دسته ای از راه حل ها هستند می باشند [15].

در هر کروموزم قسمت های مختلفی با کمک بیت ها یا کاراکتر ها و یا اعداد کدگذاری می شوند که به این قسمت ها ژن گفته می شود. تابعی به نام Fitness Function وجود دارد که میزان مناسب بودن یک کروموزوم را بر اساس راه حلی که بیان گر آن است نشان می دهد. عملیات Crossover نیز برای شبیه سازی بازتولید و Mutation برای شبیه سازی جهش انجام می شوند که در زیر توضیحاتی در مورد آن ها ارائه می دهیم :

**ترکیب** <sup class="footnote-ref" id="fnref-21"><a href="\#fn-21" rel="footnote">21</a></sup>:
عمل ترکیب دو کروموزوم که همان والدین می باشند (parent) و بدست آوردن دو کروموزوم جدید که فرزندان (child) می باشد را پیوند می نامند . 
برای انجام عمل پیوند روی دو کروموزوم L ژنی ابتدا باید نقطه پیوند را مشخص کنیم این کار با فراخوانی عددی تصادفی بین 1 و L-1 صورت می پذیرد . 

round(l*RND)+1

سپس ژنهای دو کروموزوم را از نقطه پیوند با هم عوض می کنیم .مثلا برای دو کروموزوم 10 ژنی با نقطه پیوند 4 داریم :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-61.png)

اگر پیوند را از نقطه 4 آغاز کنیم داریم 

![توضیح تصویر](https://boute.s3.amazonaws.com/168-62.png)

اما به طور کلی روش های ترکیب عبارتند از :

1) تقاطع ساده یا یک نقطه ای :       
در این روش یک نقطه تقاطع انتخاب میشوند و بیتهای متناظر جابجا می شوند . که مثال آن آورده شد .

2) تقاطع n  نقطه ای : n>1
  به طور تصادفی n محل انتخاب میشود و هر والد را به n+1  قطعه تقسیم می کند تکه ای فرد از والد اول و تکه زوج از والد دوم در محلهای متناظر در فرزند قرار می گیرد. اکثر محققین مقدار زوج را برای n ترجیح می دهند . 
مثال :   n = 2  

![توضیح تصویر](https://boute.s3.amazonaws.com/168-63.png)



3) تقاطع یکنواخت :
در این روش یک رشته به طول رشته والد انتخاب می شود . (mosk) و از اعداد تصادفی پرمی گردد. 
اگر عدد از Pm کمتر باشد در (mosk) صفر قرار می گیرد و اگر بیشتر باشد یک قرار می گیرد. اگر بیت (mosk) صفر باشد رشته جدید از والد اول بیت بر میدارد . و اگر 1 باشد از والد دوم برمیدارد . این روش روی تک تک بیتها اعمال می شود . 

![توضیح تصویر](https://boute.s3.amazonaws.com/168-64.png)


4) تقاطع در هم آمیخته : 
نتیجه ای مانند تقاطع یکنواخت را می توان بوسیله در هم آمیختن ژنها در رشته های والد با استفاده از ترتیب شمارشی مشابهی و سپس انجام عمل تقاطع ساده بدست آورد فرزند با معکوس ترتیب شمارشی از درهم آمیختگی خارج می گردد . 
برای بهتر بیان کردن مثال این مثال را با حروف آلفابت به جای صفرو یک می نویسیم :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-65.png)

حال دو کروموزوم فرزند را به روش تقاطع ساده با نقطه تقاطع مثلا  5  ،  تقاطع می دهیم :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-66.png)


**جهش**  <sup class="footnote-ref" id="fnref-22"><a href="\#fn-22" rel="footnote">22</a></sup> :

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

تذکر 1 : چون عمل جهش در طبیعت به ندرت رخ می دهد لذا در الگوریتم ژنتیک هم با احتمال بسیار کم کمتر از (0.05) عمل جهش را انجام می دهیم همانطور که گفته شد مزیت عملگر جهش اینست که توان دسترسی به همه فضای جستجو را به ما می دهد . 

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

تذکر 3 :انواع دیگر جهش از نظر ژنتیک عبارتند از : 

1- موتاسیون در ژنوم که در آن تعداد کروموزوم تغییر می کند . 

2- موتاسیون در کروموزوم که در آن شکل کروموزوم تغییر می کند . 

3- موتاسیون در ژن در روی کروموزومها ژن تغییر می کند .

اما برای انتخاب کروموزوم هایی که باید در عمل پیوند شرکت کنند نیز روش هایی وجود دارد که که آن ها را نام برده و یکی از آن ها را به طور خلاصه توضیح خواهیم داد :

1- نمونه برداری جبری   <sup class="footnote-ref" id="fnref-23"><a href="\#fn-23" rel="footnote">23</a></sup>  

2- روش انتخابی متناسب  <sup class="footnote-ref" id="fnref-24"><a href="\#fn-24" rel="footnote">24</a></sup> 

3- روش انتخابی چرخ رولت  <sup class="footnote-ref" id="fnref-25"><a href="\#fn-25" rel="footnote">25</a></sup>

روش چرخ رولت :
به طور کلی در این روش درصد برازندگی به هر کروموزوم نسبت داده می شود و برای انتخاب کروموزوم در یک دایره به هر کروموزوم بر اساس درصد برازندگی آن قطاعی اختصاص داده می شود و در نهایت با انتخاب یک نقطه تصادفی در دایره یکی از کروموزوم ها انتخاب می شود. طبیعی است که شانس انتخاب شدن کروموزوم با درصد برازندگی بالاتر بیشتر است.

برای مثال در یک سیستم تشخیص نفوذ عاملی که می تواند میزان مناسب بودن یک کروموزوم برای ترکیب را تعیین کند کیفیت کلاس بندی کردن حملات توسط آن کروموزوم است [16].
شکل کلی الگوریتم ژنتیک به این صورت است :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-71.png)


اما در آزمایش انجام شده به وسیله الگوریتم ژنتیک مثل آزمایش هایی که در فاز 2 بیان کردیم از مجموعه داده KDD99 استفاده شده است. برای آموزش از 494021 رکورد داده استفاده شده که از این تعداد 97280 رکورد داده معمولی و غیر نفوذی هستند. و تعداد رکورد داده برای تست هم 311029 عدد بوده که 60593 عدد آن داده معمولی هستند. در این آزمایش داده ها به 5 دسته شامل 4 نوع حمله و 1 نوع غیر حمله (معمولی) دسته بندی شده اند که توضیحات لازم در مورد حملات در فاز قبل و الگوریتم های قبل به طور کامل بیان شده است.

جدول زیر تعداد رکورد مربوط به هر کدام از کلاس ها را نشان می دهد  [15]:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-67.png)

نتایج به دست آمده از استفاده ی الگوریتم ژنتیک برای تشخیص نفوذ به این صورت است :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-68.png)

که اگر نتایج به دست آمده را بر حسب پارامترهای استاندارد و دو دسته معمولی و نفوذی بیان کنیم به این صورت در خواهد آمد :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-69.png)


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




<br></br><br></br><br></br>
# **روش بیزین :**<sup class="footnote-ref" id="fnref-26"><a href="\#fn-26" rel="footnote">26</a></sup>  

اگر فرض کنیم A1 تا An ویژگی هایی با مقادیر گسسته باشند این مقادیر برای پیش بینی کلاس گسسته C به کار می روند. هدف ما پیش بینی و انتخاب دسته ای است که رابطه ی زیر ماکزیمم شود [17] .

P(C | A1 U A2 U A3 … U An)

با استفاده از قانون بیزین داریم :

P(A1 U A2 … U An | C) * P(C) / P(A1 U A2 … U An | C)

که طبیعتا مخرج کسر بی تاثیر است چون برای تمامی مقادیر C دارای مقداری ثابت است.

از طرفی با فرض استقلال ویژگی ها داریم :

P(A1 U A2 … U An | C) = P(A1 | C) * P(A2 | C) … * P(An | C)

در کل اگر هدف ما طبقه بندی باشد و C را به عنوان صفت شاخص در نظر بگیریم هدف ماکزیمم کردن P(X | Ci) * P(Ci) است که در آن x صفات دیگر هستند.
شبکه های بیزی وابستگی های بین متغیرها را شرح می دهد. با استفاده از این شبکه ها دانش قبلی در زمینه وابستگی بین متغیرها با داده های آموزش مدل طبقه بندی ترکیب می شوند.

**نیو بیز :**

این مدل بر اساس مدل احتمال بیزین ایجاد شده است. در این روش وقوع یک نتیجه نهایی وابسته به وقوع برخی متغیرها است که رخ دادن آن ها باعث وقوع نتیجه نهایی می شود. نکته مهم اینجاست که وقوع هر کدام از این متغیرها از متغیرهای دیگری که آن ها نیز در رخ دادن نتیجه نهایی موثرند مستقل است و در واقع هیچ کدام تاثیری بر روی دیگری ندارد و این یکی از فرض های این روش است که بر اساس آن عمل می کند[18] .
شکل زیر روش کار مدل نیو بیزین را برای تشخیص نفوذ نشان می دهد[18] .

![توضیح تصویر](https://boute.s3.amazonaws.com/168-42.png)

در فاز آموزشی این الگوریتم با داشتن احتمال رخ دادن متغیرها احتمال وقوع متغیر نهایی را محاسبه و ذخیره می کند. این عملیات برای هر کدام از متغیرها نسبت به متغیر نهایی انجام می شود.

اما در آزمایشی که در آن این الگوریتم برای تشخیص نفوذ به کار رفته نیز از مجموعه داده KDD99 استفاده شده و داده ها باز هم به 5 دسته شامل 4 نوع حمله و 1 دسته غیرحمله (معمولی) تقسیم شده است. توضیحات لازم در مورد حملات در فاز قبل و الگوریتم های قبل به طور کامل بیان شده است. ضمن این که تعداد رکورد هر نوع در مجموعه داده پایین نام آن نوع قرار داده شده است [11].

![توضیح تصویر](https://boute.s3.amazonaws.com/168-81.png)

و در صورتی که داده ها را به دو دسته معمولی و غیر معمولی (نفوذی) دسته بندی کنیم ، نتایج به صورت زیر در می آید :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-82.png)

همان طور که مشاهده می شود نتایج به دست آمده نسبت به بعضی الگوریتم ها مثل درخت تصمیم دارای دقتی کمتر (با اختلاف کم) و نسبت به الگوریتم ژنتیک (به صورت تنها) دارای نتایج بهتری است.




<br></br><br></br><br></br>
# **شبکه های عصبی**

شبکه های عصبی به عنوان یک راه حل پیشنهادی برای حل مسائلی به کار می روند که اطلاعات واضح و مورد نیاز آن برای سیستم های خبره فراهم نیست. یک شبکه عصبی یک ساختار توزیع شده موازی به فرم یک گراف هت دار است. هر گره را در این گراف یک المان پردازشگر یا یک واحد پردازشگر یا یک نورون می مانمند. این گراف از یک لایه ورودی بو یک لایه خروجی تشکیل شده است. لایه های بین ورودی و خروجی را لایه های مخی می نامند. هر اتصال گراف دارای وزن و جهت می باشد که جهت تاثیر و میزان تاثیر گره مبدا به گره مقصد را مشخص می کند. وزن های اتصالات در یک فاز آموزش یا یادگیری تعیین می شوند. تعیین وزن ها به کمک قواعد یادگیری شبکه و نمونه های ورودی – خروجی انجام می پذیرد[19] .

روند یادگیری لزوما یک روند بهینه است که در آن بهترین مجموعه از ضریب اتصالات (وزن ها) برای حل یک مسئله پیدا شده است و شامل گام های زیر می باشد [19] .

1. تعیین شبکه عصبی با تعدادی ورودی ( بردارها نشان دهنده یک الگو هستند)

2. چه قدر خروحی های واقعی تولید شده برای یک ورودی خاص با خروجی مورد نظر مطابقت دارد باید بررسی گردد.

3. تغییر پارامترهای شبکه عصبی (وزن ها) به منظور تقریب بهتری از خروجی مورد نظر.

به طور کلی 2 نوع معماری برای شبکه های عصبی بر اسان نحوه آموزش موجود است [20]:

1- الگوریتم آموزش با نظارت :
در این روش در مرحله آموزش شبکه یاد می گیرد که برای ورودی هایی که به او داده می شود چه خروجی هایی مورد نظر است. از معروف ترین شبکه های عصبی از این نوع می توان شبکه عصبی  چند لایه پرسپترون!!!!!! را نام برد. این شبکه برای مسائل تشخیص مسیر!!!!! و دسته بندی الگوهای جدا شدنی استفاده می شود. معماری این شبکه را در شکل زیر مشاهده می کنید.

![توضیح تصویر](https://boute.s3.amazonaws.com/168-44.png)

2- الگوریتم آموزش بدون نظارت : 
در این روش در مرحله آموش شبکه بدون این که تعیین شود خروجی های مورد نظر چیست آموزش داده می شود. Self Organizing Maps یکی از معروف ترین شبکه ها در این دسته است. از این شبکه برای مسائل کلاس بندی استفاده می شود.

یکی از پرکاربردترین انواع شبکه های عصبی ART می باشد که دارای هر دو نوع با نظارت و بدون نظارت است. در شبکه های ART بدون نظارت ، الگوهای ورودی ممکن است چندین بار و با ترتیب مختلف به شبکه داده شوند. در هر بار که یک الگو به عنوان ورودی به شبکه داده می شود، یک واحد کلاستر مناسب انتخاب و وزن های مربوط به آن تغییر می یابند. این شبکه ها طوری طراحی شده اند که به کاربر این امکان را می دهند که درجه شباهت الگوهایی که در یک کلاس قرار می گیرند را با تغییر بعضی پارامتر ها کنترل نماید. علاوه بر این شبکه های ART دو خصوصیت بسیار مهم دیگر نیز دارند [21] :

1. پایداری : یعنی عدم نوسان یک الگو در مراحل مختلف آموزش بین کلاسترهای ختلف

2. انعطاف پذیری : یعنی توانایی شبکه در یادگیری الگوهای جدید در هر یک از مراحل یادگیری

اکنون به بررسی یکی از آزمایش های تشخیص نفوذ که در آن از  یک مدل پیشرفته شبکه های عصبی استفاده شده می پردازیم :

در این آزمایش از شبکه های عصبی در کنار دسته بندی فازی و با عنوان FC-ANN استفاده شده و در عین حال مقایسه ای بین این مدل ساخته شده با روش های نیو بیز و درخت تصمیم انجام شده که می تواند جالب باشد .[22]

شکل زیر معماری کلی این مدل را نشان می دهد.

![توضیح تصویر](https://boute.s3.amazonaws.com/168-72.png)

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

در این آزمایش برای مقایسه از معیارهای فراخوانی!! و دقت!! استفاده شده که به کمک  متغیرهای TP ، FP، FN محاسبه می شوند [22].

متغیر (TP (True Positive : نشان دهنده تعداد حملاتی است که رخ داده اند و سیستم تشخیص نفوذ آن ها را تشخیص داده است.

متغیر (FP (False Positive : نشان دهنده مواردی است که سیستم تشخیص نفوذ اعلام کرده که رخ داده اند اما در حقیقت اتفاق نیفتاده اند. در واقع در این حالت تشخیص نفوذ به اشتباه انجام شده است.

متغیر (FN (False Negative : نشان دهنده تعداد مواردی است که حمله رخ داده و سیستم تشخیص نفوذ نتوانسته آن را تشخیص دهد. در واقع در این بخش مشکل عدم تشخیص است.

محاسبه مقدار فراخوانی و دقت به صورت زیر است :

در این آزمایش هم از همان داده های آزمایش های قبلی (KDD 99) استفاده شده و برای هر حمله تعداد رکوردهای موجود در داده های آموزشی و تست به این صورت است [22]:

![توضیح تصویر](https://boute.s3.amazonaws.com/168-83.png)

نتایج به دست آمده به این شکل است :

![توضیح تصویر](https://boute.s3.amazonaws.com/168-84.png)

![توضیح تصویر](https://boute.s3.amazonaws.com/168-85.png)


![توضیح تصویر](https://boute.s3.amazonaws.com/168-86.png)

![توضیح تصویر](https://boute.s3.amazonaws.com/168-87.png)


همان طور که مشاهده می شود نتیجه مدل پیشنهادی با اختلاف زیادی به خصوص در حملات R2L و U2R نسبت به دو مدل درخت تصمیم و نیو بیز دارای عملکرد بهتری است.




<br></br><br></br><br></br>
# **نکات پایانی**

به عنوان نکته پایانی باید گفت که هر کدام از روش های ذکر شده می توانند به مدل های زیادی و با ترکیب با الگوریتم های مختلفی پیاده سازی شوند. بنابراین مقایسه هایی که در این تحقیق انجام شد نمی تواند به طور قطعی بهتر بودن یک روش را نسبت به دیگران اعلام کند. در واقع هر کدام از این الگوریتم ها اگر با الگوریتم های دیگری مثل دسته بندی فازی و موارد دیگر ترکیب شوند می توانند بازدهی بسیار بالاتری نسبت به حالتی که به تنهایی عمل می کنند داشته باشند. بنابراین مثلا مقایسه یک الگوریتم پیشرفته شبکه های عصبی با یک الگوریتم ساده از درخت تصمیم یا ژنتیک مقایسه عادلانه ای نیست.

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






<br></br> <br></br> <br></br> <br></br> 
# مراجع
<ol>

<li dir="ltr"><p>آلاله حمیدی ، سیده مارال ضیایی، "معرفی سیستم های تشخیص نفوذ"، آزمایشگاه تخصصی آپا در حوزه امنیت سرویس های شبکه و تجهیزات بی سیم، تیر 88 <p></li> 

<li dir="ltr"><p>http://hafiz-cert.com/Services/article/view.aspx?OId=116&PageIndex=0<p></li> 

<li dir="ltr"><p> Paul Innella and Oba McMillan, “An Introduction to Intrusion Detection Systems”, ۲۰۰۱ <p></li> 

<li dir="ltr"><p> + Kabiri, Peyman, and Ali A. Ghorbani. "Research on Intrusion Detection and Response: A Survey." IJ Network Security 1.2 (2005): 84-102.<p></li> 

<li dir="ltr"><p> ابراهیم بهروزیان نژاد ، "بررسی چند نمونه از سیستم های تشخیص نفوذ مبتنی بر شبکه عصبی" ، اسفند 1392 <p></li> 

<li dir="ltr"><p>  ،Jake Ryan , Meng-Jang Lin, Risto Miikkulainen, "Intrusion Detectio with Neural Networks", Texas University, 1997  <p></li> 

<li dir="ltr"><p>وحید شهبازی ، غلامرضا لطیف شبگاهی ، "مرور و دسته بندی روش های تشخیص نفوذ در شبکه های کامپیوتری"، آذر 91 <p></li> 

<li dir="ltr"><p>زینب محزون گلهپردسری، آناهیتا محمدی گلرنگ ، علی احمدیان رمکی و رضا ابراهیمی آتانی ، "تشخیص نفوذ در شبکه با استفاده از درخت تصمیمگیری J48 مبتنی بر انتخاب ویژگیهای مؤثر"، دانشگاه گیلان <p></li> 

<li dir="ltr"><p>حسن فضلی مقصودی، حسین مومنی ، "مقایسه و بررسی الگوریتم های دادهکاوی درخت تصمیم وماشین بردار پشتیبان برای تشخیص
نفوذ" <p></li> 

<li dir="ltr"><p>Jeff Markey, "Using Decision Tree Analysis for Intrusion Detection : How-To Guide", June 5 2011<p></li> 

<li dir="ltr"><p>Nahla Ben Amor, Salem Benferhat, Zied Elouedi, "Naive Bayes vs Decision Trees
in Intrusion Detection Systems",2004 ACM Symposium on Applied Computing<p></li> 

<li dir="ltr"><p>Sandhya Peddabachigari, Ajith Abraham, Johnson Thomas, "Intrusion Detection Systems Using Decision Trees
and Support Vector Machines",Department of Computer Science, Oklahoma State University, USA<p></li> 

<li dir="ltr"><p>JingTao Yao, Songlun Zhao, and Lisa Fan, "An Enhanced Support Vector Machine Model
for Intrusion Detection", Department of Computer Science, University of Regina<p></li> 

<li dir="ltr"><p>مریم معدنیپور، حسن ابوالحسنی، حسین شیرازی ، "بهبود تشخیص نفوذ براساس کاهش ویژگی و با استفاده از
دادهکاوی" ، 24 و 25 شهریورماه 1389 ، دانشگاه صنعتی خواجه نصیرالدین طوسی<p></li> 


<li dir="ltr"><p>Mohammad Sazzadul Hoque,Md.Abdul Mukit , "An Implementation of Intrusion Detection System Using Genetic Algorithm”, March 2012 <p></li> 

<li dir="ltr"><p>Emma Ireland, “Intrusion Detection with Genetic Algorithm and Fuzzy Logic”, University of Minnesota <p></li> 

<li dir="ltr"><p> حسن فضلی مقصودی ، حسین مومنی, “مقایسه و بررسی الگوریتم های داده کاوی شبکه بیزین و بردار پشتیبان برای تشخیص نفوذ”, آذرماه 92 <p></li> 

<li dir="ltr"><p> Manas Ranjan Patra, “Network Intrusion Detection Using Naive Bayes”, Decembern2007 <p></li> 

<li dir="ltr"><p> معصومه شریف زاده, “بررسی سیستم های تشخیص نفوذ مبتنی بر شبکه های عصبی مصنوعی”, دانشگاه آزاد اسلامی واحد علوم و تحقیقات <p></li> 

<li dir="ltr"><p> Jean-Philippe planquart, “Application of Neural Networks to Intrusion Detection”, GSEC Certification <p></li> 

<li dir="ltr"><p> رسول جلیلی ، مرتضی امینی, “سیستم تشخیص تهاجم مبتنی بر شبکه عصبی ART”,دانشگاه صنعتی شریف ، دانشکده مهندسی کامپیوتر <p></li> 


<li dir="ltr"><p> Gang Wang , Jinxing Hao , Jian Ma, “A new Approach to Intrusion Detection Using Artificial Neural Networks and Fuzzy Clustering”, Department of Information System , City University of Hong Kong , 2010 <p></li> 

</ol>


<br></br> <br></br> <br></br> <br></br> <br></br> <br></br> 


----------

<ol>
<li dir="ltr" id="fn-1"><p dir="ltr">Intrusion</p></li>
<li dir="ltr" id="fn-2"><p dir="ltr">Firewall</p></li>
<li dir="ltr" id="fn-3"><p dir="ltr">Intrusion Detection System</p></li>
<li dir="ltr" id="fn-4"><p dir="ltr">Anomay Detection</p></li>
<li dir="ltr" id="fn-5"><p dir="ltr">Misuse Detection</p></li>
<li dir="ltr" id="fn-6"><p dir="ltr">Signature-Based Detection</p></li>
<li dir="ltr" id="fn-7"><p dir="ltr">Threshold Detection</p></li>
<li dir="ltr" id="fn-8"><p dir="ltr">Heuristic</p></li>
<li dir="ltr" id="fn-9"><p dir="ltr">Statistical Measures</p></li>
<li dir="ltr" id="fn-10"><p dir="ltr">Network-based Intrusion Detection System</p></li>
<li dir="ltr" id="fn-11"><p dir="ltr">Rule-based Measures</p></li>
<li dir="ltr" id="fn-12"><p dir="ltr">Host-based Detection System</p></li>
<li dir="ltr" id="fn-13"><p dir="ltr">Distributed Intrusion Detection System</p></li>
<li dir="ltr" id="fn-14"><p dir="ltr">Neural Network Intrusion Detection</p></li>
<li dir="ltr" id="fn-15"><p dir="ltr">Genetic Algorithm</p></li>
<li dir="ltr" id="fn-16"><p dir="ltr">Decision Tree</p></li>
<li dir="ltr" id="fn-17"><p dir="ltr">True Positive (TP)</p></li> 
<li dir="ltr" id="fn-18"><p dir="ltr">False Positive (FP)</p></li> 
<li dir="ltr" id="fn-19"><p dir="ltr">Precision</p></li> 
<li dir="ltr" id="fn-20"><p dir="ltr">Recall</p></li> 
<li dir="ltr" id="fn-21"><p dir="ltr">Crossover</p></li>  
<li dir="ltr" id="fn-22"><p dir="ltr">Mutation</p></li>  
<li dir="ltr" id="fn-23"><p dir="ltr"> Deterministic sampling</p></li>  
<li dir="ltr" id="fn-24"><p dir="ltr">Proportionate select scheme</p></li>  
<li dir="ltr" id="fn-25"><p dir="ltr"> Roulette wheel selection</p></li>  
<li dir="ltr" id="fn-26"><p dir="ltr"> Bayes </p></li>   

</ol>


 

# پیوندهای مفید

+ [The NSL-KDD Data Set](http://nsl.cs.unb.ca/NSL-KDD)