Foros del Web » Programación para mayores de 30 ;) » Programación General »

Seguridad, codigo abierto y substitucion de .dll

Estas en el tema de Seguridad, codigo abierto y substitucion de .dll en el foro de Programación General en Foros del Web. Soy estudiante y puede que diga alguna burrada, pero tengo interes en saber los métodos de protección de los programas para una practica, que no ...
  #1 (permalink)  
Antiguo 06/12/2008, 14:45
 
Fecha de Ingreso: diciembre-2008
Mensajes: 10
Antigüedad: 15 años, 4 meses
Puntos: 0
Seguridad, codigo abierto y substitucion de .dll

Soy estudiante y puede que diga alguna burrada, pero tengo interes en saber los métodos de protección de los programas para una practica, que no he visto ningún ejemplo pero que creo que no seria complicado de hacer.

Paso a exponer un caso hipotético:
En una aplicacion de codigo abierto hay una dll que valida al usuario y permite la ejecución del resto del programa. Esta dll es de codigo abierto, y valida en el servidor al usuario, si tiene exito devuelve "true" y sino "false".

Si yo hiciese una copia del codigo (es codigo abierto) y modifico solamente el valor devuelto de "false" a "true" (siempre devolveria true). Y compilo la dll (mismo nombre) y substituyo la de la aplicación por la que he hecho. Asi al intentar validarme, aunque falle, el programa se pensara que estoy validado correctamente :/

¿Como se proteje uno de estos fallos de seguridad? (Teniendo en cuenta que el codigo HA de ser de codigo abierto).

PD: Ya he dicho que soy estudiante, espero no haber soltado una burrada. Si no se puede substituir solamente una dll, ¿que me decis si recompilo todo el programa?
  #2 (permalink)  
Antiguo 06/12/2008, 16:53
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad, codigo abierto y substitucion de .dll

La pregunta real es ¿hasta qué punto es ese el fallo de seguridad?

Quiero decir, según tu explicación, el fallo real de seguridad es que tienes acceso y permiso para sustituir la dll. Ya tienes control de la máquina, si tienes permiso para hacer eso. O por lo menos tienes suficiente como para controlar esa aplicación como quieras.

Por otro lado, dices que el proceso que subviertes es el de validación en un servidor externo. Ahora bien, lo único que haces es decirle al cliente local que la validación ha funcionado, pero el servidor es consciente de que la validación no ha sido correcta. El cliente podrá ejecutarse localmente pero el servidor (si está correctamente hecho, y fuera de tu control) no aceptará las instrucciones de ese cliente.
  #3 (permalink)  
Antiguo 07/12/2008, 15:33
 
Fecha de Ingreso: diciembre-2008
Mensajes: 10
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Seguridad, codigo abierto y substitucion de .dll

Hum... claro, gracias. En el programa que estaba pensando era en una aplicacion distribuida, pero si es el servidor el que se encarga de la validación también deberia informar al resto de clientes para "permitirle" trabajar.

Igualmente mi pregunta iba mas dirigida ha si hay algun tipo de control de las dll. Aunque como bien indicas el problema era de diseño de la aplicacion y no de esto, me gustaria saber si la aplicacion en el cliente podria llegar a controlar estos cambios de dll.

Muchas gracias. Aunque no se me ocurra ningún caso válido para la situación que pido me he quedado con la espinita :P La pregunta exacta seria: ¿Como una aplicacion cliente puede controlar que no le hayan substituido alguna dll determinada? (contando si hace falta con algun servidor para ello, y el cliente tiene acceso de administrador a la maquina cliente).

Y me intento responder yo mismo y me deciis si serviria:
En cada dll guardas una variable "password", y se comprueba si ese "password" es el que toca en el servidor la primera vez que se usa la dll. Al publicar el codigo ese password se cambia.

Para evitar que averieguen el password podria hacerse dinamico, asi aunque lo capturen y lo desencripten tendran un password antiguo (no me metere en como crear un password dinamico de momento :P).

Gracias por vuestro tiempo.
  #4 (permalink)  
Antiguo 07/12/2008, 17:40
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Seguridad, codigo abierto y substitucion de .dll

Cita:
Iniciado por Visca Ver Mensaje
La pregunta exacta seria: ¿Como una aplicacion cliente puede controlar que no le hayan substituido alguna dll determinada?
Esa pregunta... sí, es un poco distinta. Y sí, hay casos que se dan. Un caso muy clásico es el de evitar las copias piratas, por ejemplo, de videojuegos. Otro bastante claro, el de los antivirus: Tienen que evitar a toda costa que infecten al propio antivirus.

Soluciones hay varias. La que propones no es demasiado práctica pero hay una parecida que es la de firmar el código con certificados. Se genera una firma encriptada a partir del código que sólo puede validarse con el certificado apropiado. Cuando es necesario, se comprueba el código contra el certificado.

Una muy clásica (antigua) es la de utilizar lo que en MSDOS (por si te suena) se llamaban "programas residentes"; otro nombre común es watchdog. Tienes otro, un segundo programa, ejecutándose en memoria contínuamente desde el arranque y este se dedica a comprobar cada X tiempo que los ficheros no han sido modificados. Algunos antivirus actuales usan algo similar a esto, aunque en su caso lo hacen para comprobar, no los ficheros, sino que el propio proceso del antivirus cargado en memoria no ha cambiado o muerto.



En el caso de una aplicación distribuida, el asunto es mucho más complejo. Básicamente no tiene una solución exacta. En algunos casos lo que se hace es crear redes de confianza (es decir, me fío de que ese cliente es "bueno" porque este otro cliente que yo ya conozco me dice que sí que es "bueno"; esto se pede complicar mucho cuando intentas establecer cuánto te fías).
  #5 (permalink)  
Antiguo 07/12/2008, 18:58
 
Fecha de Ingreso: diciembre-2008
Mensajes: 10
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Seguridad, codigo abierto y substitucion de .dll

Muchas gracias por tu ayuda.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:25.