RHSB-2021-007 トロイの木馬ソース攻撃 (CVE-2021-42574、CVE-2021-42694)
更新
この情報は役に立ちましたか?
エグゼクティブサマリー
Red Hat は、開発環境にてエンドユーザーに表示されるテキストが実行で想定される内容と一致しない新しいタイプの攻撃について認識しています。これらの問題には CVE-2021-42574 および CVE-2021-42694 が割り当てられています。どちらの不具合も重大度は 「中程度の影響」となっています。
これらの問題は Red Hat 製品の不具合ではなく、「トロイの木馬ソース」攻撃と分類されています。この不具合は、テキストのレンダリングに特別な要件がある開発環境での Unicode 標準の実装方法が原因となっています。
Red Hat が提供するパッケージの更新をご利用いただくことが、この問題を軽減するための回避策となります。Red Hat は、独自の開発環境でこれらの問題を検出するための サンプルスクリプト を提供しています。さらに、Red Hat はさまざまな開発者ツールでこれらの問題に対処するために、アップストリームの研究者やコミュニティーと協力しています。
テクニカルサマリー
テキストエンコーディングスキームは、左横書き言語と右横書き言語の両方をサポートする必要があります。言語スクリプトが異なる表示順序で混在する場合、Unicode の双方向 (BiDi) アルゴリズムによってこれを正常に実現する方法が提供されます。ただし、ソースコードで使用されると混乱を招く可能性があります。人間に対してレンダリングおよび表示される内容はあいまいである可能性があり、見た目は似ていても実行方法が異なる非 BiDi コードを見分けられない可能性があります。
たとえば、攻撃者がこれを悪用して、適切に配置された BiDi 文字が含まれる悪意のあるパッチを作成すると、人間は違いを特定できない可能性があります。その後、BiDi 文字の特別な処理とレンダリングを使用すると、予期せぬ潜在的に危険な挙動に人間が気付かぬようにすることが可能になります。
このような攻撃は、コードリポジトリーやビルドパイプラインの脅威となる可能性があります。一般的に使用される開発ツール (コンパイラー、エディター、ソースコード管理) に関連する不具合は見つかりませんでした。Red Hat は、一般的に使用されている開発ツールに適切な診断を追加し、問題のある BiDi シーケンスを特定するために、アップストリームのコミュニティーと協力しています。
関連問題に ホモグリフ (homoglyph) があります。これは、同一または同様に見える グリフ (glyph、合意された記号セットにおける要素的な記号で、記述のために判読可能な文字での表現を目的とする) のことです。ホモグリフを使用すると、ソースコードを目で判別できないように変更し、標的型攻撃を実行することも可能になります。
テキストのレンダリングに特別な要件がある開発環境で Unicode 標準を実装する方法に不具合が見つかりました。攻撃者がこれを悪用して、適切に配置された BiDi 文字が含まれる悪意のあるパッチを作成すると、人間は違いを特定できない可能性があります。その後、BiDi 文字の特別な処理とレンダリングを使用すると、予期せぬ潜在的に危険な挙動に人間が気付かぬようにすることが可能になります。
Unicode の Directional Formatting Character (BiDi) は、1 つ以上の文字の表示順序を切り替える非表示の文字です。BiDi が上書きされると、文字は記述された順序とは異なる順序で表示されます。
ほとんどのプログラミング言語はソースコードの任意の制御文字を受け入れません。これは、言語の構文規則に違反し、構文エラーが発生するためです。一部の言語では、変数名での特殊文字の使用も除外されます。ただし、ほとんどの言語では、BiDi 文字をコメントや一部の文字列に挿入できます。
BiDi 文字は、最新のシステムのほとんどで、コピーアンドペースト操作でも維持されます。信頼できないソースからコードをコピーおよび貼り付けすることにより、脆弱性が発生することが引き続き懸念されます。ロジックが巧妙に変更され、検出できないような場合は、手動の確認では不十分です。
テキストのレンダリングに特別な要件がある開発環境で Unicode 標準を実装する方法に不具合が見つかりました。ホモグリフとは、肉眼では同じように見える異なる Unicode 文字のことです。 攻撃者は、出力などの標準ライブラリー関数と見た目は同じで、1 つの文字がホモグリフに置き換えられた関数が含まれる悪意のあるパッチを作成することで、ホモグリフを使用して人間を欺くことが可能です。この関数をアップストリームの依存関係として定義すると、ソースコード関連の攻撃が可能になります。
これは、Red Hat 製品の不具合ではありません。
CVE-2021-42694 は 以前から知られており、CVE-2021-42574 よりも攻撃ベクトルは低くなっています。過去数年間、さまざまな アップストリームプロジェクト がホモグリフの問題に対処しており、現在も作業は進行中です。
製品への影響
現在、Red Hat は製品とサービスの内部スキャンを行っていますが、これまで、これらの脆弱性に関連する悪意のある Unicode 文字はコードでは検出されていません。また、コードにある不自然な Unicode シーケンスをスキャンする検出チェックを当社製品のサプライチェーンに対して導入する予定です。Red Hat は、一般的に使用されている開発ツールに適切な診断を追加し、問題のある BiDi シーケンスを特定するために、アップストリームのコミュニティーと協力しています。
注記: この不具合は、テキストのレンダリングに特別な要件がある開発環境での Unicode 標準の実装方法に存在します。Red Hat 製品の不具合ではありません。Red Hat が提供するパッケージの更新をご利用いただくことが、この問題を軽減するための回避策となります。
診断ツール
コードに BiDi 文字が存在するかどうかを判断するための 診断スクリプト が開発されました。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。検証にGPG 署名を使用する方法 と手順は、カスタマーポータルで確認できます。
注記: Red Hat は、このスクリプトを現状のままお客様とコミュニティーに提供しています。使用方法や出力の評価に対するサポートは提供されません。スクリプトの使用方法は、README ファイルを参照してください。お客様自身が、該当の BiDi 文字の使用を分析し、悪意のある使用の可能性に関して決定を行うことになります。BiDi 文字の詳細については、研究者が発表した技術ホワイトペーパーを参照してください。
ソースコードで BiDi 文字を検出する代替方法:
一部のテキストエディターでは、構文の強調表示、テキストスクロールの方向の反転、および制御文字の出力を総合して、ソースコードに BiDi 文字が存在する可能性を判断することができます。特に 1 つの単語の方向反転が重要になります。cat コマンドには、出力されない文字を視覚化するための -A および -v フラグがあるため、BiDi 制御シーケンスの存在を確認できます。
謝辞
Red Hat は、この問題をご報告いただいたケンブリッジ大学の Nicholas Boucher 氏と Ross Anderson 氏に感謝します。
よくある質問
問: この不具合は Red Hat 製品に影響しますか?
答: Red Hat 製品の不具合ではありません。この不具合は、テキストのレンダリングに特別な要件がある開発環境での Unicode 標準の実装方法に存在します。
問: この不具合は Red Hat のサプライチェーンに影響しますか?
答: コードにある不自然な Unicode シーケンスをスキャンする断続的な検出チェックを当社製品のサプライチェーンに対して導入する予定です。
問: Red Hat はこの問題をどのように修正する予定ですか?
答: これは Red Hat 製品の不具合ではなく、悪意のあるコードをアップストリームコードに追加するために悪用される可能性のある設計上の問題です。現在、Red Hat は問題の軽減に最適な診断および監査機能を異なるコンポーネントに対して設計および実装するために、さまざまなアップストリームプロジェクトと協力しています。
問: 古いバージョンの Red Hat Enterprise Linux (6 以前) では、どのようにコードをスキャンしたらよいですか?
答: 以下の bash コマンドラインを使用します。これは、本ページからダウンロードできる診断スクリプトほど強力ではありませんが、基本的なスキャンを実行します。
$grep -r $'[\u061C\u200E\u200F\u202A\u202B\u202C\u202D\u202E\u2066\u2067\u2068\u2069]' /path/to/source
出力が表示された場合、コードを確認する必要があります。
参考資料
https://www.lightbluetouchpaper.org/2021/11/01/trojan-source-invisible-vulnerabilities/
https://www.unicode.org/reports/tr36/#Canonical_Represenation
https://www.unicode.org/reports/tr36/#Bidirectional_Text_Spoofing
Comments