Lo contratan para corregir un pequeño error en un sitio que requiere mucha seguridad. Mirando el código, está lleno de agujeros de seguridad. ¿Qué haces? [cerrado]

109

Alguien me ha contratado para hacer un pequeño trabajo en un sitio. Es un sitio para una gran empresa. Contiene datos muy confidenciales, por lo que la seguridad es muy importante. Al analizar el código, me di cuenta de que está lleno de agujeros de seguridad: lectura, muchos archivos PHP que arrojan la entrada de entrada / entrada del usuario directamente en las solicitudes de mysql y los comandos del sistema.

El problema es que la persona que creó el sitio para él es un programador con familiares y niños que dependen de ese trabajo. No puedo decir simplemente: "su sitio es un parque de atracciones para niños con guión. Permítanme rehacerlo y estarán bien".

¿Qué haría usted en esta situación?

Actualizar:

Seguí algunos buenos consejos aquí e informé educadamente al desarrollador que había encontrado algunos posibles defectos de seguridad en el sitio. Señalé la línea y dije que podría haber una posible vulnerabilidad para los ataques de inyección SQL allí, y le pregunté si lo sabía. Él respondió: "claro, pero creo que para explotarlo el atacante debería tener información sobre la estructura de la base de datos; tengo que entenderlo mejor" .

Actualización 2:

Dije que no siempre es así y le sugerí que siga el enlace de la pregunta de desbordamiento de pila para tratarlo correctamente: ¿Cómo evitar la inyección de SQL en PHP? Dijo que lo estudiaría y me agradeció por decírselo antes. Supongo que mi parte está hecha, gracias chicos.

MaiaVictor
fuente
29
Realmente disfrutaría una solución que no implique arruinar la vida de alguien. Dejaría esto solo, pero también sé que ese agujero de seguridad también podría arruinar la vida de algunas personas. Complicado.
MaiaVictor
18
El atacante podría usar el exploit para obtener la información sobre la estructura de la base de datos. Sin vulnerabilidad de inyección SQL debe nunca ser minimizado.
Dave Rager
17
Muéstrele cómo aprovechar alguna vulnerabilidad sin utilizar ningún conocimiento de la base de datos. Eso lo asustará muchísimo.
Eufórico
74
Solo quiero decir buen trabajo para buscar a otra persona / programador que no conoces. No hace que sea menos terrible arruinar su sustento porque cometieron un error y usted no los conoce, y lo felicito por tenerlo en cuenta.
Acero
8
@Dokkat El problema es de equilibrio. Desde la perspectiva de un programador, el programador de mala calidad con esposa e hijo ha puesto en peligro la empresa y, por lo tanto, el trabajo de muchos empleados con esposas e hijos. Además, el problema a menudo se complica por el problema emocional de "El mal programador hace algo que me dificulta la vida. Ahora tengo que perder el tiempo que paso con mi familia. Son más importantes para mí que él. Esto parece injusto". " Esa es una respuesta irracional, pero amigos, amigos.
Deworde

Respuestas:

114

Primero y ante todo aquí, la prioridad es cerrar los agujeros de seguridad.

Si está trabajando directamente con el ingeniero que escribió esto, documente todo y déselo a ese ingeniero.

Si no, dígale a su empleador que los problemas de seguridad son mayores de lo que inicialmente se pensó y que el sitio necesita mucho trabajo. Solicite trabajar con el desarrollador principal que se encuentra en el sitio y ofrezca enseñarle sobre la seguridad de PHP (no prometa convertir a la persona en un experto, pero sí ofrezca capacitarlo en todo lo que sabe) para que esa persona pueda hacerse cargo. después de que hayas terminado.

No hagas de esto un problema de "este tipo es malo, despídelo". Abórdelo desde la perspectiva de "Oye, encontré algunos errores potenciales que necesitan corrección estadística, que parecen provenir de cierta ignorancia / conceptos erróneos comunes sobre la seguridad del sitio. También me gustaría hablar con su desarrollo para que podamos mejorar su sitio y espero evitar más de estos problemas en el futuro ".

Eric Hydrick
fuente
1
Grandes respuestas en general. El tema es subjetivo, así que marcaré el suyo como el más aceptado por la comunidad.
MaiaVictor
1
Si está trabajando con el ingeniero, pero le pagan por la administración, ¿no debe informar a la administración? ¿Qué pasa si el ingeniero te agradece, pero el momento en que te vas destruye el informe?
Konerak
Dígale a ambos, o dígale al ingeniero primero, y verifique que los errores se estén creando y rastreando en cualquier sistema que utilicen. Si no se crean errores, informe a la gerencia.
Eric Hydrick
2
Me gustó más esta respuesta: programmers.stackexchange.com/a/189206/28351 , porque para el empleador las prioridades son diferentes. Primero informe los agujeros de seguridad, luego repare el pequeño error.
finalmente
80

Hay una diferencia entre ignorancia e incompetencia. Hubo un momento en que tampoco sabías qué era la inyección SQL, y no hay razón para creer que el programador original no sea capaz de solucionar los problemas una vez que se haya dado cuenta de ellos.

Entonces diles. Sea específico y objetivo, y esté disponible para responder preguntas, proporcionar ejemplos de exploits y recomendaciones para soluciones. Si todavía no lo entienden después de ese punto, lo máximo que puede hacer realmente es no poner su propia información personal en el sitio.

Karl Bielefeldt
fuente
26
+1. La ignorancia puede ser reparada. ¡La incompetencia es una carrera para algunos!
Mitch Wheat
20

Tu trabajo no es rehacer el sitio por él. Es para arreglar el pequeño error. Sin embargo, si ha notado problemas de seguridad que deberían solucionarse, puede consultarlo con el propietario del sitio y ofrecer información sobre cuál podría ser el problema.

No reprenda ni hable negativamente sobre el desarrollador original ni comente lo horrible que es el código. Se respetuoso y profesional. Puede ofrecer trabajar con el desarrollador para resolver los problemas. No intente arreglarlo usted mismo ni ofrecer una solución a menos que haya sido contratado para abordar el problema. Si siguen tu consejo y te equivocas, podrían volver sobre ti.

Dave Rager
fuente
17

En primer lugar, arregla la cosa por la que te contrataron. Si no hace eso, entonces será percibido como el tipo de consultor que está interesado en hacer más trabajo para sí mismo, en lugar de hacer el trabajo.

Junto con las correcciones, debe proporcionarles una lista de las cosas que ha notado que están mal desde una perspectiva de seguridad, y por qué estas cosas están mal.

Michael Kohne
fuente
13

A nadie le servirá de nada informar los problemas. Si tuvo una tarea específica para la que fue contratado, complete pero documente otros problemas de seguridad tal como los ve y repórtelos a la persona adecuada, probablemente a la persona a la que está informando para la tarea para la que fue contratado.

Esta es una situación en la que las habilidades blandas fuertes serán útiles, ya que manejar esto con tacto requerirá no menospreciar el trabajo realizado por otros en el sitio y no hacer que el desarrollador sienta que está cuestionando su talento.

Obviamente, evite palabras como "basura, mala, pobre, acribillada" al referirse al código / fallas y palabras similares para el desarrollador que escribió el sitio.

Aparejo
fuente
44
Yo agregaría: asegúrese de que el desarrollador sea consciente de la gravedad de las fallas y de cómo pueden ser explotadas. Tomarse el tiempo para lanzar un 'ataque' controlado en una máquina local con este desarrollador presente podría hacer mucho para educarlo sobre el problema, lo que deja vacantes para sugerir formas de endurecer el código.
Andrew Gray
7

Además de las otras respuestas, lo que puede querer hacer es señalar al desarrollador algunos recursos sobre la facilidad con la que se pueden explotar los problemas de inyección SQL, por ejemplo sqlmap, que es una herramienta de explotación de inyección SQL automatizada.

Lo que he encontrado efectivo para demostrar la gravedad de este tipo de problema en el pasado es mostrar lo que se puede hacer con él, así que si ejecutas algo así contra un desarrollador. copia del sitio para mostrarlo extrayendo datos, etc., podría convencerlos de la seriedad.

Rry McCune
fuente
44
Tenga en cuenta que esto tiene algunos riesgos, ya que puede hacer que parezca un "hacker". La gente de administración no necesariamente entiende términos como "vulnerabilidad existente", "copia de desarrollo" y "analista de seguridad de sombrero blanco"
deworde
0

Primero y único; La gerencia no quiere escuchar sobre problemas. Me despidieron de la Oficina de Administración de Personal (permisos de seguridad para la casa blanca) porque señalé cuán inseguro era su sistema. Eso fue hace un tiempo, pero las actitudes de gestión no han cambiado.

Aborde el problema con el desarrollador, por correo electrónico para que tenga un rastro, luego camine o huya. Cuando eventualmente tengan un problema, como contratista, intentarán culparlo, independientemente de tener alguna participación, incluso remotamente relacionada con el problema.

Tener un problema tan fundamental como una inyección SQL, indica que eran baratos cuando desarrollaron inicialmente el sistema, y ​​lo más probable es que ahora sean más baratos. Obtenga lo que pueda de ellos mientras todavía están en el negocio, pero busque el desarrollo comercial en otro lugar.

joe
fuente
3
"La gerencia no quiere escuchar sobre problemas": agregue algunos razonamientos / referencias para respaldar su afirmación (lo cual me parece plausible pero esto realmente no importa) y revocaré la votación negativa
mosquito