
🔎 Ayuda a encontrar la vulnerabilidad Trojan Source en el código 👀 . Útil para la revisión de código en proyectos con múltiples colaboradores (CI/CD).
La vulnerabilidad Trojan Source permite a un atacante hacer que el código malicioso parezca inocente. En general, el atacante intenta engañar haciendo pasar su código como un comentario (visualmente). Es una amenaza grave porque afecta a muchos lenguajes. Los proyectos con múltiples fuentes "no confiables" podrían verse afectados.
Detectar el mal 🔎
·
Rastrear el mal 👀
·
Trojan Source ❓
go> Mediante go install
go install github.com/ariary/TrojanSourceFinder/cmd/tsfinder@latest
Asegúrate de que $GOPATH esté en tu $PATH
> Desde el código fuente
git clone https://github.com/ariary/TrojanSourceFinder
cd TrojanSourceFinder
make before.build
make build.tsfinder
Si el comando make build.tsfinder falla, intenta:
env GOOS=target-OS GOARCH=target-architecture
go build -o tsfinder cmd/main.go
curl> Desde el lanzamiento
curl -lO -L https://github.com/ariary/TrojanSourceFinder/releases/latest/download/tsfinder && chmod +x tsfinder
> Ayuda en la detección de Trojan Source para revisiones de código manuales o con pipelines CI/CD (caracteres bidireccionales Unicode)
Para detectar Trojan Source en el archivo o directorio <ruta>:
tsfinder [path]
> Los archivos de código fuente suelen ser archivos de texto. Excluir binarios del escaneo puede ayudar a descartar falsos positivos
tsfinder -t [path]
Agrega -v para ver qué archivo ha sido omitido por el escaneo.
Trojan Source no es nuevo y no es el único peligro. Otro es "Homoglyph".(¿Qué es?)
tsfinder ayuda a detectarlos con el comando homoglyph:
tsfinder homoglyph [filename] [flags]
Puedes ver si hay un "hermano" (es decir, palabra con el mismo "esqueleto") para los homógrafos encontrados en path usando la bandera --sibling:
tsfinder homoglyph [filename] --sibling [path]
Funcionalidad en desarrollo, que depende principalmente de otro proyecto
> Visualiza cómo el código es realmente interpretado por las máquinas/compilador
tsfinder no es deliberadamente muy verboso. Por defecto, solo mostrará si se ha detectado código Trojan Source. Para tener más verbosidad y visualizar la línea peligrosa, agrega la bandera -v.
Para ver mejor dónde estaban los Trojan Sources, puedes habilitar la salida coloreada con la bandera -c (también útil con el escaneo de directorios):
tsfinder -c -v <directory>


Como mencionó @ioah86 aquí, Trojan Source también se puede detectar con un one-liner usando grep.
La gran diferencia es el formato de salida y el código de estado de salida (tsfinder sale con código de estado 0 si no se ha encontrado Trojan Source, 1 en caso contrario; lo opuesto para grep)
Además, este one-liner no resuelve el problema de homoglyph
| Objetivo | tsfinder | grep one-liner |
|---|
| Escanear todos los archivos + mostrar líneas | tsfinder -v . | grep -arE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Escanear solo archivos legibles por humanos | tsfinder -t . | grep -IrE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Salir con código de estado 1 si se encuentra | default | [one-liner] && exit 1 || exit 0 |