#はじめに
これまでに多くのハニーポッターが記事として残していますが、Honeytrapを含めた記事が余りなかったので、せっかくなので記事にしてみました。
これをきっかけにハニーポットに興味を持ってもらえば、嬉しいです。
#注意事項
こちらの環境で動かし、確認しながら構築していますが、作成は自己責任でお願いします。
また、ハニーポットは多少なりともリスクがありますのでしっかりと日々監視を行い、何かあったら止められるように準備しておきましょう。
前提
SSHを有効化にした上で作業することをおすすめします。
#構築環境
今回、VPS上で以下のスペックでの動作を確認しています。
OS:Ubuntu 18.04 amd64
メモリ:512MB
SSD:25GB
#Docker および Docker Compose のインストール
DockerおよびDocker Composeをインストールします。
インストールの方法はGoogleで検索すれば、多数出てくると思いますのでお好きな方法でインストールをしてください。
今回は、以下のサイトを参考にしてインストールを行いました。
https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d
$ sudo apt-get update
$ sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
vim \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install -y docker-ce
$ sudo usermod -aG docker ubuntu
$ curl -L https://github.com/docker/compose/releases/download/1.25.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
次にWOWHoneypotおよびHoneytrapのDocker環境を構築します。
今回はホームディレクトリの直下にDockerフォルダを作成し、そこに必要なファイルを作成していきます。
まずは、各ハニーポットのフォルダを作成します。
$ mkdir ~/docker
$ mkdir ~/docker/wowhoneypot
$ mkdir ~/docker/wowhoneypotssl
$ mkdir ~/docker/honeytrap
#WOWHoneypotのDocker構築
WOWHoneypotのDocker構築に必要なファイルをダウンロードしていきます。
$ git clone https://github.com/morihisa/WOWHoneypot.git ~/docker/wowhoneypot
wowhoneypot配下に以下のDockerfileを作成します。
今回は以下のブログを参考にしています。
https://qiita.com/ohhara_shiojiri/items/069b8fc95cad799e86dc
FROM ubuntu:latest
ADD ./ /opt/wowhoneypot
RUN apt-get update \
&& apt-get install -y git python3 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /opt/wowhoneypot/
CMD ["python3", "wowhoneypot.py"]
#WOWHoneypot(SSL)のDocker構築
HTTPSに対応したWOWHoneypotの構築をしていきます。
今回は以下をブログを参考にさせて頂きました。
https://graneed.hatenablog.com/entry/2018/06/14/231740
まずは作成したWOWHoneypotの中身をコピーします。
cp -r ~/docker/wowhoneypot/* ~/docker/wowhoneypotssl/
次にwowhoneypot.pyを編集します。
以下に変更点を乗せておきます。
diff -u ~/docker/wowhoneypot/wowhoneypot.py ~/docker/wowhoneypotssl/wowhoneypot.py
--- /home/ubuntu/docker/wowhoneypot/wowhoneypot.py 2020-01-26 21:28:37.942184258 +0900
+++ /home/ubuntu/docker/wowhoneypotssl/wowhoneypot.py 2020-01-26 21:49:32.186195416 +0900
@@ -17,6 +17,7 @@
import socket
import select
import urllib.parse
+import ssl
from http.server import HTTPServer, BaseHTTPRequestHandler
from mrr_checker import parse_mrr
from datetime import datetime, timedelta, timezone
@@ -43,6 +44,9 @@
blacklist = {}
separator = " "
ipmasking = False
+ssl_enable = False
+certfilepath = ""
+hostport = 80
class WOWHoneypotHTTPServer(HTTPServer):
def server_bind(self):
@@ -191,8 +195,10 @@
hostname = self.headers["host"].split(" ")[0]
if hostname.find(":") == -1:
hostname = hostname + ":80"
+ hostname = hostname + ":" + hostport
else:
hostname = "blank:80"
+ hostname = "blank:" + hostport
request_all = self.requestline + "\n" + str(self.headers) + body
logging_access("[{time}]{s}{clientip}{s}{hostname}{s}\"{requestline}\"{s}{status_code}{s}{match_result}{s}{requestall}\n".format(
@@ -326,6 +332,13 @@
ipmasking = True
else:
ipmasking = False
+ if line.startswith("certfilepath"):
+ global ssl_enable,certfilepath
+ ssl_enable = True
+ certfilepath = line.split('=')[1].strip()
+ if line.startswith("hostport"):
+ global hostport
+ hostport = line.split('=')[1].strip()
global accesslogfile
accesslogfile = os.path.join(logpath, accesslogfile_name)
@@ -425,11 +438,15 @@
logging_system("WOWHoneypot(version {0}) start. {1}:{2} at {3}".format(WOWHONEYPOT_VERSION, ip, port, get_time()), False, False)
logging_system("Hunting: {0}".format(hunt_enable), False, False)
logging_system("IP Masking: {0}".format(ipmasking), False, False)
+ logging_system("SSL Enable: {0}".format(ssl_enable), False, False)
myServer = WOWHoneypotHTTPServer((ip, port), WOWHoneypotRequestHandler)
myServer.timeout = timeout
+ if ssl_enable:
+ myServer.socket = ssl.wrap_socket(myServer.socket, certfile=certfilepath, server_side=True)
try:
myServer.serve_forever()
except KeyboardInterrupt:
pass
myServer.server_close()
+
config.txtを以下のように修正します。
# default port: 8080
port=44333
# default server header: Apache
serverheader=Apache
# art directory path
artpath=./art/
# WOWHoneypot logfile path
logpath=./log/
# Access logfile path
accesslog=access_log
# Access log separator
separator=" "
# WOWHoneypot logfile name
wowhoneypotlog=wowhoneypot.log
# Syslog (Output facility: local0(16), priority: info, only tcp protocol)
syslog_enable=False
syslogserver=127.0.0.1
syslogport=514
# Hunting
hunt_enable=False
huntlog=hunting.log
# for GDPR(True: replace source ip address with 0.0.0.0)
ipmasking=False
# SSL certfile path
certfilepath=./server.pem
# default host header port: 80
hostport = 443
次に証明書ファイルを作成します。
$ openssl req -new -x509 -keyout ~/docker/wowhoneypotssl/server.pem -out ~/docker/wowhoneypotssl/server.pem -days 365 -nodes
これで、WOWHoneypot系のDockerの設定は完了です。
HoneytrapのDocker構築
コンフィグファイルの格納先であるディレクトリを作成します。
$ mkdir ~/docker/honeytrap/dist
作成したフォルダ内にコンフィグファイルを作成します。
/*
* honeytrap 1.0.1 configuration file template -- please adjust
* (c) Tillmann Werner <tillmann.werner@gmx.de>
*/
// log to this file
logfile = "/opt/honeytrap/var/log/honeytrap.log"
// store process ID in this file
pidfile = "/var/run/honeytrap.pid"
/* where to look for default responses
* these are sent for connections handled in "normal mode" */
response_dir = "/opt/honeytrap/etc/honeytrap/responses"
// replace rfc1918 IP addresses with attacking IP address
replace_private_ips = "no"
// bind dynamic servers to a specific address
//bind_address = "127.0.0.1"
/* put network interface into promiscuous mode
* (only availabel when compiled with --with-stream-mon=pcap) */
//promisc = "on"
/* the user and group under which honeytrap should run
* should be set to non-root */
user = "honeytrap"
group = "honeytrap"
// do not read more than 20 MB - used to prevent DoS attacks
read_limit = "20971520"
/* ----- plugin stuff below ----- */
/* where to look for plugins
needs to be set before loading plugins */
plugin_dir = "/opt/honeytrap/etc/honeytrap/plugins"
// include a plugin via plugin-[ModuleName] = ""
// plugin-magicPE = ""
plugin-ftpDownload = ""
plugin-tftpDownload = ""
plugin-b64Decode = ""
plugin-deUnicode = ""
plugin-vncDownload = ""
// store attacks on disk
plugin-SaveFile = {
attacks_dir = "/opt/honeytrap/var/attacks"
downloads_dir = "/opt/honeytrap/var/downloads"
}
// plugin for shellcode detection and emulation
/*
plugin-cpuEmu = {
execute_shellcode = "no"
createprocess_cmd = "/bin/sh -c \"cd /opt/honeytrap-libemu/.wine/drive_c/windows/system32; WINEPREFIX='/opt/honeytrap-libemu/.wine/' WINEDEBUG='-all' wine 'c:\\windows\\system32\\cmd_orig.exe'\""
}
*/
// scan downloaded samples with ClamAV engine
/*
plugin-ClamAV = {
temp_dir = "/tmp"
clamdb_path = "/var/lib/clamav"
}
*/
// calculate locality sensitive hashes
/*
plugin-SpamSum = {
md5sum_sigfile = "/opt/honeytrap/md5sum.sigs"
spamsum_sigfile = "/opt/honeytrap/spamsum.sigs"
}
*/
plugin-logAttacker = { logfile = "/opt/honeytrap/var/log/attacker.log" }
// log attack details in JSON format
plugin-logJSON = { logfile = "/opt/honeytrap/var/log/attackers.json" }
// store attacks in PostgeSQL database
/*
plugin-SavePostgres = {
db_host = "localhost"
db_name = "some_db"
db_user = "some_user"
db_pass = "some_pass"
// db_port = "some_port" // defaults to 5432/tcp if not set
}
*/
// invoke an external program (f.e. wget) to download files via http
/*
plugin-httpDownload = {
http_program = "/usr/bin/wget"
http_options = "-q -t1 -T1 -O-"
}
*/
// submit downloaded malware samples to the mwcollect alliance
/*
plugin-submitMWserv = {
mwserv_url = "https://submission-url/"
guid = "your-guid"
maintainer = "your-maintainer"
secret = "your-secret"
timeout = "120"
}
*/
/* ----- port mode configuration below ----- */
// default port configuration (ignore, normal or mirror)
// ignore: just ignore connection attempts
// normal: send a default response
// mirror: mirror connections back to the initiator (use with caution!)
portconf_default = "normal"
// explicit port configuration
/* portconf = {
// ignore connection requests on these ports
ignore = {
protocol = "tcp"
port = "22"
}
}
*/
// include a file
//include = "ports.conf"
次に、以下のDockerfileを作成します。
FROM debian:stretch-slim
ENV DEBIAN_FRONTEND noninteractive
#
# Include dist
ADD dist/ /root/dist/
#
# Setup apt
RUN apt-get update -y && \
apt-get dist-upgrade -y && \
#
# Install packages
apt-get install -y autoconf \
build-essential \
git \
iptables \
libcap2 \
libcap2-bin \
libnetfilter-queue1 \
libnetfilter-queue-dev \
libjson-c-dev \
libtool \
libpq5 \
libpq-dev \
netbase \
procps \
wget && \
#
# Install honeytrap from source
cd /root/ && \
git clone https://github.com/armedpot/honeytrap && \
cd /root/honeytrap/ && \
autoreconf -vfi && \
./configure \
--with-stream-mon=nfq \
--with-logattacker \
--with-logjson \
--prefix=/opt/honeytrap && \
make && \
make install && \
make clean && \
#
# Setup user, groups and configs
addgroup --gid 2000 honeytrap && \
adduser --system --no-create-home --shell /bin/bash --uid 2000 --disabled-password --disabled-login --gid 2000 honeytrap && \
mkdir -p /opt/honeytrap/etc/honeytrap/ /opt/honeytrap/var/attacks /opt/honeytrap/var/downloads /opt/honeytrap/var/log && \
# touch /opt/honeytrap/var/log/honeytrap.log && \
# chmod -R 755 /opt/honeytrap/ && \
# chown -R honeytrap:honeytrap /opt/honeytrap/ && \
mv /root/dist/honeytrap.conf /opt/honeytrap/etc/honeytrap/ && \
setcap cap_net_admin=+ep /opt/honeytrap/sbin/honeytrap && \
#
# Clean up
rm -rf /root/* && \
apt-get purge -y autoconf \
build-essential \
git \
libnetfilter-queue-dev \
libpq-dev && \
apt-get autoremove -y --purge && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
#
# Start honeytrap
USER root:root
CMD ["/opt/honeytrap/sbin/honeytrap", "-D", "-C", "/opt/honeytrap/etc/honeytrap/honeytrap.conf", "-P", "/tmp/honeytrap/honeytrap.pid", "-t", "5", "-u", "root", "-g", "root"]
これでDockerに必要なファイルは作成終了です。
docker-composeの実行
まずはlogファイルを格納するフォルダを作成します。
$ mkdir ~/docker/log
次にdocker-compose.ymlを作成します。
version: '2.3'
services:
# Honeytrap service
honeytrap:
build: ./honeytrap/
container_name: honeytrap
restart: always
tmpfs:
- /tmp/honeytrap:uid=2000,gid=2000
network_mode: "host"
cap_add:
- NET_ADMIN
image: "honeytrap:1.0"
read_only: true
volumes:
- ./log/honeytrap/attacks:/opt/honeytrap/var/attacks
- ./log/honeytrap/downloads:/opt/honeytrap/var/downloads
- ./log/honeytrap/log:/opt/honeytrap/var/log
wowhoneypot:
build: ./wowhoneypot/
container_name: wowhoneypot
restart: always
image: "wowhoneypot:1.0"
ports:
- 80:8080
volumes:
- ./log/wowhoneypot:/opt/wowhoneypot/log
wowhoneypotssl:
build: ./wowhoneypotssl/
container_name: wowhoneypotssl
restart: always
image: "wowhoneypotssl:1.0"
ports:
- 443:44333
volumes:
- ./log/wowhoneypotssl:/opt/wowhoneypot/log
iptablesの設定
Honeypotに必要なiptableの設定をしていきます。
今回は例としてSSHを22ポートにしていますが、こちらは自分で設定したSSHのポート番号に設定してください。
$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --syn -m state --state NEW -j NFQUEUE
次にiptablesの設定を保存ため、iptables-persistent をインストールします。
$ sudo apt install -y iptables-persistent
Honeypotの起動
最後にDocker用に準備したハニーポットを動かします。
権限を有効にするため、一度 rebootを行います。
$ sudo reboot
念の為、iptablesの設定が有効であるか確認します。
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
NFQUEUE tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN state NEW NFQUEUE num 0
iptablesに問題がなければ、Dockerを起動させます。
$ cd ~/docker/
$ docker-compose build
$ docker-compose up
docker-compose up コマンドで特にエラーがないか確認し、問題がなければ、Ctrl+Cで終了します。
次に各ログが正常に動いているか確認します。
ログに何かしらの書き込みがあれば、正常に動いています。
$ less ~/docker/log/honeytrap/log/attackers.json
$ less ~/docker/log/wowhoneypot/access_log
$ less ~/docker/log/wowhoneypotssl/access_log
最後に docker-compose をバックグラウンドで実行します。
$ docker-compose up -d
これにて、ハニーポットの構築完了です。
#補足
死活監視ですが、ハニーポットから以下のサイトを教えてもらいました。ハニーポットはよく落ちたりするので登録しておくと便利です。
https://uptimerobot.com/
以上となります。