來自: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 目錄下:
[[email protected] ~]# 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 安裝CD光牒中并沒有包括 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 目錄下:
[[email protected] 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:
[[email protected] opt]# rpm -qa|grep libpcap
libpcap-0.9.4-14.el5
libpcap-devel-0.9.4-14.el5
Honeyd 編譯過程中還會用到 libpcap-devel需要安裝好。RHEL 5.3 的發行CD光牒中包括這個 RPM 包,直接安裝即可。
Libdnsres庫:(依賴于pcre,RHEL5.3中自帶pcre-6.6-2.el5_1.7)
[[email protected] 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
[[email protected] 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下運作時,出現如下錯誤:
[[email protected] 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位址上建構虛拟蜜罐。
[[email protected] opt]#arpd 192.168.100.5
[[email protected] opt]#mkdir /var/log/honeyd
[[email protected] opt]#touch /var/log/honeyd/honeyd.log
[[email protected] opt]#touch /var/log/honeyd/service.log
[[email protected] opt]#chown nobody.nobody /var/log/honeyd/*.log
[[email protected] 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
[[email protected] 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
[[email protected] opt]# rpm -qa|grep readline
readline-5.1-1.1
readline-devel-5.1-1.1
解決方法:安裝readline-devel軟體包。