Pregunta:
Mitigar el ataque de suplantación de tiempo
jtpereyda
2017-05-12 03:22:57 UTC
view on stackexchange narkive permalink

Digamos que Alice recibe la hora sincronizada de Tina, la cronometradora. Digamos que Ted falsifica una señal de GPS, engañando a Tina sobre la hora actual. Tina le envía esta hora falsa a Alice.

¿Qué puede hacer Alice para evitar que la engañen demasiado? ¿Hay implementaciones que hayan implementado tales mitigaciones?

Un enfoque podría ser rechazar los tiempos sugeridos que varían demasiado en comparación con el reloj interno de Alice.

Editar :

  1. Estoy buscando mitigaciones asumiendo que el tiempo externo está comprometido. No hay fuentes de tiempo externas confiables adicionales.
  2. El objetivo de mitigación es minimizar o eliminar el engaño de Alice.
  3. El atacante puede intentar cambiar la hora de una sola vez o durante un período de tiempo más largo.
¿Qué pasa con lo obvio: puede Alice usar varios servidores de tiempo?
¿De qué rango de tiempos hablas?¿Años?¿Segundos?
@Marcel Se agregaron aclaraciones.No hay servidores de tiempo múltiples (suponga que Tina también puede corromper otras fuentes externas).No tengo un rango de tiempo específico en mente (podría ser cualquiera), pero me imagino que el objetivo de Alice sería minimizar el daño a su comprensión del tiempo en la mayor medida posible.
@alecxe ¿Hay algo en particular que no mencioné o de lo que no hablé lo suficientemente completo que llevaría a que esta pregunta aún necesite una recompensa abierta?
@forest nono, la respuesta es simplemente "oro puro", realmente lo disfruté y decidí regalar puntos adicionales.¡Muchas gracias!
One responder:
forest
2017-12-24 09:58:20 UTC
view on stackexchange narkive permalink

No existe una forma única de mitigar los ataques de suplantación de tiempo. Sin embargo, obtener información de la hora de varias fuentes y asegurarse de que ninguna de las fuentes esté en desacuerdo demasiado entre sí es un comienzo.

NTP

El Protocolo de tiempo de red, con la versión común 3 especificada en RFC 1305, es el método más utilizado y conocido para obtener tiempo. Es un protocolo no autenticado y no cifrado que utiliza UDP, lo que hace que la falsificación y la manipulación sean bastante fáciles. Normalmente, un usuario sondeará la hora de un grupo de servidores de estrato 3. El estrato se refiere a la cantidad de servidores por los que pasa el tiempo después de dejar la fuente, generalmente una máquina que mide las transiciones de estado de un átomo. Un solo segundo se define con precisión como 9.192.631.770 transiciones del hiperfino estado fundamental de un único átomo de cesio-133 cercano al cero absoluto, y la radiación Las emisiones que corresponden a estos cambios de estado son las que le dan al reloj de referencia su precisión. Hay cuatro estratos de uso común:

  • Los usuarios finales utilizan servidores de estrato 3 (grupo) y tienen una precisión de una fracción de segundo.
  • Estrato 2 ( Los servidores secundarios) son utilizados solo por aplicaciones que requieren mayor precisión.
  • Los servidores de estrato 1 (primarios) se conectan directamente a la fuente y tienen una precisión de microsegundos.
  • Los servidores de estrato 0 (referencia) son los propios relojes atómicos y son perfectamente precisos.

Cada estrato se conecta a los estratos inferiores, para evitar sobrecargar los servicios más cerca de la fuente. El estrato 0 no es un servidor en red normal y está conectado directamente al estrato 1 (por ejemplo, a través de RS-232). Solo los servicios seleccionados que requieren una precisión extrema (para experimentos científicos, por ejemplo) pueden conectarse al estrato 1. Los servidores del estrato 2 pueden tener políticas específicas sobre quién puede conectarse, mientras que a veces pueden simplemente pedirle cortésmente que no los use si no es necesario . Los servidores de Stratum 3 pueden ser utilizados por cualquier persona. Puede haber hasta 15 estratos, y el 16 significa no sincronizado, pero en la práctica, el estrato 3 es el último. Cada estrato que no sea el estrato 0 es capaz de sincronizarse con los otros estratos del mismo nivel para mejorar la precisión y reducir el problema de la desviación del reloj.

ntp strata

Eso es mucho de servidores en los que confiar. Si bien un servidor que no esté de acuerdo con los demás será expulsado, eso solo sucede si ocurre con la suficiente frecuencia. Un ataque dirigido contra un solo usuario o un grupo de usuarios puede pasar desapercibido fácilmente. Su cliente NTP puede promediar el resultado del tiempo otorgado por todos los miembros del grupo que está utilizando, o puede ignorar los que parecen locos. Para este caso, un solo servidor NTP malicioso no es un gran problema. Sin embargo, como NTP no está autenticado ni cifrado, no es difícil que una sola entidad le dé un valor falso de todos los servidores que está utilizando.

No hay forma de evitar este problema por completo . El uso de múltiples servidores NTP ayuda contra ataques ingenuos y configuraciones incorrectas accidentales. Enrutar NTP a través de un VPS o VPN también puede elevar el listón ligeramente, especialmente si sospecha que su adversario no está dispuesto a secuestrar NTP para todos y no puede averiguar qué servidor se está conectando a NTP en su favor. Existe un tipo de NTP autenticado definido en RFC 5906 para NTPv4, pero muy pocos servidores NTP lo admiten y no es fácil de configurar. .

GPS

La forma en que funciona el GPS es transmitiendo una señal periódica perfectamente sincronizada (cada satélite GPS tiene tres fuentes de estrato 1). Cuando una señal se recibe antes o después de otra, sabrá que está más cerca o más lejos de ese satélite que del otro (porque la velocidad de la luz es finita). Teniendo en cuenta estas diferencias de tiempo relativas de múltiples fuentes, es posible saber su posición en relación con los satélites en órbita y, por lo tanto, en relación con la Tierra.

satellites animation

Un reloj GPS funciona combinando la hora dada por múltiples satélites orbitales. Esta señal horaria se puede utilizar para sincronizar un reloj, pero a menos que sepa su ubicación precisa, puede tomar algún tiempo promediar las señales para obtener la hora exacta. Un reloj de alta gama basado en GPS dedicado puede, cuando se calibra correctamente, tener una precisión de un microsegundo.

La suplantación de GPS no es particularmente difícil, pero es fácil de detectar. La señal de GPS, como NTP, no está autenticada ni codificada. Tres no es una forma sencilla de evitar esto.

RCC

Un reloj controlado por radio, o RCC, transmite un código de tiempo desde un transmisor de radio que está conectado directamente a una fuente de reloj de alta precisión, como un servidor de estrato 1. Las frecuencias utilizadas pueden ser de onda larga o de onda corta y varían entre 25 KHz y 25 MHz. Los dispositivos que se comercializan con "relojes atómicos" generalmente usan RCC, ya que es simple y requiere poca energía para recibirlos. Son muy precisos y proporcionan precisión en varios microsegundos.

Al igual que el GPS, son muy vulnerables a la suplantación de identidad.

TLS

TLS es Capa de transporte Seguridad, utilizada para cifrar y autenticar comunicaciones a través de TCP.

tls handshake

Esta es una forma interesante de mantener el tiempo. La especificación TLS 1.2 proporciona un campo en las solicitudes ClientHello que contiene la hora actual, en segundos desde la época. Esto no siempre es confiable, ya que muchos servidores tienen valores inexactos o puramente aleatorios para la marca de tiempo. TLS 1.3 planea eliminar por completo esta marca de tiempo, por lo que esta no es una solución a largo plazo. De la sección 7.4.1.2 del RFC:

  Estructura de este mensaje: El mensaje ClientHello incluye una estructura aleatoria, que se usa más adelante en el protocolo. struct {uint32 gmt_unix_time; bytes_aleatorios opacos [28]; } Random; gmt_unix_time La hora y fecha actuales en formato estándar UNIX de 32 bits (segundos desde la medianoche que comienza el 1 de enero de 1970, UTC, ignorando los segundos intercalares) de acuerdo con el reloj interno del remitente. No es necesario que los relojes estén configurados correctamente mediante el protocolo TLS básico; Los protocolos de aplicación o de nivel superior pueden definir requisitos adicionales. Tenga en cuenta que, por razones históricas, el elemento de datos se nombra usando GMT, el predecesor de la base de tiempo mundial actual, UTC.random_bytes 28 bytes generados por un generador de números aleatorios seguro.  

Debido a que los primeros cuatro bytes del campo "aleatorio" enviado por el servidor contienen la hora actual, se puede (ab) utilizar un protocolo de enlace TLS para obtener la hora de una fuente autenticada. Esto es lo que hace el programa tlsdate. Para obtener la hora exacta, uno puede conectarse a varios servidores TLS y promediar el tiempo. Esto es utilizado por Tails. Tails ha codificado tres "grupos" de servidores TLS:

  • Pal, que contiene sitios web que promueven la privacidad como EFF.
  • Neutral, que contiene sitios web que no son ni extra agradables ni maliciosos, como Stack Exchange.
  • Foe, que contiene sitios web que tienden a ser vistos como invasores de la privacidad, como Microsoft.

Tails consulta un servidor de cada grupo y promedia los resultados, rescatando si alguno de ellos está en desacuerdo demasiado. La idea es que los grupos tengan afiliaciones lo suficientemente diferentes como para que sea poco probable que colaboren para proporcionar valores de tiempo maliciosamente incorrectos en sus marcas de tiempo TLS. Se desconoce el razonamiento específico para esta configuración (y parece un poco como seguridad casera), pero la idea misma de extraer tiempo del protocolo de enlace TLS es bastante sólida.

RTC

La Reloj en tiempo real, RTC, es un componente de cualquier computadora como parte del chip CMOS. Por lo general, utiliza un oscilador de cuarzo a 32,768 kHz para cronometraje y normalmente funciona con una batería de botón. A diferencia de un reloj atómico de cesio cuya frecuencia está determinada por constantes fundamentales en la naturaleza, el oscilador de cuarzo se sintoniza intencionalmente a esa frecuencia, lo que da como resultado pequeñas imperfecciones. De hecho, no sabía la razón por la que estaba sintonizado a esta frecuencia específica (parecía demasiado perfecto, siendo exactamente el valor máximo de un entero de 16 bits con signo), pero después de buscarlo al escribir esta respuesta, resultó este valor se eligió porque siempre era divisible por dos, lo que lo hacía perfecto para convertirlo en la señal de 1 Hz necesaria para controlar un reloj digital. La frecuencia simplemente se atascó.

En realidad, esto es lo más importante que puede ofrecerle. Su RTC no es perfectamente preciso, pero un atacante no puede controlarlo directamente (aunque existen formas indirectas de influir en él, como campos electromagnéticos intensos o calor ambiental). Siempre que esté configurado correctamente al menos una vez, siempre puede estar seguro de detectar ataques de desviación de reloj significativos, ya que su RTC nunca se desviará demasiado.

Poniéndolo todo junto

Estos Hay muchas fuentes, cada una con sus propias ventajas e inconvenientes. Resulta que hay una manera fácil de combinarlos todos. El proyecto OpenNTPD, diseñado por la misma gente detrás de OpenBSD, es capaz de combinar todas estas fuentes de tiempo a la vez. Es principalmente un servidor NTP, que obtiene la hora del grupo NTP que se le ha asignado y la usa para establecer la hora del sistema.

OpenNTPD también admite restricciones TLS autenticadas , donde la marca de tiempo obtenida de un protocolo de enlace TLS se utiliza para garantizar que las respuestas NTP no sean demasiado inexactas. No está diseñado para utilizarse como fuente de tiempo principal. Esto es similar a tlsdate, pero no se ve afectado por la posible inexactitud de las marcas de tiempo en los apretones de manos TLS. También se pueden utilizar fuentes de tiempo de hardware, como GPS o RCC. Esto, por supuesto, requiere el hardware real, pero puede proporcionar una precisión mucho mayor.

A diferencia de muchas otras implementaciones de NTP, OpenNTPD no establece la hora inmediatamente cuando cambia. Por el contrario, si la hora avanza o retrocede, cambiará gradualmente la hora del sistema, inclinándola hasta que coincida con la vista de la hora actual. Por ejemplo, en lugar de establecer instantáneamente la hora 5 segundos en el futuro o en el pasado, acelerará o ralentizará la frecuencia del reloj y la impulsará hacia adelante o hacia atrás en incrementos muy pequeños. Si bien esto está diseñado para evitar aplicaciones confusas que se basan en marcas de tiempo relativas, también es útil para ralentizar a los atacantes que desean configurar inmediatamente su reloj hasta el punto en que un certificado vencido y comprometido sigue siendo válido.

No han sido críticas (y respuestas a dichas críticas) de OpenNTPD. La simplicidad del proyecto significa que carece de varios controles de cordura y algoritmos que mejoran la precisión del tiempo, lo que lleva a una precisión máxima de 200 ms. Esto no es un problema de seguridad, pero puede que no sea ideal para determinadas aplicaciones. Para el usuario medio de una computadora, es más que suficiente.



Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...