Cuando se realiza una auditoría de ciberseguridad, lo primero que se revisa son las versiones de todos los softwares instalados en la organización. Si encuentran versiones desactualizadas, inmediatamente generan una alerta y recomiendan poner los programas al día.
Muchas de las nuevas versiones se deben a que alguien encontró una vulnerabilidad en el software, lo cual obliga a los desarrolladores a correr para producir una versión que la elimine.
En ocasiones nos referimos a estas versiones como “parches”. Obviamente, contar con las últimas versiones no garantiza total seguridad, pero sí reduce el riesgo, considerablemente. Bueno, esto hasta que apareció CrowdStrike y metió las patas en gran escala.
La mayoría nunca habíamos oído hablar de CrowdStrike, que resulta ser un productor de software de seguridad, que brinda servicios desde la nube a clientes muy grandes (su cartera contenía 289 de los Fortune 500).
Para brindar servicios de seguridad, es más eficiente hacerlo directamente sobre el hardware. Hace como 20 años Microsoft intentó prohibir que el software pudiera hacer eso, y se dejó la potestad de brindar los servicios de seguridad en equipos Windows, pero los productores pusieron el grito en el cielo aduciendo prácticas monopolísticas. Eso no sucedió. Apple sí controla el software de seguridad de sus equipos, nadie puede producir un programa que opere directamente sobre el hardware.
Error por falta de pruebas
Todas las aplicaciones, excepto las de seguridad y Windows, corren sobre el sistema operativo. Cuando una aplicación requiera hacer algo con el hardware, debe solicitar el servicio al sistema operativo. De esta manera, si una aplicación falla, el sistema como un todo sigue funcionando. Pero cuando una aplicación corriendo directamente sobre el hardware falla, se cae todo el sistema.
Ahora bien, habiendo dicho eso, hace unas semanas CrowdStrike liberó una nueva versión de su sistema Falcon, y los clientes, siguiendo las buenas prácticas, procedieron a instalarlo de inmediato.
El sistema tenía un error, y como corre directamente sobre el hardware, en un día se cayeron 8,5 millones de equipos alrededor del mundo. Una vez instalado un sistema de estos, si al arrancarlo produce la caída total del sistema, regresar a la versión anterior no es tan fácil; es como cuando falla el sistema operativo, hay que arrancar en un “modo” especial (oprimiendo teclas extrañas).
Este problema tardó varios días en corregirse, no sin antes causar graves daños a líneas aéreas, aeropuertos, trenes, bancos, etc. Un caos generalizado por un pequeño error en un software que no se probó suficientemente antes de salir y que fue lanzado a gran escala en vez de hacerlo paulatinamente.
Abundancia de pulgas
Pero ¿deberíamos actualizar las versiones de software apenas estén disponibles o no? Esperar unos días es una estrategia muy utilizada por los procrastinadores del planeta, ¿se va a poner de moda esa estrategia? Para peor de males, instalar una nueva versión no es siempre rápido ni sencillo.
Hay un pequeño porcentaje de nuevas versiones que se deben única y exclusivamente a que los productores quieren ofrecer nueva función. Lo más común es que con la nueva versión se hace una lista de las nuevas funciones y se agrega un “corrige errores encontrados en versiones anteriores” o “mejora asuntos de seguridad”, etc.
Por un motivo histórico, Grace Hopper, almirante de la Marina de EE. UU., una vez (hace como 60 o 70 años) dijo que había encontrado un bug en el sistema. Hoy, los errores de software se conocen globalmente como bugs; en español decimos pulgas.
Esto, a pesar de que el bicho que encontró la señora Hopper no era de software, sino un insecto de gran tamaño que se había metido dentro de una de las primeras computadoras (cuando aún no tenían sistema operativo). Todo este preámbulo para decir que una enorme mayoría del software, del cual depende absolutamente la humanidad, está repleto de pulgas.
El método más utilizado para corregir errores (matar pulgas) es esperar a que los usuarios se quejen para después ir a buscar la causa del error. En inglés le dicen debugging, en español utilizamos el eufemismo “depurar”. Es importante tener siempre en mente que las pruebas (existe toda clase de pruebas y hasta departamentos enteros dedicados a someter los sistemas a pruebas) únicamente sirven para demostrar la presencia de errores, nunca para demostrar su ausencia.
Dependencia del software
Los problemas de ciberseguridad que ocasionan el hackeo, los virus informáticos y en especial el ransomware provienen del pulguero. Los actores malévolos que violan los sistemas no producen la vulnerabilidad: la encuentran y luego la explotan. Las vulnerabilidades no son más que errores en el software; son pulgas. Los hackers no pueden abrir ventanas para meterse, alguien tiene que haber dejado la ventana abierta.
El incidente de CrowdStrike evidenció cómo ha crecido nuestra dependencia, como humanidad, del software. Se espera que la inteligencia artificial dedicada a la producción de software aumente la productividad de los programadores, arquitectos e ingenieros de software.
Si seguimos aumentando la cantidad de software disponible, aumentará, sin duda, nuestra dependencia. Hoy, los vehículos, los teléfonos, los relojes están llenos de software. Por todos lados encontramos más software haciendo más cosas (OK, algunas innecesarias), sin mencionar los enormes sistemas de inteligencia artificial, que generarán dependencia en casi todas las áreas del quehacer humano.
Obviamente, no todos los softwares son igual de críticos, ¿imaginan que falle Windows? Paul Strassman, ex-CIO del Pentágono, decía que Windows era un problema de seguridad mundial. Imaginaba que alguien lograra insertar lo que llaman una “bomba de tiempo”, esto es, unas líneas de código que hacen al sistema fallar cierto día a cierta hora. ¿Vale o no vale la pena pensar en posibilidades como esta?
Es razonable preguntarnos qué está haciendo la humanidad para protegernos de las pulgas. Demostrar matemáticamente que un software es correcto es posible, pero muy difícil y, sobre todo, muy caro. Creo que esa línea de investigación debe haberse suspendido, debido a la frustración excesiva de los investigadores.
La calidad del software es un área de investigación que está recibiendo atención y fondos, no suficientes, pero si se está avanzando. Uno de los acercamientos más promisorios son los análisis automáticos de código fuente.
El Consorcio de Calidad de Software de Información (CISQ en inglés) ha desarrollado un estándar ISO que contiene varias docenas de patrones de software que sabemos conducen a diferentes tipos de errores y publicaron un código de referencia que revisa código fuente buscando estos patrones. Claro que un software que ha sido verificado con este estándar no está un 100% garantizado de ser libre de pulgas, pero es mucho mejor que uno que no lo ha sido.
El principal recurso requerido para este tipo de investigaciones es el tiempo de la gente talentosa, de la cual Costa Rica cuenta con un inventario generoso. Invertir recursos humanos para progresar en el conocimiento y el entendimiento de la calidad del software bien puede resultar en una ventaja competitiva para el país. Pero hay que crear primero la conciencia y el entendimiento en la importancia de la calidad del software.
Roberto Sasso es ingeniero, presidente del Club de Investigación Tecnológica y organizador del TEDxPuraVida.