
🔎 Aide à trouver la vulnérabilité Trojan Source dans le code 👀. Utile pour la revue de code dans un projet avec plusieurs collaborateurs (CI/CD).
La vulnérabilité Trojan Source permet à un attaquant de faire passer un code malveillant pour un code innocent.
En général, l'attaquant tente de tromper en faisant passer son code pour un commentaire (visuellement). C'est une menace sérieuse car elle concerne de nombreux langages. Les projets avec plusieurs sources « non fiables » pourraient être concernés.
Détecter le mal 🔎
·
Traquer le mal đź‘€
·
Trojan Source âť“
go> Via go install
go install github.com/ariary/TrojanSourceFinder/cmd/tsfinder@latest
Assurez-vous que $GOPATH est dans votre $PATH
> Depuis les sources
git clone https://github.com/ariary/TrojanSourceFinder
cd TrojanSourceFinder
make before.build
make build.tsfinder
Si la commande make build.tsfinder échoue, essayez :
env GOOS=target-OS GOARCH=target-architecture
go build -o tsfinder cmd/main.go
curl> Depuis une release
curl -lO -L https://github.com/ariary/TrojanSourceFinder/releases/latest/download/tsfinder && chmod +x tsfinder
> Aide à la détection de Trojan source pour la relecture manuelle du code ou avec des pipelines CI/CD (caractères Unicode bidirectionnels)
Pour détecter Trojan source dans un fichier ou répertoire <chemin> :
tsfinder [chemin]
> Les fichiers de code source sont généralement des fichiers texte. Exclure les binaires de l'analyse peut aider à éliminer les faux positifs
tsfinder -t [chemin]
Ajoutez -v pour voir quels fichiers ont été ignorés par l'analyse.
Trojan Source n'est pas nouveau et n'est pas le seul danger. Un autre est « Homoglyphe » (Kezako?)
tsfinder aide à les détecter avec la commande homoglyph :
tsfinder homoglyph [fichier] [flags]
Vous pouvez voir s'il existe un homologue (c'est-à -dire un mot ayant le même « squelette ») pour les homographes trouvés dans chemin en utilisant le drapeau --sibling :
tsfinder homoglyph [fichier] --sibling [chemin]
Fonctionnalité en développement, dépendant principalement d'autres projets
> Visualiser comment le code est réellement interprété par les machines/compilateurs
tsfinder est délibérément peu verbeux. Par défaut, il n'affichera que si du code Trojan Source a été détecté. Pour plus de verbosité et visualiser la ligne dangereuse, ajoutez le drapeau -v.
Pour mieux voir où se trouvent les Trojan Sources, vous pouvez activer la sortie colorée avec le drapeau -c (également utile avec l'analyse de répertoire) :
tsfinder -c -v <répertoire>


Comme mentionné par @ioah86 ici, Trojan source pourrait également être détecté avec une ligne de commande utilisant grep.
La grande différence réside dans le format de sortie et le code de statut de sortie (tsfinder quitte avec le code 0 si aucun Trojan source n'est trouvé, 1 sinon ; l'inverse pour grep)
De plus, cette ligne de commande ne résout pas le problème des homoglyphes
| Objectif | tsfinder | Ligne de commande grep |
|---|---|---|
| Analyser tous les fichiers + afficher les lignes | tsfinder -v . | grep -arE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Analyser uniquement les fichiers lisibles par l'humain | tsfinder -t . | grep -IrE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Quitter avec le code 1 si trouvé | par défaut | [ligne] && exit 1 || exit 0 |