Add some result scripts and results.

This commit is contained in:
sleepwithoutbz
2025-06-19 15:57:43 +08:00
parent 2f3640a45e
commit 5eb154c4e1
8 changed files with 3113 additions and 0 deletions

84
DoS_ai_analysis.py Normal file
View File

@@ -0,0 +1,84 @@
# 分析每个CVE源自哪个应用程序、什么原因、什么后果等信息
from os import truncate
import re
import json
from openai import OpenAI
from typing import Dict, List, Any
def process_result(data: Any) -> str:
# target_key = "choices.0.message.content"
parts = ["choices", "0", "message", "content"]
try:
for part in parts:
if isinstance(data, list):
data = data[int(part)]
else:
data = data.get(part, None)
if data is None:
break
return data
except (KeyError, IndexError, TypeError):
return "N/A"
return "N/A"
def analyze_with_ai(data: str) -> str:
prompt = """
你是一个计算机容器安全领域的专家能够根据CVE描述分析出CVE产生于哪个程序、有何影响后果等信息。
下面我会发给你一段文本第一行是CVE的编号与文件位置信息后续是这个CVE的详细描述。
请分析我发送给你的CVE详细描述内容并进行分析我有如下要求
1. 分析这个CVE信息判断这个CVE漏洞描述中是否提及会导致容器消耗更多宿主机的物理资源例如CPU计算资源、内存资源或是硬盘空间资源**注意**:不要自行推测,只分析这个描述中是否提及;
2. 如果不满足条件1你只需返回"N/A"即可,无需任何多余信息;
3. 如果这个CVE满足条件1那么你只需要直接返回一个json这个json样例如下
{"Container":"[存在CVE的容器镜像]","CVE_Reason""[容器的运行会导致宿主机CPU资源被大量占用]""CVE_Consequence":"[该CVE的后果以及严重程度]"}
请牢记你必须只返回json内容除了json不需要任何文本内容并且尽量使用中文。
"""
client = OpenAI(
api_key="sk-5ec7751941974a9cb5855f746fe45a62",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
try:
completion = client.chat.completions.create(
# 模型列表https://help.aliyun.com/zh/model-studio/getting-started/models
model="qwen-plus",
messages=[
{"role": "system", "content": prompt},
{"role": "user", "content": data},
],
# Qwen3模型通过enable_thinking参数控制思考过程开源版默认True商业版默认False
# 使用Qwen3开源版模型时若未启用流式输出请将下行取消注释否则会报错
# extra_body={"enable_thinking": False},
)
return process_result(json.loads(completion.model_dump_json()))
except Exception as e:
print(f"调用大模型失败: {str(e)}")
return "N/A"
return "N/A"
if __name__ == "__main__":
pattern = r"\./data/.*x/CVE.*?\.json"
regex = re.compile(pattern)
with open("keyword_filter_11-25.log", "r", encoding="utf-8") as file:
text = file.read()
matches = list(regex.finditer(text))
log = open("./DoS_result/pure_from_description_11-25.log", "w", encoding="utf-8")
# 如果没有找到任何匹配项
if not matches:
print("No match found.")
else:
for i in range(len(matches)):
start = matches[i].start()
# 如果不是最后一个匹配项则end是下一个匹配项的起始位置否则为文本末尾
end = matches[i + 1].start() if i + 1 < len(matches) else len(text)
block = text[start:end].strip()
ans = analyze_with_ai(block)
if ans == "N/A":
continue
log.write(f"cve: {block}\n\nanalysis: {ans}\n\n")