0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Trojan Source 攻撃とは

0
Last updated at Posted at 2026-03-05

はじめに

ソフトウェア開発では、コードレビューや静的解析などを通じてソースコードの安全性を確認することが重要です。
しかし、コードが「人間にどう見えるか」と「コンピュータがどう解釈するか」が一致しない場合、レビューをすり抜けるセキュリティリスクが生じます。

2021 年に公開された Trojan Source と呼ばれる研究は、この問題を明確に示しました。
Trojan Source は Unicode の表示制御機能を悪用し、人間が見るコードと実際に実行されるコードを異なるように見せる可能性のある攻撃手法です。

この問題は多くのプログラミング言語や開発環境に影響する可能性があるため、公開後すぐにソフトウェア開発コミュニティで大きな話題となりました。

本記事では、Trojan Source の仕組み、背景となる Unicode の仕様、影響、そして現在の対策について解説します。


Trojan Source の基本概念

Trojan Source の本質は次の一文で説明できます。

人間が読むコード ≠ コンピュータが実行するコード

通常、ソースコードは

  • 開発者
  • コンパイラ / インタプリタ

の両方が 同じ順序で読み取ることを前提としています。

しかし Trojan Source では Unicode の双方向表示機能を利用して、コードの見た目を操作します。


Unicode と文字方向

世界の言語には 文字の書き方向が異なるものがあります。

左から右(LTR)

English
日本語
中文

表示例

ABC123

右から左(RTL)

  • アラビア語
  • ヘブライ語

表示例

مرحبا

これらの言語を同じ文章内で扱うため、Unicode には 双方向テキストアルゴリズム(Bidirectional Algorithm) が存在します。

Unicode 標準は Unicode Consortium によって管理されています。


Trojan Source の仕組み

Trojan Source は 双方向制御文字を利用します。

代表的な文字:

Unicode 名前
U+202E Right-to-Left Override
U+202D Left-to-Right Override
U+202B Right-to-Left Embedding
U+202A Left-to-Right Embedding

これらの文字は

  • 画面に表示されない
  • 空白としても見えない
  • しかし 文字の表示順序を変更する

という特徴があります。


表示順序と実際の順序

Trojan Source の重要なポイントは次です。

実際のコード 画面表示
ABC123 ABC321

つまり

保存順序 ≠ 表示順序

となる可能性があります。

この結果、開発者がコードレビューを行う際に
実際とは異なるコード構造を見てしまう可能性があります。

例えば

access_level = "user"
if access_level != 'none‮⁦': # Check if admin ⁩⁦' and access_level != 'user
    print("You are an admin.")

実際のコードは
343434.jpg

from https://github.com/nickboucher/trojan-source/blob/main/Python/commenting-out.py?h=1


Trojan Source の影響

Trojan Source は以下のようなリスクを持ちます。

コードレビューの回避

開発プロジェクトでは通常、

  1. 開発者がコードを書く
  2. 他の開発者がレビューする

というプロセスがあります。

Trojan Source を利用すると、レビュー時には安全なコードに見えるため
悪意あるコードを紛れ込ませる可能性があります。


バックドアの挿入

表示順序を操作することで

  • 条件分岐
  • コメント
  • ロジック構造

が誤って理解される可能性があります。


オープンソースプロジェクトへの影響

特に以下の環境では影響が懸念されました。

  • OSS プロジェクト
  • パッケージ管理システム
  • ライブラリ開発

影響を受けるプログラミング言語

Unicode を扱う多くの言語が影響を受ける可能性があります。

  • Python
  • Java
  • JavaScript
  • C / C++
  • Go
  • Rust

これは Unicode 表示仕様が共通であるためです。


Trojan Source 公開後の対応

研究公開後、多くの開発ツールやプラットフォームが対策を導入しました。

例:

GitHub
Microsoft
Google


現在の主な対策

IDE の警告

多くの IDE は 双方向 Unicode 制御文字を検出して警告します。

  • Visual Studio Code
  • Android Studio

コンパイラの警告

コンパイラも双方向制御文字を検出できます。

  • GCC
  • LLVM

コードプラットフォームの警告

GitHub ではソースコードに以下の警告が表示されます。

This file contains bidirectional Unicode text

まとめ

Trojan Source 攻撃の特徴

  • Unicode の表示制御文字を悪用
  • ソースコードの見た目を操作
  • コードレビューを欺く可能性
  • 多くのプログラミング言語に影響

現在は多くのツールが
不可視 Unicode 文字の検出・警告機能を実装しており、
リスクは大きく低減されています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?