domingo, 27 de febrero de 2022

Hacking Ético

 


METODOLOGÍAS PRINCIPALES
OSSTMM (Open-Source Security Testing Methodology Manual):
The Penetration Testing Execution Standard:
ISSAF (Information Systems Security Assessment Framework) 
OTP (OWASP Testitng Project)
Santiago Hernández Ramos

METODOLOGÍA DE ESTE CURSO
  • Definición del alcance del test de penetración Recopilación de información
  • Identificación y análisis de vulnerabilidades Explotación de las vulnerabilidades
  • Post-explotación
  • Elaboración de un documento de reporte
DEFINICIÓN DEL ALCANCE DEL HACKING ÉTICO
Antes de realizar ninguna acción, discutir con el cliente las tareas que llevará a cabo el analista durante el Hacking Ético, así como los roles y responsabilidades de ambos
Asegurar mediante contrato firmado que las acciones que se llevan a cabo son en representación del cliente
Análisis de las políticas de la organización que definen el uso que los usuarios hacen de los sistemas y de la infraestructura
Procedimiento en el caso de que se localice una intrusión por un tercero

Disclaimer



Este blog representa una traducción libre al Castellano del libro  Practical Hardware Pentesting: A guide to attacking embedded systems and protecting them against the most common hardware attacks. Jean-Georges Valle, Packt, Abril 2021”.
La intención de este blog es poner en práctica el contenido del libro, apoyándose para ello de un canal de YouTube, donde se realizarán las practicas descritas por el libro. 
La traducción que se representa en este blog es una traducción personal y libre para la comunidad de habla hispana que pueda estar interesada en adquirir los. Conocimientos de este libro.
No se traduce todo el libro sino las partes que el autor del blog y del canal de YouTube considera imprescindibles para realización de las prácticas y el conocimiento subyacente. 
Este blog no se hace responsable del uso que los usuarios hagan de este conocimiento, tampoco de los posibles accidentes que la realización de estas prácticas puedan producir en caso de no realizarse bajo las medidas de seguridad pertinentes descritas en el libro. 
El autor de este blog, recomienda adquirir el libro para acceder al conocimiento completo que el autor comparte en el. 

Entender el objetivo

Capítulo 2: Entender el objetivo

Cuando observamos el estado actual de los desarrollos en hardware, podemos ver que los desarrolladores se basan en dos supuestos:

·        El hardware es de confianza.

·        Un atacante no atacará el hardware para amenazar el software y el ecosistema.

 Sin embargo, si observamos la situación actual, podemos ver que estas premisas ya no son ciertas. Tenemos coches, teléfonos, televisores y otros dispositivos, y los conocimientos sobre este hardware ya no están reservados a un puñado de ingenieros eléctricos. No sólo ese conocimiento está ahora extendido y es accesible, gracias a Internet, sino que el coste de las herramientas necesarias para montar ataques al hardware ha bajado drásticamente.

Atacar el hardware no sólo es interesante porque las suposiciones de confianza sobre las que se construye la seguridad del software y del ecosistema ya no se sostienen realmente (y, por tanto, representan un eslabón débil en la cadena de seguridad), sino porque existe una relación directa y física con el sistema. Soldar, cortar y taladrar son formas de establecer una relación más directa con los sistemas que pasar horas puramente codificando y significan que interactuaremos a un nivel mucho más profundo e íntimo de la funcionalidad del sistema. Ahora bien, ¿cómo funcionan estos sistemas? Antes de coger tu soldador de confianza, hablemos de los grandes bloques que componen un sistema embebido (o un ordenador en general). Todos los sistemas embebidos comparten bloques funcionales comunes (es decir, grupos de componentes que cumplen una función). Estos bloques interactúan entre sí para proporcionar la funcionalidad del producto. En este capítulo, repasaremos los bloques funcionales y explicaremos qué funcionalidad proporcionan. Verás que estos bloques también se encuentran en sistemas más clásicos (es decir, no integrados). Saber cuáles son los bloques típicos de un sistema y cómo interactúan entre sí le ayudará a comprender cómo su sistema de destino funciona.

 El conocimiento de estas interacciones será importante, desde el punto de vista del Pentesting, para entender cómo proporcionan propiedades de seguridad y para ayudarle a encontrar problemas de seguridad. En este capítulo se tratarán los siguientes temas:

·        El bloque de la CPU

·        El bloque de almacenamiento

·        El bloque de energía

·        Los bloques de red

·        Los bloques de sensores

·        Los bloques de actuadores

·        Los bloques de interfaz

 

El bloque de la CPU

El objetivo de la CPU es procesar información. Es el núcleo del sistema y es su objetivo final en una prueba de penetración. En el En la gran mayoría de los casos, las CPUs que se van a probar tendrán una arquitectura von Neumann (es decir, el bus para datos e instrucciones es compartido) y raramente una arquitectura Harvard(un bus separado para datos e instrucciones). Desde el punto de vista de las pruebas de penetración, las arquitecturas Harvard están menos expuestas a los desbordamientos de búfer, ya que estos búferes suelen contener datos que normalmente no se pueden ejecutar.

Funciones de la CPU

 La propia CPU realizará las siguientes actividades:

·        Ejecutar las diferentes instrucciones aritméticas y lógicas, como la suma, la multiplicación, la resta, la división, etc.

·        Leer y escribir en la memoria

·        Gestionar los diferentes periféricos hardware que lleva integrados, como UART, SPI, periféricos criptográficos, periféricos de almacenamiento, etc.

·        Reaccionar a las interrupciones de los periféricos hardware integrados y comunicarse con ellos.

Arquitecturas comunes de los sistemas embebidos

En el mundo de la informática general, las arquitecturas x86 (y sus implementaciones modernas que se encuentran en la mayoría de los ordenadores) dominan ampliamente el mercado (es la arquitectura que se encuentra en la mayoría de los PC). Sin embargo, esta arquitectura tiene sus limitaciones, lo que hace que no siempre sea adecuada para los sistemas embebidos (principalmente por sus requisitos de potencia y su precio). La arquitectura de un procesador se compone de las instrucciones y operaciones que acepta la CPU (denominada arquitectura del conjunto de instrucciones Instruction Set Architecture (ISA)) y de cómo se interpretan para impulsar el procesamiento de datos. Básicamente, detalla qué decirle al procesador, ya sea para hacer una suma, una resta, leer y escribir en la memoria, etc. La ISA es la descripción de la arquitectura: La lista de las instrucciones que acepta la CPU (qué hacen y cómo) La descripción de los diferentes registros y cómo influyen en el comportamiento del procesamiento de datos La descripción de una ISA y de la arquitectura es un gran corpus de datos y documentación que estudiarás dependiendo de tu objetivo actual. No es mi objetivo aquí describir en profundidad cómo se comportan las diferentes arquitecturas en detalle (eso llenaría el libro, siendo todo su contenido, y lo haría bastante aburrido). Haré un repaso de las arquitecturas más comunes que se encuentran en el mundo embebido para que conozcas su existencia y sus principales características pero, si necesitas profundizar en el nivel de la arquitectura, tendrás que estudiar los detalles por tu cuenta.

 ARM

Acorn RISC Machine (ARM) es una arquitectura von Neumann con dos modos de ejecución con características diferentes :

Modo Thumb:

- Es una ISA de 16 bits de instrucciones, 32 bits de datos (pero la extensión Thumb-2 añadió algunas instrucciones de 32 bits para proporcionar funciones equivalentes a las instrucciones ARM).

 - El código es muy compacto ya que las instrucciones son de 16 bits.

 Modo ARM:

 - Instrucciones de 32 bits

- Disponible en sabores de 64 y 32 bits (las instrucciones siguen siendo las mismas; esto cambia principalmente el tamaño de los operandos)

 Esta es una arquitectura muy popular ya que el modelo de negocio de ARM hace que sea muy fácil crear CPUs con un conjunto de periféricos de acompañamiento que están dirigidos a una aplicación específica (por ejemplo, para un teléfono, se podría hacer una CPU a la medida de sus necesidades (por unos pocos millones de dólares) con un controlador de pantalla táctil, entradas para un micrófono, un periférico para manejar la RAM, el almacenamiento flash, y más, y para un controlador de calefacción mucho más barato - algo con sólo unos pocos temporizadores, algunas entradas/salidas básicas, y eso es todo). ARM es en realidad un proveedor fabless (sin fabricación). ARM diseña en realidad el núcleo de la CPU y licencia el diseño del núcleo a otros vendedores que en realidad ponen periféricos a su alrededor y fabrican (o hacen que los fabrique un tercero) los chips finales. Esta es la arquitectura que da vida a la mayoría de los smartphones, televisores y mucha electrónica de consumo actuales.

MIPS

Microprocessor without Interlocked Pipeline Stages (MIPS)

El microprocesador MIPS sin etapas de tuberías entrelazadas (MIPS) es una arquitectura que suele estar presente en los equipos de red (routers, conmutadores, etc.) y en algunos productos de consumo (PSP, routers por cable, etc.). Esta arquitectura de tipo von Neumann está disponible en variantes de 32 y 64 bits. La arquitectura admite coprocesadores de forma nativa. Estos coprocesadores se utilizan para la aceleración por hardware de aplicaciones específicas. A finales de 2018, Wave Computing, el nuevo propietario de la arquitectura MIPS, anunció la apertura de la ISA para 2019 para competir con otras arquitecturas de código abierto, como Reduced Instruction Set Computer V, también conocida como RISC-V.

Atmel AVR

La arquitectura Atmel AVR (presente en ATtiny, ATmega, etc.) es una arquitectura RISC de 8 a 16 bits de tipo Harvard. Suele estar presente en bienes de consumo de baja potencia del tipo Internet de las Cosas/embebido y en sistemas industriales antiguos. Es la arquitectura que alimenta la mayoría de las placas de desarrollo tipo Arduino. Familiarizarse con los MCU de esta arquitectura es muy práctico para desarrollar herramientas de ataque rápidas y baratas.

PIC

 La familia de microcontroladores PIC (fabricados por la empresa Microchip) es una arquitectura de tipo Harvard, disponible desde implementaciones ISA de 8 a 32 bits. El precio relativamente bajo de la familia PIC garantiza su presencia generalizada en dispositivos de bajo coste y baja potencia de procesamiento.

RISC-V

La arquitectura de silicio RISC-V (que se pronuncia risk-five) (y su ISA acompañante OpenRISC de código abierto) es totalmente de código abierto y, a partir de 2019, ha sido implementada físicamente por múltiples empresas. Debido a la naturaleza de código abierto de la ISA, se utiliza ampliamente en contextos académicos (por ejemplo, yo aprendí los fundamentos de la arquitectura de la CPU en la universidad con un montón de ejemplos de RISC I) y se cree que se convertirá en un importante competidor de ARM, gracias a la naturaleza libre de derechos de la ISA. Los grandes proveedores de MCUs especializados ya han anunciado la migración de sus líneas hacia RISC-V (Marvell, Western Digital, etc.). Se trata de una arquitectura von Neumann disponible en 32 y 64 bits y, en el futuro, también en longitud de palabra de 128 bits.

Otras arquitecturas

 Hay muchas otras arquitecturas en el mercado (HC8, Blackfin, etc.). Son menos comunes o están más dirigidas a mercados especializados. Pruebas en estas infraestructuras requiere una colaboración más estrecha o una mayor inversión en investigación debido a su carácter menos documentado o más cerrado.

Information box Check the list of CPU architectures described at https://en.wikipedia.org/wiki/Comparison_of_instruction_set_architectures

if you want to know more.

 

 

El bloque de almacenamiento

Los bloques de almacenamiento son componentes (o grupos de componentes) utilizados para almacenar información. Siempre hay dos bloques de almacenamiento, la memoria RAM (en las MCUs de gama baja, suele estar en el propio chip de la CPU y en las MCUs de gama alta, está fuera del chip) y el almacenamiento de programas. Puede haber algún tipo de almacenamiento adicional a largo plazo (normalmente como memoria flash en los sistemas modernos, pero puede variar desde discos duros giratorios, EEPROMs, hasta ROMs de matriz de diodos en sistemas más antiguos).

RAM

La RAM es una memoria muy rápida y estrechamente acoplada a la CPU (y normalmente más cara). Es el lugar desde donde la CPU suele obtener sus instrucciones, almacena los resultados a corto plazo de sus operaciones (luego se guardan a largo plazo en un medio de almacenamiento más lento y barato, como la memoria flash), etc. Las principales características de la RAM en los sistemas actuales son las siguientes Es muy rápida en comparación con el almacenamiento a largo plazo (por ejemplo, EEPROM, flash o un disco duro) Es mucho más cara en comparación con el almacenamiento a largo plazo (por ejemplo, EEPROM, flash o un disco duro) Pierde su contenido en caso de pérdida de energía (lo que se denomina memoria volátil) Con el avance de la investigación en torno a un nuevo tipo de memoria rápida no volátil (principalmente FRAM), este paradigma podría cambiar en los próximos años. Desde el punto de vista del pentesting, ser capaz de volcar la RAM puede permitirnos encontrar piezas de datos de interés como bits de código descifrados, material criptográfico, etc.

Almacenamiento de programas

Es una memoria más lenta, no volátil y más barata. Esta memoria (normalmente flash en los MCUs modernos, pero esta es una de las funciones del disco duro en un ordenador normal) almacena las instrucciones que la CPU obtendrá y ejecutará después de su secuencia de arranque. Algunas arquitecturas e implementaciones obtendrán y ejecutarán los datos directamente desde ella; otras tendrán un mecanismo de transferencia de RAM antes de ejecutar las instrucciones. Dependiendo del sistema, esto puede ser externo al chip de la CPU, pero siempre es interesante volcarlo desde el punto de vista de las pruebas de penetración, ya que el código (y a veces otros datos de interés) se encuentra aquí.

Almacenamiento de datos

El almacenamiento de datos puede hacerse en la RAM para su retención a corto plazo. El medio de almacenamiento puede ser externo o interno al chip de la CPU (cuando es interno, suele utilizar una parte del mismo medio que se utiliza para el almacenamiento del programa). El almacenamiento externo  usualmente  tiene la forma de una EEPROM de serie o I2C en los sistemas pequeños. Los sistemas más grandes pueden llevar casi cualquier tipo de almacenamiento, desde las EEPROM más pequeñas hasta los discos duros o SSD de nivel empresarial. Las formas de almacenamiento más grandes (más de un puñado de megabytes) suelen incorporar algún tipo de sistema de archivos o sistema de "empaquetado" interno para el firmware. Esta forma de empaquetado suele utilizarse para organizar el contenido, comprimiendo o reduciendo el tamaño del almacenamiento (eliminando las cabeceras innecesarias de los archivos).

El bloque de potencia

 La función del bloque de potencia es alimentar las diferentes partes y subsistemas del sistema. Es de suma importancia que la sección de energía se aborde tomando muchas precauciones y utilizando protección. Algunos de los sistemas que probarás expondrán voltajes o componentes peligrosos. Ninguna prueba es lo suficientemente importante como para correr el riesgo de mutilarse o matarse. Vivir para poder hacer más pruebas y volver con tu familia sano y salvo es la parte más importante de tu trabajo como probador de penetración de hardware.

El bloque de potencia desde el punto de vista del pentesting

Desde el punto de vista del pentesting, el estudio del bloque de potencia le permitirá identificar los diferentes niveles de tensión utilizados dentro del sistema. No asuma que todo ocurre en un solo espacio físico; en los sistemas modernos, es muy común que los carriles de alimentación distribuyan la energía a través del sistema con un voltaje más alto, fuentes de electricidad más potentes y una regulación local que está físicamente cerca de los componentes de consumo. Esto permite reducir el riesgo de que el ruido eléctrico perturbe a los componentes que comparten el mismo raíl de alimentación. Algunos ataques avanzados (por ejemplo, el glitching o el análisis de potencia diferencial) tienen como objetivo el bloque de potencia. Este tipo de ataques no se tratarán en este libro, ya que requieren una comprensión firme de cómo se comporta la CPU con respecto a la energía.

Si estás interesado en este tipo de ataques de potencia, busca en el análisis de potencia diferencial y en la inyección de fallos (glitching). El sitio web de Colin O'Flynn es un buen punto de partida para la teoría, el software y el hardware relacionados con esto.

Los bloques de red

 El bloque de red permite que el sistema se comunique. Esta comunicación puede realizarse con otros sistemas (red de malla), con sensores o con el backend del sistema. Existe una gran variedad de medios de transporte físicos (cableados o no) para los protocolos sobre estas capas. Los escenarios típicos interesantes a nivel de red tienen que ver con la violación de la confianza entre el sistema y sus compañeros de comunicación. Desde el punto de vista del sistema, lo típico es escuchar el tráfico como primer paso para evaluar la seguridad de la comunicación con su par para verificar lo difícil que es suplantar a un par, por ejemplo:

·        Se estudiará la suplantación de un sensor remoto para engañar al sistema y conseguir datos falsos o para evaluar la capacidad del sistema para manejar información malformada.

·        Intentaremos suplantar el backend para distribuir actualizaciones de firmware maliciosas para evaluar la posibilidad de aprovechar el sistema para actividades nefastas.

 Desde el punto de vista de los pares, procederemos con el mismo estado para evaluar la posibilidad de suplantar el sistema. Por ejemplo, estudiaremos la suplantación del sistema para hacer lo siguiente:

·        Evaluar la posibilidad de informar de datos erróneos al backend

·        Recoger actualizaciones de firmware para su posterior análisis

 

 

 Protocolos de red comunes en sistemas embebidos

Esta sección cubre diferentes (pero no todos...) protocolos de red comúnmente utilizados en los sistemas embebidos. Se clasifican a su vez como sigue:

*     Capas físicas: Las capas físicas se encargan de la señal real que transporta la información.

*     Capas de transporte: Las capas de transporte se encargan de los aspectos relacionados con... lo has adivinado... el transporte de la información (llamada carga útil). Este modelo permite encapsular la información, permitiendo cambiar, a posteriori, qué se transporta o qué transporta qué.

*     Capas lógicas: Las capas lógicas (por decirlo de forma sencilla, consulta el modelo de capas OSI si quieres más detalles sobre cómo se cortan las cosas) son lo que finalmente se transporta y la lógica adjunta a ello.

El bloque de red puede adoptar diferentes formas. Echemos un vistazo a las formas más comunes de conexión en red en los sistemas embebidos.

 Bluetooth/BLE

Bluetooth y BLE se utilizan principalmente para conectar sistemas a corta distancia (según la clase de dispositivo, desde 10 cm para la clase 3 hasta 100 m para la clase 1). Utiliza un sistema de 24 canales (o 23, según la normativa del país) en una frecuencia de 2,4 a 2,48 GHz. BLE y BT2.0 tienen como objetivo reducir el consumo de energía. Utilizan una técnica de salto de frecuencia para evitar las interferencias. Este salto de frecuencia hace que el rastreo de Bluetooth sea un poco menos sencillo que el de otras capas de radio más simples. La función normal de Bluetooth requiere el emparejamiento de los dispositivos (a menos que el dispositivo no tenga interfaz humana, como los auriculares y similares). Este emparejamiento (opcional en BLE) permite a los dispositivos intercambiar las claves utilizadas para cifrar la comunicación.

 Servicios Bluetooth

Los servicios Bluetooth son submódulos del protocolo que proporcionan al dispositivo que consume la interfaz Bluetooth diferentes funcionalidades. Veamos estas funcionalidades.

SDP  (Service Discovery Protocol)

El Protocolo de Descubrimiento de Servicios (SDP) permite descubrir los servicios y perfiles disponibles en el dispositivo. Esto puede revelar servicios no estándar que puede valer la pena investigar.

 RFCOMM (RadioFrequency COMunication)

El servicio de comunicación por radiofrecuencia (RFCOMM) actúa como medio de comunicación entre un dispositivo y un punto final o un intermediario. Permite al cliente conectarse al dispositivo a través de una conexión en serie. Dependiendo del dispositivo, puede prestarle una conexión a un shell en el sistema operativo subyacente, una conexión que espera comandos AT o interfaces más específicas.

 OBEX ( Object Exchange )

 La capa OBject EXchange (OBEX) permite a los dispositivos Bluetooth intercambiar objetos a través de un protocolo orientado a la conexión. Los objetos pueden transmitirse bidireccionalmente a través de diferentes protocolos sobre OBEX. Se pueden transferir archivos al sistema de archivos del servidor a través de FTP, acceder a los contactos de la agenda telefónica a través del protocolo de acceso a la misma, etc.

 

Ethernet

 Ethernet es el conocido conector de red que se encuentra en la parte trasera de casi todos los ordenadores. El rastreo es fácil con un software de rastreo de red normal (Wireshark) y la disponibilidad de herramientas de ataque comunes facilitará el ataque al sistema. En un contexto de pentesting, el hecho de que proporcionemos la conectividad al sistema también facilitará las fases de recolección y ataque.

Wi-Fi

 Wi-Fi es una tecnología de consumo muy popular. Su omnipresencia también garantiza que las herramientas de ataque (hardware y software) estén ampliamente disponibles. En un contexto de pentesting, el hecho de que proporcionemos la conectividad al sistema también facilitará las fases de recolección y ataque. El Wi-Fi ofrece al usuario múltiples modos de cifrado (opcionales) (WPA, WPA2, etc.), incluyendo uno totalmente roto (WEP).

IPv4/IPv6

Tanto IPv4 como IPv6 son protocolos muy conocidos que permiten el transporte de cargas útiles aplicativas. IPv4 tiene un espacio de direcciones de 32 bits e IPv6 tiene un espacio de direcciones de 128 bits. Ambos protocolos están ampliamente documentados y se dispone de una plétora de herramientas de ataque.

Protocolos de la banda ISM  (Industrial, Scientific, and Medical)

La banda Industrial, Científica y Médica (ISM) es un conjunto de frecuencias de radio que se pueden utilizar libremente, bajo ciertas condiciones, sin necesidad de tener una licencia válida de operador de radio. Algunas de estas frecuencias están reservadas para algunos usos específicos y pueden o no ser de uso libre en su país. Por favor, compruebe con su autoridad local de radiocomunicaciones antes de hacer nada (el dispositivo que está probando podría utilizar frecuencias que no están permitidas en su propio país).

 Zigbee

Zigbee se basa en IEEE 802.15.4 como capa física. Este estándar puede utilizar diferentes frecuencias (en función de la ubicación):


Zigbee se utiliza a menudo para la automatización de locales y puede emplearse tanto en topologías de estrella (con un nodo central y ramas) como de malla (con una red de nodos). El principal caso de uso de Zigbee está relacionado con su bajísimo consumo de energía (su primo, Z-Wave, opera en una banda ISM inferior de 800-900 MHz y es más lento). Se trata de un protocolo bastante maduro, que suele utilizarse para sistemas alimentados por batería, donde la duración de la misma es un aspecto crucial del producto. La seguridad de Zigbee se basa principalmente en su configuración de cifrado opcional.

 

LoRa

 LoRaWAN es una red de topología en estrella que utiliza una técnica de espectro ensanchado chirp para lograr el transporte de pequeños paquetes de datos a largas distancias con un presupuesto de energía muy reducido. Tiene diferentes velocidades de datos (y, por tanto, diferentes perfiles de  consumo de energía) que se pueden seleccionar. Puede utilizar un esquema de modulación propio (que se ha invertido) o una modulación por desplazamiento de frecuencia (FSK) para velocidades de datos más altas. La seguridad del sistema se basa en una clave AES de 128 bits para la integridad y autentificación de los mensajes. Los dispositivos y la aplicación se identifican con una clave de 64 bits.

 LoRa utiliza diferentes canales y frecuencias según la región geográfica:



Caja de información LoRa es una pila de capas físicas y de transporte.

Sigfox

 Sigfox es también una red de topología en estrella. Utiliza tanto Gaussian Frequency Shift Keying (GFSK),utilizado para el enlace descendente, como Differential Binary Phase Shift Keying (DBPSK), utilizado para los esquemas de modulación de enlace ascendente para lograr el mismo objetivo que LoRaWAN (es decir, la transmisión de largo alcance y bajo consumo de mensajes cortos). No soporta de forma nativa el cifrado a nivel de red, pero aun así, los mensajes se autentifican con una clave de naturaleza desconocida en el momento de escribir este libro. En el modelo de transmisión de Sigfox, cada comunicación es iniciada por el dispositivo, lo que limita el plazo para que un atacante emita un mensaje hacia el dispositivo (aunque el mensaje de bajada también se autentifica con una clave de red, lo que hace que el dispositivo esté protegido contra simples ataques de red en el momento de escribir este libro).

Aquí están las frecuencias de Sigfox en función de su ubicación:



Sigfox es una pila de capas físicas y de transporte.

 

HyperText Transport Protocol (HTTP)

El Protocolo de Transporte de Hipertexto (HTTP) es un protocolo de texto claro que es muy fácil de desplegar (utilizando un simple servidor web). Su uso en sí mismo es una vulnerabilidad, ya que el tráfico es fácilmente modificable y legible por un atacante que utilice herramientas básicas.

HyperText Transport Protocol with Security (HTTPS)

Protocolo de transporte de hipertexto con seguridad (HTTPS) Se trata de una versión cifrada y autentificada de HTTP. En su uso básico, la parte de autenticación sólo garantiza que las partes implicadas son realmente aquellas con las que se ha establecido la conexión. Para garantizar que el servidor es realmente el que pretende ser, se requiere que los certificados que se presentan durante el establecimiento de la conexión estén firmados por una autoridad de certificación externa de confianza (lo que se denomina cadena de certificados). Garantizar que el cliente es realmente de confianza requiere alguna forma adicional de autenticación. La capa de seguridad HTTPS se basa en SSL/TLS, que proporciona una forma integrada de autenticar a los clientes a través de el uso de certificados de cliente. No es raro que los dispositivos integrados validen la cadena de certificados de forma incorrecta.

Colas de mensajes

 Los servicios de colas de mensajes permiten el envío y la recepción de mensajes hacia y desde un dispositivo. Para ello se utilizan muchas aplicaciones abiertas o cerradas muy populares (RabbitMQ, MQTT, Apache ActiveMQ y otras). Estos servicios suelen autenticar a los clientes con una clave criptográfica o con combinaciones de nombre de usuario y contraseña. Un problema muy común es la reutilización de estos factores de autenticación en todos los dispositivos (la identificación del dispositivo se deja a otros medios), lo que permite la suplantación de cualquier dispositivo si se roban las credenciales en un solo dispositivo.

 NFC Near Field Communication

La comunicación de campo cercano (NFC) es un campo magnético modulado que permite la comunicación a distancias muy cortas (y también puede alimentar un dispositivo pasivo como una tarjeta o una etiqueta que no tenga una fuente de energía local). Se trata de una interesante vía de comunicación para para burlar algunos dispositivos de control de acceso físico, por ejemplo.

Los bloques de sensores

 Los sensores proporcionan a la CPU información del mundo real. Los sensores son periféricos externos que permiten al sistema percibir el mundo real. Normalmente se dividen en dos categorías:

  •    Sensores analógicos
  • Sensores digitales
  • SeSensores analógicos

Los sensores analógicos suelen provocar un cambio en sus características eléctricas (a través de una forma de divisor de tensión u otro efecto físico) en relación con la cantidad física que miden y proporcionan a la CPU una tensión variable (a veces amplificada). Esta tensión se lee a través de un convertidor analógico-digital (ADC), que es un periférico dentro del propio chip de la CPU o un chip externo.

Muchas características físicas del mundo real pueden leerse a través de sensores analógicos, como se muestra en la siguiente tabla:


Existe todo un campo de la ingeniería dedicado a la creación de sensores analógicos. Desde el punto de vista del pentesting, siempre es interesante investigar cómo funcionan, ya que a veces puede dar ideas creativas sobre cómo burlarlos o influir en ellos de forma maliciosa.

Sensores digitales

Los sensores digitales suelen ser un cómodo paquete construido alrededor de un sensor analógico. Liberan un ADC de la CPU (a costa de utilizar un lugar en un bus de comunicación). También liberan al desarrollador de tener que calibrar el sensor analógico y, a veces, de pasar por una caracterización que requiere mucho tiempo (y, por tanto, es costosa) fase. Estos tipos de sensores son tan diversos como los analógicos y también proporcionan una interfaz digital. Las interfaces periféricas más comunes que utilizan se describen en el Capítulo 6, Sniffing and Attacking the Most Common Protocols. Desde el punto de vista del pentesting, las entradas recibidas del sensor digital se consideran en gran medida de confianza y están muy bien definidas por los desarrolladores. Esto tiende a hacer que el código que maneja este tipo de entrada sea muy frágil.

 Los bloques de actuadores

 Los actuadores actúan realmente sobre el mundo (son las cosas que realmente hacen cosas que pueden ser percibidas por los humanos como "las cosas que hace el sistema", como activar el calentamiento, moverse, etc.). Estos son sus servos, sus motores, sus transistores de potencia, etc. Desde el punto de vista de las pruebas de penetración, interactuar con los actuadores puede ayudarte:

 

Recoger datos que permitan entender cómo funciona el sistema. A veces, los datos en sí mismos pueden ser interesantes de una manera creativa para exfiltrar estados internos del sistema (piensa en la extracción del firmware original del iPod 4G por Nils "nilss" Schneider, donde extrajo el cargador de arranque a través de un pitido piezoeléctrico - ¡qué guay!).

Algunos actuadores tienen un mecanismo de retroalimentación (por ejemplo, un sistema de detección de posición vinculado). La presencia de estos sensores puede no ser evidente al mirar los chips e interfaces relacionados con los sensores en la placa de circuito.

Dado que los bloques de actuadores son la forma en que el sistema actúa en el mundo real, hay que prestarles especial atención en los sistemas de seguridad crítica. Son una forma muy eficaz de hacer que el cliente se dé cuenta del posible impacto económico y de imagen que puede tener el compromiso de su dispositivo (hacer que el piloto automático de un barco cambie su rumbo hacia la costa o que una bomba de jeringuilla vacíe su contenido de golpe hará que el cliente sea muy consciente del impacto real de un compromiso).

Los bloques de interfaz

El bloque de interfaz engloba todos los subsistemas que proporcionan al usuario información, ya sea visual (pantallas, LED de estado, etc.) o táctil. Al igual que el bloque de actuadores, pueden aprovecharse como interfaces de exfiltración (normalmente de alta velocidad). Dependiendo de cómo se mire, se pueden clasificar aquí las interfaces dirigidas a la comunicación física/de bus punto a punto pura (serie, USB, etc.).

Enlaces y lecturas de interés

for example, Samy Kamkar's excellent talk at the Hackaday Supercon: https://www.youtube.com/watch?v=tlwXmNnXeSY

 or some fun x86 hardware backdoor at DEFCON: https://www.youtube.com/watch?v=jmTwlEh8L7g).

 Listen to the excellent Amp Hour podcast

 (https://theamphour.com/). 

___________________________________________


Descarga este capítulo en PDF


viernes, 4 de febrero de 2022

Vuex en 30 minutos

 Vuex es un patrón de administración de estado y una biblioteca, esto significa que Vuex nos permite almacenar todos nuestros datos y todos los métodos relacionados con obtener y cambiar esos datos en un solo lugar centralizado, este lugar centralizado es nuestro Vuex Strore.

Todos los componentes de nuestra aplicación tendrán acceso al store y por lo tanto a los datos y a los métodos. Pero, ¿Por qué necesitamos tener todos nuestros datos y métodos en un lugar centralizado? Bien, en una aplicación sencilla, puede no ser necesario el uso de Vuex pero, en una aplicación que sea más compleja será muy útil dividir la aplicación en componentes secundarios, esto puede llegar a complicarse mucho si nuestros datos y métodos se están almacenando en los diferentes componentes de vista ya que habrá que pasar muchos props de componentes padres a componentes hijos, se deberán desencadenar muchos eventos diferentes y al final la aplicación puede ser my complicada de entender, de mantener y de escalar.

Gracias Vuex no tendremos que preocuparnos de todo esto ya que todo estará centralizado y accesible para todos los componentes de nuestra aplicación, tanto los datos como los métodos.

En el siguiente PDF encontrarás un ejemplo completo de implementación y uso de Vuex, se trata de un ejemplo práctico para comprender qué es Vuex , que es el Store, que son las mutaciones, acciones, y cómo podemos trasladar nuestros datos métodos locales al store. 

Antes de iniciar la pequeña aplicación de ejemplo, se explica cómo instalar un proyecto Vue.js con CLI.