Icônes SCW
héros bg sans séparateur
Blog

Qu'est-ce que Trojan Source et comment s'introduit-il dans votre code source ?

Laura Verheyde
Publié le 23 février 2022
Dernière mise à jour le 8 mars 2026

Début novembre, l'université de Cambridge a publié ses recherches intitulées « Trojan-Source ». Ces recherches se concentraient sur la manière dont les portes dérobées peuvent être dissimulées à l'aide de caractères de formatage directionnels dans le code source et les commentaires. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur et par un réviseur de code humain.

Cette faille de sécurité est nouvelle, bien que l'Unicode ait déjà été utilisé de manière abusive par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant la direction de la dernière partie du nom du fichier. Des recherches récentes ont montré que de nombreux compilateurs ignorent les caractères Unicode dans le code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent contourner les lignes contenant des commentaires et le code qui en dépend. Il peut donc arriver que l'éditeur affiche le code et les commentaires différemment et dans un ordre différent de celui dans lequel le compilateur les analyse, voire que le code et les commentaires soient intervertis.

Veuillez continuer votre lecture pour en savoir plus. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à consulter notre mission publique et gratuite afin de l'expérimenter par vous-même.

Texte bidirectionnel

L'une de ces attaques de type « Trojan Source » utilise l'algorithme Unicode Bidi (bidirectionnel), qui traite la composition de texte avec un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de formatage directionnel peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement bidirectionnels pertinents pour l'attaque. Prenons par exemple

RLI e d o c PDI

L'abréviation RLI signifie « isoler de droite à gauche ». Elle isole le texte de son contexte (délimité par PDI, Pop-Directional-Isolieren) et le lit de droite à gauche. Le résultat est le suivant :

c o d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de formatage, y compris les remplacements bidirectionnels, avant d'analyser le code source. S'ils ignorent simplement les caractères de formatage directionnels, ils analysent :

e d o c

Du vin nouveau dans des bouteilles neuves ?

Bien entendu, ce n'est pas une nouveauté. Par le passé, des caractères de formatage directionnel étaient insérés dans les noms de fichiers afin de dissimuler leur nature malveillante. Une pièce jointe à un e-mail affichée sous le nom « myspecialexe.doc » pourrait sembler tout à fait innocente s'il n'y avait pas le caractère RLO (remplacement de droite à gauche) indiquant le nom réel « myspecialcod.exe ».

L'attaque par code source troyen insère des caractères de formatage directionnels dans les commentaires et les chaînes de caractères du code source, car ceux-ci ne génèrent pas d'erreurs de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, de sorte que le compilateur lit quelque chose de complètement différent de ce qu'un être humain lit.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit selon les caractères de formatage directionnels

Caractères de formatage directionnels

Le code est ainsi rendu comme suit lorsque les caractères de formatage directionnel ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme la parenthèse fermante en parenthèse ouvrante et inversement dans la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes un administrateur ». La vérification administrative a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Quel impact cela pourrait-il avoir sur vous ?

De nombreux langages sont vulnérables à cette attaque : C, C++, C#, JavaScript, Java, Rust, Go et Python, et on suppose qu'il en existe d'autres. Il est possible que le développeur moyen désapprouve la présence de caractères de formatage directionnel dans le code source, mais un débutant pourrait tout aussi bien hausser les épaules et ne pas s'en préoccuper. De plus, la visualisation de ces caractères dépend fortement de l'IDE, de sorte qu'il n'est jamais garanti qu'ils seront reconnus.

Cependant, comment cette faille de sécurité a-t-elle pu s'introduire dans le code source ? Tout d'abord, cela peut se produire lorsque du code source provenant de sources non fiables est utilisé, dans lequel des contributions de code malveillantes sont passées inaperçues. Deuxièmement, cela peut se produire par simple copier-coller de code provenant d'Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait. La plupart des entreprises s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire pleinement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher du code source contenant des portes dérobées cachées ?

À qui appartient ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plus d'une direction, sauf si une direction est strictement limitée aux chaînes de caractères et aux commentaires. Veuillez noter qu'un caractère de formatage directionnel dans une chaîne de caractères ou un commentaire peut prolonger un changement de direction jusqu'à la fin de la ligne s'il n'est pas affiché. En général, les éditeurs de code devraient explicitement afficher et mettre en évidence les caractères Unicode suspects tels que les homoglyphes et les caractères de formatage directionnel. Depuis novembre, GitHub ajoute un symbole d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères dans la ligne. Cela peut toujours permettre à des changements de direction malveillants de se glisser parmi des changements de direction inoffensifs.

Il est impératif de sensibiliser les développeurs et les réviseurs de code à cette question. C'est pourquoi nous avons créé une solution complète qui illustre cette vulnérabilité. Actuellement, cette solution complète est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions publiques) de Trojan Source et à consulter la recherche sur les sources troyennes.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation en GO

Simulation en Python

Trojaner-Quelle
Trojaner-Quelle
Consulter la ressource
Consulter la ressource

Souhaitez-vous en savoir davantage ?

En savoir plus

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.

Réserver une démonstration
Partager sur :
marques LinkedInSocialLogo x
Auteur
Laura Verheyde
Publié le 23 février 2022

Laura Verheyde est développeuse de logiciels à l'adresse Secure Code Warrior . Elle se consacre à la recherche de vulnérabilités et à la création de contenu pour Missions et Coding labs.

Partager sur :
marques LinkedInSocialLogo x
Trojaner-Quelle
Trojaner-Quelle

Début novembre, l'université de Cambridge a publié ses recherches intitulées « Trojan-Source ». Ces recherches se concentraient sur la manière dont les portes dérobées peuvent être dissimulées à l'aide de caractères de formatage directionnels dans le code source et les commentaires. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur et par un réviseur de code humain.

Cette faille de sécurité est nouvelle, bien que l'Unicode ait déjà été utilisé de manière abusive par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant la direction de la dernière partie du nom du fichier. Des recherches récentes ont montré que de nombreux compilateurs ignorent les caractères Unicode dans le code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent contourner les lignes contenant des commentaires et le code qui en dépend. Il peut donc arriver que l'éditeur affiche le code et les commentaires différemment et dans un ordre différent de celui dans lequel le compilateur les analyse, voire que le code et les commentaires soient intervertis.

Veuillez continuer votre lecture pour en savoir plus. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à consulter notre mission publique et gratuite afin de l'expérimenter par vous-même.

Texte bidirectionnel

L'une de ces attaques de type « Trojan Source » utilise l'algorithme Unicode Bidi (bidirectionnel), qui traite la composition de texte avec un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de formatage directionnel peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement bidirectionnels pertinents pour l'attaque. Prenons par exemple

RLI e d o c PDI

L'abréviation RLI signifie « isoler de droite à gauche ». Elle isole le texte de son contexte (délimité par PDI, Pop-Directional-Isolieren) et le lit de droite à gauche. Le résultat est le suivant :

c o d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de formatage, y compris les remplacements bidirectionnels, avant d'analyser le code source. S'ils ignorent simplement les caractères de formatage directionnels, ils analysent :

e d o c

Du vin nouveau dans des bouteilles neuves ?

Bien entendu, ce n'est pas une nouveauté. Par le passé, des caractères de formatage directionnel étaient insérés dans les noms de fichiers afin de dissimuler leur nature malveillante. Une pièce jointe à un e-mail affichée sous le nom « myspecialexe.doc » pourrait sembler tout à fait innocente s'il n'y avait pas le caractère RLO (remplacement de droite à gauche) indiquant le nom réel « myspecialcod.exe ».

L'attaque par code source troyen insère des caractères de formatage directionnels dans les commentaires et les chaînes de caractères du code source, car ceux-ci ne génèrent pas d'erreurs de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, de sorte que le compilateur lit quelque chose de complètement différent de ce qu'un être humain lit.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit selon les caractères de formatage directionnels

Caractères de formatage directionnels

Le code est ainsi rendu comme suit lorsque les caractères de formatage directionnel ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme la parenthèse fermante en parenthèse ouvrante et inversement dans la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes un administrateur ». La vérification administrative a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Quel impact cela pourrait-il avoir sur vous ?

De nombreux langages sont vulnérables à cette attaque : C, C++, C#, JavaScript, Java, Rust, Go et Python, et on suppose qu'il en existe d'autres. Il est possible que le développeur moyen désapprouve la présence de caractères de formatage directionnel dans le code source, mais un débutant pourrait tout aussi bien hausser les épaules et ne pas s'en préoccuper. De plus, la visualisation de ces caractères dépend fortement de l'IDE, de sorte qu'il n'est jamais garanti qu'ils seront reconnus.

Cependant, comment cette faille de sécurité a-t-elle pu s'introduire dans le code source ? Tout d'abord, cela peut se produire lorsque du code source provenant de sources non fiables est utilisé, dans lequel des contributions de code malveillantes sont passées inaperçues. Deuxièmement, cela peut se produire par simple copier-coller de code provenant d'Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait. La plupart des entreprises s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire pleinement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher du code source contenant des portes dérobées cachées ?

À qui appartient ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plus d'une direction, sauf si une direction est strictement limitée aux chaînes de caractères et aux commentaires. Veuillez noter qu'un caractère de formatage directionnel dans une chaîne de caractères ou un commentaire peut prolonger un changement de direction jusqu'à la fin de la ligne s'il n'est pas affiché. En général, les éditeurs de code devraient explicitement afficher et mettre en évidence les caractères Unicode suspects tels que les homoglyphes et les caractères de formatage directionnel. Depuis novembre, GitHub ajoute un symbole d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères dans la ligne. Cela peut toujours permettre à des changements de direction malveillants de se glisser parmi des changements de direction inoffensifs.

Il est impératif de sensibiliser les développeurs et les réviseurs de code à cette question. C'est pourquoi nous avons créé une solution complète qui illustre cette vulnérabilité. Actuellement, cette solution complète est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions publiques) de Trojan Source et à consulter la recherche sur les sources troyennes.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation en GO

Simulation en Python

Consulter la ressource
Consulter la ressource

Veuillez remplir le formulaire ci-dessous pour télécharger le rapport.

Nous sollicitons votre autorisation pour vous envoyer des informations sur nos produits et/ou des sujets connexes liés au codage sécurisé. Nous traitons toujours vos données personnelles avec le plus grand soin et ne les vendons jamais à d'autres entreprises à des fins de marketing.

Soumettre
icône de réussite scw
icône d'erreur scw
Pour envoyer le formulaire, veuillez activer les cookies « Analytics ». Une fois que vous avez terminé, vous pouvez les désactiver à tout moment.
Trojaner-Quelle

Début novembre, l'université de Cambridge a publié ses recherches intitulées « Trojan-Source ». Ces recherches se concentraient sur la manière dont les portes dérobées peuvent être dissimulées à l'aide de caractères de formatage directionnels dans le code source et les commentaires. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur et par un réviseur de code humain.

Cette faille de sécurité est nouvelle, bien que l'Unicode ait déjà été utilisé de manière abusive par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant la direction de la dernière partie du nom du fichier. Des recherches récentes ont montré que de nombreux compilateurs ignorent les caractères Unicode dans le code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent contourner les lignes contenant des commentaires et le code qui en dépend. Il peut donc arriver que l'éditeur affiche le code et les commentaires différemment et dans un ordre différent de celui dans lequel le compilateur les analyse, voire que le code et les commentaires soient intervertis.

Veuillez continuer votre lecture pour en savoir plus. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à consulter notre mission publique et gratuite afin de l'expérimenter par vous-même.

Texte bidirectionnel

L'une de ces attaques de type « Trojan Source » utilise l'algorithme Unicode Bidi (bidirectionnel), qui traite la composition de texte avec un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de formatage directionnel peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement bidirectionnels pertinents pour l'attaque. Prenons par exemple

RLI e d o c PDI

L'abréviation RLI signifie « isoler de droite à gauche ». Elle isole le texte de son contexte (délimité par PDI, Pop-Directional-Isolieren) et le lit de droite à gauche. Le résultat est le suivant :

c o d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de formatage, y compris les remplacements bidirectionnels, avant d'analyser le code source. S'ils ignorent simplement les caractères de formatage directionnels, ils analysent :

e d o c

Du vin nouveau dans des bouteilles neuves ?

Bien entendu, ce n'est pas une nouveauté. Par le passé, des caractères de formatage directionnel étaient insérés dans les noms de fichiers afin de dissimuler leur nature malveillante. Une pièce jointe à un e-mail affichée sous le nom « myspecialexe.doc » pourrait sembler tout à fait innocente s'il n'y avait pas le caractère RLO (remplacement de droite à gauche) indiquant le nom réel « myspecialcod.exe ».

L'attaque par code source troyen insère des caractères de formatage directionnels dans les commentaires et les chaînes de caractères du code source, car ceux-ci ne génèrent pas d'erreurs de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, de sorte que le compilateur lit quelque chose de complètement différent de ce qu'un être humain lit.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit selon les caractères de formatage directionnels

Caractères de formatage directionnels

Le code est ainsi rendu comme suit lorsque les caractères de formatage directionnel ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme la parenthèse fermante en parenthèse ouvrante et inversement dans la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes un administrateur ». La vérification administrative a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Quel impact cela pourrait-il avoir sur vous ?

De nombreux langages sont vulnérables à cette attaque : C, C++, C#, JavaScript, Java, Rust, Go et Python, et on suppose qu'il en existe d'autres. Il est possible que le développeur moyen désapprouve la présence de caractères de formatage directionnel dans le code source, mais un débutant pourrait tout aussi bien hausser les épaules et ne pas s'en préoccuper. De plus, la visualisation de ces caractères dépend fortement de l'IDE, de sorte qu'il n'est jamais garanti qu'ils seront reconnus.

Cependant, comment cette faille de sécurité a-t-elle pu s'introduire dans le code source ? Tout d'abord, cela peut se produire lorsque du code source provenant de sources non fiables est utilisé, dans lequel des contributions de code malveillantes sont passées inaperçues. Deuxièmement, cela peut se produire par simple copier-coller de code provenant d'Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait. La plupart des entreprises s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire pleinement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher du code source contenant des portes dérobées cachées ?

À qui appartient ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plus d'une direction, sauf si une direction est strictement limitée aux chaînes de caractères et aux commentaires. Veuillez noter qu'un caractère de formatage directionnel dans une chaîne de caractères ou un commentaire peut prolonger un changement de direction jusqu'à la fin de la ligne s'il n'est pas affiché. En général, les éditeurs de code devraient explicitement afficher et mettre en évidence les caractères Unicode suspects tels que les homoglyphes et les caractères de formatage directionnel. Depuis novembre, GitHub ajoute un symbole d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères dans la ligne. Cela peut toujours permettre à des changements de direction malveillants de se glisser parmi des changements de direction inoffensifs.

Il est impératif de sensibiliser les développeurs et les réviseurs de code à cette question. C'est pourquoi nous avons créé une solution complète qui illustre cette vulnérabilité. Actuellement, cette solution complète est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions publiques) de Trojan Source et à consulter la recherche sur les sources troyennes.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation en GO

Simulation en Python

Veuillez consulter le webinaire.
Veuillez commencer
En savoir plus

Veuillez cliquer sur le lien ci-dessous et télécharger le PDF de cette ressource.

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.

Consulter le rapportRéserver une démonstration
Télécharger le PDF
Consulter la ressource
Partager sur :
marques LinkedInSocialLogo x
Souhaitez-vous en savoir davantage ?

Partager sur :
marques LinkedInSocialLogo x
Auteur
Laura Verheyde
Publié le 23 février 2022

Laura Verheyde est développeuse de logiciels à l'adresse Secure Code Warrior . Elle se consacre à la recherche de vulnérabilités et à la création de contenu pour Missions et Coding labs.

Partager sur :
marques LinkedInSocialLogo x

Début novembre, l'université de Cambridge a publié ses recherches intitulées « Trojan-Source ». Ces recherches se concentraient sur la manière dont les portes dérobées peuvent être dissimulées à l'aide de caractères de formatage directionnels dans le code source et les commentaires. Ceux-ci peuvent être utilisés pour créer du code dont la logique est interprétée différemment par le compilateur et par un réviseur de code humain.

Cette faille de sécurité est nouvelle, bien que l'Unicode ait déjà été utilisé de manière abusive par le passé, par exemple en dissimulant l'extension réelle d'un fichier en inversant la direction de la dernière partie du nom du fichier. Des recherches récentes ont montré que de nombreux compilateurs ignorent les caractères Unicode dans le code source sans avertissement, tandis que les éditeurs de texte, y compris les éditeurs de code, peuvent contourner les lignes contenant des commentaires et le code qui en dépend. Il peut donc arriver que l'éditeur affiche le code et les commentaires différemment et dans un ordre différent de celui dans lequel le compilateur les analyse, voire que le code et les commentaires soient intervertis.

Veuillez continuer votre lecture pour en savoir plus. Si vous souhaitez vous impliquer et essayer le piratage simulé de Trojan Source, nous vous invitons à consulter notre mission publique et gratuite afin de l'expérimenter par vous-même.

Texte bidirectionnel

L'une de ces attaques de type « Trojan Source » utilise l'algorithme Unicode Bidi (bidirectionnel), qui traite la composition de texte avec un ordre d'affichage différent, comme l'anglais (de gauche à droite) et l'arabe (de droite à gauche). Les caractères de formatage directionnel peuvent être utilisés pour réorganiser le regroupement et afficher l'ordre des caractères.

Le tableau ci-dessus contient certains des caractères de remplacement bidirectionnels pertinents pour l'attaque. Prenons par exemple

RLI e d o c PDI

L'abréviation RLI signifie « isoler de droite à gauche ». Elle isole le texte de son contexte (délimité par PDI, Pop-Directional-Isolieren) et le lit de droite à gauche. Le résultat est le suivant :

c o d e

Cependant, les compilateurs et les interpréteurs ne traitent généralement pas les caractères de contrôle de formatage, y compris les remplacements bidirectionnels, avant d'analyser le code source. S'ils ignorent simplement les caractères de formatage directionnels, ils analysent :

e d o c

Du vin nouveau dans des bouteilles neuves ?

Bien entendu, ce n'est pas une nouveauté. Par le passé, des caractères de formatage directionnel étaient insérés dans les noms de fichiers afin de dissimuler leur nature malveillante. Une pièce jointe à un e-mail affichée sous le nom « myspecialexe.doc » pourrait sembler tout à fait innocente s'il n'y avait pas le caractère RLO (remplacement de droite à gauche) indiquant le nom réel « myspecialcod.exe ».

L'attaque par code source troyen insère des caractères de formatage directionnels dans les commentaires et les chaînes de caractères du code source, car ceux-ci ne génèrent pas d'erreurs de syntaxe ou de compilation. Ces caractères de contrôle modifient l'ordre d'affichage de la logique du code, de sorte que le compilateur lit quelque chose de complètement différent de ce qu'un être humain lit.

Par exemple, un fichier contenant les octets suivants dans cet ordre :

Texte Unicode bidirectionnel

sera réorganisé comme suit selon les caractères de formatage directionnels

Caractères de formatage directionnels

Le code est ainsi rendu comme suit lorsque les caractères de formatage directionnel ne sont pas explicitement appelés :

Caractères Unicode bidirectionnels

Le RLO transforme la parenthèse fermante en parenthèse ouvrante et inversement dans la dernière ligne. Le résultat de l'exécution de ce code serait : « Vous êtes un administrateur ». La vérification administrative a été commentée, mais les caractères de contrôle donnent l'impression qu'elle était toujours présente.

(Source : https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

Quel impact cela pourrait-il avoir sur vous ?

De nombreux langages sont vulnérables à cette attaque : C, C++, C#, JavaScript, Java, Rust, Go et Python, et on suppose qu'il en existe d'autres. Il est possible que le développeur moyen désapprouve la présence de caractères de formatage directionnel dans le code source, mais un débutant pourrait tout aussi bien hausser les épaules et ne pas s'en préoccuper. De plus, la visualisation de ces caractères dépend fortement de l'IDE, de sorte qu'il n'est jamais garanti qu'ils seront reconnus.

Cependant, comment cette faille de sécurité a-t-elle pu s'introduire dans le code source ? Tout d'abord, cela peut se produire lorsque du code source provenant de sources non fiables est utilisé, dans lequel des contributions de code malveillantes sont passées inaperçues. Deuxièmement, cela peut se produire par simple copier-coller de code provenant d'Internet, ce que la plupart d'entre nous, développeurs, avons déjà fait. La plupart des entreprises s'appuient sur des composants logiciels provenant de plusieurs fournisseurs. Cela soulève la question suivante : dans quelle mesure pouvons-nous faire pleinement confiance à ce code et nous y fier ? Comment pouvons-nous rechercher du code source contenant des portes dérobées cachées ?

À qui appartient ce problème ?

D'une part, les compilateurs et les pipelines de compilation devraient interdire les lignes de code source comportant plus d'une direction, sauf si une direction est strictement limitée aux chaînes de caractères et aux commentaires. Veuillez noter qu'un caractère de formatage directionnel dans une chaîne de caractères ou un commentaire peut prolonger un changement de direction jusqu'à la fin de la ligne s'il n'est pas affiché. En général, les éditeurs de code devraient explicitement afficher et mettre en évidence les caractères Unicode suspects tels que les homoglyphes et les caractères de formatage directionnel. Depuis novembre, GitHub ajoute un symbole d'avertissement et un message à chaque ligne de code contenant du texte Unicode bidirectionnel, bien qu'il ne mette pas en évidence l'emplacement de ces caractères dans la ligne. Cela peut toujours permettre à des changements de direction malveillants de se glisser parmi des changements de direction inoffensifs.

Il est impératif de sensibiliser les développeurs et les réviseurs de code à cette question. C'est pourquoi nous avons créé une solution complète qui illustre cette vulnérabilité. Actuellement, cette solution complète est disponible pour Java, C#, Python, GO et PHP.

Si vous souhaitez en savoir plus, nous vous invitons à essayer notre simulation (missions publiques) de Trojan Source et à consulter la recherche sur les sources troyennes.

Simulation en Java

Simulation en C#

Simulation en PHP

Simulation en GO

Simulation en Python

Table des matières

Télécharger le PDF
Consulter la ressource
Souhaitez-vous en savoir davantage ?

En savoir plus

Secure Code Warrior là pour aider votre entreprise à sécuriser le code tout au long du cycle de développement logiciel et à créer une culture où la cybersécurité est une priorité. Que vous soyez responsable de la sécurité des applications, développeur, responsable de la sécurité des systèmes d'information ou toute autre personne impliquée dans la sécurité, nous pouvons aider votre entreprise à réduire les risques liés à un code non sécurisé.

Réserver une démonstrationTélécharger
Partager sur :
marques LinkedInSocialLogo x
Centre de ressources

Ressources pour débuter

Plus d'articles
Centre de ressources

Ressources pour débuter

Plus d'articles