ModSecurity یک برنامه فایروال برای وبسرور آپاچی محسوب میشود. اپلیکیشن ModSecurity علاوه بر قابلیتهای تنظیم ورودی، میتواند ترافیک HTTP را به منظور تشخیص حملات احتمالی پایش کند. ModSecurity همچنین میتواند به عنوان یک ابزار تشخیص نفوذ مورد استفاده قرار گیرد. در نتیجه، میتوانید واکنش مناسبی به اتفاقات مشکوک در سیستمهای وب خود داشته باشید.
اگرچه اپلیکیشن ModSecurity با تنظیمات پیشفرض همراه خواهد بود، ولی در این آموزش از تنظیمات OWASP ModSecurity Core Rule Set (CRS) نسخه 3.0.2 استفاده میشود. هدف از پروژه OWASP ارائه یک سری قواعد اصولی برای ایجاد یک سطح پایه ایمنی برای هر گونه اپلیکیشن تحتوب بوده است. همچنین CRS برای حفاظت از اپلیکیشنهای تحتوب در برابر مجموعه گسترده از حملات ارائه شده است. این نسخه از CRS نیازمند استفاده از ModSecurity 2.8.0 و یا نسخههای جدیدتر است. تنظیمات از طریق rule set ها انجام میشود که به منظور جلوگیری از حملاتی مانند نفوذ SSQ، اسکریپتهای اشتراکی و اجرای ریموت کد صورت میگیرد. در این آموزش، نحوه تنظیم قواعد پیشفرض را به شما نشان میدهیم. در همین حال، تنظیمات پیشفرض اپلیکیشن ModSecurity به عنوان یک چالش برای خواننده مطلب درنظر گرفته میشود.
نصب اپلیکیشن ModSecurity
قبل از اینکه اپلیکیشن ModSecurity را نصب کنید، حتماً باید آپاچی را در سرور خود داشته باشید. در این آموزش، از بسته موسوم به LAMP استفاده میشود.
دبیان
sudo apt install libapache2-modsecurity
راهاندازی دوباره آپاچی
/etc/init.d/apache2 restart
بررسی نسخه اپلیکیشن ModSecurity
apt-cache show libapache2-modsecurity
نکته: پس از نصب تمام مودها با استفاده از فرمان apachectl -M، اپلیکیشن ModSecurity تحت عنوان security2_module فهرستبندی میشود.
اوبونتو
sudo apt-get install libapache2-mod-security2
راهاندازی دوباره آپاچی
/etc/init.d/apache2 restart
بررسی اینکه نسخه ModSecurity برابر 2.8.0 و یا بالاتر است:
apt-cache show libapache2-mod-security2
CentOS
yum install mod_security
راهاندازی دوباره آپاچی با استفاده از فرمان زیر صورت میگیرد.
/etc/init.d/httpd restart
بررسی اینکه نسخه ModSecurity برابر 2.8.0 و یا بالاتر است:
yum info mod_security
سری قواعد هسته OWASP ModSecurity
مراحل زیر برای توزیعهای مبتنی بر دبیان هستند. مسیر فایلها و فرمانها برای RHEL ممکن است اندکی تفاوت داشته باشند.
۱) جابجایی و تغییر نام فایل پیشفرض اپلیکیشن ModSecurity
mv /etc/modsecurity/modsecurity.conf-recommended modsecurity.conf
۲) در صورت لزوم git را نصب کنید.
sudo apt install git
۳) از گیتهاب، OWASP ModSecurity CRS را دریافت نمایید.
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
۴) به دایرکتوری دانلود شده بروید. در اینجا باید فایل crs-setup.conf.example را به crs-setup.conf تغییر داده و جابجا کنید. سپس همین کار را با rules/ نیز انجام دهید.
cd owasp-modsecurity-crs mv crs-setup.conf.example /etc/modsecurity/crs-setup.conf mv rules/ /etc/modsecurity/
۵) این فایل تنظیمات میبایست با مسیر بالا و با همان چیزی که در پارامتر IncludeOptional تعریف شده، مطابقت داشته باشد. برای این منظور، یک پارامتر دیگر Include با ارجاع به rule set اضافه کنید.
etc/apache2/mods-available/security2.conf <IfModule security2_module> # Default Debian dir for modsecurity's persistent data SecDataDir /var/cache/modsecurity # Include all the *.conf files in /etc/modsecurity. # Keeping your local configuration in that directory # will allow for an easy upgrade of THIS file and # make your life easier IncludeOptional /etc/modsecurity/*.conf Include /etc/modsecurity/rules/*.conf </IfModule>
۶) حالا آپاچی را دوباره راهاندازی کنید تا تغییرات اِعمال شوند.
/etc/init.d/apache2 restart
آزمایش اپلیکیشن ModSecurity
OWASP CRS بر اساس ModSecurity ساخته شده و بنابراین، قواعد موجود میتوانند با این ابزار گسترش پیدا کنند.
۱) به سراغ تنظیمات پیشفرض آپاچی بروید و مطابق زیر، دو پارامتر دیگر اضافه کنید.
/etc/apache2/sites-available/000-default.conf <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SecRuleEngine On SecRule ARGS:testparam "@contains test" "id:1234,deny,status:403,msg:'Our test rule has triggered'" </VirtualHost>
۲) آپاچی را دوباره راهاندازی کنید و فرمان curl را نیز برای صفحه فهرست اجرا نمایید تا هشدارها عمداً فعال شوند.
curl localhost/index.html?testparam=test
کد پاسخ میبایست 403 باشد. همچنین باید پیامی در ثبتوقایع نشان دهند که قاعده تعریف شده اپلیکیشن ModSecurity عمل کرده است. میتوانید این موضوع را با استفاده از فرمان sudo tail -f /var/log/apache2/error.log بررسی نمایید.
ModSecurity: Access denied with code 403 (phase 2). String match “test” at ARGS:testparam. [file “/etc/apache2/sites-enabled/000-default.conf”] [line “24”] [id “1234”] [msg “Our test rule has triggered”] [hostname “localhost”] [uri “/index.html”] [unique_id “WfnEd38AAAEAAEnQyBAAAAAB”] ۳) بررسی عملکرد OWASP CRS [php] curl localhost/index.html?exec=/bin/bash
تاریخچه را دوباره بررسی کنید. جایی که قاعده اپلیکیشن ModSecurity توانسته تلاش برای اجرا یک اسکریپت خودسرانه را تشخیص دهد.
ModSecurity: Warning. Matched phrase “bin/bash” at ARGS:. [file “/etc/modsecurity/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf”] [line “448”] [id “932160”] [rev “1”] [msg “Remote Command Execution: Unix Shell Code Found”] [data “Matched Data: bin/bash found within ARGS:: exec/bin/bash”] [severity “CRITICAL”] [ver “OWASP_CRS/3.0.0”] [maturity “1”] [accuracy “8”] [tag “application-multi”] [tag “language-shell”] [tag “platform-unix”] [tag “attack-rce”] [tag “OWASP_CRS/WEB_ATTACK/COMMAND_INJECTION”] [tag “WASCTC/WASC-31”] [tag “OWASP_TOP_10/A1”] [tag “PCI/6.5.2”] [hostname “localhost”] [uri “/index.html”] [unique_id “WfnVf38AAAEAAEqya3YAAAAC”]
گامهای بعدی
فایلهای تنظیمات موجود در دایرکتوری /etc/modsecurity/*.conf را بررسی کنید. بسیاری از فایلها دارای توضیحاتی در مورد گزینههای در دسترسشان هستند. اپلیکیشن ModSecurity از سیستم امتیازبندی موسوم به آنومالی استفاده میکند که عدد 5 در آن بالاترین سطح را دارد. در همین حال، منابع مختلف و از جمله وبسایت ModSecurity برای اطلاع بیشتر در دسترس خواهند بود.