Static QR

オンラインのQRコード生成サイトを信用してはいけない理由

QRコードは人間には読めません。この一点だけで、この攻撃は成り立ちます。

このサイトができたきっかけ

きっかけは単純な実験でした。QRコード生成サイトを検索し、上位のいくつかにビットコインアドレスを貼り付けて、返ってきたものを照合する。いくつかのサイトは、入力したアドレスが入っていないコードを返してきました。入っていたのは他人のアドレスでした。

差し替えの仕組み

あなたは支払い用アドレスをサイトに貼り付けます。サイトは画像を返します。QRコードの画像は読めないので、あなたはそれを受け取り、請求書やポスター、寄付ページ、名刺に載せ、元のテキストは捨ててしまいます。それを読み取った人は全員、あなたではなく攻撃者に支払います。どの段階でも異常には見えず、誰かが気づいたときには資金は失われ、印刷されたコードはすでに出回っています。

なぜ今も通用するのか

  • 2つのQRコードは見ただけでは区別できません。それを受け取る相手にも区別できません。
  • 生成サイトを使うのは、元のテキストがまだ画面にある一度きりで、その後は二度と使いません。
  • コードは印刷物やスクリーンショット、元のテキストがもう存在しない場所に埋め込まれることが多く、照合する相手が残りません。
  • 確認する人も、先頭と末尾の数文字だけを見比べがちです。攻撃者はそこが一致するアドレスを用意します。

逆方向の話:自分が作っていないコード

このサイトが主に扱うのは、あなたが作るコードです。ただし、QRコードを使った詐欺の多くは逆方向で起きます。駐車料金機や決済端末のコードの上にシールが貼られたり、請求書のPDFにリンクの代わりにコードが入っていたりします。そのコードは本物に見えるページへ誘導し、ログインや支払いを求めます。業界ではこれをクイッシングと呼びます。成立する理由はアドレスの差し替えと同じで、QRコードの行き先は、実際に行ってみるまで分からないからです。

  • 駐車料金機、充電器、決済端末で、本物のコードの上に貼られたシール。
  • メールやPDF添付ファイルの中のコード。ふつうのリンクなら止まるフィルターをすり抜けます。
  • 偽の飲食店メニュー、偽の宅配不在通知、偽の公共料金の督促。
  • 屋外のポスターやチラシ。後から貼られたシールと元の印刷は誰にも見分けがつきません。

アクセスする前にコードを読み取り、行き先を確認してください: コードを確認

身を守る方法

  • 共有する前に、実際に支払いに使う端末で自分でQRコードを読み取ってください。
  • 両端だけでなく、文字列全体を1文字ずつ照合してください。
  • ネットワークを切っても動く生成ツールを選んでください。サーバーが必要なら、そのサーバーはデータを書き換えられます。
  • アドレスのチェックサムを確認してください。ビットコインアドレスにはチェックサムがあり、壊れたアドレスは通りません。
  • 他人から送られてきたコードを使い回さず、自分で作り直してください。
  • 屋外でコードを読み取る前に、元のコードの上にシールが貼られていないか確認してください。物理的なすり替えが最も多い手口です。
  • コードが導くリンクのドメインは最後まで読んでください。読み取って開いたページでログインや支払いをしてはいけません。

このサイトが違う点

  • QRコードはあなたのブラウザの中で組み立てられます。送信先となるサーバーが存在しないため、入力内容はどこへも送られません。
  • コードを描画したあと、ページは生成したばかりの画像を読み取り直し、何が読めたかを表示します。入力内容と一致しなければ、その旨を伝えます。
  • コンテンツセキュリティポリシーは外部の参照先を一切許可していないため、ページは誤ってでも何かを読み込んだり通信したりできません。
  • 全体が静的ファイルとオープンソースです。すべての行を読み、ページを保存して、オフラインでいつまでも使えます。

このサイトの言うことも鵜呑みにしないでください

ここまでの内容はすべてQRコード生成ツールを疑う理由であり、そしてこれ自体がQRコード生成ツールです。生成ページの読み直し検証は便利さのためのもので、証明ではありません。画像を描いたのと同じコードが行っているからです。本当に意味があるのは、あなた自身が、自分の端末で、自分のアドレスと照合する確認だけです。それを行ってください。

よくある質問

QRコード生成サイトがビットコインアドレスを書き換えることはありますか。

あります。コードが他人のサーバーで生成されるなら、画像に何を入れるかを決めるのはそのサーバーです。好きなアドレスを入れたコードを返すことができ、画像はまったく普通に見えます。

QRコードに正しいアドレスが入っているか、どう確認しますか。

支払いに使う端末で読み取り、読み取れたテキストを自分のアドレスと全体にわたって照合してください。攻撃者は先頭と末尾を一致させられるので、そこだけを見比べてはいけません。

ウォレットアドレスにオンラインのQRコード生成サイトを使っても安全ですか。

生成がすべてブラウザ内で行われ、結果を読み取って検証する場合に限ります。アドレスをサーバーへ送るものは、あなたのお金をそのサーバーに預けろと言っているのと同じです。

このサイトは入力したデータをどこかに送りますか。

送りません。ページは静的で、変換処理はブラウザ内で動きます。インターネットを切って再読み込みしても、そのまま動作します。

クイッシングとは何ですか。

リンクの代わりにQRコードを使うフィッシングです。コードは行き先を隠すため、メールのフィルターも、クリック前にリンクを確認する習慣もすり抜けます。最も多いのは、公共の場所で本物のコードの上にシールを貼る手口です。

スキャンする前にQRコードの行き先を知るには、どうすればよいですか。

画像を開くのではなく、読み取ってください。このサイトの確認ページは、実際にアクセスせずに行き先を表示します。どんなコードでも、写真やスクリーンショットで確認できます。