CentOS6にKippoを入れてみた時の覚書
だいぶ前だけど、CentOS6にKippoを入れた時のメモ
cowrieに乗り換えるので、過去の覚書として残しておく
ダウンロード元について現在はgithubに移行しており、記載しているURLは404が返ってくる
環境
- CentOS release 6.9 (Final)
- kippo-0.8
パッケージのインストール
必要なパッケージをインストールしておく
$ sudo yum install python-devel,python-twisted,python-zope-interface,python-pyasn1,pycrypto
ユーザーの作成
kippoを起動するユーザを作成する
万が一kippoのバグで乗っ取られた場合を想定してrootでは起動しない
$ sudo useradd kippo
kippoの入手
基本的にダウンロードして解凍するだけ
$ sudo su - kippo
$ wget http://kippo.googlecode.com/files/kippo-0.8.tar.gz
$ tar zxvf kippo-0.8.tar.gz
$ cd kippo-0.8
$ ls
data dl doc fs.pickle honeyfs kippo kippo.cfg kippo.tac log start.sh txtcmds utils
設定ファイルの修正
$ vi kippo.cfg
# Hostname for the honeypot. Displayed by the shell prompt of the virtual
# environment.
#
# (default: nas3)
hostname = seagull <= 修正
~~~省略~~~
# Fake address displayed as the address of the incoming connection.
# This doesn't affect logging, and is only used by honeypot commands such as
# 'w' and 'last'
#
# If not specified, the actual IP address is displayed instead (default
# behaviour).
#
# (default: not specified)
fake_addr = 192.168.99.100 <= コメントイン
~~~省略~~~
# Text based logging module
#
# While this is a database logging module, it actually just creates a simple
# text based log. This may not have much purpose, if you're fine with the
# default text based logs generated by kippo in log/
#
# To enable this module, remove the comments below, including the
# [database_textlog] line.
#[database_textlog]
logfile = kippo-textlog.log <= コメントイン
$
起動
start.shを実行するだけ
$ ./start.sh
デフォルトだとエラーがでて起動できなかったので修正
$ sudo vi /usr/lib64/python2.6/site-packages/Crypto/Util/number.py
~~~省略~~~
# You need libgmp v5 or later to get mpz_powm_sec. Warn if it's not available.
#if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
# _warn("Not using mpz_powm_sec. You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)u
<= コメントアウト
~~~省略~~~
# Use the accelerator if available
# if _fastmath is not None:
# return _fastmath.getStrongPrime(long(N), long(e), false_positive_prob,
# randfunc)
<= コメントアウト
~~~省略~~~
$
起動後にエラーがでてうまくログをとれていなかったので修正
$ vi /home/kippo/kippo-0.8/kippo/core/honeypot.py
~~~省略~~~
from copy import deepcopy, copy
#import sys, os, random, pickle, time, stat, shlex, anydbm
import sys, os, random, pickle, time, stat, shlex, anydbm, struct <= 修正
~~~省略~~~
def resume(self):
self.honeypot.setInsertMode()
self.runCommand()
if (self.honeypot.execcmd != None):
return <= 追記
~~~省略~~~
class HoneyPotProtocol(recvline.HistoricRecvLine):
#def __init__(self, user, env):
def __init__(self, user, env, execcmd = None): <= 修正
self.user = user
self.env = env
self.execcmd = execcmd <= 追記
~~~省略~~~
self.keyHandlers.update({
'\x04': self.handle_CTRL_D,
'\x15': self.handle_CTRL_U,
'\x03': self.handle_CTRL_C,
'\x09': self.handle_TAB,
})
if self.execcmd != None:
print 'Running exec cmd "%s"' % self.execcmd
self.cmdstack[0].lineReceived(self.execcmd)
self.terminal.transport.session.conn.sendRequest(self.terminal.transport.session, 'exit-status', struct.pack('>L', 0))
self.terminal.transport.session.conn.sendClose(self.terminal.transport.session)
self.execcmd = None
return
# self.terminal.transport.session.conn.sendEOF(self)
# self.terminal.transport.session.conn.transport.loseConnection() <= 追記
~~~省略~~~
def execCommand(self, protocol, cmd):
cfg = config()
if cfg.has_option('honeypot', 'exec_enabled'):
if ( cfg.get('honeypot', 'exec_enabled') != "true" ):
print 'exec disabled not executing command: "%s"' % cmd
raise os.OSError
print 'Executing command: "%s"' % cmd
serverProtocol = LoggingServerProtocol(HoneyPotProtocol, self, self.env, cmd)
serverProtocol.makeConnection(protocol)
protocol.makeConnection(session.wrapProtocol(serverProtocol)) <= 追記
raise NotImplementedError <= 削除
~~~省略~~~
$