Qué hacer cuando su empresa no cifra las contraseñas

13

Antecedentes

Me contrataron para ayudar a una empresa a mantener su servidor. Trabajo en algunos proyectos PHP menores, pero también reviso los problemas de rendimiento y, recientemente, escaneo los registros para detectar piratas informáticos.

Estos chicos han estado ejecutando su servidor durante algún tiempo y tienen lo que yo llamaría una aplicación heredada en sus últimas etapas. Utiliza comillas mágicas, variables globales (que permiten $idsobrescribirlas $_GET['id']), usa .htaccess como su única seguridad en algunos casos, lo que sea. Una pesadilla de seguridad y programación.

Hemos sido pirateados en el pasado, principalmente con inyecciones SQL, que ejecutarían SLEEP(99999999)comandos y actuarían como un ataque DOS. Afortunadamente no corrieron "pequeñas mesas de bobby",

http://xkcd.com/327/

XKCD: http://xkcd.com/327/

Entonces reescribí sus declaraciones SQL vulnerables desde mysql_query()(no mysqli) a las transacciones PDO. También estoy analizando las consultas para SLEEPy UNION, que no usamos pero que tienen las inyecciones. Hasta aquí todo bien.

Último edicion

Recientemente nos han dicho que los registros están cambiando en la base de datos para los usuarios, como sus direcciones de correo electrónico a las presumiblemente hechas por los spammers.

Me di cuenta de que sus columnas no tenían una last_modifiedcolumna, por lo que ni siquiera pudimos saber cuándo se estaban cambiando, y mucho menos quién. Agregué esa columna, pero ese es apenas un primer paso.

Cuando estaba mirando esta tabla, noté que las contraseñas no estaban saladas ni picadas, solo guardadas como texto sin formato.

Comunicación con el cliente

¿Cómo puedo acercarme a ellos acerca de toda la situación, como contratista, sin agitar los brazos como un loco? ¿Algún consejo? Estaba pensando en un enfoque tranquilo de,

    NÚMERO 1
        Sinopsis
        Por qué esto es un problema
        ¿Qué puede pasar si esto no se soluciona?
        Solución sugerida

    NÚMERO 2
        Sinopsis
        Por qué esto es un problema
        ¿Qué puede pasar si esto no se soluciona?
        Solución sugerida
        
bafromca
fuente
Mi pensamiento es, independientemente de las contraseñas de texto sin formato, que es un no no masivo. Si ha cambiado todas las consultas a PDO y está utilizando declaraciones preparadas, a menos que haya un cambio en su sección de correo electrónico ect. No deberían poder ejecutar una consulta SQL para cambiar las direcciones de correo electrónico
etc.
1
No cambié / all / queries a PDO, lo siento, cambié las que encontramos que estaban siendo afectadas por las inyecciones de SQL.
bafromca
¿Sería una mejor solución general agregar una clase de PDO y luego implementar esa clase en todo el sitio? luego piense en contraseñas hash y use una sal; sin embargo, esto puede llevar un poco de tiempo, ya que dice que es una aplicación "Legacy", supongo que tiene unos pocos usuarios.
Liam Sorsby
55
Yo diría que revises tu 'qué puede pasar' a 'lo que pasó' ya que ya han sido pirateados y las credenciales de los usuarios han sido liberadas en manos de hackers.
James Snell
Parece que su pregunta es solo acerca de la comunicación con su cliente. En serio, que debe conocer sus personas de contacto y la forma de acercarse a ellos. Mantener la calma siempre es una buena estrategia, solo señale los riesgos a su cliente y déjelo decidir sobre la urgencia.
Doc Brown

Respuestas:

15

El enfoque tranquilo que sugiera sería el mejor. Señalando que cuando estos datos se exponen, la mayoría de sus usuarios serán vulnerables al robo de identidad debido a la reutilización de la contraseña. Este sería un buen momento para señalar que este es el mismo problema que afectó a Target (suponiendo que la empresa no sea Target). Y su gerente debería ser bastante receptivo a cambiar esto.

En lo que respecta a las legalidades con los datos, no creo que el nombre de usuario / las contraseñas se consideren igual que los datos CC, la información personal, etc. Aunque podría depender de la información que tenga para sus usuarios. No soy un abogado y estos aspectos se mencionarían mejor en su revelación y deberían ser llevados al departamento legal de su empresa para determinar las legalidades.

https://en.wikipedia.org/wiki/Information_privacy_law

Y también tienes este XKCD para ayudarte:

ingrese la descripción de la imagen aquí

Schleis
fuente
4

Realmente depende de la audiencia a la que intentas acercarte con esto. He trabajado en empresas con graves problemas de seguridad como usted dice, pero se negaron a escucharlo hasta que se los mostré.

Un enfoque, si es factible, consiste en reunir básicamente lo que tiene la intención de hacer y detallar lo que ya ha sucedido en estos hacks. Si su audiencia no es técnica, probablemente necesite señalar el costo comercial que pueden tener estos compromisos. Obviamente, las cuentas pirateadas reducen la credibilidad en su sistema y el valor percibido del cliente para su producto. Sin mencionar que un sistema comprometido con contraseñas de texto sin formato y direcciones de correo electrónico para los usuarios puede causar un efecto de ondulación grave.

Lo siguiente que debe hacer, si es posible, es demostrarlo. Si puede soportar este sistema en un entorno de prueba, hágalo. Luego demuestre frente a ellos el tipo de impacto que puede tener en el sistema desde el lado del cliente de la aplicación. Incluso con gente de tecnología, esto ha demostrado ser bastante convincente para mí (aunque todavía no actuaban en mis casos).

Por supuesto, como dijiste, debes explicar en todo caso qué medidas deben tomarse y una estimación del esfuerzo para lograrlo. Les ayudará a justificar el costo, aunque algunos lugares simplemente no les importará de todos modos. Al menos puedes despejar tu conciencia y seguir adelante sabiendo que lo intentaste.

Plataforma
fuente
2

Si, como usted dice, ha sido contratado para mantener su servidor, seguramente este contrato debe incluir en la descripción del trabajo tareas como garantizar la integridad, seguridad y disponibilidad del sistema operativo, el software de las aplicaciones y todos los datos, etc. Si incluso hay una vaga pista de que el contrato espera (y lo responsabiliza) por asegurarse de que el servidor sea seguro, entonces no perdería el tiempo armando casos de negocios y simplemente haría un buen trabajo para asegurarme de que los problemas se corrijan (tomando una copia de seguridad antes y después, manteniendo un historial de versiones de los cambios de su código).

No esperaría que un cambio como este requiera más de una mañana de trabajo y si le preguntan en qué ha pasado su tiempo trabajando, puede llevar un diario para explicar y justificar sus acciones. Siempre que esté trabajando dentro del alcance de su contrato, no debería haber problemas aquí. A veces, volverse loco por la seguridad frente a los tomadores de decisiones causa pánico o, en el peor de los casos, crea una oportunidad para que digan que no les importan esos problemas, así que no lo arreglen, mientras que el contrato aún lo responsabiliza en caso de ¡un incumplimiento! Quizás este no sea siempre el enfoque más amigable para los negocios, pero mi ética profesional no me permite dejar contraseñas sin cifrar en ningún sistema del que haya sido responsable por haber llamado mi atención.

Por experiencia personal, tiendo a encontrar cada vez que empiezo a trabajar para un nuevo empleador o cliente, discutir escenarios y expectativas por adelantado puede ahorrar mucho estrés de su parte, por ejemplo: si encuentro algún problema de seguridad que pueda solucionar, ¿está feliz? ¿puedo seguir adelante y completar este trabajo sin acudir a usted cada vez, solo para notificarle de sospechas de infracciones / incidentes? Casi siempre dirán que sí a esto porque desde su punto de vista no están interesados ​​en preocuparse por la seguridad o las cosas de la computadora, ¡por eso lo han contratado! Tal vez esto no responda la pregunta de la manera que esperaba, pero espero que le dé algo de qué pensar. ¡Te deseo todo lo mejor y espero que el problema se solucione!

richhallstoke
fuente
Esa es una gran respuesta. A veces, plantear problemas con los "tomadores de decisiones de primera línea" provoca más pánico de lo que vale y parece más inteligente solucionarlo detrás de escena. No me gusta trabajar a espaldas de quién paga mi salario, pero el tema de la responsabilidad personal es un argumento clave. Podría quitar sal + hash de las contraseñas fácilmente y luego eliminar la columna de contraseña de texto abierto cuando todo se mueva. Sin embargo, el mayor problema es que las contraseñas pueden haber sido vistas y capturadas.
bafromca
La desafortunada realidad es que el tiempo no puede rebobinarse hasta el punto anterior a la violación, por lo que si bien la empresa tal vez deba decidir si informan a sus clientes sobre la violación o no, lo más importante para mí siempre ha sido tomar medidas para evitar más infracciones Si los directores no quieren informar a los usuarios de una infracción, puede solicitar a los clientes después de iniciar sesión un mensaje como "Después de las mejoras realizadas en la seguridad de nuestro sitio web, ahora le pedimos que elija una contraseña más segura que incluya mayúsculas, minúsculas y números y un mínimo de 8 caracteres de longitud: '.
richhallstoke
0

Sin duda, si ya está sucediendo el cambio de la dirección de correo electrónico del cliente, y eso se considera un problema, la capacidad de cambiar las contraseñas también lo es.

Ahora, si ha asegurado la base de datos lo suficiente como para evitar que esto ocurra en el futuro, entonces la posibilidad de que cualquiera pueda editar la contraseña del usuario es similar y solo debe considerar si alguien puede leer la contraseña ahora.

Por supuesto, si pueden, o si (en el improbable caso) de que no haya asegurado totalmente la base de datos, seguramente se debe cifrar las contraseñas: ¿cómo hacerlo? Simplemente póngalo en el mismo contexto que el problema "tener direcciones de correo electrónico actualizadas". Si esto requiere que la aplicación cambie, y si ese es un problema "demasiado difícil", es otro asunto que debe plantearse con ellos. Mire el código y vea cuánto costará cambiarlo antes de tomar la solución sugerida.

gbjbaanb
fuente