BLOG

HTTP en ascenso: Telemetría, seguimiento y terrorismo en entornos de contenedores

Miniatura de Lori MacVittie
Lori MacVittie
Publicado el 4 de diciembre de 2017

El protocolo HTTP es omnipresente. Su televisor habla HTTP. Tu teléfono. Tu tableta. Tu coche. Si es un dispositivo con funciones de red, probablemente hable HTTP con tanta fluidez como usted habla su idioma nativo.

equipo-http-badger

HTTP es algo flexible. A diferencia de sus vecinos de red, TCP e IP, es casi ilimitado en la información que puede transportar del punto A al punto B. Mientras que IP y TCP deben cumplir con estándares muy estrictos e inflexibles que definen, bit a bit, qué valores se pueden usar, HTTP adopta un enfoque de laissez-faire con respecto a los datos que transporta. Texto. Binario. Formato JSON. XML. Encriptado. Texto sin formato.

Al igual que Honey-Badger, al HTTP no le importa. Lo llevará todo, y mucho más.

Una de las formas en las que HTTP muestra constantemente su flexibilidad es en sus encabezados que los usuarios rara vez ven. Estos son los metadatos que contiene cada solicitud y respuesta HTTP. Comparte todo, desde el tipo de contenido y su longitud, hasta tokens de autorización y migas de pan que revelan quién eres y dónde has estado, lo quieras o no.

Es importante tener esto en cuenta porque, como hemos visto en el espacio de contenedores, los encabezados HTTP están creciendo como un mecanismo no solo para transportar datos entre clientes y servicios, sino como un medio para compartir los metadatos que hacen que estos entornos de rápido movimiento escalen de manera muy eficiente.

De creciente importancia es la noción de una malla de servicios y, con ella, la adición de encabezados HTTP personalizados que llevan información operativa. Este blog de Buoyant (la empresa detrás de una de las dos principales implementaciones de servicios en malla de código abierto) ilustra la dependencia de los encabezados HTTP para compartir la telemetría necesaria para permitir la correlación de rastros que ayudan a simplificar el conjunto altamente complejo de transacciones entre servicios que conforman un único par de solicitud y respuesta HTTP.

Para aquellos que no estén interesados en leer el blog mencionado en su totalidad, aquí está la parte más relevante (la destaco yo):

Si bien en Buoyant nos gusta describir todos los datos de seguimiento adicionales que proporciona linkerd como "información mágica de telemetría para microservicios", la realidad es que necesitamos una pequeña cantidad de contexto de solicitud para conectar los seguimientos. Ese contexto de solicitud se establece cuando linkerd recibe una solicitud y, para las solicitudes HTTP, se pasa a través de encabezados HTTP cuando linkerd envía la solicitud a su aplicação. Para que su aplicação preserve el contexto de la solicitud, debe incluir, sin modificaciones, todos los encabezados HTTP l5d-ctx-* entrantes en cualquier solicitud saliente que realice.

Cabe señalar que los encabezados HTTP personalizados a los que se hace referencia son solo uno de los varios que se utilizan para compartir telemetría en estos sistemas altamente distribuidos. Como se señala en el blog, el encabezado l5d-sample se puede utilizar para ajustar las frecuencias de muestreo de seguimiento. Por lo tanto, no sólo se utiliza para compartir información, sino también para proporcionar control operativo sobre el sistema .

Déjalo reposar por un momento. Los encabezados HTTP se utilizan para controlar el comportamiento de los sistemas operativos. Recuerde esto, será importante en un par de párrafos.

En lugar de separar el plano de control del plano de datos, en este caso ambos planos se transportan simultáneamente y recae en los puntos finales la tarea de separar la forma de la función, por así decirlo. Como esta solución particular se basa en un concepto de malla de servicios (en el que cada solicitud entrante y saliente de un servicio pasa a través de un proxy), esto se logra con bastante facilidad. El proxy puede filtrar los encabezados HTTP operativos y actuar sobre ellos antes de reenviar la solicitud (o respuesta) a su destinatario previsto. También puede agregar instrucciones operativas, así como insertar telemetría para ayudar a hacer coincidir los rastros más tarde.

La red de aplicação también se está volviendo algo común en los entornos de contenedores. Si bien siempre ha sido una cosa (al menos para aquellos de nosotros en el mundo de los proxies programables), ahora está aumentando con mayor frecuencia a medida que crece la necesidad de una mayor flexibilidad. Los controladores de ingreso son, en esencia, servidores proxy programables que permiten el enrutamiento basado no solo en direcciones IP o FQDN, sino también en datos específicos de la aplicación que generalmente se transportan en encabezados HTTP. Versionado, dirección y escalado. Todas estas funciones de un controlador de ingreso son posibles gracias a HTTP y su actitud de indiferencia hacia los encabezados HTTP.

Lamentablemente, los encabezados HTTP también son su propio vector de ataque. Nos corresponde entonces considerar cuidadosamente las ramificaciones de confiar en los encabezados HTTP no sólo para compartir datos operativos sino también para controlar el comportamiento operativo. Los encabezados HTTP son un comodín (en serio, lea el BNF) que universalmente se basa en texto. Esto hace que no sólo sean fáciles de modificar, sino también de manipular para que transporten comandos maliciosos que son consumidos por un número cada vez mayor de dispositivos y sistemas intermedios y finales.

Si esto no te aterroriza, no has estado prestando atención.

Afortunadamente, el uso de encabezados HTTP como método tanto de control como de plano de datos se limita principalmente a los sistemas en contenedores. Esto significa que generalmente están ocultos detrás de varios puntos de control públicos que brindan a las organizaciones la capacidad de mitigar la amenaza de su naturaleza excesivamente generosa. Un enfoque arquitectónico que combine una ruta de entrada segura (norte-sur) puede proporcionar la protección necesaria contra la explotación. No, no hemos visto a nadie intentar eso. Todavía. Pero ya hemos visto demasiadas infracciones gracias a los encabezados HTTP, por lo que es mejor prevenir que curar.

El protocolo HTTP está en ascenso, no sólo como el protocolo principal para aplicaciones, servicios y dispositivos, sino también para telemetría, rastreo y transporte de comandos operativos. Es un momento emocionante, pero debemos moderar ese “podemos hacer cualquier cosa” con un “pero hagámoslo de forma segura” si queremos evitar desastres operativos.