¿cómo puede un atacante usar un archivo temporal falso para comprometer un programa?

8

Estoy tomando una clase de seguridad. Las notas de clase dicen que un atacante puede observar un patrón en los nombres de archivos temporales y luego hacer su propio archivo temporal para comprometer un programa. Dicen que si un archivo temporal se crea utilizando un ID de proceso, un atacante podría crear un enlace simbólico a un archivo de contraseña con un ID de proceso tripwire para que tripwire use el archivo de contraseña como un archivo temporal.

¿Cómo podría el atacante usar archivos temporales para comprometer un archivo de contraseña? ¿O para explotar de otro modo un sistema?

    
pregunta bernie2436 15.04.2013 - 23:38
fuente

3 respuestas

5

Lo primero a considerar es cuál es el propósito del archivo temporal.

Si la temperatura está generando información útil, un atacante podría usar esto para recopilar información sobre la funcionalidad de los programas, configuraciones, mensajes de error, etc. (según la salida). El atacante puede tener un programa malicioso que ocasionalmente analice dichos archivos en busca de ciertos patrones para luego usarlos en la lógica de ataque.

Al mismo tiempo, si se va a leer el archivo temporal, puede cambiar la lógica de entrada del programa legítimo que no está bien cerrado. Por ejemplo, si el archivo temporal se va a leer con el fin de eval() o ejecutar una ejecución system() , puede hacer que el programa haga algo que sus privilegios permitirán que el sistema haga, eso no se espera.

En lugar de modificar el archivo temporal que se leerá, puede ser posible crear un enlace simbólico a otro archivo al que usted como usuario no pueda acceder pero que la aplicación tenga privilegios para leer. Si el programa imprime el archivo temporal, puede exponerlo de esa manera. Parece que el ataque se describe en una escalada de privilegios, no un cambio directo en el archivo de contraseña.

Proyecto de código: Consejos de seguridad para el uso temporal de archivos en aplicaciones

  

Si el atacante sabe dónde crea la aplicación su temporal   archivos y puede adivinar el nombre del siguiente archivo temporal, los siguientes   Se puede realizar un ataque:

     
  • El atacante colocará un enlace simbólico en la ubicación del archivo temporal.
  •   
  • El atacante vinculará el enlace simbólico a un archivo privilegiado.
  •   
  • Ahora, la aplicación, sin saberlo, escribirá en el archivo con privilegios en lugar de escribir en el archivo en el directorio temporal.
  •   

También hay un CWE ( CWE-377: Archivo temporal inseguro ) para esto, vale la pena lea así como algunas de las instancias relacionadas:

  

Si un atacante crea previamente el archivo con permisos de acceso relajado,   entonces los datos almacenados en el archivo temporal por la aplicación pueden ser   Accedido, modificado o corrompido por un atacante. En sistemas basados en Unix   un ataque aún más insidioso es posible si el atacante crea previamente   El archivo como enlace a otro archivo importante. Entonces, si la aplicación   trunca o escribe datos en el archivo, puede realizar involuntariamente   Operaciones dañinas para el atacante. Esto es especialmente grave.   amenaza si el programa opera con permisos elevados.

    
respondido por el Eric G 16.04.2013 - 00:46
fuente
3

La posibilidad de este ataque no es algo inevitable en el uso de archivos temporales. Se deriva de una implementación insegura de archivos temporales.

Por ejemplo, en un sistema Unix, se puede abrir un agujero si el directorio del archivo temporal tiene permisos incorrectos. El directorio /tmp es compartido por los usuarios, por lo que todos tienen permiso de escritura en el propio directorio (para poder crear archivos). Pero se aplica un permiso especial de "bit pegajoso" que evita que los usuarios puedan eliminar archivos que no son de su propiedad. Si falta ese bit de permiso, es posible que un proceso malintencionado cree un ataque de condición de carrera: advierte que se acaba de crear un archivo temporal y, antes de que el proceso de propiedad pueda usarlo, lo elimina y lo reemplaza con su propia (Las aplicaciones podrían verificar la propiedad y los permisos del archivo temporal que acaban de abrir, pero probablemente no molesten, si es que los hay, porque los programas confían en que el directorio temporal está configurado correctamente).

Si se crea un archivo temporal con permisos incorrectos, se puede acceder y manipularlo. Los programas que utilizan archivos temporales deben crearlos con los permisos apropiados. Esto significa que ciertas funciones de manipulación de archivos altamente independientes de la plataforma no se pueden usar. Por ejemplo, si usamos la función C fopen para crear un archivo temporal, tenemos un agujero de seguridad, porque fopen no tiene ningún parámetro para controlar qué permisos tendrá el archivo. En un sistema similar a Unix, creará un archivo con permisos liberales (menos solo los permisos eliminados por umask ). Las funciones de biblioteca específicas de la plataforma se deben usar para crear y abrir archivos temporales.

Un programa, cuando crea un archivo temporal, siempre verifica si ese archivo no existe ya. Sin embargo, esta comprobación debe ser atómica, de lo contrario, existe una condición de carrera entre la comprobación de que el archivo no existe y la apertura / creación del archivo. Esa condición de carrera no se arregla con los permisos correctos en el directorio temporal. Se arregla utilizando una operación atómica para crear el archivo. En Unix, el indicador O_EXCL se usa además de O_CREAT para pedirle al sistema operativo que falle en la llamada open si el archivo ya existe, de lo contrario, para crearlo. Un posible pitall aquí es alojar el directorio de archivos temporales en algún sistema de archivos de red que no respeta la semántica atómica de O_EXCL .

Por supuesto, los archivos temporales no están protegidos contra ataques desde el mismo contexto de seguridad. (Al menos, no sin la implementación de políticas de seguridad detalladas en el sistema operativo). Si un programa malintencionado se ejecuta como usuario joe aleady, ese programa puede atacar archivos temporales creados por programas que se ejecutan como usuario joe . Para evitar ese tipo de cosas, necesita un esquema de seguridad que sea más detallado que los simples dominios de seguridad basados en cuentas. Por ejemplo, un sistema de seguridad con reglas como: "solo el ejecutable /bin/foo puede acceder a cualquier objeto del sistema de archivos cuya ruta coincida con el patrón /tmp/foo* ".

    
respondido por el Kaz 16.04.2013 - 03:05
fuente
0

Muchos programas confían implícitamente en que lo que escriben en sus archivos temporales es lo que seguirá estando allí unos pocos milisegundos o segundos o minutos después. Si puede predecir qué nombre tendrá un archivo temporal, tendrá una mejor oportunidad de capturar el archivo entre su creación y su contenido y volver a leerlo, y puede escribir datos maliciosos en el archivo.

    
respondido por el Sparr 15.04.2013 - 23:50
fuente

Lea otras preguntas en las etiquetas