Mục tiêu chương / Learning objectives
- Thực hiện security requirements elicitation bằng kỹ thuật stakeholder analysis, misuse cases và abuse stories.
- Phân biệt functional vs non-functional security requirements và ví dụ cho từng loại.
- Xây dựng Requirements Traceability Matrix (RTM) liên kết security requirements với test cases.
- Áp dụng GDPR/CCPA user rights (access, erasure, portability) vào software requirements.
- Hiểu tác động của HIPAA, PCI-DSS, SOX đến software requirements cụ thể.
- Viết security user stories đúng format và xác định acceptance criteria cho security features.
1. Lý thuyết cốt lõi / Core theory
1.1. Thu thập yêu cầu bảo mật (Security Requirements Elicitation)
Ba kỹ thuật chính: Stakeholder analysis — xác định tất cả bên liên quan (users, admins, regulators, attackers) và security concerns của họ; Misuse cases — đảo ngược use case thành kịch bản tấn công ("Attacker submits malformed input để bypass authentication"), mỗi misuse case dẫn đến security requirement cụ thể; Abuse stories — format Agile cho misuse cases: "As an attacker, I want to submit SQL in login form so that I can bypass authentication" → security story: "As a developer, I must implement parameterized queries so that SQL injection is prevented".
Khái niệm then chốt — Misuse Case: Lasswell & Sindre (2005) đề xuất mở rộng use case diagram với misuse case (hình oval màu đen). Mối quan hệ: mitigates (security measure mitigates misuse case), threatens (misuse case threatens use case). Đây là cách hiệu quả nhất để developer "đội mũ attacker" và tìm security requirements bị bỏ sót.
1.2. Yêu cầu bảo mật phổ biến (Common Security Requirements: AAUAP)
Nhớ theo acronym AAUAP: Authentication (xác thực danh tính — MFA, SSO, certificate-based), Authorization (phân quyền — RBAC/ABAC/PBAC, least privilege), Audit/Accountability (nhật ký không thể phủ nhận — log who-what-when-where, immutable audit trail), Availability (đảm bảo hoạt động — rate limiting, graceful degradation, SLA), Privacy (bảo vệ dữ liệu cá nhân — data minimization, consent, retention limits).
Mỗi requirement phải SMART: Specific (cụ thể), Measurable (đo được), Achievable (khả thi), Relevant (liên quan), Time-bound (có thời hạn). Ví dụ sai: "Hệ thống phải an toàn". Đúng: "Mật khẩu người dùng phải được hash bằng bcrypt với cost factor ≥ 12 trước khi lưu vào database".
1.3. Requirements Traceability Matrix (RTM)
RTM là bảng liên kết requirements → design decisions → code implementations → test cases. Mục đích: đảm bảo mọi security requirement đều được implement và test; phát hiện orphan requirements (requirement không có test case) và orphan tests (test không có requirement). Columns điển hình: Req ID | Source (GDPR Art.5 / PCI-DSS 3.4 / threat model) | Priority | Implementation file | Test case ID | Status.
1.4. Privacy Requirements theo GDPR/CCPA (Privacy-driven Requirements)
GDPR tạo ra software requirements cụ thể: Right of Access → implement API GET /api/user/data-export trả về toàn bộ personal data trong 30 ngày; Right to Erasure ("Right to be Forgotten") → implement DELETE /api/user/{id}/personal-data xóa hoặc anonymize, kể cả trong backups; Right to Portability → export dữ liệu theo format machine-readable (JSON/CSV); Data Minimization → không thu thập fields không cần thiết trong form; Consent Management → granular consent per purpose, withdraw anytime, audit log of consent.
1.5. Regulatory-driven Requirements (HIPAA / PCI-DSS / SOX)
HIPAA: PHI (Protected Health Information) phải encrypted at rest (AES-256) và in transit (TLS 1.2+); audit logs 6 năm; minimum necessary access; Business Associate Agreement cho third parties. → Software requirements: field-level encryption cho PHI fields, role-based access với break-glass emergency override, immutable audit trail. PCI-DSS v4.0: CHD (Cardholder Data) không được stored plaintext; TLS 1.2+ cho transmission; annual pentest; no default passwords. → Requirements: tokenization thay cardholder number, WAF requirement, automated vulnerability scanning. SOX: financial data integrity, separation of duties, change management control. → Requirements: no single admin having both write và approve access, every financial transaction logged with non-repudiation.
2. Bài thực hành / Hands-on labs
Lab 1 — Audit Security Requirements trong Codebase (PowerShell)
OS: Windows 11 · Tool: PowerShell 7.
- Tìm kiếm TODO/FIXME liên quan đến security — đây là security debt markers trong code:
# Tìm security-related TODOs và FIXMEs — indicators của security debt
Get-ChildItem -Recurse -Include *.cs,*.java,*.py,*.js,*.ts -ErrorAction SilentlyContinue |
Select-String -Pattern "TODO.*security|FIXME.*auth|HACK.*bypass|// temp.*password|NOSONAR" |
Select-Object Path, LineNumber, Line |
Format-Table -Wrap -AutoSize
# Kiểm tra logging/auditing requirements được implement chưa
# Tìm các file config có chứa audit/logging settings
Get-ChildItem -Recurse -Include *.config,*.json,*.yaml,*.yml -ErrorAction SilentlyContinue |
Select-String -Pattern "audit|logging|log4|serilog|nlog" |
Group-Object Path |
Select-Object Name, Count |
Sort-Object Count -Descending |
Select-Object -First 10 |
Format-Table -AutoSize
# Kiểm tra có require authentication trên tất cả endpoints không
# (tìm [AllowAnonymous] attributes — cần review thủ công)
Get-ChildItem -Recurse -Include *.cs -ErrorAction SilentlyContinue |
Select-String -Pattern "\[AllowAnonymous\]" |
Select-Object Path, LineNumber, Line |
Format-Table -Wrap
✅ Kết quả mong đợi / Expected output: Danh sách files có security TODOs với line numbers — đây là input cho security backlog. Các [AllowAnonymous] endpoints cần review xem có intentional không. Nếu logging config thiếu → tạo requirement "Implement structured audit logging với Serilog, retain 90 ngày". Ý nghĩa: requirements gap analysis trực tiếp từ codebase.
Lab 2 — Dependency Security Audit (Bash)
OS: Ubuntu 22.04 · Tool: Bash + pip-audit + npm audit + Trivy.
# Python: kiểm tra dependencies có CVE không (pip-audit)
pip install pip-audit 2>/dev/null
pip-audit --format=json 2>/dev/null | python3 -c "
import json, sys
data = json.load(sys.stdin)
vulns = data.get('dependencies', [])
critical = [v for pkg in vulns for v in pkg.get('vulns', []) if v.get('fix_versions')]
print(f'Vulnerable packages: {len([p for p in vulns if p.get(\"vulns\")])}')
print(f'Fixable vulnerabilities: {len(critical)}')
for c in critical[:5]:
print(f' CVE: {c[\"id\"]} Fix: {c[\"fix_versions\"]}')
" 2>/dev/null || pip-audit 2>/dev/null | head -20
# Node.js: npm audit
npm audit --json 2>/dev/null | python3 -c "
import json, sys
try:
d = json.load(sys.stdin)
meta = d.get('metadata', {}).get('vulnerabilities', {})
print(f'Critical: {meta.get(\"critical\",0)}, High: {meta.get(\"high\",0)}, Moderate: {meta.get(\"moderate\",0)}')
except: print('npm audit: run in a Node.js project directory')
" 2>/dev/null
# Container/filesystem scan với Trivy (nếu có Docker image)
trivy fs --security-checks vuln . 2>/dev/null | grep -E "CRITICAL|HIGH" | head -15 || \
echo "Trivy: install với 'sudo apt install trivy' hoặc 'brew install aquasecurity/trivy/trivy'"
# Tóm tắt: map CVEs vào security requirements
echo "---"
echo "Security Requirement gợi ý từ findings:"
echo "REQ-SEC-001: Cập nhật tất cả dependencies có CVE critical trong sprint tiếp theo"
echo "REQ-SEC-002: Thiết lập Dependabot/Renovate để auto-detect vulnerable dependencies"
✅ Kết quả mong đợi / Expected output: pip-audit liệt kê packages có CVE kèm fix versions. npm audit báo số lượng critical/high/moderate. Trivy scan filesystem tìm vulnerable OS packages và libraries. Đây là nguồn data trực tiếp để viết security requirements dạng "Upgrade package X từ 1.2.3 lên 1.2.4 để fix CVE-2024-XXXX (CVSS 9.8)".
3. Tình huống doanh nghiệp / Real-world scenario
Bối cảnh:
Một bệnh viện triển khai hệ thống HIS (Hospital Information System) mới. Product owner cần security requirements cho tính năng "Xem hồ sơ bệnh nhân". Regulatory: HIPAA (vì có US partner), NĐ 13/2023 (Việt Nam data privacy).
Quy trình thu thập requirements:
- Stakeholder analysis: Bác sĩ (cần truy cập nhanh), Nurse (limited access), Admin (system-wide), Auditor (read-only), Attacker (muốn lấy PHI để bán).
- Misuse cases: "Nhân viên IT bất hảo truy cập hồ sơ bệnh nhân của người nổi tiếng" → Requirement: Role-based access + break-glass audit log + alert khi truy cập VIP record ngoài giờ.
- HIPAA-driven requirements: Minimum necessary (bác sĩ chỉ thấy bệnh nhân của mình), audit log 6 năm, automatic session timeout sau 15 phút, PHI encrypted at rest AES-256.
- RTM entry: REQ-HIPAA-001 → Design: AES-256 field encryption → Code: EncryptionService.cs → Test: TC-ENC-001 (verify PHI encrypted in DB).
Bài học: regulatory requirements không phải gánh nặng mà là checklist sẵn có cho security requirements. HIPAA/PCI-DSS đã làm việc phân tích giúp bạn — developer chỉ cần translate thành user stories cụ thể.
4. Tự kiểm tra / Knowledge check
- Phân biệt use case và misuse case. Viết một misuse case cho tính năng đặt lại mật khẩu.
- RTM (Requirements Traceability Matrix) giải quyết vấn đề gì trong security assurance?
- GDPR "Right to Erasure" tạo ra software requirement cụ thể nào? Có ngoại lệ không?
- PCI-DSS yêu cầu gì về cardholder data storage và tác động đến database schema design?
- Viết một security user story hoàn chỉnh (As/I want/So that) kèm acceptance criteria cho tính năng MFA.