見出し画像

ドコモ口座不正引き出し事件を見て”問題に気付ける設計”も用意したいと思った

こんにちは。てぃろです。

最近「ドコモコウザ」がバズってますね。↓ みたいな記事もたくさん出ているし、多くの銀行も巻き込まれ?ているのか大騒ぎです。

幸い私は被害にあっていないですが、自分も被害にあう可能性があると思うと怖いです。

これはユーザ視点ですが、エンジニアである以上、開発者視点でこの問題を考えてみたいと思います。

今回の問題は、口座同士が相手を盲目的に信用したことから発生した

↓ の記事が経緯も含めてすごくよくまとまってるので、細かくはこちらを参照ください。

つまりは、ドコモ口座も紐づけられる銀行口座もどちらも本人確認をするプロセスがなかった。

本人確認をするという最低限のセキュリティすら守っていなかったということです。

今回の件を擁護するつもりはないですが、今回のようにやるべきことをしていないから発生した問題というのは我々の現場でも起こりうると思っています。

人間が介在するチェックには限界がある

一例ですが、そもそもこういった問題を起こさないチェック体制やガイドラインの整備は必要だと思います。しかし、人間に頼っている限りそのチェックには限界があります。

チェックしようとすると、以下のようなプロセスを踏むことになります。

・ガイドラインとチェックリストを作る
・ガイドラインに沿って作る
・チェックリストでチェックする
・チェックに当てはまらなかったら作り直し
・再チェック

これ現場からすると、

「ガイドラインとチェックリストを誰が作って誰がチェックするねん…」

となります。

他にも、ガイドラインのチェックそのものを人間が完璧に実施できるか?といった人間の不完全さに起因する限界もあります。

このガイドラインとチェックリストがすべての品質担保を担ってしまうことになるので担当する人はすごい重責を担うことになります。専門家ではない現場のエンジニアにこれはできないので、金融分野に特化した人材が必要になります。

そんな金融分野に特化した人材が多いはずの金融機関が実は被害がありました、と報告してたりもします。

これは、隠蔽してなかったとしたら、この問題に気づいてなかったということです。怖い。隠ぺいしてても怖い。

問題が起きても、問題にいち早く気付きたい

できるかぎり問題を起きないようにするのが一番重要ですが、問題が起きても被害を最小限にすることも考えたいです

そのためにはまず、問題にいち早く気付くことが重要です

ドコモ口座の件で使われたクラッキングの手法はリバースブルートフォースアタックだったらしいです(未確定情報)。

好意的に解釈して、ユーザとして普段接するシステムであり、銀行だからしっかりしたセキュリティがある、と思い込んで疑うこともなく対策をしてなかったのかな、と思いました。

私はこんな想像力のない自分を信じずに、問題が起きてないかを自動でチェックする仕組みを用意しておきたいのです。

よくあるクラッキング手法を知り、それに対する通知の仕組みを考えたい

セキュリティに関する知見は世界的に多く溜まっています。クラッカーもそれを勉強しています。だからこそ、我々も勉強しておく必要があります。

ただ、セキュリティの専門家でもない限りすべてを勉強しきることは不可能なので、最低限これだけは押さえておきたいという例を紹介します。

・同じIPアドレスから何回もアクセスがないか?
・入力内容が規則的なアクセスがないか?
・急にアクセスが増えてないか?

1点目については、時間当たりのアクセス回数が閾値以上になれば通知する、とします。ですが、IPアドレスをランダムに変更されると対応できません。

2点目は、IPアドレスは変わっても何かしらの規則的なアクセスがある場合に気づけるようにしたいです。入力内容の規則性については、入力値に対するコサイン類似度を計算する、などでいけないでしょうかね。

3点目は、ルールでもある程度できますが、最近はAIを使った異常検知(アノーマリー検知)という手法もあります。クラッキングが始まると急にアクセスが増える、という状況を検知します。

残念ながら、これらはクラッカーも警戒するところなので、IPアドレスだけでなく、入力内容もランダムにしたり、アクセス回数を抑えたりすることで検知できなくなります。

今は、さらっと考えて出てきた一般的なものを紹介しましたが、案件として取り組むときにはもっと勉強したいところです。

クラウドサービスのチェック機能を利用するのも有効…だけど、妄信しちゃダメ

私はAWSが専門なので、それ以外は詳しくないですが、最近クラウドサービスでもセキュリティチェックのマネージドサービスが増えてきています。

AWSでいうと、Security Hubがあります。

様々なセキュリティチェックを自動でしてくれるなどの機能があります。修正は手作業です。セキュリティチェックが半自動化するわけです。

ただ、これもすべてのセキュリティを守ってくれるわけではありません。開発した中身に不具合があればアウトです。

だからこそ、プロジェクトとしては問題が起きないようチェックする体制を、開発するエンジニアとしては気づける仕組みを常に考えておきたいものです。

いつも記事を読んでいただいてありがとうございます。少しでもあなたの人生にプラスになる話ができているとうれしいです。