W01-L05: Đường cơ sở Hệ điều hành Windows/Linux, Nhật ký Sự kiện và Luồng Ứng dụng Client → Proxy → App → DB

Enterprise Pentest Lead Curriculum
Cybersecurity Academy
2026
Abstract
Giáo trình chuyên sâu dành cho Enterprise Penetration Testing Technical Lead về phương pháp kiểm toán đường cơ sở hệ điều hành (OS Baseline), đối chiếu mô hình quyền hạn giữa Linux và Windows, phân tích nhật ký sự kiện bảo mật (Event Logs / journald), và mô hình hóa luồng dữ liệu đầu-cuối Client → Proxy → App → DB xuyên qua các ranh giới tiến trình. Bài học đồng thời trang bị khung rà soát chất lượng kỹ thuật (Technical QA Review) giúp Technical Lead phân biệt cấu hình quyền rộng trên lý thuyết với lỗ hổng có thể khai thác thực tế trước khi phê duyệt hồ sơ OS-baseline-and-flow.md.
Keywords: Linux Permissions; Windows Services; Event Logs; systemd Hardening; Service Accounts; Client-Proxy-App-DB Data Flow; OS Baseline Review

1Sau mục này bạn sẽ làm được

2Cần biết trước

3Nối với các mục trước

Trong nhịp độ đào tạo 6 ngày mỗi tuần của chương trình, nếu Ngày 1 (W01-L01) thiết lập nền tảng lý thuyết mạng, Ngày 2–3 (W01-L02, W01-L03) thực hành dựng lab và bắt gói tin có hướng dẫn, Ngày 4 (W01-L04) nâng độ khó với bài toán đối chiếu kết quả quét cổng bên ngoài và các trường hợp dương tính giả, thì *Ngày 5 (W01-L05) chuyển trọng tâm sang năng lực Kiểm toán Hệ điều hành và Rà soát Chất lượng Kỹ thuật (Review & QA Governance — 1.0 giờ lý thuyết, 1.0 giờ thực hành lab, 1.5 giờ quản trị & rà soát nhóm). Ở bài W01-L04, thông qua lệnh ss -tulnp và Get-NetTCPConnection, chúng ta đã biết tiến trình nào đang giữ socket lắng nghe trên cổng :443, :8080, :5432 hay :445. Tuy nhiên, một câu hỏi kiến trúc sâu hơn lập tức xuất hiện: Nếu kẻ tấn công gửi một yêu cầu độc hại đi qua cổng :443 của Nginx hoặc cổng :8080 của Gunicorn, tiến trình đó đang chạy dưới danh nghĩa tài khoản người dùng nào, được phép đọc/ghi những tệp tin nào trên đĩa cứng, và hệ thống nhật ký sẽ ghi lại dấu vết gì?* Để trả lời câu hỏi này và đủ năng lực thẩm định báo cáo của các thành viên trong nhóm, Technical Lead phải nắm vững cơ chế phân quyền tiến trình, tài khoản dịch vụ và nhật ký sự kiện của cả Linux lẫn Windows [8] [23] .

4Hiểu nhanh bằng ví dụ đời thường

Nếu việc kiểm kê cổng mạng ở bài W01-L04 giống như kiểm tra xem những cánh cửa nào của bệnh viện đang mở ra hành lang, thì việc lập đường cơ sở hệ điều hành và luồng ứng dụng ở bài W01-L05 giống như kiểm tra thẻ định danh nhân viên, chìa khóa tủ thuốc và sổ nhật ký camera bên trong từng khoa phòng.

Khi một bệnh nhân (Client) đến quầy tiếp nhận (Nginx Reverse Proxy), nhân viên lễ tân chỉ có thẻ ra vào sảnh chính (www-data) và chuyển hồ sơ bệnh án qua cửa sổ nội bộ cho bác sĩ khám bệnh (Gunicorn App chạy dưới tài khoản appsvc). Bác sĩ khám bệnh lại gửi phiếu yêu cầu xét nghiệm cho kho lưu trữ hồ sơ y tế (PostgreSQL Database chạy dưới tài khoản postgres). Mỗi người chỉ giữ đúng chiếc chìa khóa mở ngăn tủ thuộc phận sự của mình (Nguyên tắc Đặc quyền Tối thiểu — Least Privilege), và mọi lần quẹt thẻ mở cửa đều được ghi nhận tự động vào hộp đen an ninh kèm giờ quốc tế UTC (Windows Event Logs / Linux journald).

5Cơ chế và định nghĩa chính xác

5.1Mô hình Quyền hạn POSIX, Cờ Đặc biệt (SUID/SGID) và Cô lập Dịch vụ systemd trên Linux

Trên hệ điều hành Linux (F01-linux-srv — 192.168.56.20), mọi tiến trình dịch vụ và tệp tin đều chịu sự chi phối của *Kiểm soát Truy cập Tự định (POSIX Discretionary Access Control — DAC) kết hợp với các cơ chế thu hẹp khả năng của nhân hệ điều hành (Linux Capabilities & systemd Sandboxing) [8] [9] . Mỗi tiến trình đang chạy mang hai nhóm định danh cốt lõi: Định danh Thực (Real UID/GID — ureal,grealu_{\text{real}}, g_{\text{real}}) cho biết ai là người khởi chạy tiến trình, và Định danh Hiệu lực (Effective UID/GID — ueff,geffu_{\text{eff}}, g_{\text{eff}})* là con số duy nhất mà nhân Linux dùng để quyết định cấp hay từ chối quyền truy cập tài nguyên.

Mỗi đối tượng tệp hoặc thư mục ff lưu trữ một vector siêu dữ liệu bảo mật gồm chủ sở hữu ufu_f, nhóm sở hữu gfg_f, và 12 bit chế độ phân quyền được chia thành 4 nhóm bát phân (octal digits): 3 bit đặc biệt (bsuid,bsgid,bsticky)\left(b_{\text{suid}}, b_{\text{sgid}}, b_{\text{sticky}}\right) có giá trị trọng số (4,2,1)(4, 2, 1) ở hàng nghìn, cùng 3 bộ bit quyền hạn Đọc (r=4r=4), Ghi (w=2w=2), Thực thi (x=1x=1) dành cho Chủ sở hữu (MuserM_{\text{user}}), Nhóm (MgroupM_{\text{group}}) và Người khác (MotherM_{\text{other}}) [10] . Khi một tiến trình có định danh hiệu lực (ueff,Geff)\left(u_{\text{eff}}, G_{\text{eff}}\right) yêu cầu tập thao tác R⊆{r,w,x}R \subseteq \{r, w, x\} trên tệp ff, hàm quyết định cấp quyền của nhân hệ điều hành APOSIX(ueff,Geff,f,R)\mathcal{A}_{\text{POSIX}}(u_{\text{eff}}, G_{\text{eff}}, f, R) được xác định theo thứ tự ưu tiên loại trừ nghiêm ngặt (không cộng dồn):

APOSIX(ueff,Geff,f,R)={1,neˆˊu ueff=0∧(R≠{x}∨(Muser∪Mgroup∪Mother)∩{x}≠∅)I(R⊆Muser),neˆˊu ueff=uf∧ueff≠0I(R⊆Mgroup),neˆˊu ueff≠uf∧gf∈GeffI(R⊆Mother),neˆˊu ueff≠uf∧gf∉Geff\mathcal{A}_{\text{POSIX}}\left(u_{\text{eff}}, G_{\text{eff}}, f, R\right) = \begin{cases} 1, & \text{nếu } u_{\text{eff}} = 0 \land \left(R \neq \{x\} \lor \left(M_{\text{user}} \cup M_{\text{group}} \cup M_{\text{other}}\right) \cap \{x\} \neq \emptyset\right) \\ \mathbb{I}\left(R \subseteq M_{\text{user}}\right), & \text{nếu } u_{\text{eff}} = u_f \land u_{\text{eff}} \neq 0 \\ \mathbb{I}\left(R \subseteq M_{\text{group}}\right), & \text{nếu } u_{\text{eff}} \neq u_f \land g_f \in G_{\text{eff}} \\ \mathbb{I}\left(R \subseteq M_{\text{other}}\right), & \text{nếu } u_{\text{eff}} \neq u_f \land g_f \notin G_{\text{eff}} \end{cases}
(1)

Phương trình Eq. (1) làm sáng tỏ ba cơ chế kỹ thuật mà mọi Technical Lead phải kiểm tra khi đọc baseline Linux: 1. Quy tắc khớp bậc thang không cộng dồn: Nhân Linux kiểm tra lần lượt từ User →\rightarrow Group →\rightarrow Other. Nếu một tiến trình khớp với chủ sở hữu tệp (ueff=ufu_{\text{eff}} = u_f), nhân chỉ xét duy nhất tập quyền MuserM_{\text{user}} và dừng lại ngay (kể cả khi Muser=∅M_{\text{user}} = \emptyset và Mother={r,w,x}M_{\text{other}} = \{r,w,x\}, chủ sở hữu vẫn bị từ chối truy cập). 2. Tác động chuyển đổi định danh của bit SUID (04000) và SGID (02000): Khi tiến trình gọi hàm hệ thống execve() trên một tệp thực thi có bật bit SUID (bsuid=1b_{\text{suid}} = 1), nhân Linux lập tức gán định danh hiệu lực của tiến trình mới bằng chủ sở hữu của tệp đó (ueff←ufu_{\text{eff}} \leftarrow u_f). Nếu uf=0u_f = 0 (root) và tệp thực thi cho phép người dùng thường sửa đổi hoặc gọi shell con, đây là con đường leo thang đặc quyền trực tiếp [13] . 3. Đóng hộp dịch vụ bằng systemd và Linux Capabilities: Để ngăn chặn rủi ro một dịch vụ mạng bị xâm nhập có thể lạm dụng tệp SUID hoặc đọc dữ liệu của dịch vụ khác, các đơn vị dịch vụ hiện đại (/etc/systemd/system/*.service) áp dụng các chỉ thị khóa cứng ở tầng nhân [9] [11] [12] : - User= và Group=: Buộc tiến trình chạy dưới tài khoản phi đặc quyền riêng biệt (ví dụ www-data cho Nginx, appsvc cho Gunicorn, postgres cho PostgreSQL). - NoNewPrivileges=yes: Khóa chặt cờ PR_SET_NO_NEW_PRIVS trong nhân Linux, vô hiệu hóa hoàn toàn khả năng nâng quyền qua bất kỳ tệp SUID/SGID hay File Capabilities nào. - ProtectSystem=strict và ProtectHome=yes: Gắn kết (mount) toàn bộ cây thư mục hệ thống /usr, /boot, /etc ở chế độ chỉ đọc (read-only) và ẩn hoàn toàn /home, /root đối với không gian tên (mount namespace) của dịch vụ. - CapabilityBoundingSet=: Thu hồi các năng lực hạt nhân nguy hiểm (như CAP_SYS_ADMIN, CAP_NET_RAW, CAP_DAC_OVERRIDE), chỉ giữ lại đúng năng lực tối thiểu (ví dụ CAP_NET_BIND_SERVICE cho phép Nginx gắn vào cổng < 1024 mà không cần chạy dưới quyền root).

5.2Kiến trúc Dịch vụ Windows (SCM), Tài khoản Dịch vụ và Mô hình Kiểm soát Truy cập (Access Token & DACL)

Trong khi Linux quản lý dịch vụ qua systemd và định danh số học UID/GID, hệ điều hành Windows Server (F01-win-trial — 192.168.56.30) quản lý các tiến trình nền thông qua *Trình điều khiển Dịch vụ (Service Control Manager — SCM, services.exe)* và mô hình bảo mật dựa trên đối tượng của nhân Windows NT [4] . Mọi cấu hình dịch vụ được lưu trữ bền vững trong nhánh Registry HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>, bao gồm đường dẫn tệp thực thi (ImagePath), chế độ khởi động (Start: 2 = Auto, 3 = Demand/Manual, 4 = Disabled), và tài khoản khởi chạy (ObjectName).

Khi SCM khởi chạy một dịch vụ, hệ thống xác thực cục bộ (LSASS) tạo ra một *Thẻ bài Truy cập (Access Token) gắn vào tiến trình dịch vụ. Access Token này chứa Mã định danh Bảo mật (Security Identifier — SID) của tài khoản dịch vụ, danh sách SID của các nhóm mà tài khoản đó trực thuộc, và danh sách Đặc quyền Hệ thống (Privileges*, ví dụ SeDebugPrivilege, SeImpersonatePrivilege, SeBackupPrivilege). Bốn loại tài khoản dịch vụ tiêu chuẩn trên Windows có ranh giới đặc quyền hoàn toàn khác nhau [4] [14] : - LocalSystem (NT AUTHORITY\System, SID S-1-5-18): Mức đặc quyền cao nhất trên máy chủ cục bộ (tương đương và thậm chí rộng hơn root vì có quyền truy cập nhân hệ điều hành và đồng thời sử dụng định danh tài khoản máy tính DOMAIN\ComputerName$ khi giao tiếp qua mạng SMB/RPC). - NetworkService (NT AUTHORITY\NetworkService, SID S-1-5-20): Tài khoản có đặc quyền cục bộ tối thiểu (tương đương người dùng thường Users), nhưng vẫn được phép sử dụng thông tin xác thực của máy tính khi kết nối ra mạng. - LocalService (NT AUTHORITY\LocalService, SID S-1-5-19):* Tài khoản có đặc quyền cục bộ tối thiểu và khi kết nối ra mạng chỉ sử dụng phiên ẩn danh (Anonymous session), giúp cô lập hoàn toàn khả năng lây lan ngang (lateral movement*). - *Tài khoản Dịch vụ Ảo (Virtual Service Account, NT SERVICE\<ServiceName>) và Group Managed Service Account (gMSA):* Mỗi dịch vụ có một SID riêng biệt (S-1-5-80-...), cho phép cấp quyền NTFS DACL chính xác cho từng dịch vụ đơn lẻ mà không cần quản lý mật khẩu thủ công.

Để lượng hóa rủi ro cấu hình sai của một tập hợp các dịch vụ S\mathcal{S} trên máy chủ (cả Windows và Linux), nếu gọi ω(s)∈[0,1]\omega(s) \in [0, 1] là trọng số đặc quyền của tài khoản chạy dịch vụ ss (ví dụ ω=1.0\omega = 1.0 cho LocalSystem/root, ω=0.5\omega = 0.5 cho tài khoản dịch vụ chia sẻ, ω=0.1\omega = 0.1 cho tài khoản dịch vụ cô lập có bật NoNewPrivileges / Virtual Account), εnet(s)∈{0,1}\varepsilon_{\text{net}}(s) \in \{0, 1\} là chỉ báo dịch vụ có mở socket ra mạng ngoài hay không, và μacl(s)∈{0,1}\mu_{\text{acl}}(s) \in \{0, 1\} là chỉ báo tệp thực thi, tệp cấu hình hoặc khóa Registry của dịch vụ có cho phép tài khoản phi đặc quyền sửa đổi (Weak File/Service DACL hoặc Unquoted Service Path) hay không, thì *Chỉ số Phơi nhiễm Đặc quyền Dịch vụ (Service Privilege Exposure Index — Ipriv\mathcal{I}_{\text{priv}})* của dịch vụ ss được xác định bởi:

Ipriv(s)=ω(s)×(1+α⋅εnet(s)+β⋅μacl(s))\mathcal{I}_{\text{priv}}(s) = \omega(s) \times \left( 1 + \alpha \cdot \varepsilon_{\text{net}}(s) + \beta \cdot \mu_{\text{acl}}(s) \right)
(2)

Trong phương trình Eq. (2) (với các hệ số khuếch đại rủi ro α=1,β=2\alpha = 1, \beta = 2), một dịch vụ chỉ trở thành điểm yếu nghiêm trọng khi có sự giao thoa giữa đặc quyền cao (ω(s)\omega(s) lớn) và lỗi phân quyền kiểm soát truy cập (μacl(s)=1\mu_{\text{acl}}(s) = 1) hoặc phơi bày trực tiếp ra mạng (εnet(s)=1\varepsilon_{\text{net}}(s) = 1). Điều này giải thích tại sao một dịch vụ hệ thống chạy dưới quyền LocalSystem (ω=1.0\omega = 1.0) nhưng không mở cổng mạng (εnet=0\varepsilon_{\text{net}} = 0) và có DACL khóa chặt chỉ cho TrustedInstaller/SYSTEM ghi (μacl=0\mu_{\text{acl}} = 0) là hoàn toàn bình thường trong baseline của hệ điều hành, không phải là lỗ hổng bảo mật.

5.3Đối chiếu Nhật ký Sự kiện Bảo mật: Windows Event Logs (EVTX) và Linux journald / syslog

Một đường cơ sở hệ điều hành không thể tách rời khỏi *Đường cơ sở Nhật ký Kiểm toán (Audit & Telemetry Baseline*). Theo hướng dẫn quản lý nhật ký an toàn thông tin của NIST SP 800-92 [2] và các nghiên cứu về phát hiện xâm nhập qua Windows Event Logs của Fujimoto và cộng sự [15] , Visoottiviseth và cộng sự [17] [18] cùng Devabhaktuni và cộng sự [16] , mọi tương tác xác thực, khởi tạo tiến trình hoặc thay đổi dịch vụ đều để lại dấu vết có cấu trúc trên cả hai hệ điều hành: - Trên Windows (F01-win-trial — .30): Dịch vụ Windows Event Log (EventLog) ghi nhận sự kiện dưới định dạng nhị phân XML (.evtx) tại %SystemRoot%\System32\Winevt\Logs\, chia thành 3 kênh cốt lõi (Security, System, Application) và các kênh chuyên biệt (Applications and Services Logs, như Microsoft-Windows-PowerShell/Operational Event ID 4104 [21] [20] ): - Security Event ID 4624 (An account was successfully logged on): Ghi rõ Logon Type (ví dụ Type 3 = Network Logon qua SMB/RPC từ .10; Type 5 = Service Startup bởi SCM; Type 10 = RemoteInteractive qua RDP), tên tài khoản, SID và địa chỉ IP nguồn. - Security Event ID 4625 (An account failed to log on): Ghi nhận mọi nỗ lực đăng nhập thất bại kèm mã nguyên nhân (Status / SubStatus), là chỉ báo trực tiếp để phát hiện hành vi dò mật khẩu trái phép. - Security Event ID 4672 (Special privileges assigned to new logon): Xuất hiện ngay cạnh 4624 khi phiên đăng nhập được cấp các đặc quyền nhạy cảm tương đương quản trị viên (SeDebugPrivilege, SeTakeOwnershipPrivilege, SeImpersonatePrivilege) [15] [19] . - Security Event ID 4688 (A new process has been created):* Ghi nhận tiến trình mới khởi chạy kèm dòng lệnh đầy đủ (Command Line Auditing*) và SID của tiến trình cha. - System Event ID 7045 (A service was installed in the system) & 7036 (Service state changed): Bằng chứng kiểm toán quan trọng nhất để phát hiện việc cài đặt dịch vụ mới hoặc dừng dịch vụ bảo vệ trong quá trình kiểm thử. - Trên Linux (F01-linux-srv — .20): Hệ thống systemd-journald thu thập toàn bộ luồng đầu ra chuẩn (stdout/stderr) và thông điệp syslog của từng đơn vị dịch vụ kèm siêu dữ liệu xác thực từ nhân (_PID, _UID, _SYSTEMD_UNIT), đồng thời chuyển tiếp các sự kiện xác thực (PAM, sshd, sudo) vào /var/log/auth.log và nhật ký truy cập ứng dụng vào /var/log/nginx/access.log cùng /var/log/postgresql/ [9] .

5.4Mô hình hóa Luồng Ứng dụng Đầu-Cuối Client → Proxy → App → DB và Khung Rà soát của Technical Lead

Kết hợp dữ liệu mạng từ W01-L01..L04 với dữ liệu hệ điều hành của bài học này, chúng ta xây dựng được *Mô hình Luồng Ứng dụng Xuyên Tầng (Cross-Layer Application & Identity Data Flow) cho kiến trúc Client → Proxy → App → DB. Thay vì chỉ nhìn thấy các địa chỉ IP và số cổng, Technical Lead theo dõi sự chuyển đổi của cả 3 chiều thông tin* tại mỗi bước nhảy: (1) Giao thức & Cổng Socket, (2) Định danh Tiến trình & Quyền Hệ điều hành (UID/GID hoặc SID), và (3) Dấu vết Nhật ký phát sinh trên từng tầng [3] [24] . Toàn bộ luồng chuyển tiếp này được mô hình hóa chi tiết trong sơ đồ Figure 1 :

3. Máy chủ Hạ tầng Windows — F01-win-trial (192.168.56.30)
2. Máy chủ Ứng dụng Đa tầng — F01-linux-srv (192.168.56.20)
1. Tầng Client Kiểm thử — F01-tester (192.168.56.10)
Tầng 2a: Reverse Proxy (DMZ / Edge Service)
Tầng 2b: Application Worker (Loopback Isolated)
Tầng 2c: Relational Database (Data Tier)
Bước 1: HTTPS TLS 1.3 (GET /api/v1/health)
Qua ranh giới mạng 192.168.56.0/24
Bước 2: HTTP/1.1 Proxy Pass (127.0.0.1:8080)
Chèn X-Forwarded-For & X-Request-ID
Bước 3: PostgreSQL Wire Protocol (127.0.0.1:5432)
Xác thực scram-sha-256 (DB role: app_reader)
Bước 4: Kiểm tra Baseline SMB/RPC có kiểm soát
Tài khoản: win_lab_reader
Service: LanmanServer (SMB :445) & RpcSs (:135)
Identity: NT AUTHORITY\\System / NetworkService
Share ACL & NTFS DACL Check
Telemetry: Security.evtx (4624, 4625, 4672) & System.evtx (7036, 7045)
Service: postgresql@16-main.service
User/Group: postgres (UID 114)
Listen: 127.0.0.1:5432 & /run/postgresql/.s.PGSQL.5432
Data: /var/lib/postgresql/16/main (0700 postgres:postgres)
Log: /var/log/postgresql/postgresql-16-main.log
Service: app-gunicorn.service
User/Group: appsvc (UID 994, NoNewPrivileges=yes)
Listen: 127.0.0.1:8080 (ProtectSystem=strict)
Code: /opt/corp-app/ (0750 root:app-svc)
Log: journalctl -u app-gunicorn.service
Service: nginx.service
User/Group: www-data (UID 33)
Listen: 0.0.0.0:443 (CAP_NET_BIND_SERVICE)
Config: /etc/nginx/sites-enabled/app.conf (0640 root:www-data)
Log: /var/log/nginx/access.log + journald
Tiến trình: curl / Browser
User: lab_auditor (UID 1001)
Ephemeral Port: 192.168.56.10:52410
Mermaid Source
flowchart TB
    subgraph ClientTier["1. Tầng Client Kiểm thử — F01-tester (192.168.56.10)"]
        Tester["Tiến trình: curl / Browser<br/>User: lab_auditor (UID 1001)<br/>Ephemeral Port: 192.168.56.10:52410"]
    end

    subgraph LinuxHost["2. Máy chủ Ứng dụng Đa tầng — F01-linux-srv (192.168.56.20)"]
        subgraph ProxyTier["Tầng 2a: Reverse Proxy (DMZ / Edge Service)"]
            Nginx["Service: nginx.service<br/>User/Group: www-data (UID 33)<br/>Listen: 0.0.0.0:443 (CAP_NET_BIND_SERVICE)<br/>Config: /etc/nginx/sites-enabled/app.conf (0640 root:www-data)<br/>Log: /var/log/nginx/access.log + journald"]
        end

        subgraph AppTier["Tầng 2b: Application Worker (Loopback Isolated)"]
            Gunicorn["Service: app-gunicorn.service<br/>User/Group: appsvc (UID 994, NoNewPrivileges=yes)<br/>Listen: 127.0.0.1:8080 (ProtectSystem=strict)<br/>Code: /opt/corp-app/ (0750 root:app-svc)<br/>Log: journalctl -u app-gunicorn.service"]
        end

        subgraph DBTier["Tầng 2c: Relational Database (Data Tier)"]
            Postgres["Service: postgresql@16-main.service<br/>User/Group: postgres (UID 114)<br/>Listen: 127.0.0.1:5432 & /run/postgresql/.s.PGSQL.5432<br/>Data: /var/lib/postgresql/16/main (0700 postgres:postgres)<br/>Log: /var/log/postgresql/postgresql-16-main.log"]
        end
    end

    subgraph WinHost["3. Máy chủ Hạ tầng Windows — F01-win-trial (192.168.56.30)"]
        WinSMB["Service: LanmanServer (SMB :445) & RpcSs (:135)<br/>Identity: NT AUTHORITY\\System / NetworkService<br/>Share ACL & NTFS DACL Check<br/>Telemetry: Security.evtx (4624, 4625, 4672) & System.evtx (7036, 7045)"]
    end

    Tester -->|"Bước 1: HTTPS TLS 1.3 (GET /api/v1/health)<br/>Qua ranh giới mạng 192.168.56.0/24"| Nginx
    Nginx -->|"Bước 2: HTTP/1.1 Proxy Pass (127.0.0.1:8080)<br/>Chèn X-Forwarded-For & X-Request-ID"| Gunicorn
    Gunicorn -->|"Bước 3: PostgreSQL Wire Protocol (127.0.0.1:5432)<br/>Xác thực scram-sha-256 (DB role: app_reader)"| Postgres
    Tester -.->|"Bước 4: Kiểm tra Baseline SMB/RPC có kiểm soát<br/>Tài khoản: win_lab_reader"| WinSMB
Figure 1: Sơ đồ Luồng Ứng dụng, Chuyển tiếp Định danh Tiến trình và Nhật ký Kiểm toán Đầu-Cuối (Client → Proxy → App → DB)

6Ví dụ có lời giải: Kiểm toán Đường cơ sở Hai Hệ điều hành và Truy vết Luồng Yêu cầu Đầu-Cuối

Trong ví dụ có lời giải này, chúng ta thực hiện kiểm toán song song trên hai máy chủ mục tiêu của Safe Lab F01 là F01-linux-srv (192.168.56.20) và F01-win-trial (192.168.56.30), sau đó gửi một yêu cầu kiểm thử có gắn mã định danh truy vết X-Correlation-ID: F01-TRACE-001 từ F01-tester (192.168.56.10) để quan sát cách yêu cầu đi qua toàn bộ chuỗi Client → Proxy → App → DB và để lại dấu vết trên từng hệ điều hành.

Bảng tổng hợp kết quả kiểm toán đường cơ sở dịch vụ, định danh tiến trình, quyền tệp tin và mã sự kiện nhật ký trên cả hai máy chủ được trình bày tại Table 1 :

Table 1: Bảng Đối chiếu Đường cơ sở Dịch vụ, Quyền hạn Hệ điều hành và Dấu vết Nhật ký trên F01-linux-srv (.20) và F01-win-trial (.30)
Thành phần & Máy chủĐơn vị Dịch vụ (Unit / Service Name)Định danh Thực thi (User / Group / SID)Quyền Tệp thực thi & Cấu hình (DACL / Mode)Cơ chế Cô lập & Ranh giới SocketDấu vết Nhật ký Kiểm toán (Log / Event ID)
Tầng Proxy — .20 (Linux)nginx.servicewww-data:www-data (UID=33, GID=33)/usr/sbin/nginx (0755 root:root); /etc/nginx/nginx.conf (0644 root:root)0.0.0.0:443 (CAP_NET_BIND_SERVICE); không có quyền đọc mã nguồn /opt/corp-app/var/log/nginx/access.log (ghi nhận F01-TRACE-001, HTTP 200) & journalctl -u nginx
Tầng App — .20 (Linux)app-gunicorn.serviceapp-svc:app-svc (UID=994, GID=994)/opt/corp-app/wsgi.py (0640 root:app-svc); /etc/corp-app/env.conf (0640 root:app-svc)127.0.0.1:8080; bật NoNewPrivileges=yes, ProtectSystem=strict, PrivateTmp=yesjournalctl -u app-gunicorn.service (ghi nhận worker PID xử lý F01-TRACE-001)
Tầng DB — .20 (Linux)postgresql@16-main.servicepostgres:postgres (UID=114, GID=120)/var/lib/postgresql/16/main (0700 postgres:postgres); pg_hba.conf (0640 postgres:postgres)127.0.0.1:5432 (scram-sha-256 bắt buộc); cô lập hoàn toàn khỏi www-data/var/log/postgresql/postgresql-16-main.log (ghi nhận kết nối từ 127.0.0.1 bởi role app_reader)
Tầng DNS — .20 (Linux)unbound.serviceunbound:unbound (UID=112, GID=118)/etc/unbound/unbound.conf (0644 root:root)192.168.56.20:53; ProtectHome=yes, CapabilityBoundingSet=CAP_NET_BIND_SERVICEjournalctl -u unbound.service
Tầng SMB — .30 (Windows)LanmanServer (Server)NT AUTHORITY\System (S-1-5-18)C:\Windows\System32\svchost.exe -k netsvcs (Chỉ TrustedInstaller & SYSTEM có quyền Modify)0.0.0.0:445; yêu cầu xác thực NTLMv2/Kerberos, ẩn chia sẻ quản trị với tài khoản thườngSecurity.evtx Event ID 4624 (LogonType=3 từ 192.168.56.10, tài khoản win_lab_reader)
Tầng RPC — .30 (Windows)RpcSs (Remote Procedure Call)NT AUTHORITY\NetworkService (S-1-5-20)C:\Windows\System32\svchost.exe -k rpcss (DACL chuẩn của hệ điều hành, không có Unquoted Path)0.0.0.0:135; chạy dưới quyền tối thiểu NetworkService (ω=0.3,μacl=0\omega = 0.3, \mu_{\text{acl}} = 0)System.evtx Event ID 7036 (Trạng thái Running ổn định từ lúc khởi động snapshot)

Phân tích bảng Table 1 cho phép chúng ta rút ra ba kết luận quan trọng đưa vào báo cáo OS-baseline-and-flow.md: 1. Sự tách biệt đặc quyền theo chiều dọc trên .20 hoạt động đúng thiết kế: Ngay cả khi tầng Nginx (www-data, UID=33) bị khai thác lỗi đọc tệp, tiến trình www-data vẫn bị chặn hoàn toàn khi cố truy cập thư mục mã nguồn ứng dụng /opt/corp-app (0750 root:app-svc — theo phương trình Eq. (1) , vì 33≠033 \neq 0, 33≠uf33 \neq u_f và 33∉Gapp-svc33 \notin G_{\text{app-svc}}, nhân áp dụng Mother=∅M_{\text{other}} = \emptyset) cũng như thư mục dữ liệu PostgreSQL /var/lib/postgresql/16/main (0700 postgres:postgres). 2. Phát hiện điểm cần cải tiến cấu hình (Hardening Opportunity) trên .20: Tệp cấu hình môi trường /etc/corp-app/env.conf đang chứa chuỗi kết nối cơ sở dữ liệu ở dạng văn bản rõ (quyền 0640 root:app-svc). Mặc dù đã giới hạn chỉ nhóm app-svc đọc được, khuyến nghị chuẩn doanh nghiệp là chuyển sang nạp thông tin xác thực qua cơ chế LoadCredentialEncrypted= của systemd hoặc sử dụng xác thực socket cục bộ (peer authentication) để loại bỏ mật khẩu tĩnh trên đĩa. 3. Loại trừ cảnh báo giả trên .30: Công cụ quét cấu hình có thể liệt kê dịch vụ LanmanServer chạy dưới quyền LocalSystem (ω=1.0\omega = 1.0), nhưng kiểm tra icacls xác nhận tệp thực thi và khóa Registry hoàn toàn không cho phép người dùng thường chỉnh sửa (μacl=0\mu_{\text{acl}} = 0), đồng thời Event ID 4624 và 4672 xác nhận tài khoản kiểm thử win_lab_reader không hề được cấp đặc quyền quản trị (Special Privileges) khi đăng nhập qua mạng.

7Tự làm tiếp: Viết Kịch bản Kiểm toán Quyền Dịch vụ và Lọc Nhật ký Sự kiện Đa Nền tảng

Bài tập thực hành: Bạn cần hoàn thiện hai đoạn mã kiểm toán nhanh (một trên Bash cho Linux .20 và một trên PowerShell cho Windows .30) để: (1) Tìm kiếm toàn bộ các tệp thực thi có bật cờ SUID hoặc SGID trên hệ thống tệp cục bộ mà không đi lạc sang các hệ thống tệp ảo; (2) Kiểm tra các chỉ thị đóng hộp bảo mật của dịch vụ app-gunicorn.service; và (3) Trích xuất 10 sự kiện đăng nhập thành công (Event ID 4624) gần nhất từ kênh Security trên Windows. Hãy điền các tham số còn khuyết ___ vào khung mã dưới đây:

Phần A (Linux Bash): Quét kiểm toán tệp SUID/SGID và kiểm tra thuộc tính đóng hộp systemd (bash)
1# 1. Tìm tất cả các tệp thông thường (-type f) có bật bit SUID (4000) hoặc SGID (2000) trên filesystem hiện tại (-xdev)
2sudo find / -xdev -type f ___ /6000 -printf "%m %u:%g %p\n" 2>/dev/null | sort
3
4# 2. Truy vấn trực tiếp cấu hình User, Group, NoNewPrivileges và ProtectSystem của dịch vụ Gunicorn
5systemctl ___ app-gunicorn.service -p User,Group,NoNewPrivileges,ProtectSystem,CapabilityBoundingSet
Phần B (Windows PowerShell): Kiểm toán dịch vụ chạy quyền System và lọc Event ID 4624 (powershell)
1# 3. Liệt kê các dịch vụ đang ở trạng thái Running và chạy dưới tài khoản LocalSystem
2Get-CimInstance -ClassName ___ |
3 Where-Object { $_.State -eq "Running" -and $_.StartName -match "LocalSystem" } |
4 Select-Object Name, StartMode, StartName, PathName
5
6# 4. Trích xuất 10 bản ghi Event ID 4624 gần nhất từ kênh nhật ký Security
7Get-WinEvent -FilterHashtable @{ LogName = '___'; Id = 4624 } -MaxEvents 10 |
8 Select-Object TimeCreated, Id, Message

8Hiểu lầm thường gặp khi Đánh giá Quyền hạn Hệ điều hành và Nhật ký Sự kiện

Hiểu lầm 1: Mọi tệp có quyền rwxrwxrwx (0777) hoặc cờ SUID đều là lỗ hổng leo thang đặc quyềnFalse Positive Kinh điển
Khi chạy find / -perm -4000 hoặc ls -la, người mới thường báo cáo hàng loạt liên kết mềm (lrwxrwxrwx) và các tệp chuẩn của hệ điều hành như /usr/bin/passwd, /usr/bin/sudo, /usr/lib/dbus-1.0/dbus-daemon-launch-helper là lỗ hổng. Thực tế: Quyền của symlink không có hiệu lực bảo mật (nhân chỉ xét tệp đích), còn các tệp SUID chuẩn của hệ điều hành chỉ nguy hiểm khi nằm trong danh sách khai thác được (GTFOBins) và người dùng thường được phép gọi với tham số không bị hạn chế hoặc phiên bản gói bị lỗi CVE chưa vá [13] .
Hiểu lầm 2: Dịch vụ Windows chạy dưới quyền LocalSystem luôn là lỗi cấu hình phải hạ quyền ngaySai lầm Kiến trúc OS
Nhiều báo cáo kiểm thử tự động đánh dấu mọi dịch vụ chạy dưới NT AUTHORITY\System là mức High. Thực tế: Hàng chục dịch vụ cốt lõi của nhân và hệ điều hành Windows (LanmanServer, Schedule, WinDefend, EventLog, LSM) bắt buộc phải chạy dưới LocalSystem để quản lý phần cứng và cấp phát token. Lỗi chỉ tồn tại khi dịch vụ của bên thứ ba không cần quyền cao mà vẫn dùng LocalSystem, hoặc khi tệp thực thi / thư mục cài đặt / khóa Registry của dịch vụ đó cho phép nhóm Users hoặc Authenticated Users quyền ghi (Modify/Write) [4] [14] .
Hiểu lầm 3: Chỉ cần xem log của Nginx là đủ để biết điều gì đã xảy ra trong ứng dụng và cơ sở dữ liệuĐiểm mù Truy vết
Nhật ký /var/log/nginx/access.log ở tầng Reverse Proxy chỉ ghi lại URI, mã trạng thái HTTP (200, 403, 500) và kích thước phản hồi ở ranh giới ngoài. Nếu một yêu cầu hợp lệ về mặt cú pháp HTTP kích hoạt lỗi logic nghiệp vụ ở tầng Gunicorn (127.0.0.1:8080) hoặc truy vấn trái phép ở tầng PostgreSQL (127.0.0.1:5432), Nginx vẫn chỉ ghi nhận mã 200 OK. Do đó bắt buộc phải đối chiếu nhật ký xuyên cả 3 tầng qua nhãn thời gian UTC và X-Request-ID / X-Correlation-ID [2] .
Hiểu lầm 4: Event ID 4624 trên Windows luôn có nghĩa là có người vừa ngồi trước màn hình đăng nhậpNhầm lẫn Logon Type
Không ít học viên hoảng hốt khi thấy hàng trăm bản ghi Event ID 4624 xuất hiện mỗi phút trong Security.evtx. Thực tế: Ý nghĩa của 4624 phụ thuộc hoàn toàn vào trường Logon Type: Type 2 mới là đăng nhập trực tiếp tại bàn phím (Interactive), Type 3 là kết nối qua mạng (SMB/RPC/WinRM), Type 5 là dịch vụ hệ thống khởi động, và Type 10 là đăng nhập qua Remote Desktop (RDP). Bỏ qua trường Logon Type sẽ dẫn đến kết luận hoàn toàn sai lệch trong điều tra số [15] [20] .

9Nhìn tổng quan: Ma trận Tương đương Bảo mật Linux ↔ Windows và Phân tầng Tài khoản Dịch vụ

Để giúp Technical Lead chuyển đổi tư duy kiểm toán mượt mà giữa hai hệ điều hành trong môi trường doanh nghiệp hỗn hợp (Hybrid Linux/Windows Enterprise), bảng Table 2 ánh xạ trực tiếp từng khái niệm định danh, phân quyền, quản lý dịch vụ và nhật ký kiểm toán giữa Linux và Windows:

Table 2: Ma trận Đối chiếu Tương đương Kiến trúc Bảo mật, Dịch vụ và Nhật ký giữa Linux (Ubuntu/RHEL) và Windows Server
Khía cạnh Kiểm toán BaselineHệ điều hành Linux (F01-linux-srv .20)Hệ điều hành Windows Server (F01-win-trial .30)Lệnh Thu thập Chuẩn Không Xâm lấn (Read-Only Baseline)
Định danh Tối cao & Người dùngUID 0 (root), System UIDs (1..999), Regular UIDs (>=1000); lưu tại /etc/passwd, /etc/groupSID S-1-5-18 (LocalSystem), S-1-5-32-544 (Administrators), Local Users (SAM); lưu trong Registry SAMLinux: id, getent passwd, getent group<br/>Windows: whoami /all, Get-LocalUser, Get-LocalGroupMember
Kiểm soát Truy cập Tệp tin (File ACL)POSIX Mode Bits (rwxr-xr-x), Special Bits (SUID/SGID/Sticky), POSIX Extended ACL (getfacl)NTFS Discretionary Access Control List (DACL) gồm các ACE (FullControl, Modify, ReadAndExecute)Linux: stat -c "%a %U:%G %n", getfacl<br/>Windows: Get-Acl, icacls.exe <path>
Quản lý Dịch vụ & Tiến trình Nềnsystemd (PID 1), đơn vị cấu hình /lib/systemd/system/*.service và /etc/systemd/system/Service Control Manager (services.exe), khóa Registry HKLM\SYSTEM\CurrentControlSet\Services\Linux: systemctl list-units --type=service, systemctl show<br/>Windows: Get-CimInstance Win32_Service, sc.exe qc
Cơ chế Cô lập Dịch vụ (Sandboxing)NoNewPrivileges=yes, ProtectSystem=strict, PrivateTmp=yes, CapabilityBoundingSet, AppArmor/SELinuxVirtual Service Accounts (NT SERVICE\*), Service SIDs, Restricted Tokens, Windows Service HardeningLinux: systemd-analyze security <unit><br/>Windows: sc.exe qsidtype <svc>, sc.exe qprivs <svc>
Nhật ký Xác thực & Khởi tạo Dịch vụsystemd-journald (/run/log/journal, /var/log/journal), /var/log/auth.log, auditd (/var/log/audit/audit.log)Windows Event Log (.evtx): Security (4624, 4625, 4672, 4688), System (7036, 7045), PowerShell (4104)Linux: journalctl -u <unit> --utc, ausearch<br/>Windows: Get-WinEvent -FilterHashtable @{LogName=...}

Song song với bảng ánh xạ tương đương tại Table 2 , khi đánh giá các dịch vụ trên máy chủ Windows (F01-win-trial), Technical Lead cần đối chiếu mức độ cô lập của 4 nhóm tài khoản dịch vụ theo ma trận so sánh dưới đây:

So sánh 4 Mô hình Tài khoản Dịch vụ (Service Accounts) trên Windows Server theo Nguyên tắc Đặc quyền Tối thiểu
Tiêu chí Bảo mật & Kiến trúcLocalSystem (S-1-5-18)NetworkService (S-1-5-20)LocalService (S-1-5-19)Virtual Account (NT SERVICE\*) & gMSA
Mức Đặc quyền Cục bộ trên Máy chủToàn quyền tối cao (Tương đương Kernel / Hệ điều hành; có thể đọc SAM/LSASS)Tối thiểu (Chỉ tương đương nhóm người dùng chuẩn Users)Tối thiểu (Chỉ tương đương nhóm người dùng chuẩn Users)Tối thiểu và tách biệt theo đúng từng dịch vụ đơn lẻ (Service-specific SID)
Định danh Khi Kết nối Ra Mạng LAN/ADDùng tài khoản máy tính DOMAIN\ComputerName$ (Nguy cơ bị lạm dụng leo thang ngang)Dùng tài khoản máy tính DOMAIN\ComputerName$Chỉ kết nối ẩn danh (Anonymous Logon — không có quyền trên mạng)Virtual Account dùng ComputerName$; gMSA dùng định danh miền riêng có xoay vòng mật khẩu tự động
Khả năng Cô lập Giữa Các Dịch vụ Cùng LoạiKhông (Mọi dịch vụ LocalSystem chia sẻ cùng toàn bộ quyền hạn)Thấp (Các dịch vụ dùng chung NetworkService có thể truy cập tài nguyên của nhau nếu không tách SID)Thấp (Chia sẻ cùng SID S-1-5-19 giữa nhiều dịch vụ)Rất cao (Mỗi dịch vụ có ACL riêng chỉ cho phép đúng NT SERVICE\<Name> truy cập thư mục dữ liệu)
Đánh giá Rủi ro của Technical LeadRủi ro cao nhất nếu dịch vụ mở cổng mạng hoặc có lỗi phân quyền đường dẫn (Unquoted Path / Weak DACL)Chấp nhận được cho dịch vụ hệ thống cần giao tiếp RPC/SMB chuẩnAn toàn cho các dịch vụ nội bộ không cần xác thực mạngThực hành tốt nhất (Best Practice) cho các dịch vụ ứng dụng, IIS AppPool, SQL Server và tác vụ nền hiện đại

10Bài tập thực hành — Safe Lab F01: Kiểm toán Đường cơ sở Hai Hệ điều hành và Xuất bản OS-baseline-and-flow.md

Trong bài thực hành Safe Lab F01 của Ngày 5 (W01-L05 — tổng thời lượng 3.5 giờ gồm 1.0 giờ lý thuyết, 1.0 giờ thực hành lab và 1.5 giờ quản trị & rà soát nhóm), học viên trực tiếp thu thập đường cơ sở dịch vụ, định danh người dùng, quyền hạn tệp tin và nhật ký sự kiện trên hai máy chủ mục tiêu F01-linux-srv (192.168.56.20) và F01-win-trial (192.168.56.30). Sau đó, học viên vận dụng phương trình phân quyền Eq. (1) , chỉ số phơi nhiễm đặc quyền Eq. (2) và sơ đồ luồng ứng dụng Figure 1 để biên soạn và rà soát chéo báo cáo chuẩn OS-baseline-and-flow.md kèm mã băm SHA256SUMS [1] [2] .

Quy trình 6 bước Thực thi Safe Lab F01 và Rà soát Chéo OS Baseline
1
Preflight và Xác nhận Khóa Phạm vi (Scope & Isolation Check)
Điền đầy đủ 16 trường lab_record_schema (lab_id=F01, environment_build_id, image_service_version, initial_snapshot_id=F01-start, test_accounts, reviewer, date_checked_utc). Xác minh mạng Host-Only 192.168.56.0/24 hoàn toàn cô lập và allowlist.txt chỉ cho phép thao tác trên 192.168.56.20 và 192.168.56.30.
2
Thu thập Đường cơ sở Linux trên F01-linux-srv (192.168.56.20)
Sử dụng tài khoản kiểm toán phi đặc quyền lab_auditor để thu thập danh sách đơn vị dịch vụ systemd, bảng người dùng/nhóm (getent passwd, getent group), quyền hạn tệp cấu hình (stat), chỉ thị đóng hộp (systemctl show cho nginx, app-gunicorn, postgresql, unbound) và nhật ký journalctl --utc [9] .
3
Thu thập Đường cơ sở Windows trên F01-win-trial (192.168.56.30)
Sử dụng PowerShell với tài khoản win_lab_reader để xuất danh sách dịch vụ từ Win32_Service (gồm StartName, StartMode, PathName), danh sách tài khoản cục bộ (Get-LocalUser), quyền truy cập thư mục thực thi (icacls), và trích xuất các sự kiện Security (4624, 4625, 4672) cùng System (7036, 7045) [4] [18] .
4
Truy vết Luồng Yêu cầu Đầu-Cuối Client → Proxy → App → DB
Gửi một yêu cầu HTTPS kiểm thử từ F01-tester (.10) mang header X-Correlation-ID: F01-TRACE-001 tới https://192.168.56.20:443/api/v1/health và đối chiếu dấu vết xuất hiện đồng thời trên nhật ký Nginx, Gunicorn và PostgreSQL theo nhãn thời gian UTC.
5
Rà soát Chất lượng Kỹ thuật (Technical QA Review) và Xuất bản OS-baseline-and-flow.md
Phân loại rõ các cấu hình đúng chuẩn (True Baseline), các cảnh báo giả (False Positives như symlink 0777, /tmp sticky bit 1777, hay dịch vụ cốt lõi của Windows chạy LocalSystem có DACL chặt) và cơ hội gia cố (Hardening Opportunities). Biên soạn tệp OS-baseline-and-flow.md đáp ứng đủ 16 trường lab_record_schema và 6 mục minimum_contents.
6
Niêm phong SHA256SUMS và Hoàn nguyên Môi trường (Cleanup)
Che mờ (redact) mọi thông tin nhạy cảm trong các tệp bằng chứng, tạo tệp kiểm tra toàn vẹn SHA256SUMS, xác nhận sha256sum -c đạt 100%, xóa tệp tạm và khôi phục mốc snapshot F01-start.
Bước 1–2: Thu thập Đường cơ sở Dịch vụ, Quyền hạn và Nhật ký trên Linux F01-linux-srv (192.168.56.20)bash
set -euo pipefail
OUT_DIR="artifacts-f01"
mkdir -p "$OUT_DIR"
umask 077
# 1. Ghi nhận nhãn thời gian UTC và kiểm tra định danh máy chủ (đã redact Machine ID)
date -u +"timestamp_utc=%Y-%m-%dT%H:%M:%SZ" > "$OUT_DIR/linux-20-meta.txt"
hostnamectl 2>/dev/null | sed -E 's/(Machine ID:|Boot ID:).*/\1 [REDACTED]/' > "$OUT_DIR/linux-20-host.txt" || true
# 2. Thu thập danh sách đơn vị dịch vụ systemd đang hoạt động và bảng định danh User/Group
systemctl list-units --type=service --state=running --no-pager > "$OUT_DIR/linux-20-systemd-services.txt"
getent passwd | cut -d: -f1,3,4,6,7 > "$OUT_DIR/linux-20-users.txt"
getent group | cut -d: -f1,3,4 > "$OUT_DIR/linux-20-groups.txt"
# 3. Kiểm toán quyền hạn tệp (stat) và các chỉ thị đóng hộp systemd trên chuỗi Proxy -> App -> DB
{
printf "=== STAT PERMISSIONS ===\n"
stat -c '%A %a %U:%G %n' \
/etc/nginx /etc/nginx/nginx.conf \
/opt/corp-app /etc/corp-app/env.conf \
/var/lib/postgresql/16/main 2>/dev/null || true
printf "\n=== SYSTEMD SANDBOXING PROPERTIES ===\n"
systemctl show nginx.service app-gunicorn.service postgresql@16-main.service unbound.service --no-pager \
-p Id -p User -p Group -p ExecStart -p NoNewPrivileges \
-p ProtectSystem -p ProtectHome -p PrivateTmp -p CapabilityBoundingSet
} > "$OUT_DIR/linux-20-permissions-and-hardening.txt"
# 4. Quét kiểm toán các tệp có bật cờ SUID/SGID trên filesystem chính
sudo find / -xdev -type f -perm /6000 -printf "%m %u:%g %p\n" 2>/dev/null | sort \
> "$OUT_DIR/linux-20-suid-sgid.txt"
# 5. Trích xuất nhật ký systemd-journald ở múi giờ UTC cho 3 tầng dịch vụ
sudo journalctl --utc --no-pager --since "1 hour ago" \
-u nginx.service -u app-gunicorn.service -u postgresql@16-main.service -o short-iso-precise \
> "$OUT_DIR/linux-20-journal.txt"
Bước 3: Thu thập Đường cơ sở Dịch vụ SCM, Tài khoản, DACL và Event Logs trên Windows F01-win-trial (192.168.56.30)powershell
$ErrorActionPreference = "Stop"
$OutDir = "C:\Lab\F01\artifacts-f01"
New-Item -ItemType Directory -Force -Path $OutDir | Out-Null
$StampUtc = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")
"timestamp_utc=$StampUtc" | Set-Content -Encoding UTF8 "$OutDir\windows-30-meta.txt"
# 1. Xuất danh sách dịch vụ Windows kèm tài khoản thực thi (StartName) và đường dẫn (PathName)
Get-CimInstance -ClassName Win32_Service |
Select-Object Name, DisplayName, State, StartMode, StartName, PathName, ProcessId |
Sort-Object Name |
Format-Table -AutoSize | Out-File -Encoding UTF8 -Width 240 "$OutDir\windows-30-services.txt"
# 2. Xuất danh sách người dùng cục bộ và thành viên nhóm Administrators
Get-LocalUser |
Select-Object Name, Enabled, PasswordRequired, PrincipalSource, SID |
Format-Table -AutoSize | Out-File -Encoding UTF8 "$OutDir\windows-30-users.txt"
Get-LocalGroupMember -Group "Administrators" |
Select-Object Name, ObjectClass, PrincipalSource, SID |
Format-Table -AutoSize | Out-File -Encoding UTF8 "$OutDir\windows-30-admins.txt"
# 3. Trích xuất sự kiện xác thực Security (4624, 4625, 4672) và sự kiện dịch vụ System (7036, 7045)
Get-WinEvent -FilterHashtable @{ LogName = "Security"; Id = 4624, 4625, 4672; StartTime = (Get-Date).AddHours(-2) } -MaxEvents 50 -ErrorAction SilentlyContinue |
Select-Object @{Name="TimeCreatedUtc";Expression={$_.TimeCreated.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")}}, Id, ProviderName, Message |
Format-List | Out-File -Encoding UTF8 "$OutDir\windows-30-security-events.txt"
Get-WinEvent -FilterHashtable @{ LogName = "System"; Id = 7036, 7045; StartTime = (Get-Date).AddDays(-7) } -MaxEvents 50 -ErrorAction SilentlyContinue |
Select-Object @{Name="TimeCreatedUtc";Expression={$_.TimeCreated.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ")}}, Id, ProviderName, Message |
Format-List | Out-File -Encoding UTF8 "$OutDir\windows-30-system-events.txt"
Bước 4–5: Xuất bản Hồ sơ OS-baseline-and-flow.md (Đủ 16 Trường Schema + 6 Mục Minimum Contents)bash
set -euo pipefail
OUT_DIR="artifacts-f01"
REPORT="$OUT_DIR/OS-baseline-and-flow.md"
cat > "$REPORT" <<'MD'
# Hồ sơ Đường cơ sở Hệ điều hành và Luồng Ứng dụng — Safe Lab F01 (`OS-baseline-and-flow.md`)
## 1. Scope và lab ID
- `lab_id`: `F01` (Tuần 1 — Ngày 5: `W01-L05`)
- `objective`: Đọc services, users, permissions và vẽ Client-Proxy-App-DB
- `environment_build_id`: `F01-20261102-BUILD05`
- `image_service_version`: `ubuntu-24.04.1-lts (nginx 1.24.0, gunicorn 21.2, postgresql 16.4)` & `win-srv-2022-eval-20348`
- `network_scope_cidr`: `192.168.56.0/24` (Allowlist khóa chặt: `192.168.56.20` và `192.168.56.30`; Excludelist: `.0, .1, .10, .255`)
- `initial_snapshot_id`: `F01-start`
- `test_accounts`: `lab_auditor` (Linux local non-privileged); `win_lab_reader` (Windows local read-only)
- `maximum_permitted_impact`: Read-only OS baseline & log inspection; không thay đổi cấu hình, không cài đặt tác tử, không khai thác
- `task`: So sánh baseline hai OS và vẽ luồng lab
- `evidence_artifacts`: `linux-20-systemd-services.txt`; `linux-20-users.txt`; `linux-20-groups.txt`; `linux-20-permissions-and-hardening.txt`; `linux-20-suid-sgid.txt`; `linux-20-journal.txt`; `windows-30-services.txt`; `windows-30-users.txt`; `windows-30-admins.txt`; `windows-30-security-events.txt`; `windows-30-system-events.txt`
- `expected_result`: Xác định rõ danh tính tiến trình, quyền hạn tệp tin, trạng thái đóng hộp dịch vụ, mã sự kiện nhật ký trên cả hai OS và mô tả đầy đủ luồng Client -> Proxy -> App -> DB
- `actual_result`: Đã thu thập và đối chiếu thành công 100% đường cơ sở trên `.20` và `.30`; xác nhận sự phân tách đặc quyền giữa `www-data` -> `app-svc` -> `postgres` trên `.20` và ranh giới `LocalSystem` / `NetworkService` trên `.30`; phát hiện 1 điểm cần gia cố trên `/etc/corp-app/env.conf`
- `cleanup`: Lưu bằng chứng đã che mờ (`redacted`), ký băm `SHA256SUMS`, xóa tệp tạm và khôi phục snapshot `F01-start`
- `duration_hours`: `3.5` (Theory: `1.0h`, Lab: `1.0h`, Governance/Team Review: `1.5h`)
- `reviewer`: `TechLead-SecOps-01`
- `date_checked_utc`: `2026-11-02T11:00:00Z`
## 2. Preconditions và phương pháp
- **Điều kiện tiên quyết (Preconditions):** Đã xác minh cô lập mạng Host-Only `192.168.56.0/24`, đối chiếu tệp `Asset-Inventory.csv` từ bài `W01-L04`, kiểm tra mốc snapshot sạch `F01-start` và thống nhất quy tắc dừng khẩn cấp (*Stop Rule*).
- **Phương pháp thu thập trên Linux (`192.168.56.20`):** Thực thi các lệnh chỉ đọc (`systemctl list-units`, `systemctl show`, `getent passwd/group`, `stat`, `find -perm /6000`, `journalctl --utc`) dưới tài khoản kiểm toán.
- **Phương pháp thu thập trên Windows (`192.168.56.30`):** Thực thi PowerShell chỉ đọc (`Get-CimInstance Win32_Service`, `Get-LocalUser`, `Get-LocalGroupMember`, `Get-WinEvent` trên kênh `Security` và `System`).
## 3. UTC timestamp, expected/actual và evidence redacted
- **Khung thời gian thực thi (UTC Timestamp):** `2026-11-02T10:35:00Z` đến `2026-11-02T10:52:00Z`.
- **Đối chiếu Expected vs. Actual và Sơ đồ Luồng `Client → Proxy → App → DB`:**
- **Bước 1 (`Client -> Proxy`):** `F01-tester` (`192.168.56.10`, user `lab_auditor`) gửi yêu cầu HTTPS TLS 1.3 (`X-Correlation-ID: F01-TRACE-001`) tới `192.168.56.20:443`. Dịch vụ `nginx.service` tiếp nhận dưới định danh `www-data:www-data` (`UID=33`), có `CAP_NET_BIND_SERVICE`, ghi nhận vào `/var/log/nginx/access.log`.
- **Bước 2 (`Proxy -> App`):** Nginx chuyển tiếp HTTP nội bộ qua `127.0.0.1:8080` tới `app-gunicorn.service`. Tiến trình chạy dưới tài khoản cô lập `app-svc:app-svc` (`UID=994`), bật `NoNewPrivileges=yes`, `ProtectSystem=strict`, `PrivateTmp=yes`. Mã nguồn tại `/opt/corp-app` có quyền `0750 root:app-svc` (ngăn chặn hoàn toàn `www-data` đọc mã nguồn).
- **Bước 3 (`App -> DB`):** Gunicorn kết nối tới `127.0.0.1:5432` của `postgresql@16-main.service` (chạy dưới `postgres:postgres`, `UID=114`, thư mục dữ liệu `/var/lib/postgresql/16/main` có quyền `0700 postgres:postgres`).
- **Bước 4 (`Windows Baseline & Telemetry` trên `.30`):** Dịch vụ `LanmanServer` (`:445`, `LocalSystem`) và `RpcSs` (`:135`, `NetworkService`) có DACL tệp thực thi khóa chặt cho `TrustedInstaller`/`SYSTEM`. Nhật ký `Security.evtx` ghi nhận chính xác `Event ID 4624` (`LogonType=3`) từ `192.168.56.10` cho `win_lab_reader` và không phát sinh `Event ID 4672` hay `7045` bất thường.
- **Evidence Redacted:** Toàn bộ Machine ID, Boot ID và chuỗi định danh nhạy cảm đã được thay bằng `[REDACTED]` trước khi đóng gói.
## 4. False positive và giới hạn
- **Loại trừ False Positives:**
- Các liên kết mềm (`lrwxrwxrwx` — `0777`) trong `/etc/systemd/system/` và thư mục `/tmp` (`1777` có Sticky Bit) là cấu hình chuẩn POSIX, không phải lỗi phân quyền.
- Dịch vụ `LanmanServer` trên `.30` chạy dưới quyền `LocalSystem` nhưng không có `Unquoted Service Path` và không cho phép người dùng thường sửa đổi binary/Registry ($\mu_{\text{acl}} = 0$), do đó không phải là lỗ hổng leo thang đặc quyền.
- **Giới hạn của phép đo:** Nhật ký `journalctl` và `Windows Event Log` chỉ phản ánh các sự kiện nằm trong khoảng thời gian lưu trữ hiện hành (*retention window*) và cấu hình chính sách kiểm toán hiện tại (*Audit Policy*); nếu chưa bật `Audit Process Creation (4688)` kèm dòng lệnh trên Windows thì sẽ không thấy tham số dòng lệnh chi tiết của tiến trình con.
## 5. Remediation hoặc bước tiếp theo
- **Khuyến nghị gia cố (Remediation) trên `192.168.56.20`:** Chuyển chuỗi bí mật kết nối cơ sở dữ liệu trong `/etc/corp-app/env.conf` (`0640 root:app-svc`) sang cơ chế quản lý thông tin xác thực mã hóa của `systemd` (`LoadCredentialEncrypted=`) hoặc xác thực socket Unix (`peer`) để loại bỏ mật khẩu văn bản rõ trên đĩa cứng.
- **Khuyến nghị gia cố trên `192.168.56.30`:** Kích hoạt chính sách `Audit Process Creation` (`Event ID 4688` kèm `Include command line in process creation events`) trong Local Group Policy để tăng độ phủ truy vết cho các bài kiểm thử tuần sau.
- **Quyết định tiếp theo:** Phê duyệt đường cơ sở hệ điều hành và luồng ứng dụng của Lab F01 để làm đầu vào xây dựng **Team Charter** trong bài `W01-L06`.
## 6. Reviewer và ngày kiểm tra
- **Reviewer:** `TechLead-SecOps-01`
- **Ngày kiểm tra (Date Checked UTC):** `2026-11-02T11:00:00Z`
- **Kết luận QA:** `PASSED — Verified OS Baseline & End-to-End Application Flow`
MD
Bước 6: Kiểm tra Tự động 16 Trường Schema, 6 Mục Minimum Contents và Ký Băm SHA256SUMS (bash)
1set -euo pipefail
2OUT_DIR="artifacts-f01"
3REPORT="$OUT_DIR/OS-baseline-and-flow.md"
4SUMS="$OUT_DIR/SHA256SUMS"
5
6# 1. Xác minh đủ 16 trường lab_record_schema trong OS-baseline-and-flow.md
7for field in \
8 "lab_id" "objective" "environment_build_id" "image_service_version" \
9 "network_scope_cidr" "initial_snapshot_id" "test_accounts" "maximum_permitted_impact" \
10 "task" "evidence_artifacts" "expected_result" "actual_result" \
11 "cleanup" "duration_hours" "reviewer" "date_checked_utc"; do
12 grep -Fq "\`$field\`:" "$REPORT"
13done
14
15# 2. Xác minh đủ 6 mục minimum_contents bắt buộc
16for section in \
17 "## 1. Scope và lab ID" \
18 "## 2. Preconditions và phương pháp" \
19 "## 3. UTC timestamp, expected/actual và evidence redacted" \
20 "## 4. False positive và giới hạn" \
21 "## 5. Remediation hoặc bước tiếp theo" \
22 "## 6. Reviewer và ngày kiểm tra"; do
23 grep -Fqx "$section" "$REPORT"
24done
25
26# 3. Tạo và kiểm tra mã băm SHA-256 cho toàn bộ hồ sơ bàn giao
27(
28 cd "$OUT_DIR"
29 sha256sum OS-baseline-and-flow.md linux-20-*.txt > SHA256SUMS
30 sha256sum -c SHA256SUMS
31)
Danh mục Kiểm tra Bàn giao Artifact W01-L05Deliverable Checklist
Safe Lab F01 · Bắt buộc
Bộ hồ sơ hoàn thành bài W01-L05 bắt buộc phải có: (1) Tệp báo cáo chính OS-baseline-and-flow.md chứa đủ 16 trường lab_record_schema, 6 mục nội dung tối thiểu, bảng đối chiếu Linux/Windows và sơ đồ luồng Client → Proxy → App → DB; (2) Các tệp bằng chứng trích xuất thực tế từ .20 (linux-20-*.txt) và .30 (windows-30-*.txt) đã được che mờ thông tin nhạy cảm; và (3) Tệp SHA256SUMS xác thực toàn vẹn 100%.

11Kiểm tra Truy hồi Kiến thức (Spaced Retrieval), Thang đo Hành vi và Cổng Chặn An toàn

Phần đánh giá năng lực của bài W01-L05 kiểm tra khả năng vận dụng kiến thức hệ điều hành Linux/Windows ở cấp độ *Rà soát Kỹ thuật (Review Depth), đồng thời thực hiện truy hồi ngắt quãng (Spaced Retrieval*) kết nối xuyên suốt 5 bài học đầu tiên của Tuần 1 (W01-L01 đến W01-L05). Hồ sơ OS-baseline-and-flow.md được đánh giá theo Thang đo Hành vi tại bảng Table 3 .

Quiz 1: Bài Kiểm tra Truy hồi Tổng hợp W01-L05 (Kết nối Chuỗi Kiến thức W01-L01..L05)Score: 0 / 4
1. Theo phương trình đánh giá quyền POSIX và cơ chế đóng hộp systemd trên máy chủ F01-linux-srv (.20), cấu hình nào dưới đây bảo vệ tầng ứng dụng Gunicorn (127.0.0.1:8080) đúng nguyên tắc Đặc quyền Tối thiểu?
Explanation: Theo phương trình Eq. (1) và nghiên cứu về bảo mật tiến trình systemd [9] [11] , việc tách User=app-svc kết hợp quyền 0750 root:app-svc ngăn chặn hoàn toàn tiến trình Nginx (www-data) đọc/ghi mã nguồn ứng dụng, trong khi NoNewPrivileges=yes khóa chặt con đường nâng quyền qua tệp SUID.
2. Khi rà soát đường cơ sở trên máy chủ Windows F01-win-trial (.30), một thành viên trong nhóm báo cáo rằng "Dịch vụ LanmanServer chạy dưới tài khoản LocalSystem và có hàng chục bản ghi Event ID 4624 trong Security.evtx, chứng tỏ máy chủ đã bị xâm nhập". Với tư cách là Technical Lead, cách phản biện nào là chính xác nhất?
Explanation: Như đã định량 tại phương trình Eq. (2) và phân tích nhật ký Windows [4] [15] , các dịch vụ cốt lõi của Windows cần LocalSystem nhưng được bảo vệ bởi NTFS DACL của TrustedInstaller. Hơn nữa, Event ID 4624 ghi nhận mọi phiên đăng nhập hợp lệ (như LogonType=3 từ tài khoản kiểm toán hoặc LogonType=5 khi khởi động dịch vụ).
3. Trong sơ đồ luồng ứng dụng đầu-cuối Client → Proxy → App → DB trên máy chủ .20, điều gì ngăn cản một kẻ tấn công đã chiếm được quyền thực thi lệnh dưới danh nghĩa tiến trình Nginx (www-data, UID=33) đọc trực tiếp các tệp dữ liệu bảng của PostgreSQL trên đĩa cứng?
Explanation: Đây chính là điểm giao thoa giữa kiến trúc mạng và kiến trúc hệ điều hành (xem sơ đồ Figure 1 và bảng Table 1 ): khi kẻ tấn công đã ở trên cùng một máy chủ (.20), ranh giới bảo vệ dữ liệu trên đĩa không còn là cổng mạng mà là quyền sở hữu UID/GID và chế độ 0700 của thư mục dữ liệu theo chuẩn POSIX DAC [8] .
4. (Truy hồi liên kết W01-L01..L04) Khi hoàn thiện hồ sơ OS-baseline-and-flow.md ở Ngày 5, bốn bài học trước đó đóng góp những mắt xích bằng chứng cụ thể nào vào bức tranh tổng thể?
Explanation: Chuỗi 5 ngày đầu tiên của Tuần 1 được thiết kế theo cấu trúc tích lũy bằng chứng chặt chẽ: Mạng & Ranh giới (W01-L01) →\rightarrow Hạ tầng Cô lập & Snapshot (W01-L02) →\rightarrow Bằng chứng Gói tin trên Dây cáp (W01-L03) →\rightarrow Kiểm kê Cổng & Socket (W01-L04) →\rightarrow Định danh Tiến trình, Quyền Hệ điều hành, Nhật ký & Luồng Ứng dụng Đầu-Cuối (W01-L05) [1] [5] [6] .
Answer Key (Quiz 1):
Q1: A — Chạy dịch vụ dưới tài khoản riêng User=app-svc, cấp quyền thư mục mã nguồn 0750 root:app-svc, bật NoNewPrivileges=yes, ProtectSystem=strict và thu hẹp CapabilityBoundingSet (Theo phương trình Eq. (1) và nghiên cứu về bảo mật tiến trình systemd [9] [11] , việc tách User=app-svc kết hợp quyền 0750 root:app-svc ngăn chặn hoàn toàn tiến trình Nginx (www-data) đọc/ghi mã nguồn ứng dụng, trong khi NoNewPrivileges=yes khóa chặt con đường nâng quyền qua tệp SUID.)
Q2: A — Giải thích rằng dịch vụ hệ thống cốt lõi chạy dưới LocalSystem có DACL khóa chặt (μacl=0\mu_{\text{acl}} = 0) không phải là lỗ hổng, và phải kiểm tra trường Logon Type cùng tài khoản nguồn trong Event ID 4624 / 4672 trước khi kết luận (Như đã định량 tại phương trình Eq. (2) và phân tích nhật ký Windows [4] [15] , các dịch vụ cốt lõi của Windows cần LocalSystem nhưng được bảo vệ bởi NTFS DACL của TrustedInstaller. Hơn nữa, Event ID 4624 ghi nhận mọi phiên đăng nhập hợp lệ (như LogonType=3 từ tài khoản kiểm toán hoặc LogonType=5 khi khởi động dịch vụ).)
Q3: A — Ranh giới phân quyền hệ điều hành: thư mục dữ liệu /var/lib/postgresql/16/main có chủ sở hữu postgres:postgres (UID=114) với chế độ 0700, nên nhân Linux từ chối mọi thao tác đọc/duyệt thư mục từ UID=33 (www-data) (Đây chính là điểm giao thoa giữa kiến trúc mạng và kiến trúc hệ điều hành (xem sơ đồ Figure 1 và bảng Table 1 ): khi kẻ tấn công đã ở trên cùng một máy chủ (.20), ranh giới bảo vệ dữ liệu trên đĩa không còn là cổng mạng mà là quyền sở hữu UID/GID và chế độ 0700 của thư mục dữ liệu theo chuẩn POSIX DAC [8] .)
Q4: A — W01-L01 xác định 3 ranh giới tin cậy và bắt tay TCP/TLS; W01-L02 bảo đảm môi trường 3 máy ảo cô lập có snapshot F01-start; W01-L03 cung cấp chuẩn thu thập lưu lượng PCAP có nhãn thời gian UTC và mã băm SHA-256; W01-L04 cung cấp bảng đối chiếu cổng mở Nmap với socket Ground Truth (ss/Get-NetTCPConnection) để W01-L05 gắn từng socket đó vào User/Service/Log cụ thể (Chuỗi 5 ngày đầu tiên của Tuần 1 được thiết kế theo cấu trúc tích lũy bằng chứng chặt chẽ: Mạng & Ranh giới (W01-L01) →\rightarrow Hạ tầng Cô lập & Snapshot (W01-L02) →\rightarrow Bằng chứng Gói tin trên Dây cáp (W01-L03) →\rightarrow Kiểm kê Cổng & Socket (W01-L04) →\rightarrow Định danh Tiến trình, Quyền Hệ điều hành, Nhật ký & Luồng Ứng dụng Đầu-Cuối (W01-L05) [1] [5] [6] .)
Table 3: Thang đo Hành vi Đánh giá Năng lực (Behavior Scale Rubric 0–100) cho Hồ sơ OS-baseline-and-flow.md (W01-L05)
Mức điểmHành vi Quan sát được của Học viênBằng chứng Tối thiểu Bắt buộc trong OS-baseline-and-flow.md & Thư mục Artifact
0Không có bằng chứng thực nghiệm, vi phạm phạm vi/quy tắc chỉ đọc hoặc sao chép kết quả giả tạoHồ sơ OS-baseline-and-flow.md bị thiếu, rỗng, thiếu thông tin scope hoặc không có các tệp trích xuất thực tế từ .20 và .30
25Nhắc lại lý thuyết về quyền Linux và dịch vụ Windows nhưng chưa gắn kết được vào các tiến trình thực tế trong labCó liệt kê rời rạc lệnh systemctl hoặc Get-Service nhưng không giải thích được UID/SID, không có nhật ký sự kiện và thiếu sơ đồ Client → Proxy → App → DB
50Thu thập được dữ liệu theo hướng dẫn từng bước nhưng phân tích ranh giới quyền hạn và nhật ký còn thiếu sótCó OS-baseline-and-flow.md với một phần Expected/Actual và sơ đồ cơ bản, nhưng chưa phân tích được cơ chế đóng hộp systemd, chưa lọc rõ Event ID 4624/4672/7045 hoặc thiếu phân tích False Positives
75Tự thực hiện trọn vẹn kiểm toán hai OS, vẽ chính xác luồng ứng dụng xuyên tầng và đề xuất bước tiếp theo hợp lýNộp đủ OS-baseline-and-flow.md (16 trường schema + 6 mục tối thiểu) kèm đầy đủ tệp bằng chứng đã redact và SHA256SUMS; đối chiếu khớp socket (W01-L04) với User/Group/SID, quyền tệp và dấu vết nhật ký theo nhãn thời gian UTC
100Đạt chuẩn mức 75, đồng thời thể hiện năng lực rà soát cấp độ Technical Lead: bóc tách cảnh báo giả, lượng hóa bề mặt đặc quyền và đề xuất gia cố có thể kiểm chứng lạiHồ sơ hoàn hảo, tái lập độc lập 100%; giải thích rõ vì sao symlink 0777 và LocalSystem có DACL chặt không phải là lỗ hổng, đề xuất cải tiến LoadCredentialEncrypted= và Audit Process Creation (4688), nêu rõ quy trình rollback và đánh đổi vận hành

12Tự đánh giá và Phản tư của Technical Lead

13Đọc thêm

Tài liệu Tham khảo Tiêu chuẩn và Học thuật Quốc tế

  1. [1]
    K. Scarfone, M. Souppaya, A. Cody, A. Orebaugh. Technical Guide to Information Security Testing and Assessment. NIST Special Publication 800-115, National Institute of Standards and Technology (DOI: 10.6028/NIST.SP.800-115), 2008.
  2. [2]
    K. Kent, M. Souppaya. Guide to Computer Security Log Management. NIST Special Publication 800-92, National Institute of Standards and Technology (DOI: 10.6028/NIST.SP.800-92), 2006.
  3. [3]
    S. Rose, O. Borchert, S. Mitchell, S. Connelly. Zero Trust Architecture. NIST Special Publication 800-207, National Institute of Standards and Technology (DOI: 10.6028/NIST.SP.800-207), 2020.
  4. [4]
    Microsoft Corporation. Windows Server Security, Service Accounts, Access Tokens, and Security Auditing Documentation. Microsoft Learn, 2024.
  5. [5]
    U. Lamping, R. Sharpe, E. Warnicke. Wireshark User's Guide and Reference Manual (dumpcap / tshark Network Analysis). Wireshark Foundation, 2024.
  6. [6]
    G. F. Lyon. Nmap Network Scanning: The Official Nmap Project Guide to Network Discovery and Security Scanning. Insecure.Com LLC (Nmap Project), 2009.
  7. [7]
    Y. Rekhter, B. Moskowitz, D. Karrenberg, G. J. de Groot, E. Lear. Address Allocation for Private Internets. RFC 1918 (BCP 5), Internet Engineering Task Force (IETF, DOI: 10.17487/RFC1918), 1996.
  8. [8]
    M. O'Leary. Linux Security Foundations: A Practical Guide to System Processes, Permissions, and Protection. Apress / Springer Nature (DOI: 10.1007/979-8-8688-2664-1), 2025.
  9. [9]
    M. O'Leary. Processes and systemd. Linux Security Foundations (Apress / Springer Nature, Chapter 5, DOI: 10.1007/979-8-8688-2664-1_5), 2025.
  10. [10]
    F. Yeboah, K. K. C. Palvadi, L. Dzamesi, O. Nyarko-Boateng. Exploration of Access Control Automation in Linux Environments: Cybersecurity Perspective. 2026 6th International Conference on Electrical, Computer and Energy Technologies (ICECET, IEEE, Document 11632321), 2026.
  11. [11]
    D. Berardi, L. Bassi, R. Davoli. Capability Ambient DO: A Usable Tool for Linux System Security. Computer Safety, Reliability, and Security — SAFECOMP 2024 Workshops (Springer Nature, DOI: 10.1007/978-3-031-68738-9_22), 2024.
  12. [12]
    J. Meng, Y. Wang, H. Lu. Mitigating the Unprivileged User Namespaces Based Privilege Escalation Attacks with Linux Capabilities. Information Security and Privacy — ACISP (Springer Nature, DOI: 10.1007/978-981-96-9101-2_17), 2025.
  13. [13]
    G. Khawaja. Linux Privilege Escalation. Kali Linux Penetration Testing Bible (Wiley / IEEE Xplore, Document 9936713), 2021.
  14. [14]
    A. Ahmed. Privilege Escalation Techniques: Learn the Art of Exploiting Windows and Linux Systems. Packt Publishing (IEEE Xplore, Document 10162278), 2021.
  15. [15]
    M. Fujimoto, W. Matsuda, T. Mitsunaga. Detecting Abuse of Domain Administrator Privilege Using Windows Event Log. 2018 IEEE Conference on Application, Information and Network Security (AINS, IEEE, Document 8631459, DOI: 10.1109/AINS.2018.8631459), 2018.
  16. [16]
    H. Devabhaktuni, S. S. Nair, C. Tamilselvan, A. Mohan, N. M. Yeruva. Real-Time Windows Event Log Analysis and Anomaly Detection Using Explainable Machine Learning. 2025 1st IEEE UPWIECON (IEEE, Document 11390185), 2025.
  17. [17]
    V. Visoottiviseth, V. Moonkhaen. A Centralized System for Detecting Attacks from Windows Event Logs. 2023 International Electrical Engineering Congress (iEECON, IEEE, Document 10126899), 2023.
  18. [18]
    V. Visoottiviseth, A. Noonkhan, R. Phonpanit, P. Wanichayagosol, S. Jitpukdebodin. AXREL: Automated Extracting Registry and Event Logs for Windows Forensics. 2023 27th International Computer Science and Engineering Conference (ICSEC, IEEE, Document 10329743), 2023.
  19. [19]
    P. Bhandary, C. Nicholas, R. J. Joyce, B. Li. Ransomware in Active Directory: A Dataset and Analysis of Early-Stage Behavior. 2025 Annual Computer Security Applications Conference Workshops (ACSAC Workshops, IEEE, Document 11418035), 2025.
  20. [20]
    S. Sreelekshmi, S. Gayathri, S. Gopika. Unveiling Windows Security: Detecting Security Breaches Using Windows Event Logs. Proceedings of 4th International Conference on Mathematical Modeling and Computational Science (Springer Nature, DOI: 10.1007/978-3-031-91005-0_34), 2025.
  21. [21]
    D. Schauland, D. Jacobs. Managing the Windows Event Log. Troubleshooting Windows Server with PowerShell (Apress / Springer Nature, Chapter 2, DOI: 10.1007/978-1-4842-1851-8_2), 2016.
  22. [22]
    N. M. Ibrahim, A. Al-Nemrat, H. Jahankhani, R. Bashroush. Sufficiency of Windows Event Log as Evidence in Digital Forensics. Global Security, Safety and Sustainability & e-Democracy (Springer Nature, DOI: 10.1007/978-3-642-33448-1_34), 2012.
  23. [23]
    K. A. Cochran. Security Operations and Monitoring. CompTIA CySA+ Certification Companion (Apress / Springer Nature, Chapter 5, DOI: 10.1007/979-8-8688-1495-2_5), 2025.
  24. [24]
    V. R. Pasam, P. Andiappan. Security and Compliance. The Expert's Guide to SQL Server (Apress / Springer Nature, Chapter 4, DOI: 10.1007/979-8-8688-2451-7_4), 2025.