在 Amazon Cognito 中開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定有什麼影響?

2 分的閱讀內容
0

我想要進一步了解 Amazon Cognito 的 Prevent User Existence Errors (防止使用者存在錯誤) 設定。

簡短描述

使用者列舉是一個 Web 應用程式弱點,惡意人士會在其中使用暴力密碼破解技術來猜測或確認系統中的有效使用者。Amazon Cognito 提供一種安全功能,可阻止惡意人士在 Amazon Cognito 使用者集區內尋找有效的使用者。此安全功能適用於發生使用者列舉的最常見區域:

  • 使用者身分驗證
  • 使用者確認
  • 密碼復原
  • 節點註冊

解決方案

使用者身分驗證

輸入不存在使用者的使用者名稱和密碼時,Amazon Cognito 會以名稱為 UserNotFoundException 的例外狀況做出回應。此使用者存在錯誤明確指出,輸入的使用者名稱不存在。根據此錯誤回應,惡意人士可執行暴力密碼攻擊,以猜測使用者集區中的有效使用者。

開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定,以便 Amazon Cognito 應用程式用戶端針對不存在使用者的登入請求傳回一般訊息。一般訊息會顯示,使用者名稱或密碼不正確。Prevent User Existence Errors (防止使用者存在錯誤) 設定可協助防範憑證猜測攻擊,因為錯誤訊息未顯示使用者存在情形。

不存在使用者登入嘗試的範例錯誤回應

以下是不存在使用者登入嘗試的範例錯誤回應。

$ aws cognito-idp initiate-auth --client-id 12ab34cd56ef78gh91ij23kl45m --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME="myuser",PASSWORD="password"

關閉 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下:「呼叫 InitiateAuth 操作時發生錯誤 (UserNotFoundException):使用者不存在。」

開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下:「呼叫 InitiateAuth 操作時發生錯誤 (NotAuthorizedException):使用者名稱或密碼不正確。」

使用者確認

若開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定,且使用者已停用或找不到,則 Amazon Cognito 會傳回 CodeDeliveryDetails。代碼傳遞詳細資訊會以模擬的傳遞媒體傳回給使用者,而不是傳回名稱為 UserNotFoundException 的例外狀況。當使用者存在於使用者集區時,Amazon Cognito 會將確認碼傳送至使用者現有的電子郵件地址或電話號碼。模擬的傳遞媒體取決於使用者名稱的輸入格式和使用者集區的驗證設定。

不存在使用者重新傳送確認碼的錯誤回應範例

以下是將確認碼重新傳送至使用者集區中不存在使用者的錯誤回應範例:

$ aws cognito-idp resend-confirmation-code --client-id 12ab34cd56ef78gh91ij23kl45m --username "myuser"

關閉 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下:「呼叫 ResendConfirmationCode 時發生錯誤 (UserNotFoundException):找不到使用者名稱/用戶端 ID 組合。」

開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下,電子郵件地址隨機,並且會模擬傳遞媒體:

{
  "CodeDeliveryDetails": {
    "Destination": "n****@g****.com",
    "DeliveryMedium": "Email",
    "AttributeName": "email"
  }
}

密碼復原

若開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定,且使用者已停用、找不到或無法復原密碼,則 Amazon Cognito 會傳回 CodeDeliveryDetails。代碼傳遞詳細資訊會向使用者提供模擬的傳遞媒體,而不是傳回名稱為 UserNotFoundException 的例外狀況。模擬的傳遞媒體取決於使用者名稱的輸入格式和使用者集區的復原設定。

藉助代碼復原詳細資料,您可以看到復原代碼已傳送至隨機模擬的電子郵件地址或電話號碼。這種模擬的傳遞媒體會讓攻擊者難以區分有效和無效的使用者。

Amazon Cognito 會在密碼重設流程中,使用模擬傳遞媒體傳回 CodeDeliveryDetails。不過,密碼重設代碼實際上並不會傳送至模擬的傳遞媒體。這是一項安全措施,可避免濫發未經驗證的電子郵件地址和電話號碼。

不存在使用者密碼復原的錯誤回應範例

以下是不存在於使用者集區的使用者密碼復原的錯誤回應範例:

$ aws cognito-idp forgot-password --client-id 12ab34cd56ef78gh91ij23kl45m --username "myuser"

關閉 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下:「呼叫 ForgotPassword operation 時發生錯誤 (UserNotFoundException):找不到使用者名稱/用戶端 ID 組合。」

開啟 Prevent User Existence Errors (防止使用者存在錯誤) 設定的情況下,電話號碼隨機,並且會模擬傳遞媒體:

{
  "CodeDeliveryDetails": {
    "Destination": "+*******0874",
    "DeliveryMedium": "SMS",
    "AttributeName": "phone_number"
  }
}

節點註冊

當使用者名稱已在使用中時,註冊操作會傳回 UsernameExistsException。若要在註冊期間防止電子郵件地址或電話號碼發生 UsernameExistsException 錯誤,請使用以驗證為基礎的別名。

當電子郵件地址或電話號碼做為已在使用中的不同帳戶的別名提供時,則會註冊成功。當使用者嘗試使用此電子郵件地址或電話號碼,以及有效的驗證碼來確認帳戶時,則會傳回 AliasExistsException 錯誤。該錯誤向使用者表明,具有此電子郵件地址或電話號碼的帳戶已存在。

由於只有在輸入有效的代碼後,才會顯示使用者存在錯誤,因此,此程序可消除惡意人士識別有效使用者的潛在風險。若要進一步了解以驗證為基礎的別名,請參閱使用者集區屬性,然後選擇 Customizing sign-in attributes (自訂登入屬性) 索引標籤。

如何修改 Amazon Cognito 中的 Prevent User Existence Errors (防止使用者存在錯誤) 設定?

請遵循下列步驟修改 Prevent User Existence Errors (防止使用者存在錯誤) 設定:

  1. 登入 Amazon Cognito 主控台
  2. 從清單中選取現有的使用者集區。
  3. 選擇 App integration (應用程式整合) 區段。
  4. App clients (應用程式用戶端) 下,從清單中選取應用程式用戶端。
  5. App client information (應用程式用戶端資訊) 區段下,選擇 Edit (編輯) 按鈕。
  6. 捲動至底部,尋找 Advanced security configurations (進階安全設定) 下的 Prevent user existence errors setting (防止使用者存在錯誤設定)。選取或清除此選項。
  7. 儲存您的變更。

如需有關錯誤回應的詳細資訊,請參閱管理錯誤回應


AWS 官方
AWS 官方已更新 1 年前