このページの本文へ

週刊セキュリティレポート ― 第13回

RLO(Right to Left Override)Unicodeトリックへの対策

日本語でも危険!アラビア語ファイル名を利用した攻撃とは?

2011年09月12日 06時00分更新

文● 富安洋介/エフセキュア

  • この記事をはてなブックマークに追加
  • 本文印刷

皆さんは、日ごろ縦書きと横書きのどちらの文章を目にすることが多いでしょうか。この連載もそうですが、ITやコンピュータ関連では、横書きのものが大半を占めるため、読者の皆さんは横書きの文章に触れる機会が多いのではないかと思います。RLO Unicodeトリックは、文章の書き方の違いを利用したソーシャルエンジニアリングです。数年前から知られている攻撃手法ですが、最近再び多くの報告をエフセキュアの研究所が受け取っているので、改めておさらいしたいと思います。

エフセキュアの研究所が最近入手したRLO Unicodeトリックを使用するマルウェアのサンプル

言語による文章の書き方の違い

 日本語の文章は、元来は右上から左下への縦書きで書かれるものです。これは日本語の誕生に影響を与えた、古代中国語が縦書きで書かれていたことに由来します。その後、左横書き(左上から右下への横書き)の文章が使用される英語などの影響を受け、現在では縦書きと横書きを併用するに至っています。初期のITやコンピュータはおもにアメリカで発展したため、左横書きが主流となっています。

 しかしコンピュータの普及による国際化に伴い、左横書き以外の記述方法への対応も必要となってきました。日本では、日常的に縦書きと左横書きが使われるため、左横書きが問題になることはあまりありません。しかし、アラビア文字やヘブライ文字などは、元来右横書き(右上から左下への横書き)の文章で、コンピュータ上でも右横書きのサポートが必須となります。

 左横書きは英語で「Left to Right」、右横書きは「Right to Left」と呼ばれ、Unicodeではこれを制御する特殊文字が存在します。左横書きと右横書きの両方が混在する環境を「BiDi(Bi-Directional)」と呼びます。そして、Windowsはファイル名もBiDiをサポートしています。これを利用して拡張子を偽装する手法を、「RLO(Right to Left Override)Unicodeトリック」と呼びます。

 たとえば「xcod.exe」というEXE拡張子のファイル名を右横書きで書くと、「exe.docx」という、Wordドキュメントの拡張子を持ったファイルのように見せかけることができてしまいます。

RLO Unicodeトリックを使用して作成したファイルの例(下段のファイル)。同じファイル名に見えるが、上は拡張子TXTのテキストファイルで、下は拡張子EXEの実行ファイル

 RLO Unicodeトリックを利用したファイルは、簡単に作成できます。Windowsであればファイル名の編集を行なっているところで、コンテキストメニューの「Unicode制御文字の挿入」から、「RLO Start of right-to-left override」を選択するだけです。

 マルウェアでの感染活動では、もうちょっと手をかけており、見せかけの拡張子に似たアイコンを表示してだまそうとします。また、右横書きは、左横書きの途中に入れることも可能で、意味のある文字列と組み合わせ、本当の拡張子をよりわかり難くさせています。

RLOの挿入画面

RLO Unicodeトリックを見抜くには

 RLO Unicodeトリックは、見抜くのが非常に難しい偽装方法です。RLO制御文字は表示されない文字のため、アイコンまで偽装されていると、ファイル名の文字列からだけでは判別はできません。このトリックを見抜くのには、エクスプローラの表示を詳細表示に設定し、ファイルの種類を確認する必要があります。

 マルウェアでは、EXEやCOMなどのアプリケーションに分類されるファイルの拡張子をおもに使用します。拡張子がTXTやDOCのように表示されるにもかかわらず、種類がアプリケーションになっているファイルは、RLO Unicodeトリックが使われていると考えられます。

 しかしこの方法は普段から詳細表示を使用していない方には若干手間になります。また、見落としや誤認の危険性もあるため、より確実な方法がほしくなります。読者の多くが該当すると思いますが、日本においては右横書きのファイルを使用することは滅多にないと思います。そうであれば、ローカルセキュリティポリシーで、右横書きのファイルの実行をすべて禁止してしまうのが有効です

 具体的には、ローカルセキュリティポリシーで「セキュリティの設定」から「ソフトウェア制限のポリシー」を選択し、「追加の規則」で「新しいパスの規則」を追加してください。パスの部分には*(ワイルドカード)が使用できるため、2つの*を入力し、その間にカーソルを合わせてコンテキストメニューの「Unicode制御文字の挿入」から、「RLO Start of right-to-left override」を選択します。これで、RLOの制御文字が含まれるすべてのファイルの実行が禁止されます。

RLOがファイル名に使用された全ファイルの実行を禁止する設定
ローカルセキュリティポリシーで実行を禁止した際のメッセージ

Webサイト対策の困難さ

 コンピュータがさまざまな言語に対応していくこと自体はよいことだと思いますが、マルウェア作者はこのように悪用する方法をすぐに見つけ出してきます。拡張子を偽装するという方法は、古くは二重拡張子などがありますが、今後の言語対応なのでさらに悪用する方法が増える可能性も考えられます。WindowsでもLinuxのパーミッションのような、ファイル名に影響されない実行制御の仕組みが望まれます。

筆者紹介:富安洋介

エフセキュア株式会社 テクノロジー&サービス部 プロダクトエキスパート
2008年、エフセキュアに入社。主にLinux製品について、パートナーへの技術的支援を担当する。


カテゴリートップへ

この連載の記事
ピックアップ