# Hardening de Aplicaciones

El primer paso para cualquier organización debe ser crear un inventario detallado (y preciso) de las aplicaciones internas y externas. Esto se puede lograr de muchas maneras, y los equipos azules con un presupuesto limitado podrían beneficiarse de herramientas de prueba de penetración como Nmap y EyeWitness para ayudar en el proceso. Se pueden utilizar varias herramientas de código abierto y de pago para crear y mantener este inventario.&#x20;

Sin saber qué existe en el entorno, ¡no sabremos qué proteger! La creación de este inventario puede exponer instancias de "TI en la sombra" (o instalaciones no autorizadas), aplicaciones obsoletas que ya no son necesarias o incluso problemas como una versión de prueba de una herramienta que se convierte automáticamente en una versión gratuita (como Splunk cuando ya no requiere autenticación).

***

## <mark style="color:purple;">Consejos generales de hardening</mark>

Las aplicaciones que se analizan en esta sección deben reforzarse para evitar que se vean comprometidas mediante estas técnicas y otras. A continuación, se presentan algunas medidas importantes que pueden ayudar a proteger las implementaciones de WordPress, Drupal, Joomla, Tomcat, Jenkins, osTicket, GitLab, PRTG Network Monitor y Splunk en cualquier entorno.

* `Secure authentication`: Las aplicaciones deben exigir el uso de contraseñas seguras durante el registro y la configuración, y se deben cambiar las contraseñas predeterminadas de las cuentas administrativas. Si es posible, se deben deshabilitar las cuentas administrativas predeterminadas y crear nuevas cuentas administrativas personalizadas. Algunas aplicaciones admiten de forma inherente la autenticación 2FA, que debería ser obligatoria al menos para los usuarios de nivel administrador.
* `Access controls`: Se deben implementar mecanismos de control de acceso adecuados para cada aplicación. Por ejemplo, no se debe poder acceder a las páginas de inicio de sesión desde la red externa a menos que exista una razón comercial válida para este acceso. De manera similar, se pueden configurar los permisos de archivos y carpetas para denegar cargas o implementaciones de aplicaciones.
* `Disable unsafe features`: Se pueden desactivar funciones como la edición de código PHP en WordPress para evitar la ejecución del código si el servidor se ve comprometido.
* `Regular updates`: Las aplicaciones deben actualizarse periódicamente y los parches proporcionados por los proveedores deben aplicarse lo antes posible.
* `Backups`: Los administradores de sistemas siempre deben configurar copias de seguridad de sitios web y bases de datos, lo que permitirá restaurar rápidamente la aplicación en caso de una vulnerabilidad.
* `Security monitoring`: Existen varias herramientas y complementos que se pueden utilizar para supervisar el estado y los distintos problemas relacionados con la seguridad de nuestras aplicaciones. Otra opción es un firewall de aplicaciones web (WAF). Si bien no es una solución milagrosa, un WAF puede ayudar a agregar una capa adicional de protección siempre que ya se hayan tomado todas las medidas anteriores.
* `LDAP integration with Active Directory`: La integración de aplicaciones con el inicio de sesión único de Active Directory puede aumentar la facilidad de acceso, proporcionar más funciones de auditoría (especialmente si se sincroniza con Azure) y simplificar la administración de credenciales y cuentas de servicio. También reduce la cantidad de cuentas y contraseñas que un usuario deberá recordar y brinda un control detallado sobre la política de contraseñas.

Cada aplicación que analizamos en este módulo (y más allá) debe seguir pautas de fortalecimiento clave, como habilitar la autenticación multifactor para administradores y usuarios siempre que sea posible, cambiar los nombres de cuenta de usuario de administrador predeterminados, limitar la cantidad de administradores y cómo los administradores pueden acceder al sitio (es decir, no desde Internet abierto), hacer cumplir el principio del mínimo privilegio en toda la aplicación, realizar actualizaciones periódicas para abordar las vulnerabilidades de seguridad, realizar copias de seguridad periódicas en una ubicación secundaria para poder recuperarse rápidamente en caso de un ataque e implementar herramientas de monitoreo de seguridad que puedan detectar y bloquear actividad maliciosa y fuerza bruta de cuentas, entre otros ataques.

Por último, debemos tener cuidado con lo que exponemos a Internet. ¿Es realmente necesario que ese repositorio de GitLab sea público? ¿Es necesario que nuestro sistema de tickets sea accesible fuera de la red interna? Con estos controles implementados, tendremos una base sólida para aplicar a todas las aplicaciones independientemente de su función.

También debemos realizar comprobaciones y actualizaciones periódicas de nuestro inventario de aplicaciones para asegurarnos de que no estamos exponiendo aplicaciones en la red interna o externa que ya no son necesarias o que tienen fallas de seguridad graves. Por último, realice evaluaciones periódicas para buscar vulnerabilidades de seguridad y configuraciones incorrectas, así como exposición de datos confidenciales. Siga las recomendaciones de reparación incluidas en sus informes de pruebas de penetración y verifique periódicamente si hay los mismos tipos de fallas descubiertas por sus evaluadores de penetración. Algunas podrían estar relacionadas con los procesos, lo que requiere un cambio de mentalidad para que la organización se vuelva más consciente de la seguridad.

***

## <mark style="color:purple;">Consejos de hardening específicos</mark>

Si bien los conceptos generales para el fortalecimiento de aplicaciones se aplican a todas las aplicaciones que analizamos en este módulo y que encontraremos en el mundo real, podemos tomar algunas medidas más específicas. A continuación, se indican algunas:

<table data-header-hidden><thead><tr><th width="137"></th><th width="165"></th><th></th></tr></thead><tbody><tr><td>Solicitud</td><td>Categoría</td><td>Discusión</td></tr><tr><td><a href="https://wordpress.org/support/article/hardening-wordpress/">WordPress</a></td><td>Monitoreo de seguridad</td><td>Utilice un complemento de seguridad como <a href="https://www.wordfence.com/">WordFence</a> , que incluye monitoreo de seguridad, bloqueo de actividad sospechosa, bloqueo de países, autenticación de dos factores y más.</td></tr><tr><td><a href="https://docs.joomla.org/Security_Checklist/Joomla!_Setup">Joomla</a></td><td>Controles de acceso</td><td>Se puede utilizar un complemento como <a href="https://extensions.joomla.org/extension/adminexile/">AdminExile</a> para solicitar una clave secreta para iniciar sesión en la página de administración de Joomla, como<code>http://joomla.inlanefreight.local/administrator?thisismysecretkey</code></td></tr><tr><td><a href="https://www.drupal.org/docs/security-in-drupal">Drupal</a></td><td>Controles de acceso</td><td>Deshabilitar, ocultar o mover la <a href="https://www.drupal.org/docs/7/managing-users/hide-user-login">página de inicio de sesión del administrador</a></td></tr><tr><td><a href="https://tomcat.apache.org/tomcat-9.0-doc/security-howto.html">Tomcat</a></td><td>Controles de acceso</td><td>Limite el acceso a las aplicaciones Tomcat Manager y Host-Manager únicamente al host local. Si deben exponerse externamente, aplique la lista blanca de direcciones IP y configure una contraseña muy segura y un nombre de usuario no estándar.</td></tr><tr><td><a href="https://www.jenkins.io/doc/book/security/securing-jenkins/">Jenkins</a></td><td>Controles de acceso</td><td>Configurar permisos mediante el <a href="https://plugins.jenkins.io/matrix-auth">complemento Estrategia de autorización de Matrix</a></td></tr><tr><td><a href="https://docs.splunk.com/Documentation/Splunk/8.2.2/Security/Hardeningstandards">Splunk</a></td><td>Actualizaciones periódicas</td><td>Asegúrese de cambiar la contraseña predeterminada y de que Splunk tenga la licencia adecuada para aplicar la autenticación.</td></tr><tr><td><a href="https://kb.paessler.com/en/topic/61108-what-security-features-does-prtg-include">PRTG Network Monitor</a></td><td>Autenticación segura</td><td>Asegúrese de mantenerse actualizado y cambiar la contraseña predeterminada de PRTG</td></tr><tr><td>Ticket OS</td><td>Controles de acceso</td><td>Limite el acceso a Internet si es posible</td></tr><tr><td><a href="https://about.gitlab.com/blog/2020/05/20/gitlab-instance-security-best-practices/">GitLab</a></td><td>Autenticación segura</td><td>Aplicar restricciones de registro, como requerir la aprobación del administrador para nuevos registros y configurar dominios permitidos y denegados.</td></tr></tbody></table>

## <mark style="color:purple;">Conclusión</mark>

En este módulo, cubrimos un área crítica de las pruebas de penetración: las aplicaciones comunes. Las aplicaciones web presentan una enorme superficie de ataque y, a menudo, pasan desapercibidas. Durante una prueba de penetración externa, a menudo, la mayoría de nuestros objetivos son aplicaciones. Debemos entender cómo descubrir aplicaciones (y organizar nuestros datos de escaneo para procesarlos de manera eficiente), versiones de huellas, descubrir vulnerabilidades conocidas y aprovechar la funcionalidad incorporada.&#x20;

Muchas organizaciones obtienen buenos resultados con la aplicación de parches y la gestión de vulnerabilidades, pero a menudo pasan por alto cuestiones como credenciales débiles para acceder a Tomcat Manager o una impresora con credenciales predeterminadas para la aplicación de administración web donde podemos obtener credenciales LDAP para usar como punto de apoyo en la red interna. Las tres evaluaciones de habilidades que siguen están destinadas a poner a prueba el proceso de descubrimiento y enumeración de aplicaciones.

