天天看點

虛拟蜜罐honeyd安裝使用

來自: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軟體包。

繼續閱讀