{"id":18579,"date":"2021-11-24T23:44:13","date_gmt":"2021-11-25T02:44:13","guid":{"rendered":"https:\/\/www.kaspersky.com.br\/blog\/?p=18579"},"modified":"2021-11-25T23:44:58","modified_gmt":"2021-11-26T02:44:58","slug":"trojan-source","status":"publish","type":"post","link":"https:\/\/www.kaspersky.com.br\/blog\/trojan-source\/18579\/","title":{"rendered":"Implantes invis\u00edveis no c\u00f3digo-fonte"},"content":{"rendered":"<p>Especialistas da Universidade de Cambridge <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"noopener nofollow\">descreveram<\/a> uma vulnerabilidade que afetam a maioria dos compiladores atuais.\u00a0 Um novo m\u00e9todo de ataque usa um recurso leg\u00edtimo de ferramentas de desenvolvimento em que o c\u00f3digo-fonte exibe uma coisa, mas compila algo completamente diferente.\u00a0 Isso acontece por meio da magia dos caracteres de controle unicode.<\/p>\n<div id=\"attachment_18580\" style=\"width: 1616px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-18580\" class=\"wp-image-18580 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/94\/2021\/11\/25232719\/trojan-source-characters.jpg\" alt=\"Caracteres de formata\u00e7\u00e3o de direcionalidade Unicode relevantes para ataques de reordenamento.\" width=\"1606\" height=\"355\"><p id=\"caption-attachment-18580\" class=\"wp-caption-text\">Caracteres de formata\u00e7\u00e3o de direcionalidade Unicode relevantes para ataques de reordenamento. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fonte<\/a>.<\/p><\/div>\n<p>Na maioria das vezes, os caracteres de controle n\u00e3o aparecem na tela com o resto do c\u00f3digo (embora alguns editores os exibam), mas eles modificam o texto de alguma forma.\u00a0 <a href=\"https:\/\/www.w3.org\/International\/articles\/inline-bidi-markup\/uba-basics\" target=\"_blank\" rel=\"noopener nofollow\">Esta tabela<\/a> cont\u00e9m os c\u00f3digos para o Algoritmo Unicode Bidirecional (bidi), por exemplo.<\/p>\n<p>Como voc\u00ea provavelmente sabe, alguns idiomas s\u00e3o escritos da esquerda para a direita (por exemplo, ingl\u00eas), outros da direita para a esquerda (por exemplo, \u00e1rabe).\u00a0 Quando o c\u00f3digo cont\u00e9m apenas um idioma, n\u00e3o h\u00e1 problema, mas quando necess\u00e1rio \u2013 como uma linha cont\u00e9m palavras em ingl\u00eas e em \u00e1rabe \u2013 os c\u00f3digos bidi especificam a dire\u00e7\u00e3o do texto.<\/p>\n<p>No trabalho dos autores, eles usaram esses c\u00f3digos para, por exemplo, mover o terminador de coment\u00e1rio no c\u00f3digo Python do meio de uma linha para o final.\u00a0 Eles aplicaram um c\u00f3digo RLI para mudar apenas alguns caracteres, deixando o resto inalterado.<\/p>\n<div id=\"attachment_18581\" style=\"width: 1760px\" class=\"wp-caption aligncenter\"><img decoding=\"async\" aria-describedby=\"caption-attachment-18581\" class=\"wp-image-18581 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/94\/2021\/11\/25233006\/trojan-source-example.jpg\" alt=\"Exemplo de c\u00f3digo Python vulner\u00e1vel usando c\u00f3digos bidi\" width=\"1750\" height=\"292\"><p id=\"caption-attachment-18581\" class=\"wp-caption-text\">Exemplo de c\u00f3digo Python vulner\u00e1vel usando c\u00f3digos bidi. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fonte<\/a>.<\/p><\/div>\n<p>\u00c0 direita est\u00e1 a vers\u00e3o que os programadores enxergam ao verificar o c\u00f3digo-fonte;\u00a0 a esquerda mostra como o c\u00f3digo ser\u00e1 executado.\u00a0 A maioria dos compiladores ignora os caracteres de controle.\u00a0 Qualquer pessoa que verificar o c\u00f3digo pensar\u00e1 que a quinta linha \u00e9 um coment\u00e1rio inofensivo, embora, na verdade, um extrato de retorno antecipado oculto dentro dele fa\u00e7a com que o programa ignore a opera\u00e7\u00e3o que debita fundos de contas banc\u00e1rias.\u00a0 Em outras palavras, neste exemplo, o programa banc\u00e1rio simulado distribuir\u00e1 dinheiro, mas n\u00e3o reduzir\u00e1 o saldo da conta.<\/p>\n<h2>Por que \u00e9 perigoso?<\/h2>\n<p>\u00c0 primeira vista, a vulnerabilidade parece muito simples. \u00a0Quem iria inserir caracteres invis\u00edveis, na esperan\u00e7a de enganar os auditores do c\u00f3digo-fonte?\u00a0 No entanto, o problema foi considerado s\u00e9rio o suficiente para justificar um identificador de vulnerabilidade (<a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2021-42574\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2021-42574<\/a>).\u00a0 Antes de publicar o artigo, os autores notificaram os desenvolvedores sobre os compiladores mais comuns, dando-lhes tempo para preparar os patches.<\/p>\n<p>O relat\u00f3rio descreve os recursos b\u00e1sicos de ataque.\u00a0 As duas estrat\u00e9gias de execu\u00e7\u00e3o s\u00e3o ocultar um comando dentro dos coment\u00e1rios e ocultar algo em uma linha que, por exemplo, aparece na tela.\u00a0 \u00c9 poss\u00edvel, em teoria, obter o efeito oposto: criar um c\u00f3digo que se parece com um comando, mas na verdade faz parte de um coment\u00e1rio e n\u00e3o ser\u00e1 executado.\u00a0 M\u00e9todos ainda mais criativos de explorar essa fraqueza est\u00e3o fadados a existir.<\/p>\n<p>Por exemplo, algu\u00e9m poderia usar o truque para realizar um ataque supply chain sofisticado, por meio do qual um contratado fornece a uma empresa um c\u00f3digo que parece correto, mas n\u00e3o funciona como o pretendido.\u00a0 Ent\u00e3o, depois que o produto final \u00e9 lan\u00e7ado, uma parte externa pode usar a \u201cfuncionalidade alternativa\u201d para atacar os clientes.<\/p>\n<h2>Qu\u00e3o perigoso isso \u00e9, de fato?<\/h2>\n<p>Pouco depois da publica\u00e7\u00e3o do artigo, o programador Russ Cox criticou o ataque do tipo Source Trojan.\u00a0 Ele n\u00e3o ficou, para dizer o m\u00ednimo, impressionado.\u00a0 Seus argumentos s\u00e3o os seguintes:<\/p>\n<ul>\n<li>N\u00e3o \u00e9 um novo ataque;<\/li>\n<li>Muitos editores de c\u00f3digo usam realce de sintaxe para mostrar o c\u00f3digo \u201cinvis\u00edvel\u201d;<\/li>\n<li>Patches para compiladores n\u00e3o s\u00e3o necess\u00e1rios \u2013 verificar cuidadosamente o c\u00f3digo para detectar qualquer bug acidental ou malicioso \u00e9 suficiente.<\/li>\n<\/ul>\n<p>Na verdade, o problema com caracteres de controle Unicode j\u00e1 existia, por exemplo, em <a href=\"https:\/\/github.com\/golang\/go\/issues\/20209\" target=\"_blank\" rel=\"noopener nofollow\">2017<\/a>. Al\u00e9m disso, um problema semelhante com <a href=\"https:\/\/en.wikipedia.org\/wiki\/Homoglyph\" target=\"_blank\" rel=\"noopener nofollow\">hom\u00f3glifos<\/a> \u2013 caracteres que parecem iguais, mas t\u00eam c\u00f3digos diferentes \u2013 dificilmente \u00e9 novo e tamb\u00e9m pode servir para passar c\u00f3digo estranho em verificadores manuais\u00a0 .<\/p>\n<p>No entanto, a an\u00e1lise cr\u00edtica de Cox n\u00e3o nega a exist\u00eancia do problema, mas condena os relat\u00f3rio excessivamente dram\u00e1ticos \u2013 uma caracteriza\u00e7\u00e3o apropriada de, por exemplo, o bug apocal\u00edptico <a href=\"https:\/\/krebsonsecurity.com\/2021\/11\/trojan-source-bug-threatens-the-security-of-all-code\/\" target=\"_blank\" rel=\"noopener nofollow\">\u201cSource Trojan\u201d do jornalista Brian Krebs amea\u00e7a a seguran\u00e7a de todo o c\u00f3digo.<\/a><\/p>\n<p>O problema \u00e9 real, mas felizmente a solu\u00e7\u00e3o \u00e9 bastante simples.\u00a0 Todos os patches j\u00e1 lan\u00e7ados ou esperados em breve bloquear\u00e3o a compila\u00e7\u00e3o do c\u00f3digo contendo tais caracteres.\u00a0 (Veja, por exemplo, este <a href=\"https:\/\/blog.rust-lang.org\/2021\/11\/01\/cve-2021-42574.html\" target=\"_blank\" rel=\"noopener nofollow\">aviso de seguran\u00e7a<\/a> dos desenvolvedores do compilador Rust.) Se voc\u00ea usar suas pr\u00f3prias ferramentas de constru\u00e7\u00e3o de software, recomendamos adicionar uma verifica\u00e7\u00e3o semelhante para caracteres ocultos, que normalmente n\u00e3o deveriam estar presentes no c\u00f3digo-fonte.<\/p>\n<h2>O perigo de ataques supply chain<\/h2>\n<p>Muitas empresas terceirizam tarefas de desenvolvimento para contratados ou usam m\u00f3dulos de c\u00f3digo aberto prontos para uso em seus projetos.\u00a0 Isso sempre abre a porta para ataques por meio da <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/supply-chain\/\" target=\"_blank\" rel=\"noopener\">supply chain<\/a>.\u00a0 Os cibercriminosos podem comprometer um contratante ou incorporar c\u00f3digo em um projeto de c\u00f3digo aberto e inserir c\u00f3digo malicioso na vers\u00e3o final do software.\u00a0 As auditorias de c\u00f3digo normalmente revelam tais backdoors, mas se n\u00e3o o fizerem, os usu\u00e1rios finais podem obter software de fontes confi\u00e1veis, mas ainda assim perder\u00e3o seus dados.<\/p>\n<p>O Trojan Source \u00e9 um exemplo de ataque muito mais elegante.\u00a0 Em vez de tentar contrabandear megabytes de c\u00f3digo malicioso para um produto final, os invasores podem usar essa abordagem para introduzir um c\u00f3digo dif\u00edcil de detectar em uma parte cr\u00edtica do software e explor\u00e1-lo nos pr\u00f3ximos anos.<\/p>\n<h2>Como se proteger<\/h2>\n<p>Para se proteger contra ataques do tipo Trojan Source:<\/p>\n<ul>\n<li>Atualize todos os compiladores de linguagem de programa\u00e7\u00e3o que voc\u00ea usa (se um patch foi lan\u00e7ado para eles), e<\/li>\n<li>Escreva seus pr\u00f3prios scripts que detectem uma gama limitada de caracteres de controle no c\u00f3digo-fonte.<\/li>\n<\/ul>\n<p>De forma mais ampla, a luta contra poss\u00edveis ataques supply chain requer auditorias manuais de c\u00f3digo e uma variedade de testes automatizados.\u00a0 Nunca \u00e9 demais olhar para o seu pr\u00f3prio c\u00f3digo de uma perspectiva do cibercriminoso, tentando localizar aquele erro simples que pode quebrar todo o mecanismo de seguran\u00e7a.\u00a0 Se voc\u00ea n\u00e3o tiver recursos internos para esse tipo de an\u00e1lise, considere contratar <a href=\"https:\/\/www.kaspersky.com\/enterprise-security\/cybersecurity-services?icid=gl_kdailyplacehold_acq_ona_smm__onl_b2b_kasperskydaily_wpplaceholder_______\" target=\"_blank\" rel=\"noopener nofollow\">especialistas externos<\/a>.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-gartner\">\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pesquisadores de Cambridge descrevem o m\u00e9todo Trojan Source para inserir implantes ocultos no c\u00f3digo-fonte.<\/p>\n","protected":false},"author":665,"featured_media":18583,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1119,1656],"tags":[1935,2842,1934,267],"class_list":{"0":"post-18579","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-business","8":"category-smb","9":"tag-cadeia-de-suprimentos","10":"tag-desenvolvimento","11":"tag-supply-chain","12":"tag-vulnerabilidades"},"hreflang":[{"hreflang":"pt-br","url":"https:\/\/www.kaspersky.com.br\/blog\/trojan-source\/18579\/"},{"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-mx","url":"https:\/\/latam.kaspersky.com\/blog\/trojan-source\/23457\/"},{"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":"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:\/\/www.kaspersky.com.br\/blog\/tag\/vulnerabilidades\/","name":"vulnerabilidades"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/18579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/comments?post=18579"}],"version-history":[{"count":2,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/18579\/revisions"}],"predecessor-version":[{"id":18584,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/posts\/18579\/revisions\/18584"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media\/18583"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/media?parent=18579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/categories?post=18579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.com.br\/blog\/wp-json\/wp\/v2\/tags?post=18579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}