Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: TomaSs en 24 Septiembre 2013, 21:49 pm



Título: Sistema de login muy seguro
Publicado por: TomaSs en 24 Septiembre 2013, 21:49 pm
Hola gente.

Sabrían decirme los métodos que podría utilizar para hacer un login altamente seguro?
La cuestión sería que se envíen los datos de logeo a una base de datos remota y que esta devuelva si son correctos o no.
No pido como hacer la petición remota ni nada de eso, sino como debería cifrar la respuesta y comprobarla posteriormente (no con un simple if) de tal manera que no sea fácil de crakear.

Y ya aprovecho también, para preguntar sobre que "identificador" o algún número de serie o algo que me permita identificar un ordenador para así hacer que mi programa únicamente funcione en un pc concreto.
De esta manera podría basar también la respuesta de la base de datos en base a ese identificador también, para así cerciorarme de que se ejecuta únicamente en ese pc, y así hacer más difícil aún el crakeado.

A ver si me podéis orientar un poco algunos que hayáis tenido que usar algo de esto.
Muchas gracias! ;)


Título: Re: Sistema de login muy seguro
Publicado por: Keyen Night en 7 Octubre 2013, 01:06 am
La arquitectura común para un login, es Cliente <-> Servidor/Servicio <-> Base De Datos, de manera que la comprobación de las credenciales no se realice desde el lado del cliente.

Para generar una comunicación segura se debe establecer un canal cifrado, hay mucha documentación, pero es un tema largo.

En el caso de los identificadores, estos deben generarse desde el lado del cliente, así que se puede realizar un parche para modificar al antojo el identificador, lo más sencillo es tener una base de datos de usuarios, para que estos deben autenticarse ante el servicio y así poder tomar decisiones según sea el caso.


Título: Re: Sistema de login muy seguro
Publicado por: TomaSs en 10 Octubre 2013, 21:59 pm
Claro que la comprobación de credenciales la haces en el lado del servidor, pero luego le tendrás que responder al cliente con algo, no? con una aceptación o con algo, y eso es lo que digo que pueden crackear, esa respuesta xd


Título: Re: Sistema de login muy seguro
Publicado por: BlackM4ster en 11 Octubre 2013, 08:43 am
Todo se puede crackear, luego consiste en como quieras hacer la comparación. Modificar un if, es facil, pero todas las formas de la que lo puedas encubrir, tambien se pueden crackear xD

He visto algunos crackmes que tienen una funcion modificada una vez compilado, que comprueba el valor en hex de la parte que tiene la comparación y si detecta algo raro, se cierra. Es una idea, pero tambien es crackeable


Título: Re: Sistema de login muy seguro
Publicado por: Fakedo0r en 11 Octubre 2013, 13:21 pm
Separa la parte de autentificación que llegaría a ser una especie de loader de tu aplicación. Cifra tu aplicación entera. Entonces desde el loader se ingresarían las credenciales (usuario / contraseña + algún Hardware ID única), esto haría una petición al Servidor, en el servidor se validarían las credenciales y según eso, te devolvería la contraseña para descifrar tu aplicación o de lo contrario un código erróneo. Te aconsejo, que el loader hicieras en algún lenguaje nativo como c++ o object pascal, ya que el .NET es de-compilable y no necesitamos dar mas información de lo que ya dispone el cracker.
Esto no es un método 100% efectivo pero es una buena solución.

Saludos.


Título: Re: Sistema de login muy seguro
Publicado por: Shout en 16 Octubre 2013, 13:59 pm
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.


Título: Re: Sistema de login muy seguro
Publicado por: Mad Antrax en 16 Octubre 2013, 14:13 pm
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

Ese sistema es bastante seguro, un servidor de licencias :)

Pero se puede "alterar" de varias formas dependiendo el modo en que implementes la protección. Por ejemplo un cliente que ya haga la validación HWID y tenga la aplicación descifrada, podrá volcar-lo en un nuevo fichero y distribuir la copia por la red (por ejemplo).

Per es cierto que un license-server es bastante seguro :)


Título: Re: Sistema de login muy seguro
Publicado por: BlackM4ster en 17 Octubre 2013, 08:24 am
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

Buena idea xD  ;-) ;-) ;-)


Título: Re: Sistema de login muy seguro
Publicado por: Shout en 17 Octubre 2013, 14:16 pm
Ese sistema es bastante seguro, un servidor de licencias :)

Pero se puede "alterar" de varias formas dependiendo el modo en que implementes la protección. Por ejemplo un cliente que ya haga la validación HWID y tenga la aplicación descifrada, podrá volcar-lo en un nuevo fichero y distribuir la copia por la red (por ejemplo).

Per es cierto que un license-server es bastante seguro :)
A ver, se trata de que el archivo esté cifrado y que el servidor te dé la contraseña.
Porque como esté limpio dentro del ejecutable, se puede extraer de muchas formas.
Buena idea xD  ;-) ;-) ;-)
Gracias ;-)


Título: Re: Sistema de login muy seguro
Publicado por: Mad Antrax en 17 Octubre 2013, 14:31 pm
No me he explicado bien.

Tu sistema es bueno, pero también se puede "crackear" a parte que su implantación tiene un coste de gestión elevadísimo si lo extrapolamos a gran escala (Necesitas tener la capacidad de generar una copia única cifrada para cada cliente, así como su HWID y su contraseña. Cada actualización que realices supone modificar el 100% de las licencias distribuidas a clientes, etc...). Por no hablar que limitas el uso de la aplicación a clientes con Internet permanente.

En cuanto un cliente legítimo realice la validación, el server envía la contraseña y se des-cifra el ejecutable, no? En ese momento el cliente puede dumpear el ejecutable des-cifrado y almacenar una copia del software sin "protección", pudiendo distribuirla por la red libremente.


Título: Re: Sistema de login muy seguro
Publicado por: Shout en 18 Octubre 2013, 16:12 pm
No me he explicado bien.

Tu sistema es bueno, pero también se puede "crackear" a parte que su implantación tiene un coste de gestión elevadísimo si lo extrapolamos a gran escala (Necesitas tener la capacidad de generar una copia única cifrada para cada cliente, así como su HWID y su contraseña. Cada actualización que realices supone modificar el 100% de las licencias distribuidas a clientes, etc...). Por no hablar que limitas el uso de la aplicación a clientes con Internet permanente.

En cuanto un cliente legítimo realice la validación, el server envía la contraseña y se des-cifra el ejecutable, no? En ese momento el cliente puede dumpear el ejecutable des-cifrado y almacenar una copia del software sin "protección", pudiendo distribuirla por la red libremente.
Claro que se puede crackear, pero sólo por usuarios que tengan acceso legítimo al programa.
Está claro que no hay nada incrackeable. Pero si necesitas darle un programa a alguien (que no sepa mucho) y quieres evitar que se lo pase a los demás, este sistema es perfecto.


Título: Re: Sistema de login muy seguro
Publicado por: TomaSs en 19 Octubre 2013, 23:38 pm
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.

No tiene mala pinta lo que planteas, bueno, en general lo que planteáis todos está bien.
Pero, en cuanto a tu método, que me dices si lo que se crackea es el loader, de tal mantera que el HWID que es enviado al servidor sea un HWID perteneciente al de otro usuario, bien crackeando la obtención de este HWID o bien crackeando el HWID que se le envía al servidor.
Que opinas de eso?
Gracias por las respuestas a todos ;)


Título: Re: Sistema de login muy seguro
Publicado por: Spiritdead5 en 19 Octubre 2013, 23:43 pm
Pues yo tengo una solución verdaderamente segura, con la que es 99.9% imposible crackear tu aplicación.

Primero: encriptas el .exe compilado de tu programa con algún cifrado con contraseña (tipo AES, así, el archivo varía según la contraseña, por lo tanto, es imposible recuperar el archivo original sin esa contraseña)

Luego, creas un "loader" que se encargará de enviar el Hardware ID (HWID) al servidor.
En el servidor, compruebas que el HWID esté en la base de datos. Si lo está, envías la contraseña al cliente para que desencripte el programa original y se pueda ejecutar. Si no es un HWID que esté en tu base de datos de HWIDs válidos, envías una contraseña aleatoria y el archivo no podrá ser descifrado.

Esto es imposible de crackear (eso sí, si la contraseña es 12345, no esperes que dure mucho). Si pones una contraseña larga y jodida, nadie podrá jamás ejecutar ese código, ya que, para bruteforcear eso, necesitas muchísimos años de crackeo.
y planteo 1 pequeño sniffer q intercete esa informacion :P y obtengo esa password


Título: Re: Sistema de login muy seguro
Publicado por: z3nth10n en 20 Octubre 2013, 13:01 pm
http://foro.elhacker.net/net/cifrar_de_forma_segura_una_pass_en_el_source-t395583.0.html

Un saludo. ::)


Título: Re: Sistema de login muy seguro
Publicado por: Maurice_Lupin en 21 Octubre 2013, 01:34 am
Me recuerda al caso de las zonas hotspot que utilizan el cifrado md5.
La ventana de login cifra el pass antes de enviarlo al servidor, solución snifear a un usuario y guardar el hash y luego modificar la ventana de login para que sólo envie el hash.

Saludos.


Título: Re: Sistema de login muy seguro
Publicado por: Mad Antrax en 21 Octubre 2013, 14:32 pm
Buenas propuestas, pero siempre hay que partir desde la idea clara que no existe nada in-crackeable en teoría.

Cualquier protección que se pueda programar se podrá crackear. Solo podemos decidir lo fácil o dificil que resultará para el cracker.

Saludos


Título: Re: Sistema de login muy seguro
Publicado por: TomaSs en 22 Octubre 2013, 01:15 am
Cito de una respuesta que me dieron en otro hilo de este foro, y que es bastante interesante, eso si, parece que tiene su complejidad, sobre todo en cuanto a la carga dinámica de la dll.

Si te logeas contra un server, podrias hacer que el proggie use una DLL que este solo en el server y que se envie al user al loguearse. La DLL no deberia escribirse en disco, sino cargarse dinamicamente. Con ya te sacas de encima a varios...  :P

Para el login podrias usar un hashing tipo sha256, haciendo que el sistema sea mas seguro.

Puedes usar la MAC address, serial del disco, CPUID, etc, etc.

Por supuesto, en .NET deberas usar algo mas que ofuscacion y ademas, para hacer la proteccion "bien jodida" deberías implementar checkeos aleatorios y aislados dentro del codigo, para verificar la autenticidad de user.

El nivel de protección aumentará proporcionalmente al tiempo que le dediques a la misma.

Saludos!


Título: Re: Sistema de login muy seguro
Publicado por: Shout en 22 Octubre 2013, 14:23 pm
No tiene mala pinta lo que planteas, bueno, en general lo que planteáis todos está bien.
Pero, en cuanto a tu método, que me dices si lo que se crackea es el loader, de tal mantera que el HWID que es enviado al servidor sea un HWID perteneciente al de otro usuario, bien crackeando la obtención de este HWID o bien crackeando el HWID que se le envía al servidor.
Que opinas de eso?
Gracias por las respuestas a todos ;)
Es como si el administrador de una web se pone la contraseña más difícil del mundo, pero viene un listo y se la saca del auto-guardado de su navegador.

Y claro, si tienes el HWID de un usuario legítimo, está claro que podrás descifrar el programa.
y planteo 1 pequeño sniffer q intercete esa informacion :P y obtengo esa password
Claro, pero es que si tienes que robarme mi HWID, no puedes, a menos que me metas un virus (que tampoco es fácil) y me robes el HWID.
De otra manera, no sabes dónde vivo, no sabes la contraseña de mi red (y no la vas a encontrar, uso WPA2 con una contraseña jodida), no sabes qué ordenador (y cuándo) usará el programa...
Buenas propuestas, pero siempre hay que partir desde la idea clara que no existe nada in-crackeable en teoría.

Cualquier protección que se pueda programar se podrá crackear. Solo podemos decidir lo fácil o dificil que resultará para el cracker.

Saludos
Claro que no hay nada que no se pueda crackear.
Pero si se cifra el software y sólo yo (por ejemplo, claro) puedo usarlo, a menos que te conectes a mi red (y me snifees mientras uso el programa) o me metas un troyano, no podrás descifrar el archivo en menos de 1.000.000 años con un PC de los más potentes que existen. :P

Y para el colmo, si queréis que sea más seguro, podéis implementar un sistema PGP para que la clave no se pueda sniffear.
Así, sólo se podría obtener el archivo descifrado con un troyano / acceso directo a un PC con un HWID válido.


Título: Re: Sistema de login muy seguro
Publicado por: Maurice_Lupin en 23 Octubre 2013, 18:25 pm
Eso de cargarse una dll, me suena a que muchos antivirus saltarán.

Intenté hacer un Crypter Runtime para una aplicación, el cifrado no tenia codigo malicioso y todos los antivirus saltaban.
Parece que le han dado mala fama a ciertas funciones de inyección de memoria y los antivirus saltan paranoicos.

Me recomendaron una vez, que mi aplicación sea Open Source para ya no hacer higado, que opinan?

Saludos.


Título: Re: Sistema de login muy seguro
Publicado por: TomaSs en 24 Octubre 2013, 13:43 pm
Es como si el administrador de una web se pone la contraseña más difícil del mundo, pero viene un listo y se la saca del auto-guardado de su navegador.

Y claro, si tienes el HWID de un usuario legítimo, está claro que podrás descifrar el programa.Claro, pero es que si tienes que robarme mi HWID, no puedes, a menos que me metas un virus (que tampoco es fácil) y me robes el HWID.
De otra manera, no sabes dónde vivo, no sabes la contraseña de mi red (y no la vas a encontrar, uso WPA2 con una contraseña jodida), no sabes qué ordenador (y cuándo) usará el programa...Claro que no hay nada que no se pueda crackear.
Pero si se cifra el software y sólo yo (por ejemplo, claro) puedo usarlo, a menos que te conectes a mi red (y me snifees mientras uso el programa) o me metas un troyano, no podrás descifrar el archivo en menos de 1.000.000 años con un PC de los más potentes que existen. :P

Y para el colmo, si queréis que sea más seguro, podéis implementar un sistema PGP para que la clave no se pueda sniffear.
Así, sólo se podría obtener el archivo descifrado con un troyano / acceso directo a un PC con un HWID válido.

Claro, pero es que otros usuarios a los cuales les de permiso (o les venda) mi programa podrán pasar su HWID a otros para que lo crackeen, o crackearlo ellos mismos, así es que eso no sirve de mucho...


Título: Re: Sistema de login muy seguro
Publicado por: Mad Antrax en 24 Octubre 2013, 14:22 pm
Por no hablar que una protección por HWID limita al usuario y le da problemas si se actualiza su PC, cambia de disco, formatea o compra más memoria RAM por ejemplo.

Yo creo que partiendo del punto en que no hay ninguna protección incrackeable, lo mejor es buscar una protección que combine una alta seguridad y tengo un impacto mínimo en el usuario y en la compañía.

(Un servidor de licencias + comprobación por HWID tienen impacto grande sobre la empresa y usuario final, como ya expliqué)


Título: Re: Sistema de login muy seguro
Publicado por: TomaSs en 24 Octubre 2013, 14:56 pm
Por no hablar que una protección por HWID limita al usuario y le da problemas si se actualiza su PC, cambia de disco, formatea o compra más memoria RAM por ejemplo.

Yo creo que partiendo del punto en que no hay ninguna protección incrackeable, lo mejor es buscar una protección que combine una alta seguridad y tengo un impacto mínimo en el usuario y en la compañía.

(Un servidor de licencias + comprobación por HWID tienen impacto grande sobre la empresa y usuario final, como ya expliqué)

Pero es que eso también depende, depende de la difusión que le vayas a dar al programa. Por ejemplo, yo lo quiero para un programa que no voy a comercializar de forma pública, sino a unas pocas personas de forma privada, pero que no puedo permitir que entre esas personas se lo intercambien, ya que la idea es cobrar a cada una de ellas una cantidad X. E incluso podría darse el caso de cobrarles por períodos de tiempo, lo cual me haría necesario incluso comprobar la fecha de algún servidor...
Es decir, que tampoco me sería muy complicado hacer diferentes códigos para cada HWID, aunque este cambie en un momento determinado, pero está claro que si lo que se intenta hacer es un programa público y comercial, sería algo inviable claro...


Título: Re: Sistema de login muy seguro
Publicado por: eferion en 25 Octubre 2013, 13:52 pm
Me recuerda al caso de las zonas hotspot que utilizan el cifrado md5.
La ventana de login cifra el pass antes de enviarlo al servidor, solución snifear a un usuario y guardar el hash y luego modificar la ventana de login para que sólo envie el hash.

Saludos.

Si snifeas a un usuario te da igual si la ventana cifra los datos o no... básicamente ya estás interceptando la petición que le manda el cliente al servidor y eso es todo lo que necesitas para crackear el proceso.

Para evitar problemas de este tipo habría que enviar este tipo de peticiones por una conexión segura con ssl, por ejemplo.