效率提升1000%!基于本地部署 DeepSeek 模型的 WebShell 智能检测引擎实战
开篇:传统正则查杀 WebShell,正在逐渐失效

在过去的 Web 安全检测中,发现 WebShell 最常见的方法是什么?
答案:
正则匹配。
例如:
eval($_POST['cmd']);
assert($_REQUEST['x']);
system($_GET['cmd']);
安全人员会建立规则库:
eval
base64_decode
shell_exec
preg_replace /e
create_function
然后:
扫描源码。
匹配关键词。
发现疑似木马。
这种方式简单、高效,在早期 WebShell 检测中发挥了巨大作用。
但是随着攻击技术不断变化,传统规则检测已经越来越难满足企业安全需求。
一、传统 WebShell 检测的三个核心痛点
1. 攻击者开始绕过关键词检测
例如:
原始代码:
eval($_POST['cmd']);
经过混淆:
$a="ev";
$b="al";
$c=$a.$b;
$c($_POST['x']);
从语义上:
依然是执行代码。
但是:
简单正则无法识别。
2. 正常业务代码存在大量危险函数
例如:
CMS:
system();
exec();
file_get_contents();
include();
这些函数本身并不是漏洞。
关键在:
上下文。
例如:
正常:
system("service nginx restart");
恶意:
system($_GET['cmd']);
区别不是关键词。
而是:
代码意图。
3. 新型 WebShell 使用无文件攻击和动态加载
攻击者可能:
-
动态生成代码;
-
变量拼接;
-
编码隐藏;
-
利用框架特性。
传统检测:
只能回答:
有没有危险字符串?
但是企业真正需要:
这段代码是不是具备攻击意图?
这正是大模型擅长的领域。
二、为什么选择本地 DeepSeek 模型做代码审计?
很多企业尝试过:
直接调用公网 AI API。
但是安全团队马上会遇到问题:
1. 代码隐私问题
企业源码包含:
-
业务逻辑;
-
数据库结构;
-
API接口;
-
内部算法;
-
配置文件。
直接上传:
风险非常高。
2. 合规问题
很多企业:
禁止源码离开内部网络。
例如:
金融:
源码禁止外发
政企:
数据必须本地处理
所以更合理方案:
企业源码
↓
内部服务器
↓
Docker部署DeepSeek
↓
AI代码审计
数据始终留在企业内部。
三、整体架构设计
一个本地 AI WebShell 检测系统:
架构如下:
PHP/JSP源码
|
↓
Python扫描引擎
|
↓
代码切片处理
|
↓
DeepSeek本地模型
|
↓
AI安全分析
|
↓
风险报告输出
核心组件:
Docker
+
DeepSeek
+
Python
+
代码解析器
+
Prompt工程
四、Docker 部署本地 DeepSeek 模型

这里使用:
Ollama + DeepSeek
作为本地模型运行环境。
架构:
Python
↓
Ollama API
↓
DeepSeek Model
1. 安装 Docker
Ubuntu:
apt update
apt install docker.io docker-compose -y
检查:
docker version
五、部署 Ollama 服务
创建:
docker-compose.yml
内容:
version: "3"
services:
ollama:
image: ollama/ollama
container_name:
security-ai
ports:
- "11434:11434"
volumes:
- ./ollama:/root/.ollama
restart:
always
启动:
docker compose up -d
查看:
docker ps
六、下载 DeepSeek 模型
进入容器:
docker exec -it security-ai bash
拉取模型:
ollama pull deepseek-coder
测试:
ollama run deepseek-coder
如果返回:
>>>
说明部署成功。
七、为什么选择代码模型?
普通大模型:
擅长:
聊天
总结
写文章
代码模型:
针对:
代码结构
函数关系
漏洞模式
逻辑分析
进行了优化。
WebShell检测属于:
代码安全分析。
所以:
优先选择:
DeepSeek-Coder
Qwen-Coder
CodeLlama
八、源码进入 AI 之前,需要进行预处理
不要直接:
整个项目
↓
发送模型
原因:
第一:
Token 爆炸。
第二:
模型无法聚焦。
正确方式:
源码
↓
文件扫描
↓
代码切片
↓
重点函数提取
↓
AI分析
九、Python 批量读取 PHP/JSP 源码
例如:
项目:
website/
├── index.php
├── upload.php
├── admin.jsp
读取:
import os
def scan_code(path):
files=[]
for root,dirs,names in os.walk(path):
for name in names:
if name.endswith(
(
".php",
".jsp"
)
):
files.append(
os.path.join(
root,
name
)
)
return files
files = scan_code(
"./website"
)
for f in files:
print(f)
输出:
./website/index.php
./website/upload.php
./website/admin.jsp
十、代码切片处理
大文件不能一次发送。
需要切割。
例如:
def split_code(
content,
size=3000
):
chunks=[]
for i in range(
0,
len(content),
size
):
chunks.append(
content[i:i+size]
)
return chunks
例如:
10000行 PHP:
拆成:
Chunk1
Chunk2
Chunk3
分别检测。
十一、核心 Prompt 设计
很多人使用 AI 审计失败。
原因:
Prompt 太简单。
错误:
帮我看看有没有漏洞。
模型输出:
代码可能存在问题。
没有价值。
安全审计 Prompt:
你是一名高级Web安全代码审计专家。
任务:
分析下面PHP/JSP代码。
目标:
判断是否存在WebShell、
后门代码、
命令执行风险、
动态代码执行行为。
重点关注:
1.
危险函数调用
2.
用户输入是否可控
3.
编码混淆
4.
动态执行
5.
文件上传风险
输出JSON:
{
risk:"",
level:"",
reason:"",
evidence:"",
suggestion:""
}
十二、Prompt 调优技巧
技巧1:限定角色
不要:
你是AI。
改成:
你是拥有10年经验的Web安全研究员。
技巧2:要求结构化输出
不要:
分析一下。
要求:
JSON。
例如:
{
"risk":"high",
"type":
"webshell",
"line":30
}
方便程序处理。
技巧3:增加安全上下文
告诉模型:
关注:
PHP
JSP
Java
反序列化
命令执行
文件包含
效果更好。
十三、Python 调用本地 DeepSeek API
Ollama 默认:
11434端口
代码:
import requests
def ask_ai(code):
prompt=f"""
你是安全代码审计专家。
分析:
{code}
输出风险等级。
"""
response=requests.post(
"http://127.0.0.1:11434/api/generate",
json={
"model":
"deepseek-coder",
"prompt":
prompt,
"stream":
False
}
)
return response.json()["response"]
十四、完整检测流程代码
简化版:
import os
import requests
MODEL_URL = (
"http://127.0.0.1:11434/api/generate"
)
def read_file(path):
with open(
path,
"r",
encoding="utf-8",
errors="ignore"
) as f:
return f.read()
def analyze(code):
prompt=f"""
你是Web安全专家。
检测以下源码:
{code}
判断:
1.
是否存在WebShell
2.
是否存在恶意后门
3.
风险等级
输出JSON。
"""
r=requests.post(
MODEL_URL,
json={
"model":
"deepseek-coder",
"prompt":
prompt,
"stream":
False
}
)
return r.json()
def scan_project(path):
for root,dirs,files in os.walk(path):
for file in files:
if file.endswith(
(
".php",
".jsp"
)
):
filepath=os.path.join(
root,
file
)
code=read_file(
filepath
)
result=analyze(
code
)
print(
filepath
)
print(
result
)
scan_project(
"./target"
)
十五、企业级优化方向
真正生产环境:
不会只靠一个模型。
通常:
第一层:
规则检测
YARA
正则
AST分析
快速过滤。
第二层:
AI语义分析
DeepSeek
Qwen
判断:
代码意图。
第三层:
人工确认。
形成:
规则
+
AI
+
人工
三层体系。
十六、AI WebShell 检测未来趋势
未来代码审计:
不会只是:
grep危险函数
而会变成:
源码
↓
语义理解
↓
行为分析
↓
攻击意图判断
↓
风险评分
AI 的价值:
不是替代安全人员。
而是:
帮助安全工程师快速阅读百万行代码。
总结
传统 WebShell 检测最大的问题:
不是没有规则。
而是:
攻击者已经开始绕过规则。
未来企业安全代码审计:
需要:
本地大模型
+
代码理解
+
Prompt工程
+
自动化扫描
通过 Docker 部署 DeepSeek,将 AI 能力部署到企业内部,可以在保护源码隐私的同时,大幅提升代码审计效率。
真正成熟的 AI 安全审计平台,不是简单调用 API。
而是:
构建属于企业自己的安全智能分析能力。
如果在 Docker 部署拉取镜像时遇到网络报错,或者需要完整的检测脚本,请看主页简介自动获取。



更多推荐



所有评论(0)