蜜罐其实就是一台无人使用但却被严密监控的网络主机,里面包含着各类虚假的高价值资源和一些已知漏洞,以此吸引入侵者来入侵该主机。并且在被入侵的过程中,实时记录和审计入侵者的所有入侵攻击流量、行为和数据。以此了解入侵者的攻击方式、手段和目的,便于后期快速完成对其的溯源和取证工作。
蜜罐的一些主要构成模块
1. 低交互蜜罐
低交互蜜罐最大的特点是:蜜罐为攻击者展示的所有攻击弱点和攻击对象都不是真正的产品系统,而是对各种系统及其提供的服务的模拟。由于它的服务都是模拟的行为,所以蜜罐可以获得的信息非常有限,只能对攻击者进行简单的应答。不过,它也是最安全的蜜罐类型。
2. 中交互蜜罐
中交互蜜罐是对真正的操作系统的各种行为的模拟,它提供了更多的交互信息,同时也可以从攻击者的行为中获得更多的信息。在这个模拟行为的系统中,蜜罐此时看起来和一个真正的操作系统没有区别,它们甚至是比真正系统还诱人的攻击目标。
3. 高交互蜜罐
高交互蜜罐具有一个真实的操作系统,它的优点体现在对攻击者提供完全真实的系统。当攻击者获得 ROOT 权限后,受系统、数据真实性的迷惑,他的更多活动和行为将被记录下来。缺点是被入侵的可能性很高,如果整个高交互蜜罐被入侵,那么它就会成为攻击者下一步攻击的跳板,不太安全。
Cowrie
是一个具有中等交互的 SSH
蜜罐,它可以获取攻击者用于暴力破解的字典、输入的命令以及上传或下载的恶意文件。所有这些攻击记录都会被记载到日志中,以便日后分析。
项目地址:https://github.com/cowrie/cowrie
本次搭建使用的基础环境是 Ubuntu
,以下步骤除切换到虚拟环境中的操作,其它均为 root 权限执行。
# 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
对外提供服务的程序均以普通用户身份运行,能更好的保证服务器安全性。
$ 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
是采用 Python
开发,为了方便管理和安全,我们就直接将 Cowire
部署到 Python
的虚拟环境中。
$ cd /home/cowrie/
$ git clone https://github.com/cowrie/cowrie.git
Cowrie
所在目录,并安装虚拟环境
$ cd /home/cowrie/cowrie
$ virtualenv --python=python3 cowrie-env
New python executable in ./cowrie/cowrie-env/bin/python
Installing setuptools, pip, wheel...done.
$ virtualenv --python=python2 cowrie-env
New python executable in ./cowrie/cowrie-env/bin/python
Installing setuptools, pip, wheel...done.
$ source cowrie-env/bin/activate
(cowrie-env) $ pip install --upgrade pip
(cowrie-env) $ pip install --upgrade -r requirements.txt
(cowrie-env) $ cd etc/
(cowrie-env) $ cp cowrie.cfg.dist cowrie.cfg
(cowrie-env) $ vi cowrie.cfg
[ssh]
# Enable SSH support
# (default: true)
enabled = true
listen_endpoints = tcp:2222:interface=0.0.0.0
默认情况下,Cowire
支持将日志输出到多个接收终端中。比如:文件文件、Cucko
o、ELK Stack
、Graylog
、Kippo-Graph
、Splunk
、SQL
(MySQL
、SQLite3
、RethinkDB
) 等等中。这里我们就来说说最常用的文本文件和 MySQL
数据库:
# 保存在文本文件中,需要配置以下一些内容。
[output_textlog]
enabled = true
logfile = ${honeypot:log_path}/audit.log
format = text
# 保存在数据库中,需要配置以下一些内容。
[output_mysql]
host = localhost
database = cowrie
username = cowrie
password = PASSWORD HERE
port = 3306
debug = false
enabled = true
如果是需要保存在 MySQL
数据库中,当然只配置是不行的,你还得需要有一个对应的数据库。如果你没有,可以按下面的步骤进行安装。
$ sudo apt-get install mysql-server mysql-client libmysqlclient-dev python-mysqldb
安装成功后,你可以通过下面的命令测试是否安装成功。
$ sudo netstat -tap | grep mysql
$ source cowrie-env/bin/activate
$ pip install mysqlclient mysql-python
$ mysql -u root -p
mysql> create database cowrie;
mysql> GRANT INSERT, SELECT, UPDATE ON cowrie.* TO 'cowrie'@'localhost' IDENTIFIED BY 'PASSWORD HERE';
mysql> FLUSH PRIVILEGES;
mysql> exit
$ cd ~/cowrie/docs/sql/
$ mysql -u cowrie -p
mysql> USE cowrie;
mysql> source mysql.sql;
mysql> exit
(cowrie-env) $ bin/cowrie start
Activating virtualenv "cowrie-env"
Starting cowrie with extra arguments [] ...
在 root
用户下将 Ubuntu
自身的 SSH
监听端口进行更改,并修改 Iptables
规则。
首先,我们验证下是否安装 SSH
。
$ ps -ef|grep sshd
root 2720 1 0 Nov 02 ? 00:00:00 /usr/sbin/sshd
如果输出结果和以上类似就证明已经安装,没有安装的话可以使用以下命令安装。
$ apt-get install openssh-server
安装完成后,我们可以修改 sshd_config
文件将默认端口改为一个较高的端口,这里为 51268 。
$ vim /etc/ssh/sshd_config
# Port 22
Port 51268
注意:一定不要与
cowrie.cfg
文件中监听的端口一致,否则进入22
端口的流量就转发到真正的SSH
服务端口,蜜罐就不起作用了。
以上都配置好后,最后就是在 Iptables
中新增一条转发规则,将默认到 22
端口的请求转发到蜜罐中对应的端口。
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
$ iptables-save
除了使用 Iptables
外,你还可以在没有 Root
权限的条件下使用 Authbind
或 Setcap
将蜜罐绑定到一些特权端口上,以达到伪装一些正常服务的目的。具体方法可以参见官方文档如下部分:
上面讲解的通过源码安装,主要是为了演示 Cowrie
如何工作的,当然最方便的还是直接使用 Docker
部署。
$ docker run -p 2222:2222 cowrie/cowrie
$ ssh -p 2222 root@localhost
如上所示,只需一条指令,Cowrie
就部署完成了。剩下就只需要自己用 Iptables
进行端口转发就可以了。
蜜罐系统的作用主要是用作实时记录和审计入侵者攻击行为和数据,所以最重要的还是事后的日志分析工作。
$ grep login /home/cowrie/cowrie/var/log/cowrie/audit.log | awk '{print $5}' | sort | uniq -c
$ 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
以外,还有 Kippo
、T-Pot
、MHN
、SSH-Honeypot
等等。如果你对蜜罐系统很感兴趣,可以参考 GitHub
上以下两个开源项目。
至此,使用 Cowrie
快速构建一个蜜罐系统的基本方法就介绍完了。如果你对 Cowrie
非常的感兴趣,还可以去官网探索更多高级功能哟!
对于快速构建一个蜜罐系统,你还有哪些更好用高效的方法呢?欢迎大家在留言讨论哟!