認証脆弱性


ほとんどすべてのウェブサイトがユーザーのログイン機能を持つことは非常に一般的になりました.それはブラウザのプラグインやプラグインのキャッシュとサードパーティ製の認証サービスの助けを借りて再びウェブサイトを訪問することが容易になったので、ユーザーは、電子メールやユーザー名とパスワードを2回考えずにサインアップします.
残念なことに、セキュリティ上の脅威も上昇しており、ハッカーたちが暗いウェブ上の資格情報を販売したり、ペースト・サイト上の違反データを公開したり、ハイジャック・ソーシャルメディア・アカウントをクリックしたり、資金取引を行ったりしている.
私たちは、認証がどのように働くか、攻撃者がどのようにアカウントを妥協し、どのようにそのような攻撃に対して防御するかを調べます.

認証、どのように動作しますか?


認証フレームワークはHTTPによって提供されます401 ステータスコード(不正行為を意味する)との情報を提供しますWWW-Authenticate レスポンスヘッダ.サーバーでそれ自体を認証したがっているクライアントは含めなければなりませんAuthorization 資格情報付きリクエストヘッダ.

認証の最も一般的なタイプはBasic , に含まれるAuthorization 以下のヘッダ
//syntax
Authorization: <type> <credentials>
//example
Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
その他の認証タイプはIANA registry of Authentication schemes .
インbasic 認証は、クライアントがユーザ名とパスワードをユーザーから取得し、ユーザー名を連結することによってユーザーパスを構築しますusername:password ). それから、それは八重奏系列にユーザーパスをコード化して、最終的にUS - ASCII文字のシーケンスにBase 64を使用している八重奏シーケンスをコード化します.
ユーザエージェントが「アラジン」と「パスワード」「オープンセマーム」というユーザ名を送りたいなら、以下のヘッダーフィールドを使います.
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
ユーザー名とパスワードが明確なテキスト(それはBase 64コード化されます、しかし、Base 64は可逆的な符号化)としてネットワークを通過するので、基本的な認証計画は安全ではありません.HTTPS/TLSは、基本的な認証で使用されるべきです.
詳細についてはRFC 7617 .

攻撃の種類


攻撃者が使う自動攻撃の一般的なタイプは以下の通りです.

ブルートフォースアタック


ハッカーは、パスワードを推測することによって、1つの口座に対して認証を過ぎさせようとします.これらの試みは、辞書から多数の一般的に使用されるパスワードを試して、以前のデータ違反から得られたリークされたパスワードの数百万からしようとするスクリプトを使用して成功の高いチャンスを持っています.

資格の詰め込み


攻撃のこのタイプは、別のウェブサイトの違反から得られたユーザー名とパスワードのペアをテストすることによって行われます.あなたの電子メール、電話またはパスワードがウェブサイトでデータ違反であるかどうかチェックしてくださいhaveibeenpwned.com .

パスワードスプレー


攻撃のこのタイプでは、単一の弱いパスワードは、多くの異なるアカウントに対してテストされます.

防御機構


そのような攻撃に対して保護する様々な方法を見てみましょう

パスワードを必要としない


現在、FacebookやGoogleアカウントのようなソーシャルメディアアカウントを使用して、ウェブサイトのユーザーを認証することが一般的です.これは、ユーザーがパスワードを使用したり、覚えていないと便利です.サードパーティ製のアプリは、ユーザー名/パスワードのコンボを格納するために安全であると考えられていません.これと他のユースケースの認証プロトコルは、ユーザーのデータを保護するために使用できます.例を含めるOAuth , OpenId , SAML and FIDO .
OAuthまたはOpenIDは通常、ユーザ名として個人のメールアドレスを使用する必要があります.ビジネスユーザーのためにSingle sign-on (SSO) 彼らはログインに自分のビジネスメールを使用してOkta、oneloginのようなアイデンティティプロバイダ.

自己認証システムを確保する


すべてのユーザーがFacebookやGmailや他のソーシャルメディアアカウントをログインする必要があります.それは、ウェブサイトはまだ個人の電子メールまたは第三者の認証から離れて選択とパスワードのユーザー名を使用してサインアップ、ログイン&ログアウトの通常の方法を必要とすることを意味します.独自の認証システムを実装する前に多くの考慮事項があります.

ユーザ名またはユーザID

  • それは大文字小文字を区別しないでください.すなわち、ユーザ名「ボブ」と「ボブ」は同じユーザでなければなりません.
  • それはユニークであるべきです.
  • ユーザーがパブリックプロファイルを持っているときに別の表示名を使用し、メールアドレスの使用を表示名として使用しないでください.
  • 有効なキャラクタをチェックして、トークンで検証リンクを送ることによって、電子メールアドレスを検証して、確認してください、そして、それから更なるトランザクション電子メールを送ってください.
  • 10分のメールやmailinatorのようなサービスによって生成された使い捨てメールを禁止します.
  • どんなフロントエンドユーザインタフェースにでも敏感なアカウント(例えば、DBのために使用される内部のアカウント)でログインを許しません.
  • 無担保アクセスのために内部的に使用される同じ認証ソリューション(例えば、IDP/AD)を使用しないでください
  • パスワード

  • パスワードの最小長は、アプリケーションによって強制され、8文字未満弱されていると見なされます.
  • 最大パスワード長はあまりにも低く設定されてはいけません.ユーザがパスフレーズを作成しないようにします.いくつかのハッシュのアルゴリズムの制限のために64文字に設定し、より多くのOWASP Password Storage Cheat Sheet
  • 最大パスワード長はサービスの長いパスワード拒否を防ぐために設定する必要があります.
  • ユーザーが設定したパスワードが制限を超えた場合、パスワードを切り捨てないでくださいPBKDF2 .
  • Unicodeと空白を含むすべての文字の使用を許可します.
  • パスワードが侵害されるとき、資格のある回転(変更/リセットパスワード)を許可します.パスワードのリセットのリンクは、ユーザーが使用した後または30分後に失効する必要があります.パスワードリセットメカニズムについて知っているためにOWASP Forgot Password Cheat Sheet .
  • パスワードの強さを計算するためのライブラリを使用して、選択しながら、以下の依存関係と保守性のステータスをチェックしてください.
  • 用途Pwned Passwords APIを入力するパスワードをチェックする以前に違反パスワードのリストです.
  • 再度ログインするときにユーザーを再検証するために、パスワードを安全に暗号化技術を使用してデータベースに格納する必要がありますOWASP Password Storage Cheat Sheet .
  • パスワードは、ハッシュとして格納されていません、これは良いハッシュアルゴリズムを選択する必要がありますので、攻撃者がハッシュされたパスワードを取得しても、それは永遠にクラックする(元のパスワードにハッシュを復号化することはできません).
    これらは、攻撃者がハッシュからパスワードをクラックするために使うステップです.
  • 被害者が選択したと思うパスワードを選択
  • ハッシュ計算
  • あなたが犠牲者のハッシュに計算したハッシュを比較してください.彼らがマッチするならば、あなたはハッシュを正しく「ひびをひきました」、そして、現在彼らのパスワードの平文価値を知っています.
  • 読めるpassword security requirements パスワードのセキュリティ上の問題についての詳細を知っている.

    マルチファクタ認証(MFA)、2因子認証(2 fa)を使用している


    それは安全なパスワードストレージ上のマルチファクタ認証を持つセキュリティの追加層を持っている、ブルートフォース、資格情報の詰め込み、パスワードスプレーのような攻撃に対して効果的にすることです.マイクロソフトは99.9% password compromises MFAで.それは、彼らが知っている何か、彼らが持っている何か、何か、そして、彼らの位置です.

    Google Authenatorのような多くの使用認証モバイルアプリとサインアップ中にウェブサイトと同期させることができるマイクロソフトAuthenticatorのような、そして、後で成功にログインするためにランダムなピンを生成するのに用いられることができます.
    MFAを実装する上でのガイダンスを得るにはOWASP Multi-Factor Authentication Cheat Sheet .

    CAPTCHAを実行する


    captcha(完全に自動化された公開チューリングテストコンピュータと人間を区別するために)、ユーザーは人間のための些細なが、コンピュータのトリッキーな様々な画像認識タスクを実行するようにユーザーを求めます.これは自動化されたログインしようとユーザーの攻撃を防ぐことができます(リストから各ユーザー名をテストするかどうかをあなたのウェブサイト上に存在するかどうかを確認する).
    captchasは完璧ではなく、機械学習技術を使用して攻撃者によって、またはタスクを完了する人間のユーザーを支払うことによって敗北することができますが、それはまだ最も一般的なハッキングの試みを防ぎます.
    CAPTCHAが通常のユーザにとってユーザーフレンドリーであることを確認してください🙂.

    安全なログアウト


    それは同様に、セッションのハイジャック攻撃から防ぐために、ユーザーのための安全なログアウト機能を持つことが重要です.
    ログアウト関数は、ブラウザのセッションクッキーをクリアし、サーバー側に格納している場合、セッション識別子を無効にします.これは、セッションクッキーをインターセプトし、盗まれたクッキーを使用してセッションを再確立しようとする攻撃者を保護します.セッションクッキーは、Set-Cookie 空白の値を持つヘッダExpires (またはmax age )過去からの日付(永続的なクッキーが使用されている場合)Set-Cookie: id=; Expires=Friday, 17-May-03 18:45:00 GMT .

    その他の防御


    攻撃に対して保護する他の方法は、パスワードマネージャと再認証を使用することです.
    攻撃者がセキュリティ抜け穴に方法を見つけるので、1つはそれに対して保護するより良い方法を見つけなければなりません、そして、ロギングとモニタリングを有効にすることによって、1つはリアルタイムで攻撃/失敗を見つけることができます.