Descargas

Ataque de caballo de Troya de origen que introduce cambios en el código que son invisibles para el desarrollador

Los investigadores de la Universidad de Cambridge publicado como Nuevo Tecnología para Reemplazo sutil de código malicioso en fuentes revisadas por pares. El método de ataque preparado ( CVE-2021-42574 ) se presenta bajo el nombre Fuente de troyano y se basa en la formación del texto, que se ve diferente para el compilador / intérprete y la persona que ve el código. Los ejemplos de aplicación del método son mostrado para varios compiladores e intérpretes para C, C ++ (gcc y clang), C #, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go y Python.

El método se basa en la aplicación de caracteres Unicode especiales en los comentarios del código, que cambian el orden de visualización del texto bidireccional. Con la ayuda de estos caracteres de control, algunas partes del texto se pueden mostrar de izquierda a derecha y otras de derecha a izquierda. En la práctica diaria, por ejemplo, estos caracteres de control se pueden utilizar para insertar cadenas de caracteres hebreos o árabes en un archivo con código. Sin embargo, si combina líneas con diferentes direcciones de texto en una línea con los caracteres especificados, los pasajes de texto que se muestran de derecha a izquierda pueden superponerse al texto normal ya existente de izquierda a derecha.

Con este método, puede agregar una construcción maliciosa al código, pero luego hacer que el texto con esa construcción sea invisible mientras visualiza el código agregando caracteres que se muestran de derecha a izquierda en el comentario a continuación o en el literal, lo que da como resultado un conjunto completo de diferentes caracteres superpuestos a la inserción maliciosa. Dicho código sigue siendo semánticamente correcto, pero se interpreta y se muestra de manera diferente.

Mientras revisa el código, el desarrollador se enfrenta al orden visual de los caracteres y ve un comentario sospechoso en un editor de texto moderno, interfaz web o IDE, pero el compilador y el intérprete utilizan el orden lógico de los caracteres y tratan la inserción maliciosa. ya que es independiente del texto bidireccional. en el comentario. Varios editores de código comunes (VS Code, Emacs, Atom) e interfaces para mostrar código en repositorios (GitHub, BitBucket) se ven afectados.

Hay varias formas de utilizar el método para implementar acciones maliciosas: Agregar una expresión de «retorno» oculta, que conduce a la terminación prematura de la ejecución de la función; la conclusión al comentar sobre expresiones que normalmente se consideran construcciones válidas (por ejemplo, para deshabilitar comprobaciones importantes); Asignación de otros valores de cadena que dan como resultado errores de validación de cadena.

Por ejemplo, un atacante podría sugerir un Cambio que incluye la línea:

   if access_level! = "user U + 202E U + 2066 // Check if admin U + 2069 U + 2066" {

que se muestra en la interfaz de revisión como

   if access_level! = "user" {// Check if admin

Además, se ha propuesto otra opción de ataque (CVE-2021-42694) que implica el uso de Homoglyphs , Símbolos que parecen similares pero difieren en significado y tienen diferentes códigos Unicode (por ejemplo, el símbolo “ɑ” es similar a “a”, “ɡ” – “g”, “ɩ” – “l”). Estos caracteres se pueden utilizar en los nombres de funciones y variables en algunos idiomas para engañar a los desarrolladores. Por ejemplo, se pueden definir dos funciones con nombres indistinguibles que realizan diferentes acciones. Sin un análisis detallado, no puede comprender de inmediato cuál de estas dos funciones se llama en un punto en particular.

Como medida de protección, se recomienda implementar una visualización de error o advertencia en compiladores, intérpretes y herramientas de ensamblaje que admitan caracteres Unicode para caracteres de control no apareados en comentarios, literales de cadena o identificadores que cambian la dirección de salida (U + 202A, U + 202B , U + 202C, U + 202D, U + 202E, U + 2066, U + 2067, U + 2068, U + 2069, U + 061C, U + 200E y U + 200F). Estos caracteres también deben prohibirse explícitamente en las especificaciones de los lenguajes de programación y deben tenerse en cuenta en los editores de código y las interfaces para trabajar con repositorios.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba