ingenieria reversa de puertos series con algo de python

25

Upload: alfonso-de-la-guarda-reyes

Post on 03-Jul-2015

624 views

Category:

Technology


0 download

DESCRIPTION

Cómo hackear conexiones seriales e incluso emplear python para el prototipado de las conexiones. En el LimaHack Noviembre - 2012

TRANSCRIPT

Page 1: Ingenieria Reversa de Puertos Series con algo de Python
Page 2: Ingenieria Reversa de Puertos Series con algo de Python
Page 3: Ingenieria Reversa de Puertos Series con algo de Python

Ingeniería reversa de Ingeniería reversa de dispositivos seriales con dispositivos seriales con

algo de Pythonalgo de Python

Alfonso de la Guarda [email protected]

@alfonsodg

Page 4: Ingenieria Reversa de Puertos Series con algo de Python

DISCLAIMER

Todo el contenido de esta charla es resultado de investigación con fines didácticos y educativos. El autor no se hace responsable por el uso del conocimiento contenido en la siguiente presentación. La información contenida debe ser utilizada únicamente para fines éticos y con la debida autorización.

Todo descubrimiento realizado, ha sido y será usado de forma legal. La audiencia debe asumir todo lo que se exponga hoy, como “falso” y “sin fundamento” hasta que lo compruebe personalmente. Limahack no es el autor directo de ninguno de los descubrimientos expuestos, ni de las herramientas demostradas, ni los conoce.

Todas las opiniones vertidas durante esta presentación son exclusivas del expositor, Limahack no es responsable de ninguna de las opiniones vertidas.

Page 5: Ingenieria Reversa de Puertos Series con algo de Python

Todavía hay dispositivos con puertos seriales?

SI

Como también: paralelos, usb, con puertos propietarios, etc....

Es un estándar de la industria... aunque hoy en día su uso es más especializado

Page 6: Ingenieria Reversa de Puertos Series con algo de Python
Page 7: Ingenieria Reversa de Puertos Series con algo de Python

Cómo funcionan los puertos serie?

● Interfaz de comunicaciones digital

● Transmisión bit a bit

● Normas RS-232 y RS-422 / Propietarias

● Asíncronos

● Simplex, Half Duplex y Full Duplex

● Chips UART

● Seguimiento de un protocolo, usualmente “estándar”

● Los protocolos tienden a emplear secuencias ASCII

● Algunos protocolos propietarios hacen uso de IO/CTL

Page 8: Ingenieria Reversa de Puertos Series con algo de Python

Por qué necesito manipular los puertos serie?

● Acceder a funcionalidades particulares de nuestros dispositivos

● Enviar y recibir datos de los mismos (dispositivos)

● En general para controlarlos... hasta el punto en donde el fabricante lo permita

Page 9: Ingenieria Reversa de Puertos Series con algo de Python

Es complicado acceder a los dispositivos por puertos serie?

● Ingredientes: puertos series (emisor/receptor), cable serie, software de comunicaciones, parámetros y (quizás) conocer el protocolo...

● Preparación: mezclar los ingredientes según las especificaciones del fabricante del dispositivo

● Presentación: Hacer lo que deseamos según lo permita el fabricante

Page 10: Ingenieria Reversa de Puertos Series con algo de Python

Y qué sucede cuándo la receta con funciona?

Page 11: Ingenieria Reversa de Puertos Series con algo de Python

Hackeando comunicaciones seriales (preparación)

● Informarnos: buscar todo material relativo al dispositivo y/o hasta de sus chips, cada uno puede revelar valiosa información

● Buscar si hay software que permita comunicarse con el dispositivo de alguna/cualquier manera

Page 12: Ingenieria Reversa de Puertos Series con algo de Python

Hackeando comunicaciones seriales (practicando)

● Verificar pinout de puertos y cables● Configurar parámetros del puerto● Probar protocolos o comandos, buscando

respuesta de los dispositivos● “Sniffear” un aplicativo que trabaje con el

dispositivo e interpretar las señales / comandos

Page 13: Ingenieria Reversa de Puertos Series con algo de Python
Page 14: Ingenieria Reversa de Puertos Series con algo de Python

Receta 1: Dispositivo Lector de Tarjetas por Proximidad

● Transmisión síncrona● Comando de petición de registros● Comando de validación de recepción con

llave para vacío de memoria● Tramas simples alfanuméricas con código

de tiempo e identificación de usuario

Page 15: Ingenieria Reversa de Puertos Series con algo de Python

La experiencia de las radio Tadirant

Page 16: Ingenieria Reversa de Puertos Series con algo de Python

Equipos VHF 9000 / HF 6000

● Objetivo: Integrar los canales de datos de los equipos a un sistema C4I

● Problema: El fabricante no entregó la información técnica para la integración de los dispositivos (ni quería hacerlo)

● Solución: Aplicar ingeniería reversa al puerto de comunicaciones para replicar el protocolo

Page 17: Ingenieria Reversa de Puertos Series con algo de Python
Page 18: Ingenieria Reversa de Puertos Series con algo de Python

HF-6000 Radio

(RT/RE-6001 Exciter & Radio

System Controller)

External Control Device

HF Antenna Coupler

HF Power

Amplifier

Rx Tx Tx Rx Tx Rx Tx Rx

Communication_Request (COM_REQ)

MASTER Slave #1 Slave #2 Slave #N

Page 19: Ingenieria Reversa de Puertos Series con algo de Python

Radios Tadirant VHF 9000

● Con la documentación obtenida se pudo conseguir el pinout para las conexiones

● Se ubicó un software que permitía la transmisión de flujos de vídeo, se procedió al sniffing (monitoreo) de las señales

● El protocolo está basado en señales IO/CTL (secuencias de bits)● Con la documentación auxiliar se procedió a completar la configuración de los parámetros del equipo

● Comunicaciones independientes del canal o modalidad (salto de frecuencia, etc.)

Page 20: Ingenieria Reversa de Puertos Series con algo de Python
Page 21: Ingenieria Reversa de Puertos Series con algo de Python

Radios Tadirant HF 6000

No se pudo concluir esta fase, pero se encontró que el pinout era diferente y que

algunas de las señales (protocolo) requerían ajustes para cerrar el proceso....

Era una cuestión de días y más pruebas...

Page 22: Ingenieria Reversa de Puertos Series con algo de Python

...este... y Python dónde está?

Page 23: Ingenieria Reversa de Puertos Series con algo de Python

Y ahora Python...

● Permite prototipado rápido de los protocolos

● Al ser interpretado podemos experimentar con el proceso de la ingeniería reversa paso a paso

● Tiene una magnífica librería para el manejo de puertos seriales

Page 24: Ingenieria Reversa de Puertos Series con algo de Python

Suena bonito, pero... “show me the code”

https://bitbucket.org/alfonsodg/radio-data