¿Puedo identificar la computadora de origen para un programa?

15

Estoy desarrollando un programa en varias plataformas e idiomas, pero no quiero que nadie descubra la computadora de origen donde se desarrolló el programa, ¿hay alguna manera de que alguien pueda descubrir eso?

    
pregunta Mohamad Alhamoud 23.11.2011 - 22:27
fuente

3 respuestas

24

El código fuente consiste en un grupo de archivos de texto. El contenido de un archivo de texto es exactamente lo que muestra un editor de texto, por lo que puede controlarlo "visualmente". Tenga cuidado con los sistemas de revisión como CVS o Subversion: pueden reemplazar automáticamente algunas etiquetas específicas en el código fuente (como " $Id$ ") con una cadena de identificación que puede contener la fecha y la hora actuales, su nombre de inicio de sesión y otra información; esta función se considera buena para la trazabilidad, pero entiendo que no le gustaría en su caso específico.

El código

compilado es otra cosa. Algunos compiladores pueden agregar automáticamente cadenas de identificación como lo que hace el software de control de revisiones, como campos de "comentarios" en la estructura ejecutable. Esto no tiene por qué ser un dispositivo de espionaje deliberado: la trazabilidad es realmente una buena idea en el caso general; no hay necesidad de imaginar a un gobierno que soborna a los desarrolladores de compiladores para que agreguen esas cosas a los compiladores solo para poder espiar a los programadores. Además, los formatos ejecutables a menudo incluyen algunos "espacios en blanco" (partes no utilizadas agregadas por razones de alineación) que el compilador no se molestó en rellenar con ceros, en lugar de simplemente escribir lo que había en la RAM en ese lugar. Esto ha ocurrido con una versión anterior de lcc-win32 , que por lo tanto estaba escribiendo extractos aleatorios de la RAM los contenidos que podrían contener información confidencial (creo que esto se ha corregido para lcc-win32, pero podría ocurrir con otros conjuntos de herramientas).

Otros formatos de archivo también pueden incrustar (y, por lo tanto, filtrar) cierta información. Por ejemplo, las imágenes PNG pueden incluir "comentarios" (que no cambian el aspecto visual de la imagen de ninguna manera). GIMP , un programa de manipulación de imágenes, utiliza el campo de comentarios para indicar que estuvo involucrado en el procesamiento de imágenes; cualquier herramienta también podría agregar alguna información que, en su opinión, sería menos benigna.

Muchas fugas potenciales pueden detectarse visualmente, al mirar los archivos como si fueran texto. Pero esto no cubre la posibilidad de que una de sus herramientas se haya modificado voluntariamente para que incluya evidencia incriminatoria en su salida (tal información de rastreo se cifraría para "parecer aleatoria" excepto para quien sepa dónde buscar).

Desafortunadamente para el estado del mundo en general, "una revolución en mi país" no es una indicación muy precisa. Actualmente hay insurrecciones armadas o disturbios similares en bastantes países hasta ahora, incluidos, entre otros, Afganistán, Yemen, Siria, Somalia, partes de Libia, Colombia, Sudán y el Sáhara Meridional; y las cosas no están completamente claras en Egipto, Irak o Irán, solo para incluir los pocos que se me ocurren de memoria.

    
respondido por el Tom Leek 23.11.2011 - 23:27
fuente
14

Hay toda una disciplina dedicada a extraer información de los archivos y sistemas de computadora: informática forense .

Los archivos de computadora son relativamente fáciles de hacer anónimos. Relativamente al tráfico de red, es decir: los archivos son solo un montón de bits, mientras que el tráfico de red transporta mucha información a través del tiempo. En una escala absoluta, el anonimato de archivos no triviales a menudo no es tan fácil de realizar.

Lo primero que debe asegurarse es que no haya información de identificación en sus archivos de origen, a excepción de los comentarios. La mayoría de los comentarios son seguros, aunque sí influyen en los números de línea que pueden aparecer en la información de depuración (por ejemplo, __LINE__ en C). En particular, como Tom notes , asegúrese de que sus archivos de origen no tengan etiquetas RCS o similares. Utilice nombres muy genéricos para funciones, variables, clases, archivos de origen, etc., ya que muchos de ellos se abren camino en el ejecutable.

Su compilador puede ser identificado con una buena tasa de éxito por un examinador suficientemente motivado, ya que los diferentes compiladores compilan y optimizan el código común de diferentes maneras. Así que asegúrate de usar un compilador muy común. Lo mismo se aplica a cualquier biblioteca con la que esté vinculado su programa.

Luego, haz algunas pruebas básicas. Compile el mismo programa en varias máquinas con la misma versión del compilador y asegúrese de que los resultados sean idénticos bit por bit. La prueba será más concluyente si las máquinas son tan diferentes como sea posible, aparte del compilador y las bibliotecas (versión diferente del sistema operativo, nombre de usuario diferente, configuración de idioma diferente, ...).

En sistemas Unix (como Linux o Cygwin en Windows), ejecute el comando strings en sus archivos binarios para encontrar subcadenas imprimibles. Esto es solo un control de seguridad básico, no encontrará toda la información potencialmente incriminatoria por ningún conteo. Por ejemplo, no encontrará cadenas codificadas en conjuntos de caracteres multibyte como UTF-16 (utilizado por Windows y Java).

Si es posible, intente separar su programa entre un programa de apariencia inocente que no levante ninguna bandera y un pequeño archivo de texto que contenga los datos confidenciales. Distribuye los dos a través de diferentes canales. Aún mejor, haga que su programa sea un pequeño archivo de texto; Idealmente, use un lenguaje interpretado popular y solo distribuya la fuente del programa. Sin embargo, no distribuya su propia fuente de trabajo: distribuya una fuente desinfectada sin comentarios, nombres de variables confidenciales, etc.

Cuando distribuyes tu programa, puedes decidir usar un formato de archivo como zip o tar. Tenga en cuenta que estos archivos almacenan la fecha del archivo, y algunos formatos de archivo (por ejemplo, tar) pueden almacenar un nombre de usuario.

Si bien no existe el anonimato completo, creo que es posible lograr el anonimato lo suficientemente bueno para un esfuerzo de programación de un solo hombre. Tu mayor preocupación será la distribución. Es mucho más difícil permanecer en el anonimato cuando mueves bytes, y menos aún una vez que comienzas a interactuar con la gente. Usar Tor ayuda, pero es no es una bala mágica , especialmente contra interceptores con recursos gubernamentales.

(¡En particular, esta pregunta puede ser detectada por usted! Particularmente si vive en un país con un filtro gubernamental en todos los accesos a Internet, lo que puede correlacionar su actividad de Internet con la información pública sobre sus interacciones con Stack Exchange). / p>     

respondido por el Gilles 24.11.2011 - 00:08
fuente
2

No conozco ninguna forma para que alguien rastree en qué computadora escribiste el programa o en qué programa lo compilaste.

Pero, si desea estar más seguro, una posibilidad podría ser comprar acceso a los recursos informáticos en otro sistema (por ejemplo, en Amazon EC2 o en un servicio de alojamiento privado virtual) y compilar su programa allí. También "eliminaría" el binario, para eliminar todos los símbolos de depuración, por si acaso. Si puedes obtener acceso de una manera que no se pueda rastrear hasta ti, entonces incluso si hay alguna forma loca de identificar la computadora en la que se compiló, no se podrá vincular directamente a tu identidad. Quizás la gente aquí puede sugerir una forma de obtener acceso remoto a la shell (o ejecutar una máquina virtual) en alguna máquina, sin revelar su identidad.

    
respondido por el D.W. 24.11.2011 - 08:53
fuente

Lea otras preguntas en las etiquetas