简介
在本次实验中,你将学习如何部署 Cowrie,这是一个中等交互性的 SSH 蜜罐,用于捕获和分析攻击者的行为。你将在 Python 虚拟环境中设置 Cowrie,并将其配置为模拟真实的 SSH 服务,同时启用全面的日志记录功能。
通过这个实践练习,你将通过模拟攻击并分析生成的日志来测试蜜罐。这种实践经验将帮助你理解蜜罐如何作为网络安全工具用于威胁检测和分析。
在本次实验中,你将学习如何部署 Cowrie,这是一个中等交互性的 SSH 蜜罐,用于捕获和分析攻击者的行为。你将在 Python 虚拟环境中设置 Cowrie,并将其配置为模拟真实的 SSH 服务,同时启用全面的日志记录功能。
通过这个实践练习,你将通过模拟攻击并分析生成的日志来测试蜜罐。这种实践经验将帮助你理解蜜罐如何作为网络安全工具用于威胁检测和分析。
在这一步中,你将安装 Cowrie,这是一个中等交互性的 SSH 蜜罐,旨在记录攻击者进行的暴力破解攻击和 shell 交互。Cowrie 用 Python 实现,可以使用 pip 轻松安装。蜜罐是一种安全机制,它模拟真实系统以吸引和研究恶意活动,帮助安全专业人员了解攻击模式。
首先,确保你位于默认工作目录。我们将在此处整理所有项目文件:
cd ~/project
安装 Cowrie 所需的系统依赖项。这些软件包提供了 Cowrie 正常运行所需的基本组件,包括 Python 开发工具和加密库:
sudo apt-get update && sudo apt-get install -y python3-venv python3-dev libssl-dev libffi-dev build-essential
为 Cowrie 创建一个 Python 虚拟环境。虚拟环境可以将项目依赖项与系统的 Python 安装隔离开来,防止潜在的冲突:
python3 -m venv cowrie-env
激活虚拟环境。激活后,你安装的任何 Python 软件包都将进入这个隔离环境,而不是系统全局的 Python 环境:
source cowrie-env/bin/activate
使用 pip 安装 Cowrie。Pip 是 Python 的包管理器,它将下载并安装 Cowrie 及其依赖项:
pip install cowrie
通过检查 Cowrie 版本来验证安装。这可以确认软件包已正确安装,并显示你正在运行的版本:
cowrie --version
你应该会看到类似于以下的输出:
cowrie 2.1.0
完成后,停用虚拟环境。这将使你回到系统的默认 Python 环境:
deactivate
在这一步中,你将配置 Cowrie 蜜罐的设置,以自定义其行为和日志记录功能。配置文件就像是蜜罐的“大脑”,决定了它如何与潜在攻击者进行交互,以及记录哪些数据用于分析。
首先,激活上一步创建的 Python 虚拟环境。这可以将 Cowrie 的依赖项与系统的 Python 隔离开来:
cd ~/project
source cowrie-env/bin/activate
生成默认配置文件。这些模板包含了所有可用设置及其默认值:
cowrie-gen-config
这将在 ~/project/cowrie-env/etc/cowrie/
目录下创建配置文件。
使用 nano(一款对初学者友好的文本编辑器)编辑主配置文件:
nano cowrie-env/etc/cowrie/cowrie.cfg
修改以下关键设置(使用箭头键导航,按 Ctrl+O
保存,按 Ctrl+X
退出):
listen_port = 2222
改为 listen_port = 22
—— 这会使蜜罐看起来像一个标准的 SSH 服务器。[output_json]
部分将 enabled = true
—— 启用结构化日志记录,便于分析。[output_textlog]
部分将 enabled = true
—— 提供人类可读的日志。创建一个专门用于存放日志文件的目录。将日志分开存放有助于组织和分析:
mkdir -p ~/project/cowrie-logs
在配置文件中更新日志路径,使其指向新创建的目录:
nano cowrie-env/etc/cowrie/cowrie.cfg
找到 log_path
设置并将其改为:
log_path = /home/labex/project/cowrie-logs
通过检查修改后的设置来验证配置更改:
grep -E 'listen_port|enabled|log_path' cowrie-env/etc/cowrie/cowrie.cfg
你应该会看到反映你所做更改的输出,这表明配置已正确保存。
在这一步中,你将启动 Cowrie 蜜罐的 SSH 服务,该服务将监听传入的连接。由于我们是在没有 systemd 的 Docker 容器中运行,因此将使用直接进程执行的方式。这种方法比传统的服务管理更简单,并且更适合容器化环境。
首先,确保你位于正确的目录并激活虚拟环境。虚拟环境包含了所有必要的 Python 依赖项,并且与系统隔离开来:
cd ~/project
source cowrie-env/bin/activate
在后台启动 Cowrie 服务。-n
标志使其以非守护进程模式运行(直接在终端显示输出),而 &
则将进程置于后台,这样你就可以继续使用终端:
cowrie start -n &
通过检查进程列表来验证服务是否正在运行。此命令会过滤所有正在运行的进程,只显示包含 "cowrie" 的进程:
ps aux | grep cowrie
你应该会看到类似于以下的输出:
labex 12345 0.0 0.5 12345 6789 ? S 12:34 0:00 python cowrie start -n
检查服务是否正在监听 22 端口。这一点至关重要,因为 SSH 连接将通过此端口进行。该命令会显示所有网络服务及其监听端口:
sudo netstat -tulnp | grep 22
你应该会看到表明 Python 正在监听 22 端口的输出。
为了使服务在终端会话之间保持运行,创建一个简单的保活脚本。这可以确保即使你关闭终端,蜜罐也能继续运行:
nano cowrie-keepalive.sh
添加以下内容:
#!/bin/bash
source ~/project/cowrie-env/bin/activate
cowrie start -n
使脚本具有可执行权限,以便可以直接运行:
chmod +x cowrie-keepalive.sh
现在,你可以通过执行此脚本来运行蜜罐。它将一步完成激活环境和启动 Cowrie 的操作:
./cowrie-keepalive.sh
在这一步中,你将针对你的 Cowrie 蜜罐模拟一次 SSH 暴力破解攻击,以验证其日志记录功能。这种模拟有助于展示现实世界中的攻击者可能如何尝试进行未经授权的访问,以及蜜罐如何记录这些尝试以便进行分析。
首先,确保你的 Cowrie 蜜罐正在运行(参考上一步):
ps aux | grep cowrie
此命令用于检查 Cowrie 进程是否处于活动状态。你应该在输出列表中看到 'cowrie'。
如果尚未安装 SSH 客户端,请进行安装:
sudo apt-get install -y openssh-client
openssh-client
软件包提供了我们用于连接到蜜罐的 ssh
命令。-y
标志会自动确认所有提示。
通过尝试使用常见的用户名/密码组合进行多次 SSH 连接来模拟暴力破解攻击:
for i in {1..5}; do
sshpass -p 'password' ssh -o StrictHostKeyChecking=no -p 22 labex@localhost
sshpass -p 'admin' ssh -o StrictHostKeyChecking=no -p 22 admin@localhost
sshpass -p 'root' ssh -o StrictHostKeyChecking=no -p 22 root@localhost
done
此脚本会对常见的用户名/密码对(如 root/password
)各尝试 5 次。-o StrictHostKeyChecking=no
可防止 SSH 询问未知主机的问题,便于自动化操作。
使用 Hydra(已预先安装在 LabEx 虚拟机中)模拟更复杂的攻击:
hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/metasploit/unix_passwords.txt -t 4 -vV localhost ssh
Hydra 是一款强大的暴力破解工具。在此处,它会尝试使用提供的字典文件中的组合(-L
用于指定用户名,-P
用于指定密码)。-t 4
将并行尝试次数限制为 4 次,-vV
会显示详细输出。
通过检查 Cowrie 日志来验证攻击是否已被记录:
ls -l ~/project/cowrie-logs/
运行攻击后,此命令会显示包含所有连接尝试详细信息的新日志文件。在实际部署中,安全分析师会查看这些日志。
在这一步中,你将分析 Cowrie 生成的攻击日志,以了解上一步中模拟的攻击情况。这些日志包含了有关攻击尝试的宝贵安全信息。Cowrie 会自动以两种格式记录所有交互尝试:一种是便于快速阅读的简单文本日志,另一种是用于详细分析的结构化 JSON 日志。
首先,导航到 Cowrie 存储所有日志文件的目录:
cd ~/project/cowrie-logs
查看基于文本的日志文件(最新的文件排在前面)。ls -lt
命令按修改时间对文件进行排序,而 tail
命令则显示最新日志的最后 20 行:
ls -lt cowrie.log*
tail -n 20 cowrie.log
你应该会看到显示失败登录尝试的条目,其中包含时间戳、用户名和 IP 地址。
检查 JSON 日志文件以获取结构化数据。jq
工具可帮助解析 JSON,而 less
命令则允许你滚动查看长输出:
jq '.' cowrie.json | less
查找包含 "eventid": "cowrie.login.failed"
的条目,这些条目表示身份验证尝试失败。
搜索针对常见管理员账户的特定攻击模式。grep
命令用于在文件中搜索文本模式:
grep -a "root" cowrie.log
grep -a "admin" cowrie.log
生成攻击尝试的摘要。以下命令从 JSON 日志中提取并统计最常尝试的用户名和密码:
echo "Top usernames attempted:"
jq -r 'select(.eventid=="cowrie.login.failed") | .username' cowrie.json | sort | uniq -c | sort -nr
echo -e "\nTop passwords attempted:"
jq -r 'select(.eventid=="cowrie.login.failed") | .password' cowrie.json | sort | uniq -c | sort -nr
查看源 IP 信息(在本次模拟中会显示为本地主机)。此命令提取连接客户端的 IP 地址:
jq -r 'select(.eventid=="cowrie.session.connect") | .src_ip' cowrie.json
在本次实验中,你学习了如何部署 Cowrie SSH 蜜罐来监控和分析网络攻击。整个过程包括设置 Python 虚拟环境、配置 SSH 端口,以及启用 JSON 日志记录以详细收集攻击数据。
你还获得了启动蜜罐服务、模拟攻击和分析记录数据的实践经验。这次实践练习展示了安全工具如何模拟真实系统,从而有效地检测和研究恶意活动。