Estoy revisando la seguridad de un sistema integrado, específicamente cómo utiliza el protocolo TLS o DTLS para comunicarse de forma segura. El sistema implementa tan pocas características del protocolo como puede salirse con la suya. No se desvía del protocolo como tal, pero puede que no siempre cumpla estrictamente con todos los RFC aplicables. Mi objetivo es determinar si la elección de los parámetros de seguridad es segura.
Tendré que hacer esto de nuevo para otros sistemas similares, por lo tanto, mi pregunta es un tanto general en lugar de estar relacionada con un sistema específico.
Los objetivos de seguridad de usar (D) TLS son los habituales: un atacante podría interceptar el tráfico de la red (hombre activo en el medio). Queremos asegurarnos de que el cliente esté hablando con el servidor con el que cree que está hablando y que un tercero no pueda obtener o modificar los datos transmitidos (confidencialidad e integridad del tráfico en la conexión). La autenticación del cliente a veces también se desea.
Estos son sistemas integrados (IoT) con muy pocos recursos y, por lo general, interactúan en ecosistemas controlados. Al menos, controlamos a los pares legítimos, por lo que la compatibilidad con diversos clientes y servidores antiguos no es un problema, las preocupaciones son muy diferentes de usar TLS en la web. Un cliente de punto final típico solo habla uno o dos conjuntos de cifrado (autenticación de servidor basada en firmas "clásica", clave precompartida o uno de cada uno). Dependiendo del escenario, la PKI puede o no ser un sistema cerrado: algunos dispositivos viven en un mundo donde podemos confiar en que las CA solo entreguen certificados de cierta forma, mientras que otros pueden confiar en una CA "pública".
Estos son dispositivos con restricciones estrictas en el poder de cómputo disponible, el tamaño de RAM y el tamaño del código. Por lo tanto, generalmente están ejecutando bibliotecas TLS simplificadas con la menor cantidad de funciones posibles. Estoy hablando de un microcontrolador con 128–512kB de RAM, no de dispositivos de gama alta que ejecutan Linux.
¿Hay extensiones (D) TLS o X.509 que son importantes ? No me preocupa la elección de conjuntos de cifrado (nadie usa DES, RC4 o MD5 en mi mundo, o conjuntos de cifrado sin autenticación del servidor) o con tamaños de clave. Lo que me preocupa es, por ejemplo, una implementación que omite las comprobaciones de certificados (por ejemplo, restricción de uso de clave) que permitiría un mal uso de un certificado. O un cheque faltante durante el protocolo de enlace que permita algún tipo de ataque de degradación (un dispositivo de punto final generalmente solo habla una versión de protocolo, pero los servidores con los que habla pueden admitir varias versiones). O una extensión faltante que permite a un MitM activo convencer a las dos partes para que se ajusten a los parámetros de seguridad que no coinciden, o renegociar de manera insegura.
¿Qué debo buscar al revisar la configuración de TLS en un dispositivo integrado pequeño?