This post is also available in: Português Español
El crecimiento de soluciones para el desarrollo de software de alta calidad es claro. Es más fácil que nunca crear una aplicación o un sistema, pero esa misma facilidad también llega a los ciberdelincuentes.
A medida que el software se vuelve más conectado y lleno de valiosos datos personales y corporativos, los ciberdelincuentes se vuelven más sofisticados. Ya no son aficionados trabajando en su propia habitación; son profesionales que viven de ello y forman parte de grandes redes clandestinas.
Además, se sabe que es prácticamente imposible desarrollar software completamente libre de fallas de seguridad. La buena noticia es que puede diseñar aplicaciones que anticipen dichas vulnerabilidades desde la primera etapa de concepción hasta el lanzamiento al mercado. Es un concepto llamado Segurity by Desing. Para actuar con esta propuesta, la idea es seguir algunos principios predefinidos durante la fase de diseño de la aplicación. De esa manera, incluso cuando aparecen errores, el daño que causan no impulsa a los atacantes a obtener todos los datos valiosos, ni genera interrupciones en el uso diario.
Para acompañar la idea de incorporar la seguridad en cada fase de la construcción de un sistema, existen principios de seguridad estándar que funcionan básicamente para cualquier tipo de solución. Seguir estos principios es fundamental para garantizar que el software sea lo más seguro posible, tanto para el creador como para el usuario.
1. Principio del Mínimo Privilegio
La idea es garantizar que las personas solo tengan acceso a lo estrictamente necesario para realizar su trabajo. Por ejemplo, quien diseñe un sistema que contenga información financiera confidencial de los clientes, es una buena práctica limitar quién puede acceder a esa información. El empleado que contesta el teléfono y programa reuniones probablemente no necesite acceder a toda la información confidencial.
Por otro lado, un administrador de cuentas probablemente necesite acceso a esta información. Pero la idea es asegurarse de que ese mismo administrador de cuentas no tenga acceso a la información de la cuenta que no administra.
Al hacer que las cuentas solo tengan los privilegios que necesitan para hacer su trabajo, se asegura que si un atacante compromete una cuenta, se minimiza la información a la que puede acceder. Esto limita el daño de ataque.
2. Principio de Separación de Funciones
La idea detrás de esta pregunta es que ninguna posición debe tener demasiada autoridad. Esto es diferente del concepto de privilegio mínimo. Si bien esto se enfoca en brindarles a las personas los privilegios que necesitan para realizar su trabajo, se trata de asegurarse de que sus demandas no sean demasiado grandes.
Cuando alguien hace un trabajo realmente grande, vuelve al punto en el que necesitará muchos permisos para hacer ese trabajo. Además, cuando alguien tiene muchos deberes en su vida diaria, significa que es susceptible de tomar decisiones equivocadas, posiblemente porque está sobrecargado.
En definitiva, nadie querría que el responsable de realizar las ventas pudiera aprobar también los descuentos. Este contribuyente tendría un incentivo para descontar el valor de venta del software y podría tomar malas decisiones sobre los descuentos para aumentar sus números de ventas. En cambio, otra persona, como un gerente, debe aprobar un descuento antes de que se complete la venta.
3. Principio de defensa en profundidad
Este es un poco diferente de los principios anteriores. Mientras que el Privilegio Mínimo y la Separación de Funciones se refieren a cómo las personas obtienen acceso al sistema, la Defensa en Profundidad se trata de evitar el acceso al sistema. La expectativa es que cualquier sistema de seguridad establecido fallará. Puede ser muy difícil sortear las defensas, pero no es imposible.
Proyectar con defensa en profundidad significa configurar sistemas que le permitirán saber cuándo falla la seguridad designada. Por ejemplo, muchos servidores de aplicaciones usan software de seguridad pero están ubicados en un solo edificio. Alguien que irrumpiera en el sitio tendría acceso físico a cada uno de los servidores. Entonces tal vez este sofisticado firewall o software de detección de intrusos sería ineficaz.
Es por eso que los centros de datos están diseñados con una serie de capas de seguridad lógicas y físicas para detectar y proteger la información.
4. Principio de falla segura
Al igual que la defensa en profundidad, el principio de seguridad contra fallas reconoce que las fallas aparecerán tarde o temprano. Para imaginar cómo un sistema puede fallar de manera segura, imagine un mecanismo de control de acceso digital. Es posible que necesite una credencial de seguridad para acceder a áreas sensibles de un edificio. Siguiendo el principio de Mínimo Privilegio, la insignia solo le da acceso a las áreas que necesita para hacer su trabajo. Pero habría que pensar en lo que sucedería en casos de cortes de luz, por ejemplo.
En un sistema que no abre, todas las cerraduras dejan de funcionar. En un sistema que falla de forma segura, todas las puertas se bloquean. El mismo concepto se aplica al diseño de software. Un sistema diseñado para fallar de manera segura solo otorga acceso a partes del sistema cuando todos los pasos del proceso se completan con éxito.
5. Principio de desing abierto
El Principio de Desing Abierto dice que la seguridad de su sistema no debe depender del secreto de su implementación. Este es un principio particularmente importante para los conceptos de seguridad, como las implementaciones criptográficas.
En términos generales, el principio de diseño seguro garantiza que el sistema esté protegido independientemente de que alguien malintencionado obtenga acceso a su código.
6. Principio de evitar la seguridad por oscuridad
Es algo similar al Desing Abierto. Tomemos el ejemplo del software que tiene codificada una combinación secreta de nombre de usuario y contraseña. Cuando se autentica, esta cuenta tiene acceso completo a todas las cuentas del sistema. La seguridad de este sistema depende de que las credenciales de esta cuenta se mantengan en secreto.
Sin embargo, con el tiempo, un número cada vez mayor de usuarios tendrá acceso a él. Algunos dejarán la empresa, y si las credenciales no son gestionadas adecuadamente por el equipo de tecnología, esto abre una brecha para los incidentes de seguridad.
Lo cierto es que la seguridad de cada aplicación depende, en cierta medida, del secreto. Después de todo, las contraseñas siguen siendo una parte fundamental de la mayoría de los esquemas de autenticación. Sin embargo, un mejor diseño para este sistema es aquel en el que no existe la cuenta con acceso completo. Y si es necesario crearlo, es importante gestionarlo adecuadamente para evitar incidentes de seguridad.
7. Principio de minimización del área de superficie de ataque
Aquí la idea es eliminar partes de una aplicación para hacerla más segura. Es algo similar a lo que ocurre con la estructura física de los centros de datos, que se ubican en salas sin ventanas. Como las ventanas son relativamente fáciles de romper, es mejor quitarlas, ya que en un centro de datos no son muy útiles.
Muchas partes del software son como ventanas. Al principio, pueden parecer interesantes, pero traen consigo la posibilidad de exponer características que conducen a errores. Por lo tanto, para minimizar el área de superficie de ataque, es importante preguntarse si un recurso en particular es realmente necesario. A veces, al rediseñar una función para simplificarla, mejora la seguridad general de la aplicación.
This post is also available in: Português Español