¿Qué es el uso de ASN.1 en el protocolo SSL y cuál es el riesgo de usarlo?

0

I escuchamos que ASN.1, que forma parte de las bibliotecas SSL del navegador, presenta el riesgo potencial de comprometer nuestro sistema incluso si no usamos scripts. Pero, ¿qué está haciendo exactamente ASN.1? ¿Por qué necesitamos usar algo como ASN.1 para codificar / decodificar datos (como texto o imágenes o binarios) para el cifrado / descifrado que pone a nuestra computadora en riesgo? Porque SSL es un protocolo para cifrar datos y enviarlos a través de Internet.

Comentario del usuario20883: en Wikipedia sobre ASN.1 dice: Si queremos transmitir esto:

myQuestion FooQuestion ::= {
trackingNumber     5,
question           "Anybody there?"

Lo cambiamos a esto:

30 — type tag indicating SEQUENCE
13 — length in octets of value that follows
   02 — type tag indicating INTEGER
   01 — length in octets of value that follows
      05 — value (5)
   16 — type tag indicating IA5String 
        (IA5 means the full 7-bit ISO 646 set, 
        including variants, but is generally US-ASCII)
   0e — length in octets of value that follows
      41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f 
         — value ("Anybody there?")

para hacer esto y enviar a través de TCP:

30 13 02 01 05 16 0e 41 6e 79 62 6f 64 79 20 74 68 65 72 65 3f

¡Pero digo que si queremos enviar ese mensaje, simplemente podemos usar UTF-8 o simplemente codificación binaria para cifrar ese mensaje en lugar de cambiar el mensaje a un software!

Simplemente podemos hacer esto para preparar el mensaje para el cifrado AES:

myQuestion(space character}FooQuestion(space character}::=(space character}trackingNumber(space character}(space character}5,question(space character}(space character}"Anybody there?"

Actualización: ahora tenemos un bloque simple de dara para cifrar con AES directamente y no necesitamos hacer nuestro mensaje como un código de shell. Es solo un mensaje que nos gusta, otros mensajes que ciframos siempre y no es necesario ningún tipo de codificación o explotación ...

    
pregunta user20883 17.02.2013 - 22:15
fuente

2 respuestas

7

Es ASN.1 . ASN.1 es una sintaxis genérica para describir tipos de datos estructurados, junto con algunas reglas de codificación que indican cómo dichos valores de datos deben codificarse como secuencia de bytes y decodificarse de nuevo. Los certificados X.509 están especificados para usar ASN.1 con las reglas de codificación "DER".

ASN.1 es bastante complejo, y bastante más complejo de lo que debería ser, debido a una larga historia de desarrollo impulsado por comités. En particular, incluye muchos tipos distintos de cadenas de caracteres sin razones aparentes, y sus tipos para codificar fechas son notablemente ineficientes y difíciles de manejar (y uno de ellos está sujeto a problemas Y2K , actualmente programado para 2050). Ante esta complejidad, los desarrolladores a menudo encontraron atractiva la idea de hacer descodificación especializada "solo para certificados", para evitar la tarea desalentadora de implementar un decodificador genérico y sistemático (en particular, es posible pero inconveniente implementar un decodificador ASN.1 genérico en lenguajes como C que carecen de administración automática de memoria, por ejemplo, recolectores de basura ).

Hacer el código especializado "a mano", para evitar la sobrecarga de un enfoque sistemático, significa que el desarrollador tendrá que pensar mucho más sobre los posibles problemas cuando se le presenten datos "anormales". Este es un terreno fértil para las vulnerabilidades (los desarrolladores son humanos, después de todo) y esto es precisamente lo que sucedió en OpenSSL .

(Otras bibliotecas también pueden verse afectadas. Estoy usando OpenSSL como ejemplo porque está muy extendido, y también porque está escrito en C, lo que hace que las consecuencias de los desbordamientos de búfer y los errores de uso después de la liberación sean mucho más peligrosos, hasta e incluyendo la ejecución de código arbitrario. En bibliotecas en lenguajes más controlados, que comprueban los límites de la matriz y usan un GC, obtendrán efectos menos graves: un desbordamiento de búfer genera una excepción, lo cual es inconveniente pero no tanto como un shell remoto para un atacante .)

    
respondido por el Tom Leek 17.02.2013 - 22:37
fuente
1

Entonces, a partir de tu pregunta actualizada, parece que estás preguntando:

  

¿Por qué usaría la estructura de codificación existente cuando puedo diseñar mi   propio?

La respuesta simple es que, a pesar de que ASN.1 tiene algunos problemas, como lo señaló @Tom, aún será mucho mejor que diseñar el suyo, a menos que realmente sepa lo que está haciendo, ya que es más que probable para implementar vulnerabilidades al diseñar su propio código.

    
respondido por el Rory Alsop 18.02.2013 - 08:52
fuente

Lea otras preguntas en las etiquetas