A qué nos enfrentamos
Para el año 2025 se proyecta que los daños relacionados con ataques informáticos llegarán a los 10,5 trillones de dólares según un estudio realizado por CyberSecurity Ventures. Se espera además que para ese mismo año se dupliquen los ataques aprovechando las vulnerabilidades del IoT (Internet of Things).
En el informe sobre el estado de la ciberseguridad en España, publicado por Deloitte, podemos ver como en el año 2021 aumentaron en un 26% los incidentes respecto al 2020. Pero además el 94% de las empresas consideradas en el estudio ha sufrido un incidente en el 2021.
La diana
Toda aplicación web puede tener una serie de vulnerabilidades que pueden ser explotadas por ciberdelincuentes o malware provocando la pérdida, destrucción o daño de datos y del mismo software.
Los chatbots ahora también son blanco de ciberataques, puesto que muchos de ellos tienen acceso a información sensible, como los datos privados de los clientes. La aprobación del GDRP en la UE para garantizar la protección y privacidad de los datos de los usuarios, pone en relieve la importancia del tratamiento de los datos en los sitios web. Es responsabilidad legal de los propietarios de los sitios asegurarse que los datos se recopilan y procesan de manera adecuada, utilizando medidas de seguridad apropiadas para proteger los datos contra el procesamiento o acceso no autorizado.
No estamos solos
Existen varios organismos que se encargan de dar a conocer las nuevas amenazas y la forma en que podemos protegernos de ellas. En España el INCIBE (Instituto Nacional de Ciberseguridad) es la institución por referencia, también el CCN (Centro Criptológico Nacional con su servicio CERT cuyas iniciales representan la Capacidad de Respuesta a incidentes de seguridad de la información. En la Unión Europea se cuenta con la ENISA (Agencia de la Unión Europea para la ciberseguridad) que además de informar sobre las nuevas amenazas realiza programas de certificación para mejorar la fiabilidad de todo lo relacionado a las tecnologías de la información. A nivel mundial está la OWASP (Open Web Application Security Project) es una fundación sin ánimo de lucro que trabaja para mejorar la seguridad del software.
Existen también comunidades especializadas, suelen ser las primeras en reportar los ataques y vulnerabilidades de aplicaciones web, entre ellas están la CISO: Meaningful Metrics en el que además de dar recomendaciones también se encargan de comparar métricas en la industria. También está la Advanced Persistent Threats (APT), es un foro privado en el que se discuten temas sobre la detección y prevención de ataques. Grupos como Todo sobre Ciberseguridad que dan pautas sobre la correcta implantación de sistemas siguiendo la norma ISO 27001.
Top 10 de los riesgos asociados a los chatbots y aplicaciones web
En un estudio que se realizó en el año 2021 por la OWASP, se determinó que los mayores riesgos de seguridad para cualquier aplicación web son los siguientes:
1. Control de acceso roto
Existe una falla o ausencia de algún mecanismo de control de acceso que sólo permita a los usuarios acceder a determinados recursos, dependiendo de los permisos establecidos. Entre las vulnerabilidades asociadas a este riesgo están el CORS (configuración incorrecta del intercambio de recursos de origen cruzado) y el CSRF (falsificación de solicitud del lado del cliente). En la mayoría de los casos, esta falla puede generar acceso y hasta la alteración de datos confidenciales.
2. Falla de encriptación
Este riesgo está vinculado con la falta de validación del certificado del servidor, también con que algunos datos están siendo transmitidos sin encriptar o se utilizan cifrados poco seguros, como funciones hash o algoritmos de cifrado simétrico.
3. Inyecciones
Las más famosas son las inyecciones sql (structured query language, es el lenguaje utilizado en las base de datos estructuradas) en la que el usuario provee al chatbot de algunos datos que van en conjunto con el contenido malicioso. En el backend (en diseño de software es la parte encargada del procesamiento de datos y la lógica) se accede a la base de datos y se ejecuta un comando a través del cual el ciberdelincuente puede acceder a todos los datos privados de la base de datos, modificarlos y hasta eliminarlos.
4. Diseño inseguro
En el diseño de nuestros chatbots o aplicaciones web se debe considerar las posibles amenazas para que nuestro código sea robusto y pueda resistir los ataques conocidos.
5. Mala configuración de la seguridad
Entre ellas la falta de medidas de seguridad apropiadas en cualquier parte de la aplicación, el software no está actualizado o los parámetros de seguridad no tienen valores seguros.
6. Componentes vulnerables o desfasados
Estos riesgos ocurren por ejemplo cuando el chatbot está desactualizado, no tienen soporte o hay incompatibilidad entre las actualizaciones de las librerías que usas.
7. Fallas de autenticación y de identificación
Estas fallas permiten ataques de fuerza bruta, puesto que se admiten claves débiles, se guardan los datos sin encriptar o con un hash débil. También están vinculadas a la falta de autenticación por múltiples factores, las sesiones de usuario o tokens de autenticación (se pueden ver como una clave electrónica que permite a un usuario autenticar y probar su identidad mediante el almacenamiento de algún tipo de información personal) no son invalidados después del cierre de sesión o después de un período de inactividad.
8. Fallas de integridad de la data y del software
Nos referimos a las fallas relacionadas con el código y la infraestructura. Por ejemplo: si tu aplicación utiliza librerías externas de fuentes no confiables.
9. Fallas en el monitoreo y seguridad del logging
Este tipo de riesgos está vinculado con la falta de registros de eventos asociados al chatbot, a las API’s (Interfaces de programación de aplicaciones) o cuando la aplicación web no es capaz de detectar y alertar de ataques activos en tiempo real.
10. Falsificación de peticiones del lado del servidor
Estos riesgos ocurren cada vez que una aplicación web obtiene un recurso remoto sin validar la URL. Permite al atacante obligar a la aplicación a enviar una solicitud manipulada a otro destino. El atacante podría acceder al almacenamiento de metadatos (conjunto de datos que describen el contenido informativo de un recurso) de los servicios en la nube, los atacantes también pueden acceder a archivos locales o servicios internos para obtener información confidencial.
Al frente en la batalla
Para prevenir los riesgos de seguridad nosotros recomendamos:
Comprobar la implementación de un correcto control de acceso, con sus roles y permisos para acceder a los recursos. Denegar el acceso a recursos por defecto, a menos que desees que sean públicos y poseer un paso de verificación adicional que asegure el ingreso sólo de usuarios autorizados.
Además es recomendable usar algoritmos de encriptación asimétrica, son aquellos en el que se necesitan dos claves (una pública y una privada) para encriptar y desencriptar, ambas pertenecientes al usuario que recibe la información, evitando la necesidad de enviar la clave privada en ninguno de los mensajes. Este tipo de encriptación se suele usar para la autenticación de usuarios, para las firmas digitales, navegación encriptada, transacciones de criptomoneda y para compartir claves de criptografía simétrica.
También recomendamos mantener los datos separados de los comandos y consultas. Así mismo es importante recordar filtrar, limpiar o validar los datos recibidos por parte de los usuarios que son susceptibles a este tipo de ataques. Hay que tener cuidado de sólo mostrar mensajes de error genérico y almacenar los datos confidenciales de forma segura aplicando algún tipo de encriptación a los mismos.
Así mismo es una buena práctica mantener la actualizaciones sobre todas las relacionadas a vulnerabilidades al día, eliminar o no instalar características no utilizadas, revisar los permisos de almacenamiento en la nube y procesos automáticos para verificar la eficacia de los ajustes en todos los entornos.
A la hora de implementar una autenticación de multifactor, es buena idea seguir las recomendaciones del NIST (National Institute of Standards and Technology) en cuanto a la complejidad y cambios de contraseñas.
Adicionalmente
Aconsejamos usar mecanismos para verificar que la data viene de la fuente correspondiente y asegurarse de la utilización de repositorios seguros, verificar que no se envien datos sin firmar o sin encriptar a clientes sin antes hacer una verificación de integridad o la verificación de la firma.
Siempre es buena idea denegar por defecto en las políticas relacionadas con el firewall, reforzar con una lista blanca los esquemas de las URL, puerto, destino y deshabilitar redirecciones HTTP.
Es importante seguir guías como la de la OWASP y los principios de Michael Howard y David LeBlanc para la implementación de un diseño seguro de chatbot o aplicación web:
1. Minimizar la superficie de ataque
Cada vez que un programador agrega una nueva feature a una aplicación se incrementa el riesgo de seguridad. Una forma de disminuir este riesgo es limitando las funciones a las que los usuarios de la aplicación tienen acceso.
2. Establecer la seguridad más alta posible por defecto
En otras palabras que un nuevo usuario tenga que realizar varios pasos para obtener mayores privilegios y quitar medidas de protección adicionales.
3. El principio de menos privilegios
Un usuario debe tener la mínima cantidad de privilegios posibles para hacer una tarea determinada. Por ejemplo: el usuario de una red social sólo debe poder alterar sus posts e información, más no debe tener el privilegio para eliminar los posts o información de otros usuarios.
4. El principio de defensa en profundidad
Lo mejor para que una aplicación sea segura es tener múltiples controles de seguridad para evitar de forma distinta los distintos riesgos.
5. Fallas seguras
Este principio establece que si una aplicación falla debe ser de forma segura, una falla no puede dar acceso a información sensible de la base de datos o de los registros.
6. No confiar en los servicios
Siempre se debe verificar la validez de los datos de los servicios de terceros y solo dar los permisos necesarios dentro de la aplicación.
7. Separación de tareas
Un administrador no debería poder hacer las mismas tareas que un usuario regular de la aplicación y viceversa.
8. Evitar la seguridad por oscuridad
Deben haber suficientes controles de seguridad en tu aplicación sin tener que esconder funcionalidades importantes o el mismo código fuente.
9. Mantener la seguridad simple
Evitar mecanismos tan complicados que incrementen los riesgos por errores.
10. Arreglar fallas en la seguridad de forma correcta
Si hay una falla de seguridad se debe determinar la raíz de la misma, todos los sistemas afectados, después debe ser reparada y probada.
Probando nuestras defensas
Otro elemento muy importante a considerar son las pruebas de seguridad a nuestro chatbot o aplicación web. Para plantear estas pruebas lo primero que debemos analizar es:
¿Qué necesita ser verificado? Debe estar definido qué parte del código, del sistema y de la aplicación en sí se necesita probar.
¿Cuáles herramientas vamos a necesitar para hacer estas pruebas? Existen escáneres de terceros que pueden ser útiles para evaluar las vulnerabilidades del chatbot. Usar proxies para pruebas de usuarios autenticados. Incluso existen herramientas para probar el código de la aplicación.
Probar las vulnerabilidades más importantes, las que menciona la OWASP en su top 10.
Verificaciones manuales a los mecanismos de inicio de sesión y posibles manipulaciones a tokens, cookies y contraseñas. Debilidades de la lógica que puedan ser explotadas, etc.
Hacer un informe con los hallazgos y difundirlo al personal adecuado.
Conclusión
Es muy importante estar conscientes de las debilidades de nuestros chatbots o aplicaciones web. Para ello es buena idea que verifiquemos a diario los foros, grupos, comunidades, entidades y organizaciones especializadas en ciberseguridad para estar al día con las nuevas amenazas.
La mejor forma de prevenir riesgos es implementar un diseño seguro, recordemos un poco los principios para implementarlo: minimizar la superficie de ataque, establecer la seguridad más alta posible por defecto al crear un nuevo usuario, mientras menos privilegios se le puedan dar a un usuario mejor, establecer múltiples medidas de seguridad, las fallas no deben dar información innecesaria, no confiar en servicios externos, diferenciar el tipo de tareas por usuario, establecer los suficientes controles de seguridad, mantener la seguridad simple y arreglar fallas en la seguridad de forma correcta.
Además desarrollar pruebas para nuestro chatbot para verificar que no seamos blanco de los ciberdelincuentes y sobre todo no dejar de testear ante nuevas amenazas.
Si quieres incluir un chatbot seguro en tu sitio o aplicación web no dudes en contactarnos a través de nuestra página.