Seguridad de los Datos en Sistemas Empotrados


Cristian González Guerrero


Universidad de Granada

Máster en Ciencia de Datos e
Ingeniería de Computadores

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

A SME enabler for nationally and internationally funded projects. Offering engineering services for:

  • Chip development
  • Project management
  • Telecommunications
  • Circuit and system design
  • IoT in general

H2 smart

Fin de las prácticas

Durante la estancia descubro:

  • Internet de las Cosas (IoT)
  • Sistemas empotrados

Máster DATCOM - proyectos con eesy-innovation


Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

Objetivos

Objetivos

Objetivos

Objetivos

  1. Establecer comunicación segura con Internet
    • Revisar implementaciones TLS
  2. Intercambio de mensajes con AWS IoT

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

H2 miniGW

H2 miniGW

H2 miniGW

H2 miniGW

H2 miniGW

XMC4500

  • Procesador: ARM Cortex-M4 (32-bit CPU)
  • Flash (programa + datos): 1024KB
  • RAM: 160KB (en 3 bloques)
  • Periféricos: DAC, ADC, Ethernet, USIC, etc.

Firmware

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

Criterios de la búsqueda

  1. Adecuada para sistemas empotrados
    • Lenguaje C estándar
    • Low footprint
  2. Compatible con el sistema
    • CMSIS-RTOS
    • lwIP
  3. Seguridad
    • Ciphersuites AWS IoT
    • Desarrollo continuo
VS WolfSSL mbed TLS
Conocido por MySQL ARM mbed
Verificaciones WolfCrypt
(FIPS-140 l1)
No
Licencia $5000 Sin costo
Compatible RTOS, lwIP AWS IoT SDK

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

Objetivos

Integración de mbed TLS

Será necesario:

  1. Importar biblioteca al proyecto
  2. Compilar (firmware incluye biblioteca)
  3. Modificar lo necesario para que funcione

Tiene dependencias de la plataforma...

Integración de mbed TLS

Integración de mbed TLS

Integración de mbed TLS

Integración de mbed TLS

Módulo de red

net_sockets.c


#if defined(MBEDTLS_NET_C)

#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \
	!defined(__APPLE__) && !defined(_WIN32) && !defined(DAVE)
	#error "This module only works on Unix, DAVE and Windows, see MBEDTLS_NET_C in config.h"
#endif

#if defined(MBEDTLS_PLATFORM_C)
	#include "mbedtls/platform.h"
#else
	#include <stdlib.h>
#endif

#include "mbedtls/net_sockets.h"

#include <string.h>

#if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(EFIX64) && \
	!defined(EFI32)

	/***********
	 * WINDOWS *
	 ***********/
	#ifdef _WIN32_WINNT
		#undef _WIN32_WINNT
	#endif
	/* Enables getaddrinfo() & Co */
	#define _WIN32_WINNT 0x0501
	#include <ws2tcpip.h>

	#include <winsock2.h>
	#include <windows.h>

	#if defined(_MSC_VER)
		#if defined(_WIN32_WCE)
			#pragma comment( lib, "ws2.lib" )
		#else
			#pragma comment( lib, "ws2_32.lib" )
		#endif
	#endif /* _MSC_VER */

	#define read(fd,buf,len)        recv(fd,(char*)buf,(int) len,0)
	#define write(fd,buf,len)       send(fd,(char*)buf,(int) len,0)
	#define close(fd)               closesocket(fd)

	static int wsa_init_done = 0;

#else /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */

	#if defined(DAVE)

		/********
		 * DAVE *
		 ********/
		#include <sys/types.h>
		#include <lwip/sockets.h>
		#include <lwip/inet.h>
		#include <unistd.h>
		#include <signal.h>
		#include <lwip/netdb.h>
		#include <errno.h>

	#else

		/********
		 * UNIX *
		 ********/
		#include <sys/types.h>
		#include <sys/socket.h>
		#include <netinet/in.h>
		#include <arpa/inet.h>
		#include <sys/time.h>
		#include <unistd.h>
		#include <signal.h>
		#include <fcntl.h>
		#include <netdb.h>
		#include <errno.h>

	#endif /* DAVE */

#endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */

#endif /* MBEDTLS_NET_C */
					

Fuentes de entropía

Fuentes de entropía

Aleatoriedad dada por:

  1. No determinismo
  2. Digital → Analog → Digital
  3. Recolección de entropía

Módulo de temporización


#include "mbedtls/platform_DAVE.h"

mbedtls_time_t mbedtls_time_DAVE( mbedtls_time_t* timer ) {
	mbedtls_time_t now;

	if (timer == NULL) {
		timer = &now;
	}

	RTC_Time(timer);
	return *timer;
}
					

Configuración de mbed TLS

Configuración mínima con ciphersuites recomendados por AWS y reducción del uso de memoria

Verificaciones

  1. Tests unitarios: proporcionados por mbed TLS
  2. Programa selftest.c

  3. Test funcional: conectar con servidor HTTPS
  4. Verificar recepción de 200 OK

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

Integración AWS IoT Device SDK

Integración AWS IoT Device SDK

Integración AWS IoT Device SDK

Integración AWS IoT Device SDK

Conectividad de red

Modificado fichero network_mbedtls_wrapper.c

Certificados contenidos en variables (hardcoded):

  • Certificado del dispositivo
  • Clave privada
  • Autoridad certificadora

Temporizadores

Gestionan timeouts en las conexiones

Implementados a partir de osKernelSysTick()

Concurrencia

Implementado a partir de los mutex de RTOS

Configuración

aws_iot_config.h


#define AWS_IOT_MQTT_HOST        "XXXXXX.amazonaws.com"
#define AWS_IOT_MQTT_PORT        8883
#define AWS_IOT_MQTT_CLIENT_ID   "c-sdk-client-id"
#define AWS_IOT_MY_THING_NAME    "AWS-IoT-C-SDK"
#define AWS_IOT_ROOT_CA          ca_root
#define AWS_IOT_CERTIFICATE      client_cert
#define AWS_IOT_PRIVATE_KEY      client_key
					

Verificaciones

  1. Test funcional: envío de mensajes MQTT
  2. Visualización del tráfico desde la consola

  3. Test funcional: actualización de la sombra
  4. Visualización de la sombra desde la consola

Problemas encontrados

Actualizar lwIP

Modificar malloc

Seguridad de los Datos en Sistemas Empotrados

  1. Motivación
  2. Objetivos
  3. Presentación del sistema
  4. Análisis de bibliotecas TLS
  5. Integración de mbedTLS
  6. Integración de AWS IoT Device SDK
  7. Conclusiones

Conclusiones

  • Conexión segura con AWS IoT
  • TLS configurable en tiempo de compilación
  • RAM necesaria (ECC): 17KB stack + 35KB heap
  • La seguridad es fundamental en IoT

Gracias por su atención

¿Preguntas?