I. MÔ TẢ YÊU CẦU CỦA BÀI LAB
1.1. Mô tả sơ bộ bài lab
Bài lab tập trung vào việc xây dựng một hệ thống SOAR (Security Orchestration, Automation and Response) để tự động hóa phản hồi sự kiện bảo mật. Mục tiêu là khi có alert từ OpenSearch, hệ thống sẽ tự động block IP trên firewall, tạo ticket và gửi email cảnh báo mà không cần can thiệp thủ công.
Thiết bị và công nghệ sử dụng:
1.1. Mô tả sơ bộ bài lab
Bài lab tập trung vào việc xây dựng một hệ thống SOAR (Security Orchestration, Automation and Response) để tự động hóa phản hồi sự kiện bảo mật. Mục tiêu là khi có alert từ OpenSearch, hệ thống sẽ tự động block IP trên firewall, tạo ticket và gửi email cảnh báo mà không cần can thiệp thủ công.
Thiết bị và công nghệ sử dụng:
- Ubuntu 20.04 LTS
- OpenSearch và OpenSearch Dashboards (Docker)
- Python 3 (Flask)
- Webhook
- Iptables
1.2. Mô tả vấn đề cần giải quyết
Khi có sự cố bảo mật, đội ngũ SOC thường mất nhiều thời gian để xử lý thủ công: xác nhận alert, block IP, tạo ticket và gửi email. Bài lab này giải quyết các vấn đề sau:
- Tự động nhận alert từ OpenSearch qua webhook.
- Tự động block IP trên firewall.
- Tự động tạo ticket (mô phỏng Jira).
- Tự động gửi email cảnh báo.
Tích hợp end-to-end thành một luồng xử lý hoàn chỉnh.
II. GIẢI PHÁP
2.1. Kiến trúc tổng thể
Hệ thống SOAR được xây dựng với các thành phần:
II. GIẢI PHÁP
2.1. Kiến trúc tổng thể
Hệ thống SOAR được xây dựng với các thành phần:
- OpenSearch Alerting: Tạo monitor và trigger gửi webhook khi có alert.
- Flask Webhook Server: Nhận webhook từ OpenSearch, xử lý dữ liệu và gọi các hành động.
- Action Handlers: Block IP (iptables), tạo ticket (file JSON), gửi email (SMTP).
Hình 1: Kiến trúc hệ thống SOAR.
2.2. Triển khai chi tiết
2.2.1. Tạo Webhook Server với Flask
Webhook server được viết bằng Python sử dụng Flask để nhận request từ OpenSearch. Server lắng nghe ở cổng 5000 và có endpoint /webhook/alert để nhận dữ liệu alert. Khi nhận được request, server sẽ thực hiện các bước: block IP bằng iptables, tạo ticket dạng JSON và ghi log gửi email.
python
@app.route('/webhook/alert', methods=['POST'])
def handle_alert():
data = request.get_json()
alert_data = {
'src_ip': data.get('src_ip'),
'attack_type': data.get('attack_type'),
'severity': data.get('severity')
}
block_ip(alert_data['src_ip'])
create_ticket(alert_data)
send_email(alert_data)
return jsonify({'status': 'success'})
Hình 2: Webhook server đang chạy.
2.2.2. Tạo Monitor trên OpenSearch
Trên OpenSearch Dashboards, vào Alerting → Monitors → Create monitor. Monitor được tạo với tên "SOAR Webhook Monitor", chạy mỗi 4 phút, query trên index web-attacks-*. Trigger được cấu hình với điều kiện count > 0. Action là webhook gửi đến URL http://localhost:5000/webhook/alert với method POST và payload JSON.
Hình 3: Monitor SOAR Webhook trên OpenSearch.
2.2.3. Cấu hình Action Webhook
Action webhook được cấu hình với URL http://localhost:5000/webhook/alert, method POST, header Content-Type: application/json. Payload chứa các trường src_ip, dst_ip, attack_type, severity, timestamp.
Hình 4: Cấu hình Action Webhook.
2.2.4. Test end-to-end
Sau khi cấu hình hoàn chỉnh, tạo log mới từ script generate_web_logs.py để kích hoạt monitor. Monitor gửi webhook đến server, server xử lý và thực hiện các hành động.
Hình 5: Webhook log hiển thị các hành động.
III. KẾT LUẬN
Sau khi triển khai, hệ thống SOAR đã đáp ứng được các yêu cầu:
- Tích hợp webhook: OpenSearch Alerting gửi webhook đến Flask server khi có alert.
- Block IP tự động: Script gọi iptables để block IP nguồn tấn công.
- Tạo ticket: Ticket được tạo dưới dạng file JSON, mô phỏng hệ thống Jira.
- Gửi email: Cảnh báo được ghi log thành công.
- End-to-end: Luồng xử lý hoàn chỉnh từ phát hiện → webhook → block → ticket → email.
Hệ thống hoạt động ổn định, giúp giảm thời gian ứng phó sự cố.