最近不可視文字を使ったインジェクション攻撃が観測されているという記事を見ましたので、不可視文字に変換するツールを作って実験しました。
説明
不可視文字とは、画面上に表示されない文字のことで、UNIコードの未使用領域(U+E0100〜U+E01EF フォントが割り当てられていないエリア)に強制的に文字を割り当てることによって、画面上に表示させないものです。
最近この技術を使って、githubに対するコードインジェクションや、AIに対するインジェクション攻撃が行われているようですので、こういった技術があるということを知っておいてほしいと思い記事にしました。
変換ツールで作成したコードは自己の実験用に使用し、他人に対する不正な目的で使用しないようにしてください。
不可視文字変換ツール作りました
リンク 不可視Unicodeエンコーダ
※他人に対するインジェクション攻撃等違法な方法で使用しないでください

不可視文字の実験
①本当に見えないのか
ABCという文字を変換するとこのようになり、画面上は”ABC”という文字列が表示されていません。

しかし、この文字列をコピーして、メモ帳に張り付けると、次のようになります。

この□□□という部分に、不可視文字が入っています。
HTMLソースを表示すると次のようになっており、UNIコードが埋め込まれていることがわかります。

②どんな文字でも変換できるのか
次はどのような文字列を変換することができるのか実験しました。
”ABCaiu012あいう🌹薔薇”という文字を入力して文字種類による制限があるか確認した結果、全ての文字種類を不可視文字に変換することができました。
マルチバイト文字も変換できるとは思っていなかったので、変換可能な文字種類はかなり多いですね。

感想
今回の変換ツールは、文字列をアスキーコードに変換し、UNIコードの未使用領域ヘッダを追加しただけの簡易的なものですが、思ったより簡単に実装できることがわかりました。
この技術を応用すれば、不可視文字を使ってAIによるスクレイピング対策のようなこともできるのかもしれませんね。
ただ、悪意のあるプログラムを埋め込むことができる技術でもありますので、ブラウザの設定から
非表示文字を表示するかしないか ON/OFF
くらいは選べてもいいのかもしれませんね。
