Honeyd:您私人的蜜罐系統
Honeyd是一個可以在網絡上創建虛擬主機的小型daemon。可以對此虛擬主機的服務和TCP進行配置,使其在網絡中看起來是在運行某種操作系統。Honeyd可以使一臺主機在局域網中模擬出多個地址以滿足網絡實驗環境的要求。虛擬主機可以被ping通,也可以對它們進行路由跟蹤。通過對配置文件進行設置可以使虛擬計算機模擬運行任何服務。也可以使用服務代理替代服務模擬。它的庫有很多,所以編譯和安裝Honeyd比較難。
下載鏈接:http://down.51cto.com/data/158561
1.摘要
本文主要介紹了虛擬蜜罐產生的相關背景,重點放在對流行的虛擬蜜罐軟件honeyd的介紹上,對 honeyd 的安裝,配置,運行和測試結果,以及 honeyd 的軟件架構做了介紹和剖析。
2.相關問題
2.1 蜜罐(honeypot)和蜜網(honeynet)技術
蜜罐技術是一種欺騙入侵者以達到采集黑客攻擊方法和保護真實主機目標的誘騙技術。Honeypot不同與大多數傳統安全機制,它的安全資源的價值是在于它被探測,被攻擊,或者被威脅。
Honetpot 能夠是任何計算機資源,它能是工作站,文件服務器,郵件服務器,打印機,路由器,任何網絡設備,甚至整個網絡。
Honetpot是故意被部署再危險的環境中,以便它被攻擊,并且相對于部署honeypot的目的來說,honeypot 沒有合法的產品價值,即它不能用于對外的正常服務。如果你的web server經常被訪問,并且你分析服務器上的信息,這就不代表你把他配置成一個 honeypot,而僅僅是一個缺乏安全防護措施的 web server.
Honeynet是一組honeypot的集合,這些honeypot是在一個人或者一個組織的控制之下,一個 honeynet 上可以運行多種不同的操作系統,可以有一個或者多個不同的主題。
2.2 虛擬蜜罐(virtual honeypot)
虛擬蜜罐可以一種快速的方式配置若干個蜜罐,虛擬蜜罐軟件能夠模仿 IP 棧,OS,和真實系統的應用程序,一旦你建立了你的虛擬蜜罐系統,在它被攻陷了后你也很容易重建。通常情況下,模仿是完全在內存中實現的。虛擬蜜罐軟件也允許在單一的物理主機上配置一個完全的密網,一個虛擬蜜罐系統可被用來模仿成千上萬個系統,每個系統使用成千上萬個端口且使用不同的IP.
由于整個 Honeynet 可以部署在一臺機器上,可以大大的減少費用,只要足夠大的內存與虛擬軟件的支持,我們可以在一臺機器上安裝任意多的操作系統。
Honeyd就是一款優秀的虛擬蜜罐軟件。#p#
3.Honeyd 軟件
3.1 簡介
Honeyd 是一個小的守護程序,它能夠產生虛擬的主機,這些主機能夠被配置以提供任意的服務,系統特征也是與之相適應,以至于使之看起來像真實的系統在運行。在一個局域網的網絡仿真中,Honeyd 能夠使單個主機擁有許多 IP(多達 65536 個)。通過提供對威脅探測和評估的機制,增強了計算機的安全性,通過隱藏真實的系統在虛擬的系統中,也達到了阻止敵手的目的。
3.2 安裝
Honeyd 不能單獨運行,需要如下三個函數庫作為配套,libenvent,libdnet,libdcap.
3.2.1 libenvent
libevent API 提供了一種機制:當一個特殊事件在一個文件描述符上發生或者一個事先設定的時間到達的時候執行一個 callback 函數,另外,callback 也支持由信號或者規則的timeout 引發的 callback.
最新版下載地址:http://www.monkey.org/~provos/libevent-1.1a.tar.gz
相關網站:http://www.monkey.org/
3.2.2 libdnet
libdnet 為若干個低層的網絡例程提供了一個簡單的可移植的接口,包括網絡地址處理,內核 arp 緩沖和路由表查找和管理,網絡防火墻(IP filter, ipfw, ipchains, pf, PktFilter, ...),網絡接口查找和管理,IP 隧道(BSD/Linux tun, Universal TUN/TAP device),未加工的 IP 包和以太網幀的傳輸。
支持的語言包括:C, C++, Python ,Perl (see below)
支持的平臺包括:BSD (OpenBSD, FreeBSD, NetBSD, BSD/OS) ,Linux (Redhat, Debian, Slackware, etc.) ,MacOS X ,Windows (NT/2000/XP) ,Solaris ,IRIX ,HP-UX ,Tru64
下載地址:http://prdownloads.sourceforge.net/libdnet/libdnet-1.10.tar.gz
相關網站:http://libdnet.sourceforge.net/
3.2.3 libdcap
libpcap 是 unix/linux 平臺下的網絡數據包捕獲函數包,大多數網絡監控軟件都以它為基礎。Libpcap 可以在絕大多數類 unix 平臺下工作。
下載地址:http://www.tcpdump.org/release/libpcap-0.9.1.tar.gz
相關網站:http://www.tcpdump.org/#needs
3.2.4 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
3.2.5 honeyd
這里介紹在linux下安裝honeyd的方法,首先在http://www.citi.umich.edu/u/provos/honeyd/honeyd-1.0a-rc2.tar.gz,下載最新版的 honeyd:honeyd 1.0。#p#
3.2.6 安裝
z 對于壓縮的檔案包,先解壓:tar –xzvf filename
z 切換到解壓后的目錄下執行:
- &S249; ./configure
- &S249; make
- &S249; make install
注:libevent,libdnet,libdcap 安裝在/usr 目錄下,在配置時,用./configure –-prefix=/usr
也可以通過預編譯包來安裝。只需要下載相應的軟件包,直接解壓就可以使用,
下載地址:http://www.tracking-hackers.com/solutions/honeyd/honeyd-linux-kit-0.5a.tgz
3.2.7 運行
Honeyd 的命令格式如下:
honeyd [ &S722;dP] [ &S722;l logfile] [ &S722;p fingerprints] [ &S722;x xprobe] [ &S722;a assoc] [ &S722;f file]
[ &S722;i interface] [ &S722;V|--version] [ &S722;h|--help] [ &S722;-include-dir] [ &S722;i interface] [net ...]
各選項的含義如下:
-d :非守護程序的形式,允許冗長的調試信息。
-P :在一些系統中,pcap 不能通過 select(2)來獲得事件通知是不可能的,在這種情況
下,honeyd 需要在輪訓模式下工作,這個標志位是使論詢位有效的。
-l logfile:對日志包和日志文件的連接是被日志文件指定的。
&S722;x xprobe:讀 xprobe 類型的指紋,這個文件決定了 honeyd 如何響應 ICMP 指紋工具。
&S722;a assoc:讀聯系 nmap 風格指紋和 xprobe 指紋風格的文件。
&S722;f file:讀取名為 file 的配置文件。
&S722;i interface:指定偵聽的接口,可以指定多個接口。
[ &S722;V|--version:打印出版本信息同時退出。
&S722;-include-dir:用作插件開發,指定 honeyd 存貯它的頭文件的位置。
net:指定IP地址或者網絡或者IP地址范圍,如果沒有指定,honeyd將監視它能看見的任何IP地址的流量。#p#
3.3 配置
我們通過一個簡單的配置文件的例子來說明如何模擬單機,文件取名為 honeyd1.conf
- create windows
- set windows personality "Microsoft Windows NT 4.0 SP3"
- set windows default tcp action reset
- set windows default udp action reset
- add windows tcp port 110 open
- add windows tcp port 80 open
- add windows tcp port 25 open
- add windows tcp port 22 open
- add windows tcp port 21 open
- bind 172.31.35.10 windows
- bind 172.31.35.12 windows
- bind 172.31.35.19 windows
上面的配置文件創建了一個叫做windows的模板,綁定了三個honeypot的IP到這個模板上。上面的這個windows模板告訴honeyd,當一個客戶端試圖用NMap或者XProbe探測honeypot的指紋時,把它自己偽裝成Microsoft Windows NT 4.0 SP3的系統。在蜜罐上有5個端口被打開:21/tcp, 22/tcp, 25/tcp, 80/udp and 110/udp。對于關閉的端口,honeyd將發出一個RST(對于TCP協議),或者一個ICMP端口不可到達的消息(對于UDP協議)。
honeyd也可以用于模擬一個網絡(假定文件名為honeyd2.conf),我們先模仿如下的網絡拓撲:
#p#這個網絡拓撲的配置文件如下:
- route entry 172.31.0.100 network 172.31.0.0/16
- route 172.31.0.100 link 172.31.0.0/24
- route 172.31.0.100 add net 172.31.1.0/24 172.31.1.100
- route 172.31.1.100 link 172.31.1.0/24
- create windows
- set windows personality "Microsoft Windows NT 4.0 SP3"
- set windows default tcp action reset
- add windows tcp port 80 open
- add windows tcp port 25 open
- add windows tcp port 21 open
- create router
- set router personality "Cisco 7206 running IOS 11.1(24)"
- set router default tcp action reset
- add router tcp port 23 "script/router-telnet.pl"
- bind 172.31.0.100 router
- bind 172.31.1.100 router
- bind 172.31.0.20 windows
- bind 172.31.0.30 windows
- bind 172.31.1.15 windows
- bind 172.31.1.16 windows
路由器R1是從LAN進入虛擬網絡的入口點,”route entry”配置用來指定入口點:
route entry 172.31.0.100 network 172.31.0.0/16
上面的這一行告訴honeyd,172.31.0.100是到虛擬網絡172.31.0.0/16的入口點。Honeyd也可以模擬多個網絡入口路由器,每個入口路由器服務不同的網絡范圍。172.31.0.0/24網絡是從路由器R1直接可達的。”route link”配置命令用來指定哪個網絡是直接可達的,即不需要更遠的跳數來到達。
在這個例子中,配置行如下:
route 172.31.0.100 link 172.31.0.0/24
上面的第一個IP是路由器IP。在”link”關鍵字后指定的網絡地址定義了直接可以訪問的網絡地址。多個”link”命令可以用來把多個虛擬子網連接到直接連接到一個路由器上。為了增加一個連接到R1的路由器R2,可以使用“route add net”命令,下面是此命令的用法:
route 172.31.0.100 add net 172.31.1.0/24 172.31.1.100
上面的命令行說明了172.31.0.100(路由器R1)能夠通過網關172.31.1.100(路由器R2)到達網絡172.31.1.0/24。最后的IP地址是新的路由器R2的IP地址。指定的網絡地址范圍是通過新的路由器R2可以到達的網絡。
增加的路由器R2后我們需要指定哪些IP地址可以由路由器R2直接到達。我們再一次使用” route link”命令。在我們的配置的網絡拓撲中,172.31.1.0/24子網是經路由器R2可以直接到達的。具體的命令行如下:
route 172.31.1.100 link 172.31.1.0/24
為了模仿這個網絡,需要先在配置文件中寫一個路由器的模板和一個一個蜜罐模板,并綁定172.31.0.100和172.31.1.100到這個路由器上,綁定四臺虛擬蜜罐主機172.31.0.20和172.31.0.30,172.31.1.15和172.31.1.16到這個蜜罐模板上.它們分別處于172.31.0.0/24和172.31.1.0/24兩個局域網中。
至此,模仿圖1的配置文件完成。#p#
Honeyd配置還可以指定網絡延遲,丟包率,帶寬,以及指定多個網絡入口點,甚至整合物理主機到honeyd模擬的網絡拓撲中,和GRE隧道。
詳細的信息可見Simulation Networks With Honeyd 一文。
下載地址:http://paladion.net/papers/simulating_networks_with_honeyd.pdf
我們可以運行如下的命令來運行honeyd。
首先,切換到honeyd配置文件所在的目錄。然后鍵入:
- #arpd 172.31.0.0/16
- #honeyd –f honeyd1.conf 172.31.35.10-172.31.35.20
(模擬單機的honeyd)
或者
- #arpd 172.31.0.0/16
- #honeyd –f honeyd2.conf 172.31.0.0-172.31.1.255
(模擬網絡拓撲的honeyd)
注意:如果防火墻開啟,honeyd模擬的主機或網絡可能不能被探測到。
3.4 Honeyd 對應用層協議的模擬
Honeyd提供仿真服務腳本來對應用層的協議進行模擬,安裝honneyd后,可以在源代碼包中的scripts目錄下找到honeyd提供的腳本。Honeyd提供的腳本的語法并不復雜,基本的規則就是當黑客登陸后,輸入命令,腳本會做出相應的輸出回應,最簡單就是通過case語句來區別命令,對不同的命令用echo命令來做出響應。我們從honeyd提供的stmp.sh中抽取一段來分析:
- ......
- case $incmd_nocase in QUIT* )
- echo "220 2.0.0 $host.$domain closing connection"
- exit 0;;
- RSET* )
- echo "250 2.0.0 Reset state"
- .........
變量incnd_nocase中保存的是黑客輸入的命令,對于不同的命令,用不同的echo命令做回答,若黑客輸入QUIT命令,回顯給黑客的是保存在變量host與domain中的主機域名關閉鏈接。#p#
Honeyd提供的腳本一般比較很簡單,用戶想要編寫更為復雜的腳本,可以用以honeyd提供的腳本為模板來改寫。
下載相應的仿真服務腳本和相應的配置文件:http://www.citi.umich.edu/u/provos/honeyd/honeyd_kit-1.0c-a.tgz
在honeyd的配置文件中可以指定某個端口的仿真服務腳本,如:
add windows tcp port 21 open
改寫為:
add windows tcp port 21 "sh scripts/ftp.sh"
就可以使honeyd運行仿真服務腳本ftp.sh,來模擬ftp服務。仿真服務腳本要指定路徑,才能被honeyd找到。
對于要運行的其他端口的仿真服務腳本,可以在配置文件中的相應端口的語句中改。
3.5 日志
honeyd 對黑客在終端的輸入提供了完善的日志,該日志文件在運行honeyd 時已經指定,即使用-f參數加指定的日志文件名。一般指定日志文件為/var/log/honeyd,可以通過查看該日志獲得黑客登陸的信息和一些攻擊的方法。
4.honeyd 的架構
honeyd 的軟件架構由如下幾個組件構成:一個配置數據庫,一個中央包分發器,協議處理器,一個特征引擎,以及一個可選的路由器組件。
進來的包首先被中央包分配器處理,它首先檢查 IP 包的長度并確認包的校驗和。honeyd 框架知道主要的 3 種 Internet 協議:TCP,UDP,ICMP。其他協議的包將被日志記錄并丟棄。在處理包之前,分配器必須查詢配置數據庫來找到一個與目的 IP 相符合的蜜罐配置,如果沒有指定的配置存在,一個默認的模板將被使用。給定一個配置,包和相應的配置將被分發給指定的協議處理器。#p#
ICMP 協議處理器支持大多數 ICMP 請求。在默認情況下,所有的 honeypot 支持對 echo requests 和 process destination unreachable 消息的應答。對其他消息的響應決定與配置的個性特征。
對于 TCP 和 UDP 協議,honeyd 框架能建立連接到任意的服務。服務是外部程序,能從標準輸入獲取數據,并把輸入發送到標準輸出。服務的行為完全取決于外部應用程序。當一個連接請求被收到,honeyd 框架檢查包是否是一個已經建立好的連接的一部分。如果是的話,任何新的數據都發往已經建立好的連接的應用程序。如果包是一個連接請求,一個新的進程將被創建來運行合適的服務。為了替代為每個連接建立一個進程,honeyd 框架也支持subsystems 和 internal services。一個 subsysytem 是一個能運行在虛擬蜜罐名字空間下的應用程序。當相應的虛擬蜜罐被初始化的時候,subsystem 指定的應用程序就被啟動了。一個
subsystem 能夠綁定到端口,接受連接,發起網絡通訊。當一個 subsystem 作為外部程序運行的時候,一個內部的服務就是一個能在 honeyd 中運行的 python 腳本。比起 subsystem 來,internal service 需要的資源更少。
UDP 數據報直接傳遞給應用程序。當 honeyd 框架接受到一個發送給關閉端口的數據包的時候,如果配置的個性特征允許,它將發送一個 ICMP port unreachable。在 發 送 ICMP port unreachable 的過程中,honeyd 框架允許像 traceroute 一樣的工具去發現被模仿的網絡拓撲。
另外,建立一個到本地服務的連接,honeyd 框架也支持連接的重定向。連接的重定向可能是靜態的,或者取決于連接的四個要素(源目的端口,源目的地址)。重定向可以使我們把對虛擬蜜罐上的服務的連接請求定向到一個運行著的真實服務上。例如,我們可以重定向一個 DNS 請求到一個合適的名字服務器上。
在一個包被發送到網絡前,它會被個性引擎處理。個性引擎調整包的內容,以至于它看起來像被配置的操作系統的協議棧中產生的。
5.總結
honeyd 是一款非常優秀的虛擬蜜罐軟件,能完成蜜罐的大部分功能,花費的資源相對較少,并能完成對網絡拓撲的模擬,對抗指紋探測。honeyd 的使用也很方便,僅需要一個配置文件,就可以完成響應的部署。此外,honeyd 的使用也是相當廣泛。在引誘黑客攻擊,反蠕蟲,遏制垃圾郵件等方面都有廣泛的應用。目前對于虛擬蜜罐的研究還處于起步階段,以后對它的研究會越來越深入。