Sistema operativo embebido
# Sistema operativo embebido

Un sistema operativo embebido, embarcado o empotrado (integrado, incrustado) es un sistema operativo para sistemas embebidos. Este tipo de sistema operativo generalmente está diseñado para ser confiable y eficiente en el uso de recursos. La eficiencia de los recursos tiene el costo de perder alguna funcionalidad o granularidad que proporcionan los sistemas operativos de computadoras más grandes, incluidas las funciones que pueden no ser utilizadas por las aplicaciones especializadas que ejecutan. Según el método utilizado para la multitarea, este tipo de sistema operativo se considera con frecuencia un sistema operativo en tiempo real o RTOS por sus iniciales en inglés.

El hardware que ejecuta un sistema operativo embebido puede ser muy limitado en recursos como en RAM y ROM, por lo tanto, el diseño embebido de estos sistemas operativos puede tener un alcance limitado adaptado a una aplicación específica para lograr la operación deseada bajo estas restricciones. Para aprovechar mejor la potencia de procesamiento de la CPU, los desarrolladores de software pueden escribir código crítico directamente en el ensamblador. Este lenguaje de máquina eficiente puede potencialmente resultar en ganancias en velocidad y determinismo a costa de portabilidad y mantenibilidad. A menudo, los sistemas operativos embebidos se escriben completamente en lenguajes más portátiles, como C.

Una diferencia importante entre la mayoría de los sistemas operativos embebidos y los sistemas operativos de escritorio es que la aplicación, incluido el sistema operativo, suele estar vinculada estáticamente en una única imagen ejecutable. A diferencia de un sistema operativo de escritorio, el sistema operativo embebido no carga ni ejecuta aplicaciones. Esto significa que el sistema solo puede ejecutar una única aplicación.

## Tipos de ataques presentes

* Basados en Software

Los ataques basados en software se dirigen a la parte central del sistema. Un ataque satisfactorio al software permite al atacante acceder a la información u obtener control sobre el sistema embebido. Buscar vulnerabilidades en el diseño y código del software es el vector más popular de un ataque porque es posible conducir tal ataque de forma remota. También, un ataque basado en software no requiere conocimiento específico de los atacantes, dado que pueden usar ataques típicos como desplegar malware y técnicas de fuerza bruta.

Los ataques basados en software ampliamente usados involucran:

* Malware.
* Acceso mediante fuerza bruta.
* Sobreflujo del búfer de memoria.
* Explotar las vulnerabilidades de seguridad en las aplicaciones web.
* Basados en Red

Este tipo de ataques explotan las vulnerabilidades en la infraestructura de la red y también puede llevarse a cabo de forma remota. Aprovechando estas vulnerabilidades, los atacantes pueden escuchar, interceptar y modificar el tráfico transmitido por un sistema embebido. Los más comunes son:

* Hombre en el medio (Man In The Middle, MITM).
* Envenenamiento del Sistema de Nombre de Dominio (DNS, por sus siglas en inglés).
* Denegación de Servicio Distribuida (DDoS).
* Interferencia de señal.
* Ataques de Side-Channel

Este tipo de ataques intentan usar los defectos de seguridad en el hardware de los sistemas embebidos para atacarlos. Un ataque de side-channel es el más difícil y costoso tipo de ataque, dado que requiere conocimiento preciso del diseño del hardware y de la disponibilidad física con que cuenta el sistema objetivo. Para llevar a cabo un ataque de este tipo, los piratas informáticos recolectan información del consumo de energía del sistema, de las fugas electromagnéticas, de los tiempos de operación, etc. Como resultado, pueden averiguar el funcionamiento interno del sistema y de los dispositivos conectados, robar llaves criptográficas o incluso obtener control del sistema. Los tipos de ataques side-channel más comunes son:

* Análisis de poder.
* Ataques de tiempo.
* Análisis Electromagnético

## Basados en Software

* Ataques de malware

Los ataques con malware en sistemas embebidos trabajan de la misma forma que con cualquier otro sistema: Un atacante despliega una pieza de código malicioso que intenta interceptar los datos almacenados en el sistema, toma control del sistema de la víctima, o lo daña. Usualmente, los atacantes falsifican actualizaciones de firmware, de drivers o parches de seguridad para entregar el malware.

* Ataques de fuerza bruta

Las credenciales de acceso por fuerza bruta son, en términos simples, el proceso para obtenerlas tratando de adivinarlas. La mayoría de los sistemas embebidos proveen acceso remoto a una interfaz gráfica de usuario (GUI) que los atacantes pueden explotar. Se pueden prevenir los ataques de fuerza bruta empleando contraseñas fuertes y limitando el número de intentos de inicio de sesión.

* Ataques por sobreflujo de búfer de memoria

Es un tipo de ataque que se da cuando los piratas informáticos manualmente desbordan el búfer de la memoria designada para contener datos que se mueven dentro de un sistema embebido. Los atacantes despliegan exploits que inundan el búfer de la memoria con demasiada información. En este caso, el sistema operativo embebido registrará algunos de estos datos en las secciones de memoria ubicadas junto al búfer. Los datos registrados pueden contener shellcode (pequeña porción de código empleado como la “carga explosiva” de un exploit para aprovechar las vulnerabilidades de un sistema) o algunos exploits que ayuden al o los atacantes a obtener las credenciales necesarias para elevar sus derechos de acceso.

## Basados en Red

* Ataques MITM

Se utilizan para interceptar o modificar datos transmitidos por un sistema embebido. Para ejecutarlos, los atacantes cambian los parámetros de conexión de dos dispositivos para poder colocar un tercero entre ambos. Si el atacante puede obtener o alterar las llaves criptográficas empleadas por ambos dispositivos, estos pueden espiar de una forma que es muy difícil de detectar dado que no causa disrupciones en la red. Un ataque MITM puede prevenirse o detenerse encriptando los datos transmitidos empleando el IPsec (Seguridad del Protocolo de Internet) para, de forma segura, transmitir llaves y datos.

* Envenenamiento de DNS

El envenenamiento de DNS fuerza al servidor de DNS a modificar sus registros de acuerdo a las necesidades del atacante. Al usar las vulnerabilidades del servidor de DNS y envenenar su caché, los atacantes redirigen el tráfico de un sitio web en específico a otra dirección.

* Ataques DoS/DDoS

Es un tipo de ataque que hace indisponible a un sistema mediante un sobreflujo por múltiples solicitudes de diferentes fuentes. Los ataques de denegación de servicios están a la orden del día. Los sistemas embebidos no suelen tener controles de tramas de red, por lo que es posible que una petición repetida de información pueda bloquear los canales comunicativos.

* Secuestro de Sesión

Similar al ataque MITM pero con diferente objetivo: el atacante escucha el tráfico de un sistema embebido para obtener credenciales de autenticación. Existen varias formas de ejecutar un secuestro: modificando el identificador de sesión de usuario, robando el caché de sesión, cross-site scripting, entre otros.

* Interferencia de señal

Este tipo de ataque es común para redes inalámbricas. Con esta técnica, los atacantes crean interferencia en la red para tirar o distorsionar la comunicación de un dispositivo. Dependiendo del tipo de jammer, este puede interferir en cualquier comunicación en el canal, empezar a trabajar cuando un cierto dispositivo transmita datos o ser activado cuando detecte ciertos paquetes en específico. Tal ataque puede hacer indisponible un sistema embebido.

## Ataques de Side-Channel

* Ataques por análisis de poder (consumo energético)

Un ataque de este estilo requiere acceso físico al sistema embebido para poder probar las conexiones y para detectar cambios en el consumo de energía. Estos cambios dependen de los datos procesados por el sistema por lo que los atacantes, al detectar que el sistema presenta dichos cambios al procesar un particular tipo de información, actúan para interceptarlos.

* Ataques de tiempo

Estos ataques están basados en el tiempo de las operaciones de un sistema embebido. Se usan para obtener información como algoritmos criptográficos aplicados, diferencias de datos dependientes en tiempos de instrucción y tramas de código, tiempos de acceso a caché y más. Este tipo de ataque también requiere de acceso físico al dispositivo y conocimiento profundo de la arquitectura de los sistemas embebidos. Dado que los ataques de tiempo dependen fuertemente de operaciones de software lineales y predecibles, se pueden prevenir empleando aleatorizadores para mezclar las actividades en el ciclo inactivo. Esto hará el análisis de tiempos de un sistema embebido verdaderamente retador y complejo.

* Análisis electromagnético

El análisis electromagnético provee a los atacantes otra forma de ver dentro de un software embebido sin atacarlo. Los piratas informáticos pueden utilizar el análisis electromagnético para registrar y analizar las emisiones de un dispositivo, descubrir sus operaciones criptográficas e incluso extraer sus llaves secretas. Este tipo de ataque es el que más tiempo y costos consume dado que requiere:

* Proximidad física al sistema embebido.
* Información de la capa en la que el sistema se encuentra embebido.
* Aislamiento de otros dispositivos para proteger al sistema de interferencia electromagnética

Un diseñador de hardware puede dificultar la recolección de las señales electromagnéticas reduciendo la fuerza de la señal o añadiendo protección física (por ejemplo, empleando algunos tipos de pegamento o circuitería y cables para soldar). La aleatoriedad y las interrupciones en los procesos de encriptación también son contramedidas efectivas contra los análisis electromagnéticos.

