{"id":27870,"date":"2021-11-23T14:23:20","date_gmt":"2021-11-23T12:23:20","guid":{"rendered":"https:\/\/www.kaspersky.nl\/blog\/?p=27870"},"modified":"2022-05-05T14:48:03","modified_gmt":"2022-05-05T12:48:03","slug":"trojan-source","status":"publish","type":"post","link":"https:\/\/www.kaspersky.nl\/blog\/trojan-source\/27870\/","title":{"rendered":"Onzichtbare implantaten in broncode"},"content":{"rendered":"<p>Experts van de Universiteit van Cambridge hebben een kwetsbaarheid <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"noopener nofollow\">beschreven<\/a> die volgens hen de meeste moderne computers treft. Een nieuwe aanvalsmethode maakt gebruik van een legitieme functie van ontwikkelingstools, waarbij de broncode \u00e9\u00e9n ding weergeeft, maar iets heel anders compileert. Dit gebeurt door de magie van Unicode-stuurtekens.<\/p>\n<div id=\"attachment_27873\" style=\"width: 1616px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-27873\" class=\"wp-image-27873 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/99\/2021\/11\/23142113\/trojan-source-characters.jpg\" alt=\"\" width=\"1606\" height=\"355\"><p id=\"caption-attachment-27873\" class=\"wp-caption-text\">Directionele Unicode-opmaaktekens die relevant zijn voor herordeningsaanvallen. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Source<\/a>.<\/p><\/div>\n<p>Meestal verschijnen stuurtekens niet samen met de rest van de code op het scherm (hoewel sommige editors ze wel tonen), maar ze wijzigen de tekst op de een of andere manier. <a href=\"https:\/\/www.w3.org\/International\/articles\/inline-bidi-markup\/uba-basics\" target=\"_blank\" rel=\"noopener nofollow\">Deze tabel<\/a> bevat bijvoorbeeld de codes voor het Unicode Bidirectional (bidi) Algorithm.<\/p>\n<p>Zoals u waarschijnlijk weet, worden sommige menselijke talen van links naar rechts geschreven (bijv. Engels en Nederlands), en andere van rechts naar links (bijv. Arabisch). Wanneer de code slechts \u00e9\u00e9n taal bevat, is dat geen probleem, maar wanneer dat nodig is \u2013 bijvoorbeeld wanneer \u00e9\u00e9n regel woorden in het Engels en in het Arabisch bevat \u2013 geven bidi-codes de tekstrichting aan.<\/p>\n<p>In het werk van de auteurs gebruikten ze dergelijke codes om bijvoorbeeld het eindpunt van commentaar in Python-code van het midden van een regel naar het einde te verplaatsen. Ze pasten een RLI-code toe om slechts enkele tekens te verschuiven, en lieten de rest ongemoeid.<\/p>\n<div id=\"attachment_27875\" style=\"width: 1760px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-27875\" class=\"wp-image-27875 size-full\" src=\"https:\/\/media.kasperskydaily.com\/wp-content\/uploads\/sites\/99\/2021\/11\/23142207\/trojan-source-example.jpg\" alt=\"\" width=\"1750\" height=\"292\"><p id=\"caption-attachment-27875\" class=\"wp-caption-text\">Voorbeeld van kwetsbare Python-code met gebruik van bidi-codes. <a href=\"https:\/\/trojansource.codes\/trojan-source.pdf\" target=\"_blank\" rel=\"nofollow noopener\">Source<\/a>.<\/p><\/div>\n<p>Rechts staat de versie die programmeurs zien als ze de broncode controleren; links laat zien hoe de code zal worden uitgevoerd. De meeste compilers negeren stuurtekens. Iedereen die de code controleert zal denken dat de vijfde regel een onschuldig commentaar is, hoewel er in werkelijkheid een <em>early-return statement <\/em>in verborgen zit, wat ervoor zorgt dat het programma de bewerking overslaat die het geld van de bankrekening debiteert. Met andere woorden, in dit voorbeeld zal het gesimuleerde bankprogramma geld uitgeven, maar het rekeningsaldo niet verminderen.<\/p>\n<h2>Waarom is dit gevaarlijk?<\/h2>\n<p>Op het eerste gezicht lijkt deze kwetsbaarheid te simpel. Wie zou er nou onzichtbare tekens invoegen, in de hoop controleurs van broncode te misleiden? Toch werd het probleem ernstig genoeg geacht om een kwetsbaarheidsidentificatie te rechtvaardigen (<a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2021-42574\" target=\"_blank\" rel=\"noopener nofollow\">CVE-2021-42574<\/a>). Alvorens het artikel te publiceren, hebben de auteurs de ontwikkelaars van de meest gebruikte compilers op de hoogte gebracht, zodat zij de tijd hadden om patches voor te bereiden.<\/p>\n<p>Het rapport beschrijft de eenvoudigste aanvalsmogelijkheden. De twee uitvoeringsstrategie\u00ebn zijn het verbergen van een commando binnen het commentaar, en het verbergen van iets in een regel die, bijvoorbeeld, op het scherm verschijnt. Het is in theorie mogelijk het tegenovergestelde effect te bereiken: code maken die op een commando lijkt, maar in feite deel uitmaakt van een commentaar en niet zal worden uitgevoerd. Er zullen ongetwijfeld nog creatievere methoden bestaan om deze kwetsbaarheid uit te buiten.<\/p>\n<p>Iemand zou de truc bijvoorbeeld kunnen gebruiken om een geraffineerde aanval op de supply chain uit te voeren, waarbij een opdrachtnemer een bedrijf code levert die er correct uitziet, maar niet werkt zoals de bedoeling was. Vervolgens, nadat het eindproduct is vrijgegeven, kan een externe partij de \u201calternatieve functionaliteit\u201d gebruiken om klanten aan te vallen.<\/p>\n<h2>Hoe gevaarlijk is dit nou echt?<\/h2>\n<p>Kort na de publicatie van het artikel bekritiseerde programmeur Russ Cox de Trojan Source-aanval. Hij was op zijn zachtst gezegd niet onder de indruk. Dit waren zijn argumenten:<\/p>\n<ul>\n<li>Dit is helemaal geen nieuwe aanval;<\/li>\n<li>Veel code-editors gebruiken <em>syntax highlighting<\/em> om \u201conzichtbare\u201d code weer te geven;<\/li>\n<li>Patches voor compilers zijn niet nodig \u2013 het zorgvuldig controleren van de code om toevallige of schadelijke bugs op te sporen is voldoende.<\/li>\n<\/ul>\n<p>Het probleem met Unicode-stuurtekens dook bijvoorbeeld al op in <a href=\"https:\/\/github.com\/golang\/go\/issues\/20209\" target=\"_blank\" rel=\"noopener nofollow\">2017<\/a>. Een soortgelijk probleem met <a href=\"https:\/\/en.wikipedia.org\/wiki\/Homoglyph\" target=\"_blank\" rel=\"noopener nofollow\">homogliefen<\/a> \u2013 tekens die er hetzelfde uitzien maar verschillende codes hebben \u2013 is nauwelijks nieuw en kan ook dienen om vreemde code langs handmatige controleurs te laten glippen.<\/p>\n<p>De kritische analyse van Cox ontkent echter niet het bestaan van het probleem, maar veroordeelt de berichten eerder als t\u00e9 dramatisch \u2013 een treffende karakterisering van bijvoorbeeld het apocalyptische <a href=\"https:\/\/krebsonsecurity.com\/2021\/11\/trojan-source-bug-threatens-the-security-of-all-code\/\" target=\"_blank\" rel=\"noopener nofollow\">\u2018Trojan Source\u2019 Bug Threatens the Security of All Code<\/a> van journalist Brian Krebs.<\/p>\n<p>Het probleem is re\u00ebel, maar gelukkig is de oplossing vrij eenvoudig. Alle patches die al uit zijn of binnenkort worden verwacht, zullen het compileren van code met dergelijke tekens blokkeren. (Zie bijvoorbeeld deze <a href=\"https:\/\/blog.rust-lang.org\/2021\/11\/01\/cve-2021-42574.html\" target=\"_blank\" rel=\"noopener nofollow\">veiligheidswaarschuwing<\/a> van de ontwikkelaars van de Rust-compiler). Als u uw eigen programma\u2019s voor het bouwen van software gebruikt, raden we u aan een soortgelijke controle toe te voegen voor verborgen tekens, die normaal niet in de broncode aanwezig mogen zijn.<\/p>\n<h2>Het gevaar van supply-chain-aanvallen<\/h2>\n<p>Veel bedrijven besteden ontwikkelingstaken uit aan opdrachtnemers of gebruiken kant-en-klare open-source modules in hun projecten. Dat opent altijd de deur voor aanvallen via de <a href=\"https:\/\/encyclopedia.kaspersky.com\/glossary\/supply-chain\/\" target=\"_blank\" rel=\"noopener\">supply chain<\/a>. Cybercriminelen kunnen een opdrachtnemer compromitteren of code in een open-source project insluiten en schadelijke code in de uiteindelijke versie van de software stoppen. Code-audits brengen dergelijke achterdeurtjes meestal aan het licht, maar als dat niet het geval is, kunnen eindgebruikers software van betrouwbare bronnen krijgen maar toch hun gegevens verliezen.<\/p>\n<p>Trojan Source is een voorbeeld van een veel elegantere aanval. In plaats van te proberen megabytes aan schadelijke code in een eindproduct te smokkelen, kunnen aanvallers een dergelijke aanpak gebruiken om een moeilijk te detecteren implantaat in een kritiek onderdeel van de software te introduceren en het jarenlang uit te buiten.<\/p>\n<h2>Hoe u zich hiertegen beschermt<\/h2>\n<p>Zo beschermt u zich tegen Trojan Source-achtige aanvallen:<\/p>\n<ul>\n<li>Update alle compilers van de programmeertaal die u gebruikt (als er een patch voor is uitgebracht), en<\/li>\n<li>Schrijf uw eigen scripts die een beperkte reeks stuurtekens in broncode detecteren.<\/li>\n<\/ul>\n<p>Meer in het algemeen vereist de strijd tegen mogelijke aanvallen op de supply chain zowel handmatige code-audits als een reeks geautomatiseerde tests. Het kan nooit kwaad om uw eigen code vanuit het perspectief van een cybercrimineel te bekijken, in een poging die ene simpele fout te ontdekken die het hele beveiligingsmechanisme zou kunnen aantasten. Als u zelf de middelen voor zo\u2019n analyse niet hebt, overweeg dan om [Cybersecurity Services placeholder]externe experts[\/Cybersecurity Services placeholder] in te schakelen.<\/p>\n<input type=\"hidden\" class=\"category_for_banner\" value=\"kesb-top3\">\n","protected":false},"excerpt":{"rendered":"<p>Onderzoekers van Cambridge beschrijven de Trojan Source-methode om verborgen implantaten in de broncode in te brengen.<\/p>\n","protected":false},"author":665,"featured_media":27871,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[108,252,253],"tags":[334,1143,947],"class_list":{"0":"post-27870","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-kwetsbaarheden","11":"tag-ontwikkeling","12":"tag-supply-chain"},"hreflang":[{"hreflang":"nl","url":"https:\/\/www.kaspersky.nl\/blog\/trojan-source\/27870\/"},{"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":"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":"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.nl\/blog\/tag\/kwetsbaarheden\/","name":"kwetsbaarheden"},"_links":{"self":[{"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/posts\/27870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/users\/665"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/comments?post=27870"}],"version-history":[{"count":3,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/posts\/27870\/revisions"}],"predecessor-version":[{"id":27874,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/posts\/27870\/revisions\/27874"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/media\/27871"}],"wp:attachment":[{"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/media?parent=27870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/categories?post=27870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kaspersky.nl\/blog\/wp-json\/wp\/v2\/tags?post=27870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}