Logotipo de Zephyrnet

Vulnerabilidades de firmware que no desea en su producto

Fecha:

Vulnerabilidades de firmware que no desea en su producto
Ilustración: © IoT para todos

Las vulnerabilidades de firmware se refieren a debilidades de seguridad o fallas encontradas en el firmware de un dispositivo. El firmware es un tipo de software que está integrado en los dispositivos de hardware y proporciona control y funcionalidad de bajo nivel.

Actúa como puente entre el hardware y el software de nivel superior. Los atacantes pueden aprovechar estas vulnerabilidades para obtener acceso no autorizado y controlar o manipular el dispositivo.

Durante la última década, hemos sido testigos de numerosas violaciones de seguridad dirigidas a dispositivos IoT comerciales e industriales. Por ejemplo, los ciberdelincuentes lograron apagar la calefacción de dos edificios en la ciudad finlandesa de Lappeenranta y otros ataques como ShamoonPresa de Nueva York, y la Mirai Botnet han afectado a dispositivos industriales de IoT como los enrutadores de Deutsche Telekom, lo que ha provocado la interrupción de los servicios.

Aunque era ampliamente conocido que la seguridad era un punto débil en los dispositivos de IoT, se habían logrado pocos avances para abordar este problema hasta el año pasado, cuando Rusia atacó a Ucrania. El ataque demostró el poder real de los ciberataques: Anonymous pirateó el sistema CCTV del Kremlin y Rusia atacó la red eléctrica de Ucrania.

Después de estos incidentes, Estados Unidos y la Unión Europea han expresado interés en regular la postura de ciberseguridad de IoT/IIoT, lo cual es un paso muy necesario. Sin embargo, la pregunta sigue siendo: ¿por dónde deberíamos empezar y cuáles son las vulnerabilidades más peligrosas que pueden conducir a este tipo de ataques?

¿Existe una solución milagrosa que pueda proteger a los fabricantes de estos ataques? Echemos un vistazo a algunas de las vulnerabilidades más peligrosas y sus posibles mitigaciones.

El Santo Grial de las vulnerabilidades: RCE

La mayoría de los profesionales de TI están familiarizados con el concepto de ejecución remota de código (RCE), que es una de las amenazas a la seguridad del firmware más temidas. Si un atacante puede aprovechar una vulnerabilidad de RCE, obtiene el control total del dispositivo o dispositivos y potencialmente puede crear una botnet.

Además, los atacantes pueden robar datos de los usuarios o realizar espionaje contra varios fabricantes. Básicamente, un atacante puede lograr cualquier resultado que desee.

Surge la pregunta: ¿Cómo pueden los atacantes encontrar vulnerabilidades RCE en los dispositivos y qué tipos pueden provocar RCE?

Veamos los más comunes.

  • Omisión de autenticación: Los atacantes pueden eludir los mecanismos de autenticación en los dispositivos de IoT que utilizan contraseñas débiles o predeterminadas. A veces, pueden aprovechar errores lógicos o eludir controles de seguridad específicos. Varias técnicas pueden provocar una omisión de autenticación, incluidas contraseñas predeterminadas, ataques de fuerza bruta, vulnerabilidades de red o vulnerabilidades de firmware.
  • Desbordamientos de búfer: Una vulnerabilidad de desbordamiento del búfer ocurre cuando un programa intenta almacenar más datos en un búfer de los que puede contener, lo que provoca que los datos se desborden hacia ubicaciones de memoria adyacentes. Un atacante puede aprovechar esta vulnerabilidad creando datos de entrada que desbordan el búfer y sobrescriben ubicaciones de memoria adyacentes con código malicioso.
  • Defectos de inyección: Las fallas de inyección ocurren cuando un atacante puede inyectar código malicioso en un dispositivo IoT a través de entradas o interfaces no seguras, como un formulario web o API.

Profundizaremos en cada uno de estos.

Omisión de autenticación

La autenticación es un aspecto crucial de la seguridad en los sistemas integrados. Garantiza que sólo las personas autorizadas puedan acceder al dispositivo y sus funcionalidades.

La omisión de autenticación se refiere a una situación en la que un atacante puede acceder a un dispositivo sin proporcionar las credenciales de autenticación necesarias, como un nombre de usuario y una contraseña. Esta vulnerabilidad de seguridad permite a los atacantes obtener control del dispositivo y sus funcionalidades, lo que podría causar daños al dispositivo o acceder a datos confidenciales.

Existen varias técnicas que los atacantes pueden utilizar para eludir la autenticación. Un método estándar es explotar contraseñas predeterminadas o débiles. Muchos dispositivos IoT tienen credenciales de inicio de sesión predeterminadas que son ampliamente conocidas y se pueden encontrar fácilmente en línea.

Los atacantes pueden utilizar esta información para acceder al dispositivo sin pasar por el proceso de autenticación. También pueden utilizar ataques de fuerza bruta para adivinar contraseñas débiles.

Otro método para lograr eludir la autenticación implica explotar las vulnerabilidades del firmware. Por ejemplo, esto puede ocurrir mediante la utilización de una versión vulnerable de software de código abierto o mediante un error lógico en el flujo de autenticación.

Además, se pueden aprovechar las vulnerabilidades de la red para evitar la autenticación. Los atacantes pueden interceptar el tráfico de la red para capturar las credenciales de inicio de sesión o utilizar ataques de intermediario para hacerse pasar por el dispositivo y eludir la autenticación.

Mitigación de omisión de autenticación

Es esencial cambiar las credenciales de inicio de sesión predeterminadas y usar Contraseñas seguras. Las contraseñas seguras deben contener letras mayúsculas y minúsculas, números y símbolos y tener 12 caracteres.

En segundo lugar, manténgase actualizado sobre todos los componentes de código abierto de terceros que utiliza en su producto.

En tercer lugar, proteger la red es crucial para mitigar la omisión de autenticación. Esto se puede lograr implementando protocolos de comunicación seguros, como HTTPS o TLS, para cifrar el tráfico de la red. Por último, realice pruebas de penetración periódicamente en cada lanzamiento de nuevo producto.

Desbordamiento de búfer

El desbordamiento de búfer es una de las vulnerabilidades más conocidas y frecuentes en los sistemas de software. Estas vulnerabilidades pueden ocurrir por varias razones. Una causa común es la falta de validación de entrada en un programa, lo que permite a un atacante ingresar datos mayores que el tamaño del búfer asignado.

Esto puede llevar a una situación en la que el exceso de datos sobrescriba ubicaciones de memoria adyacentes, lo que provocará fallos o comportamientos inesperados. Otra causa de vulnerabilidades de desbordamiento del búfer es el uso de funciones inseguras que no realizan verificación de límites, como strcpy y strcat. Demostraremos un error de desbordamiento del búfer en un escenario de la vida real.

Para ello utilizaremos DVRF (maldito firmware de enrutador vulnerable) como nuestro objetivo. Después de colocar el firmware en nuestra plataforma, extraerá la imagen y descompilará cada binario para buscar posibles vulnerabilidades.

Elegimos este objetivo porque es accesible para todos y no queremos comprometer el firmware de ningún fabricante disponible públicamente.

Como vemos aquí, el programa toma dos argumentos enteros, parámetro_1parámetro_2y declara una variable local llamada local_200 De tipo undefined2 (un entero sin signo de 2 bytes o 16 bits). También muestra una matriz llamada auStack510 de tamaño 502 bytes.

Luego el programa utiliza el memset () función para configurar todos los bytes en auStack510 a cero. Después de eso, verifica si el valor de parámetro_1 es menor que 2. Si es así, el programa imprime un mensaje de uso y sale con un código de error 1.

If parámetro_1 es mayor o igual a 2, el programa imprime un mensaje de bienvenida y copia el contenido de una cadena apuntada por el segundo argumento _(*(carbonizarse)(param_2 + 4))_** en local_200 usando el strcpy () función. Aquí es donde reside la vulnerabilidad de desbordamiento del búfer.

Si la cadena a la que apunta el segundo argumento tiene más de 16 bytes (el tamaño de local_200), el strcpy () La función escribirá más allá del final del local_200 buffer y sobrescribe el contenido del adyacente auStack510 tampón.

Esto puede provocar un comportamiento impredecible, incluido el bloqueo del programa o permitir que un atacante ejecute código malicioso a partir de vulnerabilidades del firmware.

Para evitar este tipo de ataque de desbordamiento del búfer, es esencial utilizar funciones que limiten la cantidad de datos escritos en un búfer, como strncpy () or snprintf (). Además, los programas deben compilarse con protecciones de desbordamiento del búfer, como apilar canarios y aleatorización del diseño del espacio de direcciones (ASLR, fASLR).

Inyecciones de comando

La inyección de comandos es un ataque en el que un atacante inyecta código malicioso en un shell de comandos para ejecutar comandos arbitrarios en el dispositivo de destino. Este ataque se puede llevar a cabo de muchas maneras, incluso a través de interfaces web, campos de entrada y API.

En el firmware, la inyección de comandos a menudo se realiza a través de interfaces web o API, ya que estas son formas comunes para que los usuarios interactúen con el dispositivo.

Las implicaciones de la inyección de comandos en el firmware pueden ser graves. Un atacante que inyecta código con éxito en un shell de comandos puede ejecutar comandos arbitrarios en el dispositivo de destino.

Esto puede permitir que un atacante obtenga acceso a datos confidenciales, controle el dispositivo e incluso lance ataques contra otros dispositivos en la red. Además, la inyección de comandos puede ser difícil de detectar, ya que a menudo aparece como tráfico legítimo.

Este código parece ser una función llamada wsc_generate_pin que genera un PIN de configuración protegida de Wi-Fi (WPS). El PIN WPS es un número de ocho dígitos que se utiliza para autenticar un dispositivo inalámbrico en una red Wi-Fi.

Sin embargo, existe una posible vulnerabilidad de inyección de comandos en este código. La vulnerabilidad surge del uso de la función del sistema, que ejecuta un comando de shell. Específicamente, el correr La función se utiliza para construir una cadena de comando que luego se pasa al sistema sin una validación o desinfección adecuada de la entrada.

El código vulnerable es la línea resaltada:

Este código construye un comando de shell que escribe el valor de local_18 En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. / dev / random archivo. Si un atacante puede controlar el valor de local_18, pueden inyectar comandos de shell adicionales en el acStack141 buffer, lo que lleva a la ejecución de código arbitrario. Dado que esta variable proviene del usuario (WPS Pin), esta vulnerabilidad es explotable.

Para evitar esta vulnerabilidad, es esencial validar y desinfectar adecuadamente todas las entradas utilizadas para construir comandos de shell. La validación de entrada se puede realizar mediante expresiones regulares o filtrado de lista blanca.

El filtrado de lista blanca implica definir un conjunto permitido de caracteres o valores que la entrada puede contener. Los desarrolladores también deben limitar la cantidad de caracteres que puede tener la entrada para evitar ataques de desbordamiento del búfer, como se analizó anteriormente.

El desafío de la seguridad de IoT

Entendemos que la seguridad de IoT es un desafío importante y muchos fabricantes enfrentan dificultades para contratar profesionales de seguridad en este campo. Al implementar las técnicas de mitigación mencionadas anteriormente, puede tomar medidas sustanciales para proteger sus dispositivos.

Además, recomendamos encarecidamente utilizar indicadores de refuerzo en tiempo de compilación como el paso inicial más sencillo en el proceso de mejora de la seguridad.

Realizar auditorías y pruebas de seguridad periódicas también es esencial para identificar posibles vulnerabilidades y abordarlas con prontitud. Para lograr esto, recomendamos utilizar laboratorios de seguridad de terceros o, como mínimo, utilizar herramientas de análisis de firmware.

punto_img

Información más reciente

punto_img