Cómo prevenir ataques Trojan Source con Snyk Code
Frank Fischer
17 de noviembre de 2021
0 minutos de lecturaA principios de este mes, un grupo de investigadores de la Universidad de Cambridge publicó un artículo académico, junto con un sitio web complementario, sobre un nuevo tipo de vulnerabilidad potencial que podría aparecer en el código fuente. La llamaron Trojan Source.
La idea básica de esta vulnerabilidad es que el uso de caracteres Unicode en el código, que permite opciones atractivas para los nombres de variables o los comentarios (por ejemplo, usar emojis para expresar lo que sientes en los comentarios), también puede ocultar semánticas potencialmente maliciosas a simple vista (humana) dentro del código. Por ejemplo, un atacante podría hacer que el código parezca contener una lógica de autenticación válida, cuando en realidad (o para el compilador o intérprete) ejecuta una acción completamente distinta. O lo que parece ser código activo en realidad son solo comentarios que, por lo tanto, se ignoran durante la ejecución. Y todo esto se logra usando caracteres Unicode para engañar al ojo humano.
Si te interesa conocer los detalles de esta vulnerabilidad, te recomendamos consultar el sitio web original o el artículo. Y si quieres ver la vulnerabilidad en acción en JavaScript, mi colega Liran Tal escribió un artículo de blog sobre cómo detectar y mitigar eficazmente los ataques Trojan Source en bases de código JavaScript con ESLint.
En esta publicación, vamos a usar Snyk Code para encontrar y corregir Trojan Source en el código fuente. ¡Empecemos!
«¿Puede Snyk Code corregir Trojan Source?»
Esta fue la pregunta que recibimos el mismo día en que se publicó el sitio web (una muestra de lo bien informados y conectados que suelen estar los clientes de Snyk). Permíteme resumir la conversación interna que tuvimos: después de consultar al equipo, la primera reacción fue que (1) parecía un ataque viable a la cadena de suministro, pero menos probable en el código propio, ya que requiere acceso al código fuente, y (2) este ataque funciona en el nivel sintáctico.
Nota: Como puedes ver en el artículo de Liran, Trojan Source es un ataque al nivel sintáctico; por eso ESLint ayuda a los desarrolladores de JavaScript. Lamentablemente, otros ecosistemas como Java, Ruby, C# y más quizá no cuenten con nuevas herramientas para mitigar este vector de amenaza, lo que hace que Snyk Code sea una herramienta aún más importante para agregar a tu caja de herramientas.
En vista de la reacción que vimos en la comunidad y de las solicitudes de nuestros clientes, acordamos agregar reglas para abordar los problemas de Trojan Source. Como no se trata de un problema de alta severidad (su visibilidad es alta únicamente por la cobertura reciente en los medios), no aceleramos una corrección, sino que la agregamos como tarea al sprint actual. Pero no quisimos quedarnos ahí. Mientras agregábamos esta regla, también ampliamos la cobertura para una categoría de vulnerabilidades relacionadas con caracteres UTF confundibles. Por último, nos aseguramos de que el conjunto de reglas cubriera todos los lenguajes compatibles con Snyk Code.
Es importante destacar que solo tomó 10 días desarrollar y lanzar las reglas para Trojan Source (y problemas relacionados) en todos los lenguajes compatibles con Snyk Code, y eso sin usar un proceso acelerado, sino como parte del sprint actual. Es un ejemplo perfecto de la agilidad de Snyk Code: decidir, programar, probar en cientos de miles de proyectos en todos los lenguajes compatibles, optimizar y lanzar en 10 días. También demuestra la potencia del motor de Snyk Code mejorado con aprendizaje automático: en unas pocas horas de desarrollo, no solo cubrimos Trojan Source, sino que también abordamos algunos problemas relacionados.


Snyk Code detecta Trojan Source y otras variantes peligrosas
Trojan Source probablemente se presentaría como un ataque a la cadena de suministro de código abierto, pero también podría ejecutarse al copiar y pegar directamente en el código de la aplicación (como se muestra en el blog de Liran). Por eso, Snyk Code incluye análisis para detectar problemas del tipo Trojan Source en tu base de código.
Nota: Snyk también es una herramienta eficaz para proteger la cadena de suministro de código abierto, ya que te permite monitorear y corregir fácilmente los problemas relacionados con la seguridad de las dependencias y el cumplimiento de licencias.
Como mencionamos antes, el equipo tardó unos días en desarrollar la detección de Trojan Source, pero Snyk Code puede detectar más variantes del ataque que la mayoría de las otras herramientas. Por ejemplo, Snyk Code no solo detecta caracteres de control bidireccional, sino también caracteres UTF confundibles usados en nombres de métodos y variables que podrían ocultar la verdadera semántica del código. Esto significa que, hoy en día, Snyk Code detecta un conjunto más amplio de problemas descritos por Trojan Source que cualquier otro analizador que conozcamos.
Nota: Snyk Code es compatible con Java, JavaScript, TypeScript, PHP y Python; además, C#, Ruby y Go están disponibles en beta pública. Trojan Source podría atacar otros lenguajes (por ejemplo, scripts de Bash), pero Snyk Code no puede analizar lenguajes no compatibles.
Snyk Code es el talón de Aquiles de Trojan Source
Como puedes ver arriba, Snyk Code ofrece un motor potente, capaz de realizar una amplia variedad de análisis. En general, aprende del conocimiento de la comunidad global de desarrolladores mediante un algoritmo único guiado por personas. Además, podemos responder rápidamente a los cambios del mercado y a amenazas en evolución como Trojan Source. Como resultado, Snyk Code detecta no solo Trojan Source, sino también vulnerabilidades relacionadas, y aprovecha su base de conocimientos existente para ofrecer una precisión líder en la industria. Los problemas se explican con el código fuente original y se brinda ayuda adicional, incluidos ejemplos de cómo los proyectos de código abierto resolvieron problemas similares, para que los desarrolladores puedan comprenderlos y corregirlos.
Todo esto, con una velocidad inigualable y desde la comodidad de tu IDE favorito. Ah, y puedes usarlo gratis, ¡lo que parece motivo más que suficiente para probarlo!
Protege tu código con información de vanguardia
Conoce todas las funcionalidades de SAST de Snyk Code en solo 30 minutos.
