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

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

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

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

1)مبتنی  بر رفتار غیر عادی


 2)مبتنی بر امضا یا تطبیق الگو



روش اول مبتنی بر تعیین میانگین انواع فعالیتها بر روی شبکه است. مثالً چند بار یک دستور مشخص توسط یک کاربر در یک تماس با یک میزبان(host) اجرا میشود. لذا در صورت بروز یک نفوذ امکان تشخیص ٓان به علت مخالف معمول بودن ٓان وجود دارد. اما بسیاری از حمالت به گونهای هستند که نمیتوان به راحتی وبا کمک این روش انها را تشخیص داد. تکنیکها و معیارهایی که در تشخیص رفتار غیرعادی به کارمیروند، عبارتند از

۱)تشخیص سطح استانه

۲)معیارهای اماری

۳)معیارهای قانونگرا

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

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

انواع معماری سیستمهای تشخیص نفوذ:

 سیستم تشخیص نفوذ مبتنی بر میزبان  [^1]

 سیستم تشخیص نفوذ مبتنی بر شبکه [^2]

 سیستم تشخیص نفوذ توزیع شده [^3]

مجموعه ای از الگوریتم های(راهکارهای) معروف تشخیص نفوذ عبارت است :

۱) روش بایاس

2)درخت تصمیم



# کارهای مرتبط
تشخیص و جلوگیری از نفوذ  [^4]  یکی از مکانیزم‌های اصلی در برآوردن امنیت شبکه‌ها و سیستم‌های کامپیوتری مطرح است. سیستم‌های تشخیص نفوذ را به عنوان سیستم‌‌هایی مجزا در نظر نمی‌گیریم بلکه این سیستم‌ها به عنوان زیرسیستم‌هایی از تجهیزات شبکه، سیستم‌های عامل و حتی سرویس‌ها قابل به‌کارگرفته می‌شوند.الگوریتم هایی که در زمینه تشخیص نفوذ انجام  شده است عبارت است :
# آنالیزکمی:
در این روش قوانین و مشخصات به صورت عددی نمایش داده میشود.تکنیکهای استفاده شده در این روش به صورت یک سری محاسبات در نظر
گرفته میشود که این محاسبات از جمع دو عدد ساده میتواند باشد تا محاسبات پیچیده. نتایج این تکنیک به عنوان پایه ای برای روشهای تشخیص سوءاستفاده و تشخیص ناهنجاری میتواند مورد استفاده قرار گیرد.

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

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

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

# آنالیز آماری :
این روش درسیستم هایی نظیر NIDES ،IDES و Haystack استفاده شده است. 

+ ای دی ای اس و ان ای دی ای اس [^5]

در این روش برای هر کاربر و هر شئ سیستم، شناسهای ساخته و نگهداری میشود. این شناسه ها به صورت متناوب به روز درآورده میشوند و از اینجا تغییراتی که در هر شناسه رخ داده شده است مشخص میشود.
 
+ های استک [^6] :                                                                                                                                                                                                            
در این روش از یک مکانیزم تشخیص ناهنجاری دو بخشه استفاده میشود. در قسمت اول مشخص میشود که حوزه عملکرد یک کاربر برای نفوذ چه مقدار میباشد و در قسمت دوم مقدار انحراف عملکرد هر کاربر نسبت به حالت عادی مشخص میشود.

# آنالیزمبتنی بر قواعد:
روش دیگری که برای سیستمهای تشخیص نفوذ در حالت تشخیص ناهنجاری استفاده میشود روش مبتنی بر قواعد میباشد. فرضهای انجام شده در این روش همانند روش آنالیز آماری میباشد. مهمترین تفاوتی که در این روش وجود دارد این است که سیستم از مجموعهای از قوانین برای نگهداری الگوها استفاده میکند. نمونه سیستمهایی که از این روش استفاده میکنند Wisdom & Sense و TIM میباشند.

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

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

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

# درخت تصمیم:
درختهای تصمیم روشی برای نمایش یک سری از قوانین هستند که منتهی به یک رده یا مقدار میشوند.درختهای تصمیمی که برای پیش بینی متغیرهای دستهای استفاده میشوند، درختهای classification نامیده میشوند زیرا نمونه ها را در دسته ها یا رده ها قرار میدهند. درختهای تصمیمی که برای پیش بینی متغیرهای 
پیوسته استفاده میشوند درختهای regression نامیده میشوند.

+ الگوریتم های یادگیری درخت تصمیم: 
اغلب الگوریتم های یادگیری درخت تصمیم بر پایه یک عمل جستجوی حریصانه بالا به پائین در فضای درختهای موجود عمل میکنند. در درخت تصمیم(ID3) از یک مقدار آماری به نام بهره اطالعات Information Gain استفاده می شود تا اینکه مشخص کنیم که یک ویژگی تا چه مقدار قادر است..


# آزمایش‌ها

در شیوه خطی از یک مدل رگرسیون خطی عمومی گوسی استفاده کردم و در شیوه غیر خطی از یک شبکه عصبی عمیق استفاده کردم.
در این مدل ها از داده های KDD 99  برای آموزش و تست استفاده شده است. داده های آموزشی KDD 99 داده نسبتا بزرگی می باشد ومن زمان مورد نیاز برای اموزش را هم گزارش کرده ام. هدف اصلی از این گزارش این است که نشان دهم در ازای نتیجه بهتر که از مدل غیرخطی به دست می آوریم  زمان بسیار بیشتری هم برای آموزش نیاز داریم. این مساله می تواند بسیار مهم باشد چرا که تشخیص نفوذ باید به صورت آن لاین و خیلی سریع (real-time) انجام شود.
#مدل رگرسیون خطی عمومی: 
مدل رگرسون خطی عمومی سعی می کند که خروجی داده را با این فرض که داده از یک توزیع نمایی (در اینجا توزیع نرمال) می آید، تخمین بزند. در این کار از روش تخمین Maximum Likelihood برای تخمین پارامترها استفاده شده است. اگرفرض کنیم که داده ها (مشاهدات) از یک توزیع نمایی با تابع زیر تبعیت می کنند:


![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/1a.png)


در این جا  y1,......,yn مشاهدات یا داده های آموزشی مورد استفاده در مدل هستند. 
زمان مورد نیاز برای اموزش 2 ثانیه و 605 میلی ثانیه می باشد. 


مدل ساخته شده:

![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/7.png)


![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/8.png)


![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/9.png)


#بهبود نتایج رگرسیون خطی عمومی:
نتایج اعلام شده در فاز قبلی براساس مدل رگرسیون بدون رگولاریزاسیون بود. در مدل با رگولاریزاسیون یک بخش پنالتی در تابع خطلا تعریف می شود که از زیاد شدن  متغیرهای مدل جلوگیری شود.

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/3.png)



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

 ![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/4.png)
![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/5.png)


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




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


![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/1.png)

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


![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/2.png)

که اگر وزن های لایه های اول و دوم را به صورت برداری در نظر بگیریم داریم:

![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/3.png)

خروجی خطی و غیرخطی هر لایه به صورت زیر میباشد.

![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/4.png)

برای پیاده سازی شبکه ابتدا یک کلاس به نام hidden پیاده سازی شد:

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/6.png)

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

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/7.png)

علاوه بر کلاس hidden کلاس mlp هم پیاده سازی شد:

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/8.png)

# نتایج:
تعداد پارامترهای مدل:68623
تعداد نمونه های آموزشی: 46836467
سرعت آموزش: 3370 در هر ثانیه
مدت زمان آموزش: 3 ساعت و 51 دقیقه و 35 ثانیه و 70 میلی ثانیه
#میزان اهمیت هر ویژگی:

![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/5.png)
![تصویر باز شکاری](http://192.241.241.138:8000/static/MonaEsm/6.png)

همین طور که از نتایج مشخص می شود میزان خطا 100 برابر کمتر شده است. 0.0075 در شبکه عصبی در مقایسه با 0.188 در رگرسیون خطی. ناگفته نماند که زمان مورد نیاز برای آموزش شبکه عصبی هم بسیار فراتر است. در شبکه عصبی نیاز به 3 ساعت و نیم زمان برای آموزش داریم در حالیکه آموزش مدل رگرسیون فقط 2 ثانیه بوده است. 

# بهبود نتایج در مدل غیرخطی:
چه چیزهایی را می توانم در این شبکه عصبی دستکاری کنم و نتایج را تغییر دهم. این چیزی بود که در ابتدای این فاز به ان فکر می کردم.  به فکر بهتر کردن نتایج نبودم. اول می خواستم بدانم چه چیزهایی در ایجاد نتیجه فعلی دخیل بودند و بعد که این متغیرها را پیدا کردم به این فکر کنم که آنها را چگونه تغییر دهم به گونه ای که نتایج را بهبود ببخشند. این لیستی از تغییراتی بود که می توانستم در مدل ایجاد کنم.
# روش مقدار دهی اولیه:  [^7] 
در روش فعلی مقدارهای اولیه در شبکه عصبی به صورت تصادفی اختیار می شوند. آیا می توان مقداردهی اولیه را سیستماتیک تر و هدفمندتر کرد به گونه ای که هم شبکه سریع تر ساخته شود و هم نتایج  بهتر گردد؟
# نرخ یادگیری: [^8]  
خیلی مایلم که بعدها روی یا کلگپریتم کار کنم که بتواند در هر گام از بهینه سازی مقدار نرخ یادگیری را به صورت بهینه تعیین کنم. در حال حاضر هیچ ایده ای برای این تغییر ندارم و احساس می کنم باید در زمینه بهینه سازی خطی و غیرخطی مقدار بیشتری مطالعه کنم اگر می خواهم کار جدی در این زمینه انجام دهم.
# تعداد لایه های پنهانی: [^9] 
 تعداد لایه بیشتر یعنی شبکه عصبی پیچیده تر و یادگیری عمیق تر. می دانم که این منجر به نتیجه بهتر می شود اما متاسفانه زمان بیشتری هم برای آموزش می طلبد. و سوال اینجاست کدام فدای دیگری شود؟ زمان فدای کیفیت طبق بندی شود یا کیفیت طبقه بندی فدای زمان. این را محل کاربرد الگوریتم مشخص می کند. در تشخیص نفوذ در شبکه هر دو مهمند . پس من نمی توانم خیلی روی عمیق تر کردن شبکه مانور بدهم چون زمان آموزش هم برای من مهم است.
# پارامترهای رگولاریزاسیون: [^10]  
در مدل خطی نقش این پارامترها را دیدم. در این مدل هم اولین تغییری که ایجاد خواهم کرد همین خواهد بود. 

# مهندسی ویژگی ها: 
کدام یکی از ویژگی ها یا کدام زیرمجموعه از داده های ورودی منجر به نتایج بهتری خواهد شد؟ این هم از موضوعات هیجان برانگیز برای تحقیقات بیشتر در این رابطه است. من یک سری کار کوچک در این زمینه انجام دادم و مجموعه متغیرهای مهم را در داده ورودی پیدا کردم با استفاده از آنتروپی و آنچه سرکلاس به عنوان information gain یادگرفتیم. اما مایلم وقت بیشتری در این زمینه بگذارم و یک روش سیستماتیک برای پیدا کردن مجموعه داده های بهینه برای آموزش مدل پیدا کنم.

# پارامترهای رگولاریزاسیون :
برای بهبود نتایج در شبکه عصبی هم من تصمیم گرفتم که از ریگولاریزسیون برای مدل سازی استفاده کنم. در رگولاریزاسیون شبکه عصبی از رگولاریزاسیون l1 و l2 استفاده شد و نتایج بهبود پیدا کرد. کد مورداستفاده برای رگولاریزاسیون در زیر ارایه شده است:

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/9.png)



مثل فاز قبلی از نزول گرادیان برای مینیمم کردن نرخ خطا (یادگیری) استفاده شده است.تفاوت اصلی در این است که تابع خطا دارای دو قسمت اضافه هم شده است l1 و l2  که در واقع در برابر زیاد شدن تعداد متغیرهای مدل مقاومت می کنند و از overfitting جلوگیری می کنند. کد مورد استفاده برای محاسبه تابع خطای جدید به شکل زیر می باشد:

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/10.png)

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

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/11.png)


#نتایج جدید:

تعداد پارامترهای مدل: ۶۸۶۲۳
مشخصات مدل ساخته شده از قرار زیر است:

![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/12.png)
![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/13.png)
![تصویر باز شکاری](http://amirajorloo.com/static/MonaEsm/phase2/14.png)

#نتایج به صورت کلی:
 امان از overfitting که مضر حیات است و مخرب جان!  
همین طور که دیده شد در هر دو مدل خطی (رگرسیون عمومی) و غیرخطی (شبکه عصبی) زمانیکه از رگولاریزاسیون استفاده شد نتایج بسیار بهبود بخشده شد. در واقع رگولاریزاسیون یک روش انتخاب مدل می باشد. به گونه ای که متغیرهایی که از پتانسیل پیشگویی  برخوردار نیستند دارای ضریب صفر می شوند. این منجر به ایجاد مدل هایی کوجک تر با قدرت عمومیت سازی بیشتر می شود.




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

+ [لینک فاز دوم](https://github.com/monaesmaeili/mytestrepo)
+ [لینک فازسوم](https://github.com/monaesmaeili/Intrusion-Detection-System) در این قسمت  علاوه بر کد تحلیل داده ها در قالب JSON قرار داده شده است.
+ [لینک فازچهارم](https://github.com/monaesmaeili/last-phaseInstructiondetection)
# مراجع






+ Kabiri, Peyman, and Ali A. Ghorbani. "Research on Intrusion Detection and Response: A Survey." IJ Network Security 1.2 (2005): 84-102.



 + Paul Innella and Oba McMillan, “An Introduction to Intrusion Detection Systems”, .2001 


+ Axelsson, S. (1999). Research in intrusion-detection systems: A survey. Technical report TR 98-17. Göteborg, Sweden:   Department of Computer Engineering, Chalmers University of Technology.

+ Barbara, D., Couto, J., Jajodia, S., & Wu, N. (2001). ADAM: A testbed for exploring the use of data mining in intrusion detection. ACM SIGMOD Record, 30 (4), 15--24. 
  
+ Application of Data Mining to Network Intrusion Detection: Classifier Selection Model/Huy Anh Nguyen and Deokjai Choi

+ ASSAREH, E., M. A. BEHRANG, M. R. ASSARI, and A. GHANBARZADEH (2010); “Application of Pso 
(Particle Swarm Optimization) and Ga (Genetic Algorithm) Techniques on Demand Estimation of Oil in 
Iran”; Energy, 35, 5223-5229. 

+  Bianco, V., Manca, O. and S. Nardini (2009); “Electricity consumption forecasting in Italy using linear 
regression models”; Energy, 34: 1413-1421. 

+  McCulloch WS and W. Pitts (1943); “A logic calculus of the ideas immanent in nervous activity”; Bull of 
Math Biophys, 5: 115-133. 


+  Pindyck, R.S.(1979); “The structure of world energy demand”; The MIT Press Cambridge ,
Massachusetts. 
+ O. Nelles, A. Fink, R. Isermann, Local Linear Model Trees (LOLIMOT) toolbox for 
Nonlinear system identification, IFAC, 2000.
+ F. Anifowose and A. Abdulraheem, “Fuzzy Logic-Driven and SVM-Driven Hybrid Computational Intelligence Models Applied to Oil and Gas Reservoir Characterization,” Journal of Natural Gas Science and Engineering, Volume 3, Issue 3, July 2011, Pages 505-517.

+  Y. Xing, X. Wu, and Z. Xu, “Multiclass Least Squares Auto-Correlation Wavelet Support Vector Machines”, International Journal of Innovative Computing, Information and Control Express Letters 2 (4), 2008, pp. 345-350.

+  C. Sampada, S. Khusbu, D. Neha, M. Sanghamitra, A. Abraham, and S. Sugata, "Adaptive Neuro-Fuzzy Intrusion Detection Systems", in Proceedings: International Conference on Information Technology: Coding and Computing (ITCC’04), DOI: 0-7695-2108-8/04, 2004.

+ H. Jun, “Computational Intelligence”, Research Interests, http://www.cs.bham.ac.uk/~jxh/hejunrs.html, 2008, Accessed June 25, 2011.

+ C. Sampada, S. Khusbu, D. Neha, M. Sanghamitra, A. Abraham, and S. Sugata, "Adaptive Neuro-Fuzzy Intrusion Detection Systems", in Proceedings: International Conference on Information Technology: Coding and Computing (ITCC’04), DOI: 0-7695-2108-8/04, 2004.

+ J. Taboada, J.M. Matías, C. Ordóñez, and P.J. García, “Creating a Quality Map of a Slate Deposit using Support Vector Machines”, Elsevier Journal of Computational and Applied Mathematics 20 (4), 2007, pp. 84-94.

+  C.H. Lee, and Y. C. Lin, “Hybrid Learning Algorithm for Neuro-Fuzzy Systems”, in Proceedings: Proceedings. 2004 IEEE International Conference on Fuzzy Systems, 2004, pp. 691-696.

+  N. Cristianini, and J. Shawe-Taylor, “An Introduction to Support Vector Machines and other Kernel-Based Learning Methods”, 1st Edition. Cambridge University Press, UK. 2000.

+  T. Helmy, F. Anifowose and K. Faisal, “Hybrid Computational Models for the Characterization of Oil and Gas Reservoirs,” Elsevier International Journal of Expert Systems with Applications, vol. 37, 2010, pp. 5353-5363.

+  N. Cristianini, and J. Shawe-Taylor, “An Introduction to Support Vector Machines and other Kernel-Based Learning Methods” 1st Edition. Cambridge University Press, UK. 2000.

+ C. Sampada, S. Khusbu, D. Neha, M. Sanghamitra, A. Abraham, and S. Sugata, "Adaptive Neuro-Fuzzy Intrusion Detection Systems", in Proceedings: International Conference on Information Technology: Coding and Computing (ITCC’04), DOI: 0-7695-2108-8/04, 2004.

+ J. Eduardo, and M.S. Brandão, “A New Approach for IDS Composition”, in Proceedings: IEEE International Conference on Communications, 2006, pp. 2195-2200.

+ http://www.security.cse.msstate.edu/docs/Publications/wli/DOECSG2004.pdf

+ http://www.dtic.mil/dtic/tr/fulltext/u2/a483571.pdf
+ http://seclab.cs.sunysb.edu/sekar/papers/sunlth.doc
+ http://www.jameskelly.net/mcs/thesis.pdf
+ http://www.ensani.ir/storage/Files/20140311150409-9448-87.pdf
+ https://www.sans.org/reading-room/whitepapers/detection/algorithm-based-approaches-intrusion-detection-response-1413


[^1]:HIDS
[^2]:NIDS
[^3]:DIDS
[^4]: Intrusion Detection and Prevention
[^5]: IDES/NIDES
[^6]:Haystack
[^7]: Nonlinearity
[^8]: Weight initialization
[^9]: Learning rate
[^10]: Number of hidden units
[^11]: Regularization parameter
[^12]: Back Propagation (BP)
[^13]: Feed Forward Neural Network
[^14]:NB Tree
[^15]:Decision Table
[^16]:oneR
# پیوندهای مفید
+ [The NSL-KDD Data Set](http://nsl.cs.unb.ca/NSL-KDD)