読者です 読者をやめる 読者になる 読者になる

orangain flavor

じっくりコトコト煮込んだみかん2。知らないことを知りたい。

金融機関の口座集約アプリを少しでも安全にするために

security

はじめに

金融機関の口座集約アプリの危険性について - プログラマになりたい という記事が話題になっていたので、日頃からアカウント・アグリゲーション系のサービスについて考えていることをまとめておきます。

アカウント・アグリゲーション・サービスの概要

複数の銀行口座やクレジットカードなどの利用状況を一元的に管理できるサービスを、アカウント・アグリゲーション・サービス(以下アグリゲーション・サービスと表記)と言います。

アグリゲーション・サービスは昔からいろいろあります。最近は特にスマートフォン用のアプリが増えてきています。

アグリゲーション・サービスの仕組み

アグリゲーション・サービスでは、ユーザーが金融機関のWebサイトにログインするためのID・パスワードを入力すると、その情報を使って定期的にクローラーで金融機関のWebサイトにアクセスして明細情報を取得します。

元記事にあるように、サーバー側にID・パスワードを保存するものと、クライアント側にID・パスワードを保存するものの大きく2つに分けられます。

MoneyLookはクライアント側に保存しますが、多くのサービスではサーバー側に保存します。

ID・パスワードの安全性

アグリゲーション・サービスにID・パスワードを預ける場合、そのID・パスワードが流出してしまう可能性としては、以下の2つがあります。

  1. ID・パスワードを保存しているサーバーまたはクライアントが攻撃を受けた場合
  2. サービス提供者に悪意があった場合

1. 攻撃を受けた場合

この場合、クライアント側とサーバー側のどちらが安全かは一概には言えません。

ターゲットのユーザーが絞られている場合に攻撃しやすいのはクライアント側で、流出したときの影響が大きいのはサーバー側だと思います。

いずれにせよ、サービス提供者の公表しているセキュリティ対策を信じるしかありません。

2. サービス提供者に悪意があった場合

サーバー側に保存するものは、仮にサービス提供者に悪意があった場合、ID・パスワードを閲覧されてしまいます。また、クライアント側に保存する場合でも、そのアプリケーションのソースコードを見られない場合、密かにID・パスワードをサーバーに送信していても気づけません。*1

そして構造的に、サービス提供者は閲覧していないことを証明できません。詳しいユーザーにはいくら説明しても納得してもらえないので、詳しくないユーザーにいかに安全そうな印象を与えるかという勝負になってしまいます。


1, 2のいずれの問題も、結局はサービス提供者を信用するかどうかの問題になります。第三者による監査の仕組みとかあるんでしょうか。よく知りません。

ID・パスワードを渡すことのリスク

そもそも、ID・パスワードが流出するとどのような影響があるのでしょうか?


これに関しては、ID・パスワードだけで資金を移動できる金融機関がどれほどあるのかよくわかっていないので調べてみたいです。

また、ID・パスワードだけでは資金を移動できない場合でも、追加のパスワードを入力するよう求めるアグリゲーション・サービスもあるので、要調査です。


例えば、私が利用している三井住友銀行では、登録されていない口座への振込や住所変更の申し込みにはログインパスワードとは異なる第2・第3の暗証番号が必要です。 しかし、口座番号や住所、メールアドレスのような登録情報は、ID・パスワードだけで閲覧できてしまいます。

特にアグリゲーション・サービスでは、多数の金融機関の情報を入力するため、それらから収集したデータを統合すると本人確認ができてしまい、資金を移動できるかもしれません。*2

また、収集したデータから引っかかりやすいフィッシング・メールを送り、第2・第3の暗証番号を入力させることができるかもしれません。


(なお、口座残高などの資産情報やお金の使い道などの情報については、アグリゲーション・サービスだけでなく家計簿サービスや会計サービス全般の問題になるので、ここでは取り扱いません。)

金銭的被害があった場合の補償

万が一、アグリゲーション・サービスからID・パスワードが流出し、金銭的被害が発生した場合、サービス提供者が補償してくれるのでしょうか?


あるサービスの利用規約には、故意または重大な過失がない限り責任を負わないと書いてあります。また別のサービスの利用規約には、故意または重大な過失があった場合でも補償は1ヶ月分の利用料金が上限と書いてあります。

「このような対策をしてるのです安全です!使ってください!」とサービス提供者は言いますが、絶対なんてありえないことをサービス提供側はわかっています。


では、銀行が補償してくれるのでしょうか?

例えば三菱東京UFJ銀行のインターネットバンキングの利用規定には以下の記述があります。(強調は引用者によるもの)

第2条 本人確認
本サービスのご利用についてのお客さまの確認は次の方法により行うものとします。 当行はお客さまが本サービスを利用する際に、「ご契約カード」を貸与します。 「ご契約カード」には「ご契約番号」等のほかに、裏面にお客さまごとに異なった「確認番号表」を記載します。
(1) (略)
(2)「ダイレクトパスワード」もしくは「IBログインパスワード」が他人に知られた場合、ワンタイムパスワード」が他人に知られうる状態となった場合(届出Eメールアドレスにおいて受信されるメールが他人に閲覧されうる状態となった場合を含む。)またはお取引の安全性を確保するため「ダイレクトパスワード」「IBログインパスワード」の変更を行いたい場合には、 すみやかにお客さまご本人から本条第10項の方法により届け出てください。 当行はこの届け出の前に生じた損害については、当行に過失がある場合を除き、責任を負いません。

ID・パスワードをアグリゲーション・サービスに提供した時点からパスワードを変更するまでの間は、補償されないように読めます。

これは私の解釈ですので、金融機関がアグリゲーション・サービスをどのように認識しているのか、一度問い合せてみたいです。

金融機関とアグリゲーション・サービスの社会的責任

この記事は、アグリゲーション・サービスを批判したいわけではありません。 根本的な問題は、アグリゲーション・サービスを利用するために、資金移動が可能になってしまうID・パスワードを提供する必要があることです。


アグリゲーション・サービスが明細情報を収集するために必要なID・パスワードで、他のことが何もできなければ良いのです。

実際、住信SBIネット銀行などの銀行では、ログイン用のパスワードと取引用のパスワードが分かれており、アグリゲーション・サービスにはログイン用のパスワードを設定するという比較的安全な使い方ができるようです。


より理想的には、Twitterなどでも使われているOAuthを金融機関が提供することが考えられます。OAuthは、アグリゲーション・サービスのようなサードパーティのサービスにパスワードを提供することなく、必要な権限だけを与えられる仕組みです。


アグリゲーション・サービスがこのように多く出てきているのは、複数の金融機関のデータをまとめて閲覧したいというニーズがあるためです。 ニーズが存在するのにセキュアでない方法しか存在しない場合、セキュアでない方法がとられてしまうのは世の常です。

ユーザーがアグリゲーション・サービスにせっせとIDとパスワードを入力するのを眺めているのが金融機関の正義なのでしょうか? ユーザーが安全にアグリゲーション・サービスを利用出来るようにするのが金融機関の社会的責任なのではないでしょうか?


また、アグリゲーション・サービスは、金融機関のID・パスワードをユーザーに入力させることの意味を、ユーザーに正しく伝える責任があるのではないでしょうか。

現実的な落とし所

とはいえ、そう簡単にOAuthのような仕組みが実装されるとも思っていません。 かつてネット専業銀行が現れたように、OAuthのAPIを提供することで差別化する銀行とか現れないでしょうかね。 やはり、アグリゲーション・サービスで大きな問題が起きるまで現状のままなんでしょうか。


現状では、閲覧しかできない権限のパスワードが存在する金融機関を利用し、なるべく安全そうなアグリゲーション・サービスを選択するというのがベストなのかなと思います。


自分で作ることも考えましたが、ID・パスワードをいかに安全に保存し、復号化するかを考えると、あまり自信がありませんでした。

また、金融機関へのクロールは行わず、Microsoft Moneyのようにブラウザでofxファイルをダウンロードすると、その情報を集約できるみたいなことをやろうとしましたが、使うのが面倒そうなので、止まっています。

まとめ

  • あるWebサイトのID・パスワードを他のWebサイトやアプリに入力する際は、その意味をしっかり考えましょう。
  • 金融機関の皆様には、ぜひともアカウント・アグリゲーションを安心して使える仕組みを作って頂きたいです。

*1:サーバーへの通信はSSLで暗号化されているので検証は困難です。デバッガで覗けばわかるかもしれませんが、やったことありません。

*2:可能性としてあり得ると考えているだけで、具体的にどの組み合わせで流出したら可能かを例示できません