DICOM / DICOM-TLS

Protocolo DICOM (Digital Imaging and Communications in Medicine)

DICOM® — Imágenes y Comunicaciones Digitales en Medicina — es el Estándar internacional para imágenes médicas e información relacionada. Define los formatos de imágenes médicas que pueden intercambiarse con los datos y la calidad necesarios para el uso clínico.

Puerto/s

104 y 11112 (DICOM)

2752 (DICOM-TLS)

Protocolo

TCP

Introducción

  • Origen: Desarrollado inicialmente por el ACR (American College of Radiology) y NEMA (National Electrical Manufacturers Association).

  • Mantenimiento: Actualmente gestionado por la Medical Imaging & Technology Alliance (MITA).

  • Especificaciones: Definido formalmente en el DICOM Standard y resumido en la RFC 3240.

Arquitectura

DICOM opera bajo un modelo cliente-servidor basado en roles negociados:

  • AE (Application Entity): Cualquier dispositivo o software capaz de procesar datos DICOM.

    • SCU (Service Class User): El cliente; el dispositivo que solicita un servicio.

    • SCP (Service Class Provider): El servidor; el dispositivo que proporciona el servicio (típicamente un servidor PACS).

  • PACS (Picture Archiving and Communication Systems): Servidores dedicados que escuchan peticiones DICOM.

Conceptos clave

Application Entity Title (AET)

Es un identificador sensible a mayúsculas que especifica el origen o destino de un mensaje.

  • Debilidad de seguridad: Aunque se usa como control de acceso, no es un método de autenticación fuerte. A menudo son predecibles o están mal configurados, permitiendo ataques de suplantación de identidad (impersonation).

IOD (Information Object Definitions)

Colecciones de atributos que representan objetos reales (ej. un Paciente). Contienen PHI (Protected Health Information) crítica como:

  • Nombre e ID del paciente.

  • Fecha de nacimiento y sexo.

  • Datos sensibles como el nombre de la madre.

Jerarquía de Datos DICOM

La información se organiza en cuatro niveles lógicos:

  1. Paciente: Nivel superior (un paciente puede tener varios estudios).

  2. Estudio: Colección de series relacionadas.

  3. Serie: Grupo de imágenes vinculadas.

  4. Imágenes: El archivo individual de datos médicos.

SOP (Service-Object Pair) y DIMSE

  • SOP: La unión de un IOD con un servicio específico (define las reglas de uso).

  • DIMSE (DICOM Message Service Element): Son los comandos u operaciones.

    • C-STORE: Almacenamiento de datos.

    • C-FIND: Búsqueda/Consulta de información.

    • C-MOVE / C-GET: Recuperación y transferencia de imágenes.

El proceso de asociación

La Asociación es el "apretón de manos" (handshake) obligatorio al inicio de cualquier conexión DICOM. En esta fase se intercambian:

  • Títulos de AE (AET).

  • Información de usuario.

  • Servicios solicitados vs. disponibles.

Mensajes de Asociación:

  • A-Associate-RQ: Solicitud del SCU.

  • A-Associate-AC: Aceptación del SCP.

  • A-Associate-RJ: Rechazo del SCP.

Vectores de ataque comunes

La complejidad del protocolo DICOM genera múltiples vectores de ataque si la administración no es rigurosa:

  • Intercepción de PHI: Debido a que el tráfico por defecto es en texto plano (puerto 104), los datos médicos pueden ser capturados mediante sniffing en redes no segmentadas.

  • Exfiltración de Metadatos: El uso de comandos C-FIND con AETs descubiertos permite listar bases de datos completas de pacientes.

  • Suplantación de Identidad: Si un atacante descubre un AET confiable (mediante fuerza bruta o archivos de configuración), puede impersonar una modalidad médica para extraer imágenes mediante C-GET.

  • Compromiso del Sistema: Despliegues inseguros con puertos abiertos y sin TLS pueden servir como punto de entrada para el compromiso total del servidor PACS y, posteriormente, el pivotaje hacia el dominio de Active Directory de la organización de salud.

Reconocimiento y enumeración

El objetivo en esta fase es mapear la arquitectura médica, identificar nodos críticos (PACS, Modalidades, Estaciones de trabajo) y descubrir identificadores de entidad (AET) válidos que permitan la comunicación con el servicio.

Identificación de Servicios y Software

El primer paso es detectar puertos abiertos y determinar si el servidor implementa el estándar básico (texto plano) o DICOM-TLS (cifrado).

104

DICOM Estándar

Puerto oficial por defecto.

11112

DCM4CHEE / Genérico

Muy común en implementaciones open-source.

4242

Orthanc

Puerto por defecto del servidor Orthanc.

2762

DICOM-TLS

Puerto estándar para conexiones seguras.

Utiliza scripts de enumeración para verificar si el puerto realmente aloja un proveedor de servicios DICOM:

Enumeración de identificadores

DICOM no utiliza credenciales tradicionales (usuario/contraseña). En su lugar, utiliza Application Entity Titles (AET). Estos son identificadores de nodo (generalmente en mayúsculas) que actúan como "nombres de buzón".

  • Called AE Title (AEC): El nombre del servidor al que intentas conectar.

  • Calling AE Title (AET): Tu nombre como cliente (a veces el servidor también lo valida).

Instalación de herramientas (DCMTK)

Descubrimiento del AET del Servidor (Called AET)

Muchos servidores rechazan la asociación si el Called AET es incorrecto. Si el escaneo de Nmap indicó que el chequeo está habilitado, utiliza echoscu para probar nombres comunes:

chevron-rightLista de posibles AET de servidor (Documentación oficial)hashtag
chevron-rightLista de posibles AET de servidor (No documentados oficialmente)hashtag

La enumeración se puede automatizar realizando un ataque de fuerza bruta. Dado que no se trata de una autenticación per se, no hay límite de intentos de conexión exitosa, y por lo tanto, no habría riesgo de bloquear el acceso.

Este script automatiza el envío de mensajes de verificación (C-ECHO) utilizando la herramienta echoscu de la suite DCMTK. Para evitar saturar el servicio, el script cuenta con un sleep que podrá habilitarse o deshabilitarse cuando se desee:

Ataque de fuerza bruta AET de AEC

Descubrimiento del AET del Cliente (Calling AET)

Si el servidor también valida quién lo llama, deberás adivinar un nombre de cliente autorizado (ej. el nombre de una estación de trabajo conocida):

Enumeración de PHI (C-FIND)

El objetivo de este paso es consultar la base de datos del servidor DICOM para extraer metadatos de pacientes, estudios y series médicas sin necesidad de una cuenta de usuario tradicional del dominio.

En DICOM, el comando C-FIND permite realizar búsquedas jerárquicas. El éxito de esta prueba confirma que el servidor no implementa controles de autorización adicionales más allá del nombre del AET.

PATIENT

Nombres, IDs de paciente, fechas de nacimiento.

STUDY

Fechas de estudios, descripciones médicas, IDs de estudio.

SERIES

Modalidades usadas (CT, MR, RX), descripciones de series.

Ejecución con findscu (DCMTK)

Utilizaremos la herramienta findscu. Para que la consulta sea efectiva, debemos enviar etiquetas DICOM vacías (atributos) que el servidor debe "rellenar" en su respuesta.

A. Enumeración de todos los pacientes

Este comando solicita al servidor que devuelva el nombre y el ID de todos los pacientes registrados.

  • -P: Establece el modelo de información a nivel de Paciente.

  • -k "0010,0010": Etiqueta para PatientName.

  • -k "0010,0020": Etiqueta para PatientID.

B. Búsqueda de estudios por ID de paciente

  • -S: Nivel de consulta de Estudio (Study).

  • -k "0008,1030": Etiqueta para StudyDescription.

Ataques

Ataque de fuerza bruta AET de AEC

Esta sección detalla la metodología para realizar ataques de fuerza bruta contra el Called AE Title (AEC) en infraestructuras médicas. En entornos DICOM, el AEC actúa como un identificador de destino; si el servidor (SCP) tiene habilitada la verificación de este título, rechazará cualquier intento de conexión que no utilice un nombre válido.

Para maximizar la eficiencia y reducir el ruido en los logs, se recomienda una estrategia en dos fases:

Este script automatiza el envío de mensajes de verificación (C-ECHO) utilizando la herramienta echoscu de la suite DCMTK.

Guarda este código como brute_called_aet.sh y dale permisos de ejecución con chmod +x brute_called_aet.sh:

chevron-rightbrute_called_aet.shhashtag

El script busca la cadena "Association Accepted". Esto indica que el servidor ha validado que el nombre que enviamos (-aec) coincide con su configuración interna o que el servidor está configurado en modo promiscuo (acepta cualquier AET).

Referencias

Última actualización