11 điểm bởi GN⁺ 2025-08-08 | 3 bình luận | Chia sẻ qua WhatsApp
  • Gần đây, nhiều dịch vụ đã áp dụng phương thức đăng nhập bằng mã 6 chữ số dựa trên email hoặc số điện thoại
    • Nhập email/số điện thoại, hệ thống sẽ gửi mã xác thực 6 chữ số, rồi nhập mã đó để đăng nhập
  • Cách này gây ra lỗ hổng nghiêm trọng đối với bảo mật tài khoản
    • Kẻ tấn công chỉ cần nhập địa chỉ email của người khác vào một dịch vụ hợp pháp để yêu cầu gửi mã xác thực
    • Người dùng khó biết liệu mã xác thực nhận được có thực sự được dùng trong một tình huống chính đáng hay không, hay đó là một nỗ lực lừa đảo
    • Các công cụ chống phishing hiện có như password manager (trình quản lý mật khẩu) không còn phát huy hiệu quả
  • Trên thực tế, phương thức mã xác thực này liên tục bị lạm dụng
    • Ngay cả đăng nhập tài khoản Minecraft do Microsoft vận hành cũng sử dụng cách tương tự
    • Nhiều trường hợp đánh cắp tài khoản đã được báo cáo trên Reddit, YouTube và nhiều cộng đồng, nền tảng truyền thông trực tuyến khác

Kết luận

Phương thức xác thực qua email bằng mã 6 chữ số là một cách dễ tổn thương hơn dự kiến về mặt bảo mật

  • So với cách dùng mật khẩu truyền thống, nguy cơ phishing thậm chí tăng lên đáng kể
  • Dù được đưa vào để cải thiện trải nghiệm người dùng hoặc tăng bảo mật, cách làm này trên thực tế có thể dẫn đến kết quả tệ hơn

3 bình luận

 
roxie 2025-08-14

Tôi không thấy quá đồng cảm, vì có vẻ đây là một mẹo chỉ hiệu quả trong những tình huống rất cụ thể.

 
yinn27 2025-08-08

Chắc dùng passkey rồi mà làm mất thiết bị thì thật sự sẽ rất khó xử...

 
GN⁺ 2025-08-08
Ý kiến trên Hacker News
  • Mô hình tấn công diễn ra như sau
    1) Người dùng đăng ký vào một trang web lừa đảo
    2) Trang đó hướng dẫn rằng “mã đăng nhập đã được gửi từ trang GOOD đến email của bạn, hãy nhập vào”
    3) Trang lừa đảo khởi động luồng “đăng nhập bằng mã dùng một lần qua email” trên trang GOOD bằng email của người dùng
    4) Trang GOOD gửi mã đăng nhập cho người dùng qua email
    5) Người dùng thấy email đến từ GOOD nên tin tưởng và nhập mã đó
    6) Người dùng nhập mã vào trang lừa đảo
    7) Trang lừa đảo dùng mã đó để đăng nhập vào trang GOOD như thể là người dùng
    Vì lý do này, phương thức xác thực “gửi mã dùng một lần qua email” rất dễ bị tấn công phishing
    Cách “bấm vào liên kết trong email” có khá hơn một chút, vì người dùng sẽ đi thẳng đến trang GOOD và việc sao chép/dán liên kết đó sang trang lừa đảo vừa bất tiện hơn vừa đáng ngờ hơn
    Tuy vậy, nếu một dịch vụ email phổ biến nào đó đột ngột bắt đầu chặn email đăng nhập hoặc chính các liên kết đó, thì rất nhiều người dùng có thể sẽ không đăng nhập được luôn
    Passkey là cách làm đúng đắn nhất
    Khả năng hỗ trợ passkey của các password manager đang ngày càng tốt hơn
    Ngay cả khi làm mất thiết bị lưu passkey và mất toàn bộ passkey, tôi vẫn tin là nó an toàn hơn rất nhiều so với cơ chế mật khẩu truyền thống
    Việc bà tôi phải đến ngân hàng để lấy lại quyền truy cập tài khoản vẫn còn tốt hơn là để ai đó dùng phishing cuỗm sạch tiền của bà

    • Vấn đề của passkey phức tạp hơn chuyện “mất thiết bị thì mất quyền truy cập” rất nhiều (tùy cấu hình mà vẫn có cách xử lý khi mất thiết bị)
      Vấn đề lớn nhất là Attestation
      Nó cho phép dịch vụ chặn những người dùng công cụ giúp tăng quyền tự do cho người dùng (ví dụ: giải pháp xác thực mã nguồn mở)
      Passkey hay các giao thức challenge-response vốn có thể là một cải tiến cực lớn để thay thế mật khẩu
      Nhưng thực tế lại được thiết kế theo hướng chỉ làm hệ thống thống trị của BigTech vững chắc hơn và giảm tự do của người dùng

    • Về ý “bà phải đến ngân hàng để khôi phục tài khoản còn tốt hơn”
      Hãy nghĩ xem sẽ thế nào nếu bị dí súng uy hiếp để mở khóa tài khoản cưỡng bức rồi vét sạch tiền
      Ở quốc gia thế giới thứ ba nơi tôi sống, nạn cướp điện thoại thông minh nghiêm trọng đến mức ngay cả 2FA cũng không khả thi trong thực tế
      Tôi từng khôi phục 2FA một lần rồi, đúng là ác mộng
      Còn mật khẩu thì ở đâu tôi cũng chỉ cần vào Bitwarden là xong

    • Tôi đã thiết lập passkey cho github và xác nhận nó được lưu trong Chrome
      Khi thử đăng nhập github bằng passkey, Chrome hiện popup yêu cầu nhập mã PIN của Google Password Manager
      Tôi không biết mã PIN đó là gì, cũng không tìm được cách đặt lại
      Không có chỗ nào trong hồ sơ Google, Password Manager hay cài đặt bảo mật giải thích gì về mã PIN này

    • Về ý kiến cho rằng bà đến ngân hàng để khôi phục tài khoản là ổn
      Tôi có thể trực tiếp đến ngân hàng hoặc bộ phận IT helpdesk của công ty để khôi phục tài khoản,
      nhưng tôi không thể đến trụ sở của Google, Facebook hay Xitter để làm điều tương tự
      Passkey gắn chặt với thiết bị rất dễ phát sinh lỗi trong các trường hợp như vậy
      Đa số người dùng không tính đến những tình huống này

    • Chỉ passkey thôi là chưa đủ
      Ý là đừng lặp lại những sai lầm cũ
      Password manager phải là nền tảng mặc định, và chỉ trong những trường hợp thật sự ngoại lệ (ví dụ: tài khoản email, tài khoản tài chính...) mới nên dùng MFA chuyên dụng
      Tôi nghĩ khi cấu hình MFA thì nên bắt buộc thiết lập ít nhất 3 cách và phải dùng được từ 2 cách trở lên
      Nếu không hỗ trợ hầu như mọi phương thức như mã in ra giấy, ứng dụng xác thực độc lập với hệ điều hành, khóa phần cứng như yubikey..., thì MFA đó không đáng dùng

  • Tôi nhận email thông báo yêu cầu đặt lại mật khẩu tài khoản Microsoft bốn lần mỗi ngày
    Đó là email có mã số 6 chữ số, dùng để khôi phục tài khoản
    Nghĩa là rốt cuộc kẻ tấn công có thể thử chiếm tài khoản của tôi 4 lần mỗi ngày với xác suất 1 phần 1 triệu cho mỗi lần
    Nếu làm vậy với hàng nghìn tài khoản, thì mỗi ngày chúng có thể đột nhập được miễn phí vào một số tài khoản
    Tôi còn gửi cả báo cáo bảo mật về chuyện này, nhưng họ từ chối xử lý với lý do chưa đủ chứng minh đây là lỗ hổng về mặt toán học
    Cách duy nhất còn lại là tiếp tục chịu spam và cầu mong tài khoản không bị cướp

    • Tôi đã giải quyết bằng cách thêm một bí danh đăng nhập (alias)
      Khi đăng nhập, email tài khoản cũ (email công khai) sẽ bị chặn, và chỉ có thể đăng nhập bằng bí danh là một chuỗi ngẫu nhiên không công khai
      Từ sau đó không còn một lần thử đăng nhập từ bên ngoài nào nữa
      [Cách thiết lập: account.microsoft.com > Thông tin của bạn > Tùy chọn đăng nhập > Thêm email > Thêm bí danh rồi đặt làm mặc định > trong tùy chọn đăng nhập chọn chỉ cho phép bí danh]

    • Tôi cũng gặp y hệt
      Tôi đoán có lẽ là di chứng từ hồi phải dùng Microsoft Teams

    • Nếu kẻ tấn công dùng cách này với 125.000 tài khoản, thì trung bình mỗi ngày có thể trúng một tài khoản
      Nếu không nhắm vào tài khoản cụ thể mà quét toàn bộ, thì hiệu quả theo thời gian là khá ổn
      Muốn giải quyết vấn đề này thì thay vì giới hạn cố định 4 lần thử, phải áp dụng exponential backoff, tức là tăng thời gian chờ sau mỗi lần thất bại

    • Tôi cũng liên tục nhận thông báo tương tự từ tài khoản Instagram cũ
      “Bạn gặp sự cố khi đăng nhập à? Hãy bấm vào đây để đổi mật khẩu!”

    • Điều tương tự cũng xảy ra với một tài khoản cũ vô dụng
      Khi xem địa chỉ IP đã thử đăng nhập, tôi thấy chúng đến từ nhiều ISP trên khắp thế giới, đa số thuộc các mạng /16 khác nhau
      Thấy chúng còn huy động cả botnet cho một tài khoản “vô dụng” như vậy thì tôi càng lo những người đang bị đe dọa thực sự sẽ còn nghiêm trọng tới mức nào
      Sau khi thêm 2FA thì vấn đề biến mất hoàn toàn
      Đến giờ tôi vẫn không hiểu ban đầu chúng tìm ra luồng đăng nhập bằng mã 6 chữ số đó bằng cách nào (vì với tôi lần nào cũng chỉ nhập mật khẩu rồi đăng nhập thẳng)
      Dù sao thì sau khi thêm 2FA, tôi không còn thấy thêm lần thử nào nữa
      Mã 2FA của tôi cũng được lưu trong password manager
      Tôi hài lòng vì giờ chúng không thể tiếp tục tấn công kiểu “xổ số mật khẩu” 6 chữ số tự động của Microsoft nữa (mà thậm chí còn chỉ là số, không phải cả chữ cái!)

  • Điều tệ nhất là kiểu xác thực này còn làm thói quen và kỳ vọng của người dùng xấu đi
    Nếu dùng password manager hiện đại như 1password, thì nó dễ hơn, an toàn hơn và nhanh hơn nhiều so với kiểu token email
    Chỉ cần cẩn thận một chút ở khâu thiết lập ban đầu và xác minh trên vài thiết bị
    Tôi nghĩ cũng giống như khi mới chuyển nhà và đi sao chìa khóa cửa, bạn chỉ yên tâm sau khi đã lưu vào password manager rồi xác nhận nó đồng bộ sang các thiết bị khác
    Con người hoàn toàn làm được điều đó
    Không cần hiểu mã hóa hay 2FA là gì, chỉ cần bấm “tạo mật khẩu mới” và dùng mật khẩu ngẫu nhiên mà ứng dụng lưu giúp
    Passkey cũng vậy, chỉ là nơi lưu không nên là bộ nhớ gắn sẵn trong thiết bị mà phải tính đến sao lưu/khôi phục
    Trớ trêu là cách cũ (nhập email và mật khẩu) lại còn hoạt động tốt hơn
    Vì password manager sẽ tự động điền ngay, nên thực tế còn nhanh hơn nhiều
    Passkey thậm chí có thể còn nhanh hơn nữa

    • Chỉ cần để ý một chút thôi, nhưng cái “một chút” đó lại là rào cản quá lớn và quá nặng với phần lớn mọi người
      Tôi cũng thấy bực, nhưng khoảng 80% những người không làm IT quanh tôi gần như mù tịt về bảo mật và có vẻ đã buông xuôi
      Trường hợp thành công nhất mà tôi từng thấy là họ chép hẳn thông tin tài khoản vào một cuốn sổ nhỏ, và mật khẩu thì ít nhất phải có cả số lẫn chữ
  • Tôi hiểu vấn đề của luồng này
    Nhưng theo trải nghiệm của tôi, kiểu mật khẩu dùng một lần này là hình thức xác thực quen thuộc nhất với những người không làm IT quanh tôi, chỉ sau mật khẩu
    Ít nhất ở thị trấn nhỏ nơi tôi sống, password manager hay passkey còn khó hiểu hơn nhiều, và dù có ngồi giải thích trực tiếp cách dùng trước mặt họ thì cũng không đời nào giúp họ hiểu được
    Mô hình nhận thức quá xa lạ, còn UX thì quá phức tạp nên họ không thể hiểu nổi
    Cho đến khi có thứ gì đó mà số đông có thể hiểu một cách trực quan, tôi nghĩ mật khẩu và kiểu mã dùng một lần “đầy vấn đề” này vẫn sẽ tiếp tục thống trị vì tính đơn giản của nó

    • Tôi thì nghĩ cứ tiếp tục dùng mật khẩu là được
  • Ngay cả khi dùng mật khẩu tử tế, cách khôi phục tài khoản khi “quên mật khẩu” vẫn thường là cùng một kiểu mã dùng một lần như thế
    Cuối cùng, kẻ tấn công chỉ cần hành xử như thể “quên mật khẩu” là có thể đăng nhập qua luồng khôi phục đó
    Tôi cũng dùng đăng nhập kiểu mã dùng một lần cho dịch vụ mình làm
    Nhưng đó là dịch vụ không nhạy cảm, nên mục đích không phải là siết xác thực thật chặt
    Tôi còn gọi nó là ICGAFAS (“I Couldn't Give A Factor” Auth System), tức là ngay từ đầu đã thể hiện rõ mình không quá quan tâm đến bảo mật
    Xác thực qua email cũng khiến phía quản trị phải lo thêm đủ thứ như chuyện gửi/phát SMTP
    Rốt cuộc, để tránh bị vào blacklist hay dính bộ lọc spam, thực tế vẫn phải dùng dịch vụ relay của bên thứ ba

    • Dù có mật khẩu tử tế đi nữa thì phần lớn luồng khôi phục tài khoản vẫn là kiểu mã dùng một lần này, nên rốt cuộc chính nó trở thành “mắt xích yếu nhất”
  • Tôi cực kỳ khó chịu khi đa số dịch vụ ép dùng kiểu mã dùng một lần này thay vì email+PW hay social login truyền thống
    Cứ để tôi dùng mật khẩu dài 100 ký tự của mình đi

    • Bạn không phải nhóm người dùng mục tiêu
      Ngược lại, bạn thuộc về một thiểu số rất khác biệt
      Về lâu dài, cần nghĩ tới giải pháp có thể kết nối với “đa số”

    • Tôi cho rằng mật khẩu dài như 100 ký tự không có nhiều ý nghĩa
      Nó sẽ bị cắt ngắn tùy theo độ dài khóa thực sự được dùng ở lớp mã hóa bên dưới

  • Tôi đã kiểm tra xem tài liệu NIST (NIST 800-63b section 5.1.2.1) có chính thức cho phép kiểu xác thực này không
    Nếu xem nó là “Look-up Secret Authenticator” thì không có vấn đề gì đặc biệt
    Chỉ là đang lạm dụng một cơ chế vốn dành cho các mã xác thực được cấp phát trước (như mã khôi phục) để dùng theo thời gian thực và chỉ với một lựa chọn duy nhất
    Tôi cho rằng nó dễ bị phishing, nhưng cũng khó khẳng định dứt khoát là nó nguy hiểm hơn kiểu username/password truyền thống
    Ví dụ, nếu yêu cầu mã 6 chữ số gửi vào email của người dùng rồi bảo nhập lại, thì người dùng không thể phân biệt đó là mã thật hay mã giả
    Tuy nhiên, kẻ tấn công cũng có thể dựng một trang nhìn rất giống Google Account để lừa người dùng và đánh cắp thông tin
    Rốt cuộc, tôi vẫn nghĩ chỉ có xác thực kháng phishing mới là tương lai thực sự

  • Lý do tôi phải xóa tài khoản gofundme là vì hôm nay đột nhiên bị kéo vào đúng cái vòng xác thực kiểu này
    Tôi đã dùng tài khoản nhiều năm và cũng từng ủng hộ, nhưng giờ họ bắt buộc phải có số điện thoại và mã MFA mà không cho từ chối
    Cuối cùng tôi làm xong mọi thủ tục rồi vô hiệu hóa luôn tài khoản
    Tôi thấy kiểu xác thực này là thứ không cần thiết trong đời sống, không có gofundme tôi vẫn sống được
    Dạo này tôi đang tìm nhà, và ứng dụng Zillow cũng y hệt, cũng bắt đăng nhập, mà để đọc tin nhắn nhận được thì lần nào cũng đòi MFA
    Chỉ một tiếng là phiên làm việc hết hạn
    Tôi phát ngán kiểu xác thực này rồi
    Đúng là thế giới điên rồ

    • Ticketmaster cũng làm kiểu tương tự
      Họ không chấp nhận số Google Voice mà chỉ yêu cầu số gắn với SIM
      Số SIM của tôi chỉ là một “chi tiết triển khai” hay thay đổi, thế mà giờ không có số đó thì không thể đăng nhập tài khoản
      Kết quả là hoặc phải bỏ luôn kiểu mua vé đó, hoặc chấp nhận nguy cơ bị khóa tài khoản mỗi lần đổi SIM

    • Google đã tự bật 2FA trên tài khoản của tôi, mà số điện thoại đăng ký trong tài khoản lại là số cũ nên bây giờ tôi bị khóa tài khoản hoàn toàn

  • Khi dịch vụ tự ý thay đổi mật khẩu và xác thực lớp hai mà không báo trước, nếu bạn đang đi du lịch và không có chiếc điện thoại gắn với tài khoản, bạn có thể bị mất quyền truy cập mãi mãi
    Phần lớn dịch vụ coi xác thực lớp hai an toàn hơn mật khẩu ngẫu nhiên 20 ký tự của tôi (được lưu trong password manager cục bộ)
    Nhưng cái gọi là xác thực lớp hai đó rốt cuộc cũng chỉ là những thứ tầm thường như gửi SMS dạng văn bản thuần hay gửi văn bản thuần qua email

    • Tôi tò mò không biết tỷ lệ mọi người tái sử dụng mật khẩu là bao nhiêu, và tỷ lệ dùng password manager là bao nhiêu
  • Tôi đọc câu này bốn lần mà vẫn không hiểu
    Ý kiểu như: “Nếu kẻ tấn công gửi địa chỉ email của người dùng vào dịch vụ hợp pháp để yêu cầu mã 6 chữ số, thì chính người dùng cũng không biết được mã đó là cho đăng nhập thật hay giả”

    • Tôi hiểu vì sao bạn thấy khó hiểu. Điều tác giả thực sự muốn nói là
      • Từ góc nhìn của người dùng, họ nhập email và thông tin đăng nhập vào một trang lừa đảo trông giống hệt trang thật
      • Hacker lấy email đó đưa vào dịch vụ thật, rồi dịch vụ thật gửi mã 6 chữ số cho người dùng
      • Người dùng chỉ thấy mã trong email đúng là do dịch vụ thật gửi đến nên tin tưởng và nhập vào
      • Kẻ tấn công cầm mã đó và lập tức truy cập được vào tài khoản
      • Đó là luồng dẫn đến việc thông tin bị đánh cắp theo cách này