YDiary

メモ的な

Vpassのパズル認証を突破する

SMBCから

★━━【三井住友カード】━★

【重要なお知らせ】Vpassログイン時の「パズル認証」導入について

★━━━━ 2017年8月7日 ━★

などと書かれたメールが届きました.
どうやら今後Vpassにログインする際にパズル認証が必要になるらしいです.
メール本文には人の手によるログイン操作であることを認証するものでございますとあります.
個人的にはDr.Walletで請求額取得できなくなりそうで嫌だなぁという感じですが,果たしてパズル認証に機械的なログイン試行を防ぐ効果はあるのでしょうか.

f:id:YDKK:20170812035142p:plain

実際にログインページで使われてるパズル認証を見てみると,よく見かけるもので,調べてみるとCapy社のパズルキャプチャのようです.
このパズル認証は既にだいぶ前に突破されています*1が,今回Vpassのログイン画面で使用されているものはピースの輪郭が白で塗りつぶされており,この手法が使えないように対策してあるようです.

しかし,見ての通りピースをはめる部分の色が単色で,しかも固定という何を考えているのかよく分からない*2仕様になっています.こんなパズルでは突破手法を考えるまでもなく,単純な画像処理だけで簡単にピースをはめる部分の座標が求まります.

せっかくなので画像処理の練習がてらにコードを書いてみました.C#で適当に書いたところ,80行程度でクリップボードから張り付けた画像に対してピースをはめる部分を求めるという処理が書けました.コードはGistに置いておく*3ので気になったら見てみてください.

f:id:YDKK:20170812041518g:plain

さて,これでVpassのログイン画面に使われているパズル認証がいかに意味のない*4ものであるかが分かったと思います.また,こうしたタイプの認証は視覚障害者などに対するアクセシビリティを損なうという指摘も多数あります.

個人的には,こんな意味のないパズル認証を導入するよりも,reCAPTCHAを使うなり二段階認証を使うなりした方が,よっぽど機械的なログイン試行に対して有効で,ユーザビリティを損なわないと思います.そうしたうえで,安全なAPIを通してDr.Walletをはじめとする家計簿アプリなどが情報を取得できるような未来が来たら良いなーと思ってます.うーん,現状を鑑みるとなかなか難しそうですね.

*1:https://news.gehirn.jp/security/513/

*2:見やすさを考慮してる?

*3:https://gist.github.com/YDKK/1a3199934ca1d5f6f5c8b2bc923cf915

*4:今回は背景色を使っただけですが,仮にこれが対策されたところでエッジ検出するなりいくらでも方法はあると思います