Matriz de resurrecciones: LLegan las vulnerabilidades de código invisibles

0
17

A inicios de noviembre de 2021, los especialistas del mundo de la inseguridad cibernética han quedado perplejos ante un nuevo tipo de ataque que consiste en codificar las instrucciones malignas, dentro del código de la aplicación que será subvertida; algo propio de técnicas rudimentarias de contaminación que se usaban a inicios de los pasados años 90’s, cuando los virus y troyanos se inoculaban como parte de un sistema y contaminaban su estructura, desvirtuando su real operatividad.

Un Deja Vu extrañamente parecido a la del filme “Matrix Resurrections” de las hermanas Wachowski, pero con algo peculiar, el código maligno, parece tan natural como el de la aplicación y puede ser visto por un humano, posiblemente sin distinguir su naturaleza y es que, su interpretación dañina le puede resultar oculta.

Allí radica su peligro, en el hecho de que hasta un auditor de programas, que no sea verdaderamente versado en este tipo de ataques, puede ser burlado al desconocer que lo que observa ante su pantalla, será interpretado en modo distinto por los compiladores de varios lenguajes de programación. El equipo de investigadores de Cambridge, que reveló el problema, afirma que C, C++, C#, Phyton, Rust, Javascript, Go y Java son algunos de los lenguajes que pudieran verse afectados por programas ya contaminados, al igual que por herramientas de traducción a código de máquina que no estén preparadas para evadir tales amenazas informáticas. En general, los mecanismos de desarrollo de software modernos, asumen que los compiladores y traductores a usar, son herramientas confiables y casi nadie se toma el trabajo de revisar el código binario que estos producen. De hecho se emplean para liberar a los programadores de la tediosa tarea de escribir en códigos que realmente sean ejecutados por las máquinas. Entonces, esto posibilita la ocurrencia de ataques de cadena de provisiones, que tanto miedo generan a las empresas de desarrollo de software y es que hasta los mismos sistemas operativos pueden quedar en jaque. Una aplicación que se soporte en llamadas a un kernel maligno, puede funcionar sobre una base falsa de operaciones y en consecuencia, realizar acciones distintas a las que sus diseñadores y desarrolladores suponen haría.

¿Y cuál es la esencia de este nueva vulnerabilidad en el ciberespacio? Lo irónico es que el corazón de este entuerto proviene de nuestra propia tecnología y de la diversidad cultural y comunicativa de nuestra especie humana; las variaciones en el sentido de cómo se lee en distintas latitudes y las codificaciones que hemos desarrollado, para darle amplitud a nuestros instrumentos computacionales. Específicamente, se trata de la codificación Unicode y los glifos visuales, un esquema que permite incorporar cual cadenas de texto esos símbolos. De forma que la representación de texto (“text rendering”), se logra interpretando bytes codificados como puntos de códigos numéricos, según un formato previamente establecido. Por ejemplo, el punto de código U+202A se asocia con la abreviación “LRE” (Left-to-Right_Embedding) que señala que el texto siguiente debe ser procesado de izquierda a derecha. Una de aproximación similar a la de etiquetas en HTML y que se cierra con el punto de código U+202c, que a su vez tiene vinculado la instrucción “PDF” (Pop-Directional-Formatting). Esta última significa que allí termina el orden de ese modo de lectura, recién establecido.

Ahora bien, el inconveniente mayor es que esto permite ordenar repetidamente los textos y en un guión de programación es posible mezclar diferentes formatos de lectura, de modo que los sistemas automáticos interpretan el asunto y los procesan como se debe. En Unicode esto se hace a través de un Algoritmo Bidireccional que se abrevia como “Bidi”. Ahora bien, hay casos donde los caracteres de reordenamiento de la secuencia no son suficientes y por ello se permite la reescritura de estos produciendo una anulación de la instrucción, algo característico de una máquina concebida bajo el paradigma de cómputo de Turing y que se ha empleado con sistemas de Procesamiento Natural del Lenguaje. Luego, esta sobre escritura tiende a ignorarse para un ojo humano no agudo en tales artes más si son conocidas por compiladores modernos, nientras que otras veces, el ojo humano la podría reconocer pero un compilador viejito ni se enterará de su presencia. Un problema para los programadores y hasta para algún auditor de código no suficientemente experimentado, por lo cuál se dice que la dificultad es no visible para alguien y la jerga técnica a modo de sarcasmo, señala que esto permite instrumentar una debilidad de código invisible. No basta conocer el programa fuente, se requiere conocer también las herramientas con las que se procesará el mismo, a un nivel que nos permita anticipar si ésta procesará un comentario de programa o una cadena de caracteres, literalmente, o manipulará el texto al detectar cualquier punto de código numérico.

Esta desafortunada característica pone el balón en el campo del ingenio humano, del engaño y de lo no determinístico. Es decir, un fino control del sistema para los seres malvados, donde además la tecnología puede resultar en su gran aliada. Pensemos en esto como una frontera aún en exploración donde los antivirus, los detectores de intrusos, los cortafuegos digitales y los estándares de seguridad corporativos resultan inútiles, ya que no se conoce el o los patrones malignos que deberían ser reconocidos, bloqueados o desactivados. ¿Puede nuestra tecnología moderna anticiparse a una sofisticada trampa humana, que aún no se concibe?

No faltará quien diga, avancemos de primero nosotros, quitemos los componentes que permitirán hacer futuras bombas; esto quiere decir, eliminar esas características de formato Bidi poco conocidas que incorpora Unicode. El inconveniente es que entonces se pierde la capacidad de trabajar con aplicaciones que puedan entre mezclar informaciones de Occidente, Asia y el Medio Oriente, algo por cierto de impacto negativo para nuestros sistemas bancarios y comerciales que soportan una economía global y electrónica. Reaparecen las restricciones de lenguaje de computadoras y retornamos a la era de las interfases de compatibilidad, portabilidad y transporte comunicacional. El viejo castigo divino de la Torre de Babel y la proliferación de nuestros diversos lenguajes; recordemos que ASCII no tenía esa debilidad pero tampoco era universal y amplio. Los expertos saben que a medida que los productos se hacen más sofisticados y versátiles, también se hacen más inseguros. Lo peor es que no hay una bala de plata que todo lo componga, tampoco un antídoto universal. El área es un asunto de ingeniería, no magia. “Bienvenidos a la Matriz de nuevo” nos diría un Morfeo impasible y es que una vieja trampa que logramos controlar por décadas, ha resurgido como una mayor amenaza. Es el clásico juego del gato y el ratón, ellos hacen y nosotros respondemos minimizando los potenciales riesgos. Una y otra vez, con altas y bajas un negocio del cual cada vez más dependemos todos.

Para que el lector interesado pueda comprender la magnitud de este peligro, colocaremos un ejemplo sencillo en un lenguaje de programación bastante similar a C; este caso ha sido formulado tomando como base el trabajo original de Boucher y Anderson y no cubre todas las posibilidades de explotación de este tipo de vulnerabilidades, sino posiblemente ilustra la más simple de las que ya se conocen:

Un revisor no atento podría pensar que lo que está dentro de los comentarios son instrucciones inocuas, que en nada pueden incidir sobre el código ejecutable y que un compilador ignorará sus contenidos. Ergo, el mensaje de que usted está ejecutando el modo de administrador aparecerá en pantalla. Otro individuo, que conozca algo de Unicode y Bidi puede suponer que el mensaje no aparecerá si la variable lógica no tiene el valor de verdad, ya que el compilador moderno entenderá la presencia de los caracteres de formato direccionales y reconocerá la instrucción LRI, que impone una escritura de izquierda a derecha. En otras palabras, esa sección se ejecuta únicamente si es el administrador del sistema quien corre el programa ejecutable. Pero si el inspector es más cuidadoso, también puede comprender que algunos compiladores tienen capacidad para identificar los caracteres de anulación y sobrescritura de órdenes de formato. Esto quiere decir que notará la presencia U+202e asociada con “RLO” (Right-to-Left Override), que indica que se debe hacer caso omiso del caracter LRI y PDI que estén internos en su sección. De forma que algunos compiladores pueden desechar la evaluación y considerar la prioridad del orden de las llaves. La gente de Cambridge observó que en algunos casos el mensaje de ser el administrador aparece y en otros no sucede eso. ¿Con cuál de todas las opciones se quedará el examinador? Para estar confiado, deberá experimentar cuidadosamente con el compilador y esperar que este no cambie durante el desarrollo de la aplicación.

Ahora bien, ¿qué ocurre si el cliente lo que tiene es el ejecutable y no el código fuente?. ¿Cómo usar un código que no se sabe si realmente funcionará como se requiere? Y algo aún más aterrador ¿qué hacemos con todo el código ya elaborado y en producción? Así pues, el trabajo de los verdaderos expertos se complica y demanda adicionalmente una revisión de los instrumentos de desarrollo de software del mercado. Ya algunos fabricantes están intentando uniformar sus compiladores y documentar el comportamiento de sus productos. “Conócete a ti mismo” habría sentenciado el Oráculo del filme y ahora eso, nos resulta de mayor relevancia. Pero mientras las soluciones industriales aparecen en modo satisfactorio, el señor Anderson deberá estar vigilante de que el agente Smith y sus clones le puedan surgir en cualquier momento, produciendo un riesgo monumental para su propia seguridad. Así que ya tenemos una nueva píldora roja, queda de parte de los clientes abrir los ojos de lo que ciertamente es la matriz y buscar el apoyo de empresas de seguridad cibernética profesionales; organizaciones que estén al día con las últimas amenazas tecnológicas y puedan proveer soluciones efectivas, más allá de lo trillado y repetido hasta la saciedad. Cambie su contraseña, instale los parches correctivos, configure su sumidero de ataques de negación de servicio, etcétera etcétera. Esto no detiene un ataque de Troyano en la Fuente con caracteres invisibles.

Autor: Miguel Torrealba Sánchez
Departamento de Computación y Tecnología de la Información de la Universidad Simón Bolívar.
mtorrealba@usb.ve

Artículo anteriorLa Copa Mundial de Fútbol 2022 ya es gancho para difundir estafas
Artículo siguienteBiblioteca Digital Banesco va a los colegios de Fe y Alegría