DÍA 327 DE 365

Fase 5: Diseño Industrial y Hardware

📖 Teoría a Estudiar

Los Vectores de Fraude Físico

En estaciones de servicio, la ciberseguridad no es solo evitar que te hackeen por Wi-Fi. Es evitar que manipulen los sensores. Existen dos ataques predominantes:

  1. Ataque por Inyección (El Pulsador): El atacante corta el cable del caudalímetro real y conecta un generador de pulsos de onda cuadrada. La CPU cree que está pasando gas a alta velocidad, incrementando el monto a cobrar en la pantalla sin abrir la válvula ni despachar una sola gota de producto.
  2. Robo de Tarjeta (Board Swapping): Abren el gabinete y cambian la memoria EEPROM I2C por una pre-grabada con un K-Factor alterado, o clonan la tarjeta STM32 entera.

Estrategia Defensiva: Coherencia Lógica y Anti-Tamper

No necesitas encriptar el pulso de un sensor Hall (sería muy caro). Necesitas Coherencia Lógica. El STM32 sabe exactamente cuál es el estado de la Electroválvula de Gas. Si el Relé está apagado (Válvula Cerrada), y el caudalímetro registra pulsos, es físicamente imposible: o hay una fuga mecánica gravísima, o hay un intento de fraude electrónico. Ambas requieren el bloqueo inmediato del sistema.

Para evitar la manipulación física, instalamos un Anti-Tamper Switch (Micro-interruptor de intrusión). Es un botón normalmente cerrado (NC) en la puerta del gabinete. Si se abre la puerta sin activar el modo de mantenimiento por software, el equipo entra en pánico y bloquea la operación.

VECTORES DE FRAUDE: INYECCIÓN DE PULSOS Y TAMPERING ATAQUE DE INYECCIÓN ("EL PULSADOR") VÁLVULA CERRADA TURBINA CABLE CORTADO PULSADOR 1000 Hz Pulsos Falsos EXTI MCU DEFENSA LÓGICA STM32 ¿RELE OFF? Y ¿HAY PULSOS? SI = FRAUDE / FUGA SYSTEM LOCKDOWN Código E-99: Intento de Fraude Tamper Switch Abierto

⚙️ Procedimiento Práctico: Implementación Anti-Tamper

Paso 1: El Tamper Switch.
Instala un micro-interruptor industrial (estilo fin de carrera) en la puerta del gabinete NEMA. Conéctalo a un pin del STM32 configurado con Pull-Up interno. Cuando la puerta está cerrada, el switch presiona y conecta el pin a Tierra (0V). Si alguien abre la puerta, el circuito se abre y el pin flota hacia 3.3V. Esa es tu alarma de intrusión física.

Paso 2: Modo de Mantenimiento Seguro.
Si el STM32 se bloquea al abrir la puerta, ¿cómo le dará servicio tu propio técnico? Antes de abrir la puerta, el técnico debe interactuar con el teclado o una App y solicitar un "Access Token". Esto pone a la máquina en MAINTENANCE_MODE temporal. Si se abre la puerta durante este modo, se registra el evento en la EEPROM, pero no se bloquea la máquina.

💻 Firmware: Detección de Fraude e Intrusión

El código a continuación actúa como el guardia de seguridad silencioso de la máquina. Se ejecuta en el bucle principal o será una Tarea dedicada en nuestro futuro RTOS. Compara la realidad física del Hardware (Relé) contra la realidad lógica del Sensor (EXTI).


/**
 * @file security_fraud_detection.c
 * @brief Auditoría Criptográfica de Intrusión y Coherencia de Hardware
 */

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

// Abstracciones de Hardware
#define TAMPER_PORT          GPIOB
#define TAMPER_PIN           GPIO_PIN_12
#define RELAY_VALVE_PORT     GPIOA
#define RELAY_VALVE_PIN      GPIO_PIN_8

extern volatile uint32_t flowmeter_pulse_count;
extern void Buzzer_Alarm_Siren(void);
extern void System_Enter_Lockdown(const char* reason_code);

// Variables de Estado
bool is_maintenance_mode = false;
uint32_t last_pulse_count_check = 0;

// =========================================================================
// TAREA DE AUDITORÍA DE SEGURIDAD (Se debe llamar cada 500ms)
// =========================================================================
void Security_Fraud_Detection_Task(void) {
    
    // ---------------------------------------------------------------------
    // 1. AUDITORÍA DE INTRUSIÓN FÍSICA (TAMPER SWITCH)
    // ---------------------------------------------------------------------
    // El switch está cerrado (LOW) cuando la puerta está cerrada.
    // Si lee HIGH, la puerta ha sido abierta.
    if (HAL_GPIO_ReadPin(TAMPER_PORT, TAMPER_PIN) == GPIO_PIN_SET) {
        if (!is_maintenance_mode) {
            printf("[!] BRECHA DE SEGURIDAD: Gabinete abierto sin autorización.\r\n");
            Buzzer_Alarm_Siren();
            System_Enter_Lockdown("E-98_TAMPER_CABINET");
            // La máquina muere aquí. El Lockdown tiene un while(1) infinito 
            // que solo se destraba ingresando un PIN maestro.
        }
    }

    // ---------------------------------------------------------------------
    // 2. AUDITORÍA DE COHERENCIA LÓGICA ("EL PULSADOR")
    // ---------------------------------------------------------------------
    // Tomamos una "fotografía" de los pulsos acumulados en este instante
    uint32_t current_pulses = flowmeter_pulse_count;
    uint32_t delta_pulses = current_pulses - last_pulse_count_check;
    
    // Evaluamos el hardware: ¿La válvula eléctrica de gas está cerrada?
    bool is_valve_closed = (HAL_GPIO_ReadPin(RELAY_VALVE_PORT, RELAY_VALVE_PIN) == GPIO_PIN_RESET);
    
    if (is_valve_closed) {
        // Tolerancia: Permitimos hasta 5 pulsos de inercia (gas remanente en la tubería
        // que sigue moviendo la turbina un par de milisegundos tras cerrar la válvula).
        if (delta_pulses > 5) {
            
            // ¡ESCENARIO IMPOSIBLE!
            // La válvula está cortada (no hay flujo eléctrico hacia ella),
            // pero el microcontrolador está recibiendo pulsos masivos del sensor.
            // CAUSAS: 
            // 1. Fuga mecánica catastrófica (El sello de la válvula se rompió).
            // 2. Fraude: Alguien conectó un inyector de pulsos (Generador de onda).
            
            printf("[!] FRAUDE DETECTADO: Pulsos anómalos con válvula cerrada.\r\n");
            printf("    Pulsos fantasma: %lu\r\n", delta_pulses);
            
            Buzzer_Alarm_Siren();
            System_Enter_Lockdown("E-99_FRAUD_INJECTION");
        }
    }
    
    // Actualizamos el contador histórico para la siguiente ronda (500ms después)
    last_pulse_count_check = current_pulses;
}
        

🚀 Avance del Proyecto Tesis: Despachador de Gas LP

Objetivo del día: Seguridad Lógica e Integridad de Plataforma en Ambientes Hostiles.

Un ingeniero brillante pero ingenuo construye una máquina asumiendo que los usuarios querrán usarla correctamente. Un Arquitecto de Hardware Industrial asume que el usuario buscará activamente la manera de hackear, manipular y desmantelar el equipo para robar dinero. A lo largo de la Fase 5, hemos visto protecciones pasivas (diodos, filtros). Hoy, convertiste a tu STM32 en un ente activo y paranoico.

Al implementar el **Anti-Tamper Switch**, garantizas que la frontera física de tu caja NEMA sea inviolable, enviando una alarma letal a la EEPROM si alguien intenta llegar a tu hardware sin permiso por software. Y lo más hermoso de la ingeniería de sistemas: al implementar la **Validación de Coherencia Lógica**, anulaste el fraude del "Pulsador" sin necesidad de comprar caros sensores criptográficos. Usaste la pura deducción algorítmica. Si la máquina sabe que cortó el suministro de 24V al relé de la válvula, la física dicta que el gas debe detenerse. Si los pulsos no se detienen, el hardware deduce el engaño. Este nivel de detección cruzada de anomalías es la definición de "Ciberseguridad en el Borde" (Edge Cybersecurity).

📝 Resumen del Día