
🔎 Помогает найти уязвимость Trojan Source в коде 👀 . Полезно для проверки кода в проекте с несколькими соавторами (CI/CD).
Уязвимость Trojan Source позволяет злоумышленнику сделать вредоносный код внешне безобидным.
В целом, атакующий пытается обмануть, выдавая свой код за комментарий (визуально). Это серьёзная угроза, так как затрагивает многие языки. Проекты с несколькими «ненадёжными» источниками могут быть подвержены риску.
Обнаружить зло 🔎
·
Отследить зло 👀
·
Trojan Source ❓
go> Через go install
go install github.com/ariary/TrojanSourceFinder/cmd/tsfinder@latest
Убедитесь, что $GOPATH находится в вашем $PATH.
> Из исходного кода
git clone https://github.com/ariary/TrojanSourceFinder
cd TrojanSourceFinder
make before.build
make build.tsfinder
Если команда make build.tsfinder не удалась, попробуйте:
env GOOS=target-OS GOARCH=target-architecture
go build -o tsfinder cmd/main.go
curl> Из релиза
curl -lO -L https://github.com/ariary/TrojanSourceFinder/releases/latest/download/tsfinder && chmod +x tsfinder
> Помощь в обнаружении Trojan Source для ручного ревью кода или в конвейерах CI/CD (двунаправленные символы Unicode)
Для обнаружения Trojan Source в файле или директории <путь>:
tsfinder [путь]
> Файлы исходного кода, как правило, текстовые. Исключение бинарников из сканирования может помочь отсеять ложные срабатывания
tsfinder -t [путь]
Добавьте -v, чтобы увидеть, какие файлы были пропущены при сканировании.
Trojan Source — не единственная угроза. Другая — «Гомоглифы». (Что это?)
tsfinder помогает их обнаруживать с помощью команды homoglyph:
tsfinder homoglyph [имя_файла] [флаги]
Вы можете увидеть, есть ли родственное слово (т.е. слово с тем же «скелетом») для найденных гомоглифов в путь, используя флаг --sibling:
tsfinder homoglyph [имя_файла] --sibling [путь]
Функциональность в разработке, в основном зависит от других проектов
> Визуализация того, как код на самом деле интерпретируется машинами/компиляторами
tsfinder намеренно не очень многословен. По умолчанию он выводит только информацию о том, был ли обнаружен код Trojan Source. Чтобы получить больше информации и визуализировать опасные строки, добавьте флаг -v.
Чтобы лучше видеть, где находятся Trojan Source, вы можете включить цветной вывод с помощью флага -c (также полезно при сканировании директории):
tsfinder -c -v <директория>


Как отметил @ioah86 здесь, Trojan Source также можно обнаружить с помощью однострочника через grep.
Основное отличие — формат вывода и код возврата (tsfinder завершается с кодом 0, если Trojan Source не найден, и 1 в противном случае; для grep — наоборот).
Также этот однострочник не решает проблему гомоглифов.
| Цель | tsfinder | grep однострочник |
|---|---|---|
| Сканировать все файлы + показать строки | tsfinder -v . | grep -arE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Сканировать только человекочитаемые файлы | tsfinder -t . | grep -IrE $'(\u2066|\u2067|\u2068|\u202A|\u202B|\u202D|\u202E|\u202C|\u2069|\u200E|\u200F|\u061C|\u2066|\u2067|\u2068)' |
| Выход с кодом 1 при обнаружении | по умолчанию | [однострочник] && exit 1 || exit 0 |