En este foro quisiera que tratemos acerca de la seguridad en servidores
web, como sabemos es de los principales servidores con los que en
algún momento me imagino todos hemos trabajado, al estar expuesto de manera directa con los usuarios que utilizan el servicio que este nos brinda son más recurrentes a ataques y por ende a exposición pública (imagen empresarial) si se llegase a perder control del mismo, a continuación detallo algunas observaciones que considero se deben tener muy en cuenta desde dos puntos de vista:
De forma General
1. Mantener actualizada la versión de nuestro Servidor Web
(Apache, IIS, Nginx, entre otros), además de nuestro sistema operativo. 2. Administración de puertos controlada, deshabilitar lo que no se utilice. 3. No confiar en las configuraciones por defecto. 4. Esconder las versiones de nuestro servidor. 5. Definir los Timeout acordes a políticas de uso de las aplicaciones. 6. Archivos de configuración deben estar restringidos y no expuestos de forma pública. 7. Administrar usuarios con permisos y privilegios bien definidos. 8. Establecer políticas para la creación y actualización de contraseñas seguras. 9. La ejecución de aplicaciones o paquetes debe estar debidamente controlada y en ejecución con privilegios mínimos. 10. Lo más recomendable es que se coloque un Servidor que va a estar expuesto a una cantidad considerable de peticiones (Páginas Web, Servicios, entre otros) detrás de un firewall de frontera, permitiendo así que éste filtre las peticiones directamente y no pasen directo hacia el servidor web, por medio de este podremos mitigar diversos ataques entre ellos los conocidos como denegación de servicios (DoS) y denegación de servicios distribuidos (DDoS). 11. Los firewall que protejan al Servidor web pueden ser implementados a nivel de Hardware (Cisco, Sonicwall, Fortigate, etc) o Software (Netfilter, Pfsense, Comodo, etc). 12. Mantener copias de seguridad, snapshots de tal forma que podamos recuperar la información o volver a restablecernos a un punto seguro.
Desde el punto de Vista del Desarrollador Web:
Al momento de configurar un servidor web con todas las seguridades del caso no termina todo, es importante que los sistemas, aplicaciones o módulos que se desarrollen y alojen en el mismo sean seguros y esto tiene que ver directamente con la forma en que están programados, para ello detallo unas características que desde mi punto de vista como desarrollador se deben tomar en cuenta:
1. Es primordial tener un control de las entradas y salidas de
información, los sistemas no pueden aceptar cualquier información de entrada ya que su salida no será la esperada (programada). 2. Existen dos ambientes de desarrollo, el de producción y el de pruebas, toda aplicación que se esté desarrollando puede tener activado los mensajes de error y excepciones con la mayor cantidad de información que permita al desarrollador conocer cuál es el error pero al colocar el sistema en producción al usuario final, todos estos mensajes deben ser específicos y no contener información que pueda comprometer el sistema tales casos como versiones de lenguaje de programación, bases de datos, etc. 3. En toda aplicación es importante dependiendo de su grado de manipulación de información manejar un login de usuarios con un respectivo captcha de seguridad lo que me puede ayudar contra un ataque de fuerza bruta. 4. La información se filtra antes del envío y en el envío de formularios lo que permite que en la ejecución del script las validaciones configuradas logren detectar código malicioso y bloqueen su ejecución total, es recomendable utilizar formularios con método de envío tipo POST ya que vía GET son mucho más fáciles de que el atacante conozca la estructura de la URL que receptara nuestra aplicación. 5. Todo sistema que al realizar consultas a la base de datos dependiendo del lenguaje debe filtrar sus variables antes de ejecutar directamente en una sentencia sql, es recomendable utilizar procedimientos almacenados para dejar así la carga y validación a la base de datos, para la lectura de datos es recomendable usar vistas. 6. La información que se almacene con respecto a passwords, credenciales, tarjetas de crédito deben guardarse cifradas de tal forma que si un atacante consigue obtener accesos la información no sea visible en “texto claro”. 7. Las validaciones en una aplicación deben realizarse desde el momento que el usuario comienza a digitar valores en los campos de un formulario (javascript, jquery, etc), si logra superar estas validaciones un segundo paso es validar nuevamente estos datos desde el lado del servidor (php, java, python) para comprobar definitivamente si son permitidos, con esto se pueden detectar ataques de sql inyection, xss entre otros. 8. El manejo de protocolo HTTPS es una prioridad ya si se utiliza HTTP mediante un análisis de trafico de una red entre un usuario hacia el servidor web, el atacante podría capturar sus credenciales de acceso. 9. Si se utiliza apache se puede configurar el firewall de aplicación ModSecurity.
Si desconocemos varias de las configuraciones de un servidor web
inicialmente podemos usar herramientas como metasploit, nessus, nikto, entre otras que existen que proporcionan información acerca de las vulnerabilidades que podamos tener en nuestro servidor y de esta forma irlos corrigiendo.
Inteligencia artificial: Lo que usted necesita saber sobre el aprendizaje automático, robótica, aprendizaje profundo, Internet de las cosas, redes neuronales, y nuestro futuro
Excel para principiantes: Aprenda a utilizar Excel 2016, incluyendo una introducción a fórmulas, funciones, gráficos, cuadros, macros, modelado, informes, estadísticas, Excel Power Query y más