業界では周知のことですが、脆弱性はすべて同じではありません。軽微なものや無関係なものもあれば、重大なものもあります。当然ながら、重大とされた脆弱性に注目する必要があります。
最近公開された Trojan Source(CVE 2021-42574)の脆弱性は、重大カテゴリに分類されます。最大限の注意が必要ということです。重大と分類された理由は複数あります。この脆弱性は有害で(NVDの重大度ランキングは9.8)、蔓延性が高く、発見が困難です。
ケンブリッジ大学の研究者は最近、プログラミング言語に関係なくコードベースに影響を与える可能性があるTrojan Sourceの脆弱性を明らかにしました。Unicodeにより、ソースコードのレンダリングは実際の解析構造とは異なって表示される可能性があります。この脆弱性により、攻撃者はあらゆるアプリケーションに簡単にトロイの木馬を挿入し、悪用のための弱点を生み出すことができます。
たとえば、次のコードスニペットは安全であるように見えますが、もしもコードに特定のUnicode制御文字が隠されていると、コンパイラによる解析で異常が生じます。
/* begin sensitive block */ if (properlySanitized(user_input)==true) {
sensitive_api_call(user_input);
/* end sensitive block */}
上記は次のように解析されてしまうため、棒線部は解析されなくなりユーザー入力のサニタイズが実行されなくなります。
この脆弱性はコードベースに簡単に挿入できるため、この問題は解決する必要があります。たとえば、開発チームがアルゴリズムの実装方法やAPIの使用方法をWebで検索する際、検索結果からコードスニペットをコピーして貼り付ける場合があります。コピーしたスニペットにこの攻撃が含まれている場合、トロイの木馬は植え付けに成功します。また、通常はコードレビューの際に隠し文字を対象にしていないので、この種の脆弱性は手動コードレビューで捕捉することは困難です。
この脆弱性は、サードパーティー製コンポーネントのサプライチェーンを介してコードベースに侵入する可能性もあります。一般的な依存関係には悪意のあるコードが含まれている場合がありますが、Bidi(双方向)文字攻撃は人間のレビュー担当者には目視できないため、コードレビュー中に捕捉できない可能性があります。
Sigma SASTエンジン(Linux、Windows、MacOSに対応)を使用するRapid Scan Staticの自己完結型で軽量な実行可能ファイルが役に立ちます。Coverity®をご利用のお客様は、シノプシスのCommunity ポータルから最新バージョンをダウンロードできます。バージョン2021.11.1以降のRapid Scan Staticでは、C/C++、Java、JavaScript、C#、Python、Go、PHP、Swift、Kotlinなどのあらゆる言語でUnicode bidiを用いたTrojan Source脆弱性を検出します。
実行可能ファイル自体は約50MBで、コマンドライン・インターフェイスを使用してスタンドアロンで実行できます。このツールをDockerコンテナ内、または組織に適した場所にデプロイします。
シノプシスは、今後のリリースでさらに改善を加えていく予定です。現時点では、図1に示すように明示的に有効にする必要があります。
次の出力は、Linuxカーネルのコードベースに対してRapid Scan の静的解析を実行した結果であり、この重要なコードベースはこの脆弱性に対して安全です。このエンジンは約70,000個のファイルを特定し、Rapid Scan Staticは11秒間に約55,000個のソースファイルをスキャンしています。
% git clone https://github.com/torvalds/linux.git
% sigma analyze --enable trojan_source_bidi_char_anywhere linux
Copyright (c) 2021 Synopsys, Inc.
For documentation and support, visit https://community.synopsys.com
Identified
File Type |
Occurrences |
C |
30678 |
C Header |
22254 |
Device Tree |
4008 |
ReStructuredText |
2982 |
Makefile |
2671 |
Plain Text |
2452 |
YAML |
2174 |
GNU Style Assembly |
1201 |
Shell |
679 |
JSON |
412 |
Python |
140 |
SVG |
59 |
Perl |
55 |
Bash |
52 |
Properties |
33 |
ASN.1 |
17 |
… |
… |
No issues found after 11 seconds
%
図1:LinuxカーネルのコードベースのRapid Scan Staticの出力
シノプシスでは、この脆弱性が発生しやすいものであることを考慮して、特に現在公開されている脆弱性であるため、会社全体のすべてのコードベースをスキャンし、Trojan Source脆弱性が現存しないようにすることを推奨しています。スキャンを夜間に、またはCI/CDパイプラインで他のスキャン中に実行すると、今後発生する脆弱性が捕捉されるようになります。
既にCoverityをご利用のお客様の場合は、シノプシスのCommunity ポータルからRapid Scan Staticの最新バージョンをダウンロードできます。