DÍA 338 DE 365

Fase 5: Diseño Industrial y Hardware

📖 Teoría a Estudiar

El Peligro de las Librerías de Terceros (Third-Party Libraries)

Tu proyecto en STM32CubeIDE no es una isla. Incluye el Firmware Package de ST (ej. STM32F4xx_HAL_Driver versión 1.28.0). En el desarrollo industrial, un CVE (Common Vulnerabilities and Exposures) es una base de datos pública (como la NVD en EE. UU.) que enumera fallos conocidos en el software. Si alguien descubre que la librería HAL de ST falla al recibir una trama I2C demasiado larga y permite sobreescribir memoria adyacente (Buffer Overflow), la vulnerabilidad se vuelve pública. Si tú sigues usando la versión 1.28.0 un año después sin parcharla, eres un blanco fácil.

El Dilema de la Actualización y el SBOM

¿La solución es actualizar STM32CubeIDE cada vez que sale una versión nueva? ¡NO! Actualizar librerías indiscriminadamente rompe la regla de Congelamiento (Design Freeze - Día 329). El código nuevo podría cambiar la sincronización y arruinar tus rutinas de hardware. La solución profesional es mantener un SBOM (Software Bill of Materials). Esto es un manifiesto exacto de las versiones que usas. Al cruzar tu SBOM con las bases de datos de CVEs, sabes exactamente cuándo estás en peligro y justificas el esfuerzo de un parche (OTA).

CADENA DE SUMINISTRO DE SOFTWARE Y DEFENSA CVE BASE DE DATOS NVD (PÚBLICA) CVE-2026-99123 Vulnerabilidad HAL_UART (ST) Un payload > 255 bytes en modo IT provoca ejecución remota de código. Script Exploit Trama Maliciosa DESPACHADOR STM32 (BETA / PRODUCCIÓN) THIRD-PARTY LIBRARIES (DEPENDENCIAS) HAL_Driver v1.28.0 CMSIS Core v5.4.0 Newlib C (libc) DEFENSIVE WRAPPER Safe_UART_Receive_IT() Sanea los datos antes de pasarlos al HAL de ST. El wrapper bloquea tamaños > 128 bytes

⚙️ Procedimiento Práctico: Gestión del Riesgo en C

Paso 1: Generación del SBOM.
En el directorio principal de tu proyecto en STM32CubeIDE, debes mantener un archivo (puede ser un encabezado de C) que declare explícitamente las versiones de las librerías. Al compilar tu "Golden Master" (Día 329), este archivo quedará incrustado en el binario. Cuando se anuncie un CVE de STMicroelectronics, sabrás en 10 segundos si tus 10,000 máquinas están afectadas.

Paso 2: Envoltorios Defensivos (Wrappers).
Si se descubre un fallo en HAL_UART_Receive_IT(), y no quieres actualizar toda la librería HAL porque rompería tu certificación, la solución es no llamar directamente a la función de ST. Creas una función tuya Safe_UART_Receive(). Dentro de ella, verificas agresivamente los límites de tamaño (Bound Checking) y los punteros nulos, actuando como un filtro sanitario antes de pasarle la pelota al código vulnerable del fabricante.

💻 Firmware: SBOM y Defensive Wrappers

Primero, definimos nuestra Lista de Materiales de Software. Luego, implementamos un escudo contra una vulnerabilidad hipotética pero muy común en C: el desbordamiento de búfer por parámetros inyectados desde el exterior (el módulo ESP32 atacado).


/**
 * @file firmware_sbom.h
 * @brief Software Bill of Materials (SBOM) - Seguimiento de Cadena de Suministro
 */

#ifndef FIRMWARE_SBOM_H
#define FIRMWARE_SBOM_H

// =========================================================================
// REGISTRO DE DEPENDENCIAS DE TERCEROS (THIRD-PARTY LIBRARIES)
// Fundamental para auditorías de ciberseguridad (CVE Tracking)
// =========================================================================

#define SBOM_STM32_HAL_VERSION    "v1.28.0"  // Reemplazar si hay un parche mayor
#define SBOM_CMSIS_CORE_VERSION   "v5.4.0"
#define SBOM_COMPILER_GCC_VERSION "v10.3-2021.10"

// Si usamos RTOS en la Fase 6, se registrará aquí:
// #define SBOM_FREERTOS_VERSION  "v10.4.6"

#endif // FIRMWARE_SBOM_H
        

/**
 * @file secure_hal_wrappers.c
 * @brief Wrappers defensivos para aislar vulnerabilidades conocidas de librerías.
 */

#include "stm32f4xx_hal.h"
#include <stdio.h>

extern UART_HandleTypeDef huart2;

// Tamaño físico estricto de nuestro Buffer Circular en RAM (Día 336)
#define MAX_SAFE_UART_BUFFER_SIZE  128

// =========================================================================
// ENVOLTORIO DEFENSIVO (DEFENSIVE WRAPPER)
// =========================================================================
/**
 * @brief Llama a la librería ST HAL, pero aplicando saneamiento estricto.
 * @param pData: Puntero al buffer destino
 * @param Size: Cantidad de bytes a recibir
 * @return HAL_StatusTypeDef o HAL_ERROR si falla la auditoría.
 */
HAL_StatusTypeDef Safe_HAL_UART_Receive_IT(uint8_t *pData, uint16_t Size) {
    
    // 1. MITIGACIÓN DE NULL POINTER (CVE Común: Crashing the system)
    if (pData == NULL) {
        printf("[SECURITY] Intento de UART Receive con Puntero Nulo bloqueado.\r\n");
        return HAL_ERROR;
    }

    // 2. MITIGACIÓN DE BUFFER OVERFLOW (CVE Común: Arbitrary Code Execution)
    // Supongamos que el HAL tiene un bug que no verifica el tamaño máximo.
    // Si un atacante inyecta Size = 65000, sobreescribirá toda la SRAM.
    if (Size > MAX_SAFE_UART_BUFFER_SIZE || Size == 0) {
        printf("[SECURITY] Intento de Desbordamiento UART Bloqueado (Size: %u).\r\n", Size);
        return HAL_ERROR;
    }

    // 3. AISLAMIENTO DE ESTADO (State Machine Corruption Defense)
    // El HAL a veces se bloquea permanentemente si se llama mientras está en error.
    if (huart2.gState != HAL_UART_STATE_READY) {
        // En lugar de encolar un fallo en cascada, limpiamos el periférico a nivel bajo.
        __HAL_UART_CLEAR_OREFLAG(&huart2); 
    }

    // 4. EJECUCIÓN SEGURA
    // Solo después de sanear el entorno, llamamos a la librería de terceros.
    return HAL_UART_Receive_IT(&huart2, pData, Size);
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Seguridad de la Cadena de Suministro de Software (Supply Chain Security).

El talón de Aquiles de la mayoría de los dispositivos IoT comerciales es el abandono. Un ingeniero descarga el código base del fabricante en 2026, diseña su producto y no vuelve a actualizar las herramientas jamás. En 2028, se descubre un fallo masivo en ese código base, y miles de máquinas quedan expuestas para siempre.

Al forzar la inclusión de un **SBOM (Software Bill of Materials)** en tu compilación, documentaste tu ADN de software. Tienes trazabilidad. Y lo más importante, al negarte a utilizar la librería HAL directamente y utilizar **Defensive Wrappers** (`Safe_HAL_UART...`), aplicaste la filosofía de "Confianza Cero" (Zero Trust) a tu propio compilador. Si STMicroelectronics comete un error en su manejo de memoria dentro de la librería HAL, tu Wrapper bloquea las tramas malformadas antes de que toquen el código de ST. Protegiste tu máquina de los errores cometidos por ingenieros al otro lado del mundo. Tu Despachador es ahora una entidad hermética, tanto física como lógicamente.

📝 Resumen del Día