
// 更新: 2021.11.05
エンコードだけでなく、デコードも可能になりました。つまり、サポートされている雙方向文字(bidi chars)を含むファイルを、雙方向プレースホルダ(LRO など)を持つテンプレートファイルに変換できるようになりました。
最近公開された bidi 攻撃の脆弱性を利用して悪意のあるファイルを生成します。この脆弱性は Unicode 仕様で発見され、多くのインタプリタ / コンパイラに影響を与えます。
cve.mitre.org より引用:
Unicode 仕様の雙方向アルゴリズム(Bidirectional Algorithm)において、バージョン 14.0 まで問題が発見されました。この問題により、制御シーケンスを介した文字の視覚的な並べ替えが可能になり、コンパイラやインタプリタが取り込むトークンの論理的な順序とは異なるロジックを描画するソースコードを作成できます。攻撃者はこれを利用して、Unicode を受け入れるコンパイラ向けにソースコードをエンコードし、人間のレビュー担当者には見えない形で標的となる脆弱性を導入することができます。
unicode.org の雙方向アルゴリズムに関するレポートを参照:
https://www.unicode.org/reports/tr9/tr9-42.html
ケンブリッジ大学の元のソースを参照:
https://www.trojansource.codes/trojan-source.pdf
python3 codegen.py [-h] [-m MODE] [-i INFILE] [-o OUTFILE] [-u] [-a]
| arg | long arg | param | description |
|---|---|---|---|
| -h | --help | なし | このヘルプメッセージを表示して終了 |
| -i | --infile | INFILE | Unicode プレースホルダを含む入力ファイル(テンプレート) |
| -o | --outfile | OUTFILE | 最終的なコードを保存する出力ファイル |
| -u | --uctable | なし | サポートされている bidi 関連文字 |
| -a | --about | なし | 説明テキストを表示 |
| -m | --mode | MODE | e|ncode を使用してテンプレートを悪意のあるコードに変換し、d|ecode で逆変換します |
これにより、bidi プレースホルダを含むテンプレートファイルが、実際の bidi 文字を含むファイルに変換されます。すべての例は、参照されている PDF から引用されています。これらの例を実行するには、必要な引数を指定して codegen.py を実行してください:
python3 codegen.py -m encode -i infile.xyz -o outfile.xyz を実行し、outfile.xyz を実行 / コンパイルします。
これにより、bidi 文字を含むファイルが、対応する bidi プレースホルダを持つファイルに変換されます。注: 出力はテンプレートに過ぎないため、実行することはできません。
python3 codegen.py -m decode -i infile.xyz -o outfile.xyz
独自のテンプレートを作成するには、特殊文字を配置したい場所にプレースホルダ(python3 codegen.py -u)を設定します。テンプレートがどのように見えるかの最初の印象については、例を参照してください。
次の表(元のケンブリッジレポートから引用)は、このスクリプトで現在サポートされている文字を示しています。
~ https://www.trojansource.codes/trojan-source.pdf