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 的使用也是相当广泛。在引诱黑客攻击,反蠕虫,遏制垃圾邮件等方面都有广泛的应用。目前对于虚拟蜜罐的研究还处于起步阶段,以后对它的研究会越来越深入。