『きまぐれQRコード』ができます!?【続報】気を付けろ!QRコードに脆弱性?
先週末、QRコードの新たな脆弱性について発表しました。簡単に言えば、正当なURLをもつサイトをA、そのフィッシングサイトのURLをBとすると、通常はAというサイトのURLを認識し、Aにアクセスするものの、千回に1回、あるいは一万回に1回程度、Bというフィッシングサイトに誘導されるQRコードを作成できるということです。わざわざ、このような手の込んだQRコードを作ることなく、フィッシングサイトに誘導するようなQRコードであれば簡単に作ることができます。フィッシングサイトのURLを表示するQRコードを正当なサイトAだと偽装すれば良いのです。しかし、この場合、一度でも注意深く正当なサイトAに誘導されるか試せば、そのQRコードがフィッシングサイトに誘導する偽装されたQRコードだということが判明します。我々が開発した方法でQRコードを構成すれば、偽装を見破ることが極めて難しいのです。注意深く試したとしても、フィッシングサイトに誘導されることはほとんどなく、見破られることはありません。
確かに見破られることはないかもしれないが、フィッシングサイトに誘導されることもないのではないかとの疑問もあります。しかし多くの人が頻繁にアクセスするサイトに偽装することによって、千人に一人、一万人に一人はフィッシングサイトに誘導され、数日の間に百万人の利用者があれば、数百人から数十人はフィッシングサイトに誘導され、そのうちの1%が騙されるとすると、数人程度が深刻な被害に遭う可能性があるのです。しかも再現性がありませんから、一度フィッシングサイトに誘導されたからと言って、再度アクセスすれば正当なサイトに誘導されることから気付く可能性はほとんどないのです。このようなQRコードを偽装QRコードと呼んでいます。
一部の人はNHKの映像で示された偽装QRコードの例を見て、QRコードの一部のセル(小さな正方形)の色が灰色になっていることに気付き、これが偽装コード構成の要であると思われているようです。しかし灰色にする必要はありません。灰色にしたのは演出であり、偽装ではなく常に正常なサイトを表示するQRコードと偽装QRコードを明確に区別するためです。決して灰色にするだけが構成方法ではありません。灰色ではなく、人の目ではなかなか見わけがつかないように作ることも可能です。
また、NHKの例では正常なサイトと仮に作った悪性サイト(フィッシングサイト)ではURLが一文字だけ異なっていましたが、これも本質ではなく、任意のURLと、それに関係のない任意のURLでも可能です。ここでも一文字だけ違っていたのは、演出の一部で、URLを表示さえても見分けにくいということと、その偽装QRコードの構成が簡単であることからです。
この偽装QRコードですが、必ずしもQRコードの欠点というわけではありません。確かに、フィッシングサイトに誘導するという目的では有効であり、その意味では脆弱性でしょう。しかし、千回に1回、一万回に一回という確率は制御できることから、2つのURLのどちらかに遷移することを積極的に利用すれば、宝くじや「ガチャ」に利用することが可能です。また、ほぼ等確率に二つのURLを記述することも可能なゆえ、一つのQRコードで二つのサイトに誘導することができ、たとえば負荷分散に利用することが可能です。さらに二つではなく、三つ四つ、それ以上のURLを組み込むことも理論上可能であることから、同一のQRコードで利用する人によって不規則に遷移するURLが変わり、「くじ」(おみくじ)等に利用することも可能です。
この偽装QRコードですが、上記のような使い方をする場合は「気まぐれQRコード(Whimsical QR code)」と呼んでいます。もし、この「気まぐれQRコード」に興味があり、事業化を目指して、神戸大学と共同研究、共同開発を希望する方は開発者である私に連絡いただければ幸いです。