Case study kiểm toán bảo mật này chia sẻ quá trình security audit cho một công ty fintech Việt Nam — phát hiện 23 lỗ hổng bảo mật, trong đó 5 lỗ hổng nghiêm trọng có thể cho phép hacker truy cập dữ liệu 200,000 người dùng. Tất cả được tìm thấy và vá trước khi hacker kịp khai thác.
Bối cảnh
Về doanh nghiệp
- Ngành: Fintech — ví điện tử và cho vay trực tuyến
- Quy mô: 60 nhân viên, 15 developers
- Users: 200,000 người dùng active
- Transactions: 50,000 giao dịch/ngày, tổng 500 tỉ VND/tháng
- Tech stack: Node.js + React + PostgreSQL + Redis, chạy trên AWS
Lý do thực hiện security audit
- Chuẩn bị gọi vốn Series A — nhà đầu tư yêu cầu báo cáo bảo mật
- Compliance: Cần đáp ứng yêu cầu NHNN về bảo mật fintech
- Growth nhanh: Code viết nhanh trong 18 tháng, chưa bao giờ audit bảo mật
- Sự cố nhỏ: Phát hiện 1 API endpoint bị leak data → lo ngại có thêm lỗ hổng
Phạm vi audit
| Hạng mục | Chi tiết |
|---|---|
| Web application | Frontend (React) + Backend (Node.js API) |
| Mobile app | iOS + Android (React Native) |
| Infrastructure | AWS setup, network, IAM |
| Database | PostgreSQL + Redis |
| Third-party integrations | Payment gateway, banking API, KYC provider |
| CI/CD pipeline | GitHub + Jenkins |
Quy trình Security Audit
Phương pháp
Kết hợp 3 phương pháp:
- Automated scanning: Dùng tool scan tự động (OWASP ZAP, Burp Suite, AWS Inspector)
- Manual penetration testing: Ethical hacker thử xâm nhập thủ công
- Code review: Đọc source code tìm lỗ hổng logic
Timeline: 3 tuần
Tuần 1: Reconnaissance + Automated Scanning
- Thu thập thông tin về hệ thống
- Chạy automated scanners
- Map tất cả API endpoints
- Phân tích attack surface
Tuần 2: Manual Penetration Testing
- Test authentication/authorization
- Test API security
- Test business logic
- Test infrastructure
- Attempt privilege escalation
Tuần 3: Code Review + Report
- Review source code các module critical
- Viết báo cáo chi tiết
- Xếp hạng lỗ hổng theo severity
- Đề xuất remediation
Kết quả: 23 lỗ hổng
Tổng quan
| Severity | Số lượng | Thời gian fix khuyến nghị |
|---|---|---|
| Critical | 2 | Ngay lập tức (< 24 giờ) |
| High | 3 | 1-3 ngày |
| Medium | 8 | 1-2 tuần |
| Low | 7 | 1 tháng |
| Informational | 3 | Khi có thời gian |
| Tổng | 23 |
5 lỗ hổng nghiêm trọng nhất
Lỗ hổng 1: IDOR — Xem thông tin tài khoản người khác (Critical)
Vấn đề: API endpoint /api/users/{id}/balance không kiểm tra quyền. Bất kỳ user đăng nhập nào cũng có thể thay đổi {id} để xem số dư tài khoản của user khác.
Ảnh hưởng: 200,000 users — hacker có thể xem số dư, lịch sử giao dịch, thông tin cá nhân của bất kỳ ai.
Cách tìm thấy: Thay đổi user ID trong request từ “12345” thành “12346” → trả về data user khác.
Fix: Thêm authorization check — chỉ cho phép user xem data của chính mình.
Lỗ hổng 2: SQL Injection trong search function (Critical)
Vấn đề: Chức năng tìm kiếm giao dịch không sanitize input. Có thể inject SQL để đọc toàn bộ database.
Ảnh hưởng: Toàn bộ database — thông tin cá nhân, số tài khoản ngân hàng, lịch sử giao dịch.
Fix: Sử dụng parameterized queries, input validation.
Lỗ hổng 3: JWT Secret quá yếu (High)
Vấn đề: JWT signing secret là “secretkey123” — có thể brute force trong vài giây. Hacker tạo JWT token giả, đăng nhập bằng bất kỳ tài khoản nào.
Fix: Dùng random secret 256-bit, rotate định kỳ.
Lỗ hổng 4: AWS S3 bucket public (High)
Vấn đề: S3 bucket chứa KYC documents (CMND, CCCD scan) được set public — bất kỳ ai có URL đều access được.
Ảnh hưởng: 50,000+ ảnh CMND/CCCD của users.
Fix: Set bucket private, sử dụng pre-signed URLs.
Lỗ hổng 5: Admin panel không có 2FA (High)
Vấn đề: Admin panel quản lý 200,000 users + 500 tỉ giao dịch/tháng chỉ bảo vệ bằng username/password. Mật khẩu admin có trong data breach cũ.
Fix: Bắt buộc 2FA cho tất cả admin, implement IP whitelist.
8 lỗ hổng Medium
| # | Lỗ hổng | Impact |
|---|---|---|
| 1 | Rate limiting yếu cho API login | Brute force password |
| 2 | Thiếu CSRF protection | Cross-site request forgery |
| 3 | Sensitive data trong logs | Password, token bị log |
| 4 | Outdated dependencies (12 packages) | Known vulnerabilities |
| 5 | Error messages tiết lộ thông tin hệ thống | Stack trace, DB schema |
| 6 | Không encrypt data at rest | Data trên disk không mã hóa |
| 7 | Weak password policy | Cho phép password “123456” |
| 8 | Session không timeout | Token không hết hạn |
Quy trình vá lỗ hổng
Tuần 1: Critical fixes (2 ngày)
- Vá IDOR vulnerability — thêm authorization middleware
- Fix SQL Injection — refactor toàn bộ queries sang parameterized
- Thay JWT secret — deploy ngay, force logout tất cả sessions
Tuần 2: High fixes (5 ngày)
- Set S3 bucket private + implement pre-signed URLs
- Deploy 2FA cho admin panel
- Update rate limiting
Tuần 3-4: Medium fixes (10 ngày)
- Update 12 outdated packages
- Implement CSRF tokens
- Add data encryption at rest
- Clean sensitive data from logs
- Enforce password policy
- Add session timeout
Tuần 5: Verification
- Re-scan toàn bộ hệ thống
- Re-test các lỗ hổng đã vá
- Confirm 100% critical/high đã fix
- Document remaining low/info items
Chi phí và ROI
Chi phí audit
| Hạng mục | Chi phí |
|---|---|
| Security audit (3 tuần) | 120 triệu VND |
| Remediation support | 30 triệu VND |
| Re-testing sau fix | 20 triệu VND |
| Tổng | 170 triệu VND |
Thiệt hại nếu KHÔNG audit (ước tính)
| Kịch bản | Thiệt hại ước tính |
|---|---|
| IDOR exploit → data breach 200K users | 2-5 tỉ VND (phạt + bồi thường + mất user) |
| SQL Injection → database stolen | 3-10 tỉ VND (mất dữ liệu tài chính) |
| S3 leak → 50K CMND/CCCD lộ | 1-3 tỉ VND (phạt PDPA + kiện tụng) |
| Admin hack → unauthorized transactions | 5-50 tỉ VND (mất tiền trực tiếp) |
| Worst case tổng | 10-60 tỉ VND |
ROI: Đầu tư 170 triệu, phòng tránh thiệt hại 10-60 tỉ → ROI 5,800% - 35,000%.
Bài học cho SME
1. “Code nhanh” để lại security debt
Startup/SME thường ưu tiên tốc độ phát triển → bỏ qua security → tích lũy “nợ bảo mật”. Nên audit bảo mật sau mỗi milestone lớn (launch, major feature, pre-fundraising).
2. Automated scan chỉ tìm được 40% lỗ hổng
Tool tự động giỏi tìm lỗ hổng kỹ thuật (outdated software, missing headers). Nhưng lỗ hổng logic (IDOR, business logic bypass) cần manual testing bởi chuyên gia.
3. Developer giỏi không bằng security expert
Dev team 15 người không phát hiện IDOR vì họ test “happy path”. Security expert test “unhappy path” — cố tình phá, cố tình vượt quyền, cố tình inject.
4. Chi phí phòng ngừa << Chi phí khắc phục
170 triệu cho audit << 10-60 tỉ cho data breach. Quy tắc: chi phí bảo mật nên là 5-10% ngân sách IT.
Trinh Digital Security Audit Services
Tại Trinh Digital, chúng tôi cung cấp:
- Web Application Security Audit — Từ 30 triệu VND
- Infrastructure Security Assessment — Từ 50 triệu VND
- Full Penetration Testing — Từ 80 triệu VND
- Code Security Review — Từ 40 triệu VND
- Compliance Assessment (PCI DSS, ISO 27001) — Từ 100 triệu VND
FAQ — Câu hỏi thường gặp
1. SME không phải fintech có cần security audit không?
Có. Bất kỳ website nào chứa dữ liệu khách hàng (tên, email, SĐT, địa chỉ) đều cần. E-commerce càng cần vì có thông tin thanh toán. Chi phí audit cho website đơn giản từ 10-30 triệu.
2. Security audit mất bao lâu?
Website/app đơn giản: 1 tuần. Hệ thống trung bình: 2-3 tuần. Enterprise complex: 4-8 tuần. Phụ thuộc vào scope và số lượng endpoints/features.
3. Có thể tự audit không?
Phần automated scanning có thể tự làm (dùng OWASP ZAP, Nikto). Nhưng manual penetration testing và code review cần chuyên gia — lý do giống bạn không tự khám bệnh cho mình dù có sách y khoa.
Muốn kiểm tra bảo mật hệ thống trước khi hacker tìm thấy lỗ hổng? Liên hệ Trinh Digital để đặt lịch Security Audit.