set -euo pipefail
OUT_DIR="artifacts-f01"
mkdir -p "$OUT_DIR"
# Tạo tệp Asset-Inventory.csv chuẩn 16 trường lab_record_schema kết hợp thông tin đối chiếu từng host/service
cat > "$OUT_DIR/Asset-Inventory.csv" <<'CSV'
lab_id,objective,environment_build_id,image_service_version,network_scope_cidr,initial_snapshot_id,test_accounts,maximum_permitted_impact,task,evidence_artifacts,expected_result,actual_result,cleanup,duration_hours,reviewer,date_checked_utc
F01,"Đối chiếu host/port lab với ground truth (192.168.56.20:53/tcp+udp DNS & 443/tcp Nginx Proxy)","F01-20261102-BUILD04","ubuntu-24.04.1-lts / unbound-1.19 / nginx-1.24.0-2ubuntu7.1","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","lab_auditor (redacted non-priv)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Kiểm tra chỉ IP lab .20 cổng 53 và 443; đối chiếu ss -tulnp","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-linux-20.txt","53/tcp+udp và 443/tcp OPEN khớp với LISTEN trên 192.168.56.20/0.0.0.0","MATCH (True Positive): 53/tcp+udp (Unbound PID 812) và 443/tcp (Nginx PID 940 TLS 1.3) đều OPEN; Nginx 1.24.0 là gói Ubuntu LTS đã vá backport (không phải CVE dương tính giả)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
F01,"Đối chiếu host/port lab với ground truth (192.168.56.20:22/tcp SSH, 8080/tcp App, 5432/tcp DB)","F01-20261102-BUILD04","ubuntu-24.04.1-lts / openssh-9.6p1 / gunicorn-21.2 / postgresql-16.4","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","lab_auditor (redacted non-priv)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Giải thích độ lệch giữa Nmap ngoài và luồng nội tại Client -> Proxy -> App -> DB","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-linux-20.txt","22/tcp bị lọc bởi tường lửa host; 8080/tcp và 5432/tcp chỉ bind loopback 127.0.0.1","RECONCILED: 22/tcp FILTERED (sshd PID 780 LISTEN 0.0.0.0:22 nhưng bị nftables drop = Delta_firewall); 8080/tcp và 5432/tcp CLOSED từ ngoài (Gunicorn PID 1024 và Postgres PID 1105 chỉ LISTEN trên 127.0.0.1 = Delta_loopback, chỉ nhận kết nối từ Nginx Proxy :443)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
F01,"Đối chiếu host/port lab với ground truth (192.168.56.30:135/tcp RPC, 445/tcp SMB, 3389/tcp RDP)","F01-20261102-BUILD04","win-srv-2022-eval-20348","192.168.56.0/24 (allowlist: 192.168.56.20,192.168.56.30)","F01-start","win_lab_reader (redacted read-only)","Low-impact TCP connect + version-light (--max-rate 15 -T2); no exploitation","Kiểm tra chỉ IP lab .30; đối chiếu Get-NetTCPConnection trên Windows","evidence-f01/f01-nmap-baseline.nmap;evidence-f01/ground-truth-win-30.csv","135/tcp và 445/tcp OPEN theo baseline OS; 3389/tcp FILTERED bởi Windows Firewall","RECONCILED: 135/tcp (RPC PID 916) và 445/tcp (SMB2/3 PID 4) OPEN khớp Ground Truth; 3389/tcp FILTERED từ .10 dù TermService PID 1420 đang Listen 0.0.0.0:3389 (Delta_firewall do Windows Defender Firewall)","Lưu evidence đã redact; xóa tệp tạm; hoàn nguyên snapshot F01-start","3.5","TechLead-SecOps-01","2026-11-02T10:30:00Z"
CSV
# Tạo tệp Asset-Inventory.audit.md đáp ứng đầy đủ 6 phần minimum_contents
cat > "$OUT_DIR/Asset-Inventory.audit.md" <<'MD'
# Hồ sơ Kiểm toán Kiểm kê Dịch vụ — Safe Lab F01 (`Asset-Inventory.audit.md`)
## 1. Scope và lab ID
- **Lab ID:** `F01` (Tuần 1 — Ngày 4: `W01-L04`).
- **Mạng cô lập (Network Scope CIDR):** `192.168.56.0/24` (Host-Only cô lập hoàn toàn, không có đường định tuyến ra Internet hay mạng sản xuất).
- **Danh sách đích được phép (`allowlist.txt`):** Chỉ gồm `192.168.56.20` (`F01-linux-srv`) và `192.168.56.30` (`F01-win-trial`).
- **Danh sách loại trừ (`excludelist.txt`):** `192.168.56.0`, `192.168.56.1` (Host), `192.168.56.10` (Tester), `192.168.56.255`.
## 2. Preconditions và phương pháp
- **Điều kiện tiên quyết (Preconditions):** Đã xác minh cô lập mạng trên `F01-tester`, kiểm tra mốc snapshot sạch `F01-start`, thiết lập tài khoản kiểm toán phi đặc quyền (`lab_auditor`, `win_lab_reader`) và thống nhất quy tắc dừng khẩn cấp (*Stop Rule*).
- **Phương pháp rà quét bên ngoài (External Low-Impact Scan):** Sử dụng `nmap -n -Pn -sT -sV --version-light --reason -T2 --max-rate 15 --max-retries 1 -iL allowlist.txt --exclude-file excludelist.txt` trên danh sách cổng kiểm toán. Tốc độ giới hạn ở 15 gói/giây ($\approx 7.92\text{ kbps}$).
- **Phương pháp thu thập Sự thật Nền (Host Ground Truth):** Chạy `sudo ss -tulnp` trên `192.168.56.20` và `Get-NetTCPConnection -State Listen` trên `192.168.56.30`.
## 3. UTC timestamp, expected/actual và evidence redacted
- **Khung thời gian thực thi (UTC Timestamp):** `2026-11-02T10:12:00Z` đến `2026-11-02T10:12:28Z` (kiểm toán hoàn tất lúc `2026-11-02T10:30:00Z`).
- **Đối chiếu Expected vs. Actual:**
- `192.168.56.20:53` (DNS Unbound) & `192.168.56.20:443` (Nginx TLS 1.3): **Expected = OPEN** / **Actual = OPEN** (Khớp hoàn toàn với Ground Truth).
- `192.168.56.20:22` (OpenSSH): **Expected = Bảo vệ bởi tường lửa** / **Actual = FILTERED** trên Nmap nhưng `LISTEN 0.0.0.0:22` trong `ss -tulnp` ($\Delta_{\text{firewall}}$ do quy tắc `nftables`).
- `192.168.56.20:8080` (Gunicorn App) & `192.168.56.20:5432` (PostgreSQL DB): **Expected = Cô lập nội bộ** / **Actual = CLOSED** trên Nmap nhưng `LISTEN 127.0.0.1:8080` và `127.0.0.1:5432` trong `ss -tulnp` ($\Delta_{\text{loopback}}$). Chứng minh rõ luồng `Client (.10) -> Nginx Proxy (.20:443) -> App (127.0.0.1:8080) -> DB (127.0.0.1:5432)`.
- `192.168.56.30:135` (MSRPC) & `192.168.56.30:445` (SMB): **Expected = OPEN theo OS baseline** / **Actual = OPEN**.
- `192.168.56.30:3389` (RDP): **Expected = Bảo vệ bởi tường lửa** / **Actual = FILTERED** trên Nmap dù `TermService` đang `Listen 0.0.0.0:3389` ($\Delta_{\text{firewall}}$).
- **Evidence Redacted:** Toàn bộ đầu ra `f01-nmap-baseline.nmap`, `ground-truth-linux-20.txt` và `ground-truth-win-30.csv` đã được lọc bỏ mọi chuỗi khóa phiên hoặc thông tin định danh cá nhân trước khi đóng gói.
## 4. False positive và giới hạn
- **Nhận diện False Positive từ Banner:** Nmap ghi nhận banner `nginx 1.24.0 (Ubuntu)` trên cổng `443/tcp` và `OpenSSH 9.6p1` trên máy chủ `.20`. Kiểm tra Ground Truth (`dpkg -l`) xác nhận đây là các gói Ubuntu 24.04 LTS đã được tích hợp bản vá bảo mật backport (`1.24.0-2ubuntu7.1`), do đó không được phép kết luận lỗi CVE chỉ dựa trên số hiệu phiên bản trong banner.
- **Giới hạn của phép đo:** Quét TCP từ bên ngoài không nhìn thấy các dịch vụ chỉ gắn vào `127.0.0.1` ($\Delta_{\text{loopback}}$) hoặc các dịch vụ chỉ mở cho IP quản trị qua tường lửa ($\Delta_{\text{firewall}}$). Đồng thời, cờ `--version-light` ưu tiên an toàn vận hành nên có thể không nhận diện được các dịch vụ tùy chỉnh dùng giao thức độc quyền trên cổng phi tiêu chuẩn.
## 5. Remediation hoặc bước tiếp theo
- **Trên `F01-linux-srv` (`192.168.56.20`):** Duy trì cấu hình gắn `127.0.0.1` cho tầng App (`:8080`) và DB (`:5432`); bổ sung chỉ thị `server_tokens off;` trong cấu hình Nginx để giảm rò rỉ thông tin phiên bản không cần thiết trên cổng `:443`.
- **Trên `F01-win-trial` (`192.168.56.30`):** Đưa cổng `445/tcp` (SMB) và `135/tcp` (RPC) vào danh sách kiểm tra cấu hình xác thực và chính sách bắt buộc ký số (*SMB Signing Required*) trong bài học đánh giá bề mặt Windows tiếp theo; hạn chế phạm vi IP được phép kết nối tới cổng `135/tcp` trên Windows Firewall nếu không có nhu cầu RPC liên máy.
## 6. Reviewer và ngày kiểm tra
- **Reviewer:** `TechLead-SecOps-01`
- **Ngày kiểm tra (Date Checked UTC):** `2026-11-02T10:30:00Z`
- **Trạng thái phê duyệt:** `APPROVED — Baseline Reconciled`
MD