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.')
从上述代码中可以看出在 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 所示:
从实际的效果来看,基于预设模板生成的初始代码在功能实现层面具备可用性,但与 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
为提升 DeepSeek-R1 大模型在 pocsuite3 插件开发中的代码生成质量,使用搭建检索增强生成(RAG)来完成这一部分的工作,首先将pocsuite3官方文档转换为结构化 Markdown 格式,将其转化为知识库。随后将 文档导入 open-webui 的知识库中,在后续的提问时,使用 #<知识库名称>
的方式对文档进行引用。具体操作如下图1 所示:
本次需要编写的插件功能如下:
- 编写格式为 pocsuite3 的插件格式
- 调用之前编写 DeepSeek 类
我们在编写提示词时需要提供相应的信息,比如具体的参数,由于本地模型参数不够大,参数不能完整的进行推理,因此需要在提示词中对 AI 大模型进行提示。
第一次推理的结果如下:
代码结构整体设计符合框架规范,但存在一处错误:add_target 函数中主要用于为 conf.target 添加数据,而不是上图中的计数功能。我们需要让DeepSeek-R1 移除掉该段代码,最后的出来的代码如图 4 所示:
在移除掉 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 从 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 投喂给大模型,最后得到如下效果:
4 总结
基于大模型分析HTML内容的蜜罐检测方法展现出一定潜力,也存在如下的一些局限性:
- 仅对简单伪装的蜜罐系统有效
- 面对精心构建的高真实度蜜罐,检测准确率显著下降
- 多次检测同一目标可能产生不同结论,虽然整体趋势保持一致
- 高级蜜罐在未来或许会采用AI反检测技术,使AI自动化识别难度进一步提高
本研究作为初步探索,为安全研究人员提供了新的思路,未来可结合多维特征分析。
作者:wh0am1i@知道创宇404实验室
日期:2025年2月28日
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)