Cómo prevenir ataques de fuerza bruta a los servicios de WordPress (y similares) alojados detrás de su firewall
Resolution
Problema:
Cuando está hospedando servicios vulnerables a ataques de fuerza bruta a formularios de inicio de sesión Web, no es fácil detectar estos ataques a menos que estén inundando el servidor detrás del cortafuegos. Además, otros controles y características del cortafuegos de Palo Alto Networks pueden evitar ataques. Sin embargo, si el ataque no es demasiado agresivo pero persistente, entonces podría no ser bloqueado por otros controles.
El diagnóstico de los ataques en los registros de cortafuegos por sí solo puede ser difícil para algunos servicios como WordPress, porque un formulario de inicio de sesión responde con un código de estado http 200 (OK), independientemente de si el inicio de sesión fue exitoso o no; la única diferencia es que el inicio de sesión exitoso redirige al usuario después a las páginas de administración. Pero la respuesta inicial para el éxito o el fracaso es siempre el código de Estado HTTP 200. Obtener la misma respuesta para el éxito y el fracaso significa que no podemos distinguir un bien de una mala respuesta, sin embargo, si vemos intentos posteriores en registros de tráfico, donde la misma fuente IP accede a una URL que contiene una cadena ' WP-Logon ' dentro de un tiempo relativamente corto intervalo, podemos estar bastante seguro de que alguien está fallando a entrar en el sitio web de WordPress y volver a intentarlo. Si son muy persistentes y siguen tratando durante horas y horas, lo más probable es que es un ataque de fuerza bruta contra su instalación de WordPress que no está siendo bloqueado por los controles convencionales.
Una solución en firmas personalizadas
Introduzca firmas personalizadas: configuremos esto para que podamos bloquear cualquier dirección IP de origen que intente más de 5 inicios de curso en 20 segundos — un valor arbitrario elegido con poca experiencia — ajuste de acuerdo a sus necesidades y experiencia. Mi enfoque sería el de ajustar esos valores a cualquier cosa que no impida que demasiados usuarios habituales accedan a la página web diariamente.
Para evitar afectar adversamente a los usuarios, primero necesitamos detectar el propio evento de inicio de sesión y, a continuación, contar el número de intentos en el intervalo de tiempo designado. Esto se puede hacer en dos pasos: mediante la creación de una firma base primero para detectar el evento de inicio de sesión y, a continuación, crear una firma combinada que cuente los impactos repetitivos de la firma base dentro de un intervalo de tiempo determinado (5 logons en 20 segundos).
Una solución rápida y descargable
Sólo tiene que descargar archivos adjuntos desde la parte inferior de este documento e importarlos en el cortafuegos. Para importar, inicie sesión en WebGUI, seleccione la ficha objetos y, a continuación, examine el panel izquierdo para objetos personalizados > vulnerabilidad. En la esquina inferior izquierda de la página, haga clic en ' importar. ' A continuación, abra los archivos y ajuste los valores según sea necesario y commit. Sigue leyendo para averiguar qué puedes ajustar y por qué.
Creación de una firma base
Para empezar a crear firmas, inicie sesión en la GUI web del cortafuegos y, en la ficha objetos, examine el panel izquierdo en objetos personalizados > vulnerabilidad. En la esquina inferior izquierda de la página, haga clic en agregar y sigamos creando una firma personalizada.
Ficha Configuración
Configure lo siguiente:
- ID. de amenaza: número arbitrario entre 41000 y 45000 — elegí 43434.
- Nombre: WordPress-BF-base (opción arbitraria)
- Severidad: informativo — esto es importante. Desea que la firma base sea de gravedad informativa o baja porque normalmente tendría acción ' alerta ' sobre la gravedad baja/informativa y no ' bloquear ', como lo haría en niveles de severidad media/alta/crítica. No queremos seleccionar ' bloquear ' porque una sola instancia de Visiting WP-Logon también desencadenará esta vulnerabilidad base. En su lugar, crearemos una firma combinada con alta severidad que se desencadenará mediante desencadenadores repetitivos de esta firma base de la misma fuente IP dentro de un período corto.
- Dirección: ambos.
- Acción predeterminada: alerta — como ya se mencionó, no queremos bloquear a todos los que golpeen esta regla, sólo aquellos que lo golpean repetidamente desde la misma dirección IP de origen en el corto intervalo de tiempo.
- Sistema afectado: cliente y servidor
Ficha firma
Necesitamos configurar los siguientes elementos:
Elija ' estándar ' y haga clic en Agregar para configurar los detalles de la firma, como:
Estándar: WP-Logon-Failure (nombre arbitrario, éste es uno mismo-descriptivo).
Ámbito: sesión — Estamos reconociendo una sesión http consistente en dos transacciones — la primera es una solicitud HTTP de URL que contiene ' WP-login ' en su ruta, mientras que la segunda transacción es una respuesta HTTP con el código de estado 200.
Coincidencia de condición ordenada: sí — esperamos que esta sesión consista en transacciones que están en un determinado orden (la respuesta siempre es causada por la petición).
Primera condición
Haga clic en ' Agregar o condición ' para agregar la primera condición y configure:
Operador: patrón Match — usaremos el patrón regex para capturar la cadena ' WP-login ' en la solicitud de URL.
Context: http-req-URI-path — lo coincidiremos dentro de la ruta URL de la solicitud HTTP.
Patrón: wp\-login — necesitamos usar el signo de escape "-" con barra invertida. Necesitamos un mínimo de 7 caracteres para emparejar; Si tiene una URL personalizada para WP-Logon o está emparejando algún otro servicio Web, cambie esto en consecuencia. Aquí encontrará más referencias sobre creación de patrones y regex .
Segunda condición
Haga clic en ' Agregar o condición ' para agregar la segunda condición y configure:
Operador: igual a
Contexto: http-RSP-Code
Valor: 200 — buscamos una respuesta HTTP con un código de estado 200 (OK).
Creación de una combinación de firmas
Ahora que hemos creado nuestra firma base, vamos a proceder y crear una combinación de firmas. Haga clic en agregar de nuevo en la esquina inferior izquierda de la pantalla para comenzar con la configuración.
Ficha Configuración
Necesitamos configurar lo siguiente:
- IDENTIFICACIÓN de la amenaza: número arbitrario entre 41000 y 45000, elijo 43435 porque anterior era 43435:)
- Nombre: WordPress-bruta (opción arbitraria)
- Severidad: critica — esto es importante, desea que esta firma tenga una severidad alta o crítica, ya que estamos detectando intentos de fuerza bruta para irrumpir en sus servicios.
- Acción predeterminada: bloquear IP: se definirá aún más esta acción.
- Rastrear por: Source — bloquearemos la dirección IP de origen, no queremos bloquear el destino en este caso porque ese es nuestro servidor dentro del firewall. La regla base anterior utilizó una idea de una "sesión pedida" que tenía primera transacción de la petición para WP-Logon y la respuesta de 200 a ella; por lo tanto la fuente de la sesión es atacante externo.
- Duración: 60 — esta es la duración de cuánto tiempo queremos que este bloque se lleve a cabo, hasta una hora (3600 segundos). Mientras que nuestra demostración impide que la IP de origen se conecte sólo durante 60 segundos, en la configuración estricta en la producción que podría elevar esto a 3600 segundos; Esto debería ser suficiente para desalentar a cualquier atacante-podrían intentar romper forzar sólo 5 contraseñas por hora.
- Dirección: ambos
- Sistema afectado: servidor
Ficha firmas
Ahora necesitamos correlacionar esto con nuestra firma base. En esta ficha, elija:
Firma: combinación
y proceda a configurar las subpestañas:
Firmas combinadas
ID. de amenazas: haga clic en ' Agregar o condición ' y escriba 43434 (o cualquier identificador de amenaza que haya elegido para su firma base).
Atributo Time
Número de hits: 5 por 20 segundos — esta es la parte final donde estamos estableciendo valores que desencadenarán nuestra firma base. Esto se puede ajustar en función de su experiencia. Puedes contar cualquier cosa entre 1-255 Hits dentro de 1-3600 segundos.
Criterios de agregación: Source: se contarán los desencadenadores por dirección IP de origen.
Detalles adicionales
Actualmente, Threat ID 37480 en la lista de vulnerabilidades es pan Signature para WordPress login; también es de severidad informativa y puede ser utilizado como la firma base en el ejemplo anterior. Este artículo debe traerle valor en el aprendizaje de cómo crear y personalizar cualquier firma, en caso de que tenga URLs personalizadas de inicio de sesión o si está utilizando algún otro servicio similar al caso descrito anteriormente.
Conclusión
Su configuración final mostraría dos vulnerabilidades personalizadas para ayudarle a evitar ataques de fuerza bruta al sitio de WordPress alojado detrás de su firewall. Sin embargo, con un poco de retoque, también puede proteger un montón de servicios diferentes, mitigar algunos trabajos de WAF dedicados y ofrecer un valor adicional más allá de firmas regulares.
Si te gusta la idea de crear firmas personalizadas para tu dispositivo, por favor visita nuestras páginas de la comunidad para firmas personalizadas.