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