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

admin 2025年2月28日21:12:25评论2 views字数 6247阅读20分49秒阅读模式
者:wh0am1i@知道创宇404实验室
时间:2025年2月28日

 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 所示:

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

图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 所示:

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

图2 pocsuite3 文档导入知识库

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

  • 编写格式为 pocsuite3 的插件格式

  • 调用之前编写 DeepSeek 类

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

第一次推理的结果如下:

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

图3 首次编写 pocsuite3 plugin

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

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

图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 投喂给大模型,最后得到如下效果:

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

图5 deepseek 检测蜜罐结果

 4.总结

参考资料

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

  • 仅对简单伪装的蜜罐系统有效

  • 面对精心构建的高真实度蜜罐,检测准确率显著下降

  • 多次检测同一目标可能产生不同结论,虽然整体趋势保持一致

  • 高级蜜罐在未来或许会采用AI反检测技术,使AI自动化识别难度进一步提高

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

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

作者名片

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

原创 Paper | 从零开始搭建:基于本地 DeepSeek 的 Web 蜜罐自动化识别
往 期 热 门
(点击图片跳转)

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

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

“阅读原文”更多精彩内容!

原文始发于微信公众号(白帽子):原创 Paper | 从零开始搭建:基于本地 DeepSeek 的 Web 蜜罐自动化识别

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月28日21:12:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原创 Paper | 从零开始搭建:基于本地 DeepSeek 的 Web 蜜罐自动化识别https://cn-sec.com/archives/3781488.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息