¿Por qué hay tantas vulnerabilidades de seguridad?

Además de la respuesta de Johnmark Glaze, donde menciona varias causas, me gustaría ofrecer algunas más:

  • Algunas partes del código son extremadamente complejas : las rutinas que están diseñadas para implementar ciertos protocolos o estándares pueden ser abrumadoras para que todas, excepto algunas personas, comprendan. A veces, el protocolo en sí mismo podría introducir vulnerabilidades que los desarrolladores, sin culpa de sí mismos, transmiten al software / hardware que construyen. Cualquier software de seguridad, implementación de cifrado u otras funciones de criptología relacionadas, es fácil de equivocar. Y a veces solo se necesita un pequeño error para abrir una puerta grande.
  • Algunos softwares ahora se usan en un contexto diferente al de su entorno original . Esto es cierto para muchas rutinas en el núcleo de Unix y sistemas similares a Unix. Cuando esas rutinas se escribieron originalmente, no había World Wide Web y se escribieron para redes pequeñas donde se podía confiar en cualquier otro sistema. Estas rutinas ahora se utilizan para conectarse a una red enorme donde no se puede confiar en otros dispositivos.
  • Los protocolos y, en última instancia, los dispositivos que condujeron a Internet de hoy dependen de la confianza . Si los sistemas informáticos se hubieran dejado a sus inventores originales (personas con mentalidad militar y corporativa), algunas de las revoluciones que tuvieron lugar e hicieron realidad la informática personal no hubieran ocurrido. Estas revoluciones involucraron a personas que tenían la generosa idea de compartir universalmente la información y los recursos informáticos. El altruismo y la confianza fueron la base del diseño de lo que hace que Internet sea lo que es hoy. No privacidad o secreto. Debido a eso, los protocolos actuales exponen la arquitectura de sus redes subyacentes. Información que es valiosa para la mejora de la red y la resolución de problemas, pero también para los malos actores inclinados a paralizar o penetrar esas redes.
  • No existen estándares para la codificación segura en ningún nivel . Este punto es una espada de doble filo, al menos en mi opinión. Lo que llamamos codificación segura implica mucha paranoia. Requiere que el desarrollador crea que todas y cada una de las entradas en su software pueden, y serán , utilizadas para subvertirlo y potencialmente apoderarse de todo el sistema donde se ejecuta ese software. Es una visión muy oscura del mundo que va completamente en contra de la persona promedio, que es optimista y cree en los usuarios afables. Un buen ejemplo de esta vista oscura es la Guía de codificación segura de Apple (https://developer.apple.com/library/ios/documentation/Security/Conceptual/SecureCodingGuide/). A pesar de que todo lo que dicen es cierto y Apple tiene experiencias de la vida real para apoyarlos, la persona promedio siempre dirá algo como “No me va a pasar”, “¿Quién podría encontrar mi aplicación e intentar explotarla?” o “Realmente no necesito preocuparme por ahora, tal vez cuando crezca”. Y esto me lleva al siguiente punto
  • La seguridad no puede ser una ocurrencia tardía . Uno no puede asegurar fácilmente una aplicación existente. La seguridad debe implementarse y diseñarse antes de escribir la primera línea de código. Incluso pequeños fragmentos de información filtrados por una aplicación aparentemente inocua pueden ayudar a romper un sistema o crear una imagen de un usuario que espera ser privado. Sin embargo, muchos sistemas se han construido sobre la premisa de la confianza y el intercambio de información y ahora se están adaptando para confiar solo en unos pocos usuarios autenticados. Este proceso hacia atrás es una muy buena receta para puertas traseras y vulnerabilidades no descubiertas.
  • La mayoría del software se basa en otras piezas de software . Incluso el proyecto de software más consciente de la seguridad debe confiar en otras piezas de software, ya sea el sistema operativo o las rutinas básicas de muy bajo nivel (acceso a archivos y memoria, comunicación de red, etc.). Si alguna de estas rutinas base tiene una vulnerabilidad, el proyecto de software se ve comprometido.
  • No hay buenas fuentes para aprender sobre seguridad informática . Este es (al menos hoy a principios de 2015) el reino de los expertos que hablan en un idioma extraño y que parecen hablar solo de pesimismo. Se necesita una cantidad considerable de esfuerzo para que un desarrollador determinado aprenda y se sienta lo suficientemente cómodo como para aplicar conceptos de seguridad a su aplicación. El resultado son aplicaciones que cortan esquinas o que aplican incorrectamente conceptos de seguridad. Un excelente ejemplo de esto son las revisiones de las aplicaciones de administrador de contraseñas para dispositivos móviles: en 2012, los expertos en seguridad revisaron las 6 mejores aplicaciones de administrador de contraseñas y descubrieron que a pesar de que anunciaban cifrado de grado militar, estaba mal implementado y, por lo tanto, podría romperse fácilmente todos menos uno de ellos. (http://www.darkreading.com/risk-management/security-fail-apple-ios-password-managers/d/d-id/1103401). El revisor en realidad estaba usando una de esas aplicaciones para fines personales y tuvo que detenerse después de lo que descubrió.
  • Tendemos a ser complacientes . Desafortunadamente, como descubrimos en 2013 y 2014, algunas organizaciones gubernamentales que contribuyeron significativamente a los estándares de seguridad ampliamente utilizados y sus implementaciones de software habían debilitado intencionalmente esos estándares. Presumiblemente con el objetivo de facilitarles la comunicación a través de esos protocolos. Independientemente de cualquiera de las implicaciones o puntos de vista políticos de uno, tal cosa se opone completamente a los expertos en seguridad, que deberían haber desarrollado una “paranoia profesional”. Incluso la corporación más rica se vería en apuros para competir con las habilidades y la experiencia de la NSA, pero al igual que cualquier otro estándar de seguridad, sus comentarios deben ser cuestionados y evaluados. Esto se considera desconfianza saludable y se aplica a cualquier persona. Los expertos pueden tener una razón para favorecer o contrarrestar un estándar particular, y lo más importante, los expertos también pueden cometer errores. Al tener tanto en juego como al proponer un estándar, tales errores pueden ser devastadores, por lo que la verificación doble y triple de cada entrada es normal para el curso. Sin embargo, creo que es ahora después de todo lo que sucedió.
  • Los desarrolladores son flojos . Obviamente estoy bromeando sobre esto, pero es notable la cantidad de piezas de software que se escribieron porque su creador estaba atrapado en un trabajo sin sentido haciendo algo muy tedioso. Decidieron entonces escribir un código para hacer cualquier tarea por ellos y luego se sorprendieron por su adopción y popularidad generalizadas. Estas personas se negaron a seguir haciendo algo muy tedioso y consiguieron una computadora para hacerlo por ellos. Después de eso, ¿qué es lo mejor? ¡Poder hacerlo cuando ni siquiera estás sentado en tu escritorio! Muchas piezas de software tienen puertas traseras o complementos para permitir el monitoreo o control remoto del programa. Estas puertas traseras generalmente están protegidas por la oscuridad en lugar de la seguridad real y se convierten en vulnerabilidades graves.

Entonces, como puede ver (si todavía está leyendo;)), hay muchas razones válidas por las cuales cualquier fragmento de código podría tener vulnerabilidades de seguridad. No existe un sistema “inquebrantable” y esto seguirá siendo cierto.

Pero no todo son malas noticias. Estaba escuchando una entrevista en la radio hace un tiempo, donde un autor del libro mencionó que aprendió a abrir las cerraduras de las puertas como parte de su investigación para escribir el libro que ahora estaba promocionando. El entrevistador le preguntó qué tan difícil fue y el autor respondió “¡es realmente fácil, da miedo!” Una vez que tenga las herramientas adecuadas, puede abrir la mayoría de las cerraduras sin mucho esfuerzo. Todos pueden hacerlo, dijo. Eso no significa que todos debemos apresurarnos a comprar la cerradura de mayor resistencia que podamos encontrar y reemplazar la cerradura de la puerta de nuestra casa. En realidad, solo necesitamos obtener una cerradura que sea lo suficientemente buena como para disuadir a los posibles ladrones. Cualquier otra cosa es una pérdida de dinero y en realidad podría atraer atención no deseada. La misma filosofía se aplica a la seguridad informática. No tenemos que ir por la borda para obtener sistemas seguros. Solo necesitan estar lo suficientemente seguros . Pero al igual que tomamos precauciones para proteger los objetos de valor que llevamos (llaves, talonario de cheques, tarjetas de crédito, etc.), debemos tomar precauciones con los elementos privados que almacenamos en nuestros dispositivos y salir de casa (o en un lugar protegido y confiable) las cosas que realmente no necesitamos llevar en todo momento.

imagina mil millones de líneas de código. cada línea le dice a una computadora cómo actuar / interactuar / hacer ciertas cosas. Eso es solo una fracción de la cantidad de código que se necesita para crear un sistema operativo / programa. Cada parte del código permite / deshabilita cierta interacción. Toda esta programación es realizada por humanos, no por máquinas. Los humanos son falibles y cometerán errores / no verán cómo se puede explotar cada línea. Tomaría años revisar cada línea para determinar eso. Atrapan algunos, pero no todos. los programas no pueden permanecer en I + D durante años esperando que se corrijan todas las vulnerabilidades (sin mencionar que las técnicas de pirateo y el software cambian, y el software en sí cambia con el tiempo, se crean nuevas vulnerabilidades). Así, la forma más rápida de llevar el software al consumidor y, por lo tanto, más rentable es reparar las vulnerabilidades fáciles, venderlas y luego parchear las complejas para encontrarlas más tarde.

Esta va a ser una metáfora extraña. Ten paciencia conmigo por un minuto, te prometo que iré a algún lado.

Imagine que tiene un puñado de robots de guardia, y su trabajo es hacer que protejan un área determinada de la ciudad. Su trozo de ciudad contiene una biblioteca, un hospital, un circo y una prisión. Sus robots entienden inglés, pero siguen siendo robots, por lo que solo harán exactamente lo que se les dice, sin imaginación. Entonces, les escribes un libro de instrucciones especial, explicando en detalle qué es legal y qué es ilegal.

¿Aún conmigo? Increíble. Ahora, escriba (o al menos piense bien) estas reglas:

  • Robo
  • Asalto
  • Poder de los policías

Dale unos minutos. Piense en cómo describiría el robo, el robo, la violencia, las armas, etc., y piense en lo que los agentes de policía pueden hacer que la mayoría de la gente no puede. ¿Lo tengo? ¿Está listo su robot para el horario estelar?

¿Estás seguro?

Sin editar las reglas, describe cómo se comporta tu bot. No describas lo que crees que debería suceder; describe lo que haría tu bot, dadas las reglas que has pensado.

  • ¿Su robot arresta a los usuarios de la biblioteca por tomar libros de la biblioteca que no son de ellos?
  • ¿Su robot arresta a los usuarios de la biblioteca por tomar computadoras de la biblioteca que no son de ellos?
  • ¿Su robot arresta a los cirujanos por clavar cuchillos en las personas?
  • Sé honesto: ¿qué tan confundido está tu robot cuando ve el acto de tragar espada en el circo?
  • ¿Su robot arresta a los agentes de policía por confiscar el contrabando de los prisioneros?
  • ¿Su robot arresta a los agentes de policía cuando toman algo que un prisionero posee legítimamente y se le permite tener?
  • Si alguien es asesinado en la biblioteca, ¿qué pasa?
  • Si alguien muere en el circo, ¿qué pasa?
  • Si alguien es asesinado en la prisión, ¿qué pasa?
  • Si alguien es asesinado en el hospital, ¿qué pasa?
  • ¿Se permite a los ciudadanos no policiales disparar armas de fuego en zonas abarrotadas?
  • Acabas de arrestar a todos en la galería de tiro de circo, ¿no?
  • ¿Detuviste la bala de cañón humana? ¿O el tipo que dispara el cañón?
  • ¿Se le permite a un oficial de policía liberar a alguien de la prisión?
  • ¿Se le permite a un prisionero que robó la placa de un oficial de policía liberar a alguien de la prisión?
  • ¿Su robot arrestó al cabecilla del circo por llevar un látigo?
  • ¿Qué tal cuando el cabecilla lanza su látigo a los leones?
  • ¿Qué tal cuando el cabecilla echa de menos y golpea a la mujer barbuda?
  • ¿Se le permite a un oficial de policía anular o reprogramar sus bots de seguridad?
  • ¿Se permite a los ciudadanos no policiales encarcelar a las personas?
  • ¿Tu robot es un oficial de policía?
  • Si no es así, ¿se mete en problemas por arrestar a las personas?
  • Si es así, ¿puede reprogramar otros bots?

Ahora, recuerde que este es el mejor caso posible: sus robots entienden su idioma nativo y llevan a cabo sus instrucciones sin error. Para obtener la máxima precisión de simulación, ejecute su libro de reglas a través del Traductor de Google una o dos veces; para el modo fácil, traduzca al alemán y viceversa; Si te sientes seguro, prueba el coreano.

Recuerde que sus prisioneros y una variedad de criminales del mundo no tienen nada que hacer más que quedarse sentados todo el día, pensando en formas de engañar a sus robots. Cada vez que se les ocurre un truco, tienes que editar el libro de reglas, pero ten cuidado de no estropear algo que ya funciona.

Sin embargo, no temas. Lo más probable es que este esquema de robot ni siquiera salga del laboratorio. Imagínese: termina el primer prototipo, aprieta algunos tornillos, verifica dos veces el circuito y lo completa con su combustible renovable a base de etanol antes de arrancarlo, con lo cual es arrestado de inmediato.

Porque el robot tiene 0.01 años.

Y acabas de darle alcohol a un menor.

  • -Porque como cualquier “hecho por el hombre” no puede ser completo
  • -no hay 100% de seguridad en ningún sistema, castillo o incluso banco seguro. siempre hay un camino en
  • -no importa cuán grande, efectivo y sistemático sea el equipo de codificadores, otro adolescente con tiempo suficiente y PC de bajo presupuesto podrá encontrar el error que cometieron.
  • la seguridad suele ser un tema de reflexión, el sistema de compilación ppl luego piensa “ahora cómo asegurarlo”
  • En este mercado difícil, la compañía lanza productos tan pronto como funciona, luego lo repara y lo repara. “Aka ágil”
  • finalmente. seguir actualizando para evitar malos atacantes

no se puede conectar si el sistema de seguridad está desbloqueado o necesita contraseña o clave … luego puede activarse y puede comenzar