ハニーポットプロジェクト

弛まずHackを続けるサイバー空間 LdLuS へようこそ

更新日:2024/04/21

ハニーポットプロジェクト

こちらは2016年から数年間実施していたハニーポットに関する内容となります。現在では古くなってしまった情報が多いため、考え方だけ理解していただければと思います。

目的

  1. 攻撃者の操作を見ることで、どうやって攻撃しているのかを学ぶ
  2. 世の中のハニーポットで何ができるのかを知る

方針

少し前の資料じゃが、IPAの出しているサマリーと、その元ネタのドキュメントが以下じゃ。 数は多くあれど、まだまだ整備が進んでいるとは言えないレベルみたいじゃのう。 まず、おさえておくべきポイントは、ハニーポットにもいろいろ種類があることじゃな。軸が2種類あって、
  • 高インタラクション OR 低インタラクション
  • サーバサイド OR クライアントサイド
の組み合わせで4種類に大別される。
インタラクションの高低は、ハニーポットをエミュレータとして実現するものが低い方で、リアルなリソースを相手にするのが高い方らしい。高い方は事故るとやばいのう。攻撃されて乗っ取られると、OSレベルで再インストールしないと安心できなくなってしまう。低い方は基本的にアプリケーションレベルに閉じられるので、まだ気が楽じゃな。
サイドについては、まあサーバの方はハニーポットと聞いて頭に描くものがそれじゃろう。クライアントの方は、ブラウザの通信に関するハニーポットのイメージ。プロキシツールとどう違うのか、イマイチまだ見えとらん。
この4種類の中で最もアプリケーションの数が多いのが、低インタラクションなサーバサイドのもの。今回はまず、この低インタラサーバなアプリケーションをいくつかセットアップすることにするぞい。

構築ロードマップ

  • HoneyPotの選定
  • サーバおよびOSの選定
  • サーバ構築
  • HoneyPot構築

運用としてすべきこと

  • HoneyPotで捕まえた情報の見方を習得する
  • 定期的に捕まえた情報をチェックし解析する
  • 定期的にサーバが攻撃されていないかチェックする

HoneyPotの選定

冒頭の英語のドキュメントを紐解きつつ、以下のハニーポットをセットアップすることにしたぞい。このドキュメントの11ページ目に、アプリケーションごとの比較表が掲載されておるんじゃが、一番右の列「USEFULNESS FOR CERT」の評価が高いものを選んだ格好になっておる。なお、cowrieにしたのはこのへんにkippoの弱点が紹介されておったからじゃ。
  • Dionaea:汎用型ハニーポット
  • cowrie:sshのハニーポット(kippoの後継)
  • Glastopf:Webサーバのハニーポット

構築

dionaeaインストール

【本家dionaeaサイト】
http://www.edgis-security.org/honeypot/dionaea/
情報が古いので、gitのURLがつながらない
【git掲載のインストール手順】
https://gist.github.com/ytn86/7bc4130aca64ce77d1d6
こっちならいけた
事前準備
# apt-get update
# apt-get install aptitude
# apt-get install man
Dependencies
# aptitude install libudns-dev libglib2.0-dev libssl-dev libcurl4-openssl-dev libreadline-dev libsqlite3-dev python-dev libtool automake autoconf build-essential subversion git-core flex bison pkg-config
Obtain Dionaea
# cd /opt/
# git clone https://github.com/rep/dionaea.git dionaea
Install LibLCfg
# git clone https://github.com/pb-/liblcfg.git liblcfg
# cd liblcfg/code
# autoreconf -vi
# ./configure -prefix=/opt/dionaea
# make install
Install LibEmu
# cd /opt
# git clone https://github.com/cperdana/libemu.git libemu
# cd libemu
# autoreconf -vi
# find ./ -type f | xargs sed -i "s/-Werror//g"
# ./configure -prefix=/opt/dionaea
# make
# make install
Install LibEv
# cd /opt/
# wget http://dist.schmorp.de/libev/Attic/libev-4.04.tar.gz
# tar -xvzf libev-4.04.tar.gz
# cd libev-4.04
# ./configure -prefix=/opt/dionaea
# make install
Install LibPcap
# cd /opt/
# wget http://www.tcpdump.org/release/libpcap-1.1.1.tar.gz
# tar -xvzf libpcap-1.1.1.tar.gz
# cd libpcap-1.1.1
# ./configure -prefix=/opt/dionaea
# make
# make install
Install Python 3.4.3
# cd /opt/
# wget http://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz
# tar xzf Python-3.4.3.tgz
# cd Python-3.4.3
# ./configure --enable-shared -prefix=/opt/dionaea --with-computed-gotos -enable-ipv6 LDFLAGS="-Wl,-rpath=/opt/dionaea/lib -L/usr/lib/x86_64-linux-gnu/"
# make
# make install
Install Cython
# cd /opt/
# wget https://pypi.python.org/packages/c6/fe/97319581905de40f1be7015a0ea1bd336a756f6249914b148a17eefa75dc/Cython-0.24.1.tar.gz#md5=890b494a12951f1d6228c416a5789554
# tar xzf Cython-0.24.1.tar.gz
# cd Cython-0.24.1
# /opt/dionaea/bin/python3 setup.py install
Opensslのインストール
# cd /opt/
# wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_1p.tar.gz
# tar xzf OpenSSL_1_0_1p.tar.gz
# cd openssl-OpenSSL_1_0_1p
# ./Configure shared --prefix=/opt/dionaea linux-x86_64
# make
# make install
Install Dionaea
# cd /opt/dionaea
# autoreconf -vi
# find ./ -type f | xargs sed -i "s/-Werror//g"
# ./configure --with-lcfg-include=/opt/dionaea/include/ \
      --with-lcfg-lib=/opt/dionaea/lib/ \
      --with-python=/opt/dionaea/bin/python3.4 \
      --with-cython-dir=/opt/dionaea/bin \
      --with-udns-include=/opt/dionaea/include/ \
      --with-udns-lib=/opt/dionaea/lib/ \
      --with-emu-include=/opt/dionaea/include/ \
      --with-emu-lib=/opt/dionaea/lib/ \
      --with-gc-include=/usr/include/gc \
      --with-ev-include=/opt/dionaea/include \
      --with-ev-lib=/opt/dionaea/lib \
      --with-nl-include=/opt/dionaea/include \
      --with-nl-lib=/opt/dionaea/lib/ \
      --with-curl-config=/usr/bin/ \
      --with-pcap-include=/opt/dionaea/include \
      --with-pcap-lib=/opt/dionaea/lib/ \
      --with-ssl-include=/opt/dionaea/include/ \
      --with-ssl-lib=/opt/dionaea/lib/
# make
# make install
これでインストール完了。 コマンドを実行して、動作するか確認してみる。
root@v9723:/opt/dionaea# /opt/dionaea/bin/dionaea --help

Dionaea Version 0.1.0
Compiled on Linux/x86_64 at Jul 24 2016 02:14:42 with gcc 4.8.4
Started on v9723.vir.kagoya.net running Linux/x86_64 release 2.6.32-042stab113.17


Dionaea Version 0.1.0
Compiled on Linux/x86_64 at Jul 24 2016 02:14:42 with gcc 4.8.4
Started on v9723.vir.kagoya.net running Linux/x86_64 release 2.6.32-042stab113.17

  -c, --config=FILE               use FILE as configuration file
  -D, --daemonize                 run as daemon
  -g, --group=GROUP               switch to GROUP after startup (use with -u)
  -h, --help                      display help
  -H, --large-help                display help with default values
  -l, --log-levels=WHAT           which levels to log, valid values all, debug, info, message, warning, critical, error, combine using ',', exclude with - prefix
  -L, --log-domains=WHAT          which domains use * and ? wildcards, combine using ',', exclude using -
  -u, --user=USER                 switch to USER after startup
  -p, --pid-file=FILE             write pid to file
  -r, --chroot=DIR                chroot to DIR after startup, warning: chrooting causes problems with logsql/sqlite
  -V, --version                   show version
  -w, --workingdir=DIR            set the process' working dir to DIR


examples:
        # dionaea -l all,-debug -L '*'
        # dionaea -l all,-debug -L 'con*,py*'
        # dionaea -u nobody -g nogroup -w /opt/dionaea -p /opt/dionaea/var/run/dionaea.pid

root@v9723:/opt/dionaea#
dionaeaの設定ファイルの場所(特に変更はしない)
oot@v9723:/opt/dionaea/etc/dionaea# pwd
/opt/dionaea/etc/dionaea
root@v9723:/opt/dionaea/etc/dionaea# ll
合計 40
drwxr-xr-x 2 root root  4096  7月 24 02:14 ./
drwxr-xr-x 3 root root  4096  7月 24 02:14 ../
-rw-r--r-- 1 root root 14033  7月 24 02:14 dionaea.conf
-rw-r--r-- 1 root root 14033  7月 24 02:14 dionaea.conf.dist
root@v9723:/opt/dionaea/etc/dionaea#

dionaeaの起動

2016/07/24 02:34:26 開始!
以下だとターミナルを立ち上げっぱなしにしないといけないので、-Dオプションをつけるとデーモンとして実行してくれる。
root@v9723:~# /opt/dionaea/bin/dionaea -r /opt/dionaea

Dionaea Version 0.1.0
Compiled on Linux/x86_64 at Jul 24 2016 02:14:42 with gcc 4.8.4
Started on v9723.vir.kagoya.net running Linux/x86_64 release 2.6.32-042stab113.17

python
  sys_path
    0 = "default"
  imports
    0 = "log"
    1 = "services"
    2 = "ihandlers"
  ftp
    root = "var/dionaea/wwwroot"
    active-ports = "63001-64000"
    active-host = "0.0.0.0"
  tftp
    root = "var/dionaea/wwwroot"
  http
    root = "var/dionaea/wwwroot"
    max-request-size = "32768"
  sip
    udp
      port = "5060"
    tcp
      port = "5060"
    tls
      port = "5061"
    users = "var/dionaea/sipaccounts.sqlite"
    rtp
      enable = "yes"
      mode
        0 = "bistream"
        1 = "pcap"
      pcap
        path = "var/dionaea/rtp/{personality}/%Y-%m-%d/"
        filename = "%H:%M:%S_{remote_host}_{remote_port}_in.pcap"
    personalities
      default
        domain = "localhost"
        name = "softphone"
        personality = "generic"
    actions
      bank-redirect
        do = "redirect"
      play-hello
        do = "play"
        params
          file = "var/dionaea/.../file.ext"
  surfids
    sslmode = "require"
    host = "surfids.example.com"
    port = "5432"
    username = "surfids"
    password = "secret"
    dbname = "idsserver"
  virustotal
    apikey = "........."
    file = "var/dionaea/vtcache.sqlite"
  mwserv
    url = ""
    maintainer = ""
    guid = ""
    secret = ""
  mysql
    databases
      information_schema
        path = ":memory:"
  submit_http
    url = ""
    email = ""
    user = ""
    pass = ""
  hpfeeds
    hp1
      server = "hpfriends.honeycloud.net"
      port = "10000"
      ident = ""
      secret = ""
      dynip_resolve = "http://hpfriends.honeycloud.net/ip"
  logsql
    mode = "sqlite"
    sqlite
      file = "var/dionaea/logsql.sqlite"
  logxmpp
    carnivore
      server = "sensors.carnivore.it"
      port = "5223"
      muc = "dionaea.sensors.carnivore.it"
      username = "anonymous@sensors.carnivore.it"
      password = "anonymous"
      config
        anon-events
          events
            0 = "^dionaea\.connection\..*"
            1 = "^dionaea\.modules\.python\.smb.dcerpc\.*"
            2 = "^dionaea\.download\.offer$"
            3 = "^dionaea\.download\.complete\.hash$"
            4 = "^dionaea\.module\.emu\.profile$"
            5 = "^dionaea\.modules\.python\.mysql\.*"
            6 = "^dionaea\.modules\.python\.sip\.*"
            7 = "^dionaea\.modules\.python\.p0f\.*"
            8 = "^dionaea\.modules\.python\.virustotal\report"
          anonymous = "yes"
        anon-files
          events
            0 = "^dionaea\.download\.complete\.unique"
  nfq
    nfaction = "0"
    throttle
      window = "30"
      limits
        total = "30"
        slot = "30"
    timeouts
      server
        listen = "5"
      client
        idle = "10"
        sustain = "240"
  p0f
    path = "un:///tmp/p0f.sock"
  fail2ban
    downloads = "var/dionaea/downloads.f2b"
    offers = "var/dionaea/offers.f2b"
  ihandlers
    handlers
      0 = "ftpdownload"
      1 = "tftpdownload"
      2 = "emuprofile"
      3 = "cmdshell"
      4 = "store"
      5 = "uniquedownload"
      6 = "logsql"
      7 = "hpfeeds"
  services
    serve
      0 = "http"
      1 = "https"
      2 = "tftp"
      3 = "ftp"
      4 = "mirror"
      5 = "smb"
      6 = "epmap"
      7 = "sip"
      8 = "mssql"
      9 = "mysql"
START
{'venet0': ['127.0.0.2'], 'lo': ['127.0.0.1', '::1']}
STARTING SERVICES
venet0
127.0.0.2
<class 'dionaea.services.httpservice'>
<class 'dionaea.services.httpsservice'>
....................................................................................+++
...+++
<class 'dionaea.services.tftpservice'>
<class 'dionaea.services.ftpservice'>
<class 'dionaea.services.mirrorservice'>
<class 'dionaea.services.smbservice'>
<class 'dionaea.services.epmapservice'>
<class 'dionaea.services.siptcpservice'>
processors
  filter-emu
    config
      allow
        0
          protocol
            0 = "smbd"
            1 = "epmapper"
            2 = "nfqmirrord"
            3 = "mssqld"
    next
      emu
        config
          emulation
            limits
              files = "3"
              filesize = "524288"
              sockets = "3"
              sustain = "120"
              idle = "30"
              listen = "30"
              cpu = "120"
              steps = "1073741824"
            api
              connect
                host = "127.0.0.1"
                port = "4444"
  filter-streamdumper
    config
      allow
        0
          type
            0 = "accept"
        1
          type
            0 = "connect"
          protocol
            0 = "ftpctrl"
      deny
        0
          protocol
            0 = "ftpdata"
            1 = "ftpdatacon"
            2 = "xmppclient"
    next
      streamdumper
        config
          path = "var/dionaea/bistreams/%Y-%m-%d/"
allow
         # protocol  smbd epmapper nfqmirrord mssqld  # type

config
  emulation
    limits
      files = "3"
      filesize = "524288"
      sockets = "3"
      sustain = "120"
      idle = "30"
      listen = "30"
      cpu = "120"
      steps = "1073741824"
    api
      connect
        host = "127.0.0.1"
        port = "4444"
allow
         # protocol   # type  accept
         # protocol  ftpctrl  # type  connect

deny
         # protocol  ftpdata ftpdatacon xmppclient  # type

ログの見方

▼テキストログ
# tail -f /opt/dionaea/var/log/dionaea.log
▼SQLiteで保持しているインシデントサマリー
# /opt/dionaea/bin/python3 /opt/dionaea/bin/readlogsqltree /opt/dionaea/var/dionaea/logsql.sqlite
▼キャプチャ・ダウンロードしたバイナリの置き場所
# ls -l /opt/dionaea/var/dionaea/binaries

cowrieインストール

▼Ubuntuでcowrie
https://sehque.wordpress.com/2015/07/23/how-to-configure-and-deploy-a-cowrie-ssh-honeypot-for-beginners/
KAGOYAのiptablesはちょっと変わってるね。
以下はVM上でやった内容と、KAGOYAでやった内容が混ざっています。
# vi/etc/iptables.rules
---------------------------------------------------------
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
---------------------------------------------------------
# /etc/network/if-up.d/iptables

# apt-get update -y && apt-get upgrade
# apt-get install git python-dev python-openssl openssh-server python-pyasn1 python-twisted authbind
# vi /etc/ssh/sshd_config
---------------------------------------------------------
#Port 22
Port 10022
---------------------------------------------------------

# service ssh restart
# adduser cowrie
pass: cowcow2

# touch /etc/authbind/byport/22
# chown cowrie /etc/authbind/byport/22
# chmod 777 /etc/authbind/byport/22

$ su cowrie
$ cd
$ git clone https://github.com/cowrie/cowrie.git
$ cd cowrie
$ cp -p cowrie.cfg.dist cowrie.cfg
$ vi cowrie.cfg
---------------------------------------------------------
#hostname = svr04
hostname = CanadianClub
#listen_port = 2222
listen_port = 22
---------------------------------------------------------
$ vi start.sh
---------------------------------------------------------
# 最終行に以下を追記
authbind --deep twistd -l log/cowrie.log --pidfile cowrie.pid cowrie
---------------------------------------------------------
参考サイトだと cowrie/utils 配下の ./createfs.py を fs.pickle にリネームさせる手順があるけど、そんなディレクトリはないのでスルー。
というか、cowrie/data 配下に fs.pickle がデフォルトで配置されてるね。
$ cd data
$ vi userdb.txt
---------------------------------------------------------
root:x:!root
root:x:!123456
#root:x:*
root:x:giants
richard:x:*
jim:x:fout
---------------------------------------------------------
さて準備完了! 実行してみましょう。
$ /home/cowrie/cowrie/start.sh
Starting cowrie with extra arguments [] ...
An error has occurred: 'Couldn't listen on 0.0.0.0:22: [Errno 13]
Permission denied.'
Please look at log file for more information.
ははー。しっかりエラーですよ。
どうも1024未満のポートはroot権限でないとダメで、cowrieはroot権限で実行すると怒られるという板挟みらしい。
だからkippoも22から2222ポートにリダイレクトさせてたのか。
確かにポートを22から2222に戻すと、このエラーは出なくなった。
▼1024未満のポートではroot権限でないとダメよな記事
https://github.com/micheloosterhof/cowrie/issues/12
$ vi cowrie.cfg
---------------------------------------------------------
listen_port = 2222
#listen_port = 22
---------------------------------------------------------
$ /home/cowrie/cowrie/start.sh
Starting cowrie with extra arguments [] ...
An error has occurred: 'No module named Crypto.PublicKey'
Please look at log file for more information.
新しく出たエラーはモジュールインストールすれば解消するみたい
http://stackoverflow.com/questions/32998502/python-importerror-no-module-named-crypto-publickey-rsa
http://stackoverflow.com/questions/19623267/importerror-no-module-named-crypto-cipher
# apt-get install python-pip
# pip install --upgrade pip
# pip install crypto
# pip install pycrypto
iptables設定(VMの場合)
# cd /etc/network/if-up.d/
# sudo vi iptables
---------------------------------------------------------
#!/bin/bash

iptables -F

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 192.168.56.0/24 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -A INPUT -p tcp --dport 10022 -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 22ポートから2222ポートへのリダイレクト
iptables -A PREROUTING -t nat -p tcp --dport 22 -j REDIRECT --to-port 2222
---------------------------------------------------------

# sudo chmod 755 iptables
# iptables -L -n
---------------------------------------------------------
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 192.168.0.0/24 0.0.0.0/0
ACCEPT all -- 192.168.56.0/24 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:
10022
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state
RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
---------------------------------------------------------
iptables設定(KAGOYAの場合)
# vi /etc/iptables.rules
---------------------------------------------------------
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2222
COMMIT
---------------------------------------------------------
めでたく準備完了です。なんか2222ポートでも繋げてしまうけど、実害ないからいいや。
cowrieのログの監視は以下から。id/passの試行から、実行したコマンドまで確認できます。
$ tail -f cowrie/log/cowrie.log

Glastopfのセットアップ

参考サイト
https://github.com/mushorg/glastopf/blob/master/docs/source/installation/installation_ubuntu.rst

Prerequisites

# apt-get update
# apt-get install python2.7 python-openssl python-gevent libevent-dev python2.7-dev build-essential make
# apt-get install python-chardet python-requests python-sqlalchemy python-lxml
# apt-get install python-beautifulsoup mongodb python-pip python-dev python-setuptools
# apt-get install g++ git php5 php5-dev liblapack-dev gfortran libmysqlclient-dev
-------------------------------------------------------
パッケージ php5 は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

パッケージ php5-dev は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ 'php5' はインストール候補ではありません
E: パッケージ 'php5-dev' はインストール候補ではありません
-------------------------------------------------------
Ubuntu 16だとこのエラーが出るみたい。 KAGOYAはUbuntu 14.04なので、このエラーは出ず正常終了しました。 # apt-cache search php を実行してみると以下のような感じなので、php5をphp7.0に変えてあげる。
-------------------------------------------------------
# apt-cache search php
...
php-zipstreamer - Stream zip files without i/o overhead
php-zmq - ZeroMQ messaging bindings for PHP
php7.0-bcmath - Bcmath module for PHP
php7.0-bz2 - bzip2 module for PHP
php7.0-enchant - Enchant module for PHP
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-mbstring - MBSTRING module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.0-soap - SOAP module for PHP
php7.0-sybase - Sybase module for PHP
php7.0-xsl - XSL module for PHP (dummy)
php7.0-zip - Zip module for PHP
phpab - lightweight PHP namespace aware autoload generator
phpbb3 - full-featured, skinnable non-threaded web forum
phpbb3-l10n - additional language files for phpBB
...
-------------------------------------------------------
# apt-get install g++ git php7.0 php7.0-dev liblapack-dev gfortran libmysqlclient-dev
# apt-get install libxml2-dev libxslt-dev
# pip install --upgrade distribute

Install and configure the PHP sandbox

# cd /opt
# git clone https://github.com/mushorg/BFR.git
# cd BFR
# phpize
# ./configure --enable-bfr
# make && sudo make install

Install glastopf

# pip install glastopf
-------------------------------------------------------
File "<environment marker>", line 1, in <module>
NameError: name 'sys_platform' is not defined
/tmp/pip-build-UaQkot/glastopf/distribute-0.6.35-py2.7.egg
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-UaQkot/glastopf/setup.py", line 2, in <module> use_setuptools()
File "/tmp/pip-build-UaQkot/glastopf/distribute_setup.py", line 152, in use_setuptools return _do_download(version, download_base, to_dir, download_delay)
File "/tmp/pip-build-UaQkot/glastopf/distribute_setup.py", line 132, in _do_download _build_egg(egg, tarball, to_dir)
File "/tmp/pip-build-UaQkot/glastopf/distribute_setup.py", line 123, in _build_egg raise IOError('Could not build the egg.')
IOError: Could not build the egg.

----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-UaQkot/glastopf/
-------------------------------------------------------
なんかエラー出た。もう一つやり方があるみたいなので、そっちでやってみる。
# cd /opt
# git clone https://github.com/mushorg/glastopf.git
# cd glastopf
# python setup.py install
こっちはうまくいった。
# cd /opt
# mkdir glastopf_honeypot

起動

cd /opt/glastopf_honeypot
sudo glastopf-runner
glastopf-runnerを実行したディレクトリに展開してしまうので注意。--workdirオプションつければいけるかと思ったらこんなん出た。
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/strategies.py", line 97, in connect return dialect.connect(*cargs, **cparams)
File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 385, in connect return self.dbapi.connect(*cargs, **cparams)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file

設定ファイル

/opt/myhoneypot/glastopf.cfg
ファイル中に記載されているポートがいくつかあるので、必要に応じてiptables等、穴開け設定してあげる。
  • 80
  • 20000
  • 5432
  • 587
  • 5659

運用

捕まえたものの解析はいまいまはできないので、目下気をつけるのは定期的にサーバが攻撃されていないかチェックすることじゃの。できることと言ったらこんなところじゃろうか。

  • dfコマンドでディスク容量の定期チェック
  • サーバ管理画面のリソース状況のグラフを定期チェック
  • netstat -nap でおかしなポートが開かれていないか

分析ツールとして以下のようなものがある。ハニーポットとは別のサーバで建てることをオススメするぞ。これらの分析ツールにアクセスしたときのログが混ざってしまうとノイズになってしまうからのぅ。

  • Cowrieのログを分析するツール:Kippo Graph
  • Dionaeaのログを分析するツール:DionaeaFR
- the end of this article -