2020/09/27

Cronica de un ataque a un DVR hallado en la calle siguiendo la Cyber Kill Chain

En este artículo mostraré la planificación y recolección de información relacionada con reprogramar un dispositivo hallado en la calle:

 

Grabadora de video de vigilancia

Se trata de un sistema de vigilancia al que se le pueden conectar hasta ocho cámaras, usar de intercomunicador, grabar. Hasta donde ví entiendo que puede detectar movimientos y un montón de cosas más. Se lo puede acceder mediante una bontonera, mouse y monitor VGA o via red.

 

Objetivos

  • Tomar el pleno control del dispositivo. Esto significa:
    • Tener una terminal ssh o serial.
    • Tener root
    • Poder usar libremente los GPIO actualmente asociados a los botones del frente.
    • Mejor si el sistema completo sigue funcionando.
  • Aplicar lo que sé y aprender más, tanto por descubrirlo en el momento como buscarlo en distintas fuentes.

 

Deseos

Deseo instalarle un firmware modificado por mí, pero debido a:

  • Mis limitaciones
  • Falta de tiempo
  • Quizás no sea posible

debo armar una planificación realista. En mi mundo mágico sólo existe el Plan B, en el real, este es el orden:

 

Plan A: hallar una terminal existente en el firmware actual

Está limitado por la inexistencia de tal terminal y mi habilidad para hallarla

 

Plan B: modificar el firmware

Está limitado por la implimentación de firma de firmware y mi habilidad para modificarlo.


Plan C: hallar una vulnerabilidad

Me voy a aburrir y frustrar y no voy a llegar tan lejos.



Metodología

 

Como metodología intentaré usar Cyber Kill Chain. En criollo, le voy a poner etiquetas y orden a lo que hubiese hecho normalmente sin ton ni son. Este acercamiento disciplinado de paso me sirve para organizar y documentar.

  • Reconnaissance
  • Weaponization
  • Delivery
  • Exploitation
  • Installation
  • Command and control
  • Actions on objectives

 

Primera iteración 


Reconnaissance


Pasivo

Visualmente no parece haber nada roto, salvo que falta el disco, detalle menor. 

Tiene un lindo conector VGA y cables SATA cortos de datos, si termino rompiéndolo, serán prolijamente canibalizados. La batería no la puedo medir sin desarmar o sacarla, luego veremos.



Interior

 

La tensión de alimentación dice ser 12v, pero no dice la polaridad. Midiendo continuidad entre alguna tierra y el conector determiné lo normal, pin positivo.


Conectores

 

OSINT


El SOC es Hi 3520, tiene un pdf de casi mil páginas en chino. Digo chino de verdad, no que no entienda por que sea complicado. Por suerte también hay un brochure en inglés del cual se puede extraer que:

 

Diagrama blocues Hi5320

CPU: ARM1176 @600Mhz

MMU: puede correr un sistema operativo complejo

Security Engine: Implementing various encryption and decryption algorithms such as AES, DES, and 3DES through the hardware. Esto es malo, es más probable que los firmwares vengan firmados.

Por suerte "Hi3520 secure boot" ni "Hi3520 signed firmware" trajeron nada.

SDK: Providing the SDK based on Linux 2.6.24

Esto nos da un indicio del qué kernel puede haber.



Frente

Una etiqueta interna, tvb9808bs-f2, me trajo más información, pero ningún frente coincide por completo.

Existe un tvg9808b-f2 en  http://www.v-camip.com/product_show.asp?id=585, pero no cierran alguna características.


Hay un chip de memoria:



Memoria H5TQ2G63GFR-xxL



que es RAM. Mientras buscaba la ROM/EEPROM, como no la encontraba terminé de desarmar y encontré del otro lado otros chips:

 

PI101GR Transceptor Ethernet
PI101GR Transceptor Ethernet
 
 
 
 
24c02 eeprom
24c02 eeprom
 
 

25l12833f Serial NOR flash.png
25l12833f Serial NOR flash.png


y una etiqueta muy interesante:


Etiqueta TVI9808GS1
TVI9808GS1


Sumando:

  • TVI9808GS1_v1.03 con fecha 2019.06.24

  • Memoria H5TQ2G63GFR-xxL que dice ser DDR3

  • El brochure dice que usa memoria DDR2

 

La placa no es tan vieja como supuse, no coincide el tipo de memoria con la brochure. Entonces volví a buscar el SOC y con DRQCV300 tras varios saltos llegué a un brochure mucho mejor:

 


SOC
SOC


Datos actualizados 


CPU: Cortex A7 @ 800Mhz
 
Security Engine: AES, DES and #DES algorithms implemented by hardware, sin cambios

SDK: Linux 3.10-based SDK

Llegó la hora de volver a buscar el soc, esta vez como Hi3520dv300 y encontré algo muy atractivo, un dev board, de la traducción automática que muestra se destila que cuando pasemos a examinar el tráfico de red puede ser que hallemos cosas muy interesantes, como intentos de boot por red.
 
 

Dev board
Dev board

 
Además, dice venir con un SDK, si pudiera echarle mano... casi que pierde la gracia, no?


Activo presencial


Usando un monitor de descarte, la prendí:

 
arranque
arranque

La pila parece estar cargada pues tiene la fecha y hora bastante bien.

Le fuí agregando dispositivos, todo anda. Con respecto a la cámara, no me preguntes como identifiqué los cables pues esa cámara no sé de dónde la obtuve, sólo recuerdo que descifré el pin out para conectarla a una vieja macintosh que tenía capturadora de video y prolijamente guardé las notas que tomé en ese momento.


Cámara ok
Cámara ok


Interactuando con la GUI, obtuve los siguientes datos:


  • System: 1.02.023c0228.79415076.t000.6
  • Extra info: 1.40.101223
  • Build date: 2019-11-28 17:50:22
  • En network->TCP Port: 34567 
  • En system->RS232 me da a entender que hay un puerto serial, veremos...
  • Ofrece un upgrade, supongo que es como cambiar el firmware, veremos...

 

Red


Primero hice exploración total de puertos:

$nmap 192.168.1.127 -p 1-65535
 

Luego le pedí reconocimiento de servicios y sistema operativo:

$ nmap 192.168.1.127 -p 80,554,9527,9530,34567 -sV --version-all
PORT      STATE SERVICE       VERSION
80/tcp    open  http          uc-httpd/1.0.0
554/tcp   open  rtsp
9527/tcp  open  tcpwrapped
9530/tcp  open  unknown
34567/tcp open  dhanalakshmi?
3 services unrecognized despite returning data.
 
 
$ sudo nmap 192.168.1.129 -O

No reconoció nada, es nmap 7.60, la actual 7.80, veremos...

Probé con wget:


wget  --server-response 192.168.1.129:554

  HTTP/1.1 200 OK
  Content-Type: application/x-rtsp-tunnelled
  Server: Topsvision Server v2.1
  Connection: close
  Cache-Control: private
  Length: unspecified [application/x-rtsp-tunnelled]


Capturé con wireshark la actividad en red del arranque, nada.

La mac address, c8:22:02 es desconocida, mmhhh.

Mientras hacía estas pruebas ocurrió algo interesante, en un momento pasó a mostrar sólo la cámara activa y finalmente se reinició. Esto puede ser:

  • El escaneo le hizo mal
  • Es el motivo por el cual lo tiraron: tiene una falla de hardware


Red vía navegador


Exige un navegador que entienda activeX y te dice de bajar:

http://www.topslink.net/WebClient_EN_SetUp.exe

que tiene un hash que virustotal considera bastante inocuo e instalás almenos un ocx.

Si vas a http://www.topslink.net/ te ofrece login y más instalación:

http://www.topslink.net/CloudClientV2_EN_SetUp.exe

virustotal sigue casi ok.

Esos plugines no andan en edge, si andan en no sé que explorer de windows xp:


Vía red
Vía red




 

 

 

 

 

 

 

USB

Si le conecto un usb fat32, ofrece hacer upgrade con cualquier archivo que encuentre en la raiz sin ningún criterio


RS-232

El menú ofrece configurar el puerto RS-232, que no se manifiesta en el gabinete, pero quizás sea el conector interno libre.

Debo identificar los pines. Supongamos que la datasheet de Hi3520 es parecida a Hi3520DV300, si tiene uart quizás esté cerca... nop, es otro encapsulado

Le conecté osciloscopio y hay dos señales digitales, patrón repetitivo espejado, pero no sé que són, quedará para más adelante.


UART
UART


OSINT otra vez


He buscado sin éxito combinando "firmware" "update" y "upgrade" con estas etiquetas:

  • H.264 network dvr
  • tv08ahd
  • TVB9808BS-F1
  • 264.001.0045
  • TVI9808GS1_V1.03

 



Habiendo descansado y reflexionado, ha llegado el momento de revisar la estrategia y adaptar las tácticas. La situación actual es:

He confirmado que el sistema funciona y si consiguiera cámaras (y más difícil, instalara el cablerío necesario) podría usarlo para lo cual fue concebido.

El cliente de red apesta y es todo un desafío muy interesante hacer el análisis de los protocolos utilizados para hacer una implementación open source. De por sí es todo un proyecto y si en mi camino de reinstalar el firmware meto la pata, lo anulo.

Sería bueno saber si hay algún modo de desbrickar, quizás arrancando apretando un botón al arranque.

Se ha tornado vital obtener un firmware, mejor si es el actual. Debo hallar un firmware asociado a un modelo del cual haya una foto de la placa y parezca tener lo mismo o una descripción de funciones que coincida o sea menor.

Y debo atenerme al Plan A, analizar varios firmwares y detectar:

  • el nivel de compatibilidad
  • la existencia de algún acceso

 En la próxima entrega, duro con el firmware.


2020/09/13

Mi segundo PMOD: Dual PMOD VGA


icestick con pmod vga

 

 

Motivación

 

Como parte de estudiar el libro  Designing Video Game Hardware in Verilog , del cual en algún momento terminaré un artículo y lo publicaré, estoy adaptando sus ejemplos a la placa Nexys4ddr y Vivado 2018 y necesito hacer pruebas de generación de señal VGA con una placa distinta, pues no me salen los ejemplos y al cambiar de placa y entorno (ICEstick +Lattice) algo voy a aprender.

De paso me preparo para la inminente salida de la EDU-CIAA-FPGA, pero eso lo desarrollaré en otra entrada, no nos distraigamos.

Tambien estoy probando de meter una señal "escondida" en algún color para fuga de información y si meto la pata, preferiero hacerlo con el ICEstick que es más barato, tema tambien de otra entrada y H4CK3D 2020.


Podría hacer algo con un protoboard, pero esto es mucho más cool.


Qué es un PMOD y FPGA

No me voy a repetir, está en mi primer PMOD

 

Qué es VGA


Si te tengo que explicar que es VGA... bueno, quizás sos joven. VGA es una norma para transmitir video desde una computadora a una pantalla, es de lo más viejito que aún funciona, sin mirar en Internet, esto es lo que recuerdo de la evolución histórica, para nada precisa, sólo un mapa hecho a mano para mostrar lo viejo que soy:

  • monocromo: texto
  • hercules: con imagenes
  • CGA: colores, pocos, te sangran los ojos por la baja resolución
  • EGA: mejorcito
  • VGA: el tema de esta nota
  • xxxVGA: un montón de variaciones, de aquí en más se comienza a mezclar la resolución y los colores con el modo de transmisión.
  • DVI: analógico y digital
  • HDMI: es digital y suma audio
  • DisplayPort: y asi...


Si te interesa mucho el tema, wikipedia.


Lo que tengo que hacer es conectar a unos puertos del PMOD una adaptación con unas resistencias de modo tal que se respete lo que sigue, que es lo que existe en la placa Nexys4DDR:




La idea es que esas resistencias funcionan como un DAC (Digital to Analog Converter), si prendés cada pin asociado a un color, cuanto mayor sea la resistencia conectada menos influirá.

 

Además, hay dos señales de sincronización (HSync y VSync) y dos de I2C que se usan para comunicarse con el monitor.

 

 

Evolución de la elección de las señales


Necesito al menos 5 pines para RGB , VSync y HSync, me quedan sólo 3 pines libres, pues el PMOD tiene sólo 8. Si uso dos pines por color, tengo 64 colores.


  • VSync
  • HSync
  • Red 510
  • Red 1k
  • Green 510
  • Green 1k
  • Blue 510
  • Blue 1k


I2C

Habiendo I2C, es increiblemente tentador dejarlo preparado para algún futuro, pero me quedarían pocos colores. Se me ocurren varias maneras de combinar, pero terminan siendo 8 colores y/o gamas monocromáticas.

  • VSync
  • HSync
  • R
  • G
  • B
  • I2C clock
  • I2C data
  • uno libre, podría ser para el verde

 

 2 PMODs


mmh, podríamos tener todo si usáramos dos PMODs como en este ejemplo:


VGA con dos PMODs

  • PMOD 1
    • VSync
    • HSync
    • Red 510
    • Red 1k
    • Green 510
    • Green 1k
    • Blue 510
    • Blue 1k

 

  • PMOD2
    • I2C clock
    • I2C data
    • Red 2k
    • Red 4k
    • Green 2k
    • Green 4k
    • Blue 2k
    • Blue 4k

 

¿Con qué criterio los agrupé? Pues con hacer uno PMOD doble en el futuro y el de ahora hacerlo "expandible", por que la realidad es que lo que quiero ahora es para un PMOD, el ICEStick tiene uno solo.

 

La idea sería hacer algo como, todo gimpeado usando pruebas fallidas, recurro a tu generosa imaginación, faltan resistencias y el conector entre módulos:


Prototipo imaginario de doble pmod ensamblable

 

 

Pasó un pajarito...

 

Recuerdo haber catalogado un chip rescatado de un desguace, algo que decía VGA algo... a ver... si, SI!! sigue rindiendo el cajón de basura:

IP4770/71/72CZ16 VGA/video interface with ESD protection de NXP Semiconductors

está en el mother de una laptop que encontré tirada en la calle, de la cual recuperé exitosamente el touchpad, me falta hacer funcionar la pantalla y ahora esto, que va a quedar para otra ocasión pues no tengo capacidad de fabricar una placa con pistas tan juntas.



Volviendo al tema


Es muy complicado, mejor hago doble PMOD y ya me queda armado. Como es bastante difícil para mi hacer que los agujeritos del conector VGA me queden alieneados, tuve la tentación de usar este adaptador, que de paso disminuye el stress sobre los PMODs pero me resultó antideportivo.


Adaptador conn_02x08 a db15 high density




Los diagramas de kicad en https://github.com/cpantel/pmod_vga



Dual PMOD a VGA, un sólo PMOD


Como bien podrés apreciar, faltan algunas resistencias correspondientes al PMOD inferior, no importa pues no tengo ningún apuro en conectarle una placa de las caras. Quizás no puedas ver, pero las resistencias de 500 en realidad son dos de 1k en paralelo, es lo que hay...


Aprendizajes

El primer modelo lo hice con doble faz y puse vías por todos lados, luego me dí cuenta que al haber doble faz justamente se pueden evitar muchas, esto se refleja en la primera versión.

Para perforar el DB15 High Density, hice cuatro intentos hasta que me quedó alineado bien y de ahí en más usé eso como plantilla para los intentos posteriores.

Al comienzo consideré utilizar pines rectos para el conector PMOD y preguntando en embebidos me hiceron entrar en razón, muchas gracias, rescaté los pines en ángulo del conector de una diskettera que ya me había ayudado cediendo el conector de alimentación para el controlador de velocidad de los coolers de un switch que aún no he publicado por que el PWM amplificado mete ruido en el RS-232.

Al hacerlo bien, no necesito doble faz, lo que me facilita todo.

Como tengo poca experiencia en hacer circuitos con ácido y como hago pocos, esa experiencia se diluye, no me salió muy bien, lo cual fue una excelente oportunidad para estrenar la pintura reparadora que había adquirido para corregir las pistas de la EDU-CIAA-NXP a la que le arranqué (si, arranqué, en ese momento no sabía como sacar un chip) el microcontrolador para reemplazarlo por otro, uno de estos días/semanas/meses lo terminaré y compartiré.

Con respecto a que de haberlo comprado hecho me hubiese salido u$s 9 más impuestos más gastos de envío, no hay ni la menor duda que debí haberlo comprado, pero no olvidemos que mi objetivo es aprender, todas estas horas no fueron mal invertidas.

 

Promesas

En pocos días, ya sea con ICECube o con la tool chain de la EDU-CIAA-FPGA, lo haré funcionar.

 

2020/09/11

Mi primer PMOD: unos leds y parte de un malware de hardware

 




fpga con pmod


 

Para unas investigaciones y parte de una demo de una charlas de próxima exposición, siendo H4CK3D 2020 la pública y una interna en el trabajo, he necesitado expandir una placa FPGA, en particular una Nexys4DDR.

Sin entrar mucho en detalles pues es otra entrada, lo que hice fué una CPU que ejecuta unas pocas instrucciones tal que me permiten mostrar un ataque de elevación de privilegios con la intervención de un troyano de hardware.

Lo que necesito son cuatro leds separados de la placa para que tengan más protagonismo que los provistos por la placa pues los estoy usando para mostrar el estado, registros e instrucciones de la CPU y como las charlas son virtuales, se complica diferenciarlos.

Estos cuatro leds vienen a representar un puerto de GPIO, que el programa prende y apaga y tambien evidencian la activación del malware.

Tambien necesito la parte electrónica del malware que no puedo expresar en Verilog, que básicamente es un capacitor y un par de resistencias más un potenciómetro de calibración.


Qué es PMOD

Es una norma de conexión de expansiones para sensores y actuadores, tipo ponchos de EDU-CIAA-NXP, shields de Arduino o Raspberry Pi, pero más asociada a FPGAs, en particular del fabricante Digilent. Tiene unos puertos de alimentacion y unos de entrada y salida, tanto analógicos como digitales. 

La asignación de ser entrada o salida, analógico o digital es completamente dependiente de cada modelo, a diferencia de los ponchos/shields, donde esta asignación depende de las capacidades disponibles del microcontrolador en cada pin.


pmod 7 segmentos


 

Qué es FPGA

Muy corto, un circuito programable, se suelen programar en VHDL o Verilog. Se pueden instanciar circuitos tan sencillos como el que gobierna las lucesitas del auto fantástico hasta una CPU, mucho mucho más compleja que la que diseñé yo. 

Una comparación muy libre sería la diferencia entre tener un programa almacenado en ROM que no lo podés cambiar sin cambiar el chip y uno en RAM, que lo cambiás cuando querés. Viene a ser lo mismo pero la lógica digital.

Volviendo a mi PMOD, lo que hace la parte del malware es ir cargando un capacitor con la señal proveniente de la placa. En ausencia de señal, el capacitor se descarga vía una resistencia y como es un ajuste muy preciso tiene un potenciómetro.

El método de construcción fué utilizar una placa preimpresa genérica, a la cual le corté el sobrante. El capacitor lo recuperé de la controladora de un aire acondicionado, me parece. El potenciómetro debe ser de una radio, lo debo tener desde hace unos veinticinco o treinta años, yo sabía que para algo me iba a servir, para la gente que me hace tirar "toda esa basura".

La dificultad del uso del potenciómetro pasa por que es el único que tengo con resistencia baja y es muy sensible. Además se me dificulta medirlo para anotar el valor apropiado pues al hacerlo el capacitor se carga y modifica la medida, quizás debería poner un jumper para desconectar del capacitor y poder medir.

 

fpga con pmod y detalles

 

El haber utilizado una placa simple faz me complicó un poco el la fijación de los pines de conexión a la placa principal, pero era lo que tenía, mala suerte.

Para no mandarme macanas hice una prueba muy sencilla, medir la línea que va hacia la FPGA mientras prendo y apago la que viene desde la misma, obviamente funcionó y tambien luego en la FPGA.



La verás podés ver prendida y en funcionamiento en  alguna entrada futura tras la charla H4CK3D 2020, paciencia.  y el detalle del ataque en esta entrada.



Fuentes



https://reference.digilentinc.com/reference/programmable-logic/nexys-4-ddr/reference-manual


https://reference.digilentinc.com/_media/reference/pmod/pmod-interface-specification-1_1_0.pdf