SIEM/Log Management PHÁT HIỆN PORT SCAN & NETWORK ANOMALY

I. YÊU CẦU BÀI LAB
1.1. Giới thiệu bài lab

Trong quá trình làm việc tại trung tâm SOC, tôi nhận thấy các cuộc tấn công dò quét cổng (port scan) diễn ra hàng ngày. Kẻ tấn công sử dụng các công cụ như Nmap, Masscan để phát hiện dịch vụ đang chạy trên hệ thống mục tiêu. Việc phát hiện sớm các hành vi này giúp đội ngũ vận hành có thể chủ động ngăn chặn trước khi kẻ tấn công kịp khai thác lỗ hổng.

Bài lab này xây dựng một hệ thống giám sát và phát hiện port scan dựa trên log kết nối mạng. Điểm đặc biệt là sử dụng bucket-level monitor để đếm số lượng cổng đích phân biệt từ một IP nguồn. Khi phát hiện một IP quét hơn 10 cổng trong vòng 1 phút, hệ thống sẽ tự động ghi nhận sự kiện và hiển thị trên heatmap dashboard.

Thiết bị sử dụng trong bài lab:​
  • Máy ảo Ubuntu 20.04 LTS với cấu hình 4GB RAM và 2 CPU​
  • ELK Stack phiên bản 7.17.15 (Elasticsearch, Logstash, Kibana)​
  • Dữ liệu log network được sinh ra từ script mô phỏng​
1.2. Mô tả vấn đề cần giải quyết
Trong quá trình vận hành hệ thống, tôi nhận thấy các cuộc tấn công port scan thường để lại dấu vết rất đặc trưng: một địa chỉ IP nguồn kết nối đến nhiều cổng đích khác nhau trong một khoảng thời gian ngắn. Tuy nhiên, với lượng log khổng lồ từ firewall và các thiết bị mạng, việc phát hiện thủ công gần như là bất khả thi. Bài lab này giải quyết bài toán bằng cách xây dựng một pipeline tự động từ thu thập log, parse dữ liệu, phát hiện bất thường dựa trên distinct count, đến hiển thị trực quan trên heatmap.

II. TRIỂN KHAI
2.1. Giải pháp tổng thể

Hệ thống sử dụng ELK Stack làm nền tảng xử lý log trung tâm. Log kết nối mạng được Logstash đọc từ file, parse các trường như IP nguồn, IP đích, cổng nguồn, cổng đích và giao thức. Dữ liệu sau đó được đẩy vào Elasticsearch. Watcher sẽ chạy định kỳ mỗi phút, thực hiện aggregation để đếm số lượng distinct destination port theo từng source IP. Nếu phát hiện IP nào có số lượng cổng vượt ngưỡng 10, watcher sẽ ghi log cảnh báo. Cuối cùng, heatmap dashboard trên Kibana hiển thị mức độ dày đặc của các kết nối theo thời gian.
1781102896483.png

Quy trình phát hiện hoạt động quét cổng (Port Scanning) sử dụng Elastic Stack

2.2. Cài đặt ELK Stack bằng Docker
Tôi chọn Docker để triển khai vì tính nhất quán và dễ dàng tái sử dụng. File docker-compose.yml định nghĩa ba service: elasticsearch, logstash và kibana. Các container được kết nối qua network bridge để có thể giao tiếp với nhau bằng tên service.
Sau khi chạy lệnh docker-compose up -d, kiểm tra các container bằng docker ps. Cả ba container đều ở trạng thái Up, sẵn sàng xử lý dữ liệu.

1781103530380.png

Hình 1: Ba container elasticsearch, logstash, kibana đang chạy

2.3. Cấu hình Logstash

Logstash đóng vai trò thu thập và parse log. Pattern grok được tinh chỉnh để trích xuất chính xác các trường cần thiết cho việc phân tích port scan như src_ip, dst_ip, dport.
Sau khi cấu hình xong, Logstash bắt đầu đọc file log và gửi dữ liệu vào Elasticsearch.

2.4. Tạo dữ liệu mô phỏng port scan

Để mô phỏng hành vi quét cổng, tôi tạo một file log với 15 dòng, mỗi dòng là một kết nối từ cùng IP 10.0.0.100 đến các cổng khác nhau từ 21 đến 35.
Sau khi Logstash xử lý, dữ liệu được ghi vào Elasticsearch. Kiểm tra nhanh bằng lệnh curl trên terminal cho thấy index network-logs-2026.06.10 có 15 bản ghi.
1781104176635.png

Hình 2: Dữ liệu network logs đã vào Elasticsearch với 15 records

2.5. Tạo Index Pattern trên Kibana

Trước khi có thể tìm kiếm và phân tích dữ liệu trên Kibana, cần tạo index pattern. Truy cập giao diện web Kibana tại http://localhost:5601, vào Stack Management → Index Patterns → Create index pattern.

Nhập network-logs-* làm index pattern, chọn @timestamp làm timestamp field.
1781104451258.png

Hình 3: Giao diện tạo Index Pattern trên Kibana

Sau khi tạo thành công, index pattern network-logs-* xuất hiện trong danh sách.

1781153134107.png

Hình 4: Danh sách Index Patterns trên Kibana bao gồm network-logs-*

2.6. Xem dữ liệu trong Discover

Vào Discover trên Kibana, chọn index pattern network-logs-*. Tại đây có thể thấy 15 bản ghi log với các field đã được parse: src_ip, dst_ip, dport, sport, proto.

1781155315153.png

Hình 5: Giao diện Discover hiển thị 15 log kết nối mạng đã được parse

Có thể lọc theo src_ip để chỉ hiển thị các kết nối từ IP 10.0.0.100.

1781156612916.png

Hình 6: Bộ lọc theo src_ip = 10.0.0.100 hiển thị 15 kết nối đến 15 cổng khác nhau

2.7. Tạo Detection Rule trên Kibana

Vào Security → Rules → Create new rule. Chọn Custom query rule. Điền thông tin:

Tên rule: Port Scan Detection
Index patterns: network-logs-*
Query: *
Severity: High
Risk score: 80
1781157169646.png

Hình 7: Giao diện tạo Detection Rule trên Kibana

Sau khi lưu, rule xuất hiện trong danh sách với trạng thái Enabled.
1781157965537.png

Hình 8: Danh sách Detection Rules hiển thị rule Port Scan Detection đã được tạo

2.8. Tạo Watcher trên Kibana

Vào Stack Management → Watcher → Create watch. Chọn Advanced watch.

Cấu hình watcher với aggregation để đếm distinct ports:
Interval: 1 minute
Indices: network-logs-*
Query: range timestamp trong 1 phút gần nhất
Aggregation: terms theo src_ip, cardinality theo dport
Condition: unique_ports.value > 10
Action: log
1781158350270.png

Hình 9: Giao diện cấu hình Watcher trên Kibana

Sau khi tạo, watcher xuất hiện trong danh sách với trạng thái active.
1781161274740.png

Hình 10: Danh sách Watcher hiển thị portscan_final đã được tạo

2.9. Kiểm tra Watcher History

Vào Watcher → History để xem lịch sử thực thi. Các lần chạy gần nhất hiển thị trạng thái thành công.
1781162009129.png

Hình 11: Lịch sử Watcher hiển thị các lần thực thi thành công

2.10. Tạo Heatmap Dashboard

Vào Dashboard → Create dashboard → Create visualization. Chọn Heatmap.

Cấu hình heatmap:

Index pattern: network-logs-*
Vertical axis: src_ip.keyword
Horizontal axis: @timestamp (interval: auto)
Value: Count
1781162971368.png

Hình 12: Giao diện tạo Heatmap Visualization trên Kibana

Kết quả heatmap hiển thị rõ mật độ kết nối từ IP 10.0.0.100 theo thời gian. Màu càng đậm thể hiện số lượng kết nối càng nhiều.
1781163714080.png

Hình 13: Heatmap Dashboard hiển thị mức độ port scan từ IP 10.0.0.100 theo thời gian

Lưu dashboard với tên Port Scan Monitoring Dashboard.

1781163942950.png

Hình 14: Dashboard hoàn chỉnh trên Kibana

III. KẾT LUẬN
3.1. Kết quả đạt được

Sau quá trình triển khai, toàn bộ các yêu cầu của bài lab đã được đáp ứng. Hệ thống thu thập thành công 15 bản ghi log network từ IP 10.0.0.100 quét 15 cổng khác nhau. Index pattern network-logs-* được tạo và hoạt động bình thường trên giao diện Kibana. Detection rule phát hiện các kết nối với mức severity high và risk score 80. Watcher sử dụng bucket-level aggregation đã đếm chính xác số lượng distinct destination port (15 cổng) và chạy thành công không có lỗi. Heatmap dashboard hiển thị rõ mật độ kết nối từ IP 10.0.0.100 theo thời gian với màu sắc trực quan.

3.2. Giá trị mang lại
Giải pháp này giúp doanh nghiệp chủ động phát hiện các hoạt động dò quét cổng từ giai đoạn đầu của chuỗi tấn công. Việc sử dụng bucket-level monitor với distinct count đảm bảo phát hiện chính xác hành vi port scan, tránh cảnh báo sai với các kết nối bình thường. Heatmap dashboard cung cấp cái nhìn trực quan về xu hướng tấn công theo thời gian, hỗ trợ đội ngũ bảo mật trong việc đánh giá mức độ nguy hiểm. Hệ thống có thể dễ dàng mở rộng để kết hợp với firewall nhằm tự động chặn các IP có hành vi port scan.​
 
Back
Top