RLO【Right-to-Left Override】
概要

日本語や英語のように左から右へ文字を書き進める言語の文章中にRLOを挿入すると、それ以降の文字列がアラビア語やヘブライ語のように右から左へ反転して表示される。文字データ自体が変更されるわけではなく、見え方のみが変化する。
この仕組みは、左から右と右から左の双方の文字体系を一つの文書内で扱うためにUnicodeが備える双方向文字表示の機能の一部である。多言語環境での正しい表示を実現する目的で用意されたものである。
Windowsなどのファイルシステムではファイル名にもUnicodeが利用できるため、RLOを使って実行ファイルの拡張子を偽装する手口が確認されている。例えば「お見積り.[RLO]xcod.exe」という名前のファイル(表示上は[RLO]は不可視)を作成すると、RLO以降の文字列が右から左に並べ替えられ、画面上では「お見積り.exe.docx」のように表示される。実際の拡張子は「.exe」であるにもかかわらず、Word文書のように見えるため、利用者が文書ファイルだと誤認して開いてしまい、内部に仕込まれたマルウェアに感染する被害が生じる。
このような拡張子偽装は、電子メールの添付ファイルやダウンロードファイルを介した攻撃で多く確認されてきた。近年ではファイル名だけでなく、ソースコード内に双方向制御文字を埋め込み、人間が読むコードの見た目とコンパイラが解釈する内容を一致させなくする手法も報告されている。2021年には「Trojan Source」と呼ばれる脆弱性として注目を集め、開発者向けのエディタやツールでも警告表示などの対策が進められた。
Unicodeには、RLOと対をなす制御文字として左から右への表示を強制する「LRO」(Left-to-Right Override:U+202D)、方向指定を終了して元の状態に戻す「PDF」(Pop Directional Formatting:U+202C)、右から左への文字列を埋め込む「RLE」(Right-to-Left Embedding:U+202B)なども定義されている。RLOやLROによる方向指定は、文章中にPDFが現れるまで、または文字列の終端まで継続する。こうした不可視の制御文字が含まれる点を踏まえ、主要なオペレーティングシステム(OS)やWebブラウザ、メールソフトの多くは、ファイル名にこれらの文字が含まれる場合に警告を表示したり、該当する文字の使用を制限したりする対策を講じている。