sepisoad.com

index
blog

چگونه snort از lua در معماری خود استفاده میکند

منتشر شده در 2018-12-10 18:31:02.369264 توسط Sepehr Aryani

در پست قبلی در مورد زبان lua و ویژگی هاش گفتم. اشاره کردم که از lua بیشتر برای embed کردن در داخل زبان های دیگه استفاده میشه. پروژه snort که یک ips/ids اوپن سورس هست از lua به عنوان rule engine استفاده میکنه. البته snort از ورژن ۳ قابلیت نوشتن rule به زبان lua رو اضافه کرده و در ورژن های قدیمی از فایل هایی با فرمت مخصوص برای نوشتن rule ها استفاده میشه.

هسته snort که به زبان C نوشته شده وظایف زیر رو بر عهده داره:

البته هسته snort کارهای بسیار زیاد دیگه ای هم بر عهده داره ولی اینجا فقط موارد مهم اشاره شدن. snort بعد از دریافت packet از کارت شبکه و انتقال اون به حافظه بافر، اسکریپت نوشته شده به زبان lua رو اجرا میکنه و بافر رو در اختیارش قرار میده. این بافر در درون lua تجزیه و تحلیل میشه و براساس منطق نوشته شده مشخص میشه که اتفاقی که برای اون packet قراره بیوفته چی باید باشه. با این روش snort این امکان رو فراهم میکنه که کاربراش بتونن بدون نیاز به تغییر هسته نوشته شده به زبان C و فقط با تغییر rule های نوشته شده به lua عملکرد اون رو در محیط های مختلف عوض کنن که این ویژگی dynamism یا پویای نامیده میشه. تصویر زیر نمای کلی از طراحی snort رو نشون میده. شماره های کنار خط ها ترتیب انجام کار هار رو نشون میده:

lua-snort.png

حالا شرکتی رو در نظر بگیرید که مدیرش از ادمین شبکه درخواست کرده که دسترسی کابران شبکه رو به تلگرام ببنده. فرض میکنیم که ادمین از snort برای مدیریت ترافیک شبکه استفاده میکنه. ادمین به راحتی با اضافه کردن یک rule ساده به فایل اسکریپ lua میتونه به snort بفهمونه که اگر ترافیک خروجی شبکه با پروتکل telegram مطابقت کرد packet های مربوط به اون رو drop کنه و اجازه خروج اون packet از شبکه رو نده.

از lua درون snort استفاده های خیلی زیاد دیگه ای هم میشه. مثلا در ورژن اخیر این امکان فراهم شده که بتونیم تفکیک ترافیک بر اساس application رو از طریق lua انجام بدیم. همینطور میشه extension هایی با lua برای snort نوشت که مثلا بر اساس ترافیک ورودی یا خروجی log با فرمت های مختلف تولید بشه و حتی این log ها به نقاط دیگه ارسال بشه مثلا ارسال log به یک redis server که در نقطه ای دیگه از شبکه قرار گرفته.

خوب برای این پست کار رو همینجا تمام میکنم. در جلسه های بعدی در مورد حافظه مشترک بین Lua و C و نحوه استفاده از اون حرف خواهم زد.

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

Send
Share
©️ 2018 Sepehr Aryani
made with zaart