
このツールは、ファイル内にサプライチェーン攻撃に悪用される可能性のあるUnicode BIDI文字が存在するかどうかをチェックし、CVE-2021-42574を軽減します。 このツールはRustで書かれており、高速かつ簡単に使用できるように、小さな(3MB未満)Docker互換コンテナとして配布されています。
攻撃の説明については、GitHubのブログ記事または攻撃が公開された元の論文を参照してください。
このパッケージは主にDockerコンテナを介して使用されることを目的としています。しかし、ローカルインストールももちろん可能です。
コンパイルには、Rust 2021 Editionを使用しているため、少なくともRust 1.56.0が必要です。
このリポジトリをクローンし、cargo install --path . を実行して、現在のユーザー用にバイナリをインストールします。その後、bidi_detector コマンドを実行できます。
公式のDockerコンテナを介してツールを実行するのが、おそらく最も簡単な開始方法です。 Dockerを介して実行するには、以下のコマンドで現在の作業ディレクトリ内のすべてのファイルをスキャンできます。
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
システムによっては、このコマンドを少し調整する必要があるかもしれません。例えば、podmanを使用していてSELinuxが有効な場合は、代わりに次のコマンドを試してください。
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
デフォルトでは、すべてのファイルがチェックされます。現在のディレクトリ内にバイナリファイルがある場合、UTF-8以外のエンコードファイルをデコードできないため、コマンドは失敗します。
ニーズに合わせてコマンドを調整するには、プロジェクトのルートに bidi_config.toml という名前のファイルを配置します。
このリポジトリにその例があります。以下の例を参照してください。オプションについては、例の後で詳しく説明します。
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
このセクションには、スキャンするファイル(またはスキャンから除外するファイル)のパターンを指定できる2つの配列(includes および excludes)が含まれています。
パターンがディレクトリ名自体ではなく、ディレクトリ内のファイルに実際に一致するようにしてください。そうしないと、ファイルがスキャンされません。
すべてのファイルをスキャンし、例えば .git ディレクトリのみを除外したい場合、次の設定で目的を達成できます。
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
代わりに、ソースファイルが含まれるフォルダを明示的に定義したい場合は、次の設定例でsrcディレクトリ内のすべてのファイルをスキャンします(何も無視しません)。
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
このセクションでは、次の設定が利用可能です。
例: show_details = true, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:4:3
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:7
Found character PDI (Pop Directional Isolate), test/example-commenting-out.js:4:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:22
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:6:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:6:24
Found 6 potentially dangerous Unicode BIDI characters!
例: show_details = false, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
例: show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
攻撃の検出と関連するBIDI文字のリストに関するすべての功績は、対応する論文の原著者に帰属します。 彼らの研究を基に構築する場合は、原著論文を引用してください。
このリポジトリの test/example-commenting-out.js ファイルは、元のリポジトリの commenting-out.js のコピーです。そのライセンスは元のリポジトリ(MITライセンス)に従います。
ここではテスト目的でのみ使用されています。
@article{boucher_trojansource_2021,
title = {Trojan {Source}: {Invisible} {Vulnerabilities}},
author = {Nicholas Boucher and Ross Anderson},
year = {2021},
journal = {Preprint},
eprint = {2111.00169},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2111.00169}
}
| Setting | Description | Optional | Default | Introduced in |
|---|
show_details | 検出されたBIDI文字の行/位置とタイプを出力するかどうかを決定します(以下の例を参照) | No | - | v0.1.1 |
ignore_invalid_data | バイナリ/UTF-8以外のファイルが検出された場合にエラーメッセージを出力するかどうか | Yes | true | v0.1.2 |
verbose | 疑わしい文字が見つからなくてもファイル名を出力するかどうか | Yes | true | v0.1.2 |