一、分享背景
DeepSeek近日红的发紫,春节前发现一个叫Deepseek的LLM送 10 RMB的Token!!!,正巧符合生产工作中拥抱大模型的主旋律,又本着有羊毛必薅的原则配合B站ollama本地部署喂饭视频起了阿里qwen2.5(1.5b)就行Coding辅助。
ollama本地部署Coding模型
step1:下载对应的版本https://ollama.com/download,无限next安装ollama
step2:如果单纯coding无其他需求可本地起一个qwen2.5,集成到vscode。复制粘贴cmd拉即可
step3:在Vscode中下载continue,配置config.json如下图所示。对应ollama list中的name即可
本地格式如下:
{
"title": "Qwen2.5 1.5b",
"model": "qwen2.5-coder:1.5b",
"provider": "ollama"
}
调用api格式:
{
"title": "DeepSeek Chat",
"model": "deepseek-chat",
"contextLength": 128000,
"apiKey": "",
"provider": "deepseek"
}
step2:
step3:
效果:
二、工具需求分析
- GUI化,免去命令行操作,12-80年龄段各类人群均适用。
- 固定的LLM回复结果,使每一次提问都能得到相同格式的回答(区分在线提问和工具脚本的关键)。
- 结合LLM特点及DeepSeek(以下简称DP)免微调的强化学习优势,规避了非专业安全工程师对流量分析、恶意shell分析不清的弱点。
- 可拓展性,后续可丰富功能模块。
- 结合Ollama本地部署特点,在内网/无网络服务情况下也可实现工具的功能点。
三、工具设计与实现
1.框架设计
首先通过对DP提问获得主流Python的GUI库,在DP回复中选择了PyQt5库(其拥有跨平台特性,方便适配mac、windows系统的ui差异)。
#此处提出的问题为:
“请使用PyQt5为我设计一个GUI脚本,包含四个模块为流量分析、JS审计、进程分析、webshell检测。”
给出的frame.py源码如下,运行后符合预期效果。
import sys
import os
import requests
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout,
QTextEdit, QPushButton, QLabel, QHBoxLayout,
QSplitter, QScrollArea, QTabWidget, QLineEdit, QFrame, QCheckBox, QSizePolicy, QComboBox, QFileDialog, QProgressBar)
from PyQt5.QtCore import Qt, QSize, QThread, pyqtSignal
from PyQt5.QtGui import QFont, QColor, QPalette, QLinearGradient
class CyberSecurityApp(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('网络安全分析工具')
self.setGeometry(300, 300, 1200, 800)
self.setMinimumSize(QSize(1200, 800))
main_widget = QWidget()
self.setCentralWidget(main_widget)
# 创建主布局
main_layout = QVBoxLayout(main_widget)
# 添加标签页组件
self.tab_widget = QTabWidget()
main_layout.addWidget(self.tab_widget)
# 创建各个模块的标签页
self.create_traffic_analysis_tab()
self.create_js_audit_tab()
self.create_process_analysis_tab()
self.create_webshell_tab()
def create_traffic_analysis_tab(self):
tab = QWidget()
layout = QVBoxLayout(tab)
layout.addWidget(QLabel("流量分析", fnotallow=QFont("Arial", 20, QFont.Bold)))
# 输入框
self.traffic_input = QTextEdit()
self.traffic_input.setPlaceholderText("粘贴HTTP请求数据...")
layout.addWidget(self.traffic_input)
# 分析按钮
self.analyze_btn = QPushButton("开始分析")
self.analyze_btn.clicked.connect(self.start_traffic_analysis)
layout.addWidget(self.analyze_btn)
# 结果显示
self.traffic_result = QTextEdit()
self.traffic_result.setReadOnly(True)
layout.addWidget(self.traffic_result)
self.tab_widget.addTab(tab, "流量分析")
def create_js_audit_tab(self):
tab = QWidget()
layout = QVBoxLayout(tab)
layout.addWidget(QLabel("JS 审计", fnotallow=QFont("Arial", 20, QFont.Bold)))
# 输入框
self.js_input = QTextEdit()
self.js_input.setPlaceholderText("粘贴JavaScript代码...")
layout.addWidget(self.js_input)
# 审计按钮
self.audit_btn = QPushButton("开始审计")
self.audit_btn.clicked.connect(self.start_js_audit)
layout.addWidget(self.audit_btn)
# 结果显示
self.js_result = QTextEdit()
self.js_result.setReadOnly(True)
layout.addWidget(self.js_result)
self.tab_widget.addTab(tab, "JS 审计")
def create_process_analysis_tab(self):
tab = QWidget()
layout = QVBoxLayout(tab)
layout.addWidget(QLabel("进程分析", fnotallow=QFont("Arial", 20, QFont.Bold)))
# 输入框
self.process_input = QTextEdit()
self.process_input.setPlaceholderText("粘贴进程信息...")
layout.addWidget(self.process_input)
# 分析按钮
self.process_btn = QPushButton("开始分析")
self.process_btn.clicked.connect(self.start_process_analysis)
layout.addWidget(self.process_btn)
# 结果显示
self.process_result = QTextEdit()
self.process_result.setReadOnly(True)
layout.addWidget(self.process_result)
self.tab_widget.addTab(tab, "进程分析")
def create_webshell_tab(self):
tab = QWidget()
layout = QVBoxLayout(tab)
layout.addWidget(QLabel("WebShell 检测", fnotallow=QFont("Arial", 20, QFont.Bold)))
# 输入框
self.webshell_input = QTextEdit()
self.webshell_input.setPlaceholderText("粘贴文件内容...")
layout.addWidget(self.webshell_input)
# 检测按钮
self.webshell_btn = QPushButton("开始检测")
self.webshell_btn.clicked.connect(self.start_webshell_detection)
layout.addWidget(self.webshell_btn)
# 结果显示
self.webshell_result = QTextEdit()
self.webshell_result.setReadOnly(True)
layout.addWidget(self.webshell_result)
self.tab_widget.addTab(tab, "WebShell 检测")
def start_traffic_analysis(self):
# 这里可以添加流量分析的逻辑
self.traffic_result.setText("流量分析结果将显示在这里...")
def start_js_audit(self):
# 这里可以添加 JS 审计的逻辑
self.js_result.setText("JS 审计结果将显示在这里...")
def start_process_analysis(self):
# 这里可以添加进程分析的逻辑
self.process_result.setText("进程分析结果将显示在这里...")
def start_webshell_detection(self):
# 这里可以添加 WebShell 检测的逻辑
self.webshell_result.setText("WebShell 检测结果将显示在这里...")
if __name__ == '__main__':
app = QApplication(sys.argv)
window = CyberSecurityApp()
window.show()
sys.exit(app.exec_())
2.模块功能设计
设计满足需求分析中的固定回复结果。
通过反复提问,固定向DP的提问方式。仅需在文本框中添加文本内容即可。
(1)webshell检测模块的设计
class WebShellAnalysisThread(QThread):
analysis_complete = pyqtSignal(str, bool)
def __init__(self, file_content, parent=None):
super().__init__(parent)
self.file_content = file_content
self.api = APIAdapter()
def run(self):
try:
prompt = f"""请站在网络安全专家角度分析以下文件内容是否为WebShell或内存马。要求:
1. 检查PHP/JSP/ASP等WebShell特征(如加密函数、执行系统命令、文件操作)
2. 识别内存马特征(如无文件落地、进程注入、异常网络连接)
3. 分析代码中的可疑功能(如命令执行、文件上传、信息收集)
4. 检查混淆编码、加密手段等规避技术
5. 最终结论:是否为恶意软件(是/否)
请用中文按以下格式回答:
【分析结果】是/否
【恶意类型】WebShell/内存马/其他
【通信特征】列出检测到的技术指标
【风险等级】高/中/低
文件内容:
{self.file_content}"""
result = self.api.chat_completion(prompt)
is_malicious = "【分析结果】是" in result
self.analysis_complete.emit(result, is_malicious)
except Exception as e:
self.analysis_complete.emit(f"错误发生: {str(e)}", False)
(2)进程分析模块
class ProcessAnalysisThread(QThread):
process_complete = pyqtSignal(str)
def __init__(self, process_data, parent=None):
super().__init__(parent)
self.process_data = process_data
self.api = APIAdapter()
def run(self):
try:
prompt = f"""你是一个Windows/Linux进程分析工程师,要求:
1. 用户将输出tasklist或者ps aux的结果
2. 帮助用户分析输出你所有认识的进程信息
3. 识别可能的恶意进程
4. 识别杀毒软件进程
5. 识别其他软件进程
tasklist或者ps aux的结果:{self.process_data}
按优先级列出需要关注的进程
【可疑进程】
【杀软进程】
【第三方软件进程】
给出具体操作建议:
• 安全进程的可终止性评估
"""
result = self.api.chat_completion(prompt)
self.process_complete.emit(result)
except Exception as e:
self.process_complete.emit(f"进程分析错误: {str(e)}")
(3)编解码模块
class DecodingThread(QThread):
decoding_complete = pyqtSignal(str)
def __init__(self, encoded_str, parent=None):
super().__init__(parent)
self.encoded_str = encoded_str
self.api = APIAdapter()
def run(self):
try:
prompt = f"""请站在网络安全专家角度完整分析并解码以下字符串,要求:
1. 识别所有可能的编码方式(包括嵌套编码)
2. 通过自己重新编码,确认自己解码正确
3. 展示完整的解码过程
4. 输出最终解码结果
原始字符串:{self.encoded_str}
请用中文按以下格式响应:
【编码分析】列出检测到的编码类型及层级
【解码过程】逐步展示解码步骤
【最终结果】解码后的明文内容"""
result = self.api.chat_completion(prompt)
self.decoding_complete.emit(result)
except Exception as e:
self.decoding_complete.emit(f"解码错误: {str(e)}")
(4)JS代码审计模块
class JsAuditThread(QThread):
audit_complete = pyqtSignal(str)
def __init__(self, js_code, parent=None):
super().__init__(parent)
self.js_code = js_code
self.api = APIAdapter()
def run(self):
try:
prompt = f"""请站在网络安全专家角度对以下JavaScript代码进行完整的安全审计,要求:
1. 识别XSS、CSRF、不安全的DOM操作、敏感信息泄露、eval、assert使用等安全问题
2. 检查第三方库的安全性和版本漏洞
3. 分析代码逻辑漏洞
4. 提供修复建议
请用中文按以下格式响应:
【高危漏洞】列出高危安全问题及位置
【中低危问题】列出中低风险问题
【修复建议】提供具体修复方案
JavaScript代码:
{self.js_code}"""
result = self.api.chat_completion(prompt)
self.audit_complete.emit(result)
except Exception as e:
self.audit_complete.emit(f"审计错误: {str(e)}")
(5)HTTP流量分析
class AnalysisThread(QThread):
analysis_complete = pyqtSignal(str, bool)
def __init__(self, http_data, parent=None):
super().__init__(parent)
self.http_data = http_data
self.api = APIAdapter()
def run(self):
try:
prompt = f"""站在网络安全专家角度进行网络安全分析。请严格按照以下步骤执行:
1. 分析以下HTTP请求的各个组成部分
2. 检查User-Agent等头部信息是否可疑
3. 识别是否存在SQL注入、XSS、CSRF、反序列化、文件上传、路径遍历、OWASPTop10、等常见攻击特征
4. 最终结论:是否为攻击流量(是/否)
请用中文按以下格式响应:
【分析结果】是/否
【依据】简明扼要列出技术依据
HTTP请求数据:
{self.http_data}"""
result = self.api.chat_completion(prompt)
is_attack = "【分析结果】是" in result
self.analysis_complete.emit(result, is_attack)
except Exception as e:
self.analysis_complete.emit(f"错误: {str(e)}", False)
3.config文件配置
# API配置(可选值: "deepseek" 或 "ollama")
API_TYPE="deepseek"
# DeepSeek API:
DEEPSEEK_API_URL="https://api.deepseek.com/v1/chat/completions"
DEEPSEEK_API_KEY=" "
# DeepSeek模型名称
#通过指定 model='deepseek-chat' 即可调用 DeepSeek-V3。指定 model='deepseek-reasoner',即可调用 DeepSeek-R1。
DEEPSEEK_MODEL="deepseek-chat"
# Ollama 本地API配置
OLLAMA_API_URL="http://localhost:11434/api/chat" # Ollama API地址
OLLAMA_MODEL="qwen2.5-coder:1.5b" # Ollama模型名称
四、总结
本文详细介绍了基于DeepSeek的安全分析工具的设计与实践过程。通过结合DeepSeek的强化学习能力和Ollama的本地部署优势,设计并实现了一个功能丰富的安全分析工具。该工具不仅具备流量分析、JS审计、进程分析、WebShell检测等核心功能,还通过GUI化设计提升了用户体验,使得不同年龄段和技术背景的用户都能轻松上手。此外,工具的可拓展性和离线使用能力进一步增强了其实用性。
在实现过程中,通过反复提问和优化,确保了DeepSeek的回复结果具有固定格式,提升了工具的稳定性和可靠性。未来,随着功能的不断丰富和优化,该工具有望在网络安全领域发挥更大的作用,帮助更多非专业安全工程师快速识别和分析潜在的安全威胁。
总的来说,本文的实践展示了如何利用大模型和本地部署技术,构建一个高效、易用的安全分析工具,为网络安全领域提供了新的思路和解决方案。