7Payなぜ失敗したのか、システム開発問題の深層
1. はじめに
2019年8月1日,7&Iホールディングスは緊急記者会見を行い,7月1日にリリースしたばかりのスマホ決済サービス「7Pay」を9月30日に廃止することを発表しました。このサービスは公開1日目からまもなく大量の攻撃を受け、被害が広がり、各機能を次々停止し、たった2ヶ月でサービス廃止に迫って、本年度の寿命最短のサービスになるでしょう。
7Payは150万ユーザがあり、7月31日まで808ユーザは被害され、被害金額は38,615,473円になっています。
7&Iホールディングスは8月19日以降順次にすべて全額補償します。もし皆さんは7Payを利用したことがあり、被害の疑いがあれば、24時間無料電話0120-192-044までご報告ください。
本稿は社会問題の検討ではなく、主に7Payシステムの技術やプロジェクトマネジメント等の分析から大規模プロジェクト開発において何を気をつければよいのか検討したいと思います。立場を変えてみて、我々はこのプロジェクトに参加した場合、うまく行けるのか、セキュリティ設計、フォームチェック、プロマネはどう設計するのか、さらに考えてみますと、今進行中のプロジェクトには同じような問題がないのか…
2. 7Payとは
7Payは7&Iホールディングス傘下の7Pay株式会社が開発したセブン‐イレブンコンビニで使えるスマホ決済サービスです。
SoftbankのPayPayをはじめ、100億円の返還キャンペーンは日本のスマホ決済が最高潮になりました。それから「XX Pay」サービスは雨後の筍のように、次々発表されました。例えば、LinePay、MerPay、auPay、楽天Pay、Origami Pay、pixiv Pay、Lawson Pay、FamilyPay、銀行Pay、&Pay… ポイントカードと変わらないぐらいの数です。
7-11はコンビニ業界No.1ですので、自社製スマホ決済がないとありえないです。7Payはこんな背景で生み出したものだと考えられます。
詳細を説明する前に、本稿に出てくる7Pay関連の会社名やサービス名をまとめておきます。
– 7Payは7Pay株式会社が開発したスマホ決済サービスです。
– 7Pay株式会社は7&Iホールディングス傘下の子会社です。
– よく利用されているコンビニ7-11は7&I傘下の主要事業となります。
– 7Payスマホ決済機能は7-11 APPに内蔵され、7-11全店舗に使えます。
– 7Payスマホ決済は7&Iの認証基盤7iDを利用しています。
– omni7は7&IグループのEC APP、7-11のサービス以外、西武、Loft等の会社も加盟しています。
3. 事件経過
- 7月1日
7-11 APPに決済機能追加発表、ユーザは登録後レジ、ATM、クレジットカード等でチャージできる。7-11コンビニ21,000店舗に使える。10月以降加盟店にも開放する予定だった。 - 7月2日
サービスイ稼働二日目、ユーザから「身に覚えのない請求があり、不正利用ではないか」との問合せを受けて内部調査開始。 - 7月3日
調査結果にょって大量の攻撃が発生したため、クレジットカードチャージ機能停止。 - 7月4日
7Pay小林強社長は謝罪会見を行い、午後、レジ、ATMチャージサービス全面停止、7Pay新規登録も停止。 - 7月11日
サードパーティ認証機能利用停止 - 7月30日
7&IグループECサイト共通認証基盤の“7iD”を利用している1650万ユーザのパスワードを強制リセットされた。新パスワードは少なくもと大文字、小文字1桁、数字または記号を含める9桁以上の文字列にしないといけない。 - 8月1日
7&Iホールディングスは緊急記者会見を行い、「7Payを9月30日に廃止」発表。
4. 認証問題について
専門家の説明によりますと、7Payは「リスト攻撃」を受けました。「リスト攻撃」とは事前に定義した辞書の単語やよく使われるパスワードを使って、ログインできるまで繰り返して攻撃する手法です。7月2日〜3日二日間数千万回攻撃されたそうです。
なぜこんなことが起こったのか。Omni7のパスワードリセット仕様を見てみましょう。パスワードリセットは「誕生日」と「使っているメールアドレス」しか必要がなく、登録時に誕生日デフォルト設定は「2019/1/1」になっています。誕生日を設定しないユーザのパスワードはリスト攻撃で簡易に割り出す可能性が高いです。一番致命な問題は使っているメールアドレス以外の送付先のメールアドレスも設定可能になっていました。簡単なスクリプトを作成して、パスワードリセット送付先メールを自分のメールアドレスに設定して、短期間内でも大量のユーザ名とパスワードを取れるはずです。
修正前のパスワードリセット画面は下記のようです。
7月4日,「送付先メールアドレス」項目はページから消されましたが、Chromeでデバッグモードを調べたら、CSSコードに「display:none;」を追加しただけです。ページ上は確かに表示されなくなりましたが、一般ユーザに対して意味があるかもしれませんが、システムエンジニアに対して、耳を覆って鈴を盗むと全然変わらないです。もしかして、開発チームにはベテランがいないのか、あるいは焦すぎてどうするかわからなくなってしまったのかしか考えられないです。
修正後画面デバッグモードのイメージは下記の通りです。
もちろん、今はこれらの問題全部対応されました。ご興味があれば、下記のリンクを見て本番ページの構成を調べることができます。
https://www.omni7.jp/account/OP_OSD0013_001.do
事件発覚後の1回目の記者会見の場で、「なんで二段階認証が導入されなかったか」と聞かれて、小林社長は「二段階認証」はどういうものかわからず、よく笑われましたが、実はITプロでなければ、わからない方はほとんどではないかと思います。「二段階認証」というのはパスワード入力以外、その他の操作も必要です。例えば、携帯のSNSや音声で検証コードを受信するとか、鍵ファイルを保存するUSBを挿入するとか。
5. サードパーティー認証について
7月11日にサードパーティー認証機能を停止しました、具体的にどんなセキュリティ問題があるのか報道されなかったですが、システム開発エンジニアにとって、ハッカーはサードパーティーの脆弱性を利用してどうやって攻撃するのかわからないとセキュリティ対策もできないです。「サードパーティー認証」とは、Yahoo!、Google、Facebook、Twitter、Lineなどサードの認証プラットフォームを利用してシステムにログインすることです。
7Payのサードパーティー認証設計は一般のツールを使ってID改ざんも可能です。IDはx桁数字をベースにした整数になりますので、簡易に推測できます。Omni7認証は7-11Appを経由しなくてもパソコン等からもアクセスでき、Token情報も簡易に取れます。
本稿はどんな形のハッカー行為を禁止しますので、具体的に攻撃手法を紹介しないですが、システムアーキテクチャ設計段階では様々なリスクを考慮しないといけないです。サードパーティ認証構成は下記の図に示します。
6. ソース漏洩について
7月10日までGithub上、少なくともOMNI7APPというプロジェクトがありました、両方ともiOS APPのソースです。ソースコードのコメントと処理内容から見ますと、MNNI7APPの初期バージョンではないかと考えられます。仮に2つのプロジェクトをソースAとソースBと呼びます。
ソースAは2019年7月10日前後削除されました、削除ログによりますと、ソースは2015年5月に公開され、その後誰でもダウンロード可能の状態になったかもしれません。
ソースA削除後、ソースBは一番奥深い行動が起こりました。某企業はアメリカのデジタル著作権保護法(DMCA)によってソースの版権を訴えました,GitHub側は7月18日に受理してソースBを削除しました。
申請内容は主に下記の通りです。
(1)ソースの著作権は“Seven & i Net Media Co.,Ltd.” になる。
(2)元のソースコードは7月11日に削除したが、フォークバージョンも見つかった。
(3)DMCA申請人は「N** DATA MSE」という会社である。
上記Github申請内容は重くて、本稿はさらなるコメントを控えますが、ご興味があれば、下記原文をご参照ください。
https://github.com/github/dmca/blob/master/2019/07/2019-07-18-Seven.md
もし本当にソースを漏洩しましたら、開発現場のセキュリティ管理は大問題があります。今まで開発会社を公表しなかったですが、多分複雑すぎて、責任元はどこなのかわからないはずです。
7. 仕様変更及びプロジェクトマネジメント
現場に働いているエンジニアにとって、「仕様変更」という言葉は非常に親しいと思います。どの現場、どのユーザでも、仕様変更なしのプロジェクトは非常に珍しいと思います。
メディアのインタビューによりますと、7Payの仕様はなかなか固まらなかったです。このプロジェクトは2年前からスタートして2018年末まで、7Payは単独のAPPとして開発してきましたが、2018年末開発方針が変わって、7−11APPの一部機能として組み込むとなりました。開発ベンダーも変わったそうです。システムテストは1ヶ月以上延期しましたが、7月予定通りリリースするため、テスト期間は大幅に圧縮されました。
システムエンジニアとして、おかしいと思わないかもしれませんが、こんな問題ばかりのプロジェクトは現場の雰囲気、お客さんとベンダーの関係などプロジェクトマネジメントが非常に重要です。うまくいかにと絶対失敗になってしまいます。例えば、パスワードリセット仕様問題について、単体テスト工程でも誰か気づいたでしょう。なぜかリリースまで修正しなかったのか謎ですが、エンドユーザ、請負ベンダー、派遣会社などそれぞれの問題があると思います。プロジェクト失敗原因は99%プロジェクトマネジメントにつながると思います。