当前位置: 首页 > 工具软件 > honeyd > 使用案例 >

建立Honeyd配置文件

益兴生
2023-12-01

你可以为你的虚拟蜜罐系统创建一个或多个配置文件。配置文件是一个纯文本文件,可以用任何文本编辑器来进行编辑。配置文件可以放在任何目录下,只要在命令行参数里进行说明。

在配置文件中,你设置的每个蜜罐系统配置都是一个模板. 你可以用一个模板来模拟一个单独的系统,也可以用多个Honeyd实例来模拟多台机器。所以配置文件定义了多个模板。

每个虚拟蜜罐都是由一系列的命令集合组成,这些命令参数集由一个模板名来标识。你还必须定义一个缺省的模板,哪些没有在其它模板里定义的数据包将由缺省模板来处理。尽管配置文件的内容可以按任何顺序排列,但在Honeyd.config文件中按下面推荐的顺序来排列更合乎逻辑:

1. 缺省模板

2. 模板1

3. 模板2

4. 模板3

现在看看创建模板的命令,看它们是如何组合在一起构成Honeyd.config文件的。在本节的结尾,我将给出模拟不同版本Windows操作系统的模板的例子。

配置Honeyd模板
每个模板都必须按顺序定义下面的参数。

· OS 特征 (模拟的IP堆栈)

· 绑定虚拟蜜罐的IP地址或地址段

· ICMP响应

· TCP端口响应

· UDP端口响应

· 系统变量

创建一个Honeyd 模板来模拟一个仿真的Windows操作系统并不是一件非常容易的事。但是Honeyd能灵活地进行定制。如果用下面的结构来产生模板相对就容易的多了:

Create <模板名>
ANNOTATE “<personality name>” [NO] FINSCAN FRAGMENT <action>
SET <模板名> PERSONALITY “<personality name>”
BIND <IP address(es)> <模板名>
SET DEFAULT <模板名> TCP ACTION <action>
SET DEFAULT <模板名> UDP ACTION <action>
SET DEFAULT <模板名> ICMP ACTION <action>
ADD <模板名> TCP PORT <number> <action>
SET <模板名> UPTIME <seconds>
SET <模板名> DropRATE IN <%>
SET <模板名> UID <number> [GID <number>]

注意
不要忘记加上缺省的模板来处理未定义的IP地址。

我们将对每一个项目都如上处理,然后把它们放在一起构成示例模板。

创建一个模板
首先,用Create命令创建每个模板。一个Honeyd实例可能包括一个或多个由Honeyd配置文件定义的模板。句法如下:

Create <模板名>

备注
Honeyd关键字并不是大小写敏感的,本书中用大写只是为了阅读的方便。

模板名是大小写敏感的,只要符合下面的规则,可以用任何字符:

· 不能用数字作首字符。

· 不能用空格或扩展的ASCII字符作首字符。

· 不能用保留字来命名。

缺省模板是一个特例,它定义了所有其它模板中没有定义的行为,句法如下:

Create DEFAULT <模板名>
许多Honeyd管理员仅仅输入Create DEFAULT,这将创建一个名为default 的缺省模板(事实上,缺省模板可以以任何名字来命名)。

增加个性化指令
正如你在第五章所看到的,所谓个性化(personality )是在Honeyd模板中模拟的操作系统IP堆栈仿真。个性化名称记录在Nmap.prints文件里。在最新版本的Nmap.prints文件里里有17种Windows版本可供模拟。如,Windows Server2003被命名为Windows .NET server。 这是因为微软在Windows Server 2003正式发布前一直是如此命名的。我们可以预期Nmap.prints文件会不断升级新版本。你自己加入新的个性化条目也是很简单的(看Nmap文档http://www.insecure.org/nmap/nmap_documentation.html)。

下面是一些常用的Windows版本:

· Windows 98

· Windows 2000 SP2

· Windows 2000/XP/ME

· Windows XP Pro

· Microsoft Windows.NET Enterprise Server (build 3615 beta)

申明一个特征项
将一个特征项运用到一个特定的模板之前,必须先申明它。申明一个定制的项决定了这个项目将到执行的特定动作。申明句法如下:

ANNOTATE “<personality name>” [NO] FINSCAN


ANNOTATE “<personality name>” FRAGMENT <action>
FINSCAN 关键字告诉Honeyd,是否允许对模板的FIN端口扫描。如果是NO FINSCAN,则不响应对端口的FIN扫描。

早期的端口扫描是看特定的端口是否响应TCP SYN包。当一个TCP端口开放时,它会响应SYN包,作为三步握手的第二步,它将返回一个ACK-SYN包。如果TCP端口不存在,大多数的TCP/IP堆栈将返回一个RST包。按顺序对端口进行SYN扫描很容易就得到端口情况,并能避开防火墙或IDS报警系统。黑客会一开始就发送一个FIN包来代替SYN包,一个带FIN标志的包本意是告诉服务端关闭这个TCP联接,但是因为黑客一开始并没有建立这个联接,一个开放的TCP端口会发一个错误信息,而一个关闭的TCP端口则直接丢弃这个包而不做响应。早期的防火墙和IDS系统并不检查FIN扫描包,所以黑客的端口扫描并不触发系统的报警。

FRAGMENT关键字告诉Honeyd如何重组TCP/IP包的碎片。 Drop关键字指示丢弃所有的碎片包。OLD和NEW关键字指示如何处理重复的碎片包。黑客常常人为给TCP/IP包分包,然后在目标主机上重组,一个碎片包可能包括了另外一个包上的数据,这样可以避开过滤设备(如防火墙)到达主机,在主机上重组后执行恶意代码。当碎片包有重复冲突时,Honeyd默认是用较老的包覆盖较新的包。


注意
因为Honeyd Win32端口上的一个Bug,一个无规则的碎片包会引起Honeyd死锁。

幸运的是, ANNOTATE 关键字可以被用来不具体指定如何处理碎片包和FIN端口扫描。这是一个例子:

ANNOTATE “Windows 2000 SP2″
个性化项列表名称包括在一个双引号包括的范围里,它是大小写敏感的,并且必须与Nmap.prints文件里的名称匹配。所有的ANNOTATE命令都被列在Honeyd配置文件的开头(参见随后的例子,表6-4),这样能很容易看到定义的所有的个性化项。

将一个个性化项关联到模板
SET命令可让一个OS特征项关联到模板:

SET <模板名> PERSONALITY “<特征项名称>”
下面的句法设置了一个Windows 2000特征项:

SET Windows 2000 PERSONALITY “Windows 2000 SP2″
绑定一个或多个IP到模板的句法如下:

BIND <IP地址(段)> <模板名>
例如, 可将10.0.0.1绑定到Windows 2000模板:

BIND 10.0.0.1 Windows 2000
如果一个IP没有被绑定到蜜罐的某个模板上,则将由缺省模板来响应提求。

增加端口说明
随后,需要创建并增加一个端口和服务到模板上。参考第三章中的建议,你应该让你的蜜罐模拟出一个典型的Windows系统提供的端口服务。Honeyd能定义ICMP, TCP,和UDP各个端口的开放、阻止或重启(关闭)状态。

定义缺省的端口状态
首先定义缺省的端口状态。句法如下:

SET DEFAULT <模板名> <协议类型> ACTION <活动状态>
对TCP和UDP刺探行为的缺省响应的重启,对ICMP协议则为开放。所以一个典型的Windows机器将有下面的缺省端口响应:

SET DEFAULT <模板名> ICMP ACTION OPEN
SET DEFAULT <模板名> TCP ACTION RESET
SET DEFAULT <模板名> UDP ACTION RESET

备注
WinXP SP2自带的防火墙(原ICF)是默认打开的。它将阻止一切未授权的进出流量。

不要忘记为缺省模板创建缺省活动。例如,如果缺省模板叫default,示例如下:

SET DEFAULT default ICMP ACTION OPEN
SET DEFAULT default TCP ACTION RESET
SET DEFAULT default UDP ACTION RESET
增加端口
加完缺省端口后,就得增加特定行为的端口了,如下示例:

ADD <模板名> <协议类型> PORT <端口号> <活动状态>
例如, 如果你要模拟一个Windows Server 2003 服务器,你可以开放和关闭下面的端口:

ADD <模板名> UDP PORT 135 BLOCK
ADD <模板名> UDP PORT 137 BLOCK
ADD <模板名> UDP PORT 138 BLOCK
ADD <模板名> UDP PORT 389 BLOCK
ADD <模板名> UDP PORT 445 BLOCK
ADD <模板名> UDP PORT 500 OPEN
ADD <模板名> UDP PORT 4500 OPEN
ADD <模板名> TCP PORT 25 OPEN
ADD <模板名> TCP PORT 80 OPEN
ADD <模板名> TCP PORT 88 OPEN
ADD <模板名> TCP PORT 110 OPEN
ADD <模板名> TCP PORT 119 OPEN
ADD <模板名> TCP PORT 135 BLOCK
ADD <模板名> TCP PORT 137 BLOCK
ADD <模板名> TCP PORT 139 BLOCK
ADD <模板名> TCP PORT 143 OPEN
ADD <模板名> TCP PORT 443 OPEN
ADD <模板名> TCP PORT 445 BLOCK
ADD <模板名> TCP PORT 593 OPEN
ADD <模板名> TCP PORT 3389 OPEN

提示
阻止特定的端口,特别是135、137-139,会使你的蜜罐看起来更真实。当黑客预期一个Exchange服务器在防火墙后面时,阻止一个端口而不是关闭它更合理一些。我总是让足够的端口开放,来引诱黑客。

定义开放和关闭的端口是模板中主要的内容。你必须仔细考虑哪些端口定义哪些状态。例如,尽管我建议你阻止135、137-139端口,但如果你对捕获RPC类恶意行为有兴趣,你当然得打开135端口。同理,可以考虑随机开放几个在1023到2000之间的TCP和UDP端口,因为真实Windows系统常常有一些RPC的侦听在这个范围内建立。最主要是的,你的蜜罐配置是为了你的目的服务的。第八章中你能看到其它基于Windows的蜜罐软件,并不是所有的软件都有相同的可扩展性。

增加服务脚本
为了让你的蜜罐更真实,你可以为不同的端口增加不同的响应函数。而不是简单地打开、关闭和重启端口。举例来说,一个带Exchange服务的IIS服务器,能接受对公共邮件端口的Telnet申请(端口25, 110, 119, 和143),也能接受浏览器对80和443端口的访问。在第七章,你将看到如何建立一个服务脚本。现在我们只考虑如何配置它,句法如下:

ADD <模板名> <协议类型> PORT <端口号> “<要调用的脚本引擎> <脚本文件>”
例如:

ADD <模板名> TCP PORT 25 “sh c:Honeydscriptssmtp.sh”
ADD <模板名> TCP PORT 80 “cscript.exe c:Honeydscriptsiis6.cs”
ADD <模板名> TCP PORT 110 “sh c:Honeydscriptspop.sh”
ADD <模板名> TCP PORT 119 “perl.exe c:Honeydscriptsnntp.pl”
ADD <模板名> TCP PORT 143 “wscript.exe c:Honeydscriptsimap.vbs”
ADD <模板名> TCP PORT 443 “sh c:Honeydscriptsssl.sh”
增加代理
有时,当你需要将入侵者的刺探从交互性比较低的蜜罐转移到交互性比较高的真实系统时,你可以用代理。例如,你可以需要让黑客得到真正的FTP服务或DNS服务。这两个服务用脚本都很难实现,如果你有一个服务器能为黑客安全地提供这两个服务,为什么不用它呢?这会让你的蜜罐看起来更真实。代理的句法如下:

ADD <模板名> <协议类型> PORT <端口号> PROXY <真实服务器IP和端口号>
例如:

ADD <模板名> TCP PORT 21 PROXY 66.45.57.103:21
ADD <模板名> TCP PORT 53 PROXY 10.0.0.2:53
设置系统变量
Honeyd允许你设置更多的系统变量让你的模板看起来更真实:

· UPTIME: 系统重启时间隔的秒数:

SET <模板名> UPTIME <秒数>
· DropRATE: 如果使用, DropRATE IN 将按一定比率丢包,用来模拟一个繁忙的网络:

SET <模板名> DropRATE IN <%>
· UID 和 GID: 虚拟机的统一标识符:

SET <模板名> UID <数字> [GID <数字>]
例如:

SET <模板名> UPTIME 2248020
SET <模板名> DropRATE IN 0.005
SET <模板名> UID 20208 GID 13876
模板示例
表6-3是一个虚拟Exchange服务器的示例。Honeyd模板演示了一个看起来真实、低交互性的Exchange 2003服务器。

 类似资料: