{"id":26051,"date":"2021-11-24T13:17:31","date_gmt":"2021-11-24T11:17:31","guid":{"rendered":"https:\/\/www.kaspersky.it\/blog\/?p=26051"},"modified":"2021-11-24T13:22:51","modified_gmt":"2021-11-24T11:22:51","slug":"trojan-source","status":"publish","type":"post","link":"https:\/\/www.kaspersky.it\/blog\/trojan-source\/26051\/","title":{"rendered":"Impianti invisibili nel codice sorgente"},"content":{"rendered":"<p>Gli esperti dell\u2019Universit\u00e0 di Cambridge hanno <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"noopener nofollow\">descritto<\/a> una vulnerabilit\u00e0 che dicono colpisca la maggior parte dei compilatori moderni. Un nuovo metodo di attacco utilizza una caratteristica legittima dei tool di sviluppo per cui il codice sorgente mostra una cosa ma compila qualcosa di completamente diverso. Succede Il tutto avviene attraverso la i caratteri di controllo Unicode.<\/p>\n<div id=\"attachment_26054\" style=\"width: 1616px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-26054\" class=\"wp-image-26054 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/89\/2021\/11\/24125356\/trojan-source-characters.jpg\" alt=\"\" width=\"1606\" height=\"355\"><p id=\"caption-attachment-26054\" class=\"wp-caption-text\">Caratteri di formattazione della modalit\u00e0 Unicode rilevanti per gli attacchi di riordino. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fonte<\/a><\/p><\/div>\n<p>La maggior parte delle volte, i caratteri di controllo non appaiono sullo schermo con il resto del codice (anche se alcuni editor li visualizzano), ma modificano il testo in qualche modo. Questa <a href=\"https:\/\/www.w3.org\/International\/articles\/inline-bidi-markup\/uba-basics\" target=\"_blank\" rel=\"noopener nofollow\">tabella<\/a> contiene i codici per l\u2019algoritmo Unicode Bidirezionale (bidi), per esempio.<\/p>\n<p>Come probabilmente sapete, alcune lingue umane sono scritte da sinistra a destra (ad esempio, l\u2019inglese), altre da destra a sinistra (ad esempio, l\u2019arabo). Quando il codice contiene solo una lingua, non c\u2019\u00e8 problema, ma quando \u00e8 necessario, quando, per esempio, una riga contiene parole in inglese e in arabo, i codici bidi specificano la direzione del testo.<\/p>\n<div id=\"attachment_26056\" style=\"width: 1760px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-26056\" class=\"wp-image-26056 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/89\/2021\/11\/24125514\/trojan-source-example.jpg\" alt=\"\" width=\"1750\" height=\"292\"><p id=\"caption-attachment-26056\" class=\"wp-caption-text\">Esempio di codice Python vulnerabile usando i codici bidi. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Fonte<\/a>.<\/p><\/div>\n<p>A destra \u00e8 la versione che i programmatori vedono quando controllano il codice sorgente; a sinistra si mostra come il codice verr\u00e0 eseguito. La maggior parte dei compilatori ignora i caratteri di controllo. Chiunque controlli il codice penser\u00e0 che la quinta linea sia un innocuo commento, anche se in realt\u00e0, una dichiarazione di ritorno anticipato nascosta all\u2019interno far\u00e0 s\u00ec che il programma salti l\u2019operazione che addebita i fondi del conto bancario. In questo esempio, in altre parole, il programma bancario simulato erogher\u00e0 denaro ma non ridurr\u00e0 il saldo del conto.<\/p>\n<h2>Perch\u00e9 \u00e8 pericoloso?<\/h2>\n<p>A prima vista, la vulnerabilit\u00e0 sembra troppo semplice. Chi inserirebbe caratteri invisibili, sperando di ingannare i revisori del codice sorgente? Tuttavia, il problema \u00e8 stato ritenuto abbastanza serio da giustificare un identificatore di vulnerabilit\u00e0 (<a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2021-42574\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2021-42574<\/a>). Prima di pubblicare il documento, gli autori hanno avvisato gli sviluppatori dei compilatori pi\u00f9 comuni, dando loro il tempo di preparare le patch.<\/p>\n<p>Il rapporto delinea le capacit\u00e0 di attacco di base. Le due strategie di esecuzione sono nascondere un comando all\u2019interno dei commenti, e nascondere qualcosa in una linea che, per esempio, appare sullo schermo. \u00c8 possibile, in teoria, ottenere l\u2019effetto opposto: creare del codice che sembra un comando, ma in realt\u00e0 fa parte di un commento e non verr\u00e0 eseguito. Metodi ancora pi\u00f9 creativi per sfruttare questa debolezza sono destinati ad esistere.<\/p>\n<p>Per esempio, qualcuno potrebbe usare il trucco per portare avanti un sofisticato attacco alla supply chain in cui un appaltatore fornisce a una societ\u00e0 un codice che sembra corretto ma non funziona come previsto. Poi, dopo che il prodotto finale viene rilasciato, una parte esterna pu\u00f2 utilizzare la \u201cfunzionalit\u00e0 alternativa\u201d per attaccare i clienti.<\/p>\n<h2>Quanto \u00e8 pericoloso, in realt\u00e0?<\/h2>\n<p>Poco dopo la pubblicazione del documento, il programmatore Russ Cox ha criticato l\u2019attacco Trojan Source. Non era convinto, per usare un eufemismo. I suoi argomenti sono i seguenti:<\/p>\n<ul>\n<li>Non \u00e8 affatto un nuovo attacco;<\/li>\n<li>Molti editor di codice usano l\u2019evidenziazione della sintassi per mostrare il codice \u201cinvisibile\u201d;<\/li>\n<li>Le patch per i compilatori non sono necessarie, \u00e8 sufficiente controllare attentamente il codice per rilevare qualsiasi bug accidentale o malevolo.<\/li>\n<\/ul>\n<p>Infatti, il problema con i caratteri di controllo Unicode \u00e8 emerso, per esempio, gi\u00e0 nel 2017. Inoltre, un problema simile con gli <a href=\"https:\/\/en.wikipedia.org\/wiki\/Homoglyph\" target=\"_blank\" rel=\"noopener nofollow\">homoglyph<\/a> (omogenei), caratteri che sembrano gli stessi ma hanno codici diversi, non \u00e8 nuovo e pu\u00f2 anche servire a far passare codice estraneo ai controlli manuali.<\/p>\n<p>Tuttavia, l\u2019analisi critica di Cox non nega l\u2019esistenza del problema, ma piuttosto condanna i report come eccessivamente drammatici, una caratterizzazione appropriata, per esempio, dell\u2019apocalittico <a href=\"https:\/\/krebsonsecurity.com\/2021\/11\/trojan-source-bug-threatens-the-security-of-all-code\/\" target=\"_blank\" rel=\"noopener nofollow\">Bug \u201cTrojan Source\u201d<\/a> del giornalista Brian Krebs che minaccia la sicurezza di tutto il codice.<\/p>\n<p>Il problema \u00e8 reale, ma fortunatamente la soluzione \u00e8 abbastanza semplice. Tutte le patch gi\u00e0 uscite o attese a breve bloccheranno la compilazione di codice contenente tali caratteri (vedete, per esempio, questo <a href=\"https:\/\/blog.rust-lang.org\/2021\/11\/01\/cve-2021-42574.html\" target=\"_blank\" rel=\"noopener nofollow\">avviso di sicurezza<\/a> dagli sviluppatori del compilatore Rust). Se usate i vostri tool di compilazione del software, vi raccomandiamo di aggiungere un controllo simile per i caratteri nascosti, che normalmente non dovrebbero essere presenti nel codice sorgente.<\/p>\n<h2>Il pericolo degli attacchi alla supply-chain<\/h2>\n<p>Molte aziende esternalizzano i compiti di sviluppo a contraenti o usano moduli open-source gi\u00e0 pronti nei loro progetti. Questo apre sempre la porta agli attacchi attraverso la <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/supply-chain\/\" target=\"_blank\" rel=\"noopener\">supply chain<\/a>. I criminali informatici possono compromettere un appaltatore o incorporare il codice in un progetto open-source e inserire codice dannoso nella versione finale del software. Le verifiche del codice in genere rivelano tali backdoor, ma se non lo fanno, gli utenti finali possono ottenere software da fonti affidabili ma perdere comunque i loro dati.<\/p>\n<p>Trojan Source \u00e8 un esempio di un attacco molto pi\u00f9 elegante. Invece di cercare di contrabbandare megabyte di codice dannoso in un prodotto finale, i cybercriminali possono usare un approccio del genere per introdurre un impianto difficile da rilevare in una parte critica del software e sfruttarlo per gli anni a venire.<\/p>\n<h2>Come rimanere al sicuro<\/h2>\n<p>Per difendervi dagli attacchi di tipo Trojan Source:<\/p>\n<ul>\n<li>Aggiornate tutti i compilatori di linguaggi di programmazione che usate (se \u00e8 gi\u00e0 stata rilasciata una patch)<\/li>\n<li>Compilate i vostri script che rilevano una gamma limitata di caratteri di controllo nel codice sorgente.<\/li>\n<\/ul>\n<p>Pi\u00f9 in generale, la lotta contro i potenziali attacchi alla supply chain richiede sia verifiche manuali del codice che una serie di test automatici. Non fa mai male guardare il proprio codice dalla prospettiva del criminale informatico, cercando di individuare quel semplice errore che potrebbe rompere l\u2019intero meccanismo di sicurezza. Se vi mancano le risorse interne per questo tipo di analisi, prendete in considerazione la possibilit\u00e0 di coinvolgere <a href=\"https:\/\/www.kaspersky.it\/enterprise-security\/cybersecurity-services?icid=it_kdailyplacehold_acq_ona_smm__onl_b2b_kasperskydaily_wpplaceholder_______\" target=\"_blank\" rel=\"noopener\">esperti esterni<\/a>.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-top3\">\n","protected":false},"excerpt":{"rendered":"<p>I ricercatori di Cambridge descrivono il metodo Trojan Source per inserire impianti nascosti nel codice sorgente. <\/p>\n","protected":false},"author":665,"featured_media":26052,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2364,2955,2956],"tags":[3076,1653,584],"class_list":{"0":"post-26051","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-supply-chain","11":"tag-sviluppo","12":"tag-vulnerabilita"},"hreflang":[{"hreflang":"it","url":"https:\/\/www.kaspersky.it\/blog\/trojan-source\/26051\/"},{"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":"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:\/\/www.kaspersky.it\/blog\/tag\/vulnerabilita\/","name":"vulnerabilit\u00e0"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/26051","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/comments?post=26051"}],"version-history":[{"count":5,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/26051\/revisions"}],"predecessor-version":[{"id":26055,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/posts\/26051\/revisions\/26055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media\/26052"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/media?parent=26051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/categories?post=26051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.it\/blog\/wp-json\/wp\/v2\/tags?post=26051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}