戦前の日本は右から左に文字が印刷されていたようですが、現代人からするとすごく違和感のある書き方ですよね。
逆に、違和感が無くなることを利用してウイルスを実行させようという人もいるんですね。
というわけで、今回はファイル名の偽装に関する話題です。
何を言ってるの?
例えば、こちらのファイル名を見られたときに、皆さんはどのように感じますか?
happy.txt.exe
明らかにウイルスが実行されそうなファイルですよね。
では、こちらのファイル名はどうでしょうか?
happy.exe.txt
ちょっと怪しいですが、テキストファイルっぽく見えますよね?
このファイル、場合によっては実行ファイルなことがあります。
どういうこと?という感じですよね。
からくりとしては、Unicodeの制御文字でRLO(U+202E)というものがあり、この制御文字以降の文字を右から左に書くようになります。
制御文字自体は不可視なので、一見txtファイルに見えるこのファイルも、exeファイルであり、実行可能なファイルな恐れがあるということです。
なので、上記の例で言うと、こんな状態になっているということです。
happy.RLOexe.txt
怖いですね…
実際のところ
詳細なコマンドはあまり書くと良くないと思うので伏せておきますが、Macでechoコマンドを利用して制御文字をいれて実行したところ、添付画像のように?で表示されるため、騙せないようになっているのかなと思います。
実際にRLOが必要な言語だとどうなるのかはわかっていませんが、その場合は逆順表記が普通なので違和感はないのかなと思います。
逆に、LRO(U+202D)という制御文字もあるようなので、そのような言語圏の人にはそちらが攻撃用文字列になるんでしょうね。
ちなみに、Ubuntuで実行したところしっかりと制御文字が適用されて反転しました。
また、制御文字が入ったファイルをmvさせようとした際にも入力文字が逆に進んでいくので少し面白かったですが、このような文字が入っているファイルの扱いは面倒ですね。
このように、UTF-8の表示を止めることで制御文字が入っているかを見ることもできるようです(制御文字部分は伏せ字にしています)。
$ LANG="C" ls -1
happy.exe.txt
'happy.'$'\xxx\xxx\xxx''txt.exe'
感想
攻撃する人も色々なこと考えるんだなあと感心してしまいました。
ただ、最近の環境だとセキュリティも考えられているので、ある程度安心して利用できるようになっているんだなと思いました。
とはいえ騙されないように知識を獲得していくのも重要だなというところで、引き続き学習を進めていこうと考えています。