从零开始搭建:基于本地DeepSeek的Web蜜罐自动化识别

2025-03-15 3 0

1. 前言

pocsuite3 框架可以通过 --dork或 --dork-zoomeye参数获取 ZoomEye 网络空间测绘平台的搜索引擎数据。但随着近几年网络空间领域的攻防对抗升级,导致网络空间中存在大量的蜜罐。为了过滤掉这些蜜罐,ZoomEye 中加入了自动标注蜜罐的识别算法, 同时 pocsuite3 在 _check方法也内建了部分的蜜罐识别机制,翻看 pocsuite3 的源码,可以看出检测蜜罐的逻辑如下:

keyword = [
            'goahead-webs',
            'apache-coyote',
            'upnp/',
            'openresty',
            'tomcat'
        ]

sin = 0
for k in keyword:
    if k in content:
        sin += 1

if sin >= 3:
    logger.debug(f'honeypot: sin({sin}) >= 3')
    is_honeypot = True

# maybe some false positives
elif len(re.findall('<title>(.*)</title>', content)) > 5:
    logger.debug('honeypot: too many title')
    is_honeypot = True

elif len(re.findall('basic realm=', content)) > 5:
    logger.debug('honeypot: too many www-auth')
    is_honeypot = True

elif len(re.findall('server: ', content)) > 5:
    logger.debug('honeypot: too many server')
    is_honeypot = True

if is_honeypot:
    logger.warn(f'{mosaic(self.url)} is a honeypot.')

代码1 pocsuite3 检测蜜罐代码

从上述代码中可以看出在 pocsuite3 中使用正则匹配关键词来检测蜜罐数据,但是这种关键词的检测不一定能准确检测出蜜罐数据,由于网络空间随时随刻都存在攻防对抗的升级,为了更加灵活的应对这些变化,所以尝试引入具有推理能力的 AI 模型对这些数据进行智能化的识别。

基于此目的,目前能想到的最好的结合方式就是利用 pocsuite3 的 plugin 功能,可以让 pocsuite3 能够直接使用 deepseek 的AI推理能力,进一步提升 pocsuite3 的智能化水平。

2 代码编写

本次实验的环境如下:

  • open-webui
  • DeepSeek-R1:14b(以下简称 DeepSeek-R1,无特殊说明参数都是 14b)
  • pocsuite3 文档

首先需要构建了DeepSeek核心类,作为 pocsuite3 框架与 DeepSeek-R1 模型间的桥接层。该类实现了以下功能:

  • 处理与模型服务的连接
  • 在提示词中嵌入结构化代码模板

同时设计专用提示词模板:

  • 框架特定API调用方式
  • 涉及的参数,如 ollama server, model 等信息

通过这种方式,引导 DeepSeek-R1 模型生成符合 pocsuite3 架构规范的代码。具体效果如图 1 所示:

图1 deepseek 编写代码

从实际的效果来看,基于预设模板生成的初始代码在功能实现层面具备可用性,但与 pocsuite3 框架的代码风格存在一定的差异。为了贴合 pocsuite3 的代码风格需要手动对代码进行一定的修改,修改后的代码如下:

class DeepSeek():
    def __init__(self, conf_path=paths.POCSUITE_RC_PATH, url=None, model=None):
        self.conf_path = conf_path
        self.url = url
        self.model = model

                # 尝试从配置文件读取 URL 和 Model
if self.conf_path:
            self.parser = ConfigParser()
            self.parser.read(conf_path)
            try:
                self.model = self.model or self.parser.get('Ollama', 'model')
                self.url = self.url or self.parser.get('Ollama', 'url')
            except Exception:
                pass
                # 检查配置是否完整
self.check_token()

    def check_token(self):
             # 如果 URL 和 Model 已经设置,直接检查服务可用性
if self.model and self.url:
            if self.ollama_is_available():
                return True
        # 如果 URL 或 Model 未设置,提示用户输入
while True:
            logger.info("Please input Ollama  url and token!")
            self.url = input("Ollama url:").rstrip('/')
            self.model = input("Ollama model:")
            if self.ollama_is_available():
                self.write_conf()
                return True
            else:
                logger.info("ollama server %s not running", self.url)

    def ollama_is_available(self):
        try:
            resp = requests.get(self.url)
            if resp and resp.status_code == 200 and "running" in resp.text:
                return True
            else:
                logger.info(resp.text)
                return False
        except Exception as ex:
            logger.error(str(ex))
        return False
        # 保存配置
def write_conf(self):
        if not self.parser.has_section("Ollama"):
            self.parser.add_section("Ollama")
        try:
            self.parser.set("Ollama", "model", self.model)
            self.parser.set("Ollama", "url", self.url)
            self.parser.write(open(self.conf_path, "w"))
        except Exception as ex:
            logger.error(str(ex))
    # 对话
def chat(self, content):
        client = OpenAI(
            api_key="empty",
            base_url="{}/v1".format(self.url),
        )
        messages = [{"role": "system", "content": PROMPT},
                    {"role": "user", "content": user_prompt % content}]

        response = client.chat.completions.create(
            model=self.model,
            messages=messages
        )
        return response.choices[0].message.content

代码2 DeepSeek 类

为提升 DeepSeek-R1 大模型在 pocsuite3 插件开发中的代码生成质量,使用搭建检索增强生成(RAG)来完成这一部分的工作,首先将pocsuite3官方文档转换为结构化 Markdown 格式,将其转化为知识库。随后将 文档导入 open-webui 的知识库中,在后续的提问时,使用 #<知识库名称>的方式对文档进行引用。具体操作如下图1 所示:

图2 pocsuite3 文档导入知识库

本次需要编写的插件功能如下:

  • 编写格式为 pocsuite3 的插件格式
  • 调用之前编写 DeepSeek 类

我们在编写提示词时需要提供相应的信息,比如具体的参数,由于本地模型参数不够大,参数不能完整的进行推理,因此需要在提示词中对 AI 大模型进行提示。

第一次推理的结果如下:

图3 首次编写 pocsuite3 plugin

代码结构整体设计符合框架规范,但存在一处错误:add_target 函数中主要用于为 conf.target 添加数据,而不是上图中的计数功能。我们需要让DeepSeek-R1 移除掉该段代码,最后的出来的代码如图 4 所示:

图4 修改后的 TargetToDeepSeek 类

在移除掉 add_target 函数后,输出的代码整体功能完善,但是仍需要进行修改,人工配合修改最后得到了下面的代码:

from pocsuite3.api import PluginBase
from pocsuite3.api import PLUGIN_TYPE
from pocsuite3.api import logger
from pocsuite3.api import register_plugin
from pocsuite3.modules.deepseek import DeepSeek
from pocsuite3.api import conf, kb


class TargetToDeepSeek(PluginBase):
    category = PLUGIN_TYPE.TARGETS

    def init_deepseek(self):
        self.client = DeepSeek(
            url=conf.ollama_url,
            model=conf.ollama_model
        )
        info_msg = "[PLUGIN] DeepSeek plugin initialized."
        logger.info(info_msg)

    def init(self):
        self.init_deepseek()
        for target in kb.targets:
          logger.info(f"[PLUGIN] 正在与 DeepSeek 对话,目标:{target}")
          response = deepseek.chat(target)
          logger.info(f"[PLUGIN] DeepSeek 响应:{response}")

register_plugin(TargetToDeepSeek)

代码3 pocsuite3 TARGETS 插件

3 检测蜜罐

接着使用 pocsuite3 从 ZoomEye 搜索一些常见的蜜罐如:title="D-link",查看 ZoomEye 返回的数据中部分 body 如下:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="Pragma" content="no-cache" />
<meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible">
<meta content="object" property="og:type">
<meta content="GitLab" property="og:site_name">
<meta content="Help" property="og:title">
<meta content="GitLab Community Edition" property="og:description">
<meta content="summary" property="twitter:card">
<meta content="Help" property="twitter:title">
<meta content="GitLab Community Edition" property="twitter:description">
<meta content="GitLab Community Edition" name="description">
<meta content="#484D57" name="theme-color">
<meta content="#38353E" name="msapplication-TileColor">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="8dcb74a64dc984fb9abe3e7c201f810d9ec90ed8e4cb78c63bbf86f8ffdc3f112202e0==" />
<title>D-Link DSL-2750U,D-Link DSL-2750U</title>
...
<!--
WWW-Authenticate: Basic realm="karaf"
WWW-Authenticate: Basic realm="Server Status"
WWW-Authenticate: Basic realm="HomeHub"
WWW-Authenticate: Digest realm="IgdAuthentication", domain="/", nonce="N2UyNjgxMjA6NjQ1MWZiOTA6IDJlNjI5NDA=", qop="auth", algorithm="MD5"
WWW-Authenticate: Basic realm="RT-N2UyNjgx"
WWW-Authenticate: Basic aHR0cHdhdGNoOmY=
WWW-Authenticate: Digest realm="realm@easycwmp",qop="auth",nonce="e22f76001fa38ce36f9b69bdbd73fbfb0001c399",opaque="328458fab28345ae87ab3210a8513b14eff452a2"
WWW-Authenticate: Basic realm="DVR"
WWW-Authenticate: Basic realm="Broadband Router"
...
bin
boot
dev
dnsmasq_setup.sh
etc
lib
lua_plu
mnt
overlay
proc
rom
root
sbin
sys
tmp
usr
var
www
...

我们将 DeepSeek 编写插件导入到 pocsuite3 中,将提取出来的提示词融合进 system prompt 中,使用时同时调用 ZoomEye 与 DeepSeek 插件,将从Zoomeye平台获取的HTML正文内容作为 user prompt 投喂给大模型,最后得到如下效果:

图5 deepseek 检测蜜罐结果

4 总结

基于大模型分析HTML内容的蜜罐检测方法展现出一定潜力,也存在如下的一些局限性:

  • 仅对简单伪装的蜜罐系统有效
  • 面对精心构建的高真实度蜜罐,检测准确率显著下降
  • 多次检测同一目标可能产生不同结论,虽然整体趋势保持一致
  • 高级蜜罐在未来或许会采用AI反检测技术,使AI自动化识别难度进一步提高

本研究作为初步探索,为安全研究人员提供了新的思路,未来可结合多维特征分析。

作者:wh0am1i@知道创宇404实验室
日期:2025年2月28日

原文链接:https://paper.seebug.org/3295/


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

朝鲜APT组织ScarCruft使用新型Android间谍软件KoSpy瞄准韩语和英语用户
成功破解加密机制,研究人员解锁LinuxESXi Akira勒索软件
新型XCSSET恶意软件利用增强混淆技术攻击macOS用户
关于CC链1中的一些问题分析
警惕!AI组件ComfyUI易被黑产盯上
二维码钓鱼攻击(Quishing)详解及防范指南

发布评论