Thiết lập
Sơ đồ tấn công
Cấu hình từng máy
Máy Giám Sát (Ubuntu Server)
| Thành phần | Thông tin |
|---|
| Hệ điều hành | Ubuntu Server 22.04 LTS |
| Địa chỉ IP | 172.16.254.30 |
| RAM | 4 GB |
| CPU | 2 vCPU |
| Disk | 50 GB |
| Phần mềm | Suricata (IDS) |
| | Zeek (Network Analysis) |
| | Elasticsearch + Kibana (SIEM) |
| | Filebeat (Log collection) |
Tải và cài đặt file iso cho Ubuntu Server tại đây
Sau khi tải mình tiến hành sử dụng Oracle Virtualbox để dựng máy giám sát với cấu hình là “50GB ổ đĩa - 4GB RAM - 2 vCPU”
Để cấu hình mạng, mình thay đổi nội dung file /etc/netplan/50-cloud-init.yaml bằng lệnh
1
| sudo nano /etc/netplan/50-cloud-init.yaml
|
Thành nội dung
1
2
3
4
5
6
7
8
9
10
11
12
13
| network:
version: 2
ethernets:
enp0s3:
dhcp4: no
addresses:
- 172.16.254.30/16
gateway4: 172.16.0.1
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
|
Máy victim (Windows 11)
| Thành phần | Thông tin |
|---|
| Hệ điều hành | Windows 10/11 |
| Địa chỉ IP | 172.16.254.10 |
| RAM | 2 GB |
| CPU | 2 vCPU |
| Disk | 40 GB |
| Phần mềm | Sysmon (System monitoring) |
| | Filebeat for Windows (Log forwarding) |
Tương tự như trên, mình build máy victim với cấu hình
“40GB ổ đĩa - 2GB RAM - 2 vCPU”
Để cấu hình mạng mình set ip là 172.16.254.10
Cài đặt công cụ
Máy Giám Sát (Ubuntu Server)
Lần lượt setup theo thứ tự như sau :
Elasticsearch
Các thành phần Elaticsearch không có sẵn trong kho gói mặc định của Ubuntu. Tuy nhiên, chúng có thể được cài đặt bằng APT sau khi thêm danh sách nguồn gói của Elastic.
Để bắt đầu, hãy sử dụng cURL để nhập khóa GPG công khai của Elaticsearch vào APT.
1
| curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
|
Tiếp theo, thêm kho lưu trữ (repository) chính thức của Elasticsearch vào danh sách nguồn phần mềm mà hệ thống Ubuntu của bạn có thể tìm kiếm và tải về.
1
| echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
|
Tiếp theo, hãy cập nhật danh sách gói của bạn để APT sẽ đọc nguồn Elastic mới:
Okay, đã cài đặt xong, bây giờ chỉnh sửa file config elaticsearch.yml
1
2
3
4
5
| cluster.name: my-siem-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
|
Cấu hình của mình cho phép kết nối từ mọi thiết bị trong mạng qua cổng 9200
Để xác nhận nó chạy thành công hay chưa ta chỉ cần truy cập :9200 nếu nó trả về thì đã chạy thành công
Bây giờ Elaticsearch đã hoạt động, hãy cài đặt Kibana, thành phần tiếp theo của Elastic Stack.
Kibana
Vì trước đó mình đã thêm nguồn gói Elastic ở trước, nên phần này mình chỉ cần cài bằng apt
1
| sudo apt install kibana
|
Sau đó kích hoạt và bắt đầu dịch vụ Kibana:
sudo systemctl enable kibana
sudo systemctl start kibana
Tiếp theo là cấu hình kibana
1
| sudo nano /etc/kibana/kibana.yml
|
Nội dung là
1
2
3
4
5
6
7
8
| # Để cho phép các máy khác kết nối đến
server.host: "0.0.0.0"
# Để Kibana biết nó cần kết nối đến Elasticsearch ở đâu
elasticsearch.hosts: ["http://localhost:9200"]
# (Tùy chọn) Đặt tên cho Kibana để dễ nhận diện
server.name: "kibana"
|
Cuối cùng là lưu file và khởi động lại kibana
1
| sudo systemctl restart kibana
|
Sau khi khởi động lại thành công, mở trình duyệt web trên máy tính và truy cập:
1
| http://[IP-CỦA-UBUNTU-SERVER]:5601
|
Suricata
Mình cài đặt suricata theo docs của chúng: https://docs.suricata.io/en/latest/install/ubuntu.html
Sau khi cài đặt xong, tiến hành cấu hình Suricata trên Ubuntu
Trước khi cấu hình, mình sẽ xác định thông tin Network Interface sẽ sử dụng
monitor@UbuntuServer:/home$ ip -p -j route show default
[ {
"dst": "default",
"gateway": "172.16.0.1",
"dev": "enp0s3",
"protocol": "static",
"flags": [ ]
} ]
Bây giờ chúng ta có thể chỉnh sửa cấu hình của Suricata và xác minh hoặc thay đổi tên Network Interface bằng cách mở file cấu hình /etc/suricata/suricata.yaml
Thực hiện tìm đến dòng có nội dung af-packet: ở dòng thứ 580. Bên dưới dòng đó là Interface mặc định mà Suricata sẽ sử dụng để kiểm tra lưu lượng. Chỉnh sửa dòng này để phù hợp với Interface của chúng ta như đã thực hiện kiểm tra ở trên:
Thêm dòng này vào detect-engine để bật tính năng live rule
detect-engine:
- rule-reload: true
Sau khi xong, cập nhật Suricata
Để biết thành công hay chưa ta tiến hành thêm rule vào để thử, mình thêm đoạn rule kiểm tra PING thông qua ICMP.
Để thêm rule, ta config file /etc/suricata/suricata.yaml để biết nó sử dụng file rule nào, sau đó thêm rule vào file đó
Theo như ví dụ này rule được lấy từ file suricata.rules, thêm rule vào đây
Sau khi chạy log được lưu trong thư mục /var/log/suricata/, có các log chính sau:
1. fast.log
- Dạng text, đơn giản, ghi nhanh các alert khi phát hiện tấn công.
2. eve.json
- Đây là file quan trọng nhất.
- Dữ liệu dạng JSON, có thể import trực tiếp vào Elasticsearch/Kibana.
- Chứa alert, flow, DNS, HTTP, TLS, file info… tùy config trong suricata.yaml.
3. stats.log
- Ghi thống kê hiệu năng: số packet xử lý, dropped, decode error…
4. suricata.log
- Log hoạt động của chính Suricata (khởi động, lỗi cấu hình, warning…).
5. files-json.log (nếu bật)
- Ghi lại metadata của file được phát hiện trong traffic.
Okay, restart và ping thử xem rule hoạt động chưa
FileBeat trên Ubuntu (Monitor machine)
Cài đặt Filebeat bằng apt
sudo apt install filebeat
Bật dịch vụ
1
2
| sudo systemctl enable filebeat
sudo systemctl start filebeat
|
Bật module Suricata
1
| sudo filebeat modules enable suricata
|
Cấu hình module Suricata, mở file /etc/filebeat/modules.d/suricata.yml và thêm:
- module: suricata
eve:
enabled: true
var.paths: ["/var/log/suricata/eve.json"]
Chỉnh file cấu hình chính (filebeat.yml) bằng cách mở file sudo nano /etc/filebeat/filebeat.yml
output.elasticsearch:
hosts: ["http://172.16.254.30:9200"]
Cuối cùng tạo và restart filebeat
1
| sudo filebeat setup --pipelines --index-management --dashboards && sudo systemctl restart filebeat
|
Để chắc chắn ta đã setup thành công, có thể truy cập trực tiếp vào API của elasticsearch theo http://<ip>:9200/_cat/indices?v hoặc đọc log filebeat bằng lệnh sudo journalctl -fu filebeat
Từ ảnh chụp màn hình cho thấy Suricata đã được đẩy lên thành công.
Máy victim (Windows 11)
Máy này mình sẽ cài đặt 2 công cụ: Sysmon (dùng để giám sát hệ thống) và Filebeat (thu thập, chuyển đổi và chuyển tiếp (forward) nhật ký từ máy local đến một máy chủ từ xa để phân tích tập trung)
Sysmon
Sau khi tải file zip và giải nén, chúng ta tiếp tục tải file cấu hình bởi vì sysmon sẽ ghi log mọi thứ theo mặc định, dẫn đến quá nhiều dữ liệu thừa. Ta cần một file cấu hình (XML) để lọc và tập trung vào các sự kiện có ý nghĩa bảo mật. Mình sẽ tải file cấu hình từ SwiftOnSecurity
Z:\Sysmon>dir
Volume in drive Z is VBOX_share
Volume Serial Number is 0001-0307
Directory of Z:\Sysmon
07/23/2024 02:08 PM 4,563,248 Sysmon64.exe
08/24/2025 08:35 PM <DIR> .
07/23/2024 02:08 PM 4,993,440 Sysmon64a.exe
08/24/2025 08:35 PM 123,257 sysmonconfig-export.xml
07/23/2024 02:08 PM 8,480,560 Sysmon.exe
07/23/2024 02:08 PM 7,490 Eula.txt
08/24/2025 08:29 PM <DIR> ..
5 File(s) 18,176,187 bytes
2 Dir(s) 154,080,198,656 bytes free
Sau khi tải xong cài đặt với file cấu hình qua lệnh
.\Sysmon.exe -i -accepteula -h sha256 -n -l sysmonconfig-export.xml
1
2
3
4
5
| -h sha256: Ghi lại giá trị hash SHA256 của các file thực thi. Đây là thuật toán hash mạnh và phổ biến để nhận diện phần mềm.
-n: Theo dõi kết nối mạng (Network Connection).
-l: Tải và áp dụng file cấu hình.
|
Truy cập Applications and Services Logs -> Microsoft -> Windows -> Sysmon -> Operational thấy 1 loạt sự kiện windows sysmon ở đây cho thấy rằng đã cài đặt thành công
FileBeat
FileBeat có thể được tải từ đây
Giống như windows, sau khi tải xuống, ta sẽ tiến hành config trên file filebeat.yml
Đầu tiên là cấu hình các file log được thu thập, ở ví dụ này mình xác định các log được thu thập là sysmon, security, application và system
Tiếp theo là Output (nơi gửi log đến), Vì elasticsearch chạy ở Ubuntu 172.16.254.30 nên mình sẽ config như sau
Sau khi config xong, lưu file và cài đặt lại Filebeat Service
1
| .\install-service-filebeat.ps1
|
Khởi động service
-> Sau khi service chạy, Filebeat trên Windows sẽ forward log về Elasticsearch/Kibana.
Ta có thể xác định nó thành công hay chưa bằng cách truy cập vào http://172.16.254.30:5601
Theo như ví dụ này, ta thấy rằng hostname NexusLite-PC của victim đã được đẩy lên.
Ta cần tạo Data View cho các file windows logs này, để làm được ta vào tab Stack Management
Tiếp theo chọn Index patterns -> Create index pattern
Bởi vì phiên bản filebeat của windows là 9.1.2 nên mình đặt là filebeat-9.1.2*
Và trường timestamp field chọn @timestamp
Quay lại Discover bây giờ ta đã thấy log từ windows gửi về
Tấn công
Kịch bản tấn công
Sau khi mình scan với nmap, phát hiện ra 1 cổng đang mở là ssh
Mình tiến hành bruteforce mật khẩu ssh
Để làm được mình sử dụng hydra với wordlist là rockyou.txt của linux
1
2
3
4
5
6
7
8
9
10
11
12
| ┌──(kali㉿kali)-[~/Downloads/share]
└─$ hydra -t 4 -l administrator -P /usr/share/wordlists/rockyou.txt ssh://172.16.254.10
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-08-29 12:40:32
[WARNING] Restorefile (you have 10 seconds to abort... (use option -I to skip waiting)) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 4 tasks per 1 server, overall 4 tasks, 14344399 login tries (l:1/p:14344399), ~3586100 tries per task
[DATA] attacking ssh://172.16.254.10:22/
[22][ssh] host: 172.16.254.10 login: administrator password: iloveu
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-08-29 12:40:44
|
Đã có credentials tiến hành login vào trong
Sau khi đăng nhập vào được, mình tiến hành bước tiếp theo của quy trình tấn công là drop file mã độc xuống và chạy
Trên máy linux chạy lệnh sau
1
2
3
4
5
| ┌──(kali㉿kali)-[~/Downloads/test]
└─$ scp /home/kali/Downloads/test/Drop.exe administrator@172.16.254.10:/C:/Users/Administrator/Downloads/Drop.exe
administrator@172.16.254.10's password:
Drop.exe 100% 16KB 12.2MB/s 00:00
|
Phát hiện
Việc xuất hiện rất nhiều cổng đích khác nhau trong thời gian ngắn là dấu hiệu port scanning. Đây chính là hành vi mà attacker (172.16.254.49) đang dò quét các port trên victim (172.16.254.10) để tìm dịch vụ đang mở.
Đây là nội dung của event.original
Số packet/bytes bất thường:
1
2
3
| pkts_toserver: 1, pkts_toclient: 0
bytes_toclient: 0 → nghĩa là không có phản hồi từ server.
|
Trạng thái flow:
1
2
3
| "state": "new", "reason": "timeout"
"tcp.syn": true, "tcp.state": "syn_sent"
|
=> Đây chính xác là hành vi TCP SYN scan (thử gửi SYN đến nhiều port khác nhau để dò dịch vụ, nhưng server không trả lời).
Ta có thể sử dụng file log Security.evtx hoặc Sysmonlog với Login type 3 (Network logon) để xem các truy cập thông qua internet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| {
"timestamp": "2025-08-29T05:50:50.600Z",
"event_id": 4624,
"event_action": "Logon",
"status": "success",
"logon_type": 3,
"logon_process": "sshd",
"process_name": "C:\\Windows\\System32\\OpenSSH\\sshd.exe",
"target_user": {
"username": "Administrator",
"domain": "NEXUSLITE-PC",
"sid": "S-1-5-21-3728023933-3198538435-3165039231-500",
"elevated": true
},
"subject_user": {
"username": "NEXUSLITE-PC$",
"domain": "WORKGROUP",
"sid": "S-1-5-18"
},
"network": {
"source_ip": "-",
"source_port": "-"
},
"host": {
"hostname": "NexusLite-PC",
"ip": "172.16.254.10",
"os": "Windows 11 Pro"
}
}
|
ProcessName được hiển thị ở trên là C:\Windows\System32\OpenSSH\sshd.exe cho thấy rõ ràng sự kiện đăng nhập thành công qua ssh và ip máy chủ được đăng nhập nằm ở trường ip: 172.16.254.10, tuy nhiên không tìm thấy thông tin gì về ip đăng nhập.
Thay vào đó ta sẽ tìm thông tin đăng nhập này trên Sysmon log
Kết quả trả về có 8866 dòng log tương ứng và ip thực hiện ở đây là ip: 172.16.254.49 và đây cũng chính là ip attacker. Việc có hàng nghìn kết nối TCP từ cùng một IP vào port 22 cho thấy rõ brute-force SSH attack.
Đây là giai đoạn tấn công Credential Access trong MITRE ATT&CK (T1110 – Brute Force).
Tiếp tục lọc theo winlog.event_data.Image: C:\Windows\System32\OpenSSH\ssh.exe
Ta thấy scp được sử dụng để copy file Drop.exe từ linux sang Downloads của windows
Resource
- https://cloudfly.vn/techblog/cach-cai-dat-elaticsearch-logstash-va-kibana-elastic-stack-tren-ubuntu-2004#b-c-1-c-i-t-v-thi-t-l-p-c-u-h-nh-elaticsearch
- https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-elastic-stack-on-ubuntu-22-04
- https://123host.vn/community/tutorial/huong-dan-cai-dat-suricata-tren-ubuntu-20-04.html
- https://docs.suricata.io/en/latest/install/ubuntu.html
- https://www.elastic.co/downloads/beats/filebeat