5.2 Seguridad en la programacion


La mayoria de las personas piensan que la seguridad es cosa de juego y que muchas veces la inseguridad de software es un problema que aqueja solo a los desarrolladores de software. Pero la verdad, hoy en dia la mayoria de las aplicaciones, si no es que todas tiene un bug o una vulnerabilidad por donde se puede acceder y escalar privilegios o modificar informacion confidencial. Estas son las  fuentes de vulnerabilidades mas comunes en el software:

1. Cambios en el ambiente de ejecución: Los parches, los cambios en la configuración y variables de entorno alrededor de las aplicaciones son elementos críticos para mantener una ejecución adecuada y controlada de las rutinas y acciones previstas en el software. Al descuidar este aspecto, es probable involucrar efectos de borde o condiciones de excepción no previstas que comprometan no solamente un módulo de la aplicación sino el sistema de información mismo.

2. Desbordamientos y chequeos de sintaxis: Dos elementos importantes en la revisión y evaluación de software. Por un lado la evaluación de los desbordamientos bien sea de memoria o de variables específicas dentro de un programa y por otro lado, la verificación de buen uso de los comandos o palabras reservadas en el lenguaje de programación, que permitan al programador un uso adecuado y eficiente de las estructuras. Si este aspecto no se considera con el rigor necesario, se estará comprometiendo la integridad del ambiente de ejecución de la aplicación.

3. Convenientes pero peligrosas características del diseño del software: Esta fuente de vulnerabilidad nos presenta funcionalidades que son deseables en el software para aumentar la versatilidad de uso de las aplicaciones. Entre estas tenemos herramientas de depuración o debugging, conexiones remotas en puertos especiales, entre otras, las cuales ofrecen importante elementos a los programadores y usuarios, pero que generalmente abren posibilidades de ingresos no autorizados que comprometen la integridad de sistemas y socavan la confianza del usuario frente a la aplicación.

4. Invocaciones no controladas: Este hacemos referencia a un inadecuado manejo de errores o excepciones en las aplicaciones o exceso de privilegios de ejecución, los cuales se manifiestan en comportamientos inesperados del software que generalmente ofrecen mayores privilegios o accesos adicionales a la información del sistema. En este sentido, el control adecuado de interrupciones, mensajes de error y entorno de ejecución de los programas se vuelve crítico al ser éstos elementos los que definen la interacción del software con el usuario final y su relación con el entorno de ejecución.

5. Bypass a bajo nivel: Las implicaciones de esta fuente de vulnerabilidades hace referencia al aseguramiento que la aplicación debe tener al ser invocada o ejecutada en un ambiente computacional seguro. El programador debe fortalecer y asegurar una manera autorizada de ingreso a la aplicación por parte del usuario, estableciendo mecanismos de monitoreo y control que velen porque esto se cumpla. El sobrepasar un control de acceso a un objeto, bien sea a través de permisos deficientemente otorgados, artificios que interrumpan la normal ejecución (contraseñas de BIOS) o por la manipulación de la memoria de ejecución de la aplicación constituye un atentado directo contra la confiabilidad e integridad del software.

6. Fallas en la implementación de protocolos: Los elementos de seguridad mencionados en este apartado, hacen referencia a las medidas de seguridad en redes. Si bien, los protocolos utilizados para transmisión y control de datos, presentan múltiples fallas, éstas con frecuencia no son consideradas dentro del proceso de implementación de una aplicación. En este sentido, sabemos que las aplicaciones que se ejecutan sobre TCP/IP tienen inherentes las fallas de éste conjunto de protocolos, por tanto es menester del programador establecer junto con el encargado de la seguridad informática, analizar los posibles requerimientos de seguridad necesarios para que la aplicación funcione sobre un ambiente de red que brinde mayores niveles de seguridad y control de tráfico.

7. Fallas en software de base: Todas las aplicaciones finalmente se ejecutan bajo la supervisión de un software de base o sistema operacional. Generalmente cuando se desarrollan aplicaciones, las condiciones o aseguramiento del software de base, no es condición para la adecuada ejecución de aplicaciones. Nada ganamos con aplicar y efectuar un amplio espectro de pruebas y controles, cuando el ambiente de ejecución o el software base no ha pasado por una valoración y afinamiento necesario para asegurar un ambiente de ejecución estable y seguro. En este punto, se llama la atención tanto a proveedores como a programadores, donde el trabajo conjunto debe ser una constante para incrementar los niveles de seguridad y disminuir las vulnerabilidades frecuentes inherentes al arte y la ciencia de programar.

¿Pero que pueden hacer los programadores?

Primero que nada es recomendable aprender sobre ingenieria de software, no solo para la seguridad si no para el buen funcionamiento y/o optimizacion del codigo fuente.

Algunas reglas paa una programacion segura son:

1. Menor Privilegio: Este principio establece que un sujeto sólo debe dar a un objeto los privilegios que necesita para completar sus tareas asignadas.

2. Economía y simplificación de mecanismos de seguridad: Este principio establece que los mecanismos de seguridad que se establezcan deben ser tan sencillos como sea posible.

3. Configuraciones por defecto seguras: Este principio comenta que a menos que un sujeto haya otorgado acceso explícito a un objeto, éste no debería tenerlo. Es decir, todo lo que no está estrictamente permitido es prohibido.

4. Mediación completa: Este principio afirma que todos los accesos a un objeto(s) deben ser verificados para asegurarse de que cuentan con el permiso para hacerlo.

5. Diseño abierto: Este principio establece que la seguridad de un mecanismo no debería depender del secreto o confidencialidad de su diseño o implementación.

6. Privilegios condicionados: Este principio dice que se deben mantener los privilegios necesarios en diferentes momentos, en diferentes rutinas o programas. Es decir, los privilegios no deben ser estáticos para los programas o rutinas en el tiempo y en ejecución.

7. Menor mecanismo común: Este principio comenta que deben existir el menor número de recursos compartidos entre sujetos u objetos.

8. Aceptación psicológica: Este principio comenta que el mecanismo de seguridad que se establezca para un objeto no debe sugerir mayor dificultad a la que si el mecanismo no estuviese presente. En otras palabras, el mecanismo de seguridad deber ser fácil de usar.

No hay comentarios:

Publicar un comentario