Skip to main content

Snyk Codeでトロイのソース攻撃を防ぐ方法

著者

Frank Fischer

blog feature trojan source unicode

2021年11月17日

0 分で読めます

今月初め、ケンブリッジ大学の研究者グループが、新たな潜在的脆弱性についての学術論文と関連ウェブサイトを公開しました。彼らはこの脆弱性を「トロイのソース」と名付けました。

この脆弱性の基本的な仕組みは、コード内でUnicode文字を使うことです。変数名やコメントに絵文字を使って気持ちを表すなど、便利な使い方ができる一方で、悪意のある意味をコード内の人間には見えにくい形で隠せてしまいます。たとえば、攻撃者は有効な認証処理が含まれているようにコードを見せかけながら、実際には(あるいはコンパイラ/インタープリターにとっては)まったく別の動作を実行させることができます。また、実行されるコードに見える部分が、実際には実行時に無視されるコメントである場合もあります。こうした手口はすべて、Unicode文字を使って人間の目を欺くものです。

この脆弱性の詳細に関心がある方は、元のウェブサイトや論文をご覧ください。また、JavaScriptでの攻撃例を見たい方は、同僚のLiran Talが、ESLintを使ってJavaScriptのコードベースでトロイのソース攻撃を効果的に検出し、緩和する方法を紹介するブログ記事を執筆しています。

この記事では、Snyk Codeを使ってソースコード内のトロイのソースを検出し、修正する方法をご紹介します。さっそく見ていきましょう。

「Snyk Codeでトロイのソースを修正できますか?」

これは、ウェブサイトが公開された当日に寄せられた質問です(Snykのお客様がいかに情報通で、つながりを大切にしているかがうかがえます)。社内での議論を要約すると、チームに確認したところ、最初の反応は次のとおりでした。(1)サプライチェーン攻撃としては実現可能性があるものの、ソースコードへのアクセスが必要なため、自分で書いたコードを狙う攻撃としては可能性が低い。(2)この攻撃は構文レベルで機能する。

注: Liranの記事にあるように、トロイのソースは構文レベルの攻撃です。そのため、ESLintはJavaScript開発者に役立ちます。残念ながら、JavaやRuby、C#など、ほかのエコシステムでは、この脅威を緩和する新しいツールがまだ利用できない場合があります。だからこそ、Snyk Codeは開発者のツールボックスに加えるべき、ますます重要なツールなのです。

コミュニティの反応を受け、お客様からもご要望をいただいたため、トロイのソースの問題に対処するルールを追加することにしました。これは重大度の高い問題ではなく(最近の報道によって注目度が高まっているだけです)、修正を急ぐのではなく、現在のスプリントのタスクに加えました。しかし、そこで終わりにはしませんでした。このルールの追加にあたり、関連するUTFの同形異字脆弱性も対象に含めました。さらに、ルールセットがSnyk Codeでサポートされるすべてのプログラミング言語をカバーするようにしました。

注目すべきは、Snyk Codeでサポートされるすべての言語を対象に、トロイのソースと関連するルールの開発・リリースにかかった期間がわずか10日だったことです。特急対応ではなく、通常のスプリント内で実現しました。これはSnyk Codeの俊敏性を示す好例です。判断、実装、サポート対象のすべての言語で数十万件のプロジェクトを対象にしたテスト、最適化、リリースまでを10日で完了しました。また、Snyk Codeの機械学習を活用したエンジンの威力を示すものでもあります。数時間の開発作業で、トロイのソースだけでなく関連する問題にも対応できました。

Snyk Codeの画面に、見間違えやすい可能性のあるUTF-8文字を含むJavaScript関数名が表示され、スコアは361です。
Goコードと、双方向制御文字によってコードの意味が分かりにくくなることを示すメッセージが表示された、Snyk CodeのTrojanSourceBidiControl警告。

Snyk Codeはトロイのソースやその他の危険な亜種を検出

トロイのソースは、オープンソースのサプライチェーン攻撃として現れる可能性が高いものの、アプリケーションのコードに直接コピー&ペーストする形で実行されることもあります(Liranのブログを参照)。そのため、Snyk Codeはコードベースをスキャンし、トロイのソース型の問題を検出します。

注: Snykはオープンソースのサプライチェーンのセキュリティ確保にも役立つ強力なツールです。依存関係のセキュリティやライセンスコンプライアンスに関する問題を簡単に監視し、修正できます。

前述のとおり、チームは数日でトロイのソースの検出機能を開発しました。しかし、Snyk Codeは多くの他のツールよりも幅広い攻撃の亜種を検出できます。たとえば、双方向制御文字だけでなく、メソッド名や変数名に使われ、コードの本当の意味を隠す可能性のある、見た目が紛らわしいUTF文字も検出できます。つまり現在、Snyk Codeは、トロイのソースで説明されている問題を、私たちが知るどのチェッカーよりも幅広く検出します。

注: Snyk CodeはJava、JavaScript、TypeScript、PHP、Pythonに加えて、パブリックベータ版としてC#、Ruby、Goをサポートしています。トロイのソースはほかの言語(Bashスクリプトなど)も攻撃する可能性がありますが、Snyk Codeは未対応の言語をスキャンできません。

トロイのソースに対する切り札、Snyk Code

上でご紹介したように、Snyk Codeは幅広いスキャンに対応する強力なエンジンを備えています。独自の人間主導型アルゴリズムにより、世界中の開発者コミュニティの知見を学習します。さらに、市場の変化やトロイのソースのように進化する問題にも迅速に対応できます。その結果、トロイのソースだけでなく、関連する脆弱性も検出し、蓄積された知見と組み合わせることで、業界をリードする精度を実現します。問題の内容は元のソースコードとともに説明され、開発者が理解して修正できるよう、オープンソースプロジェクトで同様の問題を解決した事例も紹介します。

これらすべてを、比類ない速さで、お気に入りのIDEから利用できます。しかも無料で使えるので、試してみるには十分すぎる理由ではないでしょうか。

最先端のインテリジェンスでコードを保護

わずか30分で、Snyk CodeのSAST機能を幅広くご紹介します。

続きを読む

Blog

フロンティアモデルは脆弱性を発見した。攻撃者だけがエクスプロイトチェーンを見つけた。

静的解析で欠陥は見つかりましたが、ライブ攻撃テストで侵害につながる連鎖を実証できたのは唯一でした。Evo COS、Claude Security、Claude Code Securityを比較します。

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

Blog

AIコーディングエージェントが不適切なアクセス制御を繰り返し実装する理由

AIコーディングエージェントは、コンパイルが通りレビューも通過する一方で、あるテナントのデータを別のテナントに公開してしまう認可ロジックを生成することがあります。不適切なアクセス制御が検出しにくい理由と、その防止策をご紹介します。