来自:http://blog.163.com/guotao_163/blog/static/23682822010111001322409/
1、honeyd 的技术背景
honeyd 是由 google 的软件工程师 Niels Provos 在 2003 年推出的一个 GPL 开源软件。它本身以 daemon 的方式,运行在 linux 操作系统上,可用来虚拟出大量的虚拟"主机",每台虚拟"主机"又可以被配置成安装了 Windows 或类 UNIX(Linux 或是 AIX)等操作系统,当然 honeyd 不是提供真实的操作系统,只是提供一些操作系统的特征。虚拟"主机"上还可以运行各种各样的网络服务 , 如 ssh, http,或是用户自己编写的特殊虚拟服务。根据 honeyd 的介绍文档所著,honeyd 被测试可以在一台物理机上模拟 65536 台虚拟"主机"及其服务。目前 honeyd 的版本为 1.5c。在 windows 平台上,Mike Davis 提供了一个基于 honeyd 0.5 的移植版本。
2、honeyd 的安装以及虚拟网络的配置
2.1Honeyd 的安装
Honeyd 支持如下多种平台:基于 BSD(Berkeley Software Distribution)的 UNIX 系统、GNU/Linux 系统以及 Solaris 系统。目前 Honeyd 的最新版本是 1.5c。Honeyd软件依赖于Libevent事件处理API、Libdnet数据包构造与发送库、Libpcap数据包捕获库、Libdnsres DNS反向解析函数库以及Arpd工具。
下面分别介绍一下各个库的作用 :
libevent:是一个非同步事件通知(Asynchronous Event Notification)的函数库。通过使用 libevent,开发人员可以设定某些事件发生时所执行的函数,可以代替以往程序所使用的循环检查。该程序库的官方网站是http://www.monkey.org/~provos/libevent。
Libdnet:是一个提供了跨平台的网络相关 API(Application Programming Interface)的函数库(主要是较底层的网络操作),包括 arp 缓存,路由表查询,IP 包及物理帧的传输等。官方网站是 http://libdnet.sourceforge.net。
Libpcap:是一个数据包捕获(Packet Sniffing)的函数库,大多数网络软件都以它为基础。官方网站是http://sourceforge.net/projects/libpcap。
arpd: 在运行 honeyd 之前,需要保证 honeyd 的主机对配置的 honeypot 的 ip 做出 arp 请求的应答。可以通过运行 arpd 软件来做出 arp 应答。arpd 将对指定的 IP 地址范围内未使用的 IP 用 honeyd 主机的 MAC 地址做出 arp 应答。 下载地址:http://www.citi.umich.edu/u/provos/honeyd/arpd-0.2.tar.gz
Honeyd 的安装过程,采用的操作系统平台为 RHEL 5.3(Red Hat Enterprise Linux Server release 5.3)x86 32 位版。Honeyd 在其他操作系统上的安装与 RHEL5.3 非常类似,在安装其他平台时也可按本文所介绍的进行安装。
在安装 Honeyd 之前,先安装依赖库。RHEL 5.3 的默认安装中已经包括 libevent,但是这个版本较旧,不能支持 Honeyd,需要手工安装新的版本。从官方网站下载 1.4.14 稳定版本,文件名为 libevent-1.4.14b-stable.tar.gz。(因为安装过程中需要编译 C 语言代码,所以需要事先在 RHEL 5.3 上安装好 C 语言编译器)
tar –vzxf libevent-1.4.14b-stable.tar.gz cd libevent-1.4.14b-stable ./configure make make isntall |
libevent 会被安装在 /usr/local/lib 目录下:
[root@linux ~]# ls /usr/local/lib |grep libevent
libevent-1.4.so.2
libevent-1.4.so.2.2.0
libevent.a
libevent_core-1.4.so.2
libevent_core-1.4.so.2.2.0
libevent_core.a
libevent_core.la
libevent_core.so
libevent_extra-1.4.so.2
libevent_extra-1.4.so.2.2.0
libevent_extra.a
libevent_extra.la
libevent_extra.so
RHEL 5.3 的默认安装中没有包括 libdnet,需要手工安装。RHEL 5.3 安装光盘中并没有包括 libdnet 的 RPM 格式安装包,我们需要自己下载源代码并且编译安装。下载地址:http://libdnet.sourceforge.net/,下载后的文件名为 libdnet-1.11.tar.gz。
tar -zxf libdnet-1.11.tar.gz cd libdnet-1.11 ./configure make make install ln -s /usr/local/lib/libnet.1 /lib/libnet.1 |
libdnet 会被安装在 /usr/local/lib 目录下:
[root@linux opt]# ls /usr/local/lib |grep libdnet
libdnet
libdnet.1
libdnet.1.0.1
libdnet.a
libdnet.la
RHEL 5.3 的默认安装中已经包括 libpcap。查询命令 rpm -qa | grep libpcap:
[root@linux opt]# rpm -qa|grep libpcap
libpcap-0.9.4-14.el5
libpcap-devel-0.9.4-14.el5
Honeyd 编译过程中还会用到 libpcap-devel需要安装好。RHEL 5.3 的发行光盘中包括这个 RPM 包,直接安装即可。
Libdnsres库:(依赖于pcre,RHEL5.3中自带pcre-6.6-2.el5_1.7)
[root@linux opt]# rpm -qa|grep pcre
pcre-6.6-2.el5_1.7
tar xvzf libdnsres-0.1a.tar.gz
cd libdnsres-0.1a
./configure
make
make install
[root@linux opt]# ls /usr/local/lib |grep libdnsres
libdnsres.a
libdnsres.la
libdnsres.so
libdnsres.so.0
libdnsres.so.0.0.1
Arpd安装:
tar -zxf arpd-0.2.tar.gz
cd arpd
./configure
make
make install
注:手动修改arpd.c中的268/285/294,295/297/426,427行,将__FUNCTION__作为syslog函数的一个参数,在引号内字符串内容前加%s。
问题一:
如果在RHEL5.3系统下安装honeyd时,相关库包arpd-0.2,在编译时,编译通不过,报告如下错误:
cd '/usr/local/lib/arpd' && gmake -k 'arpd.o'
正在编译 arpd.c (gcc)
arpd.c: In function ‘arpd_send’:
arpd.c:269: 错误:expected ‘)’ before string constant
arpd.c: In function ‘arpd_lookup’:
arpd.c:286: 错误:expected ‘)’ before string constant
arpd.c:295: 错误:expected ‘)’ before string constant
arpd.c:298: 错误:expected ‘)’ before string constant
arpd.c: In function ‘arpd_recv_cb’:
arpd.c:427: 错误:expected ‘)’ before string constant
gmake: *** [arpd.o] 错误 1
*** 退出状态:2 ***
(这是在KDevelog工具中编译的结果)
解决方法:
在arpd.c文件首部加上#define __FUNCTION__ ""语句
原因分析:
syslog(LOG_DEBUG, __FUNCTION__ ": no entry for %s",addr_ntoa(addr));函数中常量__FUNCTION__为预定义,该函数是操作系统中的库函数,你可以在/usr/include/sys/中找到syslog.h头文件中有它的定义,具体定义如下:
extern void syslog (int __pri, __const char *__fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
问题二:
arpd包编译成功后,连接生成arpd二进制程序,在linux下运行时,出现如下错误:
[root@linux lib]# arpd
./arpd/arpd: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
解决方法:
方法一:直接把libevent-1.4.so.2文件拷贝到系统指定的/usr/lib库文件目录中。或者做符合连接
#ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2
方法二:设置/etc/ld.so.conf文件,编辑该文件,在文件中加入libevent-1.4.so.2所在的目录,保存后退出。需要注意的是,每次改动ld.so.conf之后需要运行ldconfing来确认刷新。
原因分析:
arpd运行时,需要libevent库的支持,所以在运行arpd前,要先编译好libevent包,并把产生的libevent-1.4.so.2文件拷贝到系统默认的库文件目录下,以便arpd运行时能够连接到。
现在开始安装 Honeyd。Honeyd 同样没有提供诸如 RPM 格式的安装包,需要下载源代码并且编译、安装。下载地址:http://www.honeyd.org/release.php,目前最新版本为 1.5c,下载后文件名为 honeyd-1.5c.tar.gz。
tar -zxf honeyd-1.5c.tar.gz cd honeyd-1.5c ./configure make make install |
Honeyd 在默认情况下会被安装在 /usr/local/bin 目录下。
2.2 Honeyd的简单配置使用
Honeyd 的命令格式如下:
honeyd [-dP] [-l logfile] [-s servicelog] [-p fingerprints] [-0 p0f-file] [-x xprobe]
[-a assoc] [-f file] [-i interface] [-u uid] [-g gid]
[--webserver-address address] [--webserver-port port]
[--webserver-root path] [--rrdtool-path path]
[--disable-webserver] [--disable-update] [--verify-config]
[--fix-webserver-permissions] [-V|--version] [-h|--help] [--include-dir]
[--data-dir] [net ...]
各选项的含义如下:
-d :非守护程序的形式,允许冗长的调试信息。
-P :在一些系统中,pcap 不能通过 select(2)来获得事件通知是不可能的,在这种情况下,honeyd 需要在轮训模式下工作,这个标志位是使论询位有效的。
-l logfile:对日志包和日志文件的连接是被日志文件指定的。
-s servicelog:将honeyd记录的服务层日志写入到指定的服务日志文件中。
-x xprobe:读 xprobe 类型的指纹,这个文件决定了 honeyd 如何响应 ICMP 指纹工具。
-a assoc:读联系 nmap 风格指纹和 xprobe 指纹风格的文件。
-f file:读取名为 file 的配置文件。
-i interface:指定侦听的接口,可以指定多个接口。
[ V|--version:打印出版本信息同时退出。
-include-dir:用作插件开发,指定 honeyd 存贮它的头文件的位置。
[--webserver-address address] [--webserver-port port] [--webserver-root path] [--rrdtool-path path] [--fix-webserver-permissions]指定Honeyd软件内建Web服务的地址、端口和根目录,以及Web服务依赖的RRDTool的位置,--fix-webserver-permissions修正Web目录权限设置导致网页不可读取问题。
net:指定IP地址或者网络或者IP地址范围,如果没有指定,honeyd将监视它能看见的任何IP地址的流量。
在Honeyd软件宿主主机上运行arpd绑定同一网段中某个空闲IP地址,然后运行Honeyd软件在此空闲IP地址上构建虚拟蜜罐。
[root@linux opt]#arpd 192.168.100.5
[root@linux opt]#mkdir /var/log/honeyd
[root@linux opt]#touch /var/log/honeyd/honeyd.log
[root@linux opt]#touch /var/log/honeyd/service.log
[root@linux opt]#chown nobody.nobody /var/log/honeyd/*.log
[root@linux opt]# ll /var/log/honeyd
总计 8
-rw-r--r-- 1 nobody nobody 2617 12-09 17:44 honeyd.log
-rw-r--r-- 1 nobody nobody 102 12-09 17:44 service.log
[root@linux honeyd-1.5c]# honeyd -d -l /var/log/honeyd/honeyd.log -s /var/log/honeyd/service.log --fix-webserver-permissions 192.168.100.100
Honeyd V1.5c Copyright (c) 2002-2007 Niels Provos
honeyd[20090]: started with -d -l /var/log/honeyd/honeyd.log -s /var/log/honeyd/service.log --fix-webserver-permissions 192.168.100.100
Warning: Impossible SI range in Class fingerprint "IBM OS/400 V4R2M0"
Warning: Impossible SI range in Class fingerprint "Microsoft Windows NT 4.0 SP3"
honeyd[20090]: listening promiscuously on eth0: (arp or ip proto 47 or (udp and src port 67 and dst port 68) or (ip and (host 192.168.100.100))) and not ether src 00:0c:29:51:b7:f3
honeyd[20090]: Demoting process privileges to uid 99, gid 99
honeyd[20090]: update_check: failed to resolve host.
honeyd[20090]: Sending ICMP Echo Reply: 192.168.100.100 -> 192.168.100.1
honeyd[20090]: Sending ICMP Echo Reply: 192.168.100.100 -> 192.168.100.1
honeyd[20090]: Sending ICMP Echo Reply: 192.168.100.100 -> 192.168.100.1
honeyd[20090]: Sending ICMP Echo Reply: 192.168.100.100 -> 192.168.100.1
注意:
如果出现configure: error: need either libedit or libreadline; install one of them
[root@linux opt]# rpm -qa|grep readline
readline-5.1-1.1
readline-devel-5.1-1.1
解决方法:安装readline-devel软件包。