クイックレスポンス(QR)コードは、あらゆる種類の情報を読み取りやすく安全な形で保存できる便利な形式だ。ただし、正しく実装されている場合に限る。例えば、現在も続く新型コロナウイルス感染症(COVID-19)のパンデミックを受け、各国政府は最近、ワクチン接種や検査結果などを証明するデジタルCOVID証明書の作成にQRコードを導入している。
QR技術は新しいものではなく、二要素認証(2FA)や多要素認証(MFA)といったセキュリティ機能は、モバイルアプリへのアクセスを保護するためにユーザーにこうしたコードを生成させることが多い。ほかの認証技術と同様に、QR技術も弱点の悪用を狙うハッカーの注目を集めている。つい先月、FBIはQRコードの潜在的な悪用について警告した。
QRコードの仕組み、ハッカーがどのように悪用できるか、そして自分と組織を守る方法を解説する。
QRコードの仕組みを内部から見る
技術的には、QRコードはバーコードに似ているが、通常はより多くの情報を保持できる。人間には白い背景に黒いピクセルが奇妙につながっているように見えるかもしれないが、この形式は機械にとって非常に読み取りやすい。
コンピューターはQRコードを、白い部分を0、色の付いた部分を1とする行列として認識する。ただし、人間が読める形式ではないため、左から右、上から下という順序にはなっていない。生成された画像にある3つの四角形が位置合わせを決め、多くの領域はQRコードリーダーが調整に使う内部パラメーターにすぎない。
実際、QRコードの中で情報を含む部分はごくわずかで、数学的アルゴリズムによって冗長性が加えられている。QRコードリーダーは、エンコードとデコードに使われる特定の文字セットである8ビットのブロック単位で情報を読み取る。
QRコードは複雑に見えるが、生成は比較的簡単だ。例えばPythonでは、QRcodeパッケージを使ってカスタムQRコードを作成できる。

上の例では単純なテキストしか使っていないが、リンクを開いたり連絡先カードを追加したりすることもできる。そのためユーザーは、QRコードをスキャンするだけでウェブサイトを閲覧したり、端末に連絡先情報を保存したりできる。
脅威アクターがQRコードを好む理由
QRコードは情報を保存・アクセスする優れた手段である一方、相応のリスクも伴う。
偽造コード
QRコードはリンクを自動的に開けるため、ハッカーはユーザーを偽のウェブサイトへ誘導し、例えばフィッシングキャンペーンの成功率を高めることができる。また、QRコードは人間には読み取れないため、ユーザーは悪意のあるコードを見分けられない。攻撃者は正規のコードの代わりに悪意あるコードを使える。
QRLハイジャック
QRログイン(QRL)は、ユーザーのログイン体験を向上させるために設計された、QRコードベースの認証方式だ。名前とパスワードを入力する代わりに、QRコードをスキャンする。
これによりウェブサイトへのログインは迅速かつ簡単になるが、ユーザーがログインするたびにQRコードを再生成しないなど、実装が不十分だと脆弱性が生じる。ハッカーはQRLハイジャックのような巧妙な手法でQRセッションを開始し、QRコードを複製して被害者をフィッシングページへ誘導できる。最終的に攻撃者はアクセス権を盗める。
以下の脆弱性管理ツールのトップ製品を参照。
悪意のあるQRコードを使ったハッキング
QRコードがほぼあらゆる場所で使われているのは、その優れた使いやすさゆえだが、同時に古いソフトウェアやデバイスに対する攻撃対象領域も広げている。
QRコードには大量の情報を含められるため、Wikipediaの例のように、悪意のあるコードを挿入する余地も十分にある。

攻撃者は巧妙なペイロードをQRコードに埋め込み、ユーザーがスキャンするのを待ってマルウェアを実行させることができる。
また、多くのオープンソースパッケージやライブラリーは、不正なQRコードを生成し、次のような一般的なエクスプロイトを埋め込む可能性がある。クロスサイトスクリプティング(XSS)、ローカルファイルインクルージョン(LFI)、ディレクトリートラバーサル、またはSQLインジェクションなどだ。
こちらもお読みください:一般的なITセキュリティ脆弱性を防ぐ方法。
不備のある実装は甚大な被害をもたらす
2020年、Omer Shafiq氏は、デジタル署名が施され偽造できないはずだったCOVID検査報告を含む暗号化されたQRコードを偽造した方法を説明した。
このソフトウェアアーキテクトは、QRコードの生成・検証に使われるアプリをオープンソースツールで調査すれば、妥当な時間内に実現できることを実証した。
技術的な知識がない人には実行が難しいかもしれないが、この調査によって、アプリがハードコードされた暗号化キーと対称AES暗号を使っており、いくつか手を加えるだけで検証可能なQRコードを生成できることが明らかになった。
QRコードは本質的に欠陥があるという専門家もいる。さらにSophosは2019年、明らかにした。QRコードの作成者は、あらゆるセキュリティ上の影響を想定しておらず、「QRコードにはセキュリティの刷新が必要だ」とまで述べていたという。
しかし、それは必要以上に問題を大きく捉えているかもしれない。問題は利用方法と実装にある。
QRコードのハッキング対策
開発者は、ユーザーログインや金融取引に静的QRコードを使うべきではない。ハッカーがその脆弱性を悪用して支払いを傍受したり認証情報を盗んだりできるためだ。代わりに動的QRコードを使い、同じユーザーが2回目にログインする場合でも、ユーザーに毎回再生成させるべきだ。
従来のフィッシング対策に加え、セキュリティ意識向上の取り組みにQRコードも含め、信頼できる情報源でない限り、こうしたショートカットで開いたページに個人情報を入力しないよう推奨する必要がある。URLにわずかなスペルミスがないか注意深く確認し、可能な限り、QRコードから直接ウェブサイトにアクセスしたりアプリをダウンロードしたりしないこと。また、QRコードスキャンアプリをダウンロードしてはいけない。スマートフォンのカメラには、おそらく標準でその機能が備わっている。
QRコードは人間には読み取れない形式だが、ユーザーのプライバシーを守るため、機密情報は暗号化しなければならない。開発者は安全な開発のベストプラクティスにも従う必要がある。





