ITmedia NEWS > セキュリティ >
速報
» 2021年11月02日 18時16分 公開

ソースコードに脆弱性を潜ませられるUnicode悪用攻撃法「Trojan Source」を研究者が発表

英ケンブリッジ大学コンピュータ研究所が、「Trojan Source」と名付けた攻撃法を発表した。Unicodeの脆弱性を悪用するもので、C、C++、C#、JavaScript、Java、Rust、Go、Pythonに対して機能した。「他のほとんどの言語に対しても機能すると思われる」としている。

[ITmedia]

 英ケンブリッジ大学コンピュータ研究所は11月1日(現地時間)、「Trojan Source:Invisible Vulnerabilities」(リンク先はPDF)という論文を公開した。Trojan Sourceは、「人間のコードレビュアーには見えないターゲットを絞った脆弱性を作成するためのクールな新トリック」という。

 研究者のロス・アンダーソン氏は、「Unicodeの方向性オーバーライド文字を使って、コードを別のロジックのアナグラムとして表示するこの攻撃は、C、C++、C#、JavaScript、Java、Rust、Go、Pythonに対して機能することを確認しており、他のほとんどの言語に対しても機能すると思われる」と説明する。

 「人間が見るのと異なるロジックをコンパイラに示せるように、ソースコードファイルのエンコーディングを操作する方法を発見した」。コメントや文字列に埋め込まれた制御文字を使うことで、攻撃者はソースコードを並べ替え、悪用可能な脆弱性を生み出す方法でロジックを変更できる。

 論文では2つの方法を紹介している。1つは双方向テキストのUnicodeコントロールを使ってコンテンツが表示される方向を変え、コード作成者が意図するのとは異なるロジックを生成する方法。これについてはRustが「CVE-2021-42574」としてセキュリティアドバイザリを公開した。

 もう1つはホモグリフ攻撃と呼ばれる攻撃で、数字の「0」と文字の「O」、「l」と「I」など、人間の目には区別のつきにくい文字を使うことで、コードを2つの異なる関数として扱うというもの(CVE-2021-42694)。

 trojan ホモグリフ攻撃の例。アルファベットの「H」とキリル文字の「H」は人間には区別がつかない

 Trojan Sourceを防御する方法として、Unicodeをサポートするコンパイラ、インタプリタ、ビルドパイプラインで、コメントや文字列リテラル内の終了していない双方向制御文字や混合スクリプトの紛らわしい文字を含む識別子にエラーや警告を投げることと説明している。言語仕様では、コメントや文字列リテラルでの終了していない双方向制御文字を正式に禁止する必要があるという。コードエディタとリポジトリプロントエンドは、双方向の制御文字と混合スクリプトの識別の難しい文字を視覚的な記号や警告で認識できるようにする必要があるとも指摘している。

 研究者らは発見したTrojan Sourceの攻撃を受ける可能性のある製品について、19社のサプライヤーに7月25日に通知し、99日間の開示猶予を設定した。開示までに9社がパッチのリリースを約束したという。

Copyright © ITmedia, Inc. All Rights Reserved.