全2914文字
PR

 プログラムに埋め込まれた脆弱性やマルウエア(コンピューターウイルス)などを見つける有効な手段の1つが、そのソースコードを丹念に調べる(レビューする)こと。スキルのある開発者(プログラマー)なら、ソースコードを調べることで異常に気づける。

 だが、そういった開発者の目を欺く手法が発表された。ソースコードに細工を施せば、テキストエディターなどで表示されるソースコードの「見た目」を変えられるというのだ。言い方を変えれば、目に見えない脆弱性を埋め込めるというのだ。

「トロイの木馬」のソースコード版

 この新手法は、英ケンブリッジ大学の研究者らが2021年11月1日(現地時間)に発表した。「Trojan Source(トロイのソース)」と名付けられた。「Trojan Horse(トロイの木馬)」にちなんだ命名だと考えられる。

 トロイの木馬とは、ギリシャ神話のトロイア戦争に登場する道具。兵隊を忍ばせた大きな木馬で、敵が気づかずに陣地内に移動させると中から兵隊が飛び出して戦ったとされる。

 このことから、有用なプログラムに見せかけて実行させるマルウエアをトロイの木馬という。今回のTrojan Sourceはそのソースコード版といえるだろう。

 ソースコードに仕込んだ脆弱性を、どのようにして開発者に気づかれないようにするのか。答えは単純。「Unicodeの制御文字」を使ってソースコードの見た目を変えるのだ。Unicodeとは文字コードの一種。文字を扱うプログラムのほとんどが対応している。

 制御文字とは、ディスプレーやプリンター、通信装置などに特別な動作をさせるための文字である。「文字」といっても、標準ではディスプレーなどには表示されない。

 Unicodeには、文字が表示される方向を変える制御文字がある(表1)。例えば「RLO」は、後続の文字を右から左に表示する(図1)。アラビア語のように右から左に文字を読む言語を表示する際などに使われる。

表1●文字の表示方向に関する制御文字の例
文字コードの一種であるUnicodeには、ディスプレーなどに表示する文字の方向を変える制御文字がある
表1●文字の表示方向に関する制御文字の例
[画像のクリックで拡大表示]
図1●制御文字の利用例
図1●制御文字の利用例
文字の表示方向に関する制御文字をうまく組み合わせれば、どのような文字列でも意図した通りに表示させることが可能になる。
[画像のクリックで拡大表示]

 ブロック単位で文字の表示方向を変える制御文字などもある。こういった制御文字をうまく組み合わせれば、脆弱性が埋め込まれたソースコードを、問題のないソースコードに見せかけることが可能になる。