DNRHにNepenthesを入れてみる

習うと早速使ってみたくなるのが人の性。
というわけで、この期をまったと言わんばかりに待ち受けていたDNRHにNepenthesを入れてみる。


[環境]
  DNRH(多分001の方。メモリ増設済み) + Fedora9
[参考サイト]
  Nepenthes(0.1.7) インストールメモ
  Nepenthes - Malware収集ツール


まず、Nepenthesを落としてきます。


Dltnはいきなりここで躓きました。


躓くのが早いです。
というのも、Sleipnirではダウンロードリンクが表示されなかったのです。
(IE系はダメっぽい雰囲気。)
代わりにFireFoxを使って開くと、普通にリンクが表示されました。cakephpとか触ってるとよくある事。
Browse Nepenthes -finest collection- Files on SourceForge.net:


今回は0.2.2を使う事にします。

wget http://sourceforge.net/projects/nepenthes/files/Nepenthes%20development/0.2.2/nepenthes-0.2.2.tar.gz/download
tar zxvf nepenthes-0.2.2.tar.gz
cd nepenthes-0.2.2


次に、Nepenthesコンパイルに必要なものを入れていきます。

yum -y install pcre-devel pcre adns adns-devel curl curl-devel file


余談ですが、昔の自分は今回のように「自分でコンパイルしてインストールする」タイプのものが凄く苦手でした。
まず、どうすればいいのか分からない。
ぐぐって出てきた通りにコマンドを打ってもエラーが出てコンパイルが通らない。
最終的に放り出す事が多々ありました。お恥ずかしい。
ここを読んでいる人で、もしそんな方がいらっしゃれば、是非。READMEを読んでみてください。
英語でもコマンドは万国共通です。
  ・コンパイルするのに必要な物
   (丁寧なものだと、ディストリごとにコマンドが書かれていたりします。)
  ・コンパイル・インストールの仕方
   (大抵コマンドが書かれているんじゃないかなと。)
ぐぐるより早く確実です。(多分。)
ご存知の方にとっては、「何を当たり前の事を言ってるんだお前は」と思われるかもしれませんが、
Dltnはバカなのでこれに気づくまで随分長い間かかりました。
よく躓く方は、是非お試しあれです。


そしてインストール。

./configure
make
make install


しかし、configureの段階でこんなエラーが出てしまいました。

checking for magic_open in -lmagic... no
configure: error: libmagic is missing - install it please


どうやらlibmagicがないようです。ぐぐってみると、
Where can I download "libmagic" for fedora [Archive] - FedoraForum.org
こんなサイトがヒットしたので、早速試してみます。

yum -y install file-devel


これでうまくconfigureが終了します。

*** Dumping Nepenthes Configuration ***

  • Debug Logging : no
  • link on liby : no

- Support adns : yes

  • Support Large Filesystem : yes
  • Support ssh : no
  • Support prelude : no
  • Support capabilities : yes

- linux ip_queue (ipq) : no
- FBSD ipfw Divert sockets : no
- Packet Capture Lib (pcap) : no


そして今度はmakeですが、またもや怒られました。

(一部抜粋)
../include/Config.hpp:67: error: ‘strcmp’ was not declared in this scope
Config.cpp:79: error: ‘strdup’ was not declared in this scope


どうやらinclude内のConfig.hppでエラーが発生しているようです。
strcmpやstrdupはstring.hが必要なので、インクルードさせてみます。

vi nepenthes-core/include/Config.hpp
(#include を追記、保存)
make


それでもエラーが出ます。

Config.cpp: In member function ‘virtual char* nepenthes::Config::parseString(nepenthes::CharField*, int32_t)’:
Config.cpp:355: error: array subscript is above array bounds


どうやらnepenthes::Config::parseStringに難ありのようなので、
実際に見てみる。

vi nepenthes-core/src/Config.cpp
(355Gで355行目へ)


すると、こんなコードが見つかる。

char szHexConv[3];

szHexConv[0] = data->getChar();
szHexConv[1] = data->getChar();
szHexConv[3] = 0;


アレ・・・配列の大きさ的に、[3]に代入するのはまずくね?
これって2の間違いなのかなあ・・・という事で、2に書き換えてみる。

char szHexConv[3];

szHexConv[0] = data->getChar();
szHexConv[1] = data->getChar();
szHexConv[2] = 0;


こうすると、Config.cppに関してはコンパイルが通りました。果たして大丈夫なのかは謎。
しかし、まだエラーは続きます。

DNSManager.cpp:134: error: ‘strlen’ was not declared in this scope


これも先ほどと同様に・・・./nepenthes-core/include/DNSManager.hppstring.hをインクルードさせます。
まだエラーが出ます。助けて−。

DNSResult.cpp:79: error: ‘memcpy’ was not declared in this scope


同様に、./nepenthes-core/include/DNSResult.hppstring.hをインクルード。
とにかくコレ系が多いので、以下まとめます。


./nepenthes-core/include/DownloadManager.hppstdlib.h
./nepenthes-core/include/DownloadUrl.hppstdlib.h
./nepenthes-core/include/DownloadBuffer.hppstring.h
./nepenthes-core/include/EventManager.hppstdlib.h
./nepenthes-core/include/LogManager.hppstring.hstdlib.h
./modules/submit-norman/submit-norman.hppstring.hstdlib.h
./modules/log-prelude/log-prelude.hppstdlib.h
・多分DownloadManager辺りで
  error: ‘typedef’ was ignored in this declaration
 というエラーが出るので、typedefを消して上げる。


こうして無事にmakeが完了するのであった(長かった・・・)。


続いてグループとユーザの追加を行い、オーナーを変更しておきます。

groupadd nepenthes
useradd -g nepenthes -d /dev/null -s /sbin/nologin nepenthes
chown -R nepenthes:nepenthes /opt/nepenthes


そして実行させてみます!ドキドキ♪



[root@localhost nepenthes-0.2.2]# /opt/nepenthes/bin/nepenthes -u nepenthes -g nepenthes
User nepenthes has uid 504
Group nepenthes has gid 504
# #

!.,('
!!..,
!*'.,!*
*!'.,!
!'.,!
',*,.
,#=%(#%#%%#%%%C
.#%C=,:::::::,,5%#.
(#!!,,,,,,,,,,,J7#'
=#!(=,,,,,,,,:==(7! ,%###!##%'.
.=#(CJ3$#%C7==(77 ,%##%%!#%%%#%*
.#(#J#A3#$==7=J=!=3' ,%##%%::::,,::%#%, '!(====((!,'.
######$@53C=(==(C7 %##(::::,,,,,::%##A$$3$CCJ3CJC(7C!
#(###3#'JJ(!!*!!J(((=J' ,##(:::,,,,,:::%##5%C' .
.#3#3#$#. C5$C7=7=(7= ;##(:,,,,,,,::%###%.
'####*. 7AJC77!(=7C. |###((,,,,,,,)%##%=C, .*7!
(%7C77!(==!=7=C! ((%############%!(CC,AA%3C'
C7C7==(=(=J= ,:%%@M;%%;.77C7(=C!*!!(777J3$3=!,'.
,%CJJ=C(7(((((=((=JC 7####::###CC=(CC=(=*!=!=7=77JJ,
.%J337J==(=7==C=C7C3,##J!::::77#%J=CJ==!===(7C7C*
C$33C3C7=7C777CJJJ%7##C:,,,,,:#$3CJC==(=7(=C(J$CJ*
'%$333CCC3CCCCCJ%3%#%#$C:,,,:3#AJJ3C7=JC=(((((7C7C3J3!
(#$$3JJJ%3J$J33$$AA33#5J:,,:A#$$$JC7CJCC7=(=(CJ$CJJ$,
J#%$$%33%$5$A#$%#%CJ3#A%:35#%J3$3JJCCC$C7J77JC$J33$'
.75AA%%%$AA%#A%5#%CJC#J###3#J$%3$JJCCJCC3J33$33$$A.
=5555A%AA5#5@%,%CJC3J###ACJJ$5$33JJJJJJJJ%%%3%%A%
.3@55##A5###='!AJCJJ3###ACJ3A#$$$%$$33333$%%%AA5!
%3J%5$J=' '533CC3###ACJ$#@A%%%AA$A%$$A%AA55
=(3$A'. 3A3J33###%CJ$AA55AA%5#AA%%5#5
AC=J 'A%$J$A##A33AA55###55#5555#A!
*J7==A $%$%%##A3A=.JA###555%55##5(.
=JJJJ5' '(A5A#JA%! *=#%AA5553
$3J$$ .55A$#* .#A$A7*
.$33$%C %$JJ5. !3J(%
'%%%A$7 %CC75. C(J7(
*A%J$A= %==73 ,J7C$'
7%$JJ@! 'A7=CC =C7CJ
$J3(3#. *$77C= %(CC(
.#33($J C73, '$JJC,

# #

Nepenthes Ampullaria

# #


Nepenthes Version 0.2.2
Compiled on Linux/x86 at Aug 19 2009 18:12:00 with g++ 4.3.0 20080428 (Red Hat 4.3.0-8)
Started on localhost.localdomain running Linux/i686 release 2.6.27.19-78.2.30.fc9.i686

[ info mgr ] Loaded Nepenthes Configuration from "/opt/nepenthes/etc/nepenthes/nepenthes.conf".
[ crit net handler ] Could not Bind Socket to Port 25
Address already in use
[ crit net handler ] ERROR Could not init Socket Address already in use
[ crit net mgr ] ERROR Binding :25 failed
[ info sc module ] Loading signatures from file var/cache/nepenthes/signatures/shellcode-signatures.sc
[ crit net handler ] Could not Bind Socket to Port 443
Address already in use
[ crit net handler ] ERROR Could not init Socket Address already in use
[ crit net mgr ] ERROR Binding :443 failed
[ debug info fixme ] Logfile var/log/nepenthes.log ownership is now 504:504 (nepenthes:nepenthes)
[ info mgr ] The process 1461 was given capabilities = cap_setgid,cap_setuid,cap_net_bind_service,cap_net_admin,cap_net_raw,cap_sys_chroot+eip
[ info mgr ] Process groupid 504
[ info mgr ] Process userid 504


やったー!起動したどー!
という事で、なんとかNepenthesが入ってくれました。
試しに別ホストからnmap打ってみました。



[root@Dltn ~]# nmap 192.168.12.17

Starting Nmap 4.53 ( http://insecure.org ) at 2009-08-19 19:29 JST
Interesting ports on 192.168.12.17:
Not shown: 1688 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
42/tcp open nameserver
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
135/tcp open msrpc
139/tcp open netbios-ssn
143/tcp open imap
220/tcp open imap3
443/tcp open https
445/tcp open microsoft-ds
465/tcp open smtps
993/tcp open imaps
995/tcp open pop3s
1023/tcp open netvenuechat
1025/tcp open NFS-or-IIS
2105/tcp open eklogin
3372/tcp open msdtc
5000/tcp open UPnP
5901/tcp open vnc-1
6001/tcp open X11:1
8000/tcp open http-alt
8021/tcp open ftp-proxy
10000/tcp open snet-sensor-mgmt
17300/tcp open kuang2
MAC Address: 00:XX:XX:XX:XX:XX (---)

Nmap done: 1 IP address (1 host up) scanned in 14.559 seconds


おーおーおー。めっちゃ空いてる(笑)
もしNepenthesを起動していないと、こうなります。



[root@Dltn ~]# nmap 192.168.12.17

Starting Nmap 4.53 ( http://insecure.org ) at 2009-08-19 19:32 JST
Interesting ports on 192.168.12.17:
Not shown: 1707 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
443/tcp open https
5901/tcp open vnc-1
6001/tcp open X11:1
8000/tcp open http-alt
8021/tcp open ftp-proxy
MAC Address: 00:XX:XX:XX:XX:XX (---)

Nmap done: 1 IP address (1 host up) scanned in 13.581 seconds


しっかりとNepenthesがポートを開けてくれている事が確認できます。
もう少しチューニングしてから、実際にDMZとして設定し、遊んでみたいと思います・・・!が、
その前に不調だーといってはずしてしまったNetScreenをもう一度噛ませてみたいと思っています。
(設定変更するたびにルータが再起動するのはあまりに不便・・・。)


何はともあれ、ハニーポッターへの道の第一歩を踏み出した感じです。わーい。