Loading...

Bài 85. (Lab) Dựng SIEM bằng Wazuh/Security Onion: thu thập log và phát hiện tấn công

Khóa học CompTIA Security+ SY0-801 · Phần 4: Vận hành bảo mật · Bài 85 · 🎯 Objective 4.4 · ⏱️ Làm khoảng 90 phút · 🧪 Có lab (3 máy ảo) · 📝 5 câu bài tập cuối bài

🎯 Mục tiêu bài học

  • Dựng một SIEM miễn phí bằng Wazuh trong mạng lab cô lập.
  • Gắn agent vào máy Linux và thấy log về tập trung.
  • Tạo hai sự kiện thật: SSH dò mật khẩu và thay đổi tệp quan trọng; tìm và đọc cảnh báo tương ứng.
  • Liên hệ với lý thuyết: thu thập, chuẩn hóa (parsing), tương quan, cảnh báo, dashboard.

📎 Vị trí trong đề thi: Objective 4.4 nói về giám sát và cảnh báo. Bài này là lab của Bài 71 (log, SIEM, correlation) và Bài 72 (alerting, tuning, agent). Phần đọc log dùng lại kiến thức ở Bài 83. Lab kế tiếp: Bài 86 quét lỗ hổng.

⚠️ An toàn: Mọi thao tác tấn công trong bài chỉ thực hiện giữa các máy ảo do chính bạn dựng, trong mạng host-only hoặc internal. Không thử trên hệ thống thật của người khác khi chưa có văn bản cho phép.

💡 Liên hệ thực tế: Nam không muốn ngồi đọc log từng máy nữa

Sau vụ dữ liệu bị xuất lúc 2 giờ sáng (Bài 83, 84), Nam nhận ra mình đã mất cả buổi để mở từng máy chủ, tìm từng tệp log, rồi dò thủ công. Chị Lan hỏi: "Lần sau có cách nào tự báo ngay khi có người dò mật khẩu không?" Câu trả lời là SIEM: gom log về một nơi, chuẩn hóa, so khớp theo quy tắc và bật cảnh báo. Nam quyết định dựng thử một hệ thống mẫu bằng công cụ miễn phí trước khi đề xuất mua giải pháp thương mại. Đây là tình huống minh họa, không phải vụ việc có thật.

🧱 Hình 85a. Ba máy ảo: Kali (tấn công thử), victim-linux (nạn nhân, có agent) và wazuh-server (SIEM).

🧰 Chuẩn bị

Chọn công cụ: Wazuh hay Security Onion?

Wazuh (lab chính)Security Onion (phương án thay thế)
Bản chất SIEM và XDR mã nguồn mở, mạnh ở log máy chủ, agent, toàn vẹn tệp Bộ giám sát mạng và SIEM: Suricata, Zeek, Elastic, phân tích PCAP
Tài nguyên Khoảng 4 vCPU, 8 GB RAM, 50 GB cho tới 25 agent (theo hướng dẫn quickstart của Wazuh) Nặng hơn nhiều: tài liệu ghi mức tối thiểu khoảng 8 GB RAM (Eval) và 24 GB (Standalone); riêng chế độ Import (nạp file PCAP) chỉ cần khoảng 4 GB
Hợp với Lab này, máy cá nhân 16 GB RAM Máy mạnh, hoặc dùng chế độ Import cho Bài 87

Bài này làm bằng Wazuh vì nhẹ và đủ để thấy toàn bộ vòng đời log, cảnh báo, điều tra. Nếu máy bạn mạnh, có thể thử Security Onion sau, nhưng hãy tra lại yêu cầu theo bản bạn tải vì số liệu thay đổi theo phiên bản.

Ba máy ảo

Máy ảoHệ điều hànhCấu hình gợi ýIP trong labVai trò
wazuh-server Ubuntu Server 22.04 hoặc 24.04 4 vCPU, 8 GB RAM, 50 GB 192.168.56.10 Manager, indexer, dashboard
victim-linux Ubuntu Server 22.04 hoặc 24.04 1 vCPU, 2 GB RAM, 20 GB 192.168.56.11 Nạn nhân, chạy sshd và agent
kali Kali Linux 2 vCPU, 2 GB RAM 192.168.56.20 Giả lập kẻ tấn công
  • Đặt cả ba máy vào cùng một mạng host-only (VirtualBox) hoặc mạng nội bộ riêng. Địa chỉ ở trên chỉ là ví dụ; dùng dải của bạn nếu khác.
  • wazuh-server cần truy cập Internet để tải gói. Có thể thêm một card NAT tạm thời trong lúc cài, rồi tắt đi sau khi xong.
  • Đồng bộ giờ cho cả ba máy (NTP hoặc dịch vụ giờ của hypervisor): lệch giờ làm hỏng chứng chỉ và làm sai dòng thời gian (Bài 71, Bài 83).
  • Chụp snapshot mỗi máy trước khi bắt đầu để quay lại nếu hỏng.

🪜 Các bước thực hiện

Bước 1. Cài Wazuh server (all-in-one)

Trên wazuh-server, dùng trình cài đặt chính thức của Wazuh. Lệnh dưới đây là dạng của nhánh 4.x; hãy sao chép lệnh trên trang Quickstart hiện hành của Wazuh vì số phiên bản thay đổi (nếu trang đã chuyển sang nhánh 5.x, các bước dashboard và cảnh báo bên dưới vẫn tương tự).

bash

curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh && sudo bash ./wazuh-install.sh -a

Cài đặt mất khoảng 5 đến 10 phút hoặc hơn; đừng ngắt giữa chừng. Khi xong, trình cài in ra địa chỉ dashboard và tài khoản admin.

  • Mật khẩu ở nhánh 4.x nằm trong wazuh-install-files.tar:

bash

sudo tar -O -xvf wazuh-install-files.tar wazuh-install-files/wazuh-passwords.txt
  • Ở nhánh 5.x, mật khẩu nằm trong /etc/wazuh/credentials.env (chỉ root đọc được).

Kiểm tra ba dịch vụ đang chạy:

bash

sudo systemctl status wazuh-indexer wazuh-manager wazuh-dashboard --no-pager

Trên trình duyệt của máy thật, mở https://192.168.56.10, chấp nhận chứng chỉ tự ký và đăng nhập bằng admin. Chứng chỉ tự ký là bình thường trong lab.

Bước 2. Chuẩn bị máy nạn nhân

Trên victim-linux, cài SSH, tạo một tài khoản thử, và đảm bảo có log xác thực:

bash

sudo apt update
sudo apt install -y openssh-server rsyslog
sudo adduser labuser
sudo systemctl enable --now ssh rsyslog
ls -l /var/log/auth.log

rsyslog giúp có tệp /var/log/auth.log; nếu thiếu, một số bản Ubuntu rút gọn chỉ lưu log trong journal và bạn sẽ không thấy sự kiện SSH như bên dưới.

Bước 3. Gắn Wazuh agent vào máy nạn nhân

Trong dashboard, vào mục Endpoints Summary (hoặc Agents) rồi chọn Deploy new agent. Chọn Linux, đúng kiểu gói (DEB amd64), nhập địa chỉ server 192.168.56.10 và đặt tên victim-linux. Dashboard tự sinh lệnh, có dạng:

bash

# Dạng lệnh do dashboard sinh ra (số phiên bản và URL thay đổi theo bản cài)
wget https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_<PHIÊN_BẢN>_amd64.deb
sudo WAZUH_MANAGER='192.168.56.10' WAZUH_AGENT_NAME='victim-linux' dpkg -i ./wazuh-agent_<PHIÊN_BẢN>_amd64.deb

sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent

Hãy dùng đúng lệnh dashboard hiển thị thay vì sao chép dòng trên. Sau vài chục giây, agent phải ở trạng thái Active trong danh sách. Nếu không, xem phần Lỗi thường gặp bên dưới.

🪜 Hình 85b. Cài server, gắn agent, tạo sự kiện, rồi đọc cảnh báo.

Bước 4. Sự kiện 1: dò mật khẩu SSH

Trên kali, tạo danh sách mật khẩu rất ngắn và thử đăng nhập vào máy nạn nhân (chỉ trong lab của bạn). Đặt mật khẩu thật của labuser ở cuối danh sách để mô phỏng kịch bản "thất bại nhiều lần rồi thành công":

bash

printf "123456\npassword\nadmin\nqwerty\nletmein\nMatKhauLab@2026\n" > pass.txt
hydra -l labuser -P pass.txt -t 4 ssh://192.168.56.11

(Thay MatKhauLab@2026 bằng mật khẩu bạn đặt cho labuser.)

Trên victim-linux, xem log gốc để biết dữ liệu thô trông thế nào:

bash

sudo grep -E "Failed password|Accepted password" /var/log/auth.log | tail -n 10

Bạn sẽ thấy nhiều dòng "Failed password" từ 192.168.56.20, theo sau là một dòng "Accepted password". Đây chính là loại log thô mà Bài 83 đã giải thích.

Bước 5. Tìm cảnh báo trong Wazuh

Trong dashboard, mở Threat Hunting (hoặc Security events) rồi chọn agent victim-linux. Tên menu có thể khác đôi chút theo phiên bản. Dùng ô tìm kiếm:

data.srcip: 192.168.56.20

Hãy tìm và ghi lại:

TrườngÝ nghĩaBạn thấy gì?
rule.description Mô tả quy tắc bị kích hoạt Ví dụ: xác thực SSH thất bại, nhiều lần liên tiếp
rule.level Mức nghiêm trọng (số càng cao càng nặng)
rule.id Mã quy tắc
data.srcip IP nguồn 192.168.56.20
data.dstuser Tài khoản bị nhắm tới labuser
rule.mitre.id Kỹ thuật MITRE ATT&CK (nếu có) Thường gắn với Brute Force (T1110)

Wazuh có sẵn quy tắc cho SSH, ví dụ nhóm 5710, 5712, 5716, 5763 (xác thực thất bại, người dùng không tồn tại, dò mật khẩu) và 5715 (đăng nhập thành công). Mã cụ thể có thể khác theo phiên bản, nên hãy tin vào mô tả và dữ liệu bạn thấy hơn là học thuộc mã.

Điều quan trọng cần nhận ra: một lần thất bại là vô hại, chuỗi thất bại rồi thành công từ cùng một IP là mẫu hình đáng lo (Bài 83: "mẫu hình mới đáng lo"). SIEM làm việc này nhờ tương quan.

Bước 6. Sự kiện 2: giám sát toàn vẹn tệp (FIM)

File Integrity Monitoring (FIM) phát hiện tệp bị thêm, sửa, xóa. Trên victim-linux, tạo thư mục thử và bật giám sát thời gian thực:

bash

sudo mkdir -p /home/labuser/tai-lieu-mat
sudo nano /var/ossec/etc/ossec.conf

Trong khối <syscheck>, thêm dòng:

xml

<directories check_all="yes" realtime="yes">/home/labuser/tai-lieu-mat</directories>

Khởi động lại agent rồi tạo sự kiện:

bash

sudo systemctl restart wazuh-agent

echo "bao cao doanh thu quy 3" | sudo tee /home/labuser/tai-lieu-mat/doanh-thu.txt
echo "da bi sua" | sudo tee -a /home/labuser/tai-lieu-mat/doanh-thu.txt
sudo rm /home/labuser/tai-lieu-mat/doanh-thu.txt

Trong dashboard, mở module Integrity monitoring (hoặc tìm rule.groups: syscheck). Bạn sẽ thấy ba sự kiện: tệp được thêm, bị thay đổi checksum, bị xóa (thường là các quy tắc 554, 550 và 553). Chú ý trường syscheck.path và syscheck.sha256_after: đây là dấu vết điều tra có thể ghép với log đăng nhập để biết ai đã làm gì và khi nào.

Bước 7. Dựng dòng thời gian (nối với Bài 83)

Mở lại các cảnh báo và sắp theo thời gian. Điền vào bảng, giống cách Nam ghép các nguồn dữ liệu:

Thời điểmNguồnSự kiệnÝ nghĩa
auth.log, cảnh báo SSH Nhiều lần thất bại từ 192.168.56.20 Dò mật khẩu
auth.log, cảnh báo SSH Đăng nhập thành công của labuser Có thể đã bị chiếm tài khoản
FIM Tệp tai-lieu-mat/doanh-thu.txt bị thêm, sửa, xóa Hành vi trên dữ liệu nhạy cảm

Nếu giờ giữa các máy lệch nhau, thứ tự ở đây sẽ sai: đó là lý do đồng bộ giờ là điều kiện của mọi dòng thời gian.

Bước 8 (mở rộng). Tinh chỉnh quy tắc (tuning)

Wazuh cho phép viết quy tắc riêng trong /var/ossec/etc/rules/local_rules.xml trên wazuh-server. Ví dụ nâng mức cảnh báo khi SSH thất bại đến từ máy Kali trong lab:

xml

<group name="local,ssh,">
  <rule id="100100" level="12">
    <if_sid>5716</if_sid>
    <srcip>192.168.56.20</srcip>
    <description>Lab: SSH that bai tu may Kali 192.168.56.20</description>
  </rule>
</group>

bash

sudo systemctl restart wazuh-manager

Chạy lại bước 4 và xem mức cảnh báo mới. Đây là hình ảnh thu nhỏ của tuning (Bài 72): tăng độ ưu tiên cho điều quan trọng, giảm ồn cho điều vô hại.

🛠️ Lỗi thường gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
Agent hiện Disconnected hoặc không xuất hiện Firewall chặn cổng 1514 và 1515 (TCP), sai địa chỉ manager, hai máy không cùng mạng Kiểm tra IP, ping, mở cổng, xem /var/ossec/logs/ossec.log trên agent
Dashboard không mở, indexer lỗi Thiếu RAM (dưới 8 GB), hoặc cài bị ngắt Tăng RAM cho server, xem systemctl status và log của từng dịch vụ
Lỗi TLS, đăng nhập thất bại Lệch giờ giữa các máy Đồng bộ NTP rồi thử lại
Không thấy sự kiện SSH Thiếu /var/log/auth.log Cài rsyslog, kiểm tra agent có đọc tệp log đó
Không thấy sự kiện FIM Thư mục chưa tồn tại khi agent khởi động, hoặc chưa restart agent Tạo thư mục trước, rồi systemctl restart wazuh-agent
Trình duyệt cảnh báo chứng chỉ Chứng chỉ tự ký Bình thường trong lab; chấp nhận ngoại lệ

🧹 Dọn dẹp

  • Chụp snapshot cuối cùng nếu muốn dùng lại cho các lab sau.
  • Tắt card NAT của wazuh-server nếu đã thêm; không mở dashboard ra Internet.
  • Xóa pass.txt trên Kali. Nếu không dùng nữa, hủy các máy ảo hoặc gỡ Wazuh bằng trình cài đặt với tùy chọn gỡ (-u).

📘 Nối lý thuyết với lab

Khái niệmTrong lab
Thu thập log tập trung Agent gửi log từ victim-linux về server
Parsing, chuẩn hóa Wazuh tách dòng log thành srcip, dstuser, rule.id...
Correlation Nhiều lần thất bại rồi thành công từ một IP thành cảnh báo mức cao
Alerting, tuning Quy tắc cục bộ ở bước 8
Dashboard Các trang Threat Hunting, Integrity monitoring
Agent-based monitoring Wazuh agent trên máy nạn nhân (Bài 72)
Toàn vẹn tệp, IoC FIM phát hiện thay đổi trên dữ liệu nhạy cảm (Bài 33)

🎯 Mẹo làm bài

"Gom log về một nơi, chuẩn hóa, so khớp, cảnh báo" → SIEM. "Phần mềm cài trên máy để gửi log" → agent. "Phát hiện tệp bị thêm, sửa, xóa" → FIM (file integrity monitoring). "Nhiều lần thất bại rồi thành công từ một IP" → correlation, dấu hiệu brute force hoặc password spraying. "Giảm cảnh báo giả, tăng độ ưu tiên điều quan trọng" → tuning. "Lệch giờ giữa các nguồn" → sai dòng thời gian. "Giám sát mạng, phân tích PCAP, Suricata và Zeek" → hướng của Security Onion.

📌 Tóm tắt nhanh

  • Lab dùng ba máy ảo trong mạng cô lập: Kali, victim-linux (có agent), wazuh-server.
  • Wazuh gồm manager (phân tích theo quy tắc), indexer (lưu và tìm kiếm), dashboard (hiển thị) và agent (thu thập từ máy).
  • SSH dò mật khẩu tạo chuỗi cảnh báo; FIM tạo cảnh báo khi tệp đổi, thêm, xóa.
  • Dòng thời gian chỉ đúng khi giờ đồng bộ; log thô và cảnh báo SIEM truy ngược được về nhau.
  • Tuning quy tắc là việc liên tục, không phải làm một lần.

📝 Bài tập đánh giá

Tự chọn đáp án cho từng câu, rồi đối chiếu với phần đáp án ở cuối bài.

Câu 1. Trong kiến trúc Wazuh, thành phần nào nhận dữ liệu từ agent và phân tích theo bộ quy tắc để sinh cảnh báo?

  • A. Wazuh dashboard
  • B. Wazuh indexer
  • C. Wazuh manager
  • D. Trình duyệt web

Câu 2. Tính năng nào của Wazuh phát hiện việc một tệp quan trọng bị thêm, sửa hoặc xóa?

  • A. File Integrity Monitoring (FIM)
  • B. Log rotation
  • C. Packet capture
  • D. Vulnerability scanning

Câu 3. Trong dashboard thấy rất nhiều cảnh báo xác thực SSH thất bại từ cùng một IP trong vài phút, sau đó có một lần đăng nhập thành công. Nhận định hợp lý nhất là gì?

  • A. Đó là lỗi của agent, có thể bỏ qua
  • B. Có thể là tấn công dò mật khẩu đã thành công, cần điều tra và xử lý tài khoản
  • C. Người dùng chỉ gõ nhầm mật khẩu một lần
  • D. Hệ thống đang được cập nhật

Câu 4. Vì sao lab tấn công thử phải đặt trong mạng host-only hoặc internal?

  • A. Để tăng tốc độ Internet
  • B. Để tránh phải cài agent
  • C. Để Wazuh không cần chứng chỉ
  • D. Để tách khỏi mạng thật, tránh ảnh hưởng hệ thống ngoài và tránh hành vi trái phép

Câu 5. Agent hiển thị Disconnected sau khi cài. Nguyên nhân phổ biến nào cần kiểm tra trước?

  • A. Firewall chặn cổng 1514 và 1515, hoặc sai địa chỉ manager
  • B. Ổ đĩa của server quá nhiều dung lượng trống
  • C. Máy Kali đang tắt
  • D. Trình duyệt chưa cập nhật

👉 Đáp án

Câu 1: C — Wazuh manager phân tích sự kiện từ agent theo quy tắc; indexer lưu và tìm kiếm, dashboard hiển thị.

Câu 2: A — FIM theo dõi và báo khi tệp bị thêm, sửa hoặc xóa.

Câu 3: B — Chuỗi thất bại rồi thành công từ một IP là mẫu hình của dò mật khẩu thành công; cần điều tra.

Câu 4: D — Mạng cô lập tránh ảnh hưởng hệ thống thật và tránh tấn công trái phép ra ngoài.

Câu 5: A — Cổng 1514, 1515 bị chặn hoặc sai địa chỉ manager là hai nguyên nhân phổ biến nhất.


📚 Bài viết thuộc khóa học CompTIA Security+ của VNExperts

🧭 Điều hướng

⬅️ Bài trước🏠 Mục lục khóa họcBài kế tiếp ➡️
Bài 84: Digital forensics cơ bản: chain of custody, legal hold, memory dump Mục lục khóa học CompTIA Security+ Bài 86: (Lab) Quét lỗ hổng bằng Greenbone (OpenVAS) và lập báo cáo