トロイの木馬ソースの新技術:Unicode を悪用して注入した脆弱性を隠してしまう

New ‘Trojan Source’ Technique Lets Hackers Hide Vulnerabilities in Source Code

2021/11/01 TheHackerNews — 脅威アクターたちは、新たな種類の脆弱性を利用して、視覚的に狡猾なマルウェアを注入するかもしれない。これは意味的には問題が検出されないが、ソースコードで定義されたロジックを変更し、数多くの当事者およびサプライチェーンのリスクの扉を、効率よく開いていく。

ケンブリッジ大学の研究者である Nicholas Boucher と Ross Anderson は、この技術を「トロイの木馬ソース攻撃」と名付けた。そして、「Unicode などのテキスト・エンコーディング規格の微妙な違いを利用して、トークンが表示される順序とは論理的に異なる順序でエンコードされたソースコードを生成し、人間のコード・レビュアーが直接には認識できない脆弱性をもたらす」と発表している。

この脆弱性は、CVE-2021-42574 および CVE-2021-42694 として追跡され、C/C++/C#/JavaScript/Java/Rust/Go/Python などの、一般的なプログラミング言語のコンパイラに影響を与える。

コンパイラとは、人間が読むことのできる高レベルのソースコードを、アセンブリ言語/オブジェクトコード/マシンコードなどの低レベルの表現に変換し、オペレーティングシステムで実行できるようにするプログラムのことである。

この問題の核心は、Unicode の双方向 (Bidi) アルゴリズムにある。このアルゴリズムは、左から右への言語 (英語など) と、右から左への言語 (アラビア語など) の両方に対応している。また、双方向オーバーライドと呼ばれる機能があり、右から左への文章の中に左から右への単語を書くことや、逆に左から右への文章を右から左へのものとして扱うこともできる。

コンパイラの出力としては、与えられたソースコードを正しく実装することが期待されるが、コメントや文字列に Unicode Bidi override 文字を挿入することで生じる矛盾により、文字の表示順が実際の論理とは異なる論理を提示する、構文的には妥当なソースコードを生成するシナリオが可能になる。

つまり、この攻撃は、論理的なバグを意図的に導入するのではなく、ソースコード・ファイルのエンコーディングを狙って脆弱性を作り、ソースコード内のトークンを視覚的に再配置することで、完全に正しい方法で表示されているにもかかわらず、コンパイラーを騙して異なる方法でコードを処理させ、プログラムの流れを大きく変えてしまうというものだ (例:コメントをあたかもコードのように表示させる)。

研究者たちは、「つまり、プログラムAを、プログラムBに anagram してしまう。もし、ロジックの変更が、その後のテストで検出されないほど微妙なものであれば、それが検出されることはなく、標的となる脆弱性を注入できる」と推測している。

このような敵対的なエンコーディングは、オープンソース・ソフトウェアに注入された、目に見えない脆弱性が川下に流れ、そのソフトウェアの全てユーザーに影響を与える可能性があるため、サプライチェーンに深刻な影響が生じると、研究者たちは警告している。

さらに悪いことに、トロイの木馬の攻撃は、攻撃者が homoglyph を使って上流のパッケージにある既存の関数を再定義し、被害者のプログラムから呼び出すような場合には、より深刻なものとなる。

研究者たちは、「Trojan Source の脆弱性が大半のコンピュータ言語に影響を与えるという事実は、システム全体で生態学的に有効な、クロス・プラットフォーム間およびクロス・ベンダー間の応答比較するための貴重な機会となる。このような手法を用いれば、強力なサプライチェーン攻撃を容易に仕掛けることができるため、ソフトウェアのサプライチェーンに参加している組織は、防御策を導入することが不可欠である」と述べている。

お隣のキュレーション・チームに聞いてみたら、CVE-2021-42574 と CVE-2021-42694 は、Unicode の脆弱性として、また、Red Hat/Ubuntu の脆弱性として拾われているとのことです。それにしても、Unicode の優れた点を脆弱性に変えてしまうという発想には驚きです。この研究の成果により、脆弱性が速やかに FIX されると良いですね。

%d bloggers like this: