novtanの日常

ネタです。ネタなんです。マジレスする人は撲滅すべき敵です。だからネタだってば!

ねとらぼで文字起こしされたニッポン放送のドコモ口座についての放送に突っ込んどく

あまり不正確な話が流布されるのは良くないので、軽く指摘をしておきたい。

https://nlab.itmedia.co.jp/nl/articles/2009/14/news064.html

きちんと本人確認ができないまま、メールアドレスだけでお金を使える口座が開設されてしまったというところが、大きな問題点の1つです。

ドコモ口座の開設は確かにそうだけど、それだけだとお金を使える口座が開設されたわけではない

ここで問題なのは、この種の口座決済における銀行のセキュリティは「RSA方式」と言って、基本的な仕組みは1977年につくられたものなのです。

この記事の最大のツッコミどころとして散々言われていることだが、単純に誤り(RSA方式はぜんぜん違う)

40年以上前につくられたものですから、穴だらけなのです。銀行の口座番号と暗証番号、この2つが登録しているものと一致すれば、自由に自分のデータを書き換えられる。つまり預金を入金したり、出金したりすることができるという仕組みです。

作られた時期の問題はあまり関係ない。あと、通常はキャッシュカードと暗証番号で確認をする。ここを問題にするのであれば、今回のスキーム特有の問題としなければならない。
自由に自分のデータを書き換えられる、というのもあまりに雑ですね(これ出来るならみんな自分の預金を1兆円とかにするよね)

穴だらけなものですから、一定期間しか使えない暗証番号である「ワンタイムパスワード」などで補っています。しかし、それも100%の安全を確保できているわけではないのです。例えば、暗証番号は4桁ですが、番号を忘れてしまった場合に、それを解読するためのソフトウェアを我々が入手することもできるのです。

ここが一番ひどいと思う。まず、この話の持っていき方だと、ワンタイムパスワードも完璧ではない、なぜなら暗証番号4桁は解読できるからだ、となり、わけがわかりません(ワンタイムパスワードの弱点を問題視するならともかく、いきなり暗証番号の話になっている)。
で、「番号を忘れてしまった場合に、それを解読するためのソフトウェアを我々が入手することもできるのです。」ってなんだ?聞いたことないぞ(40年前ならカードの磁気に暗証番号入ってたけど、ソフトウェアって言っているからその話でもないよね)。解読するためのソフトウェアの想像がつかない。

1万回試せば暗証番号を発見できるという部分を利用して、それを解読するためのソフトウェアがあります。総当たり攻撃とも言うのですが、

これ解読じゃないよね。あと、一般的な話として「1万回試す」ことは不可能です。ロックされるからな。パスワードスプレーのことを言っているのであれば、「番号を忘れてしまった場合に、それを解読するためのソフトウェア」ではないよね。銀行の4桁暗証番号を短時間に無限回試行できる脆弱性は流石にみたことないです。

インターネットバンキングや通帳アプリを使わない人はこまめに記帳したほうが良い

togetter.com

この件だけど、一応一般的な仕組み(なので全銀行がそうなっているとは限らない)の話をしておくね。

まず、記帳されていない取引明細は、いざ通帳に記帳するってなったときのために、オンラインで処理できるところにデータをおいておく必要があります。通帳に記帳しない人が増えると、オンラインで照会できなければならない明細がどんどん増えていきますよね。でも、最近はインターネットバンキングなどですぐ明細照会できるので、通帳記帳をしない人が増えています(最近って言ってももう15年くらいの話ですが)。そもそも、インターネットバンキングなどで見れる明細(=窓口で普通の操作で見れる明細)は直近数ヶ月、ということが多いと思います。何千万口座も持っているメガバンクやゆうちょは特にですが、地銀であっても全口座の取引明細を全部オンラインで見えるところにおいておくのは処理の負荷も高いしデータ保持のコストも大きくなります。でも記帳データは通帳記帳しようとするときには無いといけませんから、未記帳明細が増えるのはよろしくないわけです。オンラインから消せないので。

ということで、こりゃもうあかんとなったら(大抵は件数トリガーかと思いますが)未記帳分としておまとめして記帳データとしてシュリンクしちゃうわけですね。

ただ、これはあくまで記帳データをやっつけただけであって、通常のオンライン過去データも含めて取引明細自体は銀行の義務として長期間保管しています。大抵の場合、勘定系ではなくて情報系システムに退避されています。こちらの照会には手間がかかりますので、明細を出力せよって言うとお金かかるかもしれませんね(多分、「ドコモコウザ」があるかどうかを聞くならタダってことがほとんどかと思いますが)。

なんでそんなことするんだって言われるかもしれませんけど、何事にもコストかかりますので、全明細とっとけってなったらATMの手数料が5倍位にはなるかもしれませんね。こういうの、後から気にする人ほど自分の行動としてはちゃんとやってない(ここでいうと、記帳をしてない)んですよね…

ドコモ口座の問題に対するドコモの会見はクソだったけど次は銀行の番じゃないですかね?

僕の最近のトレンドは「フロント側の企業を信用するな」ですね。ヤのつく人たちの話ではないですよ(似たようなもんな気がしなくもない)。

今までのシステムが信頼ベースで成り立っていたのは、なんだかんだ言ってその信頼を担保するための手段(あっち側での確認であったり、ちゃんとわかってて偽造したとかじゃない限り手間に見合ったリターンがない印影だったり、そもそも手続きに時間がかかること自体がセキュリティーだったり)があってこそなんですよね。だから、「システムで接続する」場合に責任を取れる自社内でのことであればともかく、相手先のシステムが脆弱であった場合に起きる問題はすべてリスクとして捉えて対応をしなければならない。

だから、Web口振受付の「本人認証」の問題はあまりにも甘すぎる、というのが妥当な評価だと思いますね。事情があってこれしかできない?じゃあやるな(断罪する音)。

もう一度、本人確認

犯罪収益移転防止法(犯収法)というのは国際的な動きを受けた国内法ですが、いずれにしても国際的にも基準があるものであり、それにそってないと著しく不利になりますので必要最低限の対応がどんどん追加されては行きますね。日本は現金天国であり、ATMで現金だけ振込ができた時代ももう懐かしい感じですがまだまだ現金の流通が盛んですね。今回の話もある意味「ATMで現金で降ろせる」という日本の事情が悪さをしているとすら言って良いと思います。だって電子マネーの現金化なんて要らんじゃない。まあ、これは個人間送金のニーズに起因しているサービスであって、ちょっとの手数料(まあアレをちょっとと云うのも良くないですが)を払わないために信用のおけないサービスを使う気がしれない、というのが個人的な感想ではあります。
さて、本人確認です。これは僕は専門ではない分野なので、あまり詳しいことは書けませんが、一般的には住所、電話番号とそれを所有していることが認められる手段で確認しますよね。一番簡単なのは写真付き身分証明書で、これはほぼ運転免許証かマイナンバーカード(New!)を指します。それ以外のものだと複数別種のものが必要とかそうなりますけど、単に種類だけの話であれば偽造を頑張れば良いので検証するの難しいですよね。この辺どのような処理になっているのかは気になります。で、窓口だったらそれで良いんですが、オンライン手続きだとそうはいきません。よくある口座開設の申込みなんかは免許証写真で撮って送るみたいなことやりますよね。これも偽造がーとかいう話ありますけど、そもそも窓口の人が偽造免許証ぱっと見抜けるかというとそうでもないと思うので、そのあたりはどう考えているんだろうか。最近流行りのe-KYCだとくるくる写真を取らされますね。
ただ、やっぱり口座開設(もっというと、CIF開設)時のチェックってのは厳しいわけです。逆に、一度開設できてしまえばその顧客情報を登録できるので次からはその顧客情報の持ち主であることを検証していけばよいわけですね。この「銀行内に持っている情報との突合」のことも一般的には本人確認と言われています。登録時の確認と、同一性の確認は本質的には違うよってのはわかったと思いますが。
身もふたもないことを言うと、ATMでのキャッシュカードで暗証番号ってのは本人を確認しているわけではないですよね。あくまで、そのカードの所有者しか知り得ないことを知っていることにより取引の許可を与える、ということをしているに過ぎません。別に氏名とか聞かれないし。だから、代理で行って取引をすることもできるし、それだけでしょっぴかれたりもしません。言ってみれば、取引時の確認ってのは本人ではなく、本人の秘密を知っているかを確認しているわけですね。物理カードを持っていて本人の秘密を知っている。よし通れ!。話がそれましたね。

じゃあ、オンラインではそれをどのように確認するんでしょうか。一般的な手段としてはやはりインターネットバンキングのアカウントを作成することです。オンラインで取引するのにインターネットバンキングが使えないリテラシーじゃ困りますからね(これ、重要なこと)。もちろん、これは非常に重要な情報になりますから、厳密に本人のみに渡さないといけません。ここで言う本人も「口座を開設した人」であることの証明をするわけですね。もっとも、一度開設されていれば住所や電話番号が銀行側に登録されていますから、書留で送る、電話で認証するなどの手段でかなり安全に情報の受け渡しができます。で、フィッシングに引っかかる、と(リテラシーはどこへ)。まあフィッシングばっかりは銀行ではどうにもならん。

でも、インターネットバンキングのアカウント開設って時間がかかるんですよね(時間がかからないで使えるようになるところがあるって?それってもしかして…)。あと、相応のウェブリテラシーがないと使えない。なので、実は結構ハードル高いんですよね。今すぐチャージしたいのにまずインターネットバンキングのアカウント開設から。これはビジネスチャンスがどっかに飛んでいきますよね…

銀行ごとの事情

というわけで、一部の銀行のWeb口振システムはインターネットバンキングのアカウントを前提としない方式をとることになりました(そういう経緯があるかは全然知らないが)。ここまでの話が正しいかどうかはわかりませんけど、正しいとすると、おおよそこれは「リテラシーが低くて使えないか、そこまでのニーズを持っていなくてインターネットバンキングを使っていない人」をターゲットにしたシステムと言えます。逆に言うと、せっかくインターネットバンキングに登録している人も、その低レベルの人達に巻き込まれている、と言って良いでしょう。この点に限って言うとほにゃららネット銀行とかは相対的に安全ですよね。何しろ絶対にインターネットバンキングのアカウント持ってますからね…

そこから、銀行ごとの特段の事情(預金者の層や自行システムの歴史的経緯による制約)が出てきます。なにぶん、ホスト側がちゃんとしている銀行ほどこの手の話に弱いという事があって、元々いろんな制約でガチガチになっている結果として、抜け道がこれしかない、みたいなことがありそうです。追加の認証項目もそういったシステムの制約を受けます。最終記帳残高は良いアイディアですが、ずっと記帳をサボっておまとめ記帳になっている人が使えない、とかの制約があるとしたら、ウェブでなにかやりたい層の人がちゃんと記帳しているだろうか、いや、してない。生年月日はないよりマシだがそれでなんかやった気になるのはちょっとおかしい。結局、ろくな選択肢がなかった、という銀行もあったかと思います。じゃあ作れよ(でも金が)じゃあやるなよ!!!

これ、ビジネスとシステム戦ったんだろうな…戦ってなかったらダメだな…

ドコモはともかく(現実はともかくではなかった!)、なんとかPayに対してそんな態度で望んでよいのだろうか。そういう議論はあったと思います。ドコモはともかく(現実は!)。
ただ、大半の場合、預金口座に始まり預金口座に終わる。出金口座の身元が押さえられれば現金をさらわれることはないはず…ショッピング?知らねーよ店舗でバレんだろ(雑)。
まさかATMで直に出勤できるとはね(さすが現金大国)。

フロントエンドを信用しないのが銀行のスタンスであるべき

これから取引系APIも出てくると思うんですが、欧州で盛んに議論されているセキュリティー基準をベースに日本でも考えていく、というのが基本姿勢になりますし、そのあたりの厳密性を守れるのであれば今やっているような仕組みよりは遥かにセキュアなシステムになっていくと思います。その点でいうとまず最初の砦である、APIの実行を認可する銀行側の認証処理がとても重要だ、ということですし、取引時の認証もOTPなどをきちんと使ったものにするべきだし、そのあたりの煩わしさを解消するのは手段を緩めるのではなく、テクノロジー(FIDOなど信頼できるデバイス側に寄せていく仕組み)でカバーすべきことだと思います。Web口振受付の仕組み自体は悪いものではないと思うし、今回の問題の原因は銀行側のリスク評価が甘かった点がまず問題なんですよね。クソなシステムには使わせないってのはもちろんそうだけど、界隈を見ていると例えば連携先がヤのつくところののフロント企業(の息のかかった会社)に買収されたみたいなケースまで想定しておくべきだろうなって思っちゃいますね。もちろん、そうじゃなくても完璧なシステムなどないので、おかしなことが起きる可能性もあります。そうすると、接続先がどんなに信頼すべき相手であっても一定の防御はしておくべきですし、それでも今の仕組みを維持したいのであれば、速やかにユーザー保護をする方針で行くべきなんですよね(でも、それをすればよいというのは犯収法からするとNGですよね)。

本人確認という最初の砦(しかもその先に壁すらない…)が簡単に破られるようじゃ、お先真っ暗です。

もうちょい補足

今回の攻撃手法について当初から言われていたのはリバースブルートフォースなんだけど、それは別に確定事項ではないんだよね。(銀行側サイトに遷移する際に改ざんが可能でなければ)ドコモ口座と銀行口座で名義を合わせたアカウントを用意する必要があるので、そのアカウントごとに数少ない攻撃機会(回数)を狙う、というのは非常に効率が悪い。であるならば、暗証番号はある程度決め打ち(生年月日、電話番号下4桁、よく使われがちな4桁)したり(まあこれもリバースブルートフォースではある)、フィッシングサイトで入手したり、という可能性はあるだろうね。ただここは確定的な情報は掴めないでしょうね。検証するすべとしてはこれまでエラーになったログを分析することでわかるくらい(ただ、それができるなら結構な確度でどの方向性での攻撃なのかは判別できると思う。これは銀行側でやるべきですよね)。
で、問題なのは、「ウェブでもキャッシュカード暗証番号を入れさせることがある」という一般認識がWeb口振受付使用者の間で広がったり、銀行のヘルプページに乗ったりすることで、フィッシングサイトを怪しく思わなくなる人が一定量出てくる可能性だね。そう考えるとキャッシュカード暗証番号を入れさせるのであれば、それ以外の追加の項目が相応の強度を持っていることを徹底しないといけない。まあ、キャッシュカード暗証番号は原則使うのやっぱりダメだと思うけど。