Loading...

Bài 32. Tấn công mật khẩu và mật mã: brute force, spraying, user enumeration, MFA bypass, downgrade

Khóa học CompTIA Security+ SY0-801 · Phần 2: Mối đe dọa, lỗ hổng và tấn công · Bài 32 · 🎯 Objective 2.5 · ⏱️ Đọc khoảng 15 phút · 🧪 Không cần lab · 📝 5 câu bài tập cuối bài

🎯 Mục tiêu bài học

  • Phân biệt brute force, dictionary, password spraying, credential stuffing.
  • Hiểu tấn công mã băm: rainbow table và cách salt vô hiệu hóa chúng.
  • Mô tả user enumeration và cách chống.
  • Nhận biết các cách vượt MFA (MFA fatigue, SIM swap, AiTM) và downgrade attack.
  • Chọn biện pháp phù hợp: giới hạn thử, băm có salt, MFA chống lừa đảo, cấu hình mật mã mạnh.

📎 Vị trí trong đề thi: đề thường mô tả mẫu hành vi trong nhật ký (nhiều mật khẩu cho một tài khoản, hay một mật khẩu cho nhiều tài khoản) rồi hỏi tên tấn công. Kiến thức về băm, salt, MFA ở các bài trước (Bài 12 và phần định danh sau này) được dùng lại ở đây.

💡 Liên hệ thực tế: nhật ký đăng nhập bất thường

Thứ Hai, 06:30. Nam xem nhật ký đăng nhập của cổng email công ty chị Lan và thấy bốn mẫu lạ. Đây là tình huống minh họa, không phải vụ việc có thật.

Mẫu trong nhật kýNam suy luận
5.000 mật khẩu khác nhau thử liên tiếp trên một tài khoản Brute force / dictionary nhắm vào một tài khoản
Một mật khẩu ("Mùa xuân2026!") thử trên hàng trăm tài khoản, mỗi tài khoản chỉ vài lần Password spraying: né khóa tài khoản
Cặp email và mật khẩu từ một vụ rò rỉ khác được thử trên cổng công ty Credential stuffing: tái sử dụng mật khẩu
Trang đăng nhập báo "không có tài khoản này" khác với "sai mật khẩu" Lộ thông tin để user enumeration
Một nhân viên nhận hàng chục thông báo đăng nhập MFA lúc nửa đêm và lỡ bấm "Đồng ý" MFA fatigue: làm phiền cho tới khi chấp nhận

Chị Lan hỏi: "Có MFA rồi mà vẫn bị à?" Nam trả lời: MFA rất quan trọng, nhưng không phải tất cả loại MFA đều chống được mọi cách lừa. Cần chọn loại phù hợp.

🔑 Hình 32a. Brute force thử nhiều mật khẩu trên một tài khoản. Spraying thử một mật khẩu trên nhiều tài khoản. Stuffing thử cặp bị lộ từ nơi khác.

📘 Kiến thức cốt lõi

🔨 Brute force và dictionary

  • Brute force: thử mọi tổ hợp ký tự có thể. Mật khẩu càng dài, càng phức tạp thì càng tốn thời gian.
  • Dictionary: thử từ danh sách mật khẩu phổ biến và biến thể (thêm số, đổi chữ). Nhanh hơn nhiều với mật khẩu dễ đoán.

Online (thử trực tiếp trên dịch vụ) bị giới hạn bởi tốc độ phản hồi và khóa tài khoản. Offline là thử trên mã băm đã lấy được, nhanh hơn rất nhiều vì không bị giới hạn.

💧 Password spraying

Thử một vài mật khẩu phổ biến trên rất nhiều tài khoản, mỗi tài khoản chỉ vài lần, để không chạm ngưỡng khóa. Hiệu quả khi người dùng chọn mật khẩu dễ đoán như theo mùa, theo năm.

🪪 Credential stuffing

Dùng cặp tên đăng nhập và mật khẩu đã bị lộ ở dịch vụ khác để thử trên dịch vụ của bạn, dựa vào việc nhiều người dùng lại cùng mật khẩu.

Phòng chống chung cho ba dạng trên:

  • Giới hạn số lần thử (rate limiting), khóa hoặc làm chậm sau nhiều lần sai, nhưng cân nhắc để không bị lợi dụng khóa tài khoản người khác.
  • MFA cho mọi tài khoản.
  • Mật khẩu dài (cụm từ), cấm mật khẩu phổ biến và đã lộ, không dùng lại mật khẩu.
  • Phát hiện bất thường: nhiều lần sai, đăng nhập từ nhiều nơi, theo mẫu spraying.
  • CAPTCHA hoặc thử thách phụ khi nghi ngờ tự động hóa.

🧂 Tấn công mã băm: rainbow table và salt

Mật khẩu không nên lưu nguyên văn mà lưu mã băm (Bài 12). Kẻ tấn công lấy được cơ sở dữ liệu có thể:

  • Dò mã băm bằng brute force hoặc dictionary offline.
  • Dùng rainbow table (bảng băm tính sẵn) để tra ngược nhanh.

Salt là một giá trị ngẫu nhiên riêng cho mỗi mật khẩu, trộn vào trước khi băm. Nhờ vậy:

  • Hai người cùng mật khẩu vẫn có hai mã băm khác nhau.
  • Rainbow table tính sẵn mất tác dụng, vì phải tính lại cho từng salt.

Nên dùng thuật toán băm chậm có chủ đích dành cho mật khẩu (như bcrypt, scrypt, Argon2, PBKDF2) thay vì băm nhanh thông thường. Việc làm chậm khiến mỗi lần thử tốn kém hơn rất nhiều. (Pepper là bí mật dùng chung được lưu tách khỏi cơ sở dữ liệu, thêm một lớp nữa.)

🔎 User enumeration

Kẻ tấn công dò xem tài khoản nào tồn tại qua cách hệ thống phản hồi khác nhau: thông báo khác nhau cho "không có tài khoản" và "sai mật khẩu", thời gian phản hồi khác nhau, trang đặt lại mật khẩu báo "email không tồn tại".

Phòng chống: dùng thông báo chung ("tên đăng nhập hoặc mật khẩu không đúng"), cùng thời gian phản hồi, giới hạn tốc độ, và thông báo đặt lại mật khẩu thống nhất ("nếu tài khoản tồn tại, chúng tôi đã gửi email").

🔓 MFA bypass (vượt MFA)

🛡️ Hình 32b. MFA đẩy thông báo, mã SMS và mã dùng một lần đều có thể bị lừa. Khóa bảo mật theo chuẩn FIDO2 chống tốt hơn.

Cách vượtMô tảPhòng chống
MFA fatigue (đánh bom thông báo) Gửi hàng loạt thông báo duyệt đăng nhập cho đến khi nạn nhân bấm đồng ý Yêu cầu nhập số khớp (number matching), giới hạn số yêu cầu, đào tạo "không duyệt thứ mình không bắt đầu", báo cáo khi nhận thông báo lạ
SIM swap Lừa nhà mạng chuyển số điện thoại sang SIM của kẻ tấn công để nhận mã SMS Không dùng SMS cho tài khoản quan trọng, đặt mã khóa SIM tại nhà mạng
AiTM (adversary-in-the-middle) phishing Trang giả chuyển tiếp mật khẩu và mã MFA tới trang thật, rồi lấy cookie phiên MFA chống lừa đảo như khóa bảo mật FIDO2/WebAuthn gắn với đúng tên miền
Lừa lấy mã Giả danh nhân viên IT để xin mã MFA (vishing, Bài 22) Đào tạo: không bao giờ chia sẻ mã

Nguyên tắc: MFA tốt hơn không có MFA rất nhiều, nhưng loại chống lừa đảo (FIDO2, khóa bảo mật, passkey) bền hơn SMS và thông báo đẩy đơn giản.

⬇️ Downgrade attack

Downgrade ép hai bên dùng phiên bản giao thức hoặc thuật toán yếu hơn mà cả hai vẫn hỗ trợ (để tương thích ngược), rồi tấn công vào điểm yếu đó. Ví dụ ép kết nối từ TLS mới xuống phiên bản cũ có lỗ hổng, hoặc từ HTTPS xuống HTTP (SSL stripping, Bài 30).

Phòng chống: tắt hẳn phiên bản và thuật toán lỗi thời (như SSL, TLS cũ, bộ mã hóa yếu), cấu hình chỉ cho phép bộ mã hóa mạnh, dùng HSTS, và quét cấu hình định kỳ.

🧮 Các tấn công mật mã khác (nhắc nhanh)

  • Va chạm (collision): hai đầu vào khác nhau cho cùng mã băm, làm mất tính toàn vẹn. Tránh thuật toán băm đã bị phá (như MD5, SHA-1 cho mục đích bảo mật).
  • Birthday attack: lợi dụng xác suất va chạm xảy ra sớm hơn dự đoán trực giác khi không gian mã băm không đủ lớn.
  • Khóa yếu hoặc lộ: khóa quá ngắn, sinh ngẫu nhiên kém hoặc lưu không an toàn (Bài 12).

🎯 Mẹo làm bài: nhìn mẫu trong nhật ký. "Nhiều mật khẩu, một tài khoản" là brute force hoặc dictionary. "Một mật khẩu, nhiều tài khoản" là spraying. "Cặp lộ từ nơi khác" là credential stuffing. "Thông báo khác nhau giữa không có tài khoản và sai mật khẩu" là user enumeration. "Nhiều thông báo duyệt đăng nhập liên tục" là MFA fatigue. "Ép dùng phiên bản yếu hơn" là downgrade. Chống tra ngược mã băm là salt. Chống vượt MFA tốt nhất là MFA chống lừa đảo (FIDO2).

🧠 Áp vào câu chuyện của Nam

Câu hỏi của chị LanKhái niệm trả lời
"5.000 mật khẩu vào một tài khoản?" Brute force hoặc dictionary: giới hạn thử, MFA
"Một mật khẩu thử khắp nơi?" Spraying: né khóa tài khoản, cần phát hiện theo mẫu
"Mật khẩu lộ từ chỗ khác sao dùng được?" Credential stuffing: do dùng lại mật khẩu
"Thông báo lỗi khác nhau có sao không?" User enumeration: dùng thông báo chung
"Có MFA vẫn bị là sao?" MFA fatigue, SIM swap, AiTM: cần MFA chống lừa đảo

📖 Thuật ngữ cần nhớ

Thuật ngữNghĩa
Brute force Thử mọi tổ hợp có thể.
Dictionary attack Thử từ danh sách mật khẩu phổ biến.
Password spraying Một vài mật khẩu thử trên nhiều tài khoản.
Credential stuffing Dùng cặp tên đăng nhập và mật khẩu đã lộ ở nơi khác.
Rainbow table Bảng mã băm tính sẵn để tra ngược.
Salt Giá trị ngẫu nhiên riêng cho mỗi mật khẩu trước khi băm.
Pepper Bí mật chung lưu tách khỏi cơ sở dữ liệu.
bcrypt / Argon2 Thuật toán băm chậm có chủ đích cho mật khẩu.
User enumeration Dò xem tài khoản nào tồn tại.
MFA fatigue Gửi dồn thông báo để nạn nhân lỡ đồng ý.
SIM swap Chiếm số điện thoại để nhận mã SMS.
AiTM Trang giả chuyển tiếp để lấy cả mật khẩu và mã MFA.
FIDO2 / WebAuthn Chuẩn xác thực không mật khẩu, chống lừa đảo.
Downgrade attack Ép dùng phiên bản hoặc thuật toán yếu hơn.
Collision Hai đầu vào cho cùng mã băm.

📌 Tóm tắt nhanh

  • Phân biệt qua mẫu: brute force (nhiều mật khẩu, một tài khoản), spraying (một mật khẩu, nhiều tài khoản), stuffing (cặp đã lộ).
  • Phòng chung: giới hạn thử, MFA, mật khẩu dài, cấm mật khẩu đã lộ, phát hiện bất thường.
  • Lưu mật khẩu bằng băm chậm có salt để rainbow table mất tác dụng.
  • User enumeration: dùng thông báo chung và thời gian phản hồi đồng nhất.
  • MFA bypass: fatigue, SIM swap, AiTM. MFA chống lừa đảo (FIDO2) bền nhất.
  • Downgrade: tắt giao thức và thuật toán lỗi thời.

💬 Hỏi & Đáp nhanh

❓ Khóa tài khoản sau vài lần sai có đủ chống brute force không? Giúp chống tấn công online trên một tài khoản, nhưng không chống spraying (mỗi tài khoản chỉ thử vài lần) và có thể bị lợi dụng để khóa tài khoản của người khác. Cần thêm MFA và phát hiện bất thường.

❓ Salt có phải bí mật không? Không cần bí mật. Salt thường lưu cùng mã băm. Tác dụng của nó là làm mỗi mã băm khác nhau và làm rainbow table tính sẵn vô dụng.

❓ Dùng SMS cho MFA có bị coi là không an toàn không? Vẫn tốt hơn không có MFA, nhưng yếu hơn khóa bảo mật hoặc ứng dụng có số khớp, vì có thể bị SIM swap hoặc lừa lấy mã. Tài khoản quan trọng nên dùng MFA chống lừa đảo.

📝 Bài tập đánh giá

Tự chọn đáp án cho từng câu, rồi đối chiếu với phần đáp án ở cuối bài.

Câu 1. Nhật ký cho thấy cùng một mật khẩu được thử trên hàng trăm tài khoản, mỗi tài khoản chỉ vài lần. Đây là gì?

  • A. Brute force trên một tài khoản
  • B. Password spraying
  • C. Replay
  • D. Rainbow table

Câu 2. Kẻ tấn công dùng danh sách email và mật khẩu bị lộ từ một dịch vụ khác để thử trên cổng của công ty. Đây là gì?

  • A. Credential stuffing
  • B. Downgrade
  • C. SYN flood
  • D. Skimming

Câu 3. Biện pháp nào vô hiệu hóa rainbow table khi lưu mật khẩu?

  • A. Lưu mật khẩu nguyên văn
  • B. Dùng salt ngẫu nhiên riêng cho từng mật khẩu và băm chậm
  • C. Dùng mật khẩu ngắn
  • D. Dùng chung một salt cho mọi mật khẩu và băm nhanh

Câu 4. Một nhân viên nhận hàng chục thông báo duyệt đăng nhập MFA lúc nửa đêm và lỡ bấm đồng ý. Đây là gì, và biện pháp nào giúp?

  • A. MFA fatigue. Dùng số khớp và giới hạn số yêu cầu, đào tạo nhân viên
  • B. Jamming. Tăng công suất phát
  • C. SIM swap. Tắt thông báo
  • D. Birthday attack. Đổi thuật toán băm

Câu 5. Trang đăng nhập báo "Không tồn tại tài khoản này" khi gõ sai tên và "Sai mật khẩu" khi gõ đúng tên. Vấn đề là gì, và cách khắc phục?

  • A. Downgrade, tắt TLS
  • B. User enumeration, dùng thông báo chung "tên đăng nhập hoặc mật khẩu không đúng"
  • C. Replay, thêm nonce
  • D. Skimming, dùng thẻ chip

👉 Đáp án

Câu 1: B — Một mật khẩu thử trên nhiều tài khoản, mỗi tài khoản vài lần để né khóa, là password spraying.

Câu 2: A — Dùng cặp tên đăng nhập và mật khẩu đã lộ từ nơi khác là credential stuffing.

Câu 3: B — Salt riêng cho từng mật khẩu làm bảng tính sẵn mất tác dụng, băm chậm làm mỗi lần thử tốn kém.

Câu 4: A — Đó là MFA fatigue. Số khớp, giới hạn yêu cầu và đào tạo "không duyệt thứ mình không bắt đầu" giúp phòng chống.

Câu 5: B — Phản hồi khác nhau làm lộ tài khoản nào tồn tại (user enumeration). Dùng thông báo chung cho mọi trường hợp.


📚 Bài viết thuộc khóa học CompTIA Security+ của VNExperts

🧭 Điều hướng

⬅️ Bài trước🏠 Mục lục khóa họcBài kế tiếp ➡️
Bài 31: Tấn công ứng dụng và vật lý: privilege escalation, forced entry, skimming Mục lục khóa học CompTIA Security+ Bài 33: Indicators of Compromise (IoC): hash, IP, domain, tiến trình lạ, log manipulation