Problema de seguridad sobre hacer público mi código en GitHub

8

Estoy desarrollando un gran sitio web de comunidad / foro y me gustaría subir mi código a GitHub para tener al menos algún tipo de control de versión sobre él (porque no tengo nada más que un archivo .rar como respaldo, ni siquiera SVN ), para permitir que otros contribuyan al proyecto, y quizás también usarlo para permitir que mis futuros empleadores potenciales vean parte de mi código como una especie de plan de estudios.

Pero lo que me pregunto ahora, y me sorprende no haber visto a nadie mencionarlo antes, es el aspecto de seguridad. ¿Publicar el código de un sitio web no es un ENORME agujero de seguridad? Es como dar a un pirata informático potencial o cualquier persona que quiera encontrar cualquier posible explotación, incluso teniendo en cuenta que los archivos críticos no se cargan (contraseñas de bases de datos, scripts de autenticación, etc.).

Por supuesto, hay millones de proyectos cargados en GitHub y nadie encontrará el mío solo 'por casualidad'. Pero si lo buscan, de hecho estaría allí.

En pocas palabras: mi problema no es sobre los derechos de autor o las licencias, sino sobre otros que encuentran vulnerabilidades en mi sitio web.

¿Me estoy perdiendo algo aquí?

federico-t
fuente
44
La seguridad por oscuridad no ha funcionado bien para la mayoría del software hasta ahora. ¡El código fuente no es más que una pieza del rompecabezas!
Martijn Pieters
2
Use BitBucket en su lugar. Es compatible con git también.
Trabajo
Entonces, ¿no tiene exploits obvios en su sitio web para que la gente los encuentre? Por ejemplo, si las personas pueden distinguir desde su código fuente dónde están las vulnerabilidades de inyección SQL, entonces usted también puede hacerlo.
user16764
Como @delnan señala a continuación, GitHub le permite alojar repositorios privados por un precio. Además de los millones de proyectos públicos (de código abierto) que puedes ver, probablemente haya millones de proyectos privados en GitHub que nadie más que el propietario / colaboradores del proyecto verá.
Suman
1
Si nada más, cree un repositorio local de git. De esa manera, al menos puede retroceder cuando comete un error.
Zachary K

Respuestas:

24

¿Me estoy perdiendo algo aquí?

Si. Confiar en las personas que no conocen su código fuente para evitar que encuentren vulnerabilidades de seguridad se conoce como seguridad a través de la oscuridad .

El problema: no funciona. Los hackers expertos no necesitan el código fuente para encontrar y explotar vulnerabilidades. Harán un poco de búsqueda para encontrar información que cause problemas y luego usarán su conocimiento de cómo funciona el sistema operativo / lenguaje / marco subyacente para identificar una vulnerabilidad.

Es ampliamente aceptado que tener el código fuente público aumenta la seguridad al permitir que las personas bien intencionadas encuentren vulnerabilidades y las arreglen , o al menos le digan al desarrollador sobre ellas. Hay dos razones importantes por las que esto funciona:

  • En general, hay más personas bien intencionadas que las personas maliciosas.
  • Cualquier vulnerabilidad encontrada por una persona bien intencionada será reparada para todos; los hackers son mucho menos propensos a colaborar

Por supuesto, no funciona con proyectos favoritos que tienen pocos usuarios activos, pero tampoco es muy probable que sean atacados por un hacker.

Michael Borgwardt
fuente
1
¿No es que estoy de acuerdo o en desacuerdo, sino "ampliamente aceptado" por quién? Este no es un sentimiento que realmente he escuchado expresado.
Steven Evers
Gracias por la rápida respuesta hombre! Y tiene sentido cuando lo pienso, es una compensación entre compartir algo que ya ha sido encontrado por piratas informáticos calificados y obtener el aporte adecuado de programadores bien intencionados. Claramente no lo había pensado de esta manera ... ¡Gracias de nuevo!
federico-t
@SnOrfus: vea la Ley de Linus y el principio de Kerckhoffs. Es cierto que "ampliamente aceptado" puede ser un poco exagerado, pero apostaría a que la mayoría de los programadores experimentados estarían de acuerdo.
Michael Borgwardt
@MichaelBorgwardt, apostaría a que la mayoría de los programadores experimentados no estarían de acuerdo . Los llamados "más globos oculares = menos vulnerables" no se basan en una investigación adecuada real . Heartbleed no es el primero y no será el último. Ver también blog.codinghorror.com/given-enough-money-all-bugs-are-shallow
Pacerier
@Pacerier: te llevaré a esa apuesta en cualquier momento. Tenga en cuenta que la declaración es que el código abierto aumenta la seguridad, no que resulte en una seguridad perfecta. Puede citar ejemplos de errores en OSS hasta que las vacas vuelvan a casa y no demuestre absolutamente nada en contrario. En realidad, hay una investigación adecuada: archive.wired.com/software/coolapps/news/2004/12/66022 : sí, tiene más de 10 años, pero hasta que pueda encontrar algo concreto con resultados contrarios, se mantendrá.
Michael Borgwardt
6

En primer lugar, puede usar el control de versión (distribuido) sin hacer público el repositorio. Puede crear un repositorio en su computadora local y presionar / extraer desde otras computadoras. También puede cargar el repositorio (dándole más copias de seguridad y una colaboración más fácil) sin hacerlo público. GitHub ofrece repositorios privados por una tarifa, Bitbucket hace lo mismo y libera pequeños repositorios privados (5 personas o algo). Por supuesto, entonces no obtienes los otros beneficios que mencionaste.

El aspecto de seguridad es bastante pequeño. Hay muchos, muchos vectores de ataque que valen la pena y que se pueden probar fácilmente sin mirar el código fuente (del lado del servidor) (como estar atento a los parámetros GET y POST, verificar las cookies y el manejo de la sesión, agregar entradas que se deben escapar y verificar si lo son, etc.) Si eres vulnerable a cualquiera de ellos, un atacante determinado puede explotarlos razonablemente rápido sin mirar el código fuente. Los errores más oscuros y difíciles de explotar son (probablemente) también más difíciles de detectar en el código fuente, por lo que, nuevamente, no pierde mucho.

Por otro lado, hacerlo público y aceptar contribuciones puede atraer a personas que pueden detectar hazañas, sin un mal significado, y contarte sobre ellas (o incluso arreglarlas ellos mismos). Esto va doblemente si es realmente popular pero no eres un experto en seguridad (sin ofender, pero no suenas como uno; por ejemplo, no mencionaste la seguridad a través de la oscuridad y cómo tu preocupación no es un caso de eso) .


fuente
Como le dije a @Michael Borgwardt, esto tiene mucho sentido. Supongo que el beneficio de publicar el código es aún mayor cuando más personas conocen el proyecto y aportan contribuciones para corregir vulnerabilidades. Y si no fuera popular, lo más probable es que a los posibles piratas informáticos tampoco les importe lo suficiente. ¡Gracias por la respuesta!
federico-t
Por lo que puedo decir, github no ofrece repositorios privados gratuitos (una corrección menor, no un problema).
scrwtp
@scrwtp: 'por una tarifa' no es lo mismo que gratis.
Martijn Pieters
Ah, cierto, leí mal.
scrwtp
3

BitBucket tiene repositorios privados gratuitos y admite git y mercurial.

jiggy
fuente
2

Dejando a un lado el tema de la seguridad y si hacer público su código lo mejoraría o no, puede configurar un sistema de control de fuente en su máquina usted mismo. En el caso de git es trivial, simplemente inicialice un repositorio local y ya está, pero configurar un SVN tampoco es una tarea desalentadora. Tal vez una o dos horas después de los tutoriales, si tiene poco conocimiento previo sobre cómo configurar SVN.

Por lo tanto, aún puede beneficiarse del control de fuente, independientemente de si termina utilizando un servicio en línea o no.

scrwtp
fuente
0

La mayoría de los ataques maliciosos se realizan de forma anónima. Alguna persona en Rusia ejecuta un script que escanea los hosts en busca de puertos abiertos, o lo que sea que tenga. Nadie va a verter explícitamente su código solo para encontrar una manera de piratear para hacer daño. No, a menos que realmente cabrees a alguien.

nbv4
fuente