Dejo caer todo el tráfico en los puertos, excepto en 80 para mi servidor web.
Tengo algunas reglas como esta en iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Alguien que tiene más puede compartir? Sé que los piratas informáticos malos siguen actualizándose, pero algunos de ellos siempre comienzan con el mismo código. Necesito desconectar la conexión según algunos criterios. Aquí hay algunos registros de Apache (elimino ips pero cada ataque proviene de lo mismo):
Ataque 1: Esto no sé lo que estoy tratando de hacer, pero hazlo 50 veces desde la misma IP
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Ataque 2: intenta obtener información sobre el servidor solamente.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Ataque 3: intentan obtener acceso a una vulnerabilidad de página de inicio de sesión
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Ataque 4: este intento de acceder a un cgi en la primera solicitud, (vea mi primera regla de iptables para descartar esto)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Soy muy nuevo con el servidor, estos 4 ataques son de solo las últimas 12 horas ... Tienen miles por semana.
Respuestas:
A continuación, se analizan algunas formas, involucradas en un mecanismo completo, de cómo aumentar la seguridad de Apache2 en Ubuntu 16.04.
Tabla de contenidos:
Además, digamos que siempre es bueno usar HTTPS:
WWW Security Assistant Script ► Iptables
Aquí se presenta el guión
www-security-assistant.bash
. Podría ayudarlo a manejar las direcciones IP maliciosas. El guión tiene dos modos.Modo automatico
Cuando un programa externo, como el de Apache
mod_security
, proporciona una$IP
dirección maliciosa . En este caso, la sintaxis que invoca el script debe ser:En este modo, el script proporciona dos etapas de acción y para cada acción enviará un correo electrónico a los administradores.
Primera etapa: durante las primeras 'transgresiones' la fuente
$IP
será prohibida por un período de tiempo igual al valor de$BAN_TIME
. Este modo usa el comandoat
.Segunda etapa: cuando el número de transgresiones de ciertos
$IP
se iguala al valor de$LIMIT
, esta$IP
dirección se prohibirá permanentemente a través de Iptables y se agregará a$BAN_LIST
.Modo manual
Este modo acepta las siguientes opciones:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Crea una entrada en el archivo
/var/www-security-assistant/iptables-DROP.list
y genera una regla como:www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Crea una entrada en el archivo
/var/www-security-assistant/iptables-DROP-CLEAR.list
, elimina la cierta regla de Iptables, elimina la$IP
del historial y de$BAN_LIST
:www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Crea solo una entrada en el archivo
/var/www-security-assistant/iptables-ACCEPT.list
.www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Crea una entrada en el archivo
/var/www-security-assistant/iptables-ACCEPT.list
y genera una regla como:Dependencias
El script usa
iptables-save.sh
y laiptables
cadenaGUARDIAN
, explicada en la siguiente sección. Creará y mantendrá pocos archivos dentro de$WORK_DIR
:www-security-assistant.history
- contiene los datos de las transgresiones de IP anteriores.www-security-assistant.mail
- el contenido del último correo electrónico enviado por el script.iptables-ACCEPT.list
;iptables-DROP.list
yiptables-DROP-CLEAR.list
.El script necesita una configuración mínima para enviar correos electrónicos:
Si hay algún servicio HTTPS configurado, su certificado TLS se puede usar dentro del servicio Postfix.
Además, el script usa
at
:sudo apt install at
.Instalación
Crear directorio de trabajo, llamémoslo
/var/www-security-assistant
. Descargarwww-security-assistant.bash
y hacerlo ejecutable:Poner a
www-security-assistant.bash
disposición como comando personalizado:Conceder permiso para
www-data
ejecutarwww-security-assistant.bash
sin contraseña a través desudo
. Use el siguiente comando para crear y editar de forma segura un nuevo archivo con unasudoers
regla adicional ' ':Agregue la siguiente línea dentro del archivo: guarde el archivo y salga:
Tweak
www-security-assistant.bash
. Cambie al menos el valor de la variable$EMAIL_TO
.Chequeo
Represéntese como
$AGENT
y verifique si el MODO automático funciona correctamente:Luego revise su correo electrónico, escriba
iptables -L GUARDIAN -n
, revise los archivoswww-security-assistant.history
ywww-security-assistant.mail
. Ejecute el comando anterior 5 veces y revise los archivosiptables-DROP.list
yiptables-CURRENT.conf
.Compruebe si el MODO manual funciona correctamente; agregue su host local a la Lista blanca:
Luego verifique el archivo
iptables-ACCEPT.list
.Iptables - Configuración básica - Guardar y restaurar
Configuracion basica
Lea este manual antes de agregar las siguientes reglas.
Antes de realizar las siguientes acciones, abra una nueva conexión SSH e intente iniciar sesión en su sistema para verificar si todo funciona bien.
Guardar y restaurar
Esto podría lograrse a través de scripts personalizados, que guardarán y restaurarán el
iptables
coning durante el proceso de parada de arranque (o reinicio) del sistema. (Si usamos UFW para configurar las reglas de Iptables, este paso no es necesario).Crear nueva cadena
Cree una nueva cadena, llamada
GUARDIAN
e insértela como número 3 en laINPUT
cadena:Chequeo
Reinicie el sistema y verifique la configuración. Por favor, use
sudo systemctl reboot
(no use la opción de fuerzareboot -f
). Cuando el sistema vuelve a estar en línea, podemos verificar si la cadena recién creada existe:ModEvasive para Apache2
Instalación
Instalar y habilitar el módulo:
Cree un directorio de registros y hágalo accesible para
www-data
:Ajuste la configuración básica: descomente y edite ciertas directivas en el archivo de configuración:
Reinicia Apache:
sudo systemctl restart apache2.service
.Chequeo
F5
): debe obtener un mensaje de error prohibido 403 . En el directorio de registro, se generará un nuevo archivo de bloqueo. Este archivo debe eliminarse para detectar más transgresiones de esta dirección IP.ModEvasive ► WSAS ► Iptables
Aquí lo configuraremos
mod_evasive
para hablar aiptables
través dewww-security-assistant.bash
, creado en la sección anterior.Edite
/etc/apache2/mods-available/evasive.conf
de esta manera:Cree un archivo de registro y reinicie Apache:
Para probar esta configuración se puede simular ataque DDoS a través del
F5
método, mencionado anteriormente, o se puede utilizar una comandos comoab
,hping3
, etc.Atención: tenga cuidado porque la
iptables
regla, utilizada en WSAS, DROP todas las conexiones nuevas de la fuente$IP
, incluidas sus conexiones SSH. Es bueno tener una forma de respaldo para conectarse al servidor durante las pruebas. Puede cambiar esta regla para que funcione solo con los puertos HTTP / HTTPS.ModSecurity 2.9 para Apache2
Instalación
Instalar y habilitar el módulo:
Crear archivo de configuración:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
¡Lee y edita
/etc/modsecurity/modsecurity.conf
cuidadosamente! Agregue o cambie al menos las siguientes directivas:El archivo
/etc/apache2/mods-enabled/security2.conf
involucra/etc/modsecurity/modsecurity.conf
la configuración de Apache. En esta etapasecurity2.conf
se verá así:Crear directorio de registro:
Configurar la rotación del registro. Primero cree el archivo de configuración:
Luego edite el nuevo archivo de esta manera:
Reinicia Apache.
Chequeo
Cree un archivo de configuración adicional
/etc/modsecurity
, llámelo, por ejemploz-customrules.conf
, y agregue la siguiente regla como su contenido:Reiniciar el servidor:
sudo systemctl restart apache2.service
. Abre tu navegador y escribehttps://example.com/?abc=../
. El resultado será: 403 Prohibido . Consulte los archivos de registro/var/log/apache2_mod_security
para obtener más detalles.Para hacer las cosas más divertidas, coloque el script
issues.php
en un lugar apropiado dentro de ustedDocumentRoot
(aquí supongo que este lugar es/var/www/html
):Luego modifique la regla anterior de la siguiente manera:
Reinicie Apache, luego abra su navegador y escriba
https://example.com/?abc=../
;-) La idea está tomada del script del SEBotLovin.cs
.Edite
/etc/modsecurity/z-customrules.conf
una vez más y comente (desactive) la regla: este fue solo un ejemplo de prueba y está cubierto por OWASP CRS, que se describe en la siguiente sección.Aquí hay otro ejemplo en el que redirigiremos todas las
wp-admin
solicitudes de página, pero excepto estas de ciertas direcciones IP (tenga en cuenta lachain
):Aquí tenemos dos acciones disruptivas: (1)
deny, status:403
y (2)redirect:'/issues.php'
. En realidad, no necesitamos ladeny
acción porque será anulada por laredirect
acción.ModSecurity OWASP Core Rule Set 3.x
En Ubuntu 16.04 puede instalar 2.x RSE:
apt install modsecurity-crs
. Aquí instalaremos CSR 3.x , se proporcionan instrucciones detalladas en el manual de instalación (git
es obligatorio).Instalación
Clonar CSR en la carpeta
/usr/share/modsecurity-crs.3
:Actualice y renueve automáticamente la base de datos GeoIP. (GeoIP DB ya no se incluye con el CRS. En su lugar, se recomienda descargarlo regularmente). El script
util/upgrade.py
ofrece esta funcionalidad. Puede usarlo de la siguiente manera en cron -sudo crontab -e
:Crear archivos de configuración:
¡Lea y edite estos archivos con cuidado! Descomente al menos la
SecGeoLookupDB
directiva:Aplica la configuración de Apache. Edite
/etc/apache2/mods-available/security2.conf
de esta manera:Guarde el archivo y luego reinicie Apache.
Lista blanca de reglas de ModSecurity
La inclusión en la lista blanca de las reglas de ModSecurity se puede realizar a través de las siguientes directivas de ModSec, que se pueden usar en todo el sistema o dentro de la configuración del host virtual, también globalmente, para directorios específicos o coincidencias de ubicación:
Deshabilitar
mod_security2
para PhpMyAdmin. Cambiar/etc/phpmyadmin/apache.conf
de esta manera:Deshabilitar reglas específicas para cierto directorio:
Deshabilitar reglas a nivel mundial. Para este propósito, debemos agregar nuestras directivas en algún lugar de los archivos de configuración de Apache:
/etc/modsecurity/z-customrules.conf
es un buen lugar.Deshabilite las reglas dentro de toda la configuración de Apache:
Incluya en la lista blanca una dirección IP para que pueda pasar por ModSecurity:
Deshabilitar reglas dentro de la coincidencia de directorio:
Actualice la acción de la regla por su ID dentro de la coincidencia de ubicación:
En los ejemplos anteriores asumimos eso
973301
y950907
son ID de reglas que obstruyen el trabajo normal de nuestras aplicaciones web. Podemos encontrar reglas como estas mediante un análisis demodsec_audit.log
.Reglas de ModSecurity ► WSAS ► Iptables
Aquí se dan algunos ejemplos más de cómo crear SecRules personalizadas, y también cómo podemos llamar a WWW Security Assistant Script (WSAS) a través de ellas.
Configuración inicial
Necesitamos un script de inicio adicional
modsecurity-assistant.sh
. La razón es que laexec
acción de ModSecurity tiene una sintaxis demasiado simple y limitada.Si mira dentro del script, verá algunas variables que ModSecurity exporta. Estos son:
$REQUEST_URI
,$ARGS
,$SERVER_NAME
,$REMOTE_ADDR
,$REMOTE_HOST
y$UNIQUE_ID
. Las otras variables se explican dentro del script.Crea una regla personalizada y llama a nuestros scripts a través de ella
Primero, creemos una regla que se ejecutará
modsecurity-assistant.sh
(y llamaráwww-security-assistant.bash
) cuando el URI de solicitud contenga una palabra incluida en nuestra lista negra. Abra/etc/modsecurity/z-customrules.conf
y agregue las siguientes líneas en la parte inferior:REQUEST_URI
- esta variable contiene el URI completo de la solicitud actual. La regla podría ser más amplia:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
leerá el archivomodsecurity-uri-black.list
que contiene la lista de frases, donde cada frase o palabra específica se coloca en una nueva línea. Puede recopilar palabras y frases interesantes de los archivos de registro. Si hay una coincidencia particular entreREQUEST_URI
y nuestra lista de patrones, se aplicará la regla. El archivo puede estar vacío, pero debe crearlo (touch
).La
log
acción creará entradas de registro en los archivos de registro para esta regla conid:150
.drop
,deny
(constatus
) y lasredirect
acciones pertenecen al grupo de acciones disruptivas , deben estar al comienzo de la reglachain
(si hay una cadena). La segunda acción anulará la primera y la tercera anulará la segunda, por lo que debe elegir qué desea realizar y puede eliminar las demás.chain
acción llamará a la siguiente regla de la cadena, tenga en cuenta que la segunda regla, no tieneid
.REMOTE_ADDR
contiene la dirección IP de la solicitud.@ipMatchFromFile
aparecerá el archivomodsecurity-ip-white.list
que contiene una lista blanca de direcciones IP, separadas en nuevas líneas. Las entradas CIDR también son aceptables. Debido a que la acción disruptiva siempre se encuentra en la regla principal de la cadena, se aplicará, pero cuando cierta IP está en esta lista blanca, laexec
acción no se aplicará. El archivo puede estar vacío, pero debe crearlo (touch
).exec
action llamará a nuestro script externo. Esta acción no es disruptiva y se ejecutará cuando la regla actual regrese verdadero. Cuando se aplica esta acción, la IP remota se procesará a través de nuestros scripts.setenv
esta acción exportará ciertas variables internas=%{...}
como envvars, los nombres exportados pueden ser diferentes de los internos. Algunas variables deben exportarse manualmente, otras se exportan automáticamente, probablemente sea un pequeño error (en algunos casos, la exportación manual con los mismos nombres, por ejemplosetenv:REQUEST_URI=%{REQUEST_URI}
, causará un valor en blanco de la variable exportada).Chequeo
Supongamos que no tiene Joomla en su servidor, edite el archivo
modsecurity-uri-black.list
y agregue una línea con contenido/joomla
. Luego escriba su navegadorhttps://exemple.com/joomla
. Debería ser redirigido y bloqueado a través de Iptables. Borre los registrossudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, agregue su IPmodsecurity-ip-white.list
y vuelva a hacer el ejercicio. Ahora debería ser redirigido, pero no bloqueado.Conecte nuestros scripts con OWASP Core Rule Set 3.x
Para hacerlo, actualizaremos la acción predeterminada de las Reglas de modo de anomalía (949110 y 959100). Para este propósito, edite el archivo
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
y agregue las siguientes líneas en la parte inferior:Chequeo
No olvide reiniciar (o volver a cargar) Apache para aplicar los cambios de configuración. No olvide borrar los registros periódicamente durante las pruebas, de lo contrario puede ser bloqueado permanentemente :-)
Simular el ataque transversal del directorio:
Simular ataque de inyección SQL:
ModSecurity y archivos de registro de Apache
ModSecurity tiene un poderoso mecanismo de registro. Según la directiva
SecGuardianLog
, proporciona una fuente de registro especialmente diseñada para trabajar con scripts externos.Archivos de registro de ModSecurity ► Fail2Ban ► Iptables
Es posible configurar Fail2Ban para el análisis de datos de los archivos de registro de Apache.
modsec_audit.log
es probablemente la mejor opción, pero vea también las secciones de las que hablamosSecGuardianLog
.Tenga cuidado de que
SecAuditLogRelevantStatus
en/etc/modsecurity/modsecurity.conf
se comente. De lo contrario, todos los que reciban una página de error 404 serían bloqueados por fail2ban.Actualmente Fail2Ban no está implementado de ninguna manera en este proyecto.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Instalación y configuración dentro de las circunstancias actuales
Descargar
httpd-guardian
y hacerlo ejecutable:Lea las líneas
98-119
para ver cómo se conecta el script con nuestro script WSAS.Aplique el siguiente cambio dentro de la configuración de Apache (
/etc/modsecurity/modsecurity.conf
), luego reinícielo:Chequeo
Para probar el script, desactive ModEvasive (
sudo a2dismod evasive
no olvide habilitarlo más tarde) y reinicie Apache. Luegotail
el registro ejecutivo:Y desde otra instancia, realice un ataque DoS, por ejemplo, use
ab
de esta manera:ModSecGuardianLog ► Análisis personalizado ► WSAS ► Iptables
Aquí se presenta un script simple, llamado
httpd-custom-analyze.bash
, que no es algo especial, pero podría ser un buen ejemplo. Sus características se describen dentro del cuerpo del script.Instalación y configuración
Descargar
httpd-custom-analyze.bash
y hacerlo ejecutable:Aplique el siguiente cambio dentro de la configuración de Apache (
/etc/modsecurity/modsecurity.conf
) y reinícielo:El script llamará a WSAS cuando se alcance el umbral: lea la línea
86
y35
.Para que ambos
httpd-
scripts funcionen simultáneamente, editemodsecurity.conf
y canaliceSecGuardianLog
a ambos.Para realizar una prueba, siga los consejos de la sección anterior.
fuente
Me doy cuenta de que pa4080 dio una respuesta detallada y probablemente muy útil para ocuparse de todo esto por su cuenta. Si bien resolver los problemas por su cuenta puede sentirse bien, esto también puede llevar mucho tiempo .
fuente