巧用 Cowrie 部署 SSH 蜜罐,让黑客攻击无处遁形

Posted by Mike on 2020-05-09

什么是蜜罐

蜜罐其实就是一台无人使用但却被严密监控的网络主机,里面包含着各类虚假的高价值资源和一些已知漏洞,以此吸引入侵者来入侵该主机。并且在被入侵的过程中,实时记录和审计入侵者的所有入侵攻击流量、行为和数据。以此了解入侵者的攻击方式、手段和目的,便于后期快速完成对其的溯源和取证工作。

蜜罐的一些主要构成模块

  1. 按实现逻辑划分
  • 控制:将入侵者牢牢控制在指定的网络范围中,使其不能再以此机器作为跳板来攻击其它的机器。

  • 捕获:把入侵者在入侵过程中所产生的各种流量捕获住。

  • 分析:将捕获到的各种数据存到数据库或者其它指定地方,便于后续还原其详细的入侵攻击过程。

  1. 按具体实现过程划分
  • 监控各种主机项,如:进程、文件、注册表、网络等。

  • 同时提交给入侵检测,以识别其更详细的入侵手段,并对整个入侵过程做详细记录。

  • 入侵数据汇总分析,其实就是把上述两步所得到的各种数据进行集中分析,最后勾勒出完整的入侵轨迹画像。

  1. 最容易理解的说法
  • 蜜罐环境隔离: 使用虚拟环境将物理环境和蜜罐隔绝开,防止某些敏感操作在其真实的系统环境中进行造成破坏。

  • 敏感操作记录:把蜜罐中所有的入侵操作都写进数据库。

  • 邮件报警系统:蜜罐被入侵后自动发送报警邮件通知相关安全应急人员。

蜜罐的分类

1. 低交互蜜罐

低交互蜜罐最大的特点是:蜜罐为攻击者展示的所有攻击弱点和攻击对象都不是真正的产品系统,而是对各种系统及其提供的服务的模拟。由于它的服务都是模拟的行为,所以蜜罐可以获得的信息非常有限,只能对攻击者进行简单的应答。不过,它也是最安全的蜜罐类型。

2. 中交互蜜罐

中交互蜜罐是对真正的操作系统的各种行为的模拟,它提供了更多的交互信息,同时也可以从攻击者的行为中获得更多的信息。在这个模拟行为的系统中,蜜罐此时看起来和一个真正的操作系统没有区别,它们甚至是比真正系统还诱人的攻击目标。

3. 高交互蜜罐

高交互蜜罐具有一个真实的操作系统,它的优点体现在对攻击者提供完全真实的系统。当攻击者获得 ROOT 权限后,受系统、数据真实性的迷惑,他的更多活动和行为将被记录下来。缺点是被入侵的可能性很高,如果整个高交互蜜罐被入侵,那么它就会成为攻击者下一步攻击的跳板,不太安全。

什么是 Cowrie

Cowrie 是一个具有中等交互的 SSH 蜜罐,它可以获取攻击者用于暴力破解的字典、输入的命令以及上传或下载的恶意文件。所有这些攻击记录都会被记载到日志中,以便日后分析。

项目地址:https://github.com/cowrie/cowrie

Cowrie 安装部署

使用源码部署

本次搭建使用的基础环境是 Ubuntu ,以下步骤除切换到虚拟环境中的操作,其它均为 root 权限执行。

安装必要的支持软件

1
2
3
4
5
# Python 3
$ sudo apt-get install git python-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv

# Python 2
$ sudo apt-get install git python-virtualenv libssl-dev libffi-dev build-essential libpython-dev python2.7-minimal authbind

添加一个普通用户

对外提供服务的程序均以普通用户身份运行,能更好的保证服务器安全性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo adduser --disabled-password cowrie
Adding user 'cowrie' ...
Adding new group 'cowrie' (1002) ...
Adding new user 'cowrie' (1002) with group 'cowrie' ...
Changing the user information for cowrie
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]

$ sudo su - cowrie

安装 Cowire

由于 Cowire 是采用 Python 开发,为了方便管理和安全,我们就直接将 Cowire 部署到 Python 的虚拟环境中。

  1. 下载 Cowire
1
2
$ cd /home/cowrie/
$ git clone https://github.com/cowrie/cowrie.git
  1. 在 Python 虚拟环境中安装 Cowire
  • 进入 Cowrie 所在目录,并安装虚拟环境
1
$ cd /home/cowrie/cowrie
  • 使用 Python 3 创建虚拟环境
1
2
3
$ virtualenv --python=python3 cowrie-env
New python executable in ./cowrie/cowrie-env/bin/python
Installing setuptools, pip, wheel...done.
  • 使用 Python 2 创建虚拟环境
1
2
3
$ virtualenv --python=python2 cowrie-env
New python executable in ./cowrie/cowrie-env/bin/python
Installing setuptools, pip, wheel...done.
  • 激活 Cowrie 环境,并安装必要的软件包
1
2
3
$ source cowrie-env/bin/activate
(cowrie-env) $ pip install --upgrade pip
(cowrie-env) $ pip install --upgrade -r requirements.txt
  1. 创建并修改 Cowire 的配置文件
1
2
3
(cowrie-env) $ cd etc/
(cowrie-env) $ cp cowrie.cfg.dist cowrie.cfg
(cowrie-env) $ vi cowrie.cfg
  • 打开 SSH 服务,并且修改监听端口
1
2
3
4
5
6
7
[ssh]

# Enable SSH support
# (default: true)
enabled = true

listen_endpoints = tcp:2222:interface=0.0.0.0
  • 配置日志文件输出

默认情况下,Cowire 支持将日志输出到多个接收终端中。比如:文件文件、Cuckoo、ELK StackGraylogKippo-GraphSplunkSQL (MySQLSQLite3RethinkDB) 等等中。这里我们就来说说最常用的文本文件和 MySQL 数据库:

1
2
3
4
5
# 保存在文本文件中,需要配置以下一些内容。
[output_textlog]
enabled = true
logfile = ${honeypot:log_path}/audit.log
format = text
1
2
3
4
5
6
7
8
9
# 保存在数据库中,需要配置以下一些内容。
[output_mysql]
host = localhost
database = cowrie
username = cowrie
password = PASSWORD HERE
port = 3306
debug = false
enabled = true

如果是需要保存在 MySQL 数据库中,当然只配置是不行的,你还得需要有一个对应的数据库。如果你没有,可以按下面的步骤进行安装。

  • 安装 MySQL
1
$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev python-mysqldb

安装成功后,你可以通过下面的命令测试是否安装成功:

1
$ sudo netstat -tap | grep mysql
  • 在 Python 虚拟环境中安装 MySQL 依赖包
1
2
$ source cowrie-env/bin/activate
$ pip install mysqlclient mysql-python
  • 创建名为 cowrie 的数据库
1
2
$ mysql -u root -p
mysql> create database cowrie;
  • 创建一个给 Cowrie 访问数据库的用户
1
2
3
mysql> GRANT INSERT, SELECT, UPDATE ON cowrie.* TO 'cowrie'@'localhost' IDENTIFIED BY 'PASSWORD HERE';
mysql> FLUSH PRIVILEGES;
mysql> exit
  • 数据库和对应的数据库用户创建完成后,在数据库中导入初始数据的 SQL 语句
1
2
3
4
5
$ cd ~/cowrie/docs/sql/
$ mysql -u cowrie -p
mysql> USE cowrie;
mysql> source mysql.sql;
mysql> exit
  1. 在 Python 虚拟环境下启动蜜罐
1
2
3
(cowrie-env) $ bin/cowrie start
Activating virtualenv "cowrie-env"
Starting cowrie with extra arguments [] ...
  1. 修改 SSH 默认的监听端口

root 用户下将 Ubuntu 自身的 SSH 监听端口进行更改,并修改 Iptables 规则。

首先,我们验证下是否安装 SSH

1
2
$ ps -ef|grep sshd
root 2720 1 0 Nov 02 ? 00:00:00 /usr/sbin/sshd

如果输出结果和以上类似就证明已经安装,没有安装的话可以使用以下命令安装。

1
$ apt-get install openssh-server

安装完成后,我们可以修改 sshd_config 文件将默认端口改为一个较高的端口,这里为 51268 。

1
2
3
$ vim /etc/ssh/sshd_config
# Port 22
Port 51268

注意:一定不要与 cowrie.cfg 文件中监听的端口一致,否则进入 22 端口的流量就转发到真正的 SSH 服务端口,蜜罐就不起作用了。

  1. 配置 Iptables 进行端口转发

以上都配置好后,最后就是在 Iptables 中新增一条转发规则,将默认到 22 端口的请求转发到蜜罐中对应的端口。

1
2
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
$ iptables-save

除了使用 Iptables 外,你还可以在没有 Root 权限的条件下使用 AuthbindSetcap 将蜜罐绑定到一些特权端口上,以达到伪装一些正常服务的目的。具体方法可以参见官方文档如下部分:

  1. https://cowrie.readthedocs.io/en/latest/INSTALL.html#authbind

  2. https://cowrie.readthedocs.io/en/latest/INSTALL.html#setcap

使用 Docker 部署

上面讲解的通过源码安装,主要是为了演示 Cowrie 如何工作的,当然最方便的还是直接使用 Docker 部署。

1
2
$ docker run -p 2222:2222 cowrie/cowrie
$ ssh -p 2222 root@localhost

如上所示,只需一条指令,Cowrie 就部署完成了。剩下就只需要自己用 Iptables 进行端口转发就可以了。

Cowrie 日志分析

蜜罐系统的作用主要是用作实时记录和审计入侵者攻击行为和数据,所以最重要的还是事后的日志分析工作。

  1. 如果日志记录在文本文件,你可以使用下面的命令进行一些数据统计分析。
1
$ grep login /home/cowrie/cowrie/var/log/cowrie/audit.log | awk '{print $5}' | sort | uniq -c
  1. 如果日志记录在数据库,你可以通过下面的一些方式进行一些数据统计分析。
1
2
3
4
5
6
7
8
9
10
11
$ mysql -u cowrie -p
mysql> USE cowrie;
mysql> SELECT * FROM auth;
+----+--------------+---------+----------+-------------+---------------------+
| id | session | success | username | password | timestamp |
+----+--------------+---------+----------+-------------+---------------------+
| 1 | a551c0a74e06 | 0 | root | 12345 | 2019-09-27 23:15:56 |
| 2 | a551c0a74e06 | 0 | root | seiko2005 | 2019-09-27 23:15:58 |
| 3 | a551c0a74e06 | 0 | root | anko | 2019-09-27 23:15:59 |
| 4 | a551c0a74e06 | 0 | root | 123456 | 2019-09-27 23:16:00 |
| 5 | a551c0a74e06 | 0 | root | dreambox | 2019-09-27 23:16:01 |

当然上面只是举了一些简单的例子,更多高级玩法还等着你去探索哟!

其它

目前开源的蜜罐系统有很多,除了 Cowrie 以外,还有 KippoT-PotMHNSSH-Honeypot 等等。如果你对蜜罐系统很感兴趣,可以参考 GitHub 上以下两个开源项目。

  1. https://github.com/jwxa2015/honeypotcollection

  2. https://github.com/paralax/awesome-honeypots

至此,使用 Cowrie 快速构建一个蜜罐系统的基本方法就介绍完了。如果你对 Cowrie 非常的感兴趣,还可以去官网探索更多高级功能哟!

对于快速构建一个蜜罐系统,你还有哪些更好用高效的方法呢?欢迎大家在留言讨论哟!

参考文档

  1. https://www.google.com

  2. https://cowrie.readthedocs.io/en/latest/

  3. https://www.cnblogs.com/bmjoker/p/10156220.html

  4. https://www.cnblogs.com/HacTF/p/8094516.html

  5. https://klionsec.github.io/2017/10/19/cowrie/

  6. https://www.twblogs.net/a/5cb0b56bbd9eee48d788646c

  7. https://ama2in9.top/2019/03/12/cowrie/