Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: elezekiel en 30 Octubre 2014, 07:09 am



Título: [Solucionado] -seguridad en chat simple
Publicado por: elezekiel en 30 Octubre 2014, 07:09 am
hola gente tengo una duda porq estoy haciendo un chat sencillo nomas para que se conecten 3 o 4 a una maquina servidor, tengo todo hecho funciona las pc se conectan bien bla bla. el tema es que quisiera saber a que podria enfrentarme si un usuario malintencionado atacara el servidor ?¿ uso winsock y basicamente es una conexion directa a un puerto e ip que solo el cliente que se repartio conoce, ningun usuario esta conociendo dicha ip ni puerto.

alguna sugerencia antes de liberar este trabajito la semana entrante? graciass

saluddd


Título: Re: seguridad en chat simple
Publicado por: engel lex en 30 Octubre 2014, 07:14 am
tu conoces tu código... fuera de tu código el winsock básicamente se limita a una comunicación de paquetes de bajo nivel en protocolos standards contra el winsock hay muy poco que hacer...

tu código es la parte vulnerable normalmente... los programas fallan es por la forma en que el código está hecho... entonces tu eres quien ve las vulnerabilidades...

si el chat no está cifrado, cualquier usuario en las redes va a poder sniffear todo el contenido que salga y llegue a un cliente (a demás de meterse y hacerse pasar por el)




Título: Re: seguridad en chat simple
Publicado por: elezekiel en 30 Octubre 2014, 07:50 am
a que te referis con cifrado? o sea, cuando envio una peticion o por ejemplo, cuando se conecta un uusuario a la sala, les avisa alos demas que esten, pero ese codigo, o sea, el aviso esta basado en algo que invente yo, o sea, a ver, no descubri america, pero me refiero, toma una especie de prefijo, por ejemplo, cuando el cliente se conecta envia como datos msgeEntrante parametro+ parametro, por decirte algo, entonces a eso el servidor lo parsea y emite el mensaje correspondiente en sala dependiendo lo que recibem cuando alguien sale vendria a ser msgeSaliente parametro+parametro.

Tal vez es algo absurdo pero no encontre otra forma de realizarlo al menos de momento.

graciasss saluddd


Título: Re: seguridad en chat simple
Publicado por: engel lex en 30 Octubre 2014, 14:49 pm
está bien hecho :P en general así se hace, con prefijos...


pero ahora preguntate... que pasa si se envian prefijos a control del usuario? si un fastidiosos solo los quiere enviar por molestar pasa algo malo?

por otro lado lo del cifrado
Citar
si el chat no está cifrado, cualquier usuario en las redes va a poder sniffear todo el contenido que salga y llegue a un cliente (a demás de meterse y hacerse pasar por el)

cifrado es proteger los paquetes con una contraseña (por resumir) si no estan cifrado un ataque de man in the middle va a tener acceso todo lo que usuario en la misma red ve


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 30 Octubre 2014, 18:08 pm
está bien hecho :P en general así se hace, con prefijos...


pero ahora preguntate... que pasa si se envian prefijos a control del usuario? si un fastidiosos solo los quiere enviar por molestar pasa algo malo?

por otro lado lo del cifrado
cifrado es proteger los paquetes con una contraseña (por resumir) si no estan cifrado un ataque de man in the middle va a tener acceso todo lo que usuario en la misma red ve
no entiendo esa parte, a que te referis?


Título: Re: seguridad en chat simple
Publicado por: engel lex en 30 Octubre 2014, 21:56 pm
cuando el cliente se conecta envia como datos msgeEntrante parametro+ parametro, por decirte algo, entonces a eso el servidor lo parsea y emite el mensaje correspondiente en sala dependiendo lo que recibem cuando alguien sale vendria a ser msgeSaliente parametro+parametro.

si preguntas sobre la seguridad ese parrafo es lo importante... mi pregunta era... que pasa si un usuario manda si el usuario empieza a mandar esos datos a lo loco?


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 31 Octubre 2014, 01:33 am
bueno eso es algo que no tome en cuenta. si el cliente envia muchas peticiones no lo estoy seteando ni limitando, es un buen detalle.

como sugeris manipular las pticiones? estoy abierto a opiniones.


Título: Re: seguridad en chat simple
Publicado por: engel lex en 31 Octubre 2014, 01:52 am
has una tabla de mensajes en el servidor, si el usuario se conecta, y se mantiene conectado, si se recibe un mensaje de conexión, revisar si el usuario de ese nombre está vivo (responde a un mensaje de "estás ahí?") si vive, ignora el mensaje, si no, desconectalo y conecta al nuevo usuario...

ve así... puedes por seguridad apartar los primeros x bytes para prefijar todo ej, apartas 4 bytes

"cmmd" significa que lo que viene es un comando
"msag" significa que lo que viene es un mensaje
"conn" significa que lo que viene es una conexion
"ping" el cliente responde con un "pong" para saber que está viva la conexion
"ackn" es un "ok" una confirmacion a lo ultimo recibido

entonces seria algo como (viendo desde el servidor "<" recive, ">"manda)
Código:
<connPepito //pide conexion
>cmmdConectado //se indica que fue conectado
<ackn //confirma la conexion
>ping //ping para medir la latencia
<pong //repsuesta a ping
<cmmdEntrarChat //pide entrar al chat
>ackn //confirma
<msagHola a todos //servidor recibe el mensaje "Hola a todos"
>msagPablo: Hola //sertvidor envia mensaje "Pablo: Hola" de otro usuario

y así vas... es util tener las confirmaciones de operacion para saber que todo funciona bien y un ping para saber que el cliente vive... para todo mensaje solo sacas los primeros 4 bytes y decides que hacer (si es comando, mensaje, o que)

siempre verificar los comandos para evitar un ataque


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 31 Octubre 2014, 02:12 am
excelente ejemplo, en base a lo que decis, podria crear una funcion, que compare la conexion entrante(pendiente de aprobacion), con la lista de conexiones que tengo en una variable de coleccion(activas), con todos los datos de cada uno, si coincide, ignorar solamente, sino agregarla, crees que con eso basta o al menos creo que seria bueno en un inicio, no ?

Despues tendria que ver, como comprobar si las conexiones siguen vivas, a lo que son pocas podria realizar un seteo como decis de ping/pong a los usuarios conectados.

saludd y gracias.


Título: Re: seguridad en chat simple
Publicado por: engel lex en 31 Octubre 2014, 02:19 am
lo del cifrado para que las conversaciones no sean "espiables" podrías buscarte en internet algún codigo para cifrar todo el AES, al programa le das una contraseña de conexion inicial (para que la primera peticion sea cifrada) y luego la cambias


por ejemplo... en el codigo de conexion dejas la clave "arena"

Código:
(cifrado con "arena")
<connPepito //pide conexion
>cmmdConectado //se indica que fue conectado
>cmmdPass:aslkd92384 //le indica que cambie la contraseña a "aslkd92384" que es aleatoria y generada unicamente para el
(cifrado con "aslkd92384")
<ackn //confirma la conexion

y de resto es igual... claro si analizan bien y son real conocedores de criptografía (o en su defecto le hicieron ingenieria inversa al programa) pueden sacar la clave... pero contra un ataque MItM normal por gente común es una conexión segura :)


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 31 Octubre 2014, 06:09 am
es mas probable adivinar la palabra que coloco para generar el cifrado, o adivinar a partir de los datos cifrados la clave? me explico?

encontre un codigo que genera un hash o encriptacion, no se como decirle, a partir de una palabra que le proporcionemos, podria enviar a traves del mensaje como parametro de conexion, la encriptacion de la palabra, luego el server lo descifra y compara si es real para permitir la conexion, pero lo que me queda duda es el resto, tendria que crifrar tambien los mensajes normales? o con solo cifrar la conexion inicial me bastaria?

salud y gracias por tu tiempo.


Título: Re: seguridad en chat simple
Publicado por: engel lex en 31 Octubre 2014, 16:17 pm
no confundas cifrado y hash son cosas muy diferentes

voy por partes
Citar
es mas probable adivinar la palabra que coloco para generar el cifrado, o adivinar a partir de los datos cifrados la clave? me explico?
la primera es lo más simple y por lo general lo primero que se intenta, se llama "ataque de diccionario" con una lista de palabras se intenta romper (esto puede tardar horas) y si la palabra no está en su lista, el ataque es inutil

la segunda (a partir de los datos) es más complicado, ya que tienes que saber que datos están cifrado para romperlo

lo otro
tienes que estar pendiente si el codigo genera un hash o un encriptacion... un hash es simplemente un valor para comprobar si algo transferido está bien... (por resumir)

un cifrado es la protección de un mensaje bajo contraseña

si haces la conexion (claramente tienes que poner algo dificil como contraseña inicial) TODO va a estar cifrado... desde la petición de conexión, hasta la conversación... la intención es proteger el contenido de la conversación...  y así si el mensaje no es comprendible por el servidor, es tu verificación con respecto a que el usuario tiene la contraseña original correcta


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 1 Noviembre 2014, 03:43 am
Podria descartar el ataque de fuerza bruta, ya que si pongo como palabra clave, por ejemplo teleVIVIAnita5$, no creo que alguien la incluya en su diccionario.

Segun entiendo como me explicas, si el cliente pide conexion y representa una cadena de caracteres (la clave cifrada) la cual el server descifra y compara para ver si hay veracidad, el resto deberia de despreocuparme, ya que sino es el cliente original no proporcionaria una clave valida, tendria como una whitelist en el servidor, sera a medias digamos, algo seguro? sé que siempre existira la forma de romper algo de ese tipo, tampoco creo que un experto en criptografia asi le llaman no? se meta a crackear eso.. ademas que no es nada importante ni internacional, es a nivel personal.

Si realizo lo que comente entonces podria decir que la conversacion de cliente/servidor seria segura porque si no se autentica el mismo el servidor no va a interactuar con una conexion desconocida ni enviaria ni recibiria dato alguno.

saludd y gracias.


Título: Re: seguridad en chat simple
Publicado por: engel lex en 1 Noviembre 2014, 03:55 am
exacto... cuando se conecte el cliente no tiene que enviar la contraseña, solo manda el comando de conxión cifrado... si tu servidor no lo entiende quiere decir que la contraseña es erronea :P


Título: Re: seguridad en chat simple
Publicado por: elezekiel en 1 Noviembre 2014, 04:00 am
Lujo.. hoy programo eso y lo dejo de esa forma, gracias por el tiempo engel, no era tanto codigo que tenia que entender sino un poco de logica que me falto aplicar.

muy agradecido cualquier duda comento por aca a ver si me podes solventar lo que vaya apareciendo, mil gracias!

saluddd

pd: insisto, tenes que ser administrador del foro, q el brujo se ponga las pilas loco.


Título: Re: [Solucionado] -seguridad en chat simple
Publicado por: engel lex en 1 Noviembre 2014, 04:11 am
jejeje ni tanto (el-brujo hace mucho por ahí jejeje)

;) colaborador es ideal, es lo que me gusta y lo que trato de hacer bien, aquí realmente no te colaboro con codigos porque no es lo mío, pero si cualquier duda, aquí estamos