Esta pregunta incluye dos partes: por qué tenemos tantos errores en primer lugar y por qué no todos los errores se detectan y resuelven con suficiente tiempo.
Por qué tenemos errores de software
El software de escritura requiere recursos, es decir, tiempo, conocimiento de los desarrolladores y dinero. Siempre hay una escasez de tiempo (para ir al mercado) y el número y la experiencia de los desarrolladores. Además, más desarrolladores simplemente no significa que el producto se haga más rápido porque más desarrolladores significa más sobrecarga de comunicación, lo que aumenta la complejidad.
Y hay una escasez de dinero, porque existe la necesidad de que el producto tenga un retorno de la inversión positivo.
Por lo tanto, para escribir un software más seguro en primer lugar, debe apuntar a una complejidad mínima que pueda administrar con la menor cantidad de desarrolladores posible. Pero, desafortunadamente, las necesidades complejas de los clientes a menudo contradicen este objetivo. Además de esto, los requisitos cambian con el tiempo porque el entorno donde se usa el software cambia.
De esta manera, incluso el software con un buen diseño inicial desarrollado por desarrolladores experimentados se vuelve más complejo con el tiempo. Y, la mayoría del software ni siquiera fue desarrollado con un buen diseño inicial por desarrolladores experimentados, pero muchos comenzaron como un prototipo que inicialmente funcionó lo suficientemente bien y luego se extendieron y extendieron con el tiempo a menudo por diferentes desarrolladores (con una comprensión limitada del diseño inicial). ).
Y esta es solo una de las razones por las que tienes errores. Otras razones son que el software se usa en un entorno para el que nunca fue diseñado, ya que el software diseñado para entornos cerrados y protegidos ahora se conecta a Internet abierto.
¿Por qué no se encuentran y resuelven todos los errores?
Los investigadores y desarrolladores de seguridad dentro y fuera de las compañías de software enfrentan los mismos límites: solo hay un número limitado de tiempo y un número limitado de investigadores, mientras que hay muchos programas con posibles problemas. Por lo tanto, los investigadores de seguridad se centran en el software que promete el mayor retorno de inversión primero, es decir, donde se pueden encontrar los errores de mayor impacto en el menor tiempo utilizando el conocimiento y la experiencia específicos del investigador.
Esto, por supuesto, deja muchos errores no descubiertos porque algunos pueden necesitar una experiencia específica, algunos parecen no valer la pena detectarlos o simplemente porque no hubo tiempo para mirar el área específica del software. E incluso si se encuentra un error, es posible que no sea lo suficientemente crítico como para invertir recursos para solucionarlo (algunos de ellos, o simplemente por el diseño, es demasiado costoso) o el proveedor de software podría no existir más o el software se declara al final de vida para que nadie lo use de todos modos (aunque muchos lo hacen por varias razones).
¿No podemos ignorar los errores que aún no se han encontrado?
Encontrar y explotar errores es similar a la extracción de recursos naturales: todavía hay muchos recursos por descubrir y lugares descubiertos donde la explotación de estos recursos es demasiado costosa. Pero, nuevos conocimientos, nuevas técnicas o simplemente un mayor valor marcado de recursos específicos lo hacen atractivo para explotar estos recursos o buscar más recursos ocultos. En caso de errores, esta podría ser una nueva técnica o herramienta que facilita la búsqueda de nuevas clases de errores. O los casos de cambio de uso hacen que los vectores de ataque anteriormente imposibles funcionen, como conectar algún software a internet. O podría haber un objetivo valioso con un software específico que lo hace atractivo para buscar vulnerabilidades en este software y explotarlas.