¿Es el código fuente cerrado más seguro que el código abierto?

Mi profesor de informática nos dijo que el software de código cerrado es más seguro que el software de código abierto, porque con el código abierto "cualquiera puede modificarlo y ponerle cosas". Es por eso que no quieren usar alternativas de código abierto para aprender a programar, como FreePascal (actualmente usa Embarcadero Delphi, que es lento y con errores).

Creo que esto está completamente mal. Por ejemplo, Linux parece ser considerablemente más resistente a las vulnerabilidades que Windows; aunque podría deberse a la popularidad/cuota de mercado.

¿Qué estudios se han realizado que muestran que el código abierto o el código cerrado es mejor en términos de seguridad?

¿Cuándo aprenderá la gente que la seguridad a través de la oscuridad en sí misma es un concepto profundamente defectuoso...
@Ardesco: Probablemente la primera vez que los golpean.
Creo que el hecho mismo de que estén enseñando en Pascal muestra cuán informado y actual es el maestro, por no hablar de la actitud ludita hacia el código abierto.
¿Alguna empresa todavía usa pascal? @Thomas, creo que sería mejor que aprendieras un lenguaje más actual en tu propio tiempo (estoy predispuesto hacia Python). En cuanto a código cerrado versus código abierto, si escribo una pieza de software de código cerrado, no sabes a quién dejo poner qué, solo tienes que esperar que sea sensato al respecto.
El código abierto suele ser más seguro porque cualquiera puede cambiarlo. Significa que cualquiera puede descubrir y corregir errores. Así que tu maestro está completamente equivocado.
pregúntele a su maestro qué tiene que decir sobre los servidores apache vs IIS, donde apache tiene una mayor participación de mercado, pero se realizan más explotaciones exitosas en IIS (microsoft) y si su maestro no sabe sobre ellos, tiene muy poco conocimiento y sólo abarrota el libro de texto.
@Stephen Estoy de acuerdo al 100% ya que soy muy hábil en Python. :) Es un lenguaje maravilloso para programar. Una empresa importante que todavía usa Delphi sería Altium (software EDA), pero eso probablemente no se deba a una elección: construyeron una gran base de código en él y prácticamente se atascaron con él. ! Nos vemos obligados a usar Delphi porque la junta de examen (AQA) lo dice. Aunque Python es una opción en A2 (el próximo año), no podemos hacerlo este año. Puaj.
Por lo general, a los atacantes no les importa demasiado el código fuente: tienen el código compilado y pueden usar una variedad de técnicas para explotar sus debilidades. Este enfoque puede ser mucho más rápido que tener que leer y comprender el código fuente.
Menos interesante que si algo es de código abierto o cerrado son los incentivos que tiene el productor para identificar y remediar los problemas de seguridad. Las variables son: Abierto y gratuito, comercial y cerrado. ¿Cuáles son los incentivos y motivaciones de los desarrolladores para Debian (abierto, gratuito), Red Hat (abierto, comercial), Shareware shops (cerrado, gratuito) y Microsoft (cerrado, comercial)?
@Thomas O, al menos tienes que hacer Delphi en tu año AS, estábamos atascados en Turbo Pascal (basado en DOS). En A2 nos permitieron Delphi y sólo Delphi. Aunque eso fue hace 8-9 años... Haciéndome sentir viejo ;)
@Brian M. Hunt, pero cuando el código es de código abierto, hay muchos voluntarios que corrigen el código y cualquiera puede corregirlo.
"Cualquiera puede poner cosas en él". Ahhh, es por eso que cada dos días inicio sesión en mi sistema operativo, el mensaje de bienvenida se cambia a "dicks lol" o "n00bz".
@Dov, para ser justos, Pascal se inventó como lenguaje para enseñar programación. El problema vino después cuando todos esos estudiantes pensaron que era un lenguaje real y trataron de usarlo para tareas reales. Por supuesto, muy pocas clases de CS enfatizan ese detalle.
@Alaukik Tal vez a su maestro también le guste IE sobre Firefox debido a su mejor seguridad.
@muntoo, en realidad, tienes razón. Bueno, instalé Chrome en las máquinas porque no requiere acceso de administrador. Cuando estábamos navegando en una página web específica (hecha con Flash - Kerboodle), nos dijeron que era incompatible y un riesgo de seguridad, aunque funcionaba el doble de bien que IE, que es lento y con errores. Ahora han bloqueado Chrome. :(
Diría que es más probable que "cosas" estén en software de código cerrado. Por ejemplo, el fiasco de la puerta trasera de Interbase: theregister.co.uk/2001/01/12/borland_interbase_backdoor_exposed
"Cualquiera puede modificarlo" no significa que cualquiera lo haga. Modificarlo y llevar los cambios a la corriente es un problema más difícil. O para difundir "cosas".
@Dov, @StephenPaulger: La gente todavía usa Delphi bastante en la industria. Skype, por ejemplo, acaba de ser adquirido por Microsoft por 8.500 millones de dólares. O si vive en los EE. UU., es muy probable que la estación de televisión que ve esté a cargo de un software de control basado en Delphi de WideOrbit, el líder de la industria por un margen justo. (También mi empleador actual, y no podríamos lograr la mitad de las cosas que hacemos sin Delphi. Al menos no fácilmente). Muchas empresas prefieren guardar silencio sobre Delphi porque proporciona un aumento de productividad sobre otros idiomas que lo consideran una ventaja competitiva.
En lugar de especular ociosamente, esta pregunta debería hacérsela a los expertos de Information Security . De hecho, se ha preguntado (aunque después de esta aquí), con respuestas racionales y analíticas: security.stackexchange.com/questions/4441/…
@M.Night, @muntoo, @Thomas, algunos de estos comentarios, además de ser innecesariamente argumentativos, están mal informados o, como mínimo, desactualizados. Por ejemplo, si bien es cierto que históricamente IIS tenía un historial de seguridad muy malo, actualmente se considera muy por delante de Apache, en cuanto a seguridad. Lo mismo con IE, mala historia, actualmente sólida. Por otra parte, hoy realmente depende más de factores ambientales, como la habilidad y la mentalidad de los administradores, el endurecimiento del sistema operativo, etc.
En primer lugar: un sistema seguro está a salvo incluso de la persona que diseñó el sistema. Simplemente está bien diseñado y no se basa en la oscuridad, como han señalado otros. Segundo: el argumento "cualquiera puede poner cualquier cosa en él" a menudo se usa contra los artículos de Wikipedia, y la mayoría de las personas aquí deberían saber por qué ese argumento no se sostiene en la realidad exactamente por las mismas razones que con el código abierto.
El único problema que veo con el código abierto es el 'soporte'. Dependería de los foros o de los suyos propios o compraría una suscripción de soporte. La seguridad es una preocupación menor para mí. En general, el software de código abierto es más seguro, robusto y libre de errores que el código cerrado.
Encuentro esto difícil de creer. Habría pensado que todos los programadores que trabajan en educación serían de código abierto.
Una pequeña nota aquí: Linux no es más resistente por definición, pero constituye una parte tan pequeña del ecosistema del sistema operativo (en comparación con Windows) que es contraproducente escribir un exploit no dirigido para esos sistemas. Este tipo de afirmación es equivalente a que las personas de Mac digan que las Mac son inmunes al malware, simplemente no es cierto, simplemente no son lo suficientemente relevantes como para que alguien se esfuerce en ellas.
Esto exige una pregunta de seguimiento: "¿Qué calificaciones se necesitan en el material del curso relevante para convertirse en profesor de informática?"

Respuestas (9)

"El diseño seguro, la auditoría del código fuente, los desarrolladores de calidad, el proceso de diseño y otros factores, todos juegan en la seguridad de un proyecto, y ninguno de estos está directamente relacionado con que un proyecto sea de código abierto o cerrado ".

Fuente : código abierto versus seguridad de código cerrado

Es cierto que estas cosas no están directamente relacionadas con la licencia de un proyecto. Sin embargo, la tendencia de los proyectos de código abierto (OSS) es que, a medida que se vuelven más populares, el código fuente se revisa mucho más. El techo de revisión para proyectos cerrados está naturalmente determinado por la cantidad de desarrolladores que se pueden contratar. No existe tal techo para un proyecto de código abierto, por lo que un proyecto OSS puede revisarse en busca de errores más de lo que podría ser cualquier proyecto cerrado. Si esto sucede depende de su popularidad.
Además, no todos los usuarios de un proyecto de código abierto necesariamente van a ser desarrolladores, e incluso de aquellos que lo son, solo una pequeña fracción de ellos puede leer su código fuente. Así que no se trata solo de popularidad.
@Adrian - En OSS eso se llama Ley de Linus: en.wikipedia.org/wiki/Linus%27_Law
No estoy de acuerdo con esta respuesta. En criptografía, un sistema de seguridad de "caja negra" solo puede considerarse inseguro. Un sistema de criptografía solo se considera "seguro" si el algoritmo que utiliza se comprende bien y se demuestra que es irrompible (para todos los efectos, con tecnología moderna o de futuro cercano). Con OSS, es posible determinar si el sistema usa un algoritmo seguro y si una implementación particular de un algoritmo es defectuosa. Ser OSS o fuente cerrada no cambia el código actual real, pero asegura que sepa lo que está obteniendo, si puede hacer el análisis.
@RMorrisey: Si la NSA induce (a través de cualquier medio, con suerte ético, como contratar a la persona) a los 100 expertos en criptografía más destacados del mundo a analizar su sistema, es tan seguro como sea posible, a pesar de estar oculto. Abrirlo al escrutinio público tendrá un impacto adicional insignificante. Su comentario asume que los criptoanalistas más brillantes del mundo trabajan contribuyendo (únicamente) a proyectos de código abierto, lo cual es sospechoso.
@Ben Voigt: Estaba pensando principalmente desde la perspectiva de otra empresa o entidad que utiliza la herramienta. Si la NSA vendiera su sistema seguro a otro país, ¿quién puede decir que no monitorearía el tráfico que se envía en él? No hay forma de saberlo, excepto creer en la palabra de la entidad codificadora, que es el punto que estaba tratando de hacer.
@RMorrisey, el ejemplo de criptografía que das es un mal ejemplo, ya que la criptografía (y otros temas sutiles de nicho) deben estar abiertos por una razón diferente: la Ley de Kerckhoff. Por otra parte, incluso si presentara una implementación completamente de código abierto de su algoritmo de cifrado especial, esto sería aún peor . Como dije, la criptografía es diferente y no debe ser diseñada por programadores, solo por criptógrafos expertos.
Consulte también una discusión analítica mejor razonada en security.stackexchange.com/questions/4441/…
@Adrian: "la tendencia de los proyectos de código abierto (OSS) es que, a medida que se vuelven más populares, el código fuente se revisa mucho más". Esa es una suposición común, pero me gustaría ver alguna prueba de ello. La gran mayoría de las personas que usan software de código abierto no entienden el código ni siquiera lo miran.
@BenVoigt solo porque son los principales expertos del mundo no los convierte en los 'mejores' en su campo, o más específicamente, no significa que no se perderán algo que están entrenados para ignorar. A lo largo de la historia, hemos visto a los novatos triunfar sobre los profesionales porque no sabían que no podían hacer algo. El código abierto les da a esas personas la oportunidad de fallar.
-1 Una de las mejores respuestas en este sitio, y es solo una OPINIÓN de un blog, sacada de contexto (ver el último párrafo de ese enlace) , y en desacuerdo con la opinión de la mayoría de los profesionales (ver el comentario de @RMorrisey) . Esta respuesta debe ser eliminada o algo así...
Los moderadores de @BlueRaja-DannyPflughoeft están investigando cómo manejar tal situación. Gracias por traer esto a nuestra atención.
@endolith La prueba que necesita se menciona en otra respuesta en esta página . Cita: "El código fuente de OpenBSD se examina de forma regular y deliberada con la intención explícita de encontrar y corregir agujeros de seguridad (Payne, 1999), (Payne, 2000)".
Y... Heartbleed eliminó por completo la credibilidad de la Ley de Linus.
@LarianLeQuella: ¿Ha tomado una decisión el equipo de mods? Leer más detenidamente esta respuesta ni siquiera responde a la pregunta: implica que el código abierto/cerrado no importa, pero los hechos centrales solo afirman que el código abierto/cerrado no tiene nada que ver con otros factores que afectan la seguridad.
@Nadie, gracias por llamar nuestra atención sobre esto. No lo he mirado mucho ya que está fuera de mi área de interés/experiencia. Lo llevaré al resto del equipo.
Aún más: los programas de código abierto y cerrado se enfrentan a la misma presión de los ataques, pero los de código abierto tienen muchos más ojos para echar un vistazo al código que cualquiera de las herramientas de código cerrado.
«Sin embargo, la tendencia de los proyectos de código abierto (OSS) es que a medida que se vuelven más populares, el código fuente se revisa mucho más». Se ha encontrado que esto es una falacia varias veces. Por ejemplo, PHP es de código abierto y muy popular, pero tiene un historial de seguridad terrible. Debian y sus versiones posteriores, como Ubuntu, son un estándar de servidor de facto muy popular, pero eso no les impidió sabotear el propio OpenSSL ( debian.org/security/2008/dsa-1571 ) o sabotear las bibliotecas que usan SSL al compilar contra GnuTLS con errores. en lugar de OpenSSL.
@RMorrisey Algo no se vuelve más o menos seguro de ser una caja negra. En realidad, no puede verificar y ver si es seguro si es una caja negra, por supuesto, y si no sabe , asumir que de hecho no es seguro es un valor predeterminado razonable, pero la oscuridad no impide que un sistema sea seguro; Es un error pensar en la oscuridad como una característica de seguridad en sí misma.
@BenVoigt Su afirmación de que los 100 mejores expertos en seguridad harían algo lo más seguro posible es dudosa. ¿Puedes citarlo?
@Fax: En realidad, es cierto por construcción. Los "expertos" son los que hacen que algo sea lo más seguro posible. Esto tiene mucho en común con la falacia "No True Scotsman", excepto por el hecho de que soy yo quien controla el escenario del contraejemplo. En mi escenario, "principalmente" significa que los expertos se clasifican según la fuerza del sistema que son capaces de construir. Por lo tanto, el resultado puede no ser "tan seguro como sea teóricamente posible", pero será "más seguro de lo que podría construir cualquier otro grupo de tamaño comparable".
@BenVoigt Eso supone que una persona puede hacer que algo sea lo más seguro posible por su cuenta (¿quién necesita una revisión del código, verdad?), y que tomar una pieza de software que sea lo más segura posible y unirla con otra pieza de software que sea tan seguro como sea posible no produce algo que sea menos que tan seguro como sea posible. También asume que 100 expertos colectivamente tienen suficiente conocimiento para construir cada componente de un software dado. Creo que encontrarás que la interacción humana entra en juego en algún momento, y en ese momento ya no es una verdad constructiva.
@Fax: En realidad, en mi ejemplo, los 100 expertos fueron responsables de una parte del control de calidad (encontrar debilidades criptográficas prácticas) únicamente. Podría haber habido cualquier número de desarrolladores. Pero si encuentra un grupo diferente de 100 que hace un trabajo "mejor" que mi grupo, digo que la palabra "principal" se aplica a su grupo, por lo tanto, esos son los que tuve en mi ejemplo todo el tiempo. Tenga en cuenta que no estoy haciendo afirmaciones sobre la efectividad de los criptoanalistas que la NSA realmente usa, he ideado un contraejemplo para la afirmación anterior.
@BenVoigt ¿Por qué tendría que seleccionar un grupo de 100 personas? Un proyecto que está restringido a 100 personas realmente no puede considerarse de código abierto. La pregunta es si el grupo de los 100 mejores expertos puede producir código al menos tan seguro como el 7.8B que no está en ese grupo.
@Fax: Ahora necesita millones de personas solo para clasificar los comentarios provenientes de las 7800 millones de personas. No, de manera realista, lo que sucederá es que los proyectos de código abierto ignorarán a la mayoría de los 7.800 millones de revisores potenciales. Y todavía estás confundiendo lo que está haciendo mi grupo de 100 analistas. No están produciendo el código, están revisando el diseño (parcialmente basado en el código pero aumentado con otra documentación) en busca de fallas.

El hecho de que el software sea de código abierto no significa que cualquiera pueda cambiarlo (a menudo, cualquiera puede bifurcarlo , pero ese será un nuevo software derivado): solo las personas dedicadas tienen acceso al repositorio. Por ejemplo, si quiero enviar un cambio a Tortoise SVN , tengo que enviar mi cambio por correo a una lista de correo dedicada y luego los desarrolladores lo verán, lo revisarán y lo confirmarán en la base de código. 1 , 2


Aún así, cualquiera puede leer las fuentes. Eso tampoco es gran cosa. Mire la criptografía contemporánea. Los algoritmos son públicos e investigados y probados por numerosas personas. ¿Cómo se pueden utilizar para proteger los datos? Utilizan pequeñas porciones de datos secretos (claves de cifrado) para parametrizar el algoritmo. Todos conocen el algoritmo , pero solo las personas que necesitan conocer las claves secretas y los algoritmos se utilizan con éxito para la protección de datos.


Dicho esto, el software de código abierto y el software seguro (o confiable) son completamente independientes: compararlos es como comparar manzanas con naranjas. Sí, el software de código abierto puede tener errores. Lo mismo ocurre con el software de código cerrado. Es cómo se organiza el proceso de desarrollo, no si divulgas las fuentes.


Referencias:

1

Envíe parches (¡envíe los suficientes y podrá convertirse en un commiter!)

2 (ligeramente modificado)

Técnicamente, un committer es alguien que tiene acceso de escritura al repositorio SVN. Un committer puede enviar sus propios parches o parches de otros.

Los escépticos requieren referencias para todas las respuestas. Las respuestas sin referencias son solo especulaciones, no hechos. Consulte las preguntas frecuentes . ¡Gracias!
Así que sharptooth debería escribir un artículo y luego pedirle a un amigo que lo cite.
@Kevin ¿Te refieres a la "bifurcación"? ¿O la criptografía "los algoritmos son públicos e investigados y probados por numerosas personas"?
@Kevin Peno: ¿Dijiste que necesitaba una referencia solo porque Sharptooth dijo que no estaba citando ninguna? La única opinión en su publicación es "Eso tampoco es gran cosa" y el último párrafo. El resto son hechos bien conocidos.
@Lie, bien sabes, ¿eh? Entonces debe haber estudios para citar entonces?
@Kevin Peno: Puede verificar esto tan fácilmente como observar que hay 24 horas en un día: "El software es de código abierto no significa que cualquiera pueda cambiarlo, solo las personas dedicadas tienen acceso al repositorio", "si quiero enviar un cambio a Tortoise SVN Tengo que enviar mi cambio por correo a una lista de correo dedicada y luego los desarrolladores lo verán, lo revisarán y lo confirmarán en el código base", "Aún así, cualquiera puede leer las fuentes", "criptografía contemporánea... Los algoritmos son públicos y son investigados y probados por numerosas personas", "Utilizan pequeñas porciones de... claves de cifrado... para parametrizar el algoritmo".
@Kevin No estoy seguro de lo que quiere decir con "estudios"... En cualquier caso, eso es algo básico que todo programador/[no] investigador de seguridad debería saber. Supongo que podríamos vincularnos a algún proyecto de código abierto al azar sobre la bifurcación, pero eso es solo... bueno, ya sabes.
@Kevin Peno: ¿sabes siquiera la diferencia entre hechos y opiniones? Vaya al repositorio Tortoise SVN y vea si puede obtener acceso de escritura sin pasar por su sistema de revisión de código. Esto prueba el hecho 1) y 2). "cualquiera puede leer las fuentes" es la definición de fuente abierta. Los "AES" son públicos e investigados y probados por numerosas personas. "AES" utiliza una clave de cifrado para parametrizar el algoritmo.
@Kevin Peno. No es necesario citar fuentes de hechos bien conocidos. @Lie Ryan "cualquiera puede leer las fuentes" no es la definición de código abierto. La definición se da aquí: programmers.stackexchange.com/questions/21907 (la definición sutilmente diferente de Software Libre también se da allí).
"Se trata de cómo se organiza el proceso de desarrollo, no si revelas las fuentes". - Pero también es cómo se organiza el proceso de lanzamiento (y las pruebas, la reputación, etc.).

No voy a responder a esta pregunta yo mismo. El Departamento de Defensa de los Estados Unidos lo ha hecho mucho mejor que yo.

P: ¿Ocultar el código fuente no hace que el software sea automáticamente más seguro?

No. De hecho, las bases de datos de vulnerabilidades como CVE dejan claro que simplemente ocultar el código fuente no contrarresta los ataques:

  • Los ataques dinámicos (p. ej., generar patrones de entrada para detectar vulnerabilidades y luego enviar esos datos al programa para ejecutarlos) no necesitan código fuente ni binario. Observar la salida de las entradas suele ser suficiente para el ataque.

  • Los ataques estáticos (p. ej., analizar el código en lugar de su ejecución) pueden utilizar coincidencias de patrones con binarios; tampoco se necesita el código fuente para ellos.

  • Incluso si el código fuente es necesario (por ejemplo, para los analizadores de código fuente), los desensambladores y descompiladores a menudo pueden regenerar el código fuente adecuado para buscar vulnerabilidades. Dicho código fuente puede no ser adecuado para mantener el software de manera rentable, pero los atacantes no necesitan mantener el software.

  • Incluso cuando la fuente original es necesaria para un análisis en profundidad, poner el código fuente a disposición del público ayuda significativamente a los defensores y no solo a los atacantes. La revisión por pares continua y amplia, habilitada por el código fuente disponible públicamente, mejora la confiabilidad y la seguridad del software a través de la identificación y eliminación de defectos que, de otro modo, podrían pasar desapercibidos por el equipo central de desarrollo. Por el contrario, cuando el código fuente está oculto al público, los atacantes pueden atacar el software de todos modos como se describe anteriormente. Además, un atacante a menudo puede adquirir el código fuente original de los proveedores de todos modos (ya sea porque el proveedor lo proporciona voluntariamente o mediante ataques contra el proveedor); en tales casos, si solo el atacante tiene el código fuente, el atacante obtiene otra ventaja.

Ocultar el código fuente inhibe la capacidad de terceros para responder a las vulnerabilidades (porque cambiar el software es más difícil sin el código fuente), pero obviamente esto no es una ventaja de seguridad. En general, la “Seguridad por Oscuridad” es ampliamente denigrada.

Esto no significa que el DoD rechazará el uso de productos COTS patentados. Existen razones comerciales válidas, no relacionadas con la seguridad, que pueden llevar a una empresa comercial que vende software propietario a optar por ocultar el código fuente (por ejemplo, para reducir el riesgo de infracción de derechos de autor o la revelación de secretos comerciales). Lo que sí significa, sin embargo, es que el DoD no rechazará la consideración de un producto COTS simplemente porque es OSS. Algunos OSS son muy seguros, mientras que otros no lo son; algunos programas propietarios son muy seguros, mientras que otros no lo son. Cada producto debe ser examinado por sus propios méritos.

Editar para agregar: también hay una respuesta a la pregunta de inserción de código malicioso:

P: ¿Existe el riesgo de que se incruste un código malicioso en el OSS?

El uso de cualquier software disponible comercialmente, ya sea propietario o OSS, crea el riesgo de ejecutar un código malicioso incrustado en el software. Incluso si un programa comercial no tenía vulnerabilidades originalmente, los archivos binarios de los programas propietarios y OSS pueden modificarse (por ejemplo, con un "editor hexadecimal" o virus) para que incluya código malicioso. Puede que sea ilegal modificar el software propietario, pero eso normalmente no ralentizará a un atacante. Afortunadamente, existen formas de reducir el riesgo de ejecutar código malicioso cuando se utiliza software comercial (tanto propietario como OSS). Es imposible eliminar por completo todos los riesgos; en su lugar, concéntrese en reducir los riesgos a niveles aceptables.

El uso de software con una licencia propietaria no garantiza en absoluto que el software esté libre de código malicioso. De hecho, muchas personas han lanzado código propietario que es malicioso. Además, las prácticas de lanzamiento de software propietario hacen que sea más difícil estar seguro de que el software no incluye código malicioso. Dicho software normalmente no se somete a una revisión pública generalizada; de hecho, el código fuente generalmente no se proporciona al público y, a menudo, hay cláusulas de licencia que intentan inhibir una revisión adicional (por ejemplo, prohibir la ingeniería inversa y/o prohibir la divulgación pública de los resultados del análisis). ). Por lo tanto, para reducir el riesgo de ejecutar código malicioso, los usuarios potenciales deben considerar la reputación del proveedor y la experiencia de otros usuarios, preferir software con una gran cantidad de usuarios, y asegúrese de que obtengan el software "real" y no un imitador. Cuando sea importante, también puede ser conveniente examinar la postura de seguridad del proveedor (por ejemplo, sus procesos que reducen el riesgo) y escanear/probar/evaluar el software.

Del mismo modo, el OSS (así como el software propietario) puede tener incrustado un código malicioso. Sin embargo, dicho código malicioso no puede ser insertado directamente por "cualquiera" en un proyecto OSS bien establecido. Como se indicó anteriormente, los proyectos OSS tienen un "repositorio de confianza" que solo ciertos desarrolladores (los "desarrolladores de confianza") pueden modificar directamente. Además, dado que el código fuente se publica públicamente, cualquiera puede revisarlo, incluso por la posibilidad de código malicioso. El lanzamiento público también facilita tener copias de las versiones en muchos lugares y comparar esas versiones, lo que facilita que muchas personas revisen los cambios. Muchos perciben esta apertura como una ventaja para OSS, ya que OSS cumple mejor con el "principio de diseño abierto" de Saltzer & Schroeder ("

Al igual que con el software propietario, para reducir el riesgo de ejecutar código malicioso, los usuarios potenciales deben tener en cuenta la reputación del proveedor (el proyecto OSS) y la experiencia de otros usuarios, preferir el software con una gran cantidad de usuarios y asegurarse de que obtienen la software "real" y no un imitador (por ejemplo, del sitio principal del proyecto o de un distribuidor de confianza). Cuando sea importante, también puede ser conveniente examinar la postura de seguridad del proveedor (el proyecto OSS) y escanear/probar/evaluar el software. El ejemplo de InterBase/Firebird de Borland es instructivo. Durante al menos 7 años, Interbase de Borland (un programa de base de datos patentado) había incorporado una "puerta trasera"; el nombre de usuario "políticamente", la contraseña "correcta", daría inmediatamente al solicitante el control total sobre la base de datos, un hecho desconocido para sus usuarios. Ya sea que esto fuera intencional o no, ciertamente tenía la misma forma que una puerta trasera maliciosa. Cuando el programa se lanzó como OSS, en 5 meses se encontró y solucionó esta vulnerabilidad. Esto demuestra que el software propietario puede incluir funcionalidades que podrían describirse como maliciosas y, sin embargo, permanecer sin reparar, y que al menos en algunos casos el OSS se revisa y repara.

Tenga en cuenta que el mero hecho de estar desarrollado para el gobierno no garantiza que no haya código incrustado malicioso. Dichos desarrolladores no necesitan ser autorizados, por ejemplo. Requerir que todos los desarrolladores sean aprobados primero puede reducir ciertos riesgos (a costos sustanciales), cuando sea necesario, pero incluso así no hay garantía.

Tenga en cuenta que la mayoría del software comercial no está diseñado para usarse donde el impacto de cualquier error de cualquier tipo sea extremadamente alto (por ejemplo, es probable que se pierda inmediatamente una gran cantidad de vidas si ocurre el más mínimo error de software). El software que cumple con requisitos muy altos de confiabilidad/seguridad, también conocido como software de "alta garantía", debe diseñarse especialmente para cumplir con dichos requisitos. La mayoría del software comercial (incluido el OSS) no está diseñado para tales fines.

por supuesto, hay cosas que, cuando se exponen, crean un riesgo de seguridad. Piense en los algoritmos de encriptación. Si un enemigo sabe qué algoritmo de cifrado está utilizando (y qué implementación específica, con sus fallas), interceptar y descifrar sus datos se vuelve potencialmente mucho más fácil. Por supuesto, eso no es seguridad de software como tal, sino seguridad de datos y transporte de datos, pero es parte de todo el panorama que debe abordar.
@jwenting Excepto que no existen estándares criptográficos modernos y aceptados, no tenga en cuenta el Principio de Kerckhoff . Todos asumen que el sistema es conocido. Una vez podría argumentar a favor de los hashes de contraseña NTLM, pero eso es de código cerrado . Hay algoritmos (como AES) que tienen confidencialidad directa perfecta , lo que significa que incluso si conoce el sistema (algoritmo) e incluso si conoce la clave privada , una vez que se genera y pasa la clave de sesión inicial, todavía está de vuelta en descifrado de fuerza bruta.

En 2002, Payne realizó un estudio comparando tres sistemas operativos similares a Unix, uno de los cuales era de código cerrado (Solaris) y dos de los cuales eran de código abierto (Debian y OpenBSD) a través de una serie de métricas de seguridad. Él concluye:

Los resultados muestran que, de los tres sistemas, OpenBSD tenía la mayor cantidad de funciones de seguridad (18), con Debian en segundo lugar (15) y Solaris en tercero (11). De estas funciones, las funciones de OpenBSD obtuvieron la puntuación más alta con 7,03 sobre 10, mientras que las de Debian obtuvieron un 6,42 y las de Solaris un 5,92. Se observó un patrón similar para las vulnerabilidades, con OpenBSD teniendo la menor cantidad (5).
...
Con base en estos resultados, parecería que los sistemas de código abierto tienden a ser más seguros, sin embargo, ... con una puntuación de 10.2, OpenBSD fue el único sistema del árbol que recibió una puntuación positiva y, en comparación con las magnitudes de los otros dos puntuaciones sugiere que esta también es una puntuación relativamente alta. Por lo tanto, las diferencias significativas entre la puntuación de Debian y OpenBSD respaldan el argumento de que hacer un programa de 'código abierto' no mejora automáticamente, por sí mismo, la seguridad del programa (Levy, 2000), (Viega, 2000). ¿Qué explica, por lo tanto, la seguridad espectacularmente mejor exhibida por el sistema OpenBSD sobre los otros dos? El autor cree que la respuesta a esta pregunta radica en el hecho de que, si bien el código fuente del sistema Debian está disponible para cualquiera que quiera examinarlo, el código fuente de OpenBSD se examina de manera regular y deliberada con la intención explícita de encontrar y corregir agujeros de seguridad (Payne, 1999), (Payne, 2000). Por lo tanto, es este trabajo de auditoría, más que simplemente la disponibilidad general del código fuente, el responsable del bajo número de problemas de seguridad de OpenBSD.

Editar: para resumir, Payne explica sus resultados afirmando que es la cultura de la seguridad en sí misma la que promueve la seguridad real. Si bien es probable que eso sea cierto, creo que también es importante tener en cuenta que, en igualdad de condiciones, el público en general no puede auditar de forma independiente lo que no está abierto.

Sin embargo, ese estudio está un poco anticuado y tiene una amplitud limitada.

Traté de buscar un estudio más completo, pero realmente no pude encontrar nada sustantivo (hay muchos "artículos de opinión" que dan argumentos sobre por qué el código abierto es mejor, pero no muchos datos). Por lo tanto, eché un vistazo rápido a la base de datos nacional de vulnerabilidades , que recopila, clasifica y publica vulnerabilidades de software. Tiene una base de datos que data de la década de 1980. Rápidamente compuse este script de perl para analizar la base de datos:

#!/usr/bin/perl -w
use Cwd 'abs_path';
use File::Basename;
use XML::Parser;
my @csseverity;my @osseverity;my @bothseverity;
my $numNeither = 0;
sub mean {
  my $result; return 0 if(@_ <= 0); foreach (@_) { $result += $_ } return $result / @_;
}
sub stddev {
  my $mean = mean(@_); my @elem_squared; foreach (@_) { push (@elem_squared, ($_ **2));     }
  return sqrt( mean(@elem_squared) - ($mean ** 2));
}
sub handle_start {
    if($_[1] eq "entry") {
        $item = {};
        undef($next) if(defined($next));
        for(my $i=2; $i<@_; $i++) {
            if(!defined($key)) {
                $key = $_[$i];
            } else {
                $item->{$key} = $_[$i];
                undef($key);
            }
        }
    } elsif(defined($item)) {
        $next = $_[1];
    }
}
sub handle_end {
    if($_[1] eq "entry") {
        if(!exists($item->{'reject'}) || $item->{'reject'} != 1) {
            my $score = $item->{'CVSS_score'};
            my $d = $item->{"descript"};
            my $isOS = 0;
            my $isCS = 0;
            $isOS = 1 if($d =~ m/(^|\W)(linux|nfs|openssl|(net|open|free)?bsd|netscape|red hat|lynx|apache|mozilla|perl|x windowing|xlock|php|w(u|f)-?ftpd|sendmail|ghostscript|gnu|slackware|postfix|vim|bind|kde|mysql|squirrelmail|ssh-agent|formmail|sshd|suse|hsftp|xfree86|Mutt|mpg321|cups|tightvnc|pam|bugzilla|mediawiki|tor|piwiki|ruby|chromium|open source)(\W|$)/i);
            $isCS = 1 if($d =~ m/(^|\W)(windows|tooltalk|solaris|sun|microsoft|apple|macintosh|sybergen|mac\s*os|mcafee|irix|iis|sgi|internet explorer|ntmail|sco|cisco(secure)?|aix|samba|sunos|novell|dell|netware|outlook|hp(-?ux)?|iplanet|flash|aol instant|aim|digital|compaq|tru64|wingate|activex|ichat|remote access service|qnx|mantis|veritas|chrome|3com|vax|vms|alcatel|xeneo|msql|unixware|symantec|oracle|realone|real\s*networks|realserver|realmedia|ibm|websphere|coldfusion|dg\/ux|synaesthesia|helix|check point|proofpoint|martinicreations|webfort|vmware)(\W|$)/i);
            if($isOS && $isCS) {
                push(@bothseverity, $score);
            } elsif($isOS) {
                push(@osseverity, $score);
            } elsif($isCS) {
                push(@csseverity, $score);
            } else {
                $numNeither++;
                #print $d . "\n";
            }
        }
        undef($item);
    }
}
sub handle_char {
    $item->{$next} = $_[1] if(defined($item) && defined($next));
    undef($next) if(defined($next));
}
my($scriptfile, $scriptdir) = fileparse(abs_path($0));
sub process_year {
    my $filename = 'nvdcve-' . $_[0] . '.xml';
    system("cd $scriptdir ; wget http://nvd.nist.gov/download/" . $filename) unless(-e $scriptdir . $filename);
    $p = new XML::Parser(Handlers => {Start => \&handle_start,
                                      End   => \&handle_end,
                                      Char  => \&handle_char});
    $p->parsefile($filename);
}
my($sec,$min,$hour,$mday,$mon,$currentyear,$wday,$yday,$isdst) = localtime(time);
$currentyear += 1900;
for(my $year=2002; $year<=$currentyear; $year++) {
    &process_year($year);
}
print "Total vulnerabilities: " . (@osseverity + @csseverity + @bothseverity + $numNeither) . "\n";
print "\t  # Open Source (OS): " . @osseverity . "\n";
print "\t# Closed Source (OS): " . @csseverity . "\n";
print "\t              # Both: " . @bothseverity . "\n";
print "\t      # Unclassified: " . $numNeither . "\n";
print "OS Severity: " . &mean(@osseverity) . "\t" . &stddev(@osseverity) . "\n";
print "CS Severity: " . &mean(@csseverity) . "\t" . &stddev(@csseverity) . "\n";
print "Both Severity: " . &mean(@bothseverity) . "\t" . &stddev(@bothseverity) . "\n";

Siéntase libre de modificar el código, si lo desea. Aquí están los resultados:

La base de datos completa tiene 46102 vulnerabilidades. Mi secuencia de comandos pudo clasificar 15748 de ellos como específicamente relacionados con el software de código abierto, 11430 estaban relacionados con el software de código cerrado, 782 eran aplicables tanto al software de código abierto como al de código cerrado, y 18142 no estaban clasificados (no tuve tiempo para optimizar mucho mi clasificador; siéntete libre de mejorarlo). Entre las vulnerabilidades que se clasificaron, las de código abierto tuvieron una severidad promedio de 6.24 con una desviación estándar de 1.74 (a mayor severidad es peor). Las vulnerabilidades de fuente cerrada tenían una gravedad promedio de 6,65 (stddev = 2,21). Las vulnerabilidades que se clasificaron como ambas tenían una gravedad media de 6,47 (stddev = 2,13). Sin embargo, puede que esta no sea una comparación completamente justa, ya que el software de código abierto se ha vuelto mucho más popular en los últimos años.

  • Vulnerabilidades totales: 39445
  • # Código abierto (SO): 14595
  • # Fuente cerrada (CS): 9293
  • # Ambos: 675
  • # Sin clasificar: 14882
  • Promedio Gravedad del SO: 6.25 (stddev 1.70)
  • Promedio CS Gravedad: 6.79 (stddev 2.24)
  • Ambos Gravedad: 6,52 (stddev 2,15)

No he tenido tiempo de hacer ningún análisis estadístico de estos resultados; sin embargo, parece que, en promedio, las vulnerabilidades que afectan al software de código abierto tienen una clasificación de gravedad ligeramente menor que las vulnerabilidades que afectan al software de código cerrado.

Cuando tenga más tiempo, intentaré generar un gráfico del promedio móvil de gravedad a lo largo del tiempo.

¡Oh, no! No puedo ejecutar ese script ahora. ¡Lo has hecho de código abierto! :-)
Una cosa a tener en cuenta sobre la cantidad de vulnerabilidades de código abierto es que los usuarios preocupados por la seguridad notificarán a los desarrolladores y se registrarán más errores/agujeros de seguridad.
Su resumen del trabajo de Payne es exactamente lo contrario de la conclusión que usted citó. Parafraseando a Payne usando su palabrería: "Que el software de código abierto esté disponible gratuitamente permite que cualquiera que esté interesado en realizar una auditoría de seguridad del código no puede dar cuenta de la calificación de seguridad relativamente alta de OpenBSD, porque Debian también está disponible gratuitamente para la auditoría. Lo más plausible La explicación es que la cultura de OpenBSD se centra en la seguridad y, de hecho, realiza este tipo de auditorías. ¡Disponible para la auditoría! = ¡auditado!"
@Ben: tienes razón; Estaba tratando de enfatizar el hecho de que tal cultura solo es posible en un entorno de código abierto.
@ESultanik: Eso no sigue. Ofrezco a la NSA como ejemplo de una organización muy cerrada que también tiene una cultura centrada en la seguridad.
@Ben: Cierto, pero si todo lo demás es igual en términos de cultura, el público en general no puede auditar de forma independiente lo que no está abierto.
El simple seguimiento de los incidentes de seguridad documentados no cuenta toda la historia. Realmente necesitamos saber la tasa a la que se encuentran las vulnerabilidades no descubiertas (o peor aún, no reveladas) en cada tipo de proyecto, así como el tiempo que le toma a cada organización corregir las vulnerabilidades una vez reveladas.
Mi sospecha es que el tiempo de mitigación o arreglo va a estar por todas partes para ambos tipos. Ha abandonado el software en ambos lados, y las herramientas populares deberían tener presión en el mercado a favor de una mitigación rápida, independientemente de si son de código abierto o cerrado.
Para ser precisos, está bajo CC .
@Ben: Edité mi resumen para transmitir con mayor precisión las conclusiones de Payne.
Tenga en cuenta que en 2002, Sun estaba comenzando su largo deslizamiento hacia el infierno. Por lo tanto, puede concluir, correctamente, que es malo comprar un sistema operativo de una empresa que no tiene el margen de beneficio para mantenerlo. Por supuesto, la razón por la que estaban en declive fue la disponibilidad de los sistemas operativos gratuitos, pero mi punto es que Solaris ya se estaba quedando huérfano en ese entonces, por lo que quizás no sea el mejor punto de comparación.

Mi profesor de informática nos dijo que el software de código cerrado es más seguro que el software de código abierto, porque con el código abierto "cualquiera puede modificarlo y ponerle cosas".

Tu profesor está completamente equivocado. La afirmación correcta es:

cualquiera puede bifurcarlo y poner cosas en su tenedor .

Código abierto significa que cualquiera puede leer el código fuente correspondiente al binario distribuido. Por lo general, también significa que cualquiera puede leer desde el repositorio principal donde ocurre el desarrollo, para probar nuevos cambios inéditos. FreePascal sigue este patrón general: "Como alternativa a los archivos zip diarios de las fuentes SVN, el repositorio SVN se ha hecho accesible para todos, con acceso de solo lectura".

No requiere que el público en general pueda escribir en el repositorio principal; de hecho, la norma general es que el acceso de escritura se limite a los miembros del proyecto de confianza. En algunos casos, el repositorio acepta parches de cualquier persona, pero se ponen en cuarentena en ramas separadas hasta que un miembro de confianza combine el cambio en la base de código maestra (troncal). Parece que FreePascal sigue este último modelo, solo necesita una cuenta gratuita para cargar parches, pero no se integrarán en la línea principal sin revisión.

Pídele a tu maestro que respalde sus palabras con acciones: tienes FreePascal instalado en tu computadora, si cree que es "inseguro", pídele que "modifique y coloque" un mensaje insultante que aparecerá la próxima vez que lo ejecutes. No sucederá, existe un gran abismo entre la copia modificada en su directorio de inicio y la versión que descargas y compilas en tu computadora.


Su oración final, que solicita estudios que realicen una comparación estadística de código abierto frente a código cerrado, muestra que ha adoptado una de las malas prácticas de su maestro: la falacia de aplicar la ley de los promedios a un individuo.

Considero que la utilidad para usted de dibujar software de una categoría que es más segura en promedio es esencialmente nula. Debería estar interesado en cambio en los programas que son individual y específicamente altamente seguros, sin importar las características que compartan con el software inseguro.

Los escépticos requieren referencias para todas las respuestas. Las respuestas sin referencias son solo especulaciones, no hechos. Consulte las preguntas frecuentes . ¡Gracias!
@Kevin: Su referencia no corrobora su reclamo. Las preguntas frecuentes que vinculó ni siquiera contienen la cadena "referir". Además, antes de exigir referencias de alguien (por ejemplo, Sharptooth arriba), es posible que desee verificar primero que no sea un experto reconocido en el campo, cuya palabra es tan buena como cualquier trabajo al que pueda hacer referencia. Además, un argumento es tan válido como sus premisas, lo que demuestra que la premisa asumida que se cuestiona es un medio válido (según la lógica formal) de invalidar un argumento.
@Ben, el objetivo de este sitio es traer hechos a una cuestión de especulación. Por lo tanto, al responder sin referencias citadas, incluso su propia tesis si es un experto en su campo, solo está aumentando la especulación. Si la especulación y los hechos falsos no fueran un problema, no seríamos escépticos. Te sugiero que busques un poco más en este sitio. Skeptics is about applying skepticism — it's for researching the evidence behind the claims you hear or read. Así que le pregunto señor, ¿dónde está su evidencia?
@Kevin: Su fracaso para corroborar el reclamo en sus comentarios simplemente lo expone como un hipócrita. No obstante, añadiré una cita.
@Ben, la cita en bloque es de la página de preguntas frecuentes que mencioné anteriormente. También podría vincularme a miles de respuestas en este sitio donde un moderador ha dicho exactamente lo que he dicho. ¿Te gustaría que ensuciara más tus comentarios?
@Kevin: No, preferiría que demostrara un buen estilo de respuesta escribiendo algunas respuestas. Deje que los verdaderos colaboradores del sitio lo vigilen. Ah, y el escepticismo también se trata de conocer los principios básicos de la lógica, como la identificación de suposiciones.
@Ben, aquí tienes . El hecho de que no tenga una buena manera de responder a las preguntas planteadas en este sitio no significa que no sea un colaborador. Además, como usuario, quiero ver respuestas confiables para satisfacer mi propio escepticismo.
@Ben Voigt: creo que su respuesta habría sido perfectamente buena sin las referencias. Podría decirse que @Kevin Peno está siendo demasiado entusiasta; Realmente no pareces estar diciendo nada polémico, por lo que no es obvio por qué las autoridades deben respaldar algo de eso. Aparte del maestro chiflado de OP, ¿quién realmente piensa que cualquiera puede insertar fácilmente código malicioso en OSS, por ejemplo? Excluyo a las personas que no saben nada de código, OSS, etc., ya que aquí son irrelevantes. Pero las reglas son las reglas, como dicen, así que me alegro de que las hayas cumplido. ¡Puedes publicar muchas más respuestas útiles!
@Fumble: ¿Supongo que no hizo clic en mi "fuente"?
@Ben Voigt: ja, ja, en realidad lo hice , pero simplemente lo ignoré sin darme cuenta de que era una broma. Pero también revisé los enlaces SVN y FreePascal, y me di cuenta de que había estado en ambas páginas antes. Eran apropiados, y lamento no haber obtenido el beneficio del primero hasta ahora. ¡Una respuesta sensata, sólidamente defendida y divertida ! ¿Qué más se puede pedir?
@Fumble: Uno solo necesita experimentar la política de redacción de subvenciones para obtener un escepticismo saludable sobre los estudios académicos que se citan con tanta frecuencia aquí. Soy estudiante de doctorado. Por eso desconfío de lo académico y busco oportunidades para el humor. Me alegro de que lo apruebes.
-1 Tu segunda parte no responde la pregunta. La pregunta es si un modelo OSS produciría un software más seguro que un modelo cerrado, naturalmente, si planteamos tal pregunta, tendríamos que controlar la diferencia en la población. Señalar que diferentes programas tienen diferentes necesidades no responde a la pregunta, simplemente señala una supuesta falacia sobre algo que debería controlarse en cualquier investigación que se haya realizado (de la cual no ha citado ninguna).
@Kit: No dije nada sobre diferentes programas que tienen diferentes necesidades. Dije que algunos programas son más seguros que otros, y que las medidas agregadas son inútiles cuando se trata de decidir si confiar en una pieza de software en particular.
Esta respuesta es bastante mala. Bien, mostraste que Free Pascal tiene algunas buenas prácticas, ¿y qué demuestra eso exactamente? Traiga hechos a la mesa para respaldar estas dos afirmaciones que está haciendo (o insinuando): 1) que "cualquiera puede bifurcarlo y poner cosas en su tenedor". (simplemente señalar otra respuesta como referencia hará que se elimine como NAA, no pierda el tiempo) y 2) Que F/OSS en general, o en gran parte , tiene prácticas y controles de seguridad mejores o iguales que el código cerrado. De lo contrario, su especulación es completamente inútil aquí.
@Sklivvz: Estás completamente equivocado. No afirmé ni insinué que F/OSS en su conjunto tiene prácticas de seguridad mejores o iguales que las que tiene el software de código cerrado. No se necesitan datos originales para invalidar un argumento que contiene una falacia lógica, solo la lógica pura lo es. El argumento que se hace es que "muchas aplicaciones de software F/OSS son inseguras, por lo tanto, FreePascal es inseguro". Esta es una clara falacia, como se explica en mi respuesta, y por lo tanto, el hecho de que contrarreste la suposición original es solo una salsa.
Los hechos de origen siempre son necesarios y la lógica sin hechos es solo especulación, no aceptable aquí. Ver: meta.skeptics.stackexchange.com/questions/1019/…
@Sklivvz: entonces no sabes nada sobre lógica. Para que un argumento sea sólido, requiere (1) premisas verdaderas y (2) un argumento válido. Fuente: en.wikipedia.org/wiki/Soundness#Of_arguments Según el teorema de DeMorgan, el argumento no es sólido si (1) alguna premisa es falsa o (2) el argumento es falaz. Por lo tanto, se deduce que SI el argumento es falaz, no es sólido y no necesito refutar la premisa. No debería haber necesitado indicar fuentes para reglas simples de razonamiento lógico a un moderador.
@Sklivvz: Su discusión vinculada sobre meta no se aplica aquí, porque para esta pregunta en particular, la lógica pura ES suficiente para demostrar que el razonamiento del maestro no es sólido.
Más allá de eso, proporcioné fuentes que muestran que las premisas del maestro también eran falsas, vea los otros enlaces en mi respuesta (y han estado allí durante bastante tiempo).
@ben: la pregunta no se trata de free pascal en particular, sino de código abierto en general. Evite usar ese tono también. No estoy aquí para discutir o ser insultado. Gracias.
@Sklivvz: Voy a estar en un avión la mayor parte del día, por lo que no será posible conversar. Estoy de acuerdo en que la pregunta se refiere al código abierto en general, porque el estudiante ha aceptado el argumento falaz del profesor de que si el código abierto es menos seguro en promedio, eso por sí solo es suficiente para justificar el bloqueo de una aplicación de código abierto en particular. Le estoy haciendo un mayor favor a Thomas mostrando la falla en el argumento que abordando la premisa defectuosa, porque las habilidades de pensamiento crítico son mucho más valiosas en la vida que un solo hecho localizado.

Creo que John proporciona la mejor respuesta cuando dice que muchos otros factores pueden influir en la seguridad. Sin embargo, vale la pena ver cómo la apertura puede afectar la seguridad.

El primer trabajo en esta dirección fue en 1883 por Auguste Kerckhoffs y se llama Principio de Kerckhoffs . Argumentó que para que cualquier sistema sea seguro:

Un criptosistema debe ser seguro incluso si todo lo relacionado con el sistema, excepto la clave, es de conocimiento público.

Una interpretación importante del Arte de la Seguridad de la Información ,

El Principio de Kerckhoff no requiere que publiquemos o divulguemos cómo funcionan las cosas. Requiere que la seguridad del sistema no se vea afectada negativamente por tal divulgación.

La mayoría de los sistemas de código cerrado en realidad no violan el principio de Kerckhoff, por lo que no se puede decir que el código abierto sea inferior o superior al código cerrado según esta medida.

A menudo se utilizan dos modelos con respecto al software Seguridad a través de la oscuridad frente a Seguridad a través de la divulgación/apertura. Los argumentos a favor y en contra de ellos se repiten en wikipedia .

Estadísticamente, Linux sufre una tasa de infección mucho más baja que Windows. Esto generalmente se atribuye al modelo de código abierto, pero también se proponen como explicación otras razones alternativas (como una menor participación de mercado). Firefox también afirma tener un número menor de vulnerabilidades de seguridad abiertas que Internet Explorer.

Sin embargo, debe tenerse en cuenta que más ojos, menos errores solo funciona para el software popular de código abierto y puede no ser viable para el software menos popular o personalizado.

"Más ojos, menos errores [sic]" (también conocido como "Ley de Linus") no se puede aplicar a errores de seguridad sutiles; eso debería modificarse a "Dados los ojos suficientemente entrenados y motivados , la mayoría de los errores son superficiales".

Un examen superficial de las controversias en las secciones semanales del kernel en Linux Weekly News[1] muestra cuán difícil suele ser para los desarrolladores extremadamente experimentados con una gran reputación convertir su código en proyectos de buena reputación. Si está descargando desde un proyecto o distribución que tiene estándares y los aplica en las listas de correo públicas, puede tomar una decisión más informada sobre la confiabilidad y confiabilidad del código que si está comprando software propietario de compañías con procesos desconocidos cuyos prácticas de desarrollo que no se pueden examinar. Si está descargando desde Will's World of Warez, está en problemas, independientemente del modelo de desarrollo.

[1]: http://lwn.net/ Noticias semanales de Linux. Las ediciones semanales que no sean la última son gratuitas para los no suscriptores.

Como he señalado en los comentarios, se presenta un análisis completo y razonado en Sistemas de código abierto frente a sistemas de código cerrado .

Sin embargo, por el bien del argumento, presentaré un solo ejemplo como evidencia: el primer rootkit real, y aparentemente el más extendido, estaba en un paquete de código abierto muy popular.

De la historia de Rootkit (Wikipedia) :

Ken Thompson de Bell Labs, uno de los creadores de Unix, subvirtió el compilador C en una distribución de Unix y discutió el exploit en la conferencia que dio al recibir el premio Turing en 1983. El compilador modificado detectaría los intentos de compilar el Unix "iniciar sesión " y generar un código alterado que aceptaría no solo la contraseña correcta del usuario, sino también una contraseña adicional conocida por el atacante. Además, el compilador detectaría los intentos de compilar una nueva versión del compilador e insertaría las mismas vulnerabilidades en el nuevo compilador. Una revisión del código fuente para el comando "iniciar sesión" o el compilador actualizado no revelaría ningún código malicioso.

Referencia: http://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf

En resumen, las propias palabras de Ken de ese documento:

La moraleja es obvia. No puedes confiar en un código que no creaste totalmente tú mismo. Ninguna cantidad de verificación o escrutinio a nivel de fuente lo protegerá del uso de código no confiable.

El código abierto no te ayudaría aquí.
De hecho, insistir en la seguridad inherente al código abierto es irrelevante.

Historia interesante; pero lógicamente podría haber otras razones (otras amenazas) por las que el software de código abierto o cerrado podría ser más seguro.
@ChrisW, como se explica en la pregunta a la que me vinculé en ITSec, solo hay razones anecdóticas (en el mejor de los casos), y realmente se trata de que las creencias religiosas son la única razón para encontrar. Analíticamente, de manera realista, abierto o cerrado no tiene ningún efecto sobre el nivel de seguridad.
La pregunta security.stackexchange proporciona más argumentos pero no referencias: más razones/afirmaciones por las que abrir o cerrar puede ser más o menos seguro, pero no hay estudios que demuestren si, de hecho, lo son.
@Chris, como dije, las respuestas allí brindan análisis, no arrojan este o aquel tipo de estudio jugable. Además, cualquier "estudio" de este tipo sería subjetivo por naturaleza. En este caso, creo que una lógica analítica sólida es más beneficiosa y confiable, por numerosas razones. ¿Encontraste alguna falla en el análisis? Tenga en cuenta que tampoco hay reclamos arbitrarios: la lógica de nivel de escuela secundaria, junto con hechos que son bien conocidos en la industria de la seguridad, son suficientes. Esto incluso coincide con los requisitos para este sitio también...
También puedes extender esto al nivel de la CPU, de verdad. Si sus CPU tienen rootkits, está jodido :-/

Otro punto que aún no se ha cubierto, pero que va en la misma dirección que la mayoría de las respuestas:

Incluso sin la fuente, en muchos entornos, puede colocar una serie de saltos al comienzo de un binario ejecutable para ir a un lugar donde ha compilado su propio software y luego reanudar el funcionamiento normal del código.

De Wikipedia :

Luego, el binario se modifica utilizando el depurador o un editor hexadecimal de una manera que reemplaza un código de operación de bifurcación anterior con su complemento o un código de operación NOP, por lo que la bifurcación clave siempre ejecutará una subrutina específica o la omitirá. Casi todos los cracks de software comunes son una variación de este tipo.

Por supuesto, dado que esto es lo que hacen muchos virus y versiones descifradas de software comercial, las utilidades antivirus pueden detectarlo como sospechoso o bloquearlo debido a las verificaciones de suma de comprobación realizadas por el propio código, el cargador/enlazador, el sistema operativo, etc.

Proporcione fuentes para respaldar su respuesta.
@Sklivvz: lamento no haber pensado que requería fuentes externas, pero esto es de conocimiento común para cualquier programador de lenguaje ensamblador.