install_nginx_modsecurity
install_nginx_modsecurity(){
clear
f_banner
echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
echo -e "\e[93m[+]\e[00m Downloading and Compiling Nginx with ModSecurity"
echo -e "\e[34m---------------------------------------------------------------------------------------------------------\e[00m"
echo ""
apt-get -y install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
mkdir src
cd src/
git clone https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
./autogen.sh
./configure --enable-standalone-module
make
cd ..
wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar xzvf nginx-1.9.7.tar.gz
cp ../templates/ngx_http_header_filter_module.c nginx-1.9.7/src/http/ngx_http_header_filter_module.c
cd nginx-1.9.7/
./configure --user=www-data --group=www-data --with-pcre-jit --with-debug --with-http_ssl_module --add-module=/root/JShielder/UbuntuServer_14.04LTS/src/ModSecurity/nginx/modsecurity
make
make install
#Replacing Nginx conf with secure Configurations
cp ../../templates/nginx /usr/local/nginx/conf/nginx.conf
#Jason Giedymin Nginx Init Script
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults
mkdir /usr/local/nginx/conf/sites-available
mkdir /usr/local/nginx/conf/sites-enabled
say_done
}
La función install_nginx_modsecurity instala nginx con el módulo ModSecurity. Jshielder se encarga de instalar todas las dependencias necesarias para compilar Nginx con ModSecurity.
apt-get -y install git build-essential libpcre3 libpcre3-dev libssl-dev libtool autoconf apache2-prefork-dev libxml2-dev libcurl4-openssl-dev
mkdir src
cd src/
git clone https://github.com/SpiderLabs/ModSecurity
cd ModSecurity
./autogen.sh
./configure --enable-standalone-module
make
cd ..
wget http://nginx.org/download/nginx-1.9.7.tar.gz
tar xzvf nginx-1.9.7.tar.gz
cp ../templates/ngx_http_header_filter_module.c nginx-1.9.7/src/http/ngx_http_header_filter_module.c
cd nginx-1.9.7/
./configure --user=www-data --group=www-data --with-pcre-jit --with-debug --with-http_ssl_module --add-module=/root/JShielder/UbuntuServer_14.04LTS/src/ModSecurity/nginx/modsecurity
make
make install
Esta función hace uso tambien de una plantilla para una configuración segura de nginx.conf, esta plantilla se encuentra en templates/nginx. Veamos que contiene el archivo:
user www-data;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server_tokens off;
## Start: Size Limits & Buffer Overflows ##
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 1k;
large_client_header_buffers 2 1k;
## END: Size Limits & Buffer Overflows ##
## Start: Timeouts ##
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
## End: Timeouts ##
#gzip on;
include /usr/local/nginx/conf/sites-enabled/*;
}
ModSecurity es un firewall de aplicaciones web que se ejecuta como modulo en un servidor web y provee protección contra diversos ataques hacia nuestras aplicaciones web. Nos permite monitorear el trafico HTTP y realiza análisis en tiempo real. Es un producto desarrollado por Breach Security y está disponible como Software Libre bajo la licencia GNU. Anteriormente ModSecurity solo estaba disponible para servidores Apache pero ya está disponible para Microsoft IIS y NginX.
El módulo cuenta con diversas funcionalidades:
- Filtrado de Peticiones: los pedidos HTTP entrantes son analizados por el módulo mod_security antes de pasarlos al servidor Web, a su vez, estos pedidos son comparados contra un conjunto de reglas predefinidas para realizar las acciones correspondientes. Para realizar este filtrado se pueden utilizar expresiones regulares, permitiendo que el proceso sea flexible.
- Técnicas antievasión: las rutas y los parámetros son normalizados antes del análisis para evitar técnicas de evasión.
Elimina múltiple barras (//)
Elimina directorios referenciados por si mismos (./)
Se trata de igual manera la y la / en Windows.
Decodificación de URL.
Reemplazo de bytes nulos por espacios ()
- Comprensión del protocolo HTTP: al comprender el protocolo HTTP, ModSecurity puede realizar filtrados específicos y granulares.
- Análisis Post Payload: intercepta y analiza el contenido transmitido a través del método POST.
- Log de Auditoría: es posible dejar traza de auditoría para un posterior análisis forense.
- Filtrado HTTPS: al estar embebido como módulo, tiene acceso a los datos después de que estos hayan sido descifrados.
Verificación de rango de Byte: permite detectar y bloquear Shellcodes, limitando el rango de los bytes.
Monitoreo en Tiempo Real: Además de Registrar todo el tráfico HTTP, ModSecurity puede monitorear el tráfico en tiempo real para detectar ataques. Quiere Decir que ModSecurity actúa como una herramienta de detección de intrusos.
A partir de su versión 2 ModSecurity agregó diversas funcionalidades que mencionamos:
- Cinco fases de procesamiento, incluyendo: encabezados del pedido (request headers), cuerpo del pedido (request body), encabezados de respuesta (response headers), cuerpo de respuesta (response body) y almacenamiento en bitácora (logging).
- Opciones de transformación por regla.
- Variables transaccionales.
- Persistencia de datos (utilizado en seguimientos de direcciones IP, sesiones de aplicación, y usuarios de aplicación).
- Soporte para ranking de anomalías y correlación básica de eventos (los contadores pueden ser automáticamente decrementados con el paso del tiempo, las variables pueden expirar).
- Soporte para aplicaciones Web e IDs de sesión.
- Soporte para XML (parseo, validación, XPath).
- bloqueo de IP
ModSecurity es una herramienta de Seguridad imprescindible y que ha demostrado ser muy efectiva. Si eres un Administrador de Sistemas con aplicaciones web criticas y que deben ser accedidas publicamente este es un Firewall que merece su atención.
Ya que Jshielder hace una instalación manual de Nginx, este no cuenta con los scripts para poder manejar los servicios, es por eso que hacemos uso del Init Script de Jason Giedman.
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx defaults
mkdir /usr/local/nginx/conf/sites-available
mkdir /usr/local/nginx/conf/sites-enabled
say_done