CONDICIONES DE
CARRERA
RACE CONDITION
Lic. Maribel Jiménez G.
Contenido
1. Introducción
2. Descripción del problema
3. Formas en que es susceptible de ser explotado.
4. Medidas preventivas, detección, correctivas.
Introducción
Una condición de carrera se produce cuando dos subprocesos
tienen acceso a una variable compartida al mismo tiempo.
Una condición de carrera es cuando dos diferentes contextos de
ejecución (hilos, procesos o tareas), pueden cambiar un recurso o
interferir con otro.
El primer subproceso lee la variable, y el segundo subproceso lee el
mismo valor de la variable. El primer y segundo subproceso realizan
sus operaciones en el valor y se ejecutan para ver qué subproceso
puede escribir el ultimo valor en la variable compartida.
4
Usuario A
Usuario B
Deposito
$100
Retiro
$200
Cuent
a
Saldo
Final
$1100
Saldo
Inicial
$1000
Vista Inicial
1. Inicia pero se
interrumpe
2. Inicia y
concluye la
operación
3. Usuario
A concluye
operación
Saldo no registrado
$800
Descripción
5
Descripción
Se asigna a cada subproceso un período predefinido de tiempo de
ejecución en un procesador.
Cuando caduca el tiempo asignado para el subproceso, se guarda el
contexto del subproceso hasta su próximo turno en el procesador y
el procesador comienza la ejecución del subproceso siguiente.
Es posible que el subproceso 1 complete su ejecución antes de que
su tiempo caduque en el procesador, a continuación, el subproceso
2 puede comenzar su ejecución, en esta caso no se produce la
condición de carrera.
Error aleatorio
En la ejecución del subproceso no se puede controlar el tiempo o el
orden de ejecución.
Los subprocesos se ejecutan de forma aleatoria haciendo que estos
errores sean mucho más difíciles de encontrar, depurar y
6
Descripción
Propiedades necesarias para que pueda existir una condición de
carrera:
1. Concurrencia de propiedades.
Debe haber por lo menos dos flujos de control de ejecución al
mismo tiempo.
2. Objeto compartido.
Un objeto con la propiedad de ser compartido debe ser visitado
por flujos concurrentes.
3. Cambie la propiedad del Estado.
Al menos uno de los flujos de control deben alterar el estado del
objeto. Más de un subproceso o proceso debe escribir al mismo
recurso.
7
Afectación
Cuando se presenta una condición de carrera, existe un intervalo de
tiempo durante el que un atacante puede obtener privilegios, leer y
escribir archivos protegidos, y vulnerar las políticas de seguridad del
sistema.
8
Afectación
9
Afectación
10
Afectación
11
Afectación
12
Identificación
Se pueden realizar diferentes pruebas. El tiempo de ejecución es la métrica
más usada para la generación de informes.
Estrategias de pruebas
Las pruebas de una aplicación simultánea incluyen pruebas de:
 Corrección,
 Confiabilidad,
 Rendimiento
La corrección de la aplicación se comprueba mediante técnicas como:
 El análisis estático, analizan el código sin ejecutar el programa. se lleva a
cabo mediante la observación de los metadatos desde una aplicación
compilada o un código fuente anotado.
13
Identificación
El rendimiento y la confiabilidad se prueban mediante el estudio de las
sobrecargas introducidas mediante el paralelismo y las pruebas de esfuerzo.
La escalabilidad se prueba mediante el análisis del rendimiento de la
aplicación en sistemas de diferentes tamaños.
Prefix y Prefast son dos de las herramientas de análisis estático más conocidas
para las aplicaciones nativas, mientras que FxCop es muy popular para trabajar
con código administrado.
 El análisis dinámico. Los errores se detectan al observar las superficies de
ejecución. Hay dos tipos de análisis dinámicos: con conexión y sin conexión.
Las herramientas que usan el análisis dinámico analizan un programa
mientras se ejecuta.
Algunas herramientas sólo pueden detectar una condición carrera si se produce
en la ejecución.
14
Identificación
 La comprobación de modelos. El método para comprobar la corrección de
un sistema simultáneo de estado finito. Intenta simular las condiciones de
carrera y de bloqueo.
Este método ofrece una confianza superior en el diseño y en la arquitectura.
La comprobación de modelos puede demostrar que el diseño no tiene errores,
pero la implementación puede ser incorrecta.
Sólo resulta útil para secciones pequeñas y esenciales de un producto.
15
Identificación
Herramientas de pruebas de simultaneidad
o CHESS Creada por Microsoft Research, es una nueva combinación de la
Comprobación de modelos y del Análisis dinámico.
o El Comprobador de subprocesos de Intel Se trata de una herramienta de
análisis dinámico para encontrar bloqueos, carreras de datos y usos
incorrectos de las API de sincronización nativas de Windows
o RacerX. Herramienta de análisis estático que distingue el flujo, se usa para
detectar carreras y bloqueos.
o Chord. Herramienta de análisis estático para Java que no distingue el flujo
pero sí el contexto. Al no distinguir el flujo puede ser más escalable que
otras herramientas estáticas, pero el precio es una pérdida de precisión.
16
Identificación
o KISS. Desarrollada por Microsoft Research, es una herramienta de
Comprobación de modelos diseñada para los programas C simultáneos.
o Zing Esta herramienta es un comprobador de modelos puro pensado
para la comprobación de diseños de programas simultáneos
17
Pruebas de rendimiento
Las pruebas de rendimiento son una parte integral y esencial del proceso
de prueba de simultaneidad.
En el caso de los escenarios de pruebas paralelas, se pueden usar las
siguientes variables como criterios de aceptación.
 Variación en los resultados de la prueba. Indica que se trata de una
aplicación inestable.
 Uso de CPU. Un uso bajo de la CPU podría ser señal de errores de
simultaneidad, como bloqueos y sobrecargas de sincronización.
 Uso total de memoria.
 El tiempo de ejecución total del subproceso.
Identificación
18
Las soluciones para evitar la condición de carrera implican el uso de semáforos
y objetos de exclusión mutua (mutex) para proteger la sección crítica.
Métodos de sincronización para controlar las interacciones de subprocesos:
 Operaciones de bloqueo. Por ejemplo bloquear las variables compartidas,
por lo que sólo un subproceso tenga acceso a la variable compartida.
 Señalización. La manera más sencilla de esperar una señal de otro
subproceso es llamar un función, que lo pueda bloquear hasta que se
complete el otro subproceso.
 Interbloqueo. Dos subprocesos intentan bloquear un recurso que ya ha
bloqueado uno de estos subprocesos. Ninguno de los subprocesos puede
avanzar.
Hacer el código relevante (sección crítica) atómico con respecto a los
datos necesario, (atómico, el código se ejecuta como si fuera una sola
operación, sin interrupción), considerando que el código que ha de ser
atómico sea lo más pequeño posible.
Medidas preventivas
19
Ejemplos de Riesgos de condición de carrera que se deben evitar en .NET:
 Condiciones de carrera en Método Dispose (libera todos los recursos que
posee, liberando memoria). Si el método Dispose no está sincronizado, es
posible que el código de limpieza de Dispose se ejecute más de una vez.
 Condiciones de carrera en constructores. En algunas aplicaciones, es
posible que otros subprocesos tengan acceso a miembros de clase antes de
que finalice la ejecución de sus constructores por lo que es necesario
sincronizar los subprocesos.
 Condiciones de carrera con objetos en caché. El código que almacena en
caché la información relacionada con la seguridad puede ser vulnerable a
condiciones de carrera si otras partes de la clase no están sincronizadas
correctamente.
 Condiciones de carrera en finalizadores. Si hay varios objetos que
comparten un recurso que se manipula en un finalizador de la clase, se deben
sincronizar los accesos a ese recurso en todos los objetos.
Medidas preventivas
20
Referencias
Microsoft. (27 de Noviembre de 2013). Support. Obtenido de Description of race conditions and
deadlocks: http://support.microsoft.com/kb/317723
Microsoft (15 de enero de 2014) Seguridad y condiciones de carrera,
http://msdn.microsoft.com/es-es/library/1az4z7cb(v=vs.110).aspx?cs-save-lang=1&cs-
lang=vb#code-snippet-1
Microsoft (15 de enero de 2014) Información general sobre los primitivos de sincronización
http://msdn.microsoft.com/es-es/library/ms228964(v=vs.110).aspx
NIST, Vulnerabilidades y Exposiciones Comunes, (15 de enero de 2014)
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-1284
CWE-362: Ejecución simultánea utilizando recursos compartidos con sincronización inadecuada
("condición de carrera"), (15 de enero de 2014)
http://cwe.mitre.org/data/definitions/362.html&usg=ALkJrhjfMpwH2n1lQJ2CBX_p-xDIrGying
Intenco, (15 de enero de 2014)
http://cert.inteco.es/vulnDetail/Actualidad/Actualidad_Vulnerabilidades/detalle_vulnerabilidad/
MSDN Magazine, Herramientas y técnicas para identificar los problemas de simultaneidad (15 de
enero de 2014), http://msdn.microsoft.com/es-es/magazine/cc546569.aspx

Presentación rc 1

  • 1.
  • 2.
    Contenido 1. Introducción 2. Descripcióndel problema 3. Formas en que es susceptible de ser explotado. 4. Medidas preventivas, detección, correctivas.
  • 3.
    Introducción Una condición decarrera se produce cuando dos subprocesos tienen acceso a una variable compartida al mismo tiempo. Una condición de carrera es cuando dos diferentes contextos de ejecución (hilos, procesos o tareas), pueden cambiar un recurso o interferir con otro. El primer subproceso lee la variable, y el segundo subproceso lee el mismo valor de la variable. El primer y segundo subproceso realizan sus operaciones en el valor y se ejecutan para ver qué subproceso puede escribir el ultimo valor en la variable compartida.
  • 4.
    4 Usuario A Usuario B Deposito $100 Retiro $200 Cuent a Saldo Final $1100 Saldo Inicial $1000 VistaInicial 1. Inicia pero se interrumpe 2. Inicia y concluye la operación 3. Usuario A concluye operación Saldo no registrado $800 Descripción
  • 5.
    5 Descripción Se asigna acada subproceso un período predefinido de tiempo de ejecución en un procesador. Cuando caduca el tiempo asignado para el subproceso, se guarda el contexto del subproceso hasta su próximo turno en el procesador y el procesador comienza la ejecución del subproceso siguiente. Es posible que el subproceso 1 complete su ejecución antes de que su tiempo caduque en el procesador, a continuación, el subproceso 2 puede comenzar su ejecución, en esta caso no se produce la condición de carrera. Error aleatorio En la ejecución del subproceso no se puede controlar el tiempo o el orden de ejecución. Los subprocesos se ejecutan de forma aleatoria haciendo que estos errores sean mucho más difíciles de encontrar, depurar y
  • 6.
    6 Descripción Propiedades necesarias paraque pueda existir una condición de carrera: 1. Concurrencia de propiedades. Debe haber por lo menos dos flujos de control de ejecución al mismo tiempo. 2. Objeto compartido. Un objeto con la propiedad de ser compartido debe ser visitado por flujos concurrentes. 3. Cambie la propiedad del Estado. Al menos uno de los flujos de control deben alterar el estado del objeto. Más de un subproceso o proceso debe escribir al mismo recurso.
  • 7.
    7 Afectación Cuando se presentauna condición de carrera, existe un intervalo de tiempo durante el que un atacante puede obtener privilegios, leer y escribir archivos protegidos, y vulnerar las políticas de seguridad del sistema.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
    12 Identificación Se pueden realizardiferentes pruebas. El tiempo de ejecución es la métrica más usada para la generación de informes. Estrategias de pruebas Las pruebas de una aplicación simultánea incluyen pruebas de:  Corrección,  Confiabilidad,  Rendimiento La corrección de la aplicación se comprueba mediante técnicas como:  El análisis estático, analizan el código sin ejecutar el programa. se lleva a cabo mediante la observación de los metadatos desde una aplicación compilada o un código fuente anotado.
  • 13.
    13 Identificación El rendimiento yla confiabilidad se prueban mediante el estudio de las sobrecargas introducidas mediante el paralelismo y las pruebas de esfuerzo. La escalabilidad se prueba mediante el análisis del rendimiento de la aplicación en sistemas de diferentes tamaños. Prefix y Prefast son dos de las herramientas de análisis estático más conocidas para las aplicaciones nativas, mientras que FxCop es muy popular para trabajar con código administrado.  El análisis dinámico. Los errores se detectan al observar las superficies de ejecución. Hay dos tipos de análisis dinámicos: con conexión y sin conexión. Las herramientas que usan el análisis dinámico analizan un programa mientras se ejecuta. Algunas herramientas sólo pueden detectar una condición carrera si se produce en la ejecución.
  • 14.
    14 Identificación  La comprobaciónde modelos. El método para comprobar la corrección de un sistema simultáneo de estado finito. Intenta simular las condiciones de carrera y de bloqueo. Este método ofrece una confianza superior en el diseño y en la arquitectura. La comprobación de modelos puede demostrar que el diseño no tiene errores, pero la implementación puede ser incorrecta. Sólo resulta útil para secciones pequeñas y esenciales de un producto.
  • 15.
    15 Identificación Herramientas de pruebasde simultaneidad o CHESS Creada por Microsoft Research, es una nueva combinación de la Comprobación de modelos y del Análisis dinámico. o El Comprobador de subprocesos de Intel Se trata de una herramienta de análisis dinámico para encontrar bloqueos, carreras de datos y usos incorrectos de las API de sincronización nativas de Windows o RacerX. Herramienta de análisis estático que distingue el flujo, se usa para detectar carreras y bloqueos. o Chord. Herramienta de análisis estático para Java que no distingue el flujo pero sí el contexto. Al no distinguir el flujo puede ser más escalable que otras herramientas estáticas, pero el precio es una pérdida de precisión.
  • 16.
    16 Identificación o KISS. Desarrolladapor Microsoft Research, es una herramienta de Comprobación de modelos diseñada para los programas C simultáneos. o Zing Esta herramienta es un comprobador de modelos puro pensado para la comprobación de diseños de programas simultáneos
  • 17.
    17 Pruebas de rendimiento Laspruebas de rendimiento son una parte integral y esencial del proceso de prueba de simultaneidad. En el caso de los escenarios de pruebas paralelas, se pueden usar las siguientes variables como criterios de aceptación.  Variación en los resultados de la prueba. Indica que se trata de una aplicación inestable.  Uso de CPU. Un uso bajo de la CPU podría ser señal de errores de simultaneidad, como bloqueos y sobrecargas de sincronización.  Uso total de memoria.  El tiempo de ejecución total del subproceso. Identificación
  • 18.
    18 Las soluciones paraevitar la condición de carrera implican el uso de semáforos y objetos de exclusión mutua (mutex) para proteger la sección crítica. Métodos de sincronización para controlar las interacciones de subprocesos:  Operaciones de bloqueo. Por ejemplo bloquear las variables compartidas, por lo que sólo un subproceso tenga acceso a la variable compartida.  Señalización. La manera más sencilla de esperar una señal de otro subproceso es llamar un función, que lo pueda bloquear hasta que se complete el otro subproceso.  Interbloqueo. Dos subprocesos intentan bloquear un recurso que ya ha bloqueado uno de estos subprocesos. Ninguno de los subprocesos puede avanzar. Hacer el código relevante (sección crítica) atómico con respecto a los datos necesario, (atómico, el código se ejecuta como si fuera una sola operación, sin interrupción), considerando que el código que ha de ser atómico sea lo más pequeño posible. Medidas preventivas
  • 19.
    19 Ejemplos de Riesgosde condición de carrera que se deben evitar en .NET:  Condiciones de carrera en Método Dispose (libera todos los recursos que posee, liberando memoria). Si el método Dispose no está sincronizado, es posible que el código de limpieza de Dispose se ejecute más de una vez.  Condiciones de carrera en constructores. En algunas aplicaciones, es posible que otros subprocesos tengan acceso a miembros de clase antes de que finalice la ejecución de sus constructores por lo que es necesario sincronizar los subprocesos.  Condiciones de carrera con objetos en caché. El código que almacena en caché la información relacionada con la seguridad puede ser vulnerable a condiciones de carrera si otras partes de la clase no están sincronizadas correctamente.  Condiciones de carrera en finalizadores. Si hay varios objetos que comparten un recurso que se manipula en un finalizador de la clase, se deben sincronizar los accesos a ese recurso en todos los objetos. Medidas preventivas
  • 20.
    20 Referencias Microsoft. (27 deNoviembre de 2013). Support. Obtenido de Description of race conditions and deadlocks: http://support.microsoft.com/kb/317723 Microsoft (15 de enero de 2014) Seguridad y condiciones de carrera, http://msdn.microsoft.com/es-es/library/1az4z7cb(v=vs.110).aspx?cs-save-lang=1&cs- lang=vb#code-snippet-1 Microsoft (15 de enero de 2014) Información general sobre los primitivos de sincronización http://msdn.microsoft.com/es-es/library/ms228964(v=vs.110).aspx NIST, Vulnerabilidades y Exposiciones Comunes, (15 de enero de 2014) http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-1284 CWE-362: Ejecución simultánea utilizando recursos compartidos con sincronización inadecuada ("condición de carrera"), (15 de enero de 2014) http://cwe.mitre.org/data/definitions/362.html&usg=ALkJrhjfMpwH2n1lQJ2CBX_p-xDIrGying Intenco, (15 de enero de 2014) http://cert.inteco.es/vulnDetail/Actualidad/Actualidad_Vulnerabilidades/detalle_vulnerabilidad/ MSDN Magazine, Herramientas y técnicas para identificar los problemas de simultaneidad (15 de enero de 2014), http://msdn.microsoft.com/es-es/magazine/cc546569.aspx