mirror of
https://github.com/FunnyWolf/agentic-soc-platform.git
synced 2026-08-22 13:12:56 +02:00
1017
This commit is contained in:
+3
-3
@@ -15,6 +15,6 @@ router.register(r'api/v1/automation/playbook', PlaybookView, basename="PlaybookV
|
||||
urlpatterns = [
|
||||
re_path(r'^', include(router.urls)),
|
||||
]
|
||||
from Lib.montior import MainMonitor
|
||||
|
||||
MainMonitor().start()
|
||||
# from Lib.montior import MainMonitor
|
||||
#
|
||||
# MainMonitor().start()
|
||||
|
||||
@@ -20,7 +20,7 @@ class Playbook(object):
|
||||
class_intent = importlib.import_module(load_path)
|
||||
playbook_intent: BasePlaybook = class_intent.Module(params=params)
|
||||
except Exception as E:
|
||||
logger.warning(E)
|
||||
logger.exception(E)
|
||||
context = data_return(305, {}, Playbook_MSG_ZH.get(305), Playbook_MSG_EN.get(305))
|
||||
return context
|
||||
|
||||
@@ -29,6 +29,6 @@ class Playbook(object):
|
||||
context = data_return(201, check_result, Playbook_MSG_ZH.get(201), Playbook_MSG_EN.get(201))
|
||||
return context
|
||||
except Exception as E:
|
||||
logger.warning(E)
|
||||
logger.exception(E)
|
||||
context = data_return(301, {}, Playbook_MSG_ZH.get(301), Playbook_MSG_EN.get(301))
|
||||
return context
|
||||
|
||||
@@ -13,7 +13,6 @@ class PlaybookView(BaseView):
|
||||
try:
|
||||
playbook = request.data.get('playbook')
|
||||
context = Playbook.create(playbook, params=request.data)
|
||||
return Response(context)
|
||||
except Exception as E:
|
||||
logger.exception(E)
|
||||
context = data_return(500, {}, CODE_MSG_ZH.get(500), CODE_MSG_EN.get(500))
|
||||
|
||||
Vendored
+38
-26
@@ -2,7 +2,7 @@ from typing import TypedDict, Literal, List, Union, Any, Dict, Optional
|
||||
|
||||
import requests
|
||||
|
||||
from CONFIG import NOCOLY_URL, AISOAR_APPKEY, AISOAR_SIGN
|
||||
from CONFIG import SIRP_URL, SIRP_APPKEY, SIRP_SIGN
|
||||
from Lib.api import get_current_time_string, string_to_timestamp
|
||||
from Lib.ruledefinition import RuleDefinition
|
||||
|
||||
@@ -65,10 +65,10 @@ class Worksheet(object):
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def get_fields(worksheet_id: str) -> List[FieldType]:
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}"
|
||||
def get_fields(worksheet_id: str) -> Dict[str, FieldType]:
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}"
|
||||
|
||||
response = requests.get(
|
||||
url,
|
||||
@@ -79,7 +79,11 @@ class Worksheet(object):
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("success"):
|
||||
return response_data.get("data").get("fields")
|
||||
fields_list: List[FieldType] = response_data.get("data").get("fields")
|
||||
fields_dict = {}
|
||||
for field in fields_list:
|
||||
fields_dict[field["id"]] = field
|
||||
return fields_dict
|
||||
else:
|
||||
raise Exception(f"error_code: {response_data.get('error_code')} error_msg: {response_data.get('error_msg')}")
|
||||
|
||||
@@ -90,10 +94,10 @@ class WorksheetRow(object):
|
||||
|
||||
@staticmethod
|
||||
def get(worksheet_id: str, row_id: str):
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}/rows/{row_id}"
|
||||
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}/rows/{row_id}"
|
||||
fields = Worksheet.get_fields(worksheet_id)
|
||||
try:
|
||||
response = requests.get(
|
||||
url,
|
||||
@@ -104,7 +108,15 @@ class WorksheetRow(object):
|
||||
|
||||
response_data = response.json()
|
||||
if response_data.get("success"):
|
||||
return response_data.get("data")
|
||||
data = response_data.get("data")
|
||||
data_new = {}
|
||||
for key in data:
|
||||
if key.startswith("_") or key == "rowId":
|
||||
data_new[key] = data[key]
|
||||
else:
|
||||
alias = fields.get(key).get('alias')
|
||||
data_new[alias] = data[key]
|
||||
return data_new
|
||||
else:
|
||||
raise Exception(f"error_code: {response_data.get('error_code')} error_msg: {response_data.get('error_msg')}")
|
||||
except Exception as e:
|
||||
@@ -112,9 +124,9 @@ class WorksheetRow(object):
|
||||
|
||||
@staticmethod
|
||||
def list(worksheet_id: str, filter: dict, fields: list = None):
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}/rows/list"
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}/rows/list"
|
||||
data = {
|
||||
"fields": fields,
|
||||
"filter": filter,
|
||||
@@ -145,9 +157,9 @@ class WorksheetRow(object):
|
||||
|
||||
@staticmethod
|
||||
def create(worksheet_id: str, fields: list):
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}/rows"
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}/rows"
|
||||
|
||||
data = {
|
||||
"triggerWorkflow": True,
|
||||
@@ -170,9 +182,9 @@ class WorksheetRow(object):
|
||||
|
||||
@staticmethod
|
||||
def update(worksheet_id: str, row_id: str, fields: list):
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}/rows/{row_id}"
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}/rows/{row_id}"
|
||||
|
||||
data = {
|
||||
"triggerWorkflow": True,
|
||||
@@ -195,9 +207,9 @@ class WorksheetRow(object):
|
||||
|
||||
@staticmethod
|
||||
def delete(worksheet_id: str, row_ids: list):
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/worksheets/{worksheet_id}/rows/batch"
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/worksheets/{worksheet_id}/rows/batch"
|
||||
|
||||
data = {
|
||||
"rowIds": row_ids,
|
||||
@@ -225,9 +237,9 @@ class OptionSet(object):
|
||||
|
||||
@staticmethod
|
||||
def list():
|
||||
headers = {"HAP-Appkey": AISOAR_APPKEY,
|
||||
"HAP-Sign": AISOAR_SIGN}
|
||||
url = f"{NOCOLY_URL}/api/v3/app/optionsets"
|
||||
headers = {"HAP-Appkey": SIRP_APPKEY,
|
||||
"HAP-Sign": SIRP_SIGN}
|
||||
url = f"{SIRP_URL}/api/v3/app/optionsets"
|
||||
|
||||
response = requests.get(url,
|
||||
headers=headers)
|
||||
|
||||
+4
-2
@@ -1,7 +1,9 @@
|
||||
from abc import ABC
|
||||
|
||||
from Lib.log import logger
|
||||
|
||||
|
||||
class BasePlaybook(object):
|
||||
class BasePlaybook(ABC):
|
||||
def __init__(self, params):
|
||||
super().__init__()
|
||||
self._params = params
|
||||
@@ -11,4 +13,4 @@ class BasePlaybook(object):
|
||||
return self._params.get(key, default)
|
||||
|
||||
def run(self):
|
||||
raise NotImplementedError
|
||||
pass
|
||||
|
||||
@@ -8,8 +8,8 @@ from langgraph.graph import StateGraph
|
||||
from langgraph.graph.state import CompiledStateGraph
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from Lib.External.llmapi import LLMAPI
|
||||
from Lib.External.nocolyapi import InputAlert, common_handler
|
||||
from Lib.External.opanaiapi import OpenAIAPI
|
||||
from Lib.External.thehiveclient import TheHiveClient
|
||||
from Lib.api import string_to_string_time, get_current_time_string
|
||||
from Lib.basemodule import LanggraphModule
|
||||
@@ -129,7 +129,7 @@ class Module(LanggraphModule):
|
||||
]
|
||||
|
||||
# 运行
|
||||
openai_api = OpenAIAPI()
|
||||
openai_api = LLMAPI()
|
||||
|
||||
llm = openai_api.get_model()
|
||||
llm = llm.with_structured_output(AnalyzeResult)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import json
|
||||
|
||||
from Lib.External.nocolyapi import WorksheetRow
|
||||
from Lib.baseplaybook import BasePlaybook
|
||||
|
||||
|
||||
class Module(BasePlaybook):
|
||||
|
||||
def __init__(self, params):
|
||||
super().__init__(params) # do not delete this code
|
||||
|
||||
def run(self):
|
||||
worksheet = self.param("worksheet")
|
||||
rowid = self.param("rowid")
|
||||
artifact = WorksheetRow.get(worksheet, rowid)
|
||||
self.logger.info(f"Querying threat intelligence for : {artifact}")
|
||||
# 模拟查询威胁情报数据库
|
||||
# 在实际应用中,这里应该调用外部API或数据库进行查询
|
||||
if artifact.get("type") not in ["ip", "domain", "hash", "vm_ip"]:
|
||||
ti_result = {"error": "Unsupported type. Please use 'ip', 'domain', or 'hash'."}
|
||||
else:
|
||||
ti_result = {"malicious": True, "score": 85, "description": "This IP is associated with known malicious activities.", "source": "ThreatIntelDB",
|
||||
"last_seen": "2024-10-01T12:34:56Z"}
|
||||
ti_result = {"enrichment": json.dumps(ti_result)}
|
||||
return ti_result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
params = {'playbook': 'TI_artifact_query_mock', 'rowid': 'c6caa5eb-b4af-44df-aa10-b94829243fd4', 'worksheet': 'Artifact'}
|
||||
module = Module(params)
|
||||
result = module.run()
|
||||
print(result)
|
||||
@@ -1,30 +0,0 @@
|
||||
from Lib.baseplaybook import BasePlaybook
|
||||
|
||||
|
||||
class Module(BasePlaybook):
|
||||
|
||||
def __init__(self, params):
|
||||
super().__init__(params) # do not delete this code
|
||||
|
||||
def run(self):
|
||||
type = self.param("type")
|
||||
value = self.param("value")
|
||||
self.logger.info(f"Querying threat intelligence for type: {type}, value: {value}")
|
||||
# 模拟查询威胁情报数据库
|
||||
# 在实际应用中,这里应该调用外部API或数据库进行查询
|
||||
if type not in ["ip", "domain", "hash"]:
|
||||
result = {"error": "Unsupported type. Please use 'ip', 'domain', or 'hash'."}
|
||||
else:
|
||||
result = {"malicious": True, "score": 85, "description": "This IP is associated with known malicious activities.", "source": "ThreatIntelDB",
|
||||
"last_seen": "2024-10-01T12:34:56Z"}
|
||||
result = {"enrichment": json.dumps(result)}
|
||||
return result
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import json
|
||||
|
||||
params = {'playbook': 'Threat_Intelligence_Query', 'rowid': 'bce78786-9a99-42f1-9c3a-8eb7ffc76bfa', 'worksheet': 'Artifact'}
|
||||
module = Module(params)
|
||||
result = module.run()
|
||||
print(json.dumps(result))
|
||||
+3
-1
@@ -24,4 +24,6 @@ pluginbase
|
||||
rsa
|
||||
pluginbase
|
||||
lxml
|
||||
uvicorn
|
||||
openpyxl
|
||||
langchain-ollama
|
||||
uvicorn
|
||||
|
||||
Reference in New Issue
Block a user