{"id":23457,"date":"2021-11-23T13:35:43","date_gmt":"2021-11-23T19:35:43","guid":{"rendered":"https:\/\/latam.kaspersky.com\/blog\/?p=23457"},"modified":"2021-11-23T13:35:43","modified_gmt":"2021-11-23T19:35:43","slug":"trojan-source","status":"publish","type":"post","link":"https:\/\/latam.kaspersky.com\/blog\/trojan-source\/23457\/","title":{"rendered":"Implantes invisibles en el c\u00f3digo fuente"},"content":{"rendered":"<p>Los expertos de la Universidad de Cambridge <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"noopener nofollow\">describieron<\/a> una vulnerabilidad que dicen afecta a los compiladores m\u00e1s modernos. Un nuevo m\u00e9todo de ataque utiliza una funci\u00f3n leg\u00edtima de las herramientas de desarrollo en el que el c\u00f3digo fuente muestra una cosa, pero compila otra completamente distinta. Y esto sucede mediante la magia de los caracteres de control Unicode.<\/p>\n<div id=\"attachment_23462\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-23462\" class=\"wp-image-23462 size-large\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/87\/2021\/11\/23103928\/trojan-source-characters-1024x226.jpg\" alt='Los caracteres de formato de direccionalidad Unicode relevantes para reordenar los ataques. &lt;a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow\"&gt;Fuente&lt;\/a&gt;.' width=\"1024\" height=\"226\"><p id=\"caption-attachment-23462\" class=\"wp-caption-text\">Los caracteres de formato de direccionalidad Unicode relevantes para reordenar los ataques. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fuente<\/a>.<\/p><\/div>\n<p>\u00a0<\/p>\n<p>La mayor\u00eda de las veces, los caracteres de control no aparecen en la pantalla con el resto del c\u00f3digo (aunque algunos editores los muestran), pero modifican el texto de alguna manera. <a href=\"https:\/\/www.w3.org\/International\/articles\/inline-bidi-markup\/uba-basics\" target=\"_blank\" rel=\"noopener nofollow\">En esta tabla<\/a> se incluyen los c\u00f3digos para el algoritmo bidireccional (bidi) Unicode, por ejemplo.<\/p>\n<p>Como probablemente ya sabes, algunos idiomas (lenguajes) humanos est\u00e1n escritos de izquierda a derecha (por ejemplo, espa\u00f1ol), otros de derecha a izquierda (por ejemplo, ar\u00e1bigo). Cuando el c\u00f3digo contiene solo un lenguaje, no hay problema, pero cuando es necesario (cuando, por ejemplo, una l\u00ednea contiene palabras en espa\u00f1ol y ar\u00e1bigo) el c\u00f3digo bidi especifica la direcci\u00f3n del texto.<\/p>\n<p>En la investigaci\u00f3n, los autores utilizaron c\u00f3digos para, por ejemplo, mover el terminador de comentarios en el c\u00f3digo Python de la parte central de una l\u00ednea al final. Aplicaron un c\u00f3digo RLI para cambiar solo algunos caracteres, dejando el resto igual.<\/p>\n<div id=\"attachment_23463\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-23463\" class=\"wp-image-23463 size-large\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/87\/2021\/11\/23104010\/trojan-source-example-1024x171.jpg\" alt='Ejemplo de c\u00f3digo Python vulnerable que utiliza c\u00f3digos bidi. &lt;a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow\"&gt;Fuente&lt;\/a&gt;.' width=\"1024\" height=\"171\"><p id=\"caption-attachment-23463\" class=\"wp-caption-text\">Ejemplo de c\u00f3digo Python vulnerable que utiliza c\u00f3digos bidi. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fuente<\/a>.<\/p><\/div>\n<p>\u00a0<\/p>\n<p>A la derecha est\u00e1 la versi\u00f3n que los programadores ven al revisar el c\u00f3digo fuente; a la izquierda se muestra c\u00f3mo el c\u00f3digo se ejecutar\u00e1. La mayor\u00eda de los compiladores ignora los caracteres de control. Cualquiera que revise el c\u00f3digo pensar\u00e1 que la quinta l\u00ednea es un comentario inofensivo, aunque de hecho una declaraci\u00f3n de retorno temprano oculta dentro causar\u00e1 que el programa se salte la operaci\u00f3n que carga a cuenta los fondos de una cuenta bancaria. En este ejemplo, en otras palabras, el programa bancario simulado despachar\u00e1 el dinero, pero no lo deducir\u00e1 del saldo de la cuenta.<\/p>\n<h2>\u00bfPor qu\u00e9 es peligroso?<\/h2>\n<p>A primera vista, la vulnerabilidad se ve muy sencilla. \u00bfQui\u00e9n insertar\u00eda caracteres invisibles con la esperanza de enga\u00f1ar a los auditores de c\u00f3digo fuente? No obstante, el problema se consider\u00f3 los suficientemente grave como para justificar un c\u00f3digo identificador de vulnerabilidades (<a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2021-42574\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2021-42574<\/a>). Antes de publicar el art\u00edculo, los autores notificaron a los desarrolladores de los compiladores m\u00e1s comunes para darles tiempo para preparar parches.<\/p>\n<p>El informe describe las capacidades de ataque b\u00e1sicas. Las dos estrategias de ejecuci\u00f3n son ocultar un comando dentro de los comentarios, y ocultar algo en una l\u00ednea que, por ejemplo, aparezca en la pantalla. En teor\u00eda, es posible lograr el efecto opuesto: crear un c\u00f3digo que parezca un comando, pero de hecho sea parte de un comentario y no se ejecutar\u00e1. Incluso es posible que existan m\u00e9todos m\u00e1s creativos para explotar esta debilidad.<\/p>\n<p>Por ejemplo, alguien podr\u00eda utilizar el truco para llevar a cabo un sofisticado ataque de cadena de suministro en donde un contratista suministre a una empresa un c\u00f3digo que parezca correcto, pero no funcione seg\u00fan lo planeado. Entonces, despu\u00e9s de que se libere el producto final, un externo podr\u00eda utilizar la \u201cfuncionalidad alternativa\u201d para atacar a los clientes.<\/p>\n<h2>\u00bfQu\u00e9 tan peligroso es en realidad?<\/h2>\n<p>Poco despu\u00e9s de que se public\u00f3 el art\u00edculo, el programador Russ Cox critic\u00f3 el ataque Trojan Source. No estaba impresionado, por decirlo de alguna manera. Sus argumentos son los siguientes:<\/p>\n<ul>\n<li>Para nada es un ataque nuevo.<\/li>\n<li>Muchos editores de c\u00f3digo utilizan resaltado de sintaxis para mostrar el c\u00f3digo \u201cinvisible\u201d.<\/li>\n<li>Los parches para los compiladores no son necesarios; basta con revisar cuidadosamente el c\u00f3digo para detectar errores accidentales o maliciosos.<\/li>\n<\/ul>\n<p>De hecho, el problema con los caracteres de control Unicode surgieron, por ejemplo, desde el <a href=\"https:\/\/github.com\/golang\/go\/issues\/20209\" target=\"_blank\" rel=\"noopener nofollow\">2017<\/a>. Tambi\u00e9n, un problema similar con <a href=\"https:\/\/es.wikipedia.org\/wiki\/Homoglifo\" target=\"_blank\" rel=\"noopener nofollow\">homoglifos<\/a> (caracteres que parecen iguales pero tienen c\u00f3digos distintos) no es nuevo, y tambi\u00e9n puede ayudar a meter c\u00f3digo externo no detectado por los verificadores manuales.<\/p>\n<p>Sin embargo, el an\u00e1lisis cr\u00edtico de Cox no niega la existencia del problema, sino que condena el informe como demasiado dram\u00e1tico, una descripci\u00f3n acertada de, por ejemplo, el art\u00edculo apocal\u00edptico del periodista Brian Krebs sobre <a href=\"https:\/\/krebsonsecurity.com\/2021\/11\/trojan-source-bug-threatens-the-security-of-all-code\/\" target=\"_blank\" rel=\"noopener nofollow\">Trojan Source<\/a>.<\/p>\n<p>El problema es real, pero, por fortuna, la soluci\u00f3n es muy sencilla. Los parches que ya est\u00e1n disponibles o que est\u00e1n por salir bloquear\u00e1n la compilaci\u00f3n de c\u00f3digo que contenga estos caracteres. (Como se indica, por ejemplo, en este <a href=\"https:\/\/blog.rust-lang.org\/2021\/11\/01\/cve-2021-42574.html\" target=\"_blank\" rel=\"noopener nofollow\">aviso de seguridad<\/a> de los desarrolladores del compilador Rust). Si utilizas tus propias herramientas de desarrollo de software, te recomendamos a\u00f1adir una verificaci\u00f3n similar para caracteres ocultos, los cuales, normalmente, no deber\u00edan aparecer en los c\u00f3digos fuente.<\/p>\n<h2>El peligro de los ataques de cadena de suministro<\/h2>\n<p>Muchas empresas subcontratan las labores de desarrollo a contratistas, o utilizan m\u00f3dulos de c\u00f3digo abierto ya hechos en sus proyectos. Esto siempre abre la puerta a ataques mediante la <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/supply-chain\/\" target=\"_blank\" rel=\"noopener\">cadena de suministro<\/a>. Los cibercriminales pueden comprometer a un contratista o al c\u00f3digo incrustado en un proyecto de c\u00f3digo abierto y meter c\u00f3digo malicioso en la versi\u00f3n final del software. Las auditorias de c\u00f3digo normalmente revelan estas puertas traseras, pero si no, los usuarios finales podr\u00edan tener software de fuentes confiables, y aun as\u00ed perder datos.<\/p>\n<p>Trojan Source es un ejemplo de un ataque mucho m\u00e1s elegante. En lugar de tratar de contrabandear megabytes de c\u00f3digo malicioso en un producto final, los atacantes pueden utilizar este enfoque para introducir un implante dif\u00edcil de detectar en una parte cr\u00edtica del software y explotarlo durante a\u00f1os.<\/p>\n<h2>C\u00f3mo mantenerse seguro<\/h2>\n<p>Para protegerse contra los ataques del tipo Trojan Source:<\/p>\n<ul>\n<li>Actualiza todos los compiladores de lenguaje de programaci\u00f3n que utilices (si se han liberado parches para estos), y<\/li>\n<li>Escribe tus propios <em>scripts<\/em> que detecten un rango limitado de caracteres control en el c\u00f3digo fuente.<\/li>\n<\/ul>\n<p>De forma m\u00e1s general, la lucha contra los ataques de cadena de suministro potenciales requiere tanto auditorias de c\u00f3digo manuales como una gama de pruebas automatizadas. Nunca sobra ver tu c\u00f3digo desde la perspectiva de los cibercriminales, para tratar de detectar ese sencillo error que pudiese quebrar todo el mecanismo de seguridad. Si no cuentas, de manera interna, con los recursos para este tipo de an\u00e1lisis, considera involucrar <a href=\"https:\/\/latam.kaspersky.com\/enterprise-security\/cybersecurity-services?icid=es-LA_kdailyplacehold_acq_ona_smm__onl_b2b_kasperskydaily_wpplaceholder_______\" target=\"_blank\" rel=\"noopener\">expertos externos<\/a>.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-top3\">\n","protected":false},"excerpt":{"rendered":"<p>Los investigadores de Cambridge describen el m\u00e9todo Trojan Source para insertar implantes ocultos en el c\u00f3digo fuente.<\/p>\n","protected":false},"author":665,"featured_media":23458,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2795,3539,3540],"tags":[3377,2216,647],"class_list":{"0":"post-23457","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-enterprise","9":"category-smb","10":"tag-cadena-de-suministro","11":"tag-desarrollo","12":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"es-mx","url":"https:\/\/latam.kaspersky.com\/blog\/trojan-source\/23457\/"},{"hreflang":"en-in","url":"https:\/\/www.kaspersky.co.in\/blog\/trojan-source\/23678\/"},{"hreflang":"en-ae","url":"https:\/\/me-en.kaspersky.com\/blog\/trojan-source\/19130\/"},{"hreflang":"ar","url":"https:\/\/me.kaspersky.com\/blog\/trojan-source\/9584\/"},{"hreflang":"en-us","url":"https:\/\/usa.kaspersky.com\/blog\/trojan-source\/25764\/"},{"hreflang":"en-gb","url":"https:\/\/www.kaspersky.co.uk\/blog\/trojan-source\/23819\/"},{"hreflang":"es","url":"https:\/\/www.kaspersky.es\/blog\/trojan-source\/26486\/"},{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/trojan-source\/26051\/"},{"hreflang":"ru","url":"https:\/\/www.kaspersky.ru\/blog\/trojan-source\/31982\/"},{"hreflang":"tr","url":"https:\/\/www.kaspersky.com.tr\/blog\/trojan-source\/10311\/"},{"hreflang":"x-default","url":"https:\/\/www.kaspersky.com\/blog\/trojan-source\/42987\/"},{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/trojan-source\/18579\/"},{"hreflang":"pl","url":"https:\/\/plblog.kaspersky.com\/trojan-source\/15568\/"},{"hreflang":"de","url":"https:\/\/www.kaspersky.de\/blog\/trojan-source\/27789\/"},{"hreflang":"ja","url":"https:\/\/blog.kaspersky.co.jp\/trojan-source\/32001\/"},{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/trojan-source\/27870\/"},{"hreflang":"ru-kz","url":"https:\/\/blog.kaspersky.kz\/trojan-source\/24631\/"},{"hreflang":"en-au","url":"https:\/\/www.kaspersky.com.au\/blog\/trojan-source\/29994\/"},{"hreflang":"en-za","url":"https:\/\/www.kaspersky.co.za\/blog\/trojan-source\/29798\/"}],"acf":[],"banners":"","maintag":{"url":"https:\/\/latam.kaspersky.com\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/23457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/comments?post=23457"}],"version-history":[{"count":6,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/23457\/revisions"}],"predecessor-version":[{"id":23467,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/posts\/23457\/revisions\/23467"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media\/23458"}],"wp:attachment":[{"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/media?parent=23457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/categories?post=23457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/latam.kaspersky.com\/blog\/wp-json\/wp\/v2\/tags?post=23457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}