SIEM/Log Management Use Case: Phát hiện Tấn công Web (SQLi, XSS, Log4Shell)

I. Mô tả yêu cầu của bài Lab
1.1. Mô tả sơ bộ bài lab

Bài lab này tập trung vào việc xây dựng một hệ thống giám sát và phát hiện các cuộc tấn công vào ứng dụng web, bao gồm SQL Injection, Cross-Site Scripting và Log4Shell. Mục đích là giúp kỹ sư SOC có thể phát hiện sớm các cuộc tấn công, gửi cảnh báo real-time qua Telegram và tự động chặn IP tấn công để giảm thiểu rủi ro. Hệ thống sử dụng OpenSearch làm nền tảng lưu trữ log, Python để xử lý luồng nghiệp vụ và Dashboard để trực quan hóa dữ liệu.

Thiết bị và công nghệ sử dụng trong bài lab:
  • Hệ điều hành Ubuntu 20.04 LTS chạy trên máy ảo VMware.​
  • OpenSearch và OpenSearch Dashboards triển khai trên Docker.​
  • Python 3 để viết các script xử lý.​
  • Telegram Bot API để gửi cảnh báo.​
  • Iptables trên Ubuntu để thực hiện chặn IP.​
1.2. Mô tả vấn đề cần giải quyết
Trong quá trình vận hành, các ứng dụng web thường xuyên bị tấn công bởi các kỹ thuật phổ biến như SQL Injection, XSS và Log4Shell. Việc phát hiện bằng tay là không khả thi vì lượng log quá lớn. Bài lab này hướng đến giải quyết các vấn đề cụ thể sau:​
  • Tự động parse log web server/WAF để lấy thông tin request (URI, body, phương thức, IP nguồn).​
  • Xây dựng bộ quy tắc phát hiện (detection rules) để nhận diện pattern tấn công trong URI và body.​
  • Gửi cảnh báo ưu tiên cao qua Telegram khi phát hiện tấn công.​
  • Tự động block IP tấn công trên firewall để ngăn chặn tiếp tục gây hại.​
  • Hiển thị dashboard thống kê các loại tấn công theo thời gian, giúp kỹ sư SOC nắm bắt tình hình nhanh chóng.​

II. Giải pháp
2.1. Kiến trúc tổng thể

Hệ thống được xây dựng theo mô hình pipeline xử lý tuần tự. Log web server/WAF được tạo từ script mô phỏng, sau đó được lưu vào OpenSearch. Script detection chạy định kỳ để đọc log mới, áp dụng bộ quy tắc và đưa ra quyết định xử lý. Khi phát hiện tấn công, hệ thống thực hiện ba hành động đồng thời: gửi cảnh báo Telegram, block IP trên iptables và lưu alert vào OpenSearch để hiển thị trên Dashboard.
1781788880431.png

Hình 1: Kiến trúc hệ thống phát hiện tấn công Web.

2.2. Triển khai chi tiết
2.2.1. Cài đặt OpenSearch Stack

Sử dụng Docker Compose để triển khai OpenSearch và OpenSearch Dashboards. File docker-compose.yml được tạo với hai container: opensearch và opensearch-dashboards. Sau khi chạy lệnh docker-compose up -d, OpenSearch hoạt động ở cổng 9200 và Dashboards ở cổng 5601. Kiểm tra thành công bằng lệnh curl tới localhost:9200.

2.2.2. Tạo Log Web Server/WAF
Script generate_web_logs.py được viết để mô phỏng log web server. Script này tạo ra 50 log mỗi lần chạy, trong đó khoảng 70% là các request chứa pattern tấn công. Các pattern được lấy ngẫu nhiên từ danh sách SQL Injection, XSS và Log4Shell. Log được định dạng bao gồm timestamp, source IP, phương thức HTTP, URI, body và loại tấn công. Sau khi chạy script, dữ liệu được ghi vào OpenSearch với index web-logs-YYYY.MM.DD.
1781789578387.png

Hình 2: Web logs hiển thị trên Discover.

2.2.3. Xây dựng Detection Rules
Bộ quy tắc được định nghĩa trong file detection_rules.json với cấu trúc bao gồm tên rule, mức độ nghiêm trọng và danh sách các pattern dạng regex. Ba loại tấn công được hỗ trợ:​
  • SQL Injection: các pattern như (OR|AND)\s+\d+\s*=\s*\d+, UNION\s+SELECT, DROP\s+TABLE.​
  • XSS: các pattern như <script>.*</script>, onerror\s*=, javascript:, <img.*onerror=.​
  • Log4Shell: các pattern như \$\{jndi:.*\}, \$\{rmi:.*\}, \$\{ldap:.*\}.​
  • Các pattern được biên dịch thành regex để tăng hiệu suất khi so khớp.​

2.2.4. Core Detection Engine
Script detect_web_attacks.py là thành phần xử lý chính. Khi chạy, script thực hiện các bước:​
  1. Đọc bộ quy tắc từ file detection_rules.json.​
  2. Truy vấn OpenSearch để lấy log web trong vòng 5 phút gần nhất.​
  3. Với mỗi log, kết hợp URI và body thành một chuỗi, sau đó kiểm tra lần lượt từng rule.​
  4. Nếu tìm thấy pattern trùng khớp, script gửi cảnh báo qua Telegram, block IP bằng iptables và lưu alert vào OpenSearch với index web-attacks-YYYY.MM.DD.​

2.2.5. Cài đặt Telegram Bot
Bot được tạo thông qua BotFather trên Telegram với tên C2 Alert Bot và username c2alert_security_bot. Token nhận được được sử dụng trong script để gửi tin nhắn. Chat ID được lấy bằng cách gửi tin nhắn đến bot và đọc response từ API. Nội dung cảnh báo bao gồm thời gian, IP tấn công, URI, loại tấn công và mức độ nghiêm trọng.
1781789980132.png

Hình 3: Cảnh báo tấn công web nhận được trên Telegram.

2.2.6. Trực quan hóa trên Dashboard
Truy cập OpenSearch Dashboards và tạo index pattern web-attacks-*. Xây dựng Dashboard với 4 biểu đồ:​
  • Attack Timeline: biểu đồ đường thể hiện số lượng tấn công theo thời gian.​
  • Top Attack Types: biểu đồ tròn phân loại tỷ lệ các loại tấn công (SQLi, XSS, Log4Shell).​
  • Top Attacker IPs: biểu đồ cột ngang hiển thị IP tấn công nhiều nhất.​
  • Attack by Severity: biểu đồ tròn phân phối mức độ HIGH và CRITICAL.​
1781790284904.png

Hình 4: Dashboard Web Attack Monitoring.

2.2.7. Tự động hóa với Cron Job
Để hệ thống chạy tự động, tạo script run_detection.sh để gọi detect_web_attacks.py và ghi log ra file. Thêm cron job với lệnh crontab -e để script chạy mỗi 5 phút. Kiểm tra bằng crontab -l để xác nhận job đã được thêm thành công.

III. Kết luận

Sau khi triển khai, hệ thống đã đáp ứng được các yêu cầu đề ra. Cụ thể: 50 log web được tạo, trong đó 30 log chứa tấn công. Hệ thống phát hiện được tổng cộng 149 web attacks và ghi nhận vào OpenSearch. Telegram nhận được cảnh báo ngay sau khi phát hiện, bao gồm thông tin IP tấn công, URI và loại tấn công. Các IP bị block được ghi nhận trên iptables và có thể kiểm tra bằng lệnh iptables -L INPUT -n. Dashboard hiển thị các biểu đồ trực quan, giúp kỹ sư SOC dễ dàng xác định loại tấn công phổ biến và IP nguy hiểm nhất. Bài lab cho thấy hiệu quả của việc kết hợp OpenSearch, Python và Telegram trong xây dựng hệ thống giám sát an ninh mạng, đồng thời tạo tiền đề để mở rộng thêm các loại tấn công khác.






 
Back
Top