# Canal encubierto

Un canal encubierto (del inglés covert channel), es un canal que puede ser usado para transferir información desde un usuario de un sistema a otro, usando medios no destinados para este propósito por los desarrolladores del sistema. Para que la comunicación sea posible suele ser necesario un preacuerdo entre el emisor y el receptor que codifique el mensaje de una forma que el receptor sea capaz de interpretar. Está muy relacionado con la esteganografía.
En oposición a los canales encubiertos, se encuentran los canales legítimos o canales abiertos (en inglés overt channel) que comprenden las vías de comunicación diseñadas a tal fin.

## Evolución del concepto

El concepto de canal encubierto fue introducido en 1973 por Butler W. Lampson cuando estaba examinando el problema de mantener secreta la información de un proceso para otro en un sistema con seguridad multinivel (problema de confinamiento). En este entorno introduce los canales encubiertos para identificar canales que tiene disponibles un proceso para transmitir información, cuando éste no estaba pensado para este propósito. Por ejemplo cuando un proceso toma el control exclusivo de un Archivo o fichero (otro procesos no pueden acceder a él) o cuando un proceso usa todo el espacio disponible del disco duro. El resto de procesos pueden detectar esta actividad y por tanto puede usarse para implementar un canal encubierto.
A partir de la definición de Lampson, el departamento de defensa de los Estados Unidos, en su TCSEC, también conocido como "libro naranja", define los canales encubiertos como cualquier canal de comunicación que puede ser explotado por un proceso para transferir información de forma que viole la política de seguridad del sistema.
El Common Criteria definió los canales encubiertos como "un forzado, canal de señalización ilícito que permite a un usuario contravenir subreticiamente la política de seguridad multinivel y requisitos de unobserbabilidad del sistema".
En el "Handbook for the Computer Security Certification of Trusted System" del Laboratorio de Investigación Naval de los Estados Unidos se define un canal encubierto como un mecanismo que puede ser usado para transferir información desde un usuario de un sistema a otro usando medios no destinados para este propósito por los desarrolladores del sistema.
Podemos ver que con el paso del tiempo el concepto ha ido evolucionando desde el ámbito de los sistemas operativos y el problema del confinamiento de los procesos, hasta abarcar cualquier tipo comunicación entre entidades que utilizan canales que no han sido diseñados para ser utilizados como canal de comunicación. Los conceptos anteriores, también están muy relacionado con la esteganografía.

## Clasificaciones
### Según mecanismo de ocultación

Tradicionalmente los canales encubiertos se han clasificado según el mecanismo que usan para lograr la comunicación, clasíficándolos en dos grupos: Canales de almacenamiento y canales de temporización. Observar que un mismo recurso compartido puede usarse para implementar un canal de almacenamiento como uno de temporización, la diferencia está en como gestionar ese recurso, si aprovechando el espacio de almacenamiento (canal de almacenamiento) o modulando en el tiempo su comportamiento (canal de temporización).
Esta clasificación ha sido rechazada por algunos autores y está sujeta a cierta controversia

#### Canales de almacenamiento

    En este tipo de canales, el receptor de la información percibe la información como un cambio en el valor de un recursos compartido o atributo. Esas zonas de memoria pueden ser por ejemplo:
   * Ciertos campos en la cabecera de los paquetes de red que bien están en desuso o que su modificación no afecta al correcto funcionamiento del protocolo
   * Mediante el uso de zonas de memoria compartida. Ejemplos: Bloqueos de ficheros del disco duro, modulación de la ocupación del espacio de disco.
    Observar que tienen que haber algún mecanismo para inicializar la comunicación entre las entidades y para la secuenciación correcta de eventos. Esto se podría hacer mediante otro canal con un pequeño ancho de banda.

#### Canales de temporización

    En este tipo de canales, el receptor de la información la percibe vía un cambio en el tiempo requerido por el destinatario para detectar cierta acción. Es decir, para codificar la información se basan en la modulación del comportamiento del emisor, lo cual se traduce, por norma general, en variaciones de la tasa de envío de información. Ejemplos:
   * Tiempo de uso de la CPU.
   * Tiempo de comienzo de un proceso.
   * Demanda de ejecución de determinada tarea observable por el otro usuario.
    Observar que el emisor y el receptor tienen que tener acceso a un tiempo de referencia, como un reloj de tiempo real. Por otro lado es necesario algún mecanismo para inicializar el proceso y para la secuenciación de eventos.
    En este tipo de canales está implícita la habilidad del emisor para cambiar el valor de un atributo compartido y la habilidad del receptor para detectarla.

### Canal oculto

Cuando usamos un canal encubierto suele ser necesario un preacuerdo entre el emisor y el receptor para que el emisor use una forma de codificación que el receptor sea capaz de descifrar. Hay un tipo especial de canales encubiertos a los que se les llama canales ocultos (en inglés side channel) en los que el emisor de forma accidental comunica al receptor. En estos sistemas el desafío del receptor es descubrir y decodificar el canal oculto para obtener la información.
Los canales ocultos más habituales son aquellos que están relacionados con las emanaciones que de forma no intencionada emiten los dispositivos electrónicos.

### Otras clasificaciones

Se han propuesto algunas otras clasificaciones para los canales encubiertos. Veamos algunos ejemplos:
* Clasificación en función de si existe o no probabilidad de que los datos que reciba el receptor sean incorrectos por la existencia de ruido.
* Clasificación en función de si la comunicación es sólo 1-1 (un emisor-un receptor) (canales no agregados), o si son creados por varias parejas de procesos que acceden a un mismo conjunto de variables (canales agregados).

## Ámbitos de aplicación

En su origen los canales encubiertos fueron usados como una forma clandestina de obtener información de un proceso por parte de otro del mismo sistema informático. A partir de ahí el concepto se fue generalizando y se fue aplicando a otros ámbitos como las redes de comunicaciones o las emanaciones de dispositivos (Ej electromagnéticas o térmicas).

### Intercomunicación de procesos

El origen mismo del concepto de canal encubierto fue introducido en el marco de un estudio de como los procesos de un sistema podían comunicarse saltándose las políticas de seguridad de un sistema con seguridad multinivel. Desde entonces ha habido importantes estudios para intentar evitar este tipo de comunicaciones. Se han desarrollado importantes avances para que los sistemas operativos nos protejan contra este tipo de vulneraciones de la política de seguridad confinando los procesos, es decir, limitando sus actividades a sólo lo que tienen permitido.
Los sistemas operativos son los guardianes lógicos contra los canales encubiertos. Como ellos ya son los que se encargan de gestionan los canales de comunicación y los recursos compartidos, también tienen que ser responsables de cerrar los canales encubiertos ya que éstos sólo son un subconjunto de los canales de comunicación y utilizan recursos compartidos como conducto de la comunicación. El hardware podría construirse de tal forma que romper el confinamienta fuera improbable, sin embargo tales mecanismos harían al sistema difícil, si no imposible, de usar de forma efectiva
A causa de que la única forma realmente efectiva de enfrentarse seriamente con un canal encubierto es reestructurar el sistema para que sea eliminado, los diseñadores de sistemas operativos tienen que saber cómo identificar los canales encubiertos y como reestructurar el sistema para eliminarlos. Por esta razón se han desarrollado una serie de tácticas para detectarlos y tratarlos.
Como estrategia general hay que controlar los accesos a recursos compartidos ya que estos son la base de para construir canales encubiertos. En este contexto cuando hablamos de recursos nos referimos a cualquier objeto o colección de objetos que pueden ser referenciados o modificados por más de un proceso. Ejemplos de recursos compartidos que podrían ser usados para canales encubiertos:
* Consumo de CPU. Por ejemplo, acapararla puede ser considerado como un true y quedándose inactivo puede ser interpretado como false.
* Consumo de memoria
* Bloqueos del sistema de ficheros.

### Flujo de datos

Es habitual aprovechar los flujos de datos para establecer canales encubiertos. El escenario que se plantea puede ser modelizado mediante el llamado problema del prisionero. Resumidamente, en el problema del prisionero tenemos dos prisioneros, A y B, que quieren comunicarse de forma confidencial para escapar. El problema es que sólo pueden intercambiar mensajes a través de un guardián, W. El guardián puede leer, modificar o generar el mismo los mensajes. Si el guardián detecta cualquier comunicación que pueda ser utilizada para escapar (Ej. detecta un cifrado) dejará de transmitir los mensajes. En este escenario los prisioneros necesitan establecer un canal encubierto. Las dos estrategias más utilizada para establecerlo son:
* Esconder el canal encubierto dentro de los mensajes permitidos. Para ello se usa la Esteganografía, que es la disciplina de ocultación de los mensajes. No se debe confundir con la Criptografía que es la codificación de los mensajes.
* Usar autenticación para poder detectar los mensajes auténticos. Además dentro de la autenticación podemos embeber un canal encubierto. A este tipo de canales encubiertos se les llama canales subliminales. El canal encubierto estará dentro del propio algoritmo de autenticación usado por los mensajes legítimos. Por tanto será indistinguible dentro de la autenticación (normalmente una firma digital). Sin el conocimiento del secreto el mensaje subliminal no puede ser leído ni detectado.

### Protocolos de comunicación

Los protocolos que se usan en las redes de comunicaciones se han aprovechado intensamente para la definición de distintos tipos de canales encubiertos:
* Canales encubiertos basados en la utilización de ciertos campos de los paquetes. La utilización de datos de aplicación como portador de la información requiere un conocimiento detallado de la información enviada para poder modificarla sin levantar sospechas. Este motivo impulsa al uso de campos de cabecera de los paquetes que bien están en desuso o que si lo modificamos de cierta forma no se afecta al correcto funcionamiento del protocolo.
* Canales encubiertos basados en la temporización de los mensajes.
* Canales basados en la reordenación de paquetes. La primera propuesta fue hecha por Kamran Ahsan
Hay múltiples protocolos que han sido objeto de estudio para ver como implementar estos canales. Ejemplos: TCP/IP, HTTP, DNS, DHCP, ICMP, IGMP, IPSEC, IPv6, protocolos IEEE 802 y protocolos del modelo OSI.
Algunos de los análisis no se han quedado sólo en un mero estudio teórico sino que han sido implementados. Ej: Covert_TCP (para canales encubiertos sobre TCP/IP), Loki (para ICMP), Firepass (para HTTP), PingTunnel (para ICMP) y Ozyman (para DNS).
También se ha intentado la implementación de canales encubiertos usando temporización. En los primeros intentos para implementarlos tuvieron muchas dificultades para establecer una forma de sincronización. Además, el estado de la red resulta determinante en la correcta recepción de los datos o el ancho de banda del canal se ve gravemente reducido. En 2006 se propone jitterbugs. Son dispositivos, que pueden ser tanto hardware como software, cuya finalidad es reconocer información sensible (Ej passwords) y modularla a través de canales de temporización a través de la red. Para modular no genera nuevos eventos sino que utiliza otros para transmitir la información, y por eso se dice que son semipasivos. Por ejemplo si se está ejecutando una aplicación que usa una comunicación interactiva (como SSH, Telnet, IM, un receptor que monitorice el tráfico de red del host puede recuperar los datos, incluso aunque la sesión esté cifrada. En el estudio original se implementó un jitterbugs hardware para el teclado. Éste aprovecha que la mayoría de las aplicaciones de red interactivas (Ej telnet) envía un paquete de datos tras cada pulsación de teclado realizado. Jitterbugs añade pequeños retardos, virtualmente inapreciables a nivel de usuario, cada vez que se pulsa una tecla para retrasar a su vez el envío de los respectivos paquetes. Estos retrasos serán observados por la entidad receptora con el fin de recuperar la información oculta.

### Emanaciones de dispositivos

Hay abundantes ejemplos del aprovechamiento de las emanaciones electromagnéticas que realizan distintos dispositivos, para su uso como canal de comunicación encubierto. Normalmente este tipo de canales son producidas por emanaciones no intencionadas y por tanto se dice que se trata de canales ocultos. Veamos algunos:
* Paul Kocher aprovecha las fluctuaciones de la alimentación eléctrica en microcontroladores de tarjetas inteligentes para la reconstrucción de claves DES.
* Meter Smulders investiga la escucha clandestina electromagnética sobre cables RS232.
* Win van Eck demuestra la escucha clandestina de las emanaciones emitidas por pantallas de video (Interferencia de Van Eck).
* Utilización por parte del ejército alemán de aparatos que escuchan las señales de retorno de tierra de los teléfonos de campo distantes
* El MI5 analiza las emisiones de alta frecuencia en el cable de télex cifrado.
Por la preocupación por todo este tipo de problemas el gobierno de los Estados Unidos desarrolla el programa TEMPEST que estudia este tipo de tecnologías que permiten escuchas clandestinas y desarrolla una serie estándar de requisitos a exigir según el nivel de protección que se desea.
Además de las emanaciones electromagnéticas se ha experimentado que cambios en la temperatura pueden ser inducidos remotamente, por ejemplo produciendo una sobrecarga de CPU. Este tipo de ataques puede ser usado para geolocalización, y como canal encubierto.

## Utilización
### Violación de seguridad

Un sistema informático se puede considerar seguro si para que un usuario pueda acceder a cierta información es necesario que éste se identifique para que el sistema pueda comprobar si tiene autorización para acceder a dicha información (seguridad multinivel). Es decir, el acceso a la información se realiza mediante una porción del sistema que hace de mediador confiable. En el mundo real de los sistemas informáticos no tenemos seguridad absoluta sobre la fiabilidad del mediador. Además la mayoría de los sistemas tienen características (Ej. ficheros de bloqueo, bits de estado, memorias, discos duros, redes de comunicaciones) que son compartidos entre los usuarios a distintos niveles. Algunas de estas características o recursos tienen atributos que pueden ser la base para constituir canales encubiertos que permiten la comunicación de información de forma que se viole la política de seguridad.
Los canales encubiertos también pueden ser aprovechados como canal de comunicación de difícil detección que permita que cierta información sea transmitida a un tercero. Ejemplo típico de este tipo de información pueden ser contraseñas, correos electrónicos o documentos confidenciales. Por ejemplo puede ser aprovechados por virus o troyanos

### Canal de difícil detección

Los canales encubiertos se pueden usar como canales de comunicación de información de difícil detección por parte de terceros que no sepan de su existencia. Se pueden utilizar para intentar evitar problemas de censura.

### Generación de nuevos servicios

Los canales encubiertos se pueden aprovechar para generar nuevos servicios. Por ejemplo Z. Kotulski propone su uso para mejorar las prestaciones del protocolo VoIP.

## Control
### Bibliografía

Hay importantes estudios sobre la detección/prevención/eliminación de canales encubiertos. Veamos algunos de las más importantes aportaciones:
* En 1993 el NCSC de la NSA publica "The Light Pink Book" que se dedica exclusivamente al análisis de los canales encubiertos, presentando diversos métodos para la identificación de estas formas de ocultación (Ej. Shared Resource Matrix).
* En 1993 Kang y Moskowitz proponen NRL Pump que es un sistema de buffers que se interpone entre los procesos comunicantes e introduce retrasos aleatorios reduciendo las posibilidades de comunicación oculta. Esta idea será más adelante adoptada para combatir los canales encubiertos en redes.
* En 1995 J. MacHugh propone distintas formas de análisis y detección de los canales encubiertos.
* En 1996 N. Orgutsov y otros investigadores analizan varios métodos existentes y proponen uno nuevo
* En 2002 Fisk y otros investigadores presentan la implementación de 'guardianes activos (según la terminología del Problema del prisionero) basándose en el análisis de cabeceras de protocolos. La técnica utilizada es la introducción de ruido en el portador.
* En 2004 Cabuk y otros investigadores presentan métodos de detección basados en el tiempo interpaquete, ya que al estar los envíos regidos por temporizadores deben seguir un patrón de llegada regular, lo cual no ocurre con el tráfico normal generado por usuarios.
* En 2005 Lewis y Murdoch critican el uso de cabeceras TCP/IP para crear canales de almacenamiento. Hacen ver que esos campos en la realidad no tienen valores aleatorios sino que son dependientes del sistema operativo. Esto les permite realizar test para detectar este tipo de canales ocultos.

### Métodos de detección

Determinar si cierto hardware o software contiene canales encubiertos es indecidible.
Por esta razón se han desarrollado técnicas que permitan poder identificarlos. Estos sistemas se basan en buscar dependencias que puedan ser explotadas para implementar este tipo de canales. Veamos algunos ejemplos:
* Shared Resource Matrix o SRM
* Covert Flow Trees
* Information Flow Formulae
* Métodos de no-interferencia

### Evaluación de canales

Una vez que los canales encubiertos han sido identificados, su importancia tiene que ser determinada analizando diversos factores. Veamos algunos de ellos:
* Evaluación de la importancia y naturaleza de la información que puede ser comprometida mediante ese canal.
* El ancho de banda.- Es necesario que proporcione un ancho de banda suficiente para ser usado con el propósito que deseamos
* Detección.- Para que se pueda usar un canal sin levantar sospechas, es decir que sea difícil de detectar. Por ejemplo hay canales ocultos que se basan en el uso de campos de cabecera. Sin embargo algunos de estos campos tienen valores característicos determinados por el sistema operativo utilizado y si son modificados de cualquier manera podrían ser detectados fácilmente. Por ejemplo si usamos los campos timestamps de TCP, sólo podemos hacer modificaciones en los bits menos significativos ya que si no el cambio sería fácilmente detectable.
* Difícil eliminación.- Por ejemplo algunos firewalls, para prever este tipo de flujos de información no controlada, toman una serie de medidas estándar para eliminar de forma preventiva situaciones de riesgo. Por ejemplo pueden resetear todos los campos de cabeceras de protocolos que consideran que no son necesarias.

### Contramedidas

En general una vez que hemos detectado un canal, podemos tomar tres tipos de decisiones:
* Permitirlo. En ciertas situaciones las características de canal (Ej baja capacidad) y los esfuerzos que serían necesarios para eliminarlos, recomienda simplemente permitirlo. A veces se establece un mecanismo de auditoría que verifique si ese canal está siendo utilizado
* Reducir su capacidad, es decir, su ancho de banda.
* Eliminarlo
Ejemplos de técnicas típicas de luchar contra los canales ocultos, a veces los eliminan y otras veces lo que hacen es reducir la capacidad del canal:
* Añadir ruido
* Virtualización
* Composición segura

## Herramientas para aprovechar canales encubiertos

Son herramientas diseñadas para explotar canales encubiertos para permitir mantener ocultas ciertas comunicaciones.
Herramientas de este tipo son:
* Loki. Originalmente diseñado como prueba de concepto de como ICMP puede ser usado como canal encubierto, se puede aprovechar para pasar información dentro de paquetes echo ICMP, lo cual es muy poco usado.
* ICMP Backdoor. Similar a Loki pero en lugar de usar paquetes echo usa paquetes otros tipos de paquetes ICMP.
* 007Shell. Usa paquetes ICMP para enviar información pero realiza un paso extra para formatear los paquetes y conseguir que estos tenga un tamaño normal.
* B0CK. Similar a Loki pero usa el Internet Group Management Protocol (IGMP).
* Reverse World Wide Web (WWW) Tunneling Shell. Crea canales encubiertos a través de firewalls y proxys ocultándolo como tráfico web normal.
* AckCmd. Provee una shell sobre sistemas Windows.