IoT, seguridad en su ciclo de vida (Parte 1 de 2)

El internet de las cosas (IoT - Internet of things), es una tendencia tecnológica que poco a poco tendrá fuerza en Latinoamérica, el cual consistirá en que las cosas como la refrigeradora, reloj pulsera, microondas, marcapasos, celulares, cochera, entre otros dispositivos inteligentes tendrán conexión a internet y podrán trabajar los datos que generan cada uno de estos dentro de un objetivo como sistema. Esto es muy similar a la domótica, con la diferencia de que estos dispositivos cuentan con su propio SO con conexión a internet y además son generadores de información masiva para futuros cálculos estadísticos necesarios para a toma de decisiones de los usuarios.

Componentes IoT

Existen los dispositivos como los equipos de sonido, televisores, lavadoras, etc. Estos dispositivos internamente tienen un firmware (software en el ROM), dichos firmware tendrán conexión posterior con una pasarela o con una aplicación móvil, quienes servirán de puente para comunicarse con un API del datacenter en la nube. Entonces, tenemos cuatro software a considerar en un ciclo de desarrollo de software seguro para sistemas IoT. Dentro de las vulnerabilidades relacionadas con estos softwares se encuentran los ataques de inyección (Ejecución maliciosa de scripts), el escalamiento de privilegios (Suplantación de usuarios), corrupción de firmware o firmwares no firmados.
Todos estos componentes siguen un flujo de desarrollo de software tradicional, es decir: Análisis y Diseño, Programación, Pruebas e Implementación; y en cada una de estas fases debe existir lo propio para un nivel de seguridad óptimo permitiendo así ofrecer al usuario final la confianza necesaria para un sistema libre de vulnerabilidades.

Seguridad en el análisis y diseño

En esta fase se utiliza lo que se denomina modelado de amenazas, estudiar a los actores participantes y sus posibles escenarios de amenazas, para ello cada amenaza debe ser identificada y clasificada. Esto permitirá al arquitecto IoT tener las consideraciones de seguridad necesarias no solamente para temas de software, también para temas seguridad física como los robos de los dispositivos, clonación de dispositivos y acceso físico no autorizado. Tras el análisis debe quedar claro las medidas a desarrollar para implementar controles respecto a validación de entradas, autenticación, autorización, gestión de la configuración, seguridad de datos y privacidad, gestión de sesiones, criptografía, gestión de excepciones, auditoría y registro, seguridad de la comunicación y disponibilidad.

Seguridad en la programación

Los programadores deben estar alineados a normas globales que se actualizan constantemente de nuevos ataques y amenazas cibernéticas, si bien es cierto los programadores tienen nociones de seguridad en base a su experiencia en lenguajes de programación tradicionales, ante un ambiente IoT será también necesario conocer las vulnerabilidades existentes en desarrollos con lenguajes embebidos como Embedded C o C++. Otro punto a resaltar, es que los programadores deberían tener en su IDE, plugins que les ayude a realizar una revisión de código seguro y comprobar la seguridad en tiempo de check-out.
Los criterios de aceptación deben también ser parte de la evaluación del programador, no dejarle todo el trabajo de búsqueda de errores a los testers, para ello se recomienda el uso de servidores de compilación y realizar evaluaciones sobre la marcha basadas en registros. La división de ambientes también es una parte esencial del ciclo de vida del desarrollo de software, es decir, un ambiente para desarrolladores, para testers y el de producción.

Seguridad en las pruebas

La fase de prueba asociada con las aplicaciones debe consistir en actividades de evaluación relacionadas con los puntos finales físicos (por ejemplo, sensores y nodos). El riesgo físico puede variar entre cualquier extremo dependiendo de los casos de uso involucrados. Algunos ejemplos de casos de uso son: Anulación de la inscripción y registro de dispositivos, clonación y robo de dispositivos, simulación de movimientos físicos para evadir sensores y actuadores, perjuicio de protocolos, por ejemplo, ZigBee, Z-wave, 6LoWPAN. En resumen, los pasos que consideramos que debe existir en una fase de prueba son: Estudiar los dispositivos IoT y el ambiente donde se desenvolverá, estudio de amenazas y análisis de caso de uso de pruebas, diseño de pruebas que se puedan automatizar y cuáles se puedan realizar de manera manual, identificación de herramientas aplicables, cumplimiento con estándares o normas metodológicas, configuración de entorno de pruebas, ejecución e informes pertinentes.

Consejo audit

En un futuro artículo especificaremos lo relacionado con la seguridad a aplicar en las siguientes fases del ciclo de vida de desarrollo de software IoT, estamos hablando de despliegue y operaciones. En resumen, en las fases de análisis, diseño, programación y pruebas, para un sistema IoT no difiere mucho de un sistema tradicional, el tema acá es considerar las vulnerabilidades en los dispositivos, porque es como la unión de pequeñas islas autónomas, en donde cada parte brinda una confianza por la respuesta de otro dispositivo predecesor en el flujo del sistema IoT. En este tipo de soluciones intervienen varias tecnologías y por lo tanto necesita expertos en ello.