mirror of
https://github.com/cowrie/cowrie.git
synced 2025-07-01 18:07:27 -04:00
On Debian, using Supervisord, adding -n to the start command is the correct step. The bin/cowrie script is no longer meant to be edited and DAEMONIZE no longer works if you edit it.
282 lines
9.4 KiB
ReStructuredText
282 lines
9.4 KiB
ReStructuredText
Installing Cowrie in seven steps
|
|
################################
|
|
|
|
This guide describes how to install Cowrie in ``shell`` mode. For ``proxy`` mode
|
|
read `PROXY.rst`.
|
|
|
|
* :ref:`Step 1: Install system dependencies<Step 1: Install system dependencies>`
|
|
* :ref:`Step 2: Create a user account<Step 2: Create a user account>`
|
|
* :ref:`Step 3: Checkout the code<Step 3: Checkout the code>`
|
|
* :ref:`Step 4: Setup Virtual Environment<Step 4: Setup Virtual Environment>`
|
|
* :ref:`Step 5: Install configuration file<Step 5: Install configuration file>`
|
|
* :ref:`Step 6: Starting Cowrie<Step 6: Starting Cowrie>`
|
|
* :ref:`Step 7: Listening on port 22 (OPTIONAL)<Step 7: Listening on port 22 (OPTIONAL)>`
|
|
* :ref:`Installing Backend Pool dependencies (OPTIONAL)<Installing Backend Pool dependencies (OPTIONAL)>`
|
|
* :ref:`Running using supervisord (OPTIONAL)<Running using supervisord (OPTIONAL)>`
|
|
* :ref:`Configure Additional Output Plugins (OPTIONAL)<Configure Additional Output Plugins (OPTIONAL)>`
|
|
* :ref:`Troubleshooting<Troubleshooting>`
|
|
* :ref:`Updating Cowrie<Updating Cowrie>`
|
|
* :ref:`Modifying Cowrie<Modifying Cowrie>`
|
|
|
|
Step 1: Install system dependencies
|
|
***********************************
|
|
|
|
First we install system-wide support for Python virtual environments and other dependencies.
|
|
Actual Python packages are installed later.
|
|
|
|
On Debian based systems (last verified on Debian 10, 2021-04-29)::
|
|
|
|
$ sudo apt-get install git python3-virtualenv libssl-dev libffi-dev build-essential libpython3-dev python3-minimal authbind virtualenv
|
|
|
|
Step 2: Create a user account
|
|
*****************************
|
|
|
|
It's strongly recommended to run with a dedicated non-root user id::
|
|
|
|
$ 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
|
|
|
|
Step 3: Checkout the code
|
|
*************************
|
|
|
|
Check out the code::
|
|
|
|
$ git clone http://github.com/cowrie/cowrie
|
|
Cloning into 'cowrie'...
|
|
remote: Counting objects: 2965, done.
|
|
remote: Compressing objects: 100% (1025/1025), done.
|
|
remote: Total 2965 (delta 1908), reused 2962 (delta 1905), pack-reused 0
|
|
Receiving objects: 100% (2965/2965), 3.41 MiB | 2.57 MiB/s, done.
|
|
Resolving deltas: 100% (1908/1908), done.
|
|
Checking connectivity... done.
|
|
|
|
$ cd cowrie
|
|
|
|
Step 4: Setup Virtual Environment
|
|
*********************************
|
|
|
|
Next you need to create your virtual environment::
|
|
|
|
$ pwd
|
|
/home/cowrie/cowrie
|
|
$ python -m venv cowrie-env
|
|
New python executable in ./cowrie/cowrie-env/bin/python
|
|
Installing setuptools, pip, wheel...done.
|
|
|
|
Activate the virtual environment and install packages::
|
|
|
|
$ source cowrie-env/bin/activate
|
|
(cowrie-env) $ python -m pip install --upgrade pip
|
|
(cowrie-env) $ python -m pip install --upgrade -r requirements.txt
|
|
|
|
Step 5: Install configuration file
|
|
**********************************
|
|
|
|
The configuration for Cowrie is stored in cowrie.cfg.dist and
|
|
cowrie.cfg (Located in cowrie/etc). Both files are read on startup, where entries from
|
|
cowrie.cfg take precedence. The .dist file can be overwritten by
|
|
upgrades, cowrie.cfg will not be touched. To run with a standard
|
|
configuration, there is no need to change anything. To enable telnet,
|
|
for example, create cowrie.cfg and input only the following::
|
|
|
|
[telnet]
|
|
enabled = true
|
|
|
|
Step 6: Starting Cowrie
|
|
***********************
|
|
|
|
Start Cowrie with the cowrie command. You can add the cowrie/bin
|
|
directory to your path if desired. An existing virtual environment
|
|
is preserved if activated, otherwise Cowrie will attempt to load
|
|
the environment called "cowrie-env"::
|
|
|
|
|
|
$ bin/cowrie start
|
|
Activating virtualenv "cowrie-env"
|
|
Starting cowrie with extra arguments [] ...
|
|
|
|
Step 7: Listening on port 22 (OPTIONAL)
|
|
***************************************
|
|
|
|
There are three methods to make Cowrie accessible on the default SSH port (22): `iptables`, `authbind` and `setcap`.
|
|
|
|
Iptables
|
|
========
|
|
|
|
Port redirection commands are system-wide and need to be executed as root.
|
|
A firewall redirect can make your existing SSH server unreachable, remember to move the existing
|
|
server to a different port number first.
|
|
|
|
The following firewall rule will forward incoming traffic on port 22 to port 2222 on Linux::
|
|
|
|
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
|
|
|
|
Or for telnet::
|
|
|
|
$ sudo iptables -t nat -A PREROUTING -p tcp --dport 23 -j REDIRECT --to-port 2223
|
|
|
|
Note that you should test this rule only from another host; it doesn't apply to loopback connections.
|
|
|
|
On MacOS run::
|
|
|
|
$ echo "rdr pass inet proto tcp from any to any port 22 -> 127.0.0.1 port 2222" | sudo pfctl -ef -
|
|
|
|
Authbind
|
|
========
|
|
|
|
Alternatively you can run authbind to listen as non-root on port 22 directly::
|
|
|
|
$ sudo apt-get install authbind
|
|
$ sudo touch /etc/authbind/byport/22
|
|
$ sudo chown cowrie:cowrie /etc/authbind/byport/22
|
|
$ sudo chmod 770 /etc/authbind/byport/22
|
|
|
|
Edit bin/cowrie and modify the AUTHBIND_ENABLED setting
|
|
|
|
Change the listening port to 22 in cowrie.cfg::
|
|
|
|
[ssh]
|
|
listen_endpoints = tcp:22:interface=0.0.0.0
|
|
|
|
Or for telnet::
|
|
|
|
$ apt-get install authbind
|
|
$ sudo touch /etc/authbind/byport/23
|
|
$ sudo chown cowrie:cowrie /etc/authbind/byport/23
|
|
$ sudo chmod 770 /etc/authbind/byport/23
|
|
|
|
Change the listening port to 23 in cowrie.cfg::
|
|
|
|
[telnet]
|
|
listen_endpoints = tcp:2223:interface=0.0.0.0
|
|
|
|
Setcap
|
|
======
|
|
|
|
Or use setcap to give permissions to Python to listen on ports<1024::
|
|
|
|
$ setcap cap_net_bind_service=+ep /usr/bin/python3
|
|
|
|
And change the listening ports in ``cowrie.cfg`` as above.
|
|
|
|
|
|
Installing Backend Pool dependencies (OPTIONAL)
|
|
***********************************************
|
|
|
|
If you want to use the proxy functionality combined with the automatic
|
|
backend pool, you need to install some dependencies, namely QEMU, libvirt,
|
|
and their Python interface. In Debian/Ubuntu::
|
|
|
|
$ sudo apt-get install qemu qemu-system-arm qemu-system-x86 libvirt-dev libvirt-daemon libvirt-daemon-system libvirt-clients nmap
|
|
|
|
Then install the Python API to run the backend pool::
|
|
|
|
(cowrie-env) $ python -m pip install libvirt-python==6.4.0
|
|
|
|
To allow QEMU to use disk images and snapshots, set it to run with the user and group of the user running the pool
|
|
(usually called 'cowrie' too::
|
|
|
|
$ sudo vim /etc/libvirt/qemu.conf
|
|
|
|
Search and set both `user` and `group` to `"cowrie"`, or the username/group you'll be running the backend pool with.
|
|
|
|
Running using Supervisord (OPTIONAL)
|
|
************************************
|
|
|
|
On Debian, put the below in /etc/supervisor/conf.d/cowrie.conf::
|
|
|
|
[program:cowrie]
|
|
command=/home/cowrie/cowrie/bin/cowrie start -n
|
|
directory=/home/cowrie/cowrie/
|
|
user=cowrie
|
|
autorestart=true
|
|
redirect_stderr=true
|
|
|
|
Configure Additional Output Plugins (OPTIONAL)
|
|
**********************************************
|
|
|
|
Cowrie automatically outputs event data to text and JSON log files
|
|
in ``var/log/cowrie``. Additional output plugins can be configured to
|
|
record the data other ways. Supported output plugins include:
|
|
|
|
* Cuckoo
|
|
* ELK (Elastic) Stack
|
|
* Graylog
|
|
* Kippo-Graph
|
|
* Splunk
|
|
* SQL (MySQL, SQLite3, RethinkDB)
|
|
|
|
See ~/cowrie/docs/[Output Plugin]/README.rst for details.
|
|
|
|
|
|
Troubleshooting
|
|
***************
|
|
|
|
CryptographyDeprecationWarning: Blowfish has been deprecated
|
|
============================================================
|
|
|
|
The following warnings may occur, these can be safely ignored, and
|
|
are not the reason your Cowrie installation is not working::
|
|
|
|
CryptographyDeprecationWarning: Blowfish has been deprecated b"blowfish-cbc": (algorithms.Blowfish, 16, modes.CBC),
|
|
CryptographyDeprecationWarning: CAST5 has been deprecated b"cast128-cbc": (algorithms.CAST5, 16, modes.CBC),
|
|
CryptographyDeprecationWarning: Blowfish has been deprecated b"blowfish-ctr": (algorithms.Blowfish, 16, modes.CTR),
|
|
CryptographyDeprecationWarning: CAST5 has been deprecated b"cast128-ctr": (algorithms.CAST5, 16, modes.CTR),
|
|
|
|
The algorithms are used in Cowrie to support old attackers that use
|
|
these deprecated algorithms.
|
|
|
|
twistd: unknown command: cowrie
|
|
===============================
|
|
|
|
If you see ``twistd: Unknown command: cowrie`` there are two
|
|
possibilities. If there's a Python stack trace, it probably means
|
|
there's a missing or broken dependency. If there's no stack trace,
|
|
double check that your PYTHONPATH is set to the source code directory.
|
|
|
|
Default file permissions
|
|
========================
|
|
|
|
To make Cowrie logfiles public readable, change the ``--umask 0077``
|
|
option in ``bin/cowrie`` into ``--umask 0022``
|
|
|
|
General approach
|
|
================
|
|
|
|
Check the log file in ``var/log/cowrie/cowrie.log``.
|
|
|
|
Updating Cowrie
|
|
***************
|
|
|
|
First stop your honeypot. Then pull updates from GitHub, and upgrade your Python dependencies::
|
|
|
|
$ bin/cowrie stop
|
|
$ git pull
|
|
$ python -m pip install --upgrade -r requirements.txt
|
|
|
|
If you use output plugins like SQL, Splunk, or ELK, remember to also upgrade your dependencies for these too::
|
|
|
|
$ python -m pip install --upgrade -r requirements-output.txt
|
|
|
|
And finally, restart Cowrie after finishing all updates::
|
|
|
|
$ bin/cowrie start
|
|
|
|
Modifying Cowrie
|
|
****************
|
|
|
|
The pre-login banner can be set by creating the file ``honeyfs/etc/issue.net``.
|
|
The post-login banner can be customized by editing ``honeyfs/etc/motd``.
|