研究者らは、人間のコードレビュアーには見えない脆弱性をソースコードに仕込むために悪用される可能性のある手法を明らかにした。
今週発表された論文で、英国ケンブリッジ大学の研究者2人は、「Trojan Source(トロイの木馬ソース)」と名付けたこの手法が、現在使われているほぼすべてのプログラミング言語に対して悪用でき、サプライチェーン攻撃のようなSolarWindsを標的に昨年実行された攻撃にも有効だと論文で記している。
「この手法を使えば強力なサプライチェーン攻撃を容易に実行できるため、ソフトウェアサプライチェーンに関わる組織は防御策を導入することが不可欠だ」と、Nicholas Boucher氏とRoss Anderson氏は論文に記した。「ソフトウェア開発ツールチェーンのさまざまなレベル、すなわち言語仕様、コンパイラー、テキストエディター、コードリポジトリ、ビルドパイプラインで利用できる対策について論じた」
あるウェブサイトで、両氏は「攻撃者が人間によるレビューを欺いてオープンソースコードに標的型の脆弱性をコミットすることに成功すれば、その下流のソフトウェアはその脆弱性を受け継ぐ可能性が高い」と記している。
両氏によれば、長期的な解決策はコンパイラーによってもたらされる。その多くはすでに、関連する攻撃への防御機能を備えている。
鍵はUnicode
鍵となるのは、Unicodeの制御文字を使って、エンコーディングレベルでソースコード内のトークンを並べ替えることだと両氏は記している。このように視覚的に並べ替えられたトークンは、意味的には正しいものの、ソースコードのトークンを論理的に並べた順序によって示されるロジックとは異なるロジックを表示できる。
しかし両氏は、「コンパイラーとインタープリターは、視覚的な順序ではなく、ソースコードの論理的な順序に従う」と記している。
Trojan Sourceの手法を使えば、サイバー犯罪者はコンパイラーにはあるように見え、人間のレビュアーには別のように見えるコードを作成できる。研究者らは、これによりすべてのソースコードが危険にさらされると述べ、C、C++、C#、JavaScript、Java、Rust、Go、Pythonなど、さまざまなプログラミング言語で攻撃の実用的な概念実証を行ったと説明した。また、同じ手法はほかの現代的な言語でも機能する可能性が高いと付け加えた。
こちらも読む:コードデバッグとコードセキュリティの主要ツール
並べ替えられたトークンの悪用
研究者らは、ソースコードのトークンを視覚的に並べ替える手法を悪用するためのさまざまなテクニックについても説明している。その1つが「early returns(早期リターン)」で、「コメント内にあるように視覚的に見えるreturn文を実行することで、関数を途中で終了させる」ものだという。
「コメントアウト」では、実行されないコメントが視覚的にはコードのように見える。「引き伸ばされた文字列」では、文字列リテラルの一部が視覚的にはコードのように見えるため、コメントアウトと同じ影響が生じ、文字列比較が失敗する。
両氏は、「攻撃では、コメントや文字列に埋め込んだ制御文字を使い、ロジックが変わるようにソースコードの文字を並べ替える」と記している。
これは2つの方法で実行できる。1つ目はUnicodeの双方向アルゴリズム(BiDi)を攻撃する方法で、これはCVD-2021-42574として追跡されている。このアルゴリズムは、テキストを表示する順序を決定する。英語やロシア語のように左から右へ記述する言語だけでなく、アラビア語やヘブライ語のように右から左へ記述する言語にも対応している。
Boucher氏とAnderson氏は、「Bidiの上書きにより、単一のスクリプトに属する文字でさえ、論理的なエンコーディングとは異なる順序で表示できる。この事実は以前、電子メールで拡散されるマルウェアのファイル拡張子を偽装したり、NLP[自然言語処理]の機械学習パイプライン向けに敵対的な例を作成したりするために悪用されている」と記している。
研究者らは、大規模な協調開示の取り組みの一環として、研究成果を99日間にわたって公開差し止めにした……
もう1つの攻撃では、見た目がほぼ同一の文字、すなわちホモグリフを使う。これはCVE-2021-42694。
研究者らは、大規模な協調開示の取り組みの一環として、コンパイラー、インタープリター、コードエディター、リポジトリが防御策を実装する時間を確保するため、研究成果を99日間にわたって公開差し止めにした。

サプライチェーン攻撃
研究者らが明らかにした手法は、新たなサプライチェーン攻撃を引き起こす可能性がある。サプライチェーン攻撃はサイバー犯罪者による利用が増えており、ロシアを拠点とする集団が、顧客企業が利用する同社のOrionリモート監視・管理ソフトウェアのアップデートパッケージに悪意あるコードを仕込んだSolarWindsへの攻撃がその一例だ。Kaseyaとその顧客も同様の攻撃を受けた。
研究者らは、「Trojan Sourceでは、コメントや文字列にUnicodeのBidi上書き文字を挿入することで、ほとんどの現代的な言語において構文上は正しいソースコードを生成できる。その文字の表示順序によって示されるロジックは、実際のロジックとは異なる。つまり、プログラムAをプログラムBへアナグラムのように変換するのだ。このような攻撃は、表示されたソースコードが完全に問題ないように見えるため、人間のコードレビュアーが検出するのは難しい可能性がある。ロジックの変更が、その後のテストで見逃されるほど巧妙であれば、攻撃者は検出されることなく標的型の脆弱性を仕込める」と記している。
コードを保護する手順
nVisiumのシニアアプリケーションセキュリティコンサルタントであるJon Gaines氏は、eSecurity Planetに対し、Trojan Sourceは興味深い攻撃対象領域を示していると語った。また、研究者らが示した概念実証は実際には悪意のあるものではないと付け加えた。
Gaines氏は、「しかし、これを実際に兵器化できる高度な攻撃者や集団の手に渡れば、確実に危険な状況になる。このシナリオは、ソースコードレビューが持つプロアクティブな力を示しており、当面はコードをコピー&ペーストしないことが良いベストプラクティスになるだろう。自分で書き直すほうが常に望ましく、IDEやテキストエディターでUnicodeを表示する設定を有効にすることもできる」と述べた。
インシデント対応企業BreachQuestの共同創業者兼CTOであるJake Williams氏によれば、論文で説明された問題は深刻だが、文脈を踏まえて検討する必要がある。
Williams氏はeSecurity Planetに対し、「これを悪用するには、攻撃者が、被害者によって後からバイナリ形式にコンパイルされるソースコードを変更できなければならない。これ自体すでに深刻だ。ここでの脆弱性はUnicode処理アルゴリズムを悪用し、ソースコードレビュー中にバックドアが発見される可能性を低くする。コンパイル前にソースコードの脆弱性やバックドアをレビューしていないのであれば、この脆弱性の開示後もセキュリティに実質的な変化はない」と語った。
同氏は、コンパイラーによるUnicode処理については以前から懸念があったとも指摘した。今回の研究は、この問題が広範囲に及ぶことを示したと述べている。
Boucher氏とAnderson氏は、組織が取れる対策として、Unicodeをサポートするコンパイラー、インタープリター、ビルドパイプラインに、コメントや文字列リテラル内の未確定な双方向制御文字、および異なるスクリプトの紛らわしい文字を含む識別子について、「エラーまたは警告を出させる」ことなどを推奨した。
また、言語仕様ではコメントや文字列リテラル内の終端されていない双方向制御文字を禁止し、コードエディターやリポジトリのフロントエンドでは、双方向制御文字や異なるスクリプトの紛らわしい文字を視覚的な記号や警告によって認識できるようにすべきだと述べた。
Positive TechnologiesのExpert Security Centerでマルウェア検知部門の責任者を務めるAlexey Vishnyakov氏は、この脆弱性は実在するが、容易に悪用できるものではないと述べた。
Vishnyakov氏は声明で、「攻撃者はまず、並べ替えられたコードの断片から動作するペイロードを組み立てる必要がある。プログラムコードの長さによっては、数週間、場合によっては1年かかる可能性がある。その後、ペイロードを動作させ、かつ偽装するためのガジェットを構築しなければならない。これも時間のかかる作業だ」と述べた。
「すべてのソフトウェアはプログラミング言語で書かれているため、これは間違いなくすべてのソフトウェアに影響する。しかし現時点で、セキュリティコミュニティはこの手法を使った攻撃を把握していない」
さらに読む:主要な脆弱性管理ツール





