چرا باید از mod_security استفاده کنید؟
چند سال پیش که من (نگارنده) شروع به کار بر روی mod_securty کردم، از snort برای مانیتور کردن ترافیک وب خود استفاده میکردم. من خیلی خوب کار کرده بودم. به Snort گفته بودم که چه کلمات کلیدی برای من جالب است و این برنامه هرگاه که به این کلمات کلیدی بر میخورد، به من اطلاع میداد. ولی من به چیز بیشتری نیاز داشتم. من مایل بودم بتوانم آزادی لازم برای تعریف قوانین پیچیده و توانایی اجرای عکس العملهای مرتبط با HTTP را داشته باشم. علاوه بر این، نصب و پیاده سازی یک سیستم کشف مزاحمت (IDS) هر جا که یک سرویسدهنده وب وجود داشته باشد کاری است بسیار وقت گیر و گران.
در همان زمان سعی کردم تا از ترکیب mod_rewrite و mod_setenvif استفاده کنم. با استفاده از mod_rewrite تشخیص کلماتی مانند drop و table بسیار آسان بود و میتوانستم سرویس گیرنده ارسال کننده چنین کلماتی را به آدرس دیگری دور از نرمافزار وب هدایت کنم تا از حمله جلوگیری شود. البته این کار تنها جلوی نفوذگران کم تجربه را میگرفت. نفوذگران پرتجربهتر میتوانستند با بکارگیری متد POST بجای GET همان URL مورد نظرشان را فراخوانی کنند. از آنجایی که متغییرهای ارسال شده توسط متد پست توسط بسیاری از ماژولهای آپاچی در نظر گرفته نمیشوند، حمله میتوانست انجام شود.
اکنون که نیاز به داشتن یک ابزار جدید برای پوشش دادن این نیاز حفاظتی ایجاد شده بود، من دو راه در مقابل خود داشتم: از جاوا استفاده کنم و یک سیستم Reverse ***** و Application Gateway برای نرمافزارهای تحت وب بنویسم، یا اینکه یک ماژول برای آپاچی بنویسم که در بالای کدهای موجود اجرا شود. راه نخست مستلزم صرف وقت بسیار بود و شاید از نتیجه کار نیز تعداد بسیار کمی استفاده میکردند (خودم هم از آن استفاده نمیکردم!) از آنجایی که مایل بودم ابزاری بنویسم که قابل انعطاف و سهل الاستفاده باشد، راه دوم را انتخاب کردم و هرگز پشت سر خود را نگاه نکردم.
به مثالی که در بالا زدیم باز میگردیم. برای جلوگیری mod_security از حملهای که با drop table صورت میگیرد، کافی است خط زیر را به فایل پیکربندی سرویسدهنده آپاچی خود اضافه کنید:
SecFilter “dropspacetable” تنها پارامتر SecFilter یک Regular Expression است که به درخواستهای وارد شده به سرویسدهنده اعمال میگردد. این شبیه کاری است که mod_rewrite انجام میدهد با این تفاوت که mod_security هم بر روی GET و هم بر روی POST عمل میکند. اینجا لازم است بگویم که پیاده سازی قابلیت مانیتور کردن POST بر روی آپاچی ۱٫۳ کار بسیار دشوار بود.