Enfocándonos en el desarrollo de software, una vulnerabilidad se puede definir como un fallo de programación, configuración o diseño que permite a los atacantes, modificar o alterar el comportamiento normal de un programa, realizando alguna acción maliciosa como puede ser la modificación de información sensible o confidencial, interrupción o destrucción e incluso también se puede incluir la toma del control completo del software.
Podemos dividir las fuentes de vulnerabilidades en el software en tres tipos que son:
Fallos en la implementación
Son fallos que provienen del desarrollo del software y que no se tomaron en cuenta durante la fase del diseño.
Algunos ejemplos son el desbordamiento de búfer, path traversal, XSS, inyección SQL, etc.
Fallos en el diseño
Frecuentemente encontramos en el software o hardware vulnerabilidades de diseño o debilidades que pueden ser utilizadas para realizar un ataque. Cualquier ausencia, deficiencia o debilidad de algún requisito de seguridad será una vulnerabilidad de diseño en la aplicación, y que puede ser aprovechada por el atacante.
Por ejemplo, TELNET no fue diseñado para trabajar en entornos hostiles, ya que para eso se ha diseñado SSH, de igual forma, una vulnerabilidad de diseño puede ser el uso de protocolos de cifrado obsoletos o no actualizados, como SSL 2.0, 3.0, etc.
Fallos en la configuración y operación
La instalación del programa o software con las configuraciones por defecto implica por lo general la activación de servicios que no se utilizan, pero que pueden representar vulnerabilidades que comprometan el dispositivo. También podemos encontrar fallas en el desempeño de los procedimientos de monitorización, auditoría y gestión de logs, una mala gestión en la seguridad de las configuraciones, mala gestión en los permisos y roles de usuarios, vulnerabilidades en los procedimientos de backup y recuperación, etc.
Casi todos los problemas que se producen en un software provienen de fallos de implementación y diseño, pero solamente algunos resultan ser vulnerabilidades de seguridad. Un fallo debe tener algún impacto o característica relevante para ser considerado un error de seguridad, es decir que tiene que permitir a un atacante realizar la explotación de dicho fallo, permitiendo un ataque exitoso que comprometa el sistema.
¿Cómo lograr que un software sea menos inseguro?
Para desarrollar un software que se considere seguro, debemos de enfocarnos en algunas propiedades específicas de seguridad, que son llamadas, esenciales y complementarias.
➥Propiedades esenciales de seguridad
Dentro de este punto encontramos la Confidencialidad, Integridad y Disponibilidad, asegurando que el software cuente con estas tres propiedades, haciéndolas cumplir en medida de lo posible.
➥Propiedades complementarias de seguridad
Dentro de las propiedades que pueden ayudar a complementar la seguridad en el software encontramos las siguientes:
➥Fiabilidad
➥Autenticación
➥Trazabilidad
➥Robustez
➥Resiliencia
➥Tolerancia
➥Autenticación
➥Trazabilidad
➥Robustez
➥Resiliencia
➥Tolerancia
Como ves, para que un software se considere seguro requiere de mucho trabajo y desarrollo, agregando en las fases del desarrollo puntos de seguridad que ayudarán a crear un software menos inseguro, lo que nos dará mayor confiabilidad de lo que se utiliza.
Es complicado que en la vida real se cumplan con todos estos puntos, pero debemos tratar de ir generando una cultura de seguridad en el desarrollo, agregando a cada fase temas enfocados en la generación de software cada vez más robusto y confiable, un trabajo complicado pero no imposible.
0 Comentarios
¿Qué te pareció esta lectura?.
EmojiNos interesa saber tu opinión. Deja un comentario.