从攻击者视角反制:低交互蜜罐的核心原理解析

24 阅读2分钟

导语

面向工程落地。目标不是阻断攻击,而是产生可用情报。本文以你提供的代码为基线,解释为什么这样设计、如何产出结构化数据、需要注意的合规与安全点。


目录

  1. 系统目标
  2. 端到端流程(工程视角)
  3. 关键设计权衡
  4. 推荐统一 session/schema
  5. 代码亮点速览(引用你提供的模块)
  6. 合规与运维注意
  7. 结论与行动项

1. 系统目标(工程化)

  • 捕获扫描、爆破、交互式攻击行为。
  • 最小化被反向利用风险(拒绝实际文件写入/执行)。
  • 产出统一、可索引的事件流(便于 ELK/Kafka/分析)。

2. 端到端流程(工程视角)

Client -> TCP socket -> ProtocolRegistry -> ProtocolHandler (HTTP/FTP/Telnet/SSH)
           -> attack_logger.log_*() -> ProtocolHandler.persist(entry) -> Storage/Kafka/ELK

实现要点:asyncio.start_server 用于 HTTP/FTP/Telnet,asyncssh 用于 SSH。每个会话生成 session_id 并最终 await self.persist(entry)


3. 关键设计权衡

  • 低交互优点:资源消耗低、易扩展、安全风险小。
  • 低交互缺点:拟真深度受限,易被高级探针识别。
  • 日志详尽 vs 合规:保存明文凭证有价值但带来法律/隐私风险。生产场景必须脱敏或加密。

4. 推荐统一 session/schema(示例 JSON)

{
  "session_id":"uuid",
  "protocol":"http",
  "start_time":"ISO8601",
  "end_time":"ISO8601",
  "duration_seconds":1.23,
  "remote_ip":"1.2.3.4",
  "remote_port":12345,
  "username":"root",
  "authenticated":false,
  "inputs":[{"ts":"...","input":"GET /admin HTTP/1.1"}],
  "events":[{"ts":"...","type":"auth_attempt","detail":{"username":"admin"}}],
  "raw_base64":"....",
  "meta":{"server_header":"nginx/1.20.1"}
}

优势:索引、聚合与跨协议关联都变得直接。


5. 代码亮点速览(基于你提供的实现)

  • HTTPHandler:手工解析请求、随机 Server header、动态 .php 路径、attack_logger.log_command_execution/log_auth_attempt
  • FTPHandler:控制通道命令集(USER/PASS/RETR/STOR),记录凭证并返回模拟响应(230/550)。
  • TelnetHandler:模拟 CLI(show versionpingreload),记录交互并保存 raw_base64
  • SSHHandler(asyncssh):实现 validate_passwordvalidate_public_key、交互 shell 的 SSHServerSession,分层记录 auth/command/interaction
  • 统一持久化点:每个 handler 在 finally 块里调用 await self.persist(entry),保证会话数据落盘。

6. 合规与运维注意

  • 敏感字段(password、cookie、POST body)必须在写入前标注或加密。
  • 生产上禁止将蜜罐置于与生产网络同一平面,必需隔离网络/ACL。
  • 日志访问应受 RBAC 控制,保留审计链路。
  • 快速下线能力:当蜜罐被识别或滥用时能立即停止服务并保留证据快照。

7. 结论与行动项

  1. 统一 session schema 并把 persist 适配为 JSONL/Kafka Sink。
  2. 对关键字段设计脱敏策略。
  3. HTTPHandler/FTPHandler/TelnetHandler/SSHHandler 中加入概率性错误以提高拟真度(避免始终“成功”)。
  4. 部署前完成网络隔离与审计策略。