參考鏈接:
1、https://blog.csdn.net/jack237/article/details/6828771
2、http://netsecurity.51cto.com/art/201101/242209_all.htm
3、https://www.oschina.net/uploads/doc/honeyd.pdf
Honeyd是一個小型守護進程,可以在網(wǎng)絡(luò)上創(chuàng)建虛擬主機??梢詫⒅鳈C配置為運行任意服務(wù),并且可以調(diào)整它們的個性以使它們看起來運行某些操作系統(tǒng)。
Honeyd可以使一臺主機在局域網(wǎng)中模擬出多個地址以滿足網(wǎng)絡(luò)實驗環(huán)境的要求。(- 目前已經(jīng)測試了多達65536個用于網(wǎng)絡(luò)仿真。)
Honeyd通過提供威脅檢測和評估機制來提高網(wǎng)絡(luò)安全性。它還通過在虛擬系統(tǒng)中隱藏真實系統(tǒng)來阻止攻擊者。
一、介紹
1、虛擬蜜罐
????虛擬蜜罐可以一種快速的方式配置若干個蜜罐,虛擬蜜罐軟件能夠模仿 IP 棧,OS,和真實系統(tǒng)的應(yīng)用程序,一旦你建立了你的虛擬蜜罐系統(tǒng),在它被攻陷了后你也很容易重建。通常情況下,模仿是完全在內(nèi)存中實現(xiàn)的。虛擬蜜罐軟件也允許在單一的物理主機上配置一個完全的密網(wǎng),一個虛擬蜜罐系統(tǒng)可被用來模仿成千上萬個系統(tǒng),每個系統(tǒng)使用成千上萬個端口且使用不同的IP.
2、Honeyd蜜罐
????Honeyd就是一款優(yōu)秀的虛擬蜜罐軟件。它能夠產(chǎn)生虛擬的主機,這些主機能夠被配置以提供任意的服務(wù),系統(tǒng)特征也是與之相適應(yīng),以至于使之看起來像真實的系統(tǒng)在運行。
二、安裝
1、支持平臺:linux、unix等。
2、安裝依賴項:源碼安裝
Honeyd 軟件依賴于 Libevent 事件處理 API、Libdnet 數(shù)據(jù)包構(gòu)造與發(fā)送庫、Libpcap 數(shù)
據(jù)包捕獲庫、Libdnsres DNS反向解析函數(shù)庫以及Arpd工具。
各個庫作用:
1)libevent:事件通知。是一個非同步事件通知(Asynchronous Event Notification)的函數(shù)庫。通過使用 libevent,開發(fā)人員可以設(shè)定某些事件發(fā)生時所執(zhí)行的函數(shù),可以代替以往程序所使用的循環(huán)檢查。(libevent API 提供了一種機制:當(dāng)一個特殊事件在一個文件描述符上發(fā)生或者一個事先設(shè)定的時間到達的時候執(zhí)行一個 callback 函數(shù),另外,callback 也支持由信號或者規(guī)則的timeout 引發(fā)的 callback。)
2)Libdnet:數(shù)據(jù)包創(chuàng)建。是一個提供了跨平臺的網(wǎng)絡(luò)相關(guān) API(Application Programming Interface)的函數(shù)庫(主要是較底層的網(wǎng)絡(luò)操作),包括 arp 緩存,路由表查詢,IP 包及物理幀的傳輸?shù)取?3)Libpcap:數(shù)據(jù)包嗅探。是一個數(shù)據(jù)包捕獲(Packet Sniffing)的函數(shù)庫,大多數(shù)網(wǎng)絡(luò)監(jiān)控軟件都以它為基礎(chǔ)。
4)arpd: 在運行 honeyd 之前,需要保證 honeyd 的主機對配置的 honeypot 的 ip 做出 arp 請求的應(yīng)答??梢酝ㄟ^運行 arpd 軟件來做出 arp 應(yīng)答。arpd 將對指定的 IP 地址范圍內(nèi)未使用的 IP 用 honeyd 主機的 MAC 地址做出 arp 應(yīng)答。
3、arpd:在運行honeyd之前,我們需要保證 honeyd 的主機對我們配置的honeypot的ip做出arp請求的應(yīng)答??梢酝ㄟ^運行arpd軟件來做出 arp 應(yīng)答。arpd 將對指定的 IP 地址范圍內(nèi)未使用的 IP 用 honeyd 主機的 MAC 地址做出arp應(yīng)答。
4、安裝honeyd。http://www.honeyd.org/release.php?version=1.5c
5、具體安裝步驟:
安裝依賴包:
sudo apt-get install build-essential g++ gcc進行安裝。
注:在裝gcc之前需要裝build-essential,其作用是提供軟件包列表信息。
詳見[http://www.citi.umich.edu/u/provos/honeyd/](http://www.citi.umich.edu/u/provos/honeyd/)。
1、下載libenvent源碼:[http://libevent.org/old-releases.html](http://libevent.org/old-releases.html)
2、下載libdnet源碼:[http://libdnet.sourceforge.net/](http://libdnet.sourceforge.net/)
3、下載libdcap源碼:[http://www.tcpdump.org/release/](http://www.tcpdump.org/release/)
4、源碼安裝:
先解壓:tar -xzvf filename
切換到解壓后的目錄執(zhí)行:./configure ;make ;make install。
**注:libevent,libdnet,libdcap 安裝在/usr 目錄下,在配置時,用./configure –-prefix=/usr**
5、通過預(yù)編譯包安裝:下載軟件包,直接解壓并使用。http://www.tracking-hackers.com/solutions/honeyd/honeyd-linux-kit-0.5a.tgz
通過源碼安裝:需先編譯,可參考[https://cloud.tencent.com/developer/article/1019325](https://cloud.tencent.com/developer/article/1019325)。
三、運行
1、相關(guān)參數(shù)含義如下:

honeyd [OPTIONS] [net ...]
OPTIONS:
-d:非守護程序的形式,允許冗長的調(diào)試信息。
-P:輪詢模式。
-l:日志文件指定了日志包和日志文件的連接。
-s:將服務(wù)狀態(tài)輸出記錄到logfile。
-i:監(jiān)聽接口,指定偵聽的接口,可以指定多個接口。
-p:從文件中讀取nmap樣式的指紋。
-x:從文件中讀取xprobe風(fēng)格的指紋,這個文件決定了 honeyd 如何響應(yīng) ICMP 指紋工具。
-a:從文件中讀取nmap-xprobe關(guān)聯(lián)。
-0:從文件中讀取pf樣式的OS指紋。
-u:設(shè)置Honeyd應(yīng)該運行的uid 。
-g:設(shè)置Honeyd應(yīng)該運行的gid。
-f:從文件中讀取配置。
-c host:port:name:pass:報告開始收集。
--webserver-port=port:Web服務(wù)器偵聽的端口。
--webserver-root=path:文檔樹的根。
--fix-webserver-permissions:更改所有權(quán)和權(quán)限。
--rrdtool-path=path:到rrdtool的路徑。
--disable-webserver:禁用內(nèi)部Web服務(wù)器。
--disable-update:禁用檢查安全修復(fù)程序。
-V, --version
-h,--help
--include-dir:用作插件開發(fā),指定 honeyd 存貯它的頭文件的位置。
net:
指定IP地址或者網(wǎng)絡(luò)或者IP地址范圍,如果沒有指定,honeyd將監(jiān)視它能看見的任何IP地址的流量。
2、常用運行命令(若防火墻開啟,則honeyd模仿的主機或網(wǎng)絡(luò)可能無法被探測到)
1、./honeyd -f honeyd.conf -p nmap.prints -x xprobe2.conf -a nmap.assoc -0 pf.os -l /var/log/honeyd 192.168.1.100-192.168.1.253
2、模擬單機:
./arpd 172.31.0.0/16
./honeyd –f honeyd1.conf 172.31.35.10-172.31.35.20
3、模擬網(wǎng)絡(luò)拓撲:
sudo ./arpd 172.31.0.0/16
./honeyd –f honeyd2.conf 172.31.0.0-172.31.1.255
四、配置
1、模擬單機
配置文件如下:
create default
set default default tcp action filtered
set default default udp action filtered
set default default icmp action filtered
create template
set template ethernet "3com"
set template personality "Linux 2.4.7 (X86)"
bind 192.168.1.125 template
上面的配置文件創(chuàng)建了一個叫做template的模板,將IP:192.168.1.125綁定到這個模板上。上面的這個windows模板告訴honeyd,當(dāng)一個客戶端試圖用NMap或者XProbe探測honeypot的指紋時,把它自己偽裝成Linux 2.4.7 (X86)的系統(tǒng)。default模塊,對于關(guān)閉的端口,honeyd將發(fā)出對于TCP協(xié)議、UDP協(xié)議、ICMP協(xié)議已被過濾的消息。
2、模擬網(wǎng)絡(luò)
網(wǎng)絡(luò)拓撲的配置文件如下:
#route entry 10.0.0.1
#route 10.0.0.1 link 10.2.0.0/24
#route 10.0.0.1 add net 10.3.0.0/16 10.3.0.1 latency 8ms bandwidth 10Mbps
#route 10.3.0.1 link 10.3.0.0/24
#route 10.3.0.1 add net 10.3.1.0/24 10.3.1.1 latency 7ms loss 0.5
#route 10.3.1.1 link 10.3.1.0/24
create default
set default default tcp action filtered
set default default udp action filtered
set default default icmp action filtered
# Example of a simple host template and its binding
create windows
set windows personality "OpenBSD 4.0 (x86)"
set windows uptime 1728650
set windows maxfds 35
add windows tcp port 80 "scripts/web.sh"
add windows tcp port 22 "scripts/test.sh"
add windows tcp port 23 "scripts/router-telnet.pl"
add windows udp port 53 open
set windows ethernet "dell"
set windows default tcp action closed
#create router
#set router personality "Cisco 2514 router (IOS 12.1)"
#set router default tcp action closed
#add router tcp port 22 "scripts/test.sh"
#add router tcp port 23 "scripts/router-telnet.pl"
#bind 10.3.0.1 router
#bind 10.3.1.1 router
#bind 10.3.1.12 template
#bind 10.3.1.11 template
bind 192.168.3.137 windows
#set 10.3.1.11 personality "Microsoft Windows NT 4.0 SP3"
#set 10.3.1.10 personality "IBM AIX 4.2"
“route entry”配置用來指定入口點,“route link”配置命令用來指定哪個網(wǎng)絡(luò)是直接可達的,即不需要更遠的跳數(shù)來到達。
3、honeyd對應(yīng)用層協(xié)議模擬
Honeyd提供仿真服務(wù)腳本來對應(yīng)用層的協(xié)議進行模擬,安裝honneyd后,可以在源代碼包中的scripts目錄下找到honeyd提供的腳本。Honeyd提供的腳本的語法并不復(fù)雜,基本的規(guī)則就是當(dāng)黑客登陸后,輸入命令,腳本會做出相應(yīng)的輸出回應(yīng),最簡單就是通過case語句來區(qū)別命令,對不同的命令用echo命令來做出響應(yīng)。Honeyd提供的腳本一般比較很簡單,用戶想要編寫更為復(fù)雜的腳本,可以用以honeyd提供的腳本為模板來改寫。
在honeyd的配置文件中可以指定某個端口的仿真服務(wù)腳本,如:
add windows tcp port 21 open
改寫為:
add windows tcp port 21 "sh scripts/ftp.sh"
就可以使honeyd運行仿真服務(wù)腳本ftp.sh,來模擬ftp服務(wù)。仿真服務(wù)腳本要指定路徑,才能被honeyd找到。
五、日志
honeyd 對黑客在終端的輸入提供了完善的日志,該日志文件在運行honeyd 時已經(jīng)指定,即使用-f參數(shù)加指定的日志文件名。一般指定日志文件為/var/log/honeyd,可以通過查看該日志獲得黑客登陸的信息和一些攻擊的方法。
六、源碼分析
Honeyd
| |--compat
| | |--用到的相關(guān)代碼
| |--debian
| | |--honeyd的默認配置在Debian中使用'honeyd'用戶。
| |--doc
| | |--各類相關(guān)文檔
| |--dpkt
| |--os-test
| | |--內(nèi)含一個ostest腳本
| |--pypcap
| | |--pcap流量包
| |--regress
| | |--對nmap等探測活動的響應(yīng)
| |--sample-config
| | |--配置文件樣式
| |--scripts
| | |--Honeyd提供仿真服務(wù)腳本來對應(yīng)用層的協(xié)議進行模擬
| |--subsystems
| | |--為了替代為每個連接建立一個進程,honeyd 框架也支持subsystems 和 internal services。
| | |--一個 subsysytem 是一個能運行在虛擬蜜罐名字空間下的應(yīng)用程序。當(dāng)相應(yīng)的虛擬蜜罐被初始化的時候,subsystem 指定的應(yīng)用程序就被啟動了。
| | |--一個subsystem 能夠綁定到端口,接受連接,發(fā)起網(wǎng)絡(luò)通訊。當(dāng)一個 subsystem 作為外部程序運行的時候,一個內(nèi)部的服務(wù)就是一個能在 honeyd 中運行的 python 腳本。比起 subsystem 來,internal service 需要的資源更少。
| |--webserver
| | |--web服務(wù)器相關(guān)仿真及前端樣式
honeyd 的軟件架構(gòu)由如下幾個組件構(gòu)成:一個配置數(shù)據(jù)庫,一個中央包分發(fā)器,協(xié)議處理器,一個特征引擎,以及一個可選的路由器組件。
進來的包首先被中央包分配器處理,它首先檢查 IP 包的長度并確認包的校驗和。honeyd 框架知道主要的 3 種 Internet 協(xié)議:TCP,UDP,ICMP。其他協(xié)議的包將被日志記錄并丟棄。在處理包之前,分配器必須查詢配置數(shù)據(jù)庫來找到一個與目的 IP 相符合的蜜罐配置,如果沒有指定的配置存在,一個默認的模板將被使用。給定一個配置,包和相應(yīng)的配置將被分發(fā)給指定的協(xié)議處理器。

協(xié)議處理器
ICMP 協(xié)議處理器支持大多數(shù) ICMP 請求。在默認情況下,所有的 honeypot 支持對 echo requests 和 process destination unreachable 消息的應(yīng)答。對其他消息的響應(yīng)決定與配置的個性特征。
對于 TCP 和 UDP 協(xié)議,honeyd 框架能建立連接到任意的服務(wù)。服務(wù)是外部程序,能從標(biāo)準(zhǔn)輸入獲取數(shù)據(jù),并把輸入發(fā)送到標(biāo)準(zhǔn)輸出。服務(wù)的行為完全取決于外部應(yīng)用程序。當(dāng)一個連接請求被收到,honeyd 框架檢查包是否是一個已經(jīng)建立好的連接的一部分。如果是的話,任何新的數(shù)據(jù)都發(fā)往已經(jīng)建立好的連接的應(yīng)用程序。如果包是一個連接請求,一個新的進程將被創(chuàng)建來運行合適的服務(wù)。為了替代為每個連接建立一個進程,honeyd 框架也支持subsystems 和 internal services。一個 subsysytem 是一個能運行在虛擬蜜罐名字空間下的應(yīng)用程序。當(dāng)相應(yīng)的虛擬蜜罐被初始化的時候,subsystem 指定的應(yīng)用程序就被啟動了。一個subsystem 能夠綁定到端口,接受連接,發(fā)起網(wǎng)絡(luò)通訊。當(dāng)一個 subsystem 作為外部程序運行的時候,一個內(nèi)部的服務(wù)就是一個能在 honeyd 中運行的 python 腳本。比起 subsystem 來,internal service 需要的資源更少。
UDP 數(shù)據(jù)報直接傳遞給應(yīng)用程序。當(dāng) honeyd 框架接受到一個發(fā)送給關(guān)閉端口的數(shù)據(jù)包的時候,如果配置的個性特征允許,它將發(fā)送一個 ICMP port unreachable。在 發(fā) 送 ICMP port unreachable 的過程中,honeyd 框架允許像 traceroute 一樣的工具去發(fā)現(xiàn)被模仿的網(wǎng)絡(luò)拓撲。
另外,建立一個到本地服務(wù)的連接,honeyd 框架也支持連接的重定向。連接的重定向可能是靜態(tài)的,或者取決于連接的四個要素(源目的端口,源目的地址)。重定向可以使我們把對虛擬蜜罐上的服務(wù)的連接請求定向到一個運行著的真實服務(wù)上。例如,我們可以重定向一個 DNS 請求到一個合適的名字服務(wù)器上。
在一個包被發(fā)送到網(wǎng)絡(luò)前,它會被個性引擎處理。個性引擎調(diào)整包的內(nèi)容,以至于它看起來像被配置的操作系統(tǒng)的協(xié)議棧中產(chǎn)生的。
七、測試
nc 10.211.55.23 23

八、優(yōu)點
1、honeyd 是一款非常優(yōu)秀的虛擬蜜罐軟件,能完成蜜罐的大部分功能,花費的資源相對較少。
2、能完成對網(wǎng)絡(luò)拓撲的模擬,對抗指紋探測。
3、honeyd 的使用很方便,僅需要一個配置文件,就可以完成響應(yīng)的部署。
4、此外,honeyd 的使用也是相當(dāng)廣泛。在引誘黑客攻擊,反蠕蟲,遏制垃圾郵件等方面都有廣泛的應(yīng)用。