开篇:传统正则查杀 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 部署拉取镜像时遇到网络报错,或者需要完整的检测脚本,请看主页简介自动获取。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐