2010-07-08 6 views
9

He estado leyendo Stack Overflow por bastante tiempo, pero esta es mi primera pregunta publicada.¿Cómo puedo asegurarme de que alguien no está enviando datos falsos?

Tengo este programa de seguimiento escrito en C# que recopila información sobre el uso de la computadora local y los envía a un servidor. Los datos tienen formato XML, se envían una vez cada ~ 10 minutos.

Mi problema: no importa cómo encripto los datos XML (sean simétricos o asimétricos), alguien siempre puede descompilar mi programa de seguimiento C#, descubrir las convenciones de clave/certificado/encriptación que uso y escribir otro programa que envía falsificaciones informes al servidor.

El programa de seguimiento funciona bajo la suposición de que el usuario que lo ejecuta puede estar interesado en enviar informes falsos.

Preguntas: 1) ¿Cómo puedo asegurarme (lo más seguro posible) de que los datos se envían desde el rastreador real en lugar de un clon/faker? 2) ¿cómo puedo ofuscar el código lo suficientemente mal como para recuperar las claves/certificados/convenciones de cifrado se convierte en un infierno/casi imposible?

quiero pasar poco o preferiblemente no dinero en la solución (por lo ofuscadores 500 $ están fuera de la cuestión. Soy un estudiante universitario y estoy barato :)

Gracias de antemano.

+4

Respuesta corta: No se puede. Los editores de software dedican una cantidad extraordinaria de tiempo y esfuerzo a intentar algo similar, e invariablemente se rompe a las pocas horas de que esté disponible. –

+0

Personalmente, no gastaría dinero en ello, porque incluso las costosas soluciones se rompen fácilmente si alguien está decidido a dar datos falsos. Nunca puede "asegurarse" de que los datos sean válidos, solo intente y disuada a las personas de intentarlo. –

Respuesta

0

1.Otro enfoque: Suponiendo que no cambie su ejecutable a menudo. cree un DigSig de su (HASH + Encrypt) imagen del archivo ejecutable del cliente y envíela junto con, que autenticaría a su cliente como el cliente real y no como una versión modificada.

Pero esto no puede evitar que los datos sean enviados por un cliente totalmente diferente que puede adquirir el Digsig de su imagen ejecutable.

+1

Diffie-Hellman agrega muy poco valor extra sin un tercero. Bastante fácil para MitM si todo lo que necesita está en la máquina. –

+0

@erickson Sí. Eso fue estupido. Para el escenario del OP, no importa si es simétrico/asimétrico. –

1

En teoría, una aplicación simplemente no puede protegerse cuando se ejecuta en un entorno no confiable. Entonces, la respuesta a la primera pregunta es, "Nunca se puede seguro que los datos son enviados por el rastreador real".

En la práctica, la ofuscación frustrará a los atacantes hasta cierto punto. El punto está determinado por la calidad de la ofuscación y la motivación del atacante. Entonces, la respuesta a la segunda pregunta depende de quién es el atacante, cuán capaces son y qué recursos pueden aplicar a este problema. La ofuscación que es "infernal/casi imposible" para que un profano sin motivación pueda desenmarañarse puede ser trivial para un experto o alguien que puede contratar a un experto.

Here is a list de algunos C# ofuscadores.

+0

echa un vistazo al reflector .net, uno de los mejores descompiladores que he visto (y es gratis) –

1

¿El usuario del cliente tendrá derechos de administrador sobre la máquina? Suena como el tipo de aplicación que sería instalada por un administrador, pero utilizada por usuarios que no son administradores. En ese caso, tal vez podría almacenar su clave o hash protegido de usuarios normales y ejecutar la aplicación en el contexto del usuario administrador. No estoy muy familiarizado con la tienda de claves, pero esperaba que todas las versiones de Windows (al menos XP +) tuvieran esta funcionalidad disponible. Si no es el almacén de claves, entonces tal vez un archivo ubicado en un directorio cifrado que pertenece al usuario administrador.

Si su usuario objetivo tiene derechos de administrador local, entonces realmente no veo cómo puede detenerlos.

+0

"ejecuta la aplicación en el contexto del administrador". Eso sería un potencial agujero de seguridad. – jgauffin

+0

¿Qué tal solo en el contexto de un usuario diferente no administrador? –

1

Parece bastante desesperado.Es probable que su rastreador dependa de Windows para proporcionar las métricas, como al llamar finalmente a GetUserName()/GetTickCount()/CollectPerformanceData()/etc. Entonces, un tipo malo solo tiene que atrapar su código (independientemente de cuán ofuscado esté y sin molestarse en descompilarlo) en cualquier punto de entrada de Windows que le interese, sustituya los datos falsos y deje que su código continúe de manera feliz.

La vida es demasiado corta para golpear su cabeza contra ese tipo de paredes de ladrillo.

1

Hemos estado utilizando una solución de hardware para proporcionar esta funcionalidad requerida.

He estado trabajando con un producto llamado IronKey, es un dispositivo de hardware que es capaz de generar firmas digitales. Cuando emitimos el dispositivo, almacenamos la clave pública en nuestro servidor. cuando nuestra aplicación cliente envía datos generamos una firma usando la clave privada, una vez que recibimos los datos, podemos verificar que se envió desde el cliente correcto utilizando la clave pública.

+0

Eso demuestra que el informe se envió desde una caja con el dongle, pero no garantiza que los datos no hayan sido falsificados por el software modificado que se ejecuta en la caja. –

+0

Los datos están firmados por el dispositivo, el cliente envía los datos y la firma al servidor, el servidor verifica la firma con los datos y la firma usando la clave pública almacenada. Si la verificación falla, sabemos que los datos han sido falsificados o que están usando la clave privada incorrecta. La llave de hierro no es solo un dongle, sino que proporciona una firma y verificación de hardware a través de pkcs11. –

+0

está generando datos programáticamente cada 10 minutos. la firma de datos no garantiza que su programa no haya sido comprometido. –

2

Como Raph Koster once put it, escribiendo sobre la batalla contra los piratas informáticos en cliente-servidor de juegos en línea,

Nunca confiar en el cliente. Nunca le pongas nada al cliente. El cliente está en manos del enemigo. Nunca jamás olvide esto.

Desafortunadamente, para casi cualquier aplicación en el mundo real que requiere que se utiliza la potencia de procesamiento del cliente, algo tiene que ser puesto en el cliente, y por lo tanto, ya está disponible a un atacante malintencionado. La pregunta que debe formularse, como ocurre con cualquier medida de seguridad, es cuánto tiempo y dinero está dispuesto a gastar para mitigar este riesgo.

A algunas personas les gusta señalar a las personas que preguntan sobre la ofuscación o los mecanismos de licencia del lado del cliente, "oh no tiene sentido, se romperá eventualmente". Pero esto es pasar por alto el punto: que el propósito de tales medidas es llevar ese 'eventualmente' más hacia el futuro, hasta el punto de que para un atacante insuficientemente determinado, será 'nunca'.

Por ejemplo: si su aplicación envió sus datos por correo electrónico de texto plano, eso derrotaría aproximadamente a cero atacantes. Enviarlo en rot13 email vencería tal vez al 5% de los atacantes. Enviarlo encriptado usando el nombre de usuario como clave vencería más. Ofuscar el código de envío con un ofuscador gratuito derrotaría más. Ofuscación con un ofuscador de grado comercial derrotaría más. Requerir que cada cliente tenga un dongle de hardware derrotaría a los atacantes "todos menos los más decididos", como a la gente le gusta decir, pero esto probablemente sería un costo intolerable.

De "Soy un estudiante universitario" Supongo que este no es el proyecto más delicado. Utilice un ofuscador gratuito y cripte los datos enviados usando alguna información específica del usuario como la clave. Eso probablemente sea suficiente.

Cuestiones relacionadas