問題
シェフから、2要素認証を1つのWebサービスに関連付けるように求められました。 ユーザーは長い間ユーザー名とパスワードでログインしており、SMS経由でログインの確認を追加する必要がありました。 ネットワークには適切な既製のソリューションがなかったため、自分で行う必要があります。 しかし、私はここで何ができますか、夜までにすべてがなります! 一般に、3日後、ログインフォームは携帯電話番号を要求し、SMSからコードを入力する必要がありました。 SMSは、多くのSMSプロバイダーのいずれかのAPIを介してわずかなお金で送信されました。
すぐに、ソリューションはファイルの助けを借りてPHPの別のWeb管理パネルに転送されました。 数週間後、SMSに大きな遅延が発生したか、まったく発生しなかったという不満が多くなりました。 メッセージングゲートウェイを変更することにしました。 当然、両方のサービスで。 長い間役に立たなかったため、バックアップ送信チャネルが必要であることが明らかになりました。 それでもう1日か2日過ごした。 次に、数か月後、サービスの1つで、攻撃者はSMSプロバイダーのアカウントにあるすべてのお金をクリックしました。 システムをもう少し複雑にし、ソリューションを複製する必要がありました。 次の障害は、モバイルオペレーターが送信者フィールドの内容に関するSMSメッセージを送信するための新しいルールに切り替えたときに発生しました。 同時に、オフィスの2人の同僚が、2つの異なる非常に大きな銀行のクライアントバンクに入るためのSMSを受信しなかったことが偶然発見されました。 それが明らかになりました-それに耐えるのに十分な、世界はSMSを介した二要素認証のための普遍的なソリューションを必要としています!
問題の声明
SMSを介して、非常に普遍的で信頼性の高い2要素認証モジュールを作成することが決定されました。 スタートアップを長く生きてください!
移植性とセキュリティを確保するために、SMS送信サーバーとJavaScriptで取り出すことができるすべてのものが決定されているため、サイトサーバーでのコードはできる限り少なくなっています。 熟考した後、これがアーキテクチャです。
サイトサーバーは、2要素認証に接続する前にログインとパスワードのみをチェックすることが理解されています。 接続後、彼らはSMS経由で認証サーバーからログイン、パスワード、承認を確認します。 この場合、SMSを介した認証サーバーはサイトとその電話のユーザーIDを保存し、ログインとパスワードは不明のままになります。
サイトから許可サーバーへの要求は、ユーザーのブラウザーを通過します。 サイトサーバーはSMSの概念から完全に抽象化されており、承認サーバーからの承認のみを受け取ります。 サイトサーバーは、SMSによる確認の要求でCookieを設定します。 JavaScriptはこのCookieを検出し、AJAXを介してSMS送信サーバーとの対話を開始します。 Cookieを使用して、SMS検証の成功に関するメッセージもサイトサーバーに送信されます。 サイトは、正しいログイン、パスワード、およびCookieがSMS経由で認証サーバーからの確認とともに送信されたときに認証を行います。
安全性
サイトと許可サーバー間の要求は、ユーザーのブラウザーを通過します。 彼がそれらを置き換えることができないように、両方のサーバーが知っているがブラウザが知らないキーで各リクエストに署名します。 サーバー間で送信されるデータパケットの有効期限も割り当てます。 このような制限の後、ブラウザが完全に危険にさらされた後にできる最大のことは、認可サーバーからのログイン、パスワード、および承認を傍受することです。 これにより、別のコンピューターから攻撃されたサイトに同時に入ることができます。 この場合の攻撃者はより簡単にセッションを開始できると想定されています!
承認サーバーが侵害された場合、攻撃者はユーザーの電話番号を認識し、承認サーバーからの回答を偽造できるようになります。 ただし、サイトのアカウントにアクセスするにはこれだけでは不十分です。認証サーバーにないログインとパスワードを知る必要があります。
ブラウザと認可サーバーはhttps経由でAJAXを介して通信し、データの傍受には問題があります。 サイトの認証フォームがHTTPS経由でも機能する場合、ここで攻撃することは困難です。そうしないと、2要素認証は単純なセッション窃盗からは助けになりません。
要するに、二要素認証を編成するこのアプローチは、混乱しているように見えますが、非常に安全なものの印象を与えます。
何をする
実際には、それをmagiclogin.ruで見たりダウンロードしたりできます。
現時点では、SMSを介した2要素認証モジュールは動作状態になり、複数のサイトで機能します。
- サイトサーバーへのインストール用にPHPクラスが記述されています。詳細なインストール手順があります。
- 「SMSからコードを入力」インターフェースは、JavaScriptから生成されるモーダルウィンドウとして実装されます。
- IE 7以降、最新のChrome、Firefox、Opera、Safari、Androidのサポート。
- ユーザーは電話番号を変更できます。
- ユーザーが二要素認証を拒否できるようにすることができます。
- 統計と支払いを表示するための管理パネルがあります。
即時計画
- メインのPHPエンジン用のプラグインを作成します。
- C#、Java、Pythonでサイトサーバーのクラスを作成したいと思います。
- モーダルウィンドウのカラースキームのデザイナーを作成します。
機能に関する提案がある場合は、コメントで登録解除してください。