Kali Linux: Guía de i2c-tools

https://www.onlinetis.com

Kali Linux: Guía de i2c-tools

Entrar en el mundo de la comunicación entre dispositivos mediante el protocolo I2C (Inter-Integrated Circuit) en Kali Linux es una excelente forma de aprender sobre hardware y seguridad física.

La suite i2c-tools es el estándar de oro para interactuar con buses de datos serie. Aquí tienes una guía rápida en español sobre cómo empezar y para qué sirve cada comando.


1. Instalación

Aunque suele venir preinstalado en muchas versiones de Kali, puedes asegurarte de tener la última versión con:

Bash
sudo apt update && sudo apt install i2c-tools -y

Nota importante: Para que estas herramientas funcionen, el kernel debe tener cargado el módulo I2C. Puedes activarlo con sudo modprobe i2c-dev.


2. Comandos Principales de i2c-tools

Aquí tienes el "kit de supervivencia" para manejar dispositivos I2C:

A. i2cdetect - El escáner

Se usa para ver qué dispositivos están conectados al bus. Es el primer paso para saber si el hardware está bien cableado.

  • Comando: sudo i2cdetect -y -r 1

  • Qué hace: Escanea el bus número 1. Verás una tabla con direcciones hexadecimales. Si aparece un número (ej. 0x48), ¡hay un dispositivo ahí!

B. i2cdump - El visor de memoria

Vuelca todo el contenido de los registros de un dispositivo específico.

  • Comando: sudo i2cdump -y 1 0x48

  • Qué hace: Te muestra una "fotografía" de todos los datos internos que el dispositivo tiene almacenados en ese momento.

C. i2cget - Lectura precisa

Lee el valor de un registro específico en un dispositivo.

  • Comando: sudo i2cget -y 1 0x48 0x00

  • Qué hace: Lee el byte almacenado en el registro 0x00 del dispositivo con dirección 0x48.

D. i2cset - Escritura (¡Cuidado!)

Envía un dato a un registro específico. Útil para configurar sensores o encender LEDs.

  • Comando: sudo i2cset -y 1 0x48 0x01 0xff

  • Qué hace: Escribe el valor 0xff en el registro 0x01.


3. Arquitectura del protocolo I2C

Para entender qué estás haciendo, recuerda que I2C funciona con un sistema de Maestro/Esclavo (o Controlador/Target) usando solo dos cables:

  1. SDA (Serial Data): Por donde viajan los datos.

  2. SCL (Serial Clock): El pulso que sincroniza la velocidad de envío.

$$V_{pullup} \text{ es necesario en ambas líneas para que el bus funcione correctamente.}$$

4. Consejos de seguridad en Kali

Si estás usando Kali para auditoría de hardware (como extraer firmware de una memoria EEPROM):

  • Voltaje: Asegúrate de que los niveles lógicos coincidan (3.3V o 5V). Conectar un bus de 5V a un pin de 3.3V de tu adaptador puede ser fatal para el hardware.

  • Permisos: Siempre necesitarás sudo o pertenecer al grupo i2c.

Vamos a crear un script sencillo en Python. Python es la forma más común de interactuar con I2C en Kali (especialmente si usas una Raspberry Pi o un adaptador USB-to-I2C como el CH341A) porque es mucho más flexible que usar comandos individuales de la terminal.

Para esto usaremos la librería smbus2, que es la versión moderna y más estable de la original smbus.

1. Preparación del entorno

Primero, instala la librería necesaria:

Bash
pip install smbus2

2. El Script de Python (lector_i2c.py)

Este código es una plantilla profesional que puedes adaptar. Imagina que queremos leer un sensor de temperatura o simplemente monitorear un registro:

Python
import smbus2
import time

# Configuración del bus (usualmente es el 1 en dispositivos modernos)
I2C_BUS = 1
# La dirección hexadecimal que encontraste con i2cdetect (ejemplo: 0x48)
DEVICE_ADDRESS = 0x48
# El registro interno que queremos leer (ejemplo: 0x00)
REGISTER = 0x00

def leer_dispositivo():
    try:
        # Abrimos el bus
        with smbus2.SMBus(I2C_BUS) as bus:
            # Leemos un solo byte del registro
            dato = bus.read_byte_data(DEVICE_ADDRESS, REGISTER)
            
            print(f"--- Lectura Exitosa ---")
            print(f"Dirección: {hex(DEVICE_ADDRESS)}")
            print(f"Registro: {hex(REGISTER)}")
            print(f"Valor (Hex): {hex(dato)}")
            print(f"Valor (Decimal): {dato}")
            
    except Exception as e:
        print(f"Error al conectar con el dispositivo: {e}")

if __name__ == "__main__":
    # Bucle simple para monitorear en tiempo real
    while True:
        leer_dispositivo()
        time.sleep(2) # Espera 2 segundos entre lecturas

3. ¿Cómo funciona el flujo de datos?

Cuando ejecutas este script, Python se comunica con el driver del kernel de Kali Linux, que a su vez manipula físicamente los niveles de voltaje en los pines SDA y SCL.

4. Casos comunes en Auditoría

Si estás usando esto para hacking de hardware o ingeniería inversa, aquí hay dos funciones que te serán muy útiles:

  • Lectura de Bloques: Muchos dispositivos (como memorias EEPROM) no envían solo un byte, sino cadenas de datos.

    • bus.read_i2c_block_data(ADDRESS, OFFSET, LENGTH)

  • Escritura de Configuración: Para activar un dispositivo que está en "modo sueño".

    • bus.write_byte_data(ADDRESS, REGISTER, VALUE)

Entradas populares de este blog

Hacking y ciberseguridad en kali linux con Fping

Hacking y ciberseguridad en kali linux con atk6-thcping6

Como utilizar Fierce en kali linux