Diseño De Software Seguro
maicolj30 de Abril de 2013
3.616 Palabras (15 Páginas)362 Visitas
Diseño de software seguro
Manuel Dávila Segura
El software es un elemento catalogado de seguridad nacional en los países que tienen un plan
De desarrollo orientado hacia la sociedad del conocimiento. La preocupación en esos países se basa en el hecho de que la Ingeniería de software no ha logrado que los desarrollos de software
Cumplan con la característica denominada “trusworthy”, es decir, dignos de confianza. Este artículo pretende recoger una serie de especificaciones que contribuyan a que se cumpla el desarrollo de software seguro.
No es la seguridad perimetral la que preocupa en esta investigación, es el
Software en sí. Pará ello se ha consultado la estrategia de desarrollo de software de los Estados Unidos para el 2015, se resumen los planteamientos de Gary McGraw, uno de los líderes en la propuesta de metodologías de software seguro, y se hace una propuesta para incluir en el ciclo de desarrollo las etapas necesarias para lograr estos desarrollos.
Finalmente, haciendo uso de los referentes de ACM e IEEE sobre los diseños curriculares para crear programas de Ingeniería de sistemas o afines, se proponen algunos puntos importantes para incluir en los nuevos programas la formación en este tipo de competencias.
Palabras clave: Software seguro, trustworthy, diseño curricular, Ingeniería de sistemas.
1. Introducción
En los países orientados a conformar sociedad del conocimiento y que tienen en el desarrollo de software un compromiso como industria, se le considera a éste un producto de seguridad nacional. Es el caso de los Estados Unidos que en el reporte de la segunda cumbre del Centro Nacional de Software así lo presenta, en un documento llamado “Software 2015: A national software strategy to ensure U.S. Security and competitiveness” [1] Consideran que su nación es altamente dependiente de las tecnologías de la información siendo el punto central el
Software, el cual se encuentra en todos los elementos de la vida cotidiana de las personas y las organizaciones. Determinan que su país es una nación bajo riesgo de consecuencias inaceptables por las fallas del software. Estas fallas pueden crear serios problemas en varios riesgos, enumerando específicamente la infraestructura nacional, la economía, la vida de las personas, la pérdida de confianza pública, de la identidad y liderazgo.
Si bien nuestros países no se comparan con la capacidad productiva de software Sistemas 75
Que tiene Estados Unidos, es de mucha utilidad conocer esos planes, pues de todas maneras las tecnologías informáticas tienen carácter global. Siendo innegable la importancia del software, así como su penetración en la vida cotidiana se ve la necesidad de revisar el estado de la Ingeniería de software, la cual en sus 50 años de existencia aún no ha podido resolver el riesgo de que un avión se caiga por culpa de un overflow en una variable.
Vale la pena anotar que el nivel de seguridad que se necesita en el diseño de los programas va más allá de la tradicional seguridad perimetral, para entrar en el campo del diseño de las aplicaciones.
Este estudio ha contemplado las premisas de la estrategia de los Estados Unidos como referencia para entrar en una discusión de índole más local.
2. Software digno de confianza o trustworthiness Se introduce el término trusworthiness o la cultura sobre las características que debe cumplir el software para ser “trustworthy” o sea, digno de confianza. Estas características se resumen en: seguridad, confianza, fiabilidad y supervivencia. El significado de cada una de estas características se detalla a continuación.
Seguridad: se refiere a la exposición de los programas a peligros no intencionados en sus especificaciones; es decir, que no se dan por mala Ingeniería de software o malas prácticas en la programación, sino por aspectos de índole externo. Cabe hablar aquí de código malicioso y malintencionado como son los virus, troyanos, puertas traseras, spam lo que no sólo crea problemas reales de disminución de confianza, sino que bajan la productividad porque el tiempo de control y revisiones de los daños es muy grande, pudiendo usarse en otras labores más productivas. Una persona que gaste una hora diaria en revisar estos problemas equivale a un mes laboral del año.
Confianza: la vida normal de las personas transcurre con el uso de elementos o artefactos que dependen del software y que su uso debe generar confianza para una tranquilidad de índole social.
El software inseguro puede llegar a hacer daño a las personas y a la propiedad en ambientes de uso cotidiano como la aviación, la medicina, la exploración espacial, la banca y en general el transporte. Obsérvese cómo en estas actividades está en peligro la vida de las personas, no sólo una funcionalidad con repercusiones económicas. Fiabilidad: en algunos casos el software participa de soluciones de gran escala que pueden afectar de manera masiva a la sociedad, como la defensa nacional, las telecomunicaciones, la energía, el espacio y los sistemas financieros. El hecho de utilizar satélites para las telecomunicaciones y el transporte de los datos nos puede afectar.
Supervivencia: ese término se definió como una característica que asegure que el software se debe mantener en continuo funcionamiento, aún en situaciones adversas y no sólo en ambientes benignos. El reciente drama del Japón con el terremoto y el tsunami dan que pensar en cuanto a lo que se puede catalogar una situación adversa, pues los centros de datos deben contemplar estas situaciones y el software mismo también.
Pasemos ahora a determinar una definición formal para la palabra “Trustworthi-76 Sistemas Ness”. Lo más cercano que he encontrado en español para traducir este término es “Digno de confianza”; es decir, que debe cumplir con todos los requerimientos, inclusive con los de seguridad, en cualquiera de los componentes de software, aplicación, sistema o red.
Un desarrollo de software digno de confianza, tiene atributos de “seguridad, garantía, confianza, fiabilidad, rendimiento, supervivencia, con un amplio espectro de adversidades y compromisos. Se requiere en el hardware, en el software, en las comunicaciones, en componentes de potencia, así como en los desarrolladores y los que hacen el mantenimiento”.
La inclusión del factor humano en estas taxonomías dan que pensar en cuanto a la formación integral de los profesionales en las universidades en donde los aspectos de tipo ético cobran aún más valor.
La estrategia contempla en primer lugar la necesidad de que a la fuerza de trabajo, es decir a los desarrolladores, se les eduque permanentemente y de les defina una estructura salarial adecuada y competitiva.
Le da a la investigación y al desarrollo la verdadera dimensión para fortalecer esta industria invitando a que las Universidades y las empresas trabajen de manera mancomunada, así como el Estado, que debe contribuir desde las instituciones encargadas de diseñar leyes para fomentarlas. Se da una especial atención a los procesos creativos que según García Córdoba en su libro sobre la Investigación aplicada y tecnológica, los define como “la capacidad de generar soluciones finales desde ángulos insospechados” [2] El estudio determina que no son las buenas intenciones las que lograrán crear software digno de confianza, sino una formación profesional y una intención permanente que debe ser involucrada en el ejercicio profesional de los profesionales. Pero no como una opción, sino como una necesidad. Lo anterior requiere entonces de mejores diseños en las métricas de calidad, en el proceso evaluativo, en las metodologías a utilizar en el futuro, en la relación con las empresas y el Estado, desde las universidades.
3. Metodologías de desarrollo
Tradicionales La creación de software se orienta por metodologías que se han venido construyendo con el tiempo; y, pensando que esta concesión aporta académicamente al artículo y a la contextualización del problema central, mencionaremos algo al respecto. Sin importar cuál metodología se use, el modelo que presentaremos al final para el desarrollo del software seguro debe ser tenido en cuenta. Las metodologías más conocidas son:
Modelo Construir y mejorar (1950 – 1960): Utilizado por la Volkswagen en la producción y venta de sus vehículos cuyo esquema promueve que el artefacto terminado se use, y se recopilen las fallas detectadas por los usuarios para mejorarlo. Hoy en día, a pesar de su popularidad, recibe justificadas críticas.
Método en cascada (1970):
Esta fue la época en que Edsger Dijkstra creó la programación estructurada y funciona si cada fase está perfectamente desarrollada, lo cual casi nunca se cumple. Propone un desarrollo secuencial. Sistemas 77
Modelo prototipo rápido:
Se basa en el modelo de las plantas piloto de los Ingenieros Químicos y va produciendo el programa con las funciones esenciales para ir mejorándolo, en la medida en que el usuario los acepta. Es de anotar la presencia del usuario un poco más involucrado en el proceso.
Modelo incremental:
Es una mezcla del modelo en cascada y del prototipo rápido y ya reconoce que los pasos en el desarrollo no son discretos, y va creando construcciones paulatinas, con el peligro de que el proceso de aprendizaje exceda al de la productividad y se dé el “síndrome de la investigación”.
Modelo Extreme Programming:
Se basa en el desarrollo del sistema de nómina de Chrysler y se involucra al usuario o cliente cuyo “discurso” es recibido en su lenguaje original y se toma como parte del desarrollo,
...