¿Las vulnerabilidades del software son ilimitadas?

0

Ok. Creo que nadie ha pensado en esta perspectiva, así que aquí va.

Realmente no entiendo por qué el software necesita ser constantemente parcheado para la seguridad cuando los programadores hacen un trabajo bueno y completo en primer lugar. Las computadoras se programan directamente hacia adelante y no explicarán por qué su creador no las programó. Las computadoras tradicionales no son lo suficientemente inteligentes como para tomar decisiones sin entradas. Incluso si existen lagunas en el software, debería haber solo un límite superior, dado que hay líneas limitadas de código en el software, ¿son posibles las posibles formas de explotar una pieza de software? Si no es así, ¿existe una fórmula matemática para calcular las posibles explotaciones aproximadas en relación con la cantidad de código?

El caso en cuestión es Windows XP y sus predecesores. Creo que el primero ha estado en el mercado por más de 20 años y su fabricante y sus proveedores de seguridad externos han analizado su código a fondo. Sin embargo, se nos dice que aún podría tener errores de seguridad y, por lo tanto, dejar de usarlo porque el creador del software no está dispuesto a seguir brindándolo.

¿O los parches crean más vulnerabilidades de seguridad?

    
pregunta Nederealm 26.07.2017 - 06:51
fuente

5 respuestas

1

Puedes eliminar todos los errores eliminando toda la complejidad del software siempre que el hardware se comporte. Un ejemplo sería un código de máquina que enciende una luz cuando se presiona un botón.

Los problemas comienzan cuando intentas resolver problemas más difíciles, agregando un usuario que quiere mucha funcionalidad, por ejemplo. La cantidad de código aumenta, pronto tiene sentido utilizar lenguajes de programación de alto nivel que pueden tener algún comportamiento extraño o indefinido.

Cuantos más botones agregue, más complejo se volverá el código y más errores podrá esperar. Gastar más dinero para evitar o encontrar estos errores puede que nunca los encuentre todos, incluso para organizaciones muy caras y profesionales .

    
respondido por el daniel 26.07.2017 - 09:30
fuente
5

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.

    
respondido por el Steffen Ullrich 26.07.2017 - 08:47
fuente
1

No son técnicamente ilimitados, pero en la práctica podrían ser ilimitados. Un código bien escrito y probado puede ser capaz de reducir la cantidad de errores a un error por cada cien líneas de código. Windows XP tiene 45 millones de líneas de código. Así que serían 450.000 bichos. No todas serán vulnerabilidades de seguridad, pero incluso si el 1% de ellas lo fuera, nunca nos agotaríamos.

    
respondido por el Mike Scott 26.07.2017 - 07:43
fuente
1

No estoy seguro de si realmente puede calcular el número exacto de posibles vulnerabilidades o vulnerabilidades en función del código y el número de líneas. Pero el riesgo de vulnerabilidades explotables y no explotables aumenta con la antigüedad del software y especialmente cuando se sale del ciclo de soporte principal. Si piensa qué es realmente una vulnerabilidad y qué tan complejo puede ser un sistema operativo completo o cualquier software, no solo el código fuente es vulnerable; Podría haber una combinación de configuración y código que se agregue a esos números. También podría haber vulnerabilidades no directamente en el código fuente, pero la forma en que el software o sistema operativo decide ejecutar o manejar los datos durante el procesamiento.

Dicho esto, puedes detectar una serie de vulnerabilidades reconocibles basadas en el análisis de fuente de código estático usando herramientas o por medio de un manual. Para responder a la segunda parte de la pregunta, sí, es posible que parches adicionales abran nuevas vulnerabilidades. Después de todo, está modificando y agregando el código, por lo que una falla o un error podría crear nuevos problemas. Aunque no es un ejemplo exacto, un caso en cuestión son los ataques de denegación de servicio. Las ventanas actualizadas en ese momento podrían haber sido susceptibles a las muy antiguas ataques basados en LAND DoS en la pila.

Con eso también en mente, piense en los 0 días que se lanzan, incluso con todas las actualizaciones y los investigadores de seguridad que revelan vulnerabilidades para la aplicación de parches y la codificación segura. Eterneblue fue uno de esos ejemplos.

    
respondido por el SCIS Security 26.07.2017 - 07:36
fuente
1

Simplemente me referiré a esta conocida cita atribuida a Einstein:

  

Dos cosas son infinitas: el universo y la estupidez humana; y no estoy seguro sobre el universo!

Como los programadores son simples seres humanos, a veces cometen errores debido a la cita anterior. Como los programas son cada vez más complejos, representan una gran cantidad de líneas de código. Así que hay errores en cualquier base de código grande.

Por supuesto, muchos de ellos se encuentran durante las pruebas iniciales (antes de que se libere el código), y otros se encuentran y parchean después de que el código se haya liberado. La mala noticia es que incluso los parches pueden contener errores, o romper alguna otra parte del código, y se agregan constantemente nuevas características peores que vienen con su código grande y nuevos errores.

He hablado de errores aquí porque las vulnerabilidades no son muy diferentes, y en mi humilde opinión son solo un caso especial de errores: algo que debería haber sido mejor codificado.

TL / DR: los programas pequeños y estables pueden eliminarse de cualquier error o vulnerabilidad con algún trabajo, pero un software enorme y en constante evolución como el sistema operativo no puede.

    
respondido por el Serge Ballesta 26.07.2017 - 12:17
fuente

Lea otras preguntas en las etiquetas