- 1 Mã độc là gì? Phân loại, đặc tính và cách phòng tránh
- 2 DDos là gì? Dấu hiệu, xử lý và cách phòng chống hiệu quả
- 3 Phishing là gì? Nhận diện và phòng chống tấn công lừa đảo trực tuyến
- 4 DNS Sinkhole là gì? Ứng dụng và cách dùng kỹ thuật DNS Sinkhole
- 5 OAuth 2.0 là gì? Ủy quyền truy cập và đăng nhập bằng Google/Facebook
- 6 Trojan là gì? Những thông tin cơ bản về mã độc Trojan
- 7 Zero Trust Là Gì? Mô Hình Bảo Mật 'Không Tin Tưởng Ai'
- 8 VPN là gì? Mạng riêng ảo, WireGuard và OpenVPN
- 9 MFA Là Gì? So Sánh MFA vs 2FA và Các Phương Thức Xác Thực
- 10 Tường lửa là gì? Vai trò và chức năng trong bảo mật mạng
- 11 SQL Injection là gì? Tấn công cơ sở dữ liệu và cách phòng chống
- 12 Ransomware là gì? Mã độc mã hóa tống tiền và cách phòng chống
- 13 WAF Là Gì? Web Application Firewall Bảo Vệ Ứng Dụng Web
- 14 XSS là gì? Cross-Site Scripting và cách phòng chống hiệu quả
Cần giải pháp dữ liệu cho doanh nghiệp?
AlgoData đồng hành cùng doanh nghiệp về data engineering, phân tích & AI từ 2019.
MFA Là Gì? Ba Yếu Tố Xác Thực

MFA (Multi-Factor Authentication) là phương thức xác thực yêu cầu người dùng cung cấp hai hoặc nhiều hơn bằng chứng danh tính từ các category khác nhau trước khi được cấp quyền truy cập.
Ba category yếu tố xác thực:
1. Something You Know (Bạn biết gì)
- Password, PIN, câu hỏi bảo mật
- Yếu nhất: có thể bị đoán, phishing, credential stuffing
2. Something You Have (Bạn có gì)
- OTP token (Google Authenticator, Authy)
- Hardware key (YubiKey, Google Titan)
- Phone (SMS OTP, push notification)
- Smart card
3. Something You Are (Bạn là ai)
- Vân tay (fingerprint)
- Nhận diện khuôn mặt (Face ID)
- Võng mạc (retina scan)
- Giọng nói (voice recognition)
MFA vs 2FA:
2FA là subset của MFA dùng đúng 2 yếu tố. MFA có thể dùng 3+ yếu tố (ví dụ password + OTP + fingerprint). Trong thực tế, thuật ngữ "2FA" và "MFA" thường dùng thay nhau.
Tại sao password một mình không đủ?
Theo HaveIBeenPwned: hơn 12 tỷ credential pairs bị lộ. Credential stuffing — dùng combo đã lộ để login tự động — thành công vì người dùng tái sử dụng password. MFA ngăn chặn ngay cả khi password bị compromise.
Các Phương Thức MFA Phổ Biến
TOTP (Time-based One-Time Password):
- App: Google Authenticator, Authy, Microsoft Authenticator
- Tạo code 6 số, đổi mỗi 30 giây
- Offline, không cần internet
- Yêu cầu sync thời gian
SMS OTP:
- Code gửi qua SMS
- Dễ dùng nhất
- Dễ bị SIM swap, SS7 attack
- Nên tránh cho account nhạy cảm
Hardware Security Key (FIDO2/U2F):
- YubiKey, Google Titan Key
- Physical device cắm USB hoặc NFC
- Phishing-resistant tuyệt đối
- Không thể bị phished vì key bind với origin URL
Push Notification:
- Gửi push đến app mobile (Duo, Okta Verify)
- Tiện lợi nhưng dễ bị MFA fatigue attack
- Nên bật number matching
Passkey (FIDO2/WebAuthn):
- Thay thế hoàn toàn password + MFA
- Dùng device biometric (Face ID, Touch ID)
- Phishing-resistant, no shared secret
TOTP Hoạt Động Như Thế Nào?

TOTP (RFC 6238) là thuật toán tạo OTP dựa trên:
- Shared secret (seed key, base32 encoded — quét QR code khi setup)
- Current time (unix timestamp / 30 = time counter T)
- HMAC-SHA1(secret, T) → truncate → 6 số
T = floor(current_unix_time / 30) # time step
HMAC = HMAC-SHA1(secret, T)
offset = HMAC[19] & 0xf
code = (HMAC[offset:offset+4] & 0x7fffffff) % 10^6
Python pyotp code thực tế:
1import pyotp
2import time
3
4# Tạo secret mới (lưu trong DB, hiển thị QR cho user)
5secret = pyotp.random_base32()
6print(f"Secret: {secret}") # VD: JBSWY3DPEHPK3PXP
7
8# Tạo TOTP object
9totp = pyotp.TOTP(secret)
10
11# Lấy code hiện tại
12current_code = totp.now()
13print(f"Current OTP: {current_code}") # VD: 123456
14
15# Verify code từ user (chấp nhận ±1 window = 90 giây)
16user_input = "123456"
17is_valid = totp.verify(user_input, valid_window=1)
18print(f"Valid: {is_valid}")
19
20# Tạo provisioning URI cho QR code
21uri = totp.provisioning_uri(
22 name="user@example.com",
23 issuer_name="MyApp"
24)
25print(f"QR URI: {uri}")
26# otpauth://totp/MyApp:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=MyApp
Triển khai MFA trong Django REST Framework:
1# views.py
2from rest_framework.views import APIView
3from rest_framework.response import Response
4import pyotp
5
6class MFAVerifyView(APIView):
7 def post(self, request):
8 user = request.user
9 otp_code = request.data.get('otp_code')
10
11 # Lấy secret từ user profile
12 totp = pyotp.TOTP(user.mfa_secret)
13
14 if totp.verify(otp_code, valid_window=1):
15 # Issue short-lived token sau khi verify MFA
16 session_token = generate_session_token(user)
17 return Response({'token': session_token})
18
19 return Response({'error': 'Invalid OTP'}, status=401)
Phishing-Resistant MFA: FIDO2 vs TOTP vs SMS

Không phải tất cả MFA đều như nhau. Attacker ngày càng phishing được cả MFA code.
Phishing attack vs MFA:
- Attacker tạo fake login page (vd: g00gle.com)
- Nạn nhân nhập username/password → attacker relay sang google.com thật
- Google gửi MFA challenge → attacker relay challenge về cho nạn nhân
- Nạn nhân nhập TOTP code → attacker capture và dùng ngay (30 giây window)
- Attacker đăng nhập thành công vào account thật
FIDO2/WebAuthn chống phishing như thế nào:
Key bind với origin URL. Khi sign challenge:
signed_data = sign(private_key, challenge + origin + rpId)
rpId = google.com. Nếu nạn nhân ở g00gle.com, rpId không match → browser từ chối sign → phishing thất bại.
Bảng so sánh resistance:
| Phương thức | Phishing | SIM Swap | Malware | UX |
|---|---|---|---|---|
| Password only | Dễ bị | N/A | Dễ bị | Dễ |
| SMS OTP | Dễ bị | Dễ bị | Trung bình | Dễ |
| TOTP App | Dễ bị | Không | Trung bình | Tốt |
| Push Notification | Dễ bị | Không | Trung bình | Tốt |
| Hardware Key (U2F) | Không thể | Không | Không | Tốt |
| Passkey (FIDO2) | Không thể | Không | Không | Tốt nhất |
MFA Fatigue Attack — Và Cách Phòng Chống
MFA Fatigue (còn gọi là MFA bombing/push spam) là kỹ thuật social engineering:
- Attacker đã có username + password (từ breach hoặc phishing)
- Liên tục trigger push notification MFA — đôi khi 50–100 lần trong đêm
- Nạn nhân mệt mỏi, mất cảnh giác, approve nhầm
- Attacker vào được
Ví dụ thực tế: Vụ tấn công Uber 2022 — attacker WhatsApp nạn nhân giả làm IT support, kết hợp MFA bombing để được approve.
Phòng chống:
1. Number Matching — Yêu cầu user nhập số hiển thị trên login screen vào app:
Login screen: "Enter code: 42"
App push: "Tap if code matches: [42] [Approve] [Deny]"
Nếu không nhìn thấy số này, approve là sai → nạn nhân sẽ nhận ra.
2. Additional Context — Hiển thị thêm trong push: IP, location, browser. Nếu từ Hà Nội nhưng login từ Nga → suspicious.
3. Rate limiting — Limit số push notification per session (max 3 attempts), sau đó lock.
4. Migrate sang FIDO2 — Không có push, không có fatigue. Hardware key hoặc passkey.
Triển Khai MFA Cho Team / Tổ Chức
Bước 1: Enforce MFA qua IdP (Identity Provider)
- Google Workspace: Admin → Security → 2-Step Verification → Enforcement
- Okta: Security → Authenticators → Enrollment Policy → Required
- Azure AD: Security → MFA → Per-user hoặc Conditional Access Policy
Bước 2: Chọn đúng phương thức theo risk level
- High-risk (admin, finance, exec): Hardware key (YubiKey) + Passkey
- Standard: Authenticator app (TOTP) — không cho SMS
- Legacy system không hỗ trợ: SMS OTP (với rate limiting)
Bước 3: Xử lý account recovery an toàn
- Backup codes in secure vault
- Admin-assisted recovery với identity verification
- Không cho phép recovery qua SMS nếu primary là hardware key

