From 3c003016c296a6ebfc80bfd577d2a74513837cd6 Mon Sep 17 00:00:00 2001 From: FunnyWolf Date: Sun, 7 Sep 2025 20:02:11 +0800 Subject: [PATCH] first commit --- .gitignore | 171 +++++++++++ CONFIG.example.py | 26 ++ Core/__init__.py | 0 Core/engine.py | 92 ++++++ Core/module_loader.py | 42 +++ Docker/redis_stack/docker-compose.yml | 12 + External/__init__.py | 0 External/difyclient.py | 49 ++++ External/nocodbclient.py | 24 ++ External/opanaiapi.py | 102 +++++++ External/thehiveclient.py | 21 ++ Forwarder/app.py | 58 ++++ Forwarder/log.py | 23 ++ LICENSE | 22 ++ Lib/__init__.py | 0 Lib/base.py | 92 ++++++ Lib/configs.py | 6 + Lib/llmapi.py | 11 + Lib/log.py | 23 ++ Lib/redis_client.py | 32 +++ Lib/redis_stream_api.py | 265 ++++++++++++++++++ ...ng_User_Report_Kibana_Langgraph_Thehive.py | 101 +++++++ ...Phishing_User_Report_Splunk_Dify_Nocodb.py | 187 ++++++++++++ .../senior_phishing_expert.md | 42 +++ README.md | 75 +++++ Static/img.png | Bin 0 -> 205414 bytes main.py | 24 ++ requirements.txt | 11 + 28 files changed, 1511 insertions(+) create mode 100644 .gitignore create mode 100644 CONFIG.example.py create mode 100644 Core/__init__.py create mode 100644 Core/engine.py create mode 100644 Core/module_loader.py create mode 100644 Docker/redis_stack/docker-compose.yml create mode 100644 External/__init__.py create mode 100644 External/difyclient.py create mode 100644 External/nocodbclient.py create mode 100644 External/opanaiapi.py create mode 100644 External/thehiveclient.py create mode 100644 Forwarder/app.py create mode 100644 Forwarder/log.py create mode 100644 LICENSE create mode 100644 Lib/__init__.py create mode 100644 Lib/base.py create mode 100644 Lib/configs.py create mode 100644 Lib/llmapi.py create mode 100644 Lib/log.py create mode 100644 Lib/redis_client.py create mode 100644 Lib/redis_stream_api.py create mode 100644 MODULES/Phishing_User_Report_Kibana_Langgraph_Thehive.py create mode 100644 MODULES/Phishing_User_Report_Splunk_Dify_Nocodb.py create mode 100644 MODULES_DATA/Phishing_User_Report_V1/senior_phishing_expert.md create mode 100644 README.md create mode 100644 Static/img.png create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25b24b2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,171 @@ +### Django template +*.log +*.pot +*.pyc +__pycache__/ +local_settings.py +db.sqlite3 +db.sqlite3-journal +media + +# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ +# in your Git repository. Update and uncomment the following line accordingly. +# /staticfiles/ + +### Python template +# Byte-compiled / optimized / DLL files +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo + +# Django stuff: + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +.idea/ +Test/* +CONFIG.py +Test \ No newline at end of file diff --git a/CONFIG.example.py b/CONFIG.example.py new file mode 100644 index 0000000..4952cd6 --- /dev/null +++ b/CONFIG.example.py @@ -0,0 +1,26 @@ +FLASK_LISTEN_PORT = 7000 +FLASK_LISTEN_HOST = "0.0.0.0" + +REDIS_HOST = 'localhost' +REDIS_PORT = 6379 +REDIS_DB = 0 +REDIS_PASSWORD = "redis-stack-password-for-ai-soc-framework" + +OPENAI_API_KEY = "sk-xxx" +OPENAI_BASE_URL = "https://api.openai.com/v1" +OPENAI_MODEL = "" +OPENAI_PROXY = "" + +DIFY_BASE_URL = "https://api.dify.ai/v1" +DIFY_PROXY = None + +DIFY_API_KEY = { + "Phishing_User_Report_Splunk_Dify_Nocodb": "app-xxx" +} + +THEHIVE_URL = "https://192.168.1.114:443" +THEHIVE_API_KEY = "xxx" + +NOCODB_URL = "http://192.168.1.114:8080" +NOCODB_TOKEN = "xxx" +NOCODB_ALERT_TABLE_ID = "xxx" diff --git a/Core/__init__.py b/Core/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Core/engine.py b/Core/engine.py new file mode 100644 index 0000000..9ae2df1 --- /dev/null +++ b/Core/engine.py @@ -0,0 +1,92 @@ +import importlib +import os +import threading +import time + +from Core.module_loader import start_watching +from Lib.log import logger + + +class Engine: + def __init__(self): + self.modules = {} + self.modules_dir = "MODULES" + self.observer = None + + def start(self): + if not os.path.isdir(self.modules_dir): + os.makedirs(self.modules_dir) + + self._load_initial_modules() + self.observer = start_watching(self, self.modules_dir) + + logger.info("Engine started successfully, beginning module monitoring") + + def stop(self): + if self.observer: + self.observer.stop() + self.observer.join() + + for module_name in list(self.modules.keys()): + self.unload_module(module_name) + logger.info("All modules have been stopped") + + def _load_initial_modules(self): + for filename in os.listdir(self.modules_dir): + if filename.endswith(".py") and not filename.startswith("_"): + module_name = filename.replace(".py", "") + file_path = os.path.join(self.modules_dir, filename) + self.load_module(module_name, file_path) + + def run_loop(self, module_name, instance): + while module_name in self.modules: + logger.debug(f"Start Running module: {module_name}") + try: + instance.run() + except Exception as e: + logger.exception(e) + logger.debug(f"Finish Running module: {module_name}") + time.sleep(0.1) + + def load_module(self, module_name: str, file_path: str): + if module_name in self.modules: + return + + logger.info(f"Loading module: {module_name}") + try: + spec = importlib.util.spec_from_file_location(module_name, file_path) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + + module_class = getattr(module, "Module") + + threads = [] + for i in range(module_class.thread_num): + thread_name = f"{module_name}_thread_{i}" + instance = module_class() + instance._thread_name = thread_name + thread = threading.Thread(target=self.run_loop, args=(module_name, instance), name=thread_name) + thread.daemon = True + threads.append(thread) + + self.modules[module_name] = threads + for thread in self.modules[module_name]: + thread.start() + + logger.info(f"Module '{module_name}' started successfully") + + except Exception as e: + logger.error(f"Failed to load module: {e}") + + def unload_module(self, module_name: str): + if module_name not in self.modules: + return + + logger.info(f"Unloading module: {module_name}") + del self.modules[module_name] + logger.info(f"Module '{module_name}' unloaded successfully") + + def reload_module(self, module_name: str, file_path: str): + logger.info(f"Reloading module: {module_name}") + self.unload_module(module_name) + self.load_module(module_name, file_path) diff --git a/Core/module_loader.py b/Core/module_loader.py new file mode 100644 index 0000000..8be3953 --- /dev/null +++ b/Core/module_loader.py @@ -0,0 +1,42 @@ +import os + +from watchdog.events import FileSystemEventHandler +from watchdog.observers import Observer + +from Lib.log import logger + + +class ModuleChangeHandler(FileSystemEventHandler): + def __init__(self, engine): + self.engine = engine + + def _is_valid_module(self, path: str) -> bool: + filename = os.path.basename(path) + return filename.endswith(".py") and not filename.startswith(("_", ".")) + + def on_created(self, event): + if not event.is_directory and self._is_valid_module(event.src_path): + logger.info(f"New module file detected: {event.src_path}") + module_name = os.path.basename(event.src_path).replace(".py", "") + self.engine.load_module(module_name, event.src_path) + + def on_deleted(self, event): + if not event.is_directory and self._is_valid_module(event.src_path): + logger.info(f"Module file deleted: {event.src_path}") + module_name = os.path.basename(event.src_path).replace(".py", "") + self.engine.unload_module(module_name) + + def on_modified(self, event): + if not event.is_directory and self._is_valid_module(event.src_path): + logger.info(f"Module file modified: {event.src_path}") + module_name = os.path.basename(event.src_path).replace(".py", "") + self.engine.reload_module(module_name, event.src_path) + + +def start_watching(engine, path: str) -> Observer: + event_handler = ModuleChangeHandler(engine) + observer = Observer() + observer.schedule(event_handler, path, recursive=False) + observer.start() + logger.info(f"Starting to monitor directory: '{path}'") + return observer diff --git a/Docker/redis_stack/docker-compose.yml b/Docker/redis_stack/docker-compose.yml new file mode 100644 index 0000000..c826406 --- /dev/null +++ b/Docker/redis_stack/docker-compose.yml @@ -0,0 +1,12 @@ +services: + redis-stack: + image: redis/redis-stack:latest + container_name: redis-stack + restart: always + ports: + - "6379:6379" + - "8001:8001" + environment: + - REDIS_ARGS=--requirepass redis-stack-password-for-ai-soc-framework + volumes: + - ./redis-data:/data \ No newline at end of file diff --git a/External/__init__.py b/External/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/External/difyclient.py b/External/difyclient.py new file mode 100644 index 0000000..82ea01d --- /dev/null +++ b/External/difyclient.py @@ -0,0 +1,49 @@ +from typing import Dict, Any + +import requests + +from CONFIG import DIFY_BASE_URL, DIFY_PROXY +from Lib.log import logger + +requests.packages.urllib3.disable_warnings() + + +class DifyClient(object): + def __init__(self): + self.base_url = DIFY_BASE_URL + + def run_workflow(self, api_key: str, inputs: Dict[str, Any], user: str = "default_user") -> Dict[str, Any]: + url = f"{self.base_url}/workflows/run" + headers = { + "Authorization": f"Bearer {api_key}", + } + payload = { + "inputs": inputs, + "response_mode": "blocking", + "user": user + } + proxies = None + if DIFY_PROXY: + proxies = { + "http": DIFY_PROXY, + "https": DIFY_PROXY, + } + try: + response = requests.post(url, + headers=headers, + json=payload, + proxies=proxies, + ) + response.raise_for_status() + + response_data = response.json() + logger.debug(f"Dify API response: {response_data}") + + data = response_data.get("data", {}) + if data and data.get("status") == "succeeded": + outputs = data.get("outputs") + return outputs + else: + return {} + except Exception as e: + raise diff --git a/External/nocodbclient.py b/External/nocodbclient.py new file mode 100644 index 0000000..02681b8 --- /dev/null +++ b/External/nocodbclient.py @@ -0,0 +1,24 @@ +import requests + +from CONFIG import NOCODB_URL, NOCODB_TOKEN, NOCODB_ALERT_TABLE_ID + + +class NocodbClient(object): + def __init__(self): + pass + + @staticmethod + def create_alert(record: dict): + headers = {"xc-token": NOCODB_TOKEN} + url = f"{NOCODB_URL}/api/v2/tables/{NOCODB_ALERT_TABLE_ID}/records" + + try: + response = requests.post(url, + headers=headers, + json=record) + response.raise_for_status() + + response_data = response.json() + return response_data + except Exception as e: + raise diff --git a/External/opanaiapi.py b/External/opanaiapi.py new file mode 100644 index 0000000..e2894ae --- /dev/null +++ b/External/opanaiapi.py @@ -0,0 +1,102 @@ +import httpx +import urllib3 + +from langchain_core.output_parsers import StrOutputParser +from langchain_openai import ChatOpenAI + +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) +from CONFIG import OPENAI_MODEL, OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_PROXY + + +class OpenAIAPI(object): + def __init__(self): + self.api_key = None + self.base_url = None + self.model = None + self.temperature = 0 + self.alive = False + + def set_api_key(self, api_key): + self.api_key = api_key + + def set_base_url(self, base_url: str): + self.base_url = base_url.rstrip('/') + + def set_temperature(self, temperature: float): + self.temperature = temperature + + def set_model(self, model: str): + self.model = model + + def get_model(self, model_kwargs=None): + if model_kwargs is None: + model_kwargs = {} + self.set_api_key(OPENAI_API_KEY) + self.set_base_url(OPENAI_BASE_URL) + self.set_model(OPENAI_MODEL) + + http_client = None + if OPENAI_PROXY: + http_client = httpx.Client(proxy=OPENAI_PROXY) + return ChatOpenAI( + base_url=self.base_url, + api_key=self.api_key, + model=self.model, + temperature=self.temperature, + http_client=http_client, + model_kwargs=model_kwargs, + + ) + + def is_alive(self): + + model = self.get_model() + + # 基础连通性测试 + parser = StrOutputParser() + chain = model | parser + messages = [ + ("system", "give you `ping` reply `pong`."), + ("human", "ping"), + ] + try: + ai_msg = chain.invoke(messages) + self.alive = False + return True + except Exception as e: + self.alive = False + return False + + def is_support_function_calling(self): + # Function calling 能力测试 + def test_func(x: str) -> str: + """A test function that returns the input string.""" + return x + + model = self.get_model() + try: + model_with_tools = model.bind_tools([test_func]) + test_messages = [ + ("system", "When user says test, call test_func with 'hello' as argument."), + ("human", "test"), + ] + response = model_with_tools.invoke(test_messages) + if not response.tool_calls: + return False + except Exception as e: + return False + return True + + @staticmethod + def is_model_alive(model: ChatOpenAI): + parser = StrOutputParser() + chain = model | parser + messages = [ + ("system", "give you `ping` reply `pong`."), + ("human", "ping"), + ] + try: + ai_msg = chain.invoke(messages) + return True + except Exception as e: + return False diff --git a/External/thehiveclient.py b/External/thehiveclient.py new file mode 100644 index 0000000..8199547 --- /dev/null +++ b/External/thehiveclient.py @@ -0,0 +1,21 @@ +from thehive4py import TheHiveApi +from thehive4py.types.alert import InputAlert, OutputAlert + +from CONFIG import THEHIVE_URL, THEHIVE_API_KEY + + +class TheHiveClient(object): + def __init__(self): + self.hive = TheHiveApi( + url=THEHIVE_URL, + apikey=THEHIVE_API_KEY, + verify=False + ) + + def alert_create(self, alert_data: InputAlert): + try: + ouput_alert: OutputAlert = self.hive.alert.create(alert=alert_data) + return ouput_alert + except Exception as e: + print(f"Error creating alert: {e}") + return None diff --git a/Forwarder/app.py b/Forwarder/app.py new file mode 100644 index 0000000..d12aca8 --- /dev/null +++ b/Forwarder/app.py @@ -0,0 +1,58 @@ +from flask import Flask, request, jsonify + +from CONFIG import FLASK_LISTEN_PORT, FLASK_LISTEN_HOST +from Forwarder.log import logger +from Lib.redis_stream_api import RedisStreamAPI + +redis_stream_api = RedisStreamAPI() +app = Flask(__name__) + + +@app.route("/api/v1/webhook/splunk", methods=["POST"]) +def receive_splunk_webhook(): + if not request.is_json: + return jsonify({"status": "error", "message": "Request must be JSON"}), 400 + + data = request.get_json() + + result = data.pop('result', {}) + search_name = data.get('search_name') + sid = data.get('sid') + host = data.get('app') + owner = data.get('owner') + results_link = data.get('results_link') + + logger.info(f"Splunk webhook: {data}") + redis_stream_api.send_message(search_name, result) + logger.info("Message sent to Redis stream") + # 5. 返回成功响应 + return jsonify({"status": "success", "message": "Webhook received"}), 200 + + +@app.route("/api/v1/webhook/kibana", methods=["POST"]) +def receive_kibana_webhook(): + if not request.is_json: + return jsonify({"status": "error", "message": "Request must be JSON"}), 400 + + data = request.get_json() + rule_name = data.get('rule').get("name") + hits = data.get('context').get("hits") + for hit in hits: + _source = hit.pop('_source', {}) + logger.info(f"elasticsearch webhook: {hit}") + redis_stream_api.send_message(rule_name, _source) + logger.info("Message sent to Redis stream") + # 5. 返回成功响应 + return jsonify({"status": "success", "message": "Webhook received"}), 200 + + +@app.route("/") +def index(): + return "Forwarder is running" + + +if __name__ == '__main__': + logger.info(f"Starting Flask server on http://{FLASK_LISTEN_HOST}:{FLASK_LISTEN_PORT}") + logger.info(f"Splunk Webhook URL : http://{FLASK_LISTEN_HOST}:{FLASK_LISTEN_PORT}/api/v1/webhook/splunk") + logger.info(f"Kibana Webhook URL : http://{FLASK_LISTEN_HOST}:{FLASK_LISTEN_PORT}/api/v1/webhook/kibana") + app.run(host=FLASK_LISTEN_HOST, port=FLASK_LISTEN_PORT) diff --git a/Forwarder/log.py b/Forwarder/log.py new file mode 100644 index 0000000..6297e39 --- /dev/null +++ b/Forwarder/log.py @@ -0,0 +1,23 @@ +import logging +import sys + + +def setup_logging(log_file='main.log'): + """ + Configures the root logger for the entire application. + - Logs to both a file and the console. + - Sets a standardized format for log messages. + """ + logging.basicConfig( + level=logging.INFO, + format='%(levelname)s - %(asctime)s - [%(name)s] - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S', + handlers=[ + logging.FileHandler(log_file), + logging.StreamHandler(sys.stdout) + ] + ) + + +setup_logging() +logger = logging.getLogger("forwarder") diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..119a151 --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2025 funnywolf + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/Lib/__init__.py b/Lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Lib/base.py b/Lib/base.py new file mode 100644 index 0000000..2f64cde --- /dev/null +++ b/Lib/base.py @@ -0,0 +1,92 @@ +import os + +from langchain_core.prompts import SystemMessagePromptTemplate +from langchain_core.runnables import RunnableConfig +from langgraph.checkpoint.memory import MemorySaver +from langgraph.graph.state import CompiledStateGraph + +from CONFIG import DIFY_API_KEY +from Lib.configs import MODULE_DATA_DIR, REDIS_CONSUMER_GROUP +from Lib.llmapi import AgentState +from Lib.log import logger +from Lib.redis_stream_api import RedisStreamAPI + + +class BaseModule(object): + thread_num = 1 + + def __init__(self): + self._thread_name = None + self.logger = logger + self.agent_state: AgentState = AgentState(messages=[], alert_raw={}, temp_data={}, analyze_result={}) + + # debug + self.debug_alert_name = None + self.debug_message_id = None # 设置为非None以启用Debug模式 + + @property + def module_name(self): + """获取模块加载路径""" + if self.debug_alert_name is None: + return self.__module__.split(".")[-1] + else: + return self.debug_alert_name + + def read_message(self) -> dict: + """读取消息""" + redis_stream_api = RedisStreamAPI() + if self.debug_message_id is not None: + message = redis_stream_api.read_stream_from_start(self.module_name, start_id=self.debug_message_id) + else: + message = redis_stream_api.read_message(stream_key=self.module_name, consumer_group=REDIS_CONSUMER_GROUP, consumer_name=self._thread_name) + return message + + def get_dify_api_key(self, app_name=None): + if app_name is None: + app_name = self.module_name + return DIFY_API_KEY.get(app_name) + + def run(self): + raise NotImplementedError + + +class LanggraphModule(BaseModule): + def __init__(self): + super().__init__() + self.graph: CompiledStateGraph = None + + ## LLM PART + @staticmethod + def get_checkpointer(): + checkpointer = MemorySaver() + return checkpointer + + def load_system_prompt_template(self, filename): + """从模块对应的 MODULES_DATA 目录加载 md 文件内容 + + Args: + filename: md 文件名称,不需要包含 .md 后缀 + Returns: + str: md 文件的内容 + """ + + template_path = os.path.join(MODULE_DATA_DIR, self.module_name, f"{filename}.md") + try: + with open(template_path, 'r', encoding='utf-8') as f: + system_prompt_template: SystemMessagePromptTemplate = SystemMessagePromptTemplate.from_template(f.read()) + return system_prompt_template + except Exception as e: + logger.warning(f"Failed to load prompt template {template_path}: {str(e)}") + raise e + + def run_graph(self): + self.graph.checkpointer.delete_thread(self.module_name) + config = RunnableConfig() + config["configurable"] = {"thread_id": self.module_name} + + self.agent_state = AgentState(messages=[], alert_raw={}, temp_data={}, analyze_result={}) + for event in self.graph.stream(self.agent_state, config, stream_mode="values"): + self.logger.debug(event) + + def run(self): + self.run_graph() diff --git a/Lib/configs.py b/Lib/configs.py new file mode 100644 index 0000000..841f837 --- /dev/null +++ b/Lib/configs.py @@ -0,0 +1,6 @@ +import os + +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +MODULE_DATA_DIR = os.path.join(BASE_DIR, 'MODULES_DATA') +REDIS_CONSUMER_GROUP = 'AI_SOC_FRAMEWORK_GROUP' +REDIS_CONSUMER_NAME = 'AI_SOC_FRAMEWORK_CONSUMER_0' diff --git a/Lib/llmapi.py b/Lib/llmapi.py new file mode 100644 index 0000000..f343950 --- /dev/null +++ b/Lib/llmapi.py @@ -0,0 +1,11 @@ +from typing import Annotated, Any, Dict, List + +from langgraph.graph import add_messages +from pydantic import BaseModel + + +class AgentState(BaseModel): + messages: Annotated[List[Any], add_messages] + alert_raw: Dict[str, Any] + temp_data: Dict[str, Any] + analyze_result: Dict[str, Any] diff --git a/Lib/log.py b/Lib/log.py new file mode 100644 index 0000000..c6df797 --- /dev/null +++ b/Lib/log.py @@ -0,0 +1,23 @@ +import logging +import sys + + +def setup_logging(log_file='main.log'): + """ + Configures the root logger for the entire application. + - Logs to both a file and the console. + - Sets a standardized format for log messages. + """ + logging.basicConfig( + level=logging.INFO, + format='%(levelname)s - %(asctime)s - [%(name)s] - %(message)s', + datefmt='%Y-%m-%d %H:%M:%S', + handlers=[ + logging.FileHandler(log_file), + logging.StreamHandler(sys.stdout) + ] + ) + + +setup_logging() +logger = logging.getLogger("ai-soc-framework") diff --git a/Lib/redis_client.py b/Lib/redis_client.py new file mode 100644 index 0000000..5867c14 --- /dev/null +++ b/Lib/redis_client.py @@ -0,0 +1,32 @@ +import redis +from Lib.log import logger + +from CONFIG import ( + REDIS_HOST, REDIS_PORT, REDIS_DB, REDIS_PASSWORD +) + + +class RedisClient(object): + + def __init__(self): + pass + + @staticmethod + def get_stream_connection(): + """用于订阅类操作,无需使用连接池""" + + redis_client = redis.Redis( + host=REDIS_HOST, + port=REDIS_PORT, + db=REDIS_DB, + password=REDIS_PASSWORD, + decode_responses=True, + ) + + # 测试连接 + try: + redis_client.ping() + return redis_client + except redis.ConnectionError as e: + logger.exception(e) + raise diff --git a/Lib/redis_stream_api.py b/Lib/redis_stream_api.py new file mode 100644 index 0000000..f4888c2 --- /dev/null +++ b/Lib/redis_stream_api.py @@ -0,0 +1,265 @@ +import json +from typing import Dict, Any, Optional, List + +import redis + +from Lib.configs import REDIS_CONSUMER_GROUP, REDIS_CONSUMER_NAME +from Lib.log import logger +from Lib.redis_client import RedisClient + + +class RedisStreamAPI: + """ + Redis Stream API封装类,提供消息发送和读取功能 + """ + + def __init__(self): + """初始化RedisStreamAPI类""" + self.redis_client = RedisClient.get_stream_connection() + + def send_message(self, stream_key: str, message: Dict[str, Any]) -> Optional[str]: + """ + 发送消息到指定stream + + Args: + stream_key (str): Redis stream的key名称 + message (Dict[str, Any]): 要发送的消息内容 + + Returns: + Optional[str]: 发送成功返回消息ID,失败返回None + """ + try: + data = json.dumps(message, ensure_ascii=False) + # 发送消息到stream + message_id = self.redis_client.xadd( + stream_key, + {"data": data} + ) + return message_id + + except Exception as e: + logger.exception(e) + return None + + def read_message(self, stream_key: str, consumer_group: str = None, + consumer_name: str = None, timeout: int = 0, noack: bool = False) -> Optional[Dict[str, Any]]: + """ + 从指定stream读取一条消息 + + Args: + noack: + stream_key (str): Redis stream的key名称 + consumer_group (str): 消费者组名称,如果为None则使用默认配置 + consumer_name (str): 消费者名称,如果为None则使用默认配置 + timeout (int): 读取超时时间(毫秒),默认5000毫秒 + + Returns: + Optional[Dict[str, Any]]: 读取到的消息,如果没有消息或出错则返回None + """ + try: + if consumer_group is None: + consumer_group = REDIS_CONSUMER_GROUP + if consumer_name is None: + consumer_name = REDIS_CONSUMER_NAME + + # 确保消费者组存在 + self._ensure_consumer_group(stream_key, consumer_group) + + # 从消费者组读取消息 + messages = self.redis_client.xreadgroup( + consumer_group, + consumer_name, + {stream_key: '>'}, # '>' 表示只读取新消息 + count=1, + block=timeout, + noack=noack, + ) + + if not messages or not messages[0][1]: + return None + + # 解析消息 + stream_name, stream_messages = messages[0] + if not stream_messages: + return None + + message_id, fields = stream_messages[0] + + value = fields["data"] + data = json.loads(value) + + # 确认消息 + flag = self.redis_client.xack(stream_key, consumer_group, message_id) + + logger.info(f"{consumer_group} : {consumer_name} : {message_id}") + return data + except Exception as e: + logger.exception(e) + return None + + def read_stream_from_start(self, stream_key, start_id='0-0'): + """ + 从指定 Stream 的开头重复读取消息。 + :param topic: Stream 的名称。 + :param count: 要读取的消息数量。 + """ + + try: + messages = self.redis_client.xread( + count=1, + block=0, + streams={stream_key: start_id} + ) + + if not messages or not messages[0][1]: + return None + + # 解析消息 + stream_name, stream_messages = messages[0] + if not stream_messages: + return None + + message_id, fields = stream_messages[0] + + value = fields["data"] + data = json.loads(value) + return data + + except Exception as e: + logger.exception(e) + return None + + def acknowledge_message(self, stream_key: str, message_id: str, + consumer_group: str = None) -> bool: + """ + 确认消息已被处理 + + Args: + stream_key (str): Redis stream的key名称 + message_id (str): 消息ID + consumer_group (str): 消费者组名称,如果为None则使用默认配置 + + Returns: + bool: 确认成功返回True,失败返回False + """ + try: + if consumer_group is None: + consumer_group = REDIS_CONSUMER_GROUP + + # 确认消息 + result = self.redis_client.xack(stream_key, consumer_group, message_id) + + if result: + return True + else: + return False + + except Exception as e: + logger.exception(e) + return False + + def get_pending_messages(self, stream_key: str, consumer_group: str = None, + consumer_name: str = None) -> List[Dict[str, Any]]: + """ + 获取待处理的消息 + + Args: + stream_key (str): Redis stream的key名称 + consumer_group (str): 消费者组名称,如果为None则使用默认配置 + consumer_name (str): 消费者名称,如果为None则使用默认配置 + + Returns: + List[Dict[str, Any]]: 待处理的消息列表 + """ + try: + if consumer_group is None: + consumer_group = REDIS_CONSUMER_GROUP + if consumer_name is None: + consumer_name = REDIS_CONSUMER_NAME + + # 获取待处理消息 + pending_messages = self.redis_client.xpending( + stream_key, consumer_group, '-', '+', 100, consumer_name + ) + + messages = [] + for message_id, consumer, idle_time, delivery_count in pending_messages: + messages.append({ + 'message_id': message_id, + 'consumer': consumer, + 'idle_time': idle_time, + 'delivery_count': delivery_count + }) + return messages + + except Exception as e: + logger.exception(e) + return [] + + def _ensure_consumer_group(self, stream_key: str, consumer_group: str): + """ + 确保消费者组存在,如果不存在则创建 + + Args: + stream_key (str): Redis stream的key名称 + consumer_group (str): 消费者组名称 + """ + try: + # 检查消费者组是否存在 + groups = self.redis_client.xinfo_groups(stream_key) + group_names = [group['name'] for group in groups] + + if consumer_group not in group_names: + # 创建消费者组 + self.redis_client.xgroup_create(stream_key, consumer_group, '$', mkstream=True) + except redis.ResponseError as e: + if "BUSYGROUP" in str(e): + pass + else: + logger.exception(e) + except Exception as e: + logger.exception(e) + + def get_stream_info(self, stream_key: str) -> Optional[Dict[str, Any]]: + """ + 获取stream信息 + + Args: + stream_key (str): Redis stream的key名称 + + Returns: + Optional[Dict[str, Any]]: stream信息,失败返回None + """ + try: + info = self.redis_client.xinfo_stream(stream_key) + return info + except Exception as e: + logger.exception(e) + return None + + def delete_stream(self, stream_key: str) -> bool: + """ + 删除stream + + Args: + stream_key (str): Redis stream的key名称 + + Returns: + bool: 删除成功返回True,失败返回False + """ + try: + result = self.redis_client.delete(stream_key) + if result: + return True + else: + return False + except Exception as e: + logger.exception(e) + return False + + def close(self): + """关闭Redis连接""" + try: + self.redis_client.close() + except Exception as e: + logger.exception(e) diff --git a/MODULES/Phishing_User_Report_Kibana_Langgraph_Thehive.py b/MODULES/Phishing_User_Report_Kibana_Langgraph_Thehive.py new file mode 100644 index 0000000..d7dc525 --- /dev/null +++ b/MODULES/Phishing_User_Report_Kibana_Langgraph_Thehive.py @@ -0,0 +1,101 @@ +import json +import uuid +from typing import Optional, Union, Dict, Any + +from pydantic import BaseModel, Field +from thehive4py.types.alert import InputAlert, OutputAlert + +from External.difyclient import DifyClient +from External.thehiveclient import TheHiveClient +from Lib.base import BaseModule + + +class AnalyzeResult(BaseModel): + """用于从文本中提取用户信息的结构""" + is_phishing: bool = Field(description="是否为钓鱼邮件,True或False") + confidence: float = Field(description="信心指数,范围0到1之间") + reasoning: Optional[Union[str, Dict[str, Any]]] = Field(description="推理过程", default=None) + + +class Module(BaseModule): + + def __init__(self): + super().__init__() + self.thehive_client = TheHiveClient() + + def alert_preprocess_node(self): + """预处理告警数据""" + # 获取stream中的原始告警 + self.agent_state.alert_raw = self.read_message() + + # 解析数据,此处是获取Elasticsearch Webhook发送的JSON数据的处理样例 + alert = self.agent_state.alert_raw + + headers = alert["headers"] + headers = {"From": headers["From"], "To": headers["To"], "Subject": headers["Subject"], "Date": headers["Date"], + "Return-Path": headers["Return-Path"], + "Authentication-Results": headers["Authentication-Results"]} + alert["headers"] = headers + + self.agent_state.alert_raw = alert + return + + def alert_analyze_node(self): + api_key = self.get_dify_api_key() + client = DifyClient() + + inputs = { + "alert_raw": json.dumps(self.agent_state.alert_raw) + } + + result = client.run_workflow( + api_key=api_key, + inputs=inputs, + user=self.module_name + ) + self.agent_state.analyze_result = result.get("analyze_result") + return + + def alert_output_node(self): + """处理分析结果""" + analyze_result: AnalyzeResult = AnalyzeResult(**self.agent_state.analyze_result) + alert_raw = self.agent_state.alert_raw + + to = alert_raw["headers"]["To"] + subject = alert_raw["headers"]["Subject"] + if analyze_result.is_phishing and analyze_result.confidence > 0.8: + severity = 2 + else: + severity = 0 + + # 发送到thehive + input_alert: InputAlert = { + "type": "phishing", + "source": "user_report", + "sourceRef": str(uuid.uuid4()), + "title": self.module_name, + "description": f"```json{alert_raw}```", + "tags": ["phishing", "user_report"], + "severity": severity, + "summary": f"{analyze_result.model_dump()}", + "observables": [ + {"dataType": "mail", "data": to}, + {"dataType": "mail-subject", "data": subject}, + ], + } + + output_alert: OutputAlert = self.thehive_client.alert_create(input_alert) + self.logger.debug(output_alert) + return + + def run(self): + self.alert_preprocess_node() + self.alert_analyze_node() + self.alert_output_node() + + +if __name__ == "__main__": + module = Module() + module.debug_alert_name = "Phishing_User_Report_V2" + module.debug_message_id = "0-0" + module.run() diff --git a/MODULES/Phishing_User_Report_Splunk_Dify_Nocodb.py b/MODULES/Phishing_User_Report_Splunk_Dify_Nocodb.py new file mode 100644 index 0000000..7cea7c7 --- /dev/null +++ b/MODULES/Phishing_User_Report_Splunk_Dify_Nocodb.py @@ -0,0 +1,187 @@ +import json +from datetime import datetime +from typing import Optional, Union, Dict, Any + +from langchain_core.messages import AIMessage, HumanMessage +from langgraph.graph import StateGraph +from langgraph.graph.state import CompiledStateGraph +from pydantic import BaseModel, Field + +from External.nocodbclient import NocodbClient +from External.opanaiapi import OpenAIAPI +from External.thehiveclient import TheHiveClient +from Lib.base import LanggraphModule +from Lib.llmapi import AgentState + + +class AnalyzeResult(BaseModel): + """用于从文本中提取用户信息的结构""" + is_phishing: bool = Field(description="是否为钓鱼邮件,True或False") + confidence: float = Field(description="信心指数,范围0到1之间") + reasoning: Optional[Union[str, Dict[str, Any]]] = Field(description="推理过程", default=None) + + +class Module(LanggraphModule): + thread_num = 2 + + def __init__(self): + super().__init__() + self.thehive_client = TheHiveClient() + self.init() + + def init(self): + def alert_preprocess_node(state: AgentState): + """预处理告警数据""" + # 获取stream中的原始告警 + alert_raw = self.read_message() + if alert_raw is None: + return + + # 解析数据,此处是获取Splunk Webhook发送的JSON数据的处理样例 + alert_raw = json.loads(alert_raw["_raw"]) + + headers = alert_raw["headers"] + headers = {"From": headers["From"], "To": headers["To"], "Subject": headers["Subject"], "Date": headers["Date"], + "Return-Path": headers["Return-Path"], + "Authentication-Results": headers["Authentication-Results"]} + alert_raw["headers"] = headers + + state.alert_raw = alert_raw + return state + + # 定义node + def alert_analyze_node(state: AgentState): + """AI分析告警数据""" + + # 加载system prompt + system_prompt_template = self.load_system_prompt_template(f"senior_phishing_expert") + + # 演示如何生成动态提示词 + current_date = datetime.now().strftime("%Y-%m-%d") + system_message = system_prompt_template.format(current_date=current_date) + + # 构建few-shot示例 + few_shot_examples = [ + HumanMessage( + content=json.dumps({ + "headers": { + "From": "\"Wang Lei, Project Manager\" ", + "To": "\"Li Na, Marketing Department\" ", + "Subject": "Project Alpha Weekly Status Report", + "Date": "Tue, 2 Sep 2025 10:15:00 +0800", + "Return-Path": "lei.wang@example-corp.com", + "Authentication-Results": "mx.example-corp.com; spf=pass smtp.mail=lei.wang@example-corp.com;" + }, + "body": { + "plain_text": "Hi Li Na,\n\nPlease find attached the weekly status report for Project Alpha.\n\nThis week, we have completed the initial design phase and are on track to begin development next Monday as planned. Please review the attached document and let me know if you have any feedback before our sync-up meeting on Wednesday.\n\nThanks,\n\nBest Regards\nWang Lei / 王雷\nProject Manager / 项目经理\nTechnology Department / 技术部\nExample Corporation / 示例公司\nMobile: +86 13800138000\nEmail / 邮箱: lei.wang@example-corp.com\n", + "html": "" + }, + "attachments": [ + { + "filename": "Project_Alpha_Weekly_Report_W35.pdf", + "filepath": "attachments/Project_Alpha_Weekly_Report_W35.pdf", + "content_type": "application/pdf" + } + ] + }) + ), + AIMessage( + content=str(AnalyzeResult(is_phishing=False, confidence=0.95, + reasoning="The email is from a known colleague within the same organization, discussing a legitimate project.").model_dump()) + ), + HumanMessage( + content=json.dumps({ + "headers": { + "From": "\"Microsoft Support\" ", + "To": "\"Valued Customer\" ", + "Subject": "紧急:您的账户已被暂停,需要立即验证 Urgent: Your Account is Suspended, Immediate Verification Required", + "Date": "Tue, 2 Sep 2025 14:30:10 +0800", + "Return-Path": "", + "Authentication-Results": "mx.example.com; spf=fail smtp.mail=support-noreply@microsft.com; dkim=fail header.d=microsft.com; dmarc=fail (p=REJECT sp=REJECT) header.from=microsft.com", + "X-Coremail-Antispam": "1Uf129KBjvdXoW7GF18tw4xZF4xWF4rtw4kCrg_yoWfZFg_GF4DC348Wrnxtr15J398ZwnFy3ZFgrZ8CF9a9r4DZrZ8X3WkXa4kJr98K3y8C3WfJw1fXFW3ArnrZa93tF15tjkaLaAFLSUrUUUUUb8apTn2vfkv8UJUUUU8Yxn0WfASr-VFAUDa7-sFnT9fnUUvcSsGvfC2KfnxnUUI43ZEXa7IU04v35UUUUU==" + }, + "body": { + "plain_text": "尊敬的用户,\n\n我们的系统检测到您的帐户存在异常登录活动。为了保护您的安全,我们已临时暂停您的帐户。\n\n请立即点击以下链接以验证您的身份并恢复您的帐户访问权限:\n\nhttps://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=... (请注意,这只是显示文本,实际链接是恶意的)\n\n如果您不在24小时内完成验证,您的帐户将被永久锁定。\n\n感谢您的合作。\n\n微软安全团队\n\n---\n\nDear User,\n\nOur system has detected unusual sign-in activity on your account. For your security, we have temporarily suspended your account.\n\nPlease click the link below immediately to verify your identity and restore access:\n\nhttp://secure-login-update-required.com/reset-password?user=user@example.com\n\nIf you do not verify within 24 hours, your account will be permanently locked.\n\nThank you for your cooperation.\n\nThe Microsoft Security Team", + "html": "

尊敬的用户,

我们的系统检测到您的帐户存在异常登录活动。为了保护您的安全,我们已临时暂停您的帐户。

请立即点击以下链接以验证您的身份并恢复您的帐户访问权限:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=...

如果您不在24小时内完成验证,您的帐户将被永久锁定。

感谢您的合作。

微软安全团队

" + }, + "attachments": [ + { + "filename": "Account_Verification_Form.html", + "filepath": "attachments/Account_Verification_Form.html", + "content_type": "text/html" + } + ] + }) + ), + AIMessage( + content=str(AnalyzeResult(is_phishing=True, confidence=0.92, + reasoning="The email contains several red flags: the sender's domain is misspelled, the Return-Path is from a suspicious domain, SPF and DKIM checks fail, and the email urges immediate action with threatening language. Additionally, the provided links do not match official Microsoft URLs.").model_dump()) + ), + ] + + # 构建消息列表 + messages = [ + system_message, + *few_shot_examples, + HumanMessage(content=json.dumps(state.alert_raw)), + ] + + # 运行 + openai_api = OpenAIAPI() + + model_kwargs = { + "extra_body": { + "enable_thinking": False + } + } + + llm = openai_api.get_model(model_kwargs) + llm = llm.with_structured_output(AnalyzeResult) + response: AnalyzeResult = llm.invoke(messages) + + state.analyze_result = response.model_dump() + return state + + def alert_output_node(state: AgentState): + """处理分析结果""" + analyze_result: AnalyzeResult = AnalyzeResult(**state.analyze_result) + if analyze_result.is_phishing and analyze_result.confidence > 0.8: + severity = "HIGH" + else: + severity = "INFO" + + # 发送到nocodb + payload = { + "Title": self.module_name, + "SEVERITY": severity, + "RAW": json.dumps(state.alert_raw), + "Description": json.dumps(state.alert_raw), + "Summary": json.dumps(state.analyze_result), + "Status": "NEW", + "Source": "Splunk" + } + result = NocodbClient.create_alert(payload) + + return state + + # 编译graph + workflow = StateGraph(AgentState) + + workflow.add_node("alert_preprocess_node", alert_preprocess_node) + workflow.add_node("alert_analyze_node", alert_analyze_node) + workflow.add_node("alert_output_node", alert_output_node) + + workflow.set_entry_point("alert_preprocess_node") + workflow.add_edge("alert_preprocess_node", "alert_analyze_node") + workflow.add_edge("alert_analyze_node", "alert_output_node") + workflow.set_finish_point("alert_output_node") + + self.graph: CompiledStateGraph = workflow.compile(checkpointer=self.get_checkpointer()) + return True + + +if __name__ == "__main__": + module = Module() + module.debug_alert_name = "Phishing_User_Report_V1" + module.debug_message_id = "0-0" + module.run() diff --git a/MODULES_DATA/Phishing_User_Report_V1/senior_phishing_expert.md b/MODULES_DATA/Phishing_User_Report_V1/senior_phishing_expert.md new file mode 100644 index 0000000..368776a --- /dev/null +++ b/MODULES_DATA/Phishing_User_Report_V1/senior_phishing_expert.md @@ -0,0 +1,42 @@ +# 高级钓鱼邮件分析专家 + +## 角色定位 + +你是一位专业的钓鱼邮件分析专家,由先进的AI技术驱动。你擅长分析一封邮件是否为钓鱼邮件。 + +## 目标 + +通过分析用户提供的邮件信息来分析邮件是否为钓鱼邮件。 + +## 所需输入 + +JSON格式的邮件信息,包含以下字段: + +- 发件人邮箱地址 +- 收件人邮箱地址 +- 邮件主题 +- 邮件正文内容 +- 附件信息(如果有) +- 链接信息(如果有) + +## 任务描述 + +- 多维度分析用户提供的邮件信息 +- 确认邮件是否为钓鱼邮件 +- 提供详细的分析报告,说明判断依据 + +## 思考步骤 + +1. 分析发件人是否为可信来源 +2. 分析From和Reply-To地址是否匹配 +3. 检查邮件主题是否包含可疑关键词 +4. 分析邮件正文内容,寻找可疑链接或附件 +5. 检查邮件中的链接是否指向可疑网站 +6. 检查邮件中的附件是否包含恶意软件 +7. 综合以上分析,判断邮件是否为钓鱼邮件 +8. 提供详细的分析报告,说明判断依据 + +## 注意事项 +- 今天是:{current_date} +- 回复必须使用JSON格式 + diff --git a/README.md b/README.md new file mode 100644 index 0000000..624613e --- /dev/null +++ b/README.md @@ -0,0 +1,75 @@ +# AI SOC Framework + +基于 LLM 的告警分析框架,通过模块化的方式调用Langchain/Langgraph/Dify进行告警分析 + +## 功能 + +* **模块化引擎**: 动态加载和执行告警分析模块 +* **LLM集成**: + * **LLM接口**: 包含Dify和Langgraph的集成接口及样例模块 + * **工单接口**: 包含Thehive及Nocodb的集成接口及样例模块 +* **事件驱动**: 使用 Redis Stream 作为消息总线,实现模块化告警流式处理 + +## 架构图 + +![img.png](Static/img.png) + +## 快速开始 + +### 1. 环境准备 + +* Python 3.12+ +* Docker 和 Docker Compose (用于运行 Redis Stack) + +### 2. 开发环境 + +1. **克隆项目** + ```bash + git clone https://github.com/FunnyWolf/ai-soc-framework + cd ai-soc-framework + ``` + +2. **安装依赖** + 建议在虚拟环境中使用 pip 安装依赖: + ```bash + python -m venv venv + source venv/bin/activate + pip install -r requirements.txt + ``` + +3. **启动依赖服务** + 项目使用 Redis 作为消息队列。我们提供了 Docker Compose 文件来快速启动一个 Redis Stack 实例。 + ```bash + cd Docker/redis_stack + docker-compose up -d + ``` + +4. **配置** + 复制配置文件模板,并根据您的环境修改 `CONFIG.py` 文件,填入各个服务的 API 密钥、URL 和其他必要参数。 + ```bash + cp CONFIG.example.py CONFIG.py + ``` +5. **启动 Forwarder** + Forwarder 负责将SIEM的 Webhook 推送的告警数据写入 Redis Stream (当前适配Splunk和ELK) + ```bash + cd Forwarder + python app.py + ``` + +5. **运行** + 完成上述步骤后,在项目根目录运行主程序: + + ```bash + python main.py + ``` + + 程序将启动核心引擎,加载 `MODULES` 目录下的所有模块,并开始监听和处理事件。 + +## 模块开发 + +您可以参考 `MODULES` 目录下的现有模块,开发自己的自动化流程。每个模块都是一个独立的 Python 文件,框架会自动加载并运行它。 + +## 许可证 + +该项目采用 [MIT](https://choosealicense.com/licenses/mit/) 许可证。 + diff --git a/Static/img.png b/Static/img.png new file mode 100644 index 0000000000000000000000000000000000000000..943aedbff887a0ebb0686a3a418d2233919e48f8 GIT binary patch literal 205414 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
pTJk;F+my*@e`-xS4 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

;klc?RG&v-sR*wU3;OgkuMZ| z#asymxvAeQVa9a0NQ?`J^-9!w$r%FGn1yR zzSyDFY@4Y*|NelG-4vuK&Sk5>8U?X39tHqy6hno0xtcI)K5}vOVg%aFRA7h*;b*Jr zM&k3>Hog*p)WYY@Do50Tc`9aZ{K#X+5Z-@O#!FLm<8?98L+a`XHs%5;OSdYjBQn#c zNbUoPJnkbbM-!4mv+uPk3;w+`L_e>F#S6T%*BgW5bnTk6#~_GGZ((usHNG}M1OXRl+~uvu_5K`D-Eo+Rkn!XKBk|?Lx&dV z+~fjRCOGY#WnBV+%IdhxVTxGUGKcBfzjhi$x+la5#ej`Gsf8o*lI2BGmYRf}PYc70 z3TE&*%#>lG7U(J*tuaQjW{LZW~36-S`ak8&{SZEmp$E!T56_O!+ho_fWrn(Z8p!Izq%iqT>@Aw+)F8; zE&%Msc$X$4DHLbx_Xo^3lTJYjATp(rktJrCI=~KuX&XtP*)2CRVqO|1>CvVFLquqt z;5G7s=EWeZk(^l3H#5V*N@1;e>?e7&+cm9AewMI*Oh@Gf>@99W->jx)NEy^i=v$eO zztyXn>4%8w15Y#w=s-fma`MpKu}d?nZMyccvUW0l&`w{_Qyr1)%52BO zgiB#23lK*jopg{=WQVz`8Rj#;K@J=?`V;8)?pA1a9w@o*gB8JyHGsYTwCzhtOCap` z2i$6&Jq0O%$UD&pHeaO#>_C{Jer#{BC&*-lb{y$8ZD$~25)eSBh{0dydZD!)A4s@v zCJoRt^aY)p)X&bEPr_5x>rO=Dhd!?R%L}*p^le}Kc7*;p=SD+b%KFI0ryL)A)5ne} z)R&dvDRln@OGqM<&ao+8g;s%Sv=4xr%Y}OS*oy1++OQ!?)iUz(Wi-C`idR0q+`kRB2PIheQM`bndsw~| zZcKsjB%74=32g{=5u|NJKMo{GCppHn!o=ycOvLLxOQDgwd`SQ08u|T6?^2QcPUQ$@ z9{9CH(}gZ0b8k?dUQ_?IB_YC9gU3-avkh@p@c9` z6G~KnujNI&=zQFhYj>-vVtSukdA8O$1@8AdbYk}LK|y1yd#qLGl}OJ;Yn2BH_t@}9 z*>~{k8=N`&{k9X&LM`cETElIv&c71%q5nz00y?{Hc4g?ty~5$K`90QY2Uj9}(q#Tt z-d()bn5V@@6NTuA!Gw_&C}d{Px`~Q&2Z4~o!NZa{N*O|W~N=6 z=!D&p8RU3w;%8~10lPIe z1yz(Ui1c6i&Hynxet$<%+MuB+$7N+Raf|(bfST<`jyUp|wJQRfHNbCECP#AGyz6j} zAY(HLrux+%*6R=J^@sI(-wFM{wO)?TTt-MvD1dxoC-Z|rx8 AXaE2J literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..ff888df --- /dev/null +++ b/main.py @@ -0,0 +1,24 @@ +import time + +from Core.engine import Engine +from Lib.log import logger + + +def main(): + try: + engine = Engine() + engine.start() + while True: + time.sleep(1) + except KeyboardInterrupt: + logger.info("Program interrupted by user") + except Exception as e: + logger.error(f"Program error occurred: {e}") + finally: + if 'engine' in locals() and engine: + engine.stop() + logger.info("Program has been closed") + + +if __name__ == '__main__': + main() diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..3cf144e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,11 @@ +pydantic +watchdog +redis +langgraph +langgraph-checkpoint-redis +langchain-core +langchain-community +langchain-openai +thehive4py +requests +flask \ No newline at end of file