ブログ

Trojan Sourceとは何か、そしてどのようにソースコードに紛れ込むのか

February 23, 2022
Laura Verheyde
オレンジ色の回路が光り輝く基板のクローズアップ。焦点は「01」の文字に合っている。

11月初旬、ケンブリッジ大学は「Trojan-Source」と題した研究結果を発表しました。この研究は、方向指定フォーマット文字を使用して、ソースコードやコメント内にバックドアを隠蔽する手法に焦点を当てています。これを利用すると、コンパイラが解釈するロジックと、人間のコードレビュー担当者が目にするロジックが異なるコードを作成することが可能になります。

この脆弱性は新しいものです。Unicodeが悪用された例は過去にも存在しましたが(例えば、ファイル名の末尾部分の方向を反転させることで、本来の拡張子を隠蔽するなど)、今回の研究で明らかになったのは、多くのコンパイラがソースコード内のUnicode文字を警告なしに無視する一方で、コードエディタを含むテキストエディタは、それらの文字に基づいてコメントやコードの行を再配置(リフロー)してしまう可能性があるという点です。その結果、エディタ上ではコンパイラが解析するものとは異なる順序でコードやコメントが表示され、最悪の場合、コードとコメントが入れ替わってしまうことさえあります。

詳細については以下をご覧ください。また、実際に手を動かしてTrojan Sourceのシミュレーション攻撃を試してみたい方は、無料のパブリックミッションに挑戦し、その脅威を直接体験してみてください。

双方向テキスト

Trojan-Source攻撃の一つは、UnicodeのBidi(双方向)アルゴリズムを利用します。これは、英語(左から右)とアラビア語(右から左)のように、表示順序が異なるテキストを混在させるための仕組みです。方向指定フォーマット文字を使うと、文字のグループ化や表示順序を再構成することができます。

上の表は、この攻撃に関連するBidiオーバーライド文字の一部です。例えば、次のようなケースを見てみましょう。

RLI e d o c PDI

RLIはRight-to-Left Isolate(右から左への分離)の略です。これは、テキストをそのコンテキストから分離し(PDI、Pop-Directional-Isolateで囲まれた範囲)、右から左へと読み込ませます。その結果、以下のようになります。

c o d e

しかし、コンパイラやインタプリタは通常、ソースコードを解析する前にBidiオーバーライドを含むフォーマット制御文字を処理しません。もしこれらの方向指定フォーマット文字を単に無視した場合、次のように解析されます。

e d o c

古いワインを新しい革袋に?

もちろん、これは今に始まったことではありません。過去にも、方向指定フォーマット文字をファイル名に挿入して悪意のある性質を隠蔽する手法が存在しました。例えば、メールの添付ファイルが「myspecialexe.doc」と表示されていても、RLO(Right-to-Left override)文字が含まれていれば、実際には「myspecialcod.exe」というファイル名である可能性があります。

Trojan Source攻撃では、ソースコード内のコメントや文字列に方向指定フォーマット文字を挿入します。これらは構文エラーやコンパイルエラーを引き起こさないためです。これらの制御文字はコードのロジックの表示順序を変更し、コンパイラに人間とは全く異なる読み方をさせるのです。

例えば、以下のバイト順で構成されたファイルがあるとします。

Bidirectional Unicode Text

方向指定フォーマット文字によって、次のように順序が入れ替わります。

Directional Formatting Characters

方向指定フォーマット文字が明示的に表示されない場合、コードは次のようにレンダリングされます。

Bidirectional Unicode Characters

RLOは最終行の閉じ括弧を開始括弧に(またはその逆に)反転させます。このコードを実行すると「You are an admin」と表示されます。管理者チェックはコメントアウトされていますが、制御文字によって、あたかも存在しているかのように見えてしまいます。

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

どのような影響があるのでしょうか?

C、C++、C#、JavaScript、Java、Rust、Go、Pythonなど、多くの言語がこの攻撃に対して脆弱であり、さらに多くの言語が影響を受けると考えられています。経験豊富な開発者であればソースコード内の方向指定文字に違和感を覚えるかもしれませんが、初心者であれば特に気に留めない可能性があります。さらに、これらの文字の可視化はIDEに大きく依存するため、必ず発見できるという保証はありません。

では、この脆弱性はどのようにしてソースコードに紛れ込むのでしょうか。第一に、悪意のあるコードが混入した信頼できないソースを利用した場合です。第二に、インターネット上のコードをコピー&ペーストした場合で、これは多くの開発者が経験していることでしょう。多くの組織が複数のベンダーのソフトウェアコンポーネントに依存しています。ここで問われるのは、それらのコードをどこまで完全に信頼できるかという点です。隠されたバックドアを含むソースコードをどのように検出すればよいのでしょうか。

誰が解決すべき問題なのか?

コンパイラやビルドパイプラインは、文字列やコメント内に限定されている場合を除き、複数の方向性を持つソースコード行を許可すべきではありません。文字列やコメント内の方向指定文字は、適切に終了処理がなされない場合、行末まで影響を及ぼす可能性があることに注意が必要です。一般的に、コードエディタはホモグラフや方向指定文字などの疑わしいUnicode文字を明示的にレンダリングし、強調表示すべきです。GitHubでは11月より、双方向Unicodeテキストを含むコード行に警告マークとメッセージを表示するようになりましたが、行内のどこに該当文字があるかまでは強調されません。そのため、無害な変更に紛れて悪意のある変更が入り込む余地が残されています。

開発者やコードレビュー担当者の意識向上が不可欠です。そのため、私たちはこの脆弱性を解説するウォークスルーを作成しました。現在、Java、C#、Python、Go、PHPに対応しています。

詳細については、Trojan Sourceのシミュレーション(公開ミッション)を試すか、Trojan Sourceに関する研究論文をご覧ください。

Javaのシミュレーション

C#のシミュレーション

PHPのシミュレーション

GOのシミュレーション

Pythonのシミュレーション

タグライン

AI主導の開発をリリース前にガバナンスする

AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。

デモを予約する
リソースライブラリ

他のブログ記事を見る

セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。

すべて表示
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

セキュリティ文化の統一:Sageはいかにしてチャンピオンプログラムを構築したか

Sageがどのようにして柔軟かつ関係性を重視したアプローチでセキュリティを強化し、200名以上のセキュリティチャンピオンを育成して、目に見えるリスク低減を実現したのかをご紹介します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

2026年サイバーセキュリティ意識向上月間:企業防衛に不可欠なAIセキュリティの理解

主要なAI企業の多くが、安全対策が追いつくまでの間、AI開発を世界的に減速させるよう公に呼びかける事態となっています。しかし現実には、深刻なセキュリティ問題はすでに顕在化しています。AI導入に伴う金銭的コストやリスクが増大し続ける中、多くのセキュリティリーダーや経営陣は差し迫った状況に追い込まれています。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

イネーブラー8:プログラムのブランディング

セキュアコーディングプログラムを成功させるには、優れたコンテンツ以上のものが必要です。イネーブラー8では、ブランディングによって参加を「憧れのステータスを得る体験」へと変える方法を解説します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

すべての従業員が今、AIサイバーセキュリティの最前線に立っている

エンタープライズテクノロジーの状況は、手遅れになるまで誰も予測できなかったほどの速さで変化しています。私たちは今、人間が書いたコードと基本的なコパイロット支援の時代から、エージェント型開発ライフサイクル(ADLC)の時代へと正式に足を踏み入れました。自律型AIエージェントは、複数の機能にわたってかつてない効率性をもたらす一方で、全く新しい種類のセキュリティリスクや規制リスクも引き起こしています。

詳細はこちら

AIを活用した開発をリリース前にセキュアに

開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。

デモを予約する
該当する項目が見つかりません。