D4 · 16% · CGRC

C04 — Quản lý rủi ro

Risk Management — Phương pháp luận đánh giá rủi ro (qualitative/quantitative), mô hình FAIR, risk register, Business Impact Analysis (BIA), Business Continuity Management (BCM) và Disaster Recovery Planning (DRP).

Tools
FAIR · ISO 31000
Platform
PowerShell · Python
Quarter
Q2/2026
Updated
24/05/2026
Author
Trần Văn Hòa (MCT)
Version
v1.0

Mục tiêu bài học — Learning Objectives

  • So sánh qualitative vs. quantitative risk assessment — khi nào dùng phương pháp nào
  • Áp dụng FAIR (Factor Analysis of Information Risk) model để định lượng rủi ro bằng tiền (ALE/AV/EF/ARO)
  • Xây dựng Risk Register với risk appetite, risk tolerance và risk response strategies (Avoid/Transfer/Mitigate/Accept)
  • Thực hiện Business Impact Analysis (BIA) — xác định RTO, RPO, MTD cho critical systems
  • Phân biệt BCM vs. DRP vs. COOP — vai trò từng kế hoạch trong business continuity

Lý thuyết — Theory

1. Qualitative vs. Quantitative Risk Assessment

Qualitative Risk Assessment
  • Phương pháp: Risk Matrix (5x5), Red/Amber/Green (RAG) scoring
  • Scale: Low/Medium/High/Critical hoặc 1-5
  • Ưu điểm: Nhanh, ít dữ liệu, dễ communicate
  • Nhược điểm: Chủ quan, khó so sánh, không giúp ROI decisions
  • Dùng khi: Initial risk assessment, khi thiếu historical data
Quantitative Risk Assessment
  • Phương pháp: FAIR, ALE, Monte Carlo simulation
  • Scale: Giá trị tiền (USD/VND), probability (%)
  • Ưu điểm: Objective, hỗ trợ ROI/budget decisions
  • Nhược điểm: Cần nhiều data, tốn thời gian
  • Dùng khi: Justifying security investment với CFO/Board
Key Formulas:
SLE (Single Loss Expectancy) = Asset Value (AV) × Exposure Factor (EF)
ALE (Annual Loss Expectancy) = SLE × ARO (Annual Rate of Occurrence)
Value of Control = ALE(before) - ALE(after) - Cost of Control

2. FAIR Model — Factor Analysis of Information Risk

FAIR là tiêu chuẩn quốc tế (Open Group) để định lượng cyber risk bằng tiền. Không phải framework kiểm soát — là ontology để phân tích và đo lường risk một cách nhất quán.

FAIR Risk Decomposition:
Risk = Probable Frequency of Loss × Probable Magnitude of Loss
├── Loss Event Frequency (LEF) = Threat Event Frequency × Vulnerability
│ ├── Threat Event Frequency = Contact × Action
│ └── Vulnerability = Prob of Action × Prob of Control Failure
└── Loss Magnitude = Primary Loss + Secondary Loss
├── Primary: Productivity, Response, Replacement
└── Secondary: Reputation, Legal/Regulatory, Competitive
Ví dụ FAIR Analysis — Ransomware attack:
• Threat Event Frequency: 2 lần/năm (industry data)
• Vulnerability: 30% (controls partially effective)
• LEF: 2 × 30% = 0.6 events/year
• Loss Magnitude: $500K primary (downtime 3 days) + $200K secondary (reputation, legal)
ALE = 0.6 × $700K = $420K/year — justify $150K/year EDR + backup investment

3. Risk Register & Risk Response Strategies

Risk Register là "living document" trung tâm của risk management program. Mỗi risk có owner, inherent risk score, controls, residual risk score, và treatment plan.

Risk IDRisk DescriptionInherentControlsResidualResponseOwner
R001Ransomware encrypts production DBCriticalEDR, backup, segmentationHighMitigateCISO
R002GDPR fine for data breachHighEncryption, DLP, awarenessMediumMitigate + TransferDPO
R003Cloud provider outage >4hHighMulti-region DR, SLA contractMediumTransferCTO
Avoid
Eliminate activity causing risk. Dừng product feature nguy hiểm.
Transfer
Cyber insurance, outsource. Chuyển financial impact sang bên thứ ba.
Mitigate
Implement controls để giảm likelihood hoặc impact. Phổ biến nhất.
Accept
Residual risk nằm trong risk appetite. Có tài liệu sign-off.

4. Business Impact Analysis (BIA)

BIA xác định critical business functions và tác động tài chính, operational, reputational khi chúng bị gián đoạn. Là đầu vào quan trọng nhất để xây dựng BCM/DRP.

Các chỉ số BIA quan trọng:
RTORecovery Time Objective — thời gian tối đa để restore service
RPORecovery Point Objective — lượng data loss chấp nhận được (giờ/phút)
MTDMaximum Tolerable Downtime — giới hạn tuyệt đối trước khi business collapse
WRTWork Recovery Time = MTD - RTO (thời gian để verify và restore data)
Ví dụ BIA — Payment System:
• MTD: 4 giờ (regulatory requirement)
• RTO: 2 giờ (target for DR activation)
• RPO: 15 phút (max data loss)
• WRT: 4h - 2h = 2h (verify & reconcile)
• Financial impact: $50,000/giờ downtime
• Reputational: Báo chí sau 2h outage
• Regulatory: Báo cáo NHNN trong 24h

5. BCM / DRP / COOP — Ba kế hoạch liên tục nghiệp vụ

BCM — Business Continuity Management

Chương trình tổng thể đảm bảo tổ chức có thể hoạt động trong và sau disruption. Bao gồm DRP, crisis communication, supply chain continuity, workarounds thủ công.

Scope: TOÀN BỘ tổ chức
DRP — Disaster Recovery Plan

Subset của BCM, focus vào khôi phục IT systems và data sau disaster. Hot/Warm/Cold site, backup strategies, failover procedures, RTO/RPO targets.

Scope: IT SYSTEMS & DATA
COOP — Continuity of Operations

Kế hoạch duy trì essential functions tại alternate location. Phổ biến trong government và critical infrastructure. Alternate site + delegations of authority.

Scope: ESSENTIAL FUNCTIONS
Recovery Site Options:
Hot Site: Fully equipped & operational, real-time sync. RTO: minutes. Cost: $$$$
Warm Site: Partially equipped, requires setup. RTO: hours. Cost: $$
Cold Site: Empty space, bring your own hardware. RTO: days/weeks. Cost: $

Bài thực hành — Hands-on Labs

LAB 01

ALE Calculator & Risk Register — PowerShell Quantitative Risk Assessment

Platform
Windows PowerShell 7
Tools
PowerShell, CSV
Output
Risk Register Report
Thời gian
20 phút
# Quantitative Risk Assessment — ALE Calculator + Risk Register

$risks = @(
    [PSCustomObject]@{
        RiskID      = "R001";  Name = "Ransomware Attack"
        AssetValue  = 5000000;  # VND triệu = $5M asset value
        EF          = 0.80;     # Exposure Factor: 80% asset destroyed
        ARO         = 0.60;     # Annual Rate of Occurrence: 0.6/year
        ControlCost = 150000;   # Cost of EDR + backup solution
        PostControlARO = 0.10   # After controls: 0.1/year
    },
    [PSCustomObject]@{
        RiskID      = "R002";  Name = "Insider Data Theft"
        AssetValue  = 2000000;  EF = 0.30;  ARO = 0.25
        ControlCost = 80000;    PostControlARO = 0.05
    },
    [PSCustomObject]@{
        RiskID      = "R003";  Name = "DDoS Attack (e-commerce)"
        AssetValue  = 1000000;  EF = 0.20;  ARO = 2.0
        ControlCost = 60000;    PostControlARO = 0.5
    }
)

$results = foreach ($r in $risks) {
    $sle         = $r.AssetValue * $r.EF
    $aleBefore   = $sle * $r.ARO
    $aleAfter    = $sle * $r.PostControlARO
    $controlValue = $aleBefore - $aleAfter - $r.ControlCost

    [PSCustomObject]@{
        RiskID       = $r.RiskID
        Risk         = $r.Name
        SLE          = "$([int]$sle / 1000)K"
        ALE_Before   = "$([int]$aleBefore / 1000)K"
        ALE_After    = "$([int]$aleAfter / 1000)K"
        ControlCost  = "$($r.ControlCost / 1000)K"
        ControlValue = "$([int]$controlValue / 1000)K"
        Decision     = if ($controlValue -gt 0) { "INVEST" } else { "REVIEW" }
    }
}

$results | Format-Table -AutoSize
$results | Export-Csv "C:\GRC\risk-register-ale.csv" -NoTypeInformation
KẾT QUẢ ĐẦU RA (Expected Output)
RiskID  Risk                     SLE     ALE_Before  ALE_After  ControlCost  ControlValue  Decision
------  ----                     ---     ----------  ---------  -----------  ------------  --------
R001    Ransomware Attack        4000K   2400K       400K       150K         1850K         INVEST
R002    Insider Data Theft       600K    150K        30K        80K          40K           INVEST
R003    DDoS Attack (e-commerce) 200K    400K        100K       60K          240K          INVEST

CSV exported: C:\GRC\risk-register-ale.csv
All 3 controls have positive ROI — recommend implementation
LAB 02

BIA & DR Test Simulation — Bash Script kiểm tra RTO/RPO thực tế

Platform
Linux, Docker
Tools
Bash, curl, mysqldump
Output
DR Test Report
Thời gian
30 phút
#!/bin/bash
# DR Test Script — kiểm tra RTO/RPO thực tế cho database failover

TARGET_RTO=120  # 120 seconds target
TARGET_RPO=300  # 300 seconds (5 min) max data loss
REPORT="/tmp/dr-test-$(date +%Y%m%d-%H%M).txt"

log() { echo "[$(date +%H:%M:%S)] $1" | tee -a $REPORT; }

log "=== DR TEST START ==="
log "Target RTO: ${TARGET_RTO}s | Target RPO: ${TARGET_RPO}s"

# Phase 1: Record last backup timestamp (simulate RPO check)
BACKUP_TIME=$(date -d "-4 minutes" +%s)  # Last backup was 4 min ago
NOW=$(date +%s)
DATA_LOSS_SECS=$(( NOW - BACKUP_TIME ))
log "Last backup: $(date -d @$BACKUP_TIME) | Data loss window: ${DATA_LOSS_SECS}s"

if [ $DATA_LOSS_SECS -le $TARGET_RPO ]; then
    log "RPO CHECK: PASS (${DATA_LOSS_SECS}s <= ${TARGET_RPO}s)"
else
    log "RPO CHECK: FAIL (${DATA_LOSS_SECS}s > ${TARGET_RPO}s) — backup too old!"
fi

# Phase 2: Simulate failover to DR database (Docker)
log "Starting DR database container..."
RTO_START=$(date +%s)

# Start DR MySQL container
docker run -d --name mysql-dr \
  -e MYSQL_ROOT_PASSWORD=drpassword \
  -e MYSQL_DATABASE=appdb \
  -p 3307:3306 \
  mysql:8.0 &>/dev/null

# Wait for DB to be ready (max 60s)
WAIT=0
until docker exec mysql-dr mysqladmin ping -u root -pdrpassword --silent 2>/dev/null; do
    sleep 2; (( WAIT+=2 ))
    if [ $WAIT -ge 60 ]; then log "FAIL: DR DB not ready in 60s"; exit 1; fi
done
log "DR database ready after ${WAIT}s"

# Restore from backup (simulate)
log "Restoring database from latest backup..."
sleep 5  # Simulate restore time

# Phase 3: Validate restored data
RECORD_COUNT=$(docker exec mysql-dr mysql -u root -pdrpassword appdb \
  -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='appdb';" \
  --skip-column-names 2>/dev/null || echo 0)
log "Data validation: ${RECORD_COUNT} tables accessible"

RTO_END=$(date +%s)
ACTUAL_RTO=$(( RTO_END - RTO_START ))
log "Actual RTO: ${ACTUAL_RTO}s"

if [ $ACTUAL_RTO -le $TARGET_RTO ]; then
    log "RTO CHECK: PASS (${ACTUAL_RTO}s <= ${TARGET_RTO}s)"
else
    log "RTO CHECK: FAIL (${ACTUAL_RTO}s > ${TARGET_RTO}s) — optimize failover!"
fi

# Cleanup
docker stop mysql-dr &>/dev/null && docker rm mysql-dr &>/dev/null
log "=== DR TEST COMPLETE | Report: $REPORT ==="
KẾT QUẢ ĐẦU RA (Expected Output)
[09:15:00] === DR TEST START ===
[09:15:00] Target RTO: 120s | Target RPO: 300s
[09:15:00] Last backup: 2026-05-24 09:11:00 | Data loss window: 240s
[09:15:00] RPO CHECK: PASS (240s <= 300s)
[09:15:00] Starting DR database container...
[09:15:18] DR database ready after 18s
[09:15:18] Restoring database from latest backup...
[09:15:23] Data validation: 7 tables accessible
[09:15:23] Actual RTO: 83s
[09:15:23] RTO CHECK: PASS (83s <= 120s)
[09:15:23] === DR TEST COMPLETE | Report: /tmp/dr-test-20260524-0915.txt ===

Tình huống doanh nghiệp — Business Scenario

CASE STUDY — Hanoi Stock Exchange (Critical Infrastructure)

Hanoi Stock Exchange (HNX) là critical infrastructure — downtime trong giờ giao dịch gây thiệt hại hàng nghìn tỷ đồng. UBCKNN yêu cầu RTO ≤ 2 giờ, RPO ≤ 15 phút. BIA phân tích hệ thống giao dịch là Most Critical System.

1
BIA Kết quả: Downtime 1 giờ = ~500 tỷ VND giao dịch bị gián đoạn + reputational damage + UBCKNN fine tiềm năng. MTD = 4 giờ (phiên giao dịch buổi chiều).
2
DR Architecture: Hot site tại DC2 Hà Nội — real-time synchronous replication (Oracle DataGuard). Failover tự động ≤ 30 giây cho database layer.
3
Quarterly DR Test: Failover test mỗi quý sau giờ giao dịch. Kết quả Q1/2026: Actual RTO = 47 phút (target 2h) — PASS. RPO = 0 (sync replication) — PASS.
4
Risk Treatment: Ransomware risk (ALE $2M/yr) → Mitigate với immutable backup + network segmentation (control cost $200K/yr, control value $1.6M/yr — strong ROI).

Tự kiểm tra — Self-Assessment (5 câu)

1. Asset Value = $2M, Exposure Factor = 40%, ARO = 0.5. ALE là bao nhiêu?

A. $400,000
B. $400,000 ✓
C. $800,000
D. $1,000,000

SLE = $2M × 0.4 = $800K; ALE = $800K × 0.5 = $400K.

2. Một tổ chức mua cyber insurance để chuyển rủi ro tài chính của data breach. Đây là risk response strategy nào?

A. Avoid
B. Transfer ✓
C. Mitigate
D. Accept

3. RTO = 4h, MTD = 6h. Work Recovery Time (WRT) là bao nhiêu?

A. 10 giờ
B. 2 giờ ✓
C. 4 giờ
D. 6 giờ

WRT = MTD - RTO = 6h - 4h = 2h. Đây là thời gian để verify và reconcile data sau khi hệ thống restore.

4. Recovery site nào phù hợp nhất cho hệ thống với RTO = 30 phút?

A. Hot Site ✓
B. Warm Site
C. Cold Site
D. Mobile Site

5. FAIR model phân tích Risk = Probable Loss Frequency × Probable Loss Magnitude. Loss Magnitude bao gồm hai thành phần là gì?

A. Direct và Indirect
B. Primary Loss và Secondary Loss ✓
C. Tangible và Intangible
D. Financial và Reputational

FAIR: Primary Loss (productivity, response, replacement) + Secondary Loss (reputation, legal/regulatory, competitive). Secondary thường bị underestimate nhưng có thể lớn hơn Primary.

Định lượng rủi ro nâng cao — FAIR Model

FAIR — Factor Analysis of Information Risk

FAIR là mô hình định lượng rủi ro mạng duy nhất được quốc tế công nhận — cho phép biểu diễn rủi ro bằng đô la thay vì màu đỏ/vàng/xanh trên heat map định tính.

Risk = Loss Event Frequency (LEF) × Loss Magnitude (LM)
LEF — Loss Event Frequency
LEF = Threat Event Frequency × Vulnerability
  • Threat Event Frequency: Số lần tác nhân đe dọa tiếp xúc tài sản/năm
  • Vulnerability: Xác suất kiểm soát bị vượt qua khi bị tấn công (0–1)
LM — Loss Magnitude
LM = Primary Loss + Secondary Loss
  • Primary Loss: Thiệt hại trực tiếp — khôi phục dữ liệu, downtime, pháp lý
  • Secondary Loss: Tổn thất gián tiếp — danh tiếng, regulatory fines, cạnh tranh

Monte Carlo Simulation — 10.000 kịch bản

Thay vì tính một con số duy nhất, FAIR chạy 10.000 kịch bản ngẫu nhiên để tạo ra phân phối rủi ro — cho phép trình bày rủi ro theo ngôn ngữ mà Board of Directors hiểu.

90th percentile annual loss = $2.3M
Có 90% khả năng tổn thất hằng năm không vượt $2.3M — ngôn ngữ board hiểu được, khác hoàn toàn với "High Risk" trên heat map

So sánh: Định tính vs FAIR (Định lượng)

Tiêu chí Qualitative (Heat Map) FAIR (Quantitative)
Output Red / Yellow / Green $2.3M at 90th pct
Ngôn ngữ Board Khó so sánh với ngân sách Trực tiếp so sánh ROI kiểm soát
Độ chính xác Chủ quan, định tính Phạm vi xác suất (range)
Phù hợp Screening ban đầu, nhanh Báo cáo C-suite, quyết định đầu tư
Tiêu chuẩn Phổ biến, nhiều biến thể Tiêu chuẩn quốc tế duy nhất (Open FAIR)

Python — pyfair thư viện FAIR

# pip install pyfair
from pyfair import FairModel, FairSimpleReport

# Khởi tạo model
model = FairModel(name="Data Breach Risk")

# Input: Threat Event Frequency — phân phối chuẩn, mean=10 lần/năm
model.input_data('Threat Event Frequency', mean=10, stdev=3)

# Input: Vulnerability — xác suất bị vượt qua khi tấn công xảy ra
model.input_data('Vulnerability', mean=0.3, stdev=0.1)

# Input: Primary Loss — phân phối PERT (low/mode/high)
model.input_data('Primary Loss', low=100_000, mode=500_000, high=2_000_000)

# Chạy 10,000 Monte Carlo simulations
model.calculate_all()

# Output: risk distribution, VaR tại 90th percentile
results = model.export_results()
print(results.describe())
# → count, mean, std, 10%, 25%, 50%, 75%, 90% annual loss values

# Tạo báo cáo HTML
report = FairSimpleReport([model])
report.to_html('fair_report.html')
KẾT QUẢ ĐẦU RA MẪU
         Annual Loss Exposure
count    10000.000000
mean       460,230.00
std        318,150.00
10%         98,400.00
50%        392,000.00
90%      2,310,000.00   ← "90th pct annual loss = $2.3M"
max      6,100,000.00
Exam Tip — CGRC

CGRC exam kiểm tra FAIR là tiêu chuẩn định lượng quốc tế duy nhất cho rủi ro mạng, không chỉ là heat map định tính. Nhớ: Open FAIR được The Open Group công nhận. Khi đề bài hỏi về "quantitative risk analysis" trong bối cảnh cybersecurity — đáp án là FAIR, không phải chỉ ALE/SLE.

C03: Information Security & Compliance C05: Data Privacy
Zalo