A lo largo de mi carrera como estudiante universitario, y más tarde durante mi etapa como técnico de sistemas, me he encontrado a menudo con el tema de debate preferido por el personal técnico —y no tan técnico— de sistemas: Windows vs. Linux. Será que me estoy haciendo mayor para discutir, o que tengo otras preocupaciones, pero lo cierto es que actualmente no es una cuestión que me preocupe lo más mínimo; si quieren saber mi opinión, cada uno tiene sus ventajas y sus desventajas, y el resto es simple miopía (o ceguera, en los peores casos). De cualquier modo, hay veces que esta discusión muta y se convierte en una igual de estéril pero mucho más relacionada a mi parecer con la seguridad, que es de lo que he venido a hablar aquí: open source vs. closed source. Es decir, código abierto vs. código propietario (que me disculpen los puristas del lenguaje y de las licencias si la traducción de Open Source no es la mejor).
Y como por lo general los que más ruido arman son los defensores del open source, lo que vengo a criticar es que sus ventajas ni son tantas ni tan buenas como sus partidarios quieren hacer creer. Aun diría más: la etiqueta en cuestión no sólo no garantiza absolutamente nada en términos de seguridad y/o funcionalidad, sino que puede inducir a engaño y una falsa sensación de seguridad, sobre todo en aquellas personas más “creyentes” en la causa. Ya verán.
Nuestra historia comienza en el momento que alguien afirma que como el kernel de Linux es open source, pues es “obviamente” mejor que Windows, porque eso nos permite modificar su código y adaptarlo a nuestras necesidades, además de que nos aseguramos de que su código sea revisado y validado por miles de ojos, y por tanto esté libre de errores o vulnerabilidades. Francamente, no sé ustedes, pero yo no conozco muchas personas de las que utilizan Linux a diario que hayan echado nunca un vistazo al código fuente del S.O. con intención de hacer algo productivo, entre los que me incluyo; a todo lo que llegué fue a la soberana idiotez de compilar todo el sistema como se puede/podía hacer con Gentoo, pero ello sin mirar ni una puñetera línea de código (que por otra parte, hubiesen dejado en evidencia mis limitados conocimientos de C). En general, cualquier vistazo a los fuentes del kernel es motivado por problemas de compilación, que nunca son problema del código sino de una configuración errónea, conclusión a la que llega uno tras decidir que ya ha perdido bastante el tiempo. Resumiendo, que el código fuente del kernel de Linux está ahí, pero aparte de unos cuantos privilegiados, nadie le mete mano por su complejidad. Y a pesar de esos miles de ojos, periódicamente se publican vulnerabilidades del kernel que se supone que el hecho de que sea código abierto nos garantiza que no deberían estar ahí.
Este último aspecto es algo que me llama mucho la atención del código abierto. Dejando atrás el kernel, hay programas cuyos fuentes son públicos, y protocolos universalmente conocidos que un buen día, después de años sin mayores problemas, resulta que algún genio en estado de gracia demuestra que son vulnerables, si Marte se sitúa en el cuarto cuadrante de Sagitario y en ese momento tienes hambre. Así, sin más. ¿Cómo es que nadie se había dado cuenta hasta entonces? ¿Pero no había miles de ojos? Protocolos abiertos, conocidos, muchas veces implementados, estudiados y revisados… ¿cómo es posible que este tipo de cosas sigan pasando, año tras año? Lo más interesante de todo es: si hubiesen sido código propietario, ¿cuánto tiempo habríamos tardado en descubrir esa vulnerabilidad? ¿Más, o menos?
Hace ya cierto tiempo, fui a parar al caso de g-archiver. La utilidad de este software, que hasta hace un tiempo podían comprar/descargar desde su web aunque era totalmente desaconsejable, es/era facilitar la realización de copias de respaldo del contenido de una cuenta de Gmail. Por fortuna, Dustin Brooks descubrió que su autor, John Terry, no sólo había cometido la estupidez de hardcodear en el código el usuario y la clave de una cuenta de Gmail, sino que además enviaba a dicha cuenta de correo el usuario y contraseña de cualquier usuario que utilizase el programa. Es cierto que esto parece un argumento en toda regla a favor del código abierto, pero lo cierto es que al menos 1700 usuarios confiaron en el programa antes de que Dustin descubriese este problema, lo cual me hace pensar que la etiqueta open source no supone en realidad ningún tipo de garantía sino que además puede llevar a pensar a los defensores del código abierto que el programa está libre de malas prácticas o vulnerabilidades graves.
Es cierto que si dicho programa hubiese sido código propietario, el problema hubiese sido probablemente descubierto mucho más tarde. Claro que eso demuestra simplemente la poca sensatez del personal, y es una lección más de que no hay que confiar en cualquier programa que encuentre uno en Internet, independientemente de si el código está disponible o no. Me atrevo a afirmar que si el tal John hubiese sido un mejor desarrollador (asumiendo que el descuido fue malintencionado y no un trozo de código utilizado para testear que desafortunadamente acabó en la versión de producción), habría sido capaz de ocultar su usuario, su clave y el envío de las credenciales de los usuarios con técnicas de ofuscación, de modo que nadie se hubiese percatado de sus intenciones al revisar el código, más que con un análisis muy exhaustivo… cosa que no es demasiado habitual.
Seguramente saben lo que es el Javascript. La mayor parte de las páginas utilizan algo de javascript, y se utiliza prácticamente para todo (y cada vez más). Además, como es código que tiene que ser interpretado por el navegador del cliente, tiene que ir en claro; si quieres ocultar algo, mejor utiliza flash (o eso creo; francamente, de tecnologías web no sé más que lo justo). Eso parece apuntar a que cualquier desarrollo que hagamos puede ser “robado” por otros desarrolladores. Nada más lejos de la realidad; existen programas para comprimir y ofuscar el código, que lo hacen virtualmente ininteligible para cualquier persona, incluyendo a su autor. Por tanto, el hecho de que dispongamos del código de dichos desarrollos no supone ni una ventaja ni una desventaja; unas veces es una necesidad de tamaño (tamaño del código) y otras una necesidad de protección (propiedad del código).
Podría parecer, llegado este punto, que defiendo que el código propietario es más seguro que el código abierto. Pues tampoco. La muestra son no sólo las frecuentes vulnerabilidades del software propietario como el de Microsoft, Adobe y otros, sino la velocidad a la que dichas vulnerabilidades se descubren cuando alguien está realmente interesado en encontrarlas (véase cualquier código relacionado con DRM). Por tanto, la verdad es que por lo general da exactamente lo mismo; no se fíen ni de uno, ni de otro. Con lo cual llegamos a lo que les comentaba al principio: que la conversación es tan estéril como el del huevo y la gallina, y tampoco sirve para dar conversación a la vecina del sexto en el ascensor. Es más, seguro que te mira raro y piensa que eres un friki; mejor utiliza la previsión del tiempo.
Acabo. Si recuerdan, el principio denominado “Seguridad por oscuridad” (Security thru obscurity) consiste en ocultar los detalles de diseño e implementación —entre otros— de un programa o dispositivo, consiguiendo que el producto actúe como una caja negra y por tanto sus potenciales puntos débiles no puedan ser descubiertos. En principio, eso se considera una mala política, porque además de que la exposición pública incrementa la posibilidad de que sus vulnerabilidades sean descubiertas (algo que como hemos visto no exactamente cierto), siempre hay alguien que acaba descubriendo sus vulnerabilidades, explotándolas, y entonces es cuando decimos que una vulnerabilidad esta siendo explotada “in the wild”. Lo cierto es que eso pasa con código abierto y con código propietario, a pesar de lo que puedan pensar; las vulnerabilidades están ahí hasta que alguien las descubre públicamente, y mientras tanto, quién sabe.
El problema no es, en realidad, código abierto frente a código cerrado. El problema son empresas responsables frente a empresas irresponsables. No me hagan dar nombres, que me entra la risa.
Nada más. Tengan cuidado ahí fuera y pasen un buen fin de semana.