WAF ابر آروان چیست و چگونه عمل می‌کند؟ - حلقه ارتباطی ابر آروان

ابر آروان

زیرساخت یکپارچه ابری

۲۳ مرداد ۱۳۹۸

WAF ابر آروان چیست و چگونه عمل می‌کند؟

WAF ابر آروان

WAF، دیواره آتش سطح برنامه (یا لایه هفت شبکه) است که برای نظارت، فیلتر یا مسدود کردن بسته‌های داده‌ی مربوط به برنامه‌های کاربردی تحت وب طراحی و پیاده‌سازی می‌شود. در واقع WAF یا دیواره آتش وب را می‌توان ابزاری برای تشخیص و جلوگیری از حملات تحت وب قلمداد کرد. رویکرد معمول در WAF استفاده از مجموعه قواعدی برای تشخیص حملات است ولی از رویکردهای دیگری مانند وایت لیست یا تشخیص ناهنجاری نیز استفاده می‌شود. انواع رویکردهای WAF عبارت‌اند از:

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

WAF با بررسی تمامی بسته‌های ارسالی به‌سمت سرور وب، بسته‌های مشکوک به حمله را شناسایی و از رسیدن آن‌ها به سرور اصلی جلوگیری می‌کند.  معمولن دیواره‌های آتش وب به‌شکل یک پروکسی معکوس پیاده‌سازی می‌شوند اما شکل‌های روتر و Bridge این محصول نیز موجود است. WAF می‌تواند به‌شکل ابری یا روی سخت‌افزار پیاده‌سازی شود. مقایسه‌ی این دو نوع از WAF در جدول زیر آمده است:

 

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

 

راهکار دیگر، استفاده از WAF ترکیبی (Hybrid) است. به این شکل که حملات کلی با استفاده از WAF ابری و حملات پیچیده‌تر و خاص‌تر با استفاده از WAF سخت‌افزاری تشخیص داده شوند.

WAF ابر آروان چیست و چگونه عمل می‌کند؟

انتظارات نابه‌جا از WAF

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

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

همان‌طور که گفته شد، WAF برای جلوگیری از حملات لایه‌ی کاربرد طراحی شده و در زمینه‌های دیگر، مانند امنیت شبکه و… هیچ کاربردی ندارد و نباید آن را با دیواره‌های آتش نسل بعدی (Next Generation Firewall) اشتباه گرفت. از طرفی WAF یک راه‌حل کامل نیست. به این معنا که ممکن است وابسته به مجموعه قواعد WAF، برخی حملات را نتوان تشخیص داد یا برخی از درخواست‌های درست، حمله تشخیص داده شوند. از طرفی بسیاری از آسیب‌پذیری‌های منطقی دارای الگوی مناسب برای کشف و جلوگیری نیستند.

شیوه‌ی عمکلرد WAF ابر آروان

هنگامی‌که در ابر آروان تصمیم گرفته شد تا سرویس WAF ارایه شود، ابتدا فازی تحقیقاتی برای پیدا کردن بهترین گزینه‌ی open source تعریف شد. در نخستین جست‌وجوها، ModSecurity را پیدا کردیم. ماژولی که در ابتدا برای Apache طراحی شده، سپس روی Nginx هم پشتیبانی شده بود. به‌قدری تعداد مقالات و شرکت‌های استفاده‌کننده از ModSecurity بالا بودند (از جمله Nginx Plus) که مطمین شدیم بهترین گزینه برای دیواره آتش وب open source را در اختیار داریم. سپس تصمیم گرفتیم که آن را روی سرورهای خود پیاده‌سازی کنیم. کار پیاده‌سازی بسیار راحت بود و فقط کافی بود پس از نصب ModSecurity، ماژول Connector آن را در Nginx لود کنیم. پس از راه‌اندازی ماژول متصل‌کننده، زمان آن فرا رسیده بود که تست‌های مورد نظر را روی سرویس WAF اجرا کنیم تا از صحت عملکرد آن پیش از انتشار مطمین شویم. تمامی تست‌ها به‌خوبی پشت سر گذاشته شدند و در گام آخر باید Benchmark می‌گرفتیم. با توجه به تعداد درخواست‌های بالا روی سرورهای ابر آروان، ما به سرویس WAF نیاز داشتیم که تاخیری (Latency) کم‌تر از یک میلی‌ثانیه داشته باشد. متاسفانه نتیجه‌ی تست‌های Benchmark روی ModSecurity بسیار ناامید کننده بود و نمی‌توانست نیاز ما را برآورده سازد.

پس از کنار گذاشتن ModSecurity به‌دنبال گزینه‌های دیگری گشتیم که بتوانیم آن‌ها را به‌وسیله‌ی OpenResty اجرا کنیم. بنابراین تمرکز خود را روی سرویس‌های WAF پیاده‌سازی شده به زبان Lua گذاشتیم. زبان Lua این امکان را برای ما فراهم می‌کرد که به‌راحتی بتوانیم بدون نیاز به کامپایل مجدد، سورس کد WAF را تغییر داده و تغییرات انجام شده را بررسی کنیم. گزینه‌ی مورد نظر ما Lua-resty-waf بود که به ادعای سازنده‌ی آن، Latency کم‌تر از یک میلی‌ثانیه داشت. هرچند پیاده‌سازی Lua-resty-waf نیازمند زمان بیش‌تری نسبت به ModSecurity بود، پس از راه‌اندازی و انجام تست‌های مورد نظر روی آن، نتیجه‌ی تست Benchmark به‌شکل شگفت‌انگیزی بهتر از ModSecurity شد. در نتیجه توانسته بودیم سرویس WAFای را پیدا کنیم که پاسخ‌گوی نیاز ما باشد اما پرسشی مهم مطرح شد: آیا این سرویس که به‌شکل یک پروژه‌ی دانشگاهی انجام شده بود برای اجرا در Production آماده است یا خیر؟

برای پاسخ به این پرسش از پروژه‌ی اصلی Fork گرفتیم و تست‌های بیش‌تری برای آزمایش عملکرد سرویس WAF نوشتیم. با انجام تست‌ها تعدادی باگ اساسی شناسایی شد، برای نمونه این سرویس بدنه‌ی درخواست‌های Post را بررسی نمی‌کرد. پس از اعمال bugfixها تمامی تست‌ها PASS شدند، اما با اضافه شدن آن‌ها مقدار Latency از مقدار مورد نظر ما (یک میلی‌ثانیه) بیش‌تر شده بود. در گام بعدی تصمیم گرفتیم که سرویس WAF را Optimize کنیم.

سرویس Lua-resty-waf را چه‌طور Optimize کردیم؟

CPU Profiling یکی از مهم‌ترین روش‌های آنالیز یک برنامه در حال اجراست. یکی از اهداف اصلی پروفایل گرفتن از یک برنامه، بهبود عملکرد آن برنامه است که در حالت کلی در سه مرحله انجام می‌شود:

  1. پروفایل گرفتن از برنامه و استخراج اطلاعات آماری (مرحله‌ی شناسایی)
  2. بازنویسی کد برنامه با توجه به اطلاعات به‌دست آمده (مرحله‌ی بهبود)
  3. پروفایل گرفتن مجدد از برنامه و مقایسه‌ی اطلاعات، پیش و پس از بازنویسی (مرحله‌ی بازنگری)

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

در ‌‌Benchmark امکان شناسایی تابعی که زمان بیش‌تری برای اجرا لازم داشته، وجود ندارد و تنها می‌توان زمان لازم برای اجرای کل برنامه را اندازه‌گیری کرد، اما با استفاده از پروفایل گرفتن به‌راحتی می‌توان تابعی که زمان‌بر است را شناسایی و اگر ممکن باشد، بازنویسی کرد.

ما برای Optimize کردن Lua-resty-waf از SystemTap استفاده کردیم. برای استفاده از این ابزار باید کرنل لینوکس را با پکیج‌های مربوط به debug دوباره Build می‌کردیم. پس از Build دوباره کرنل لینوکس و نصب SystemTap حالا می‌توانستیم از سرویس WAF پروفایل بگیریم. خروجی SystemTap از پروفایل سرویس WAF را به‌کمک ابزار FlameGraph به یک نمودار میله‌ای تبدیل کردیم تا راحت‌تر قابل بررسی باشد. برای نمونه شکل زیر یکی از این نمودارهاست که برای بررسی سرویس WAF از آن استفاده کردیم:

هر چه‌قدر که عرض هر نوار بیش‌تر باشد نشان‌دهنده‌ی صرف زمان پردازش بیش‌تر CPU برای آن تابع است.

این کار را بارها و بارها تکرار کردیم و هر بار کد را تغییر دادیم و اثر آن را بررسی کردیم تا جایی که توانستیم Performance سرویس WAF را تا ۴۰درصد افزایش دهیم. به این ترتیب Latency سرویس WAF به حد پذیرفتنی برای ما رسیده بود. دوباره تست‌های مورد نظر را روی سرویس WAF اجرا کردیم تا مطمین شویم تغییرات ما اثر مخربی روی عملکرد سرویس WAF نداشته است. سپس سرویس WAF را روی سرورهای Production خود لانچ کردیم تا بتوانیم از کاربران خود در مقابل حملات اینترنتی حفاظت کنیم. با وجود طولانی بودن فرآیند بهینه‌سازی سرویس WAF، نتیجه‌ی کار بسیار رضایت‌بخش بود: دستیابی به یک سرویس مطمین که Latency کم‌تر از یک میلی‌ثانیه دارد. درنهایت نتیجه‌ی کار خود روی Lua-resty-waf را در Github منتشر کردیم.

یک نمونه از شیوهی عملکرد WAF ابر آروان

فرض کنید سایت dvwa.com از محصول WAF امنیت ابری ابر آروان استفاده می‌کند. به‌ این‌ ترتیب تمامی درخواست‎ها به این سایت، به WAF ابر آروان می‎رسد. در این محصول ما از رویکرد مبتنی‌بر امتیاز استفاده می‎کنیم. به این‌شکل که فرض کنید حمله‎ی SQLI در درخواست زیر برای این سایت ارسال شده است:

http://dvwa.com/vulnerabilities/sqli/?id=’and”=’&Submit=Submit

در دیواره آتش وب ابر آروان قواعد زیر برای این درخواست تطابق داده می‎شود:

 

 

دقت کنید که در قاعده‎ی آخر، امتیاز درخواست اندازه‎گیری شده و چون مقداری بزرگ‌تر از مقدار آستانه‎ی تعیین شده داشته، درخواست بلاک شده است.

  • arvan-friend گفت:

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

  • × برای اطلاع از آخرین اخبار و مقالات آروان عضو خبرنامه ما شوید