Ingeniería de Software Seguro
Un reto necesario para la Sociedad de la Información
Actualmente, las nuevas tecnologías son un orquestador fundamental en la Sociedad de la Información, lo cual incluye a las personas y los nuevos tipos de relaciones que se establecen entre ellas. Esta dependencia está presente en múltiples escenarios y contextos, desde actividades comerciales y sociales hasta el ámbito militar o la gestión de las infraestructuras críticas nacionales. Esto ha provocado una necesidad creciente en que la tecnología se comporte como se espera, esto es, de acuerdo a sus especificaciones, y que implemente los mecanismos de seguridad apropiados para prevenir que terceros puedan perturbar nuestro modo de vida o dañar nuestros intereses, privacidad y seguridad. Por todo ello, el correcto funcionamiento de la tecnología debe poder verificarse no sólo de manera objetiva sino también percibirse desde la subjetividad del individuo. Es decir, la sociedad debe poder confiar en la tecnología.
Es cierto que algunos escenarios demandan unos requisitos de seguridad más rigurosos que otros. Sin embargo, la interdependencia entre sistemas de información en un contexto global como el actual nos sugiere la necesidad de una aproximación global, haciendo de la confiabilidad en la tecnología un concepto de aplicación universal y no particular a un campo específico.
A pesar de ello, se ha demostrado ampliamente que la tecnología actual no ha alcanzado el grado de madurez y seguridad requerido, siendo vulnerable a una gran cantidad de amenazas. Según un informe de la Universidad Carnegie Mellon (Over, J. W., Team Software Process for Secure Systems Development, 2002), cerca del 90% de los incidentes de seguridad del software están causados por atacantes que han explotado fallos conocidos del software. Además, un análisis de 45 aplicaciones de negocio electrónico mostró que el 70% de los fallos del software estaban relacionados con el diseño. En media, un ingeniero del software experimentado y capacitado introduce un fallo por cada 9 líneas de código. Aproximadamente, un millón de líneas de código típicamente contienen de 1.000 a 5.000 fallos y unas 100 vulnerabilidades (en producción). Además, se ha demostrado que el mantenimiento del software lo degrada, introduciendo más errores en vez de reducir su número.
En sentido contrario, y hasta la fecha, existen numerosas contribuciones, tanto desde el sector académico como industrial, enfocadas a reducir el número de fallos y vulnerabilidades en la tecnología, con una clara influencia positiva en cómo se construye el software – éste entendido como pieza clave de la tecnología. En este sentido, la ingeniería de software seguro es una disciplina de la ingeniería del software que busca proporcionar garantías objetivas respecto a la seguridad del software producido. Para ello se aplican mecanismos y se producen evidencias durante el proceso (medibles, verificables, y repetibles) que garantizan que el software exhibe de manera consistente las propiedades de seguridad que se le requieran. En particular, y partiendo del axioma "la seguridad absoluta no es alcanzable", el software seguro es capaz de resistir la mayoría de los ataques, tolerar aquellos que no pueda resistir, y recuperarse rápidamente y con el menor impacto de aquellos ataques que no pueda tolerar.
El campo de la investigación en ingeniería de software seguro se centra en desarrollar métodos eficaces y herramientas que asistan al desarrollador durante todo el ciclo de vida del desarrollo de software, desde la misma concepción de la idea hasta las etapas de entrega y operación, permitiéndole diseñar y desarrollar software con seguridad demostrada.
Una de las áreas de investigación que me resultan más atractivas es la aplicación de métodos formales para la construcción y verificación de software seguro. De todas las iniciativas existentes (muy numerosas y algunas realmente interesantes), los métodos formales son aquellos que son capaces de aportar mayores garantías en cuanto a la robustez del software. Estos métodos emplean modelos y razonamiento matemático para verificar las propiedades del software y construir las evidencias necesarias sobre su corrección. Es importante resaltar que, tal y como indicó Boehm (Boehm, B., Verifying and validating software requirements and design specifications. IEEE Software, Vol. 1(1), 1984), los métodos formales pueden ser útiles para verificar el software (hace lo que se ha especificado que haga), pero no para validar el software (hace lo que se esperaba que hiciera).
Uno de los grandes retos actuales para la aplicación de cualquier técnica orientada a mejorar la calidad (y la seguridad) del software es el cambio de mentalidad en el fabricante del software así como, en muchos casos, la compleja integración de estas técnicas en los procesos existentes, con los costes que ello conlleva. Esto es especialmente relevante cuando hablamos de métodos formales, los cuales siguen sin tener la suficiente aceptación por la industria aun a pesar de su probada eficacia. Una salvedad es aquellos casos donde el perjuicio de un fallo del software supera ampliamente el coste de aplicar métodos formales, como ocurre en los sistemas considerados críticos (e.g. aviación, transporte, etc.). Una aproximación mixta puede consistir en aplicar métodos formales a las partes críticas del software, mientras que el resto se construya y verifique empleando otras técnicas menos costosas y complejas.
Los hechos nos demuestran que es urgente mejorar los procesos de ingeniería del software en pro de unos sistemas de información más robustos y seguros que aporten la confianza necesaria a la sociedad. Si no alcanzamos este objetivo, el grado de penetración de la tecnología en la sociedad se verá estancado, o, si aun así la sociedad continúa evolucionando como en los últimos tiempos, estaremos indefensos en un mundo digital hostil e impredecible del que careceremos de cualquier control.
Para aquellos que estén interesados en la ingeniería de software seguro, recomiendo la lectura del informe "Software Security Assurance – State of the Art Report (SOAR)", IATAC/DACS (2007).