So sánh các phương pháp tiếp cận Threat Intelligence
Tìm hiểu sâu về Cyber Threat Intelligence (CTI) sẽ sớm bộc lộ một sự thật phũ phàng: các luồng dữ liệu thô là một mớ hỗn độn nếu không có một trung tâm điều phối. Bạn thường đứng trước hai lựa chọn: ký một hợp đồng trị giá hàng chục nghìn đô la với một nhà cung cấp SaaS quản lý hoặc tự xây dựng hệ thống riêng. Các nền tảng thương mại mang lại sự tiện lợi, nhưng chúng thường tính phí trên mỗi người dùng hoặc mỗi chỉ số (indicator). Khi dữ liệu của bạn tăng lên, chi phí đó sẽ tăng vọt. Hơn nữa, bạn cuối cùng sẽ phải chia sẻ các mô hình điều tra nội bộ của mình với một nhà cung cấp bên thứ ba.
Tự lưu trữ (Self-hosting) OpenCTI giúp bạn nắm quyền kiểm soát hoàn toàn. Bạn sở hữu dữ liệu, hạ tầng và sự riêng tư. Vì được xây dựng trên tiêu chuẩn STIX2, nó có cùng ngôn ngữ với hầu hết mọi công cụ bảo mật hiện đại. Đối với các kỹ sư, việc thiết lập này là một bài học chuyên sâu về kiến trúc hiện đại. Bạn sẽ làm việc trực tiếp với Elasticsearch để tìm kiếm, RabbitMQ để truyền tin và Redis để lưu trữ đệm (caching). Đây là một hệ sinh thái bảo mật hoàn chỉnh trong một gói duy nhất.
Thực tế của việc tự lưu trữ OpenCTI
Vận hành hệ thống riêng mang lại nhiều lợi ích, nhưng đòi hỏi cái nhìn thực tế về những đánh đổi.
Lợi ích
- Quyền chủ quyền dữ liệu tuyệt đối: Các cuộc điều tra nội bộ và các chỉ số nhạy cảm của bạn không bao giờ rời khỏi mạng nội bộ.
- Chi phí dự đoán được: Một VPS giá 40 USD/tháng thường có thể xử lý những gì mà một nhà cung cấp SaaS sẽ tính phí hàng nghìn USD.
- Tùy biến không giới hạn: Bạn có thể xây dựng các bộ kết nối (connector) tùy chỉnh cho các nguồn dữ liệu ngách hoặc nhật ký nội bộ riêng biệt.
- Ánh xạ nâng cao: Đồ thị tri thức (knowledge graphs) của nền tảng cho phép bạn chuyển từ một địa chỉ IP đơn lẻ sang một chiến dịch tấn công đầy đủ liên quan đến các nhóm APT và dòng mã độc cụ thể.
Thách thức
- Yêu cầu tài nguyên lớn: OpenCTI là một “con quái vật” microservices. Nó không phải là thứ bạn có thể chạy trên một chiếc Raspberry Pi giá 5 USD.
- Gánh nặng vận hành: Bạn vừa là Quản trị viên cơ sở dữ liệu (DBA) vừa là Quản trị hệ thống (SysAdmin). Việc sao lưu, cập nhật schema và tối ưu hóa cơ sở dữ liệu đều nằm trên vai bạn.
- Độ phức tạp: Chuyển từ các danh sách đen CSV đơn giản sang mô hình đồ thị STIX2 đòi hỏi một quá trình học hỏi đáng kể.
Yêu cầu phần cứng
Tôi đã thấy nhiều hệ thống thất bại vì người dùng cố gắng tiết kiệm RAM. Các dịch vụ con của OpenCTI rất ngốn bộ nhớ. Để tránh tình trạng sập hệ thống liên tục và lỗi “Hết bộ nhớ” (OOM), hãy tuân thủ các mức tối thiểu sau:
- CPU: Tối thiểu 4 lõi. 8 lõi nếu bạn dự định nạp các nguồn dữ liệu nặng như AlienVault hoặc OSINT hàng ngày.
- RAM: 16GB là mức cơ bản. Riêng Elasticsearch sẽ cần từ 4GB đến 8GB để duy trì các truy vấn nhanh chóng.
- Lưu trữ: 50GB+ NVMe hoặc SSD. Chỉ số IOPS cao là cực kỳ quan trọng đối với hiệu suất cơ sở dữ liệu.
- Hệ điều hành: Ubuntu 22.04 LTS là lựa chọn ổn định nhất cho các triển khai dựa trên Docker.
Hướng dẫn triển khai từng bước
Docker Compose là cách tốt nhất để điều phối hệ thống này. Nó quản lý OpenCTI API, giao diện người dùng (frontend) và bốn phụ thuộc bắt buộc: Redis, Elasticsearch, MinIO và RabbitMQ.
1. Khởi tạo môi trường
Bắt đầu bằng cách tạo một không gian làm việc sạch sẽ. Việc tổ chức tốt sẽ ngăn chặn những rắc rối trong các lần cập nhật tương lai.
mkdir opencti-docker && cd opencti-docker
2. Bảo mật thông tin xác thực
OpenCTI dựa vào một số mã UUID và mật khẩu để liên kết các dịch vụ của nó. Bảo mật không phải là tùy chọn ở đây. Tôi khuyên bạn nên sử dụng một công cụ trên trình duyệt như toolcraft.app để tạo các khóa của mình. Nó xử lý mọi thứ cục bộ, vì vậy bí mật của bạn không bao giờ truyền qua mạng. Bạn sẽ cần một UUID v4 cho Admin ID và các chuỗi ký tự duy nhất cho RabbitMQ và MinIO.
3. Cấu hình tệp môi trường (.env)
Chúng ta sử dụng tệp .env để giữ dữ liệu nhạy cảm tách biệt khỏi các tệp logic. Đây là một quy chuẩn DevOps tiêu chuẩn. Tạo tệp bằng lệnh nano .env và điền nội dung:
[email protected]
OPENCTI_ADMIN_PASSWORD=mat_khau_manh_cua_ban
OPENCTI_ADMIN_TOKEN=uuid_v4_cua_ban_tai_day
OPENCTI_BASE_URL=http://localhost:8080
# Tối ưu hóa cơ sở dữ liệu
ELASTICSEARCH_MEMORY=4G
REDIS_HOST=redis
MINIO_ROOT_USER=opencti
MINIO_ROOT_PASSWORD=mat_khau_minio_bao_mat
# Thông tin xác thực RabbitMQ
RABBITMQ_DEFAULT_USER=opencti
RABBITMQ_DEFAULT_PASS=mat_khau_rabbit_bao_mat
4. Định nghĩa Docker Compose Stack
Tệp docker-compose.yml đóng vai trò như một bản thiết kế. Nó đảm bảo rằng cơ sở dữ liệu và trình chuyển tiếp tin nhắn khởi động trước khi API cố gắng kết nối. Lưu ý về phiên bản; việc sử dụng hình ảnh ổn định mới nhất (hiện là 6.0.x) được khuyến khích.
version: '3'
services:
redis:
image: redis:7.2.4
restart: always
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms${ELASTICSEARCH_MEMORY} -Xmx${ELASTICSEARCH_MEMORY}"
restart: always
minio:
image: minio/minio
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
command: server /data
restart: always
rabbitmq:
image: rabbitmq:3.12-management
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
restart: always
opencti:
image: opencti/platform:6.0.10
environment:
- APP__ADMIN__EMAIL=${OPENCTI_ADMIN_EMAIL}
- APP__ADMIN__PASSWORD=${OPENCTI_ADMIN_PASSWORD}
- APP__ADMIN__TOKEN=${OPENCTI_ADMIN_TOKEN}
- REDIS__HOSTNAME=redis
- ELASTICSEARCH__URL=http://elasticsearch:9200
- MINIO__ENDPOINT=minio
- MINIO__PORT=9000
- RABBITMQ__HOSTNAME=rabbitmq
ports:
- "8080:8080"
depends_on:
- redis
- elasticsearch
- minio
- rabbitmq
5. Khởi chạy và Giám sát
Kích hoạt hệ thống chỉ với một câu lệnh duy nhất. Quá trình khởi động ban đầu có thể mất từ 3 đến 5 phút khi Elasticsearch xây dựng các chỉ mục và nền tảng thực hiện di chuyển dữ liệu (migrations).
docker-compose up -d
Theo dõi quá trình khởi động để phát hiện sớm các lỗi:
docker-compose logs -f opencti
Khi bạn thấy thông báo [OPENCTI] Platform ready, hãy trỏ trình duyệt của bạn tới địa chỉ http://ip-server-cua-ban:8080. Đăng nhập bằng thông tin xác thực từ tệp .env của bạn.
Nạp dữ liệu cho nền tảng
Một nền tảng CTI trống rỗng chỉ là một bảng điều khiển đẹp mắt không có giá trị. Để làm cho nó hữu ích, bạn cần triển khai các “Connectors”. Đây là các container nhẹ đóng vai trò cầu nối giữa OpenCTI với các nguồn dữ liệu bên ngoài. Hiện có hơn 100 bộ kết nối chính thức có sẵn.
Tôi khuyên bạn nên bắt đầu với các bộ kết nối MITRE ATT&CK và Abuse.ch. Chúng cung cấp một nền tảng tức thì về các kỹ thuật tấn công đã biết và các URL độc hại đang hoạt động. Hãy để ý đến dung lượng đĩa của bạn; một hệ thống bận rộn có thể dễ dàng tạo ra 10GB dữ liệu chỉ mục trong tuần đầu tiên.

