导语
面向工程落地。目标不是阻断攻击,而是产生可用情报。本文以你提供的代码为基线,解释为什么这样设计、如何产出结构化数据、需要注意的合规与安全点。
目录
- 系统目标
- 端到端流程(工程视角)
- 关键设计权衡
- 推荐统一 session/schema
- 代码亮点速览(引用你提供的模块)
- 合规与运维注意
- 结论与行动项
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:手工解析请求、随机Serverheader、动态.php路径、attack_logger.log_command_execution/log_auth_attempt。FTPHandler:控制通道命令集(USER/PASS/RETR/STOR),记录凭证并返回模拟响应(230/550)。TelnetHandler:模拟 CLI(show version、ping、reload),记录交互并保存raw_base64。SSHHandler(asyncssh):实现validate_password、validate_public_key、交互 shell 的SSHServerSession,分层记录auth/command/interaction。- 统一持久化点:每个 handler 在 finally 块里调用
await self.persist(entry),保证会话数据落盘。
6. 合规与运维注意
- 敏感字段(password、cookie、POST body)必须在写入前标注或加密。
- 生产上禁止将蜜罐置于与生产网络同一平面,必需隔离网络/ACL。
- 日志访问应受 RBAC 控制,保留审计链路。
- 快速下线能力:当蜜罐被识别或滥用时能立即停止服务并保留证据快照。
7. 结论与行动项
- 统一 session schema 并把
persist适配为 JSONL/Kafka Sink。 - 对关键字段设计脱敏策略。
- 在
HTTPHandler/FTPHandler/TelnetHandler/SSHHandler中加入概率性错误以提高拟真度(避免始终“成功”)。 - 部署前完成网络隔离与审计策略。