ModSecurity یک برنامه فایروال برای وب‌سرور آپاچی محسوب می‌شود. اپلیکیشن ModSecurity علاوه بر قابلیت‌های تنظیم ورودی، می‌تواند ترافیک HTTP را به منظور تشخیص حملات احتمالی پایش کند. ModSecurity همچنین می‌تواند به عنوان یک ابزار تشخیص نفوذ مورد استفاده قرار گیرد. در نتیجه، می‌توانید واکنش مناسبی به اتفاقات مشکوک در سیستم‌های وب خود داشته باشید.اپلیکیشن 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



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 برای اطلاع بیشتر در دسترس خواهند بود.