xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
添加文章 English Version

honeynet配置记录


创建时间:2003-04-04
文章属性:原创
文章提交:san (san_at_xfocus.org)

一、honeynet主机配置

Gen I是在三层用nat进行转换控制,配置相对比较方便一些,但是路由转发会消耗掉一个TTL。
Gen II是在二层用brige转发控制,配置相对稍微复杂一点,不消耗TTL,相对更隐蔽一些。

不想编译内核,使用Gen I。

1、主机系统配置

比较喜欢debian,由于user-mode-linux只在debian的testing和unstable里,所以就近选个快速的镜象站点作系统更新、软件安装。geekbone的mirror非常完整,而且速度不错,推荐。

# apt-get update
# apt-get upgrade

需要ssh来对主机进行管理:

# apt-get install ssh

去除一些不必要的服务:

# update-rc.d -f inetd remove
# update-rc.d -f ppp remove
# update-rc.d -f exim remove

2、安装user-mode-linux

# apt-get install user-mode-linux

debian的UML内核没有配mount DevFS,所以启动的时候要加上devfs=mount的参数。

系统镜象使用honeynet提供的redhat 7.2,可以从如下地址下载:

http://honeynet.xfocus.net/misc/files/root_fs.rh-7.2-server.pristine.20021012.gz

解压后使用这个文件系统启动UML:

# linux ubd0=root_fs.rh-7.2-server.pristine.20021012 eth0=tuntap,,00:90:0b:03:04:05,192.168.0.254 devfs=mount

如果文件系统映象文件名是root_fs,就不需加ubd0=,eth0=tuntap,,00:90:0b:03:04:05,192.168.0.254的意思是在eth0上用TUN/TAP绑定/dev/tap0,IP为192.168.0.254,前面的mac地址是指定UML网卡的mac地址,否则默认是FE:FD:00:00:00:00。

这个系统的用户名和口令都是root。

3、数据控制

数据控制使用honeynet提供的rc.firewall脚本,可以从如下地址下载:

http://honeynet.xfocus.net/papers/honeynet/tools/rc.firewall

作一些轻微的修改:

rc.firewall默认使用2层的bridging模式,修改为:

MODE="nat"

需要配置虚拟系统对外的IP,可以指定多个用空格隔开:

PUBLIC_IP="192.168.7.144"

配置虚拟系统真实的IP,可以指定多个用空格隔开,注意和PUBLIC_IP对应:

HPOT_IP="192.168.0.144"

配置主机管理接口:

MANAGE_IFACE="eth0"

主机真实IP:

MANAGE_IP="192.168.7.99"          # IP of management Interface
MANAGE_NETMASK="255.255.255.0"     # Netmask of management Interface

允许访问的端口,可以多个用空格隔开:

ALLOWED_TCP_IN="22"

允许访问的来源IP,可以用any:

MANAGER="192.168.7.9/24"

数据控制接口:

LAN_IFACE="tap0"

rc.firewall默认允许9个TCP连接,20个UDP连接,50个ICMP连接和10个其它IP连接。当然可以修改脚本里这几个参数。

4、数据捕获

安装snort:

# apt-get install snort

去掉它的自动启动:

# update-rc.d -f snort remove

使用了honeynet提供的snort.conf和启动脚本,下载地址:

http://honeynet.xfocus.net/papers/honeynet/tools/snort.conf
http://honeynet.xfocus.net/papers/honeynet/tools/snort-start.txt

snort.conf有些错误,作如下修改:

var HOME_NET 192.168.7.99/24

output alert_full: /data/snort/snort_full
output alert_fast: /data/snort/snort_fast

snort-start.txt启动脚本稍微修改:

PID=/var/run/snort_tap0.pid
DIR=/data/snort
SNORT=/usr/sbin/snort

$SNORT -d -D -c /etc/snort/snort.conf -i vmnet1 -l $DIR/$DATE not host yyy.yyy.yyy.yyy

其中yyy.yyy.yyy.yyy是自己客户端的IP,这样忽略记录自己的IP,避免了自己在虚拟honeypot上的连接特别是文件传输等不被记录,使得日志不会因为自己的操作变得巨大,增加干扰信息。当然前提是自己客户端的IP是固定的,否则就算了。

当然针对需要捕获何种数据可以再细调snort规则。

5、安装vmware

使用的是vmware-gsx-2.5,商业软件照者安装就行。安装的时候要注意,网络要安装成host only模式,设置的IP就是网关地址,这些可以在安装后用vmware-config.pl来修改。在网络修改那里使用editor不要使用wizard。

关于数据控制和数据捕获与上面UML的一样,就是相应的接口由tap0改为vmnetX。

6、注意事项

清空iptables规则不能简单的来个iptables -F,因为rc.firewall脚本把INPUT和FORWARD的策略都设为DROP,如果这样撤销rc.firewall的话所有网络都不通了。用如下的一个小脚本:

#!/bin/sh
#-----------------------------------------
# stop-firewall.sh
#-----------------------------------------
# safely stop rc.firewall

/sbin/iptables -F
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -X icmpHandler
/sbin/iptables -X otherHandler
/sbin/iptables -X tcpHandler
/sbin/iptables -X udpHandler

echo "honeynet rc.firewall safely stoped!"

#EOF

很遗憾,UML和vmware不能同时用,它们使用的接口不一样,也许改rc.firewall可以实现。然后就把机器托管到IDC去,你要开几个虚拟机就再需要几个外部IP,不要告诉IDC你到底做什么,要不然别人可能会感觉不爽,你还得解释半天。

二、数据分析

1、honeynet主机日志

为了减少honeynet主机的负担,snort只是简单记录所有日志,所以其实使用tcpdump也是可以。如果可能的话可以装一个商业的IDS探测器,一来检验IDS漏报误报的情况,二来可以实时观察honeynet主机的情况,这点商业IDS一般都做的非常漂亮。

另外安装了fwanalog对防火墙日志进行分析:

# apt-get install fwanalog

安装完后会有一些配置。然后给crontab写个shell脚本用于每天日志打包:

#!/bin/sh
#-----------------------------------------
# BackupData.sh
#-----------------------------------------

cd /data/snort
DIR=`ls -F|grep /$`
DM=`date +%Y%m%d`

#fwanalog
cd /var/log
tar czf fwanalog-$DM.tar.gz fwanalog
mv fwanalog-$DM.tar.gz /data/snort/$DIR/

/usr/bin/killall snort

cd /data/snort
tar czf data-$DM.tar.gz $DIR
rm -rf /data/snort/$DIR

/root/vmware/snort-start.sh

#EOF
crontab里定时运行了两个程序:

0 8 * * * /usr/sbin/fwanalog
30 8 * * * /root/vmware/BackupData.sh

2、日志传输

日志通过ssh传输,通过ssh-keygen生成一对key,就可以在脚本里无需口令使用scp传输文件。

linux/unix下:

$ ssh-keygen -d

在出现提示的时候全部直接回车,这样在$HOME/.ssh/下会生成id_dsa和id_dsa.pub两个文件。把id_dsa.pub上传到服务器端(honeynet主机)一个用户的$HOME/.ssh/authorized_keys,这样在客户端就可以用这个用户无需口令使用ssh、scp等命令了。

windows下的putty:

用puttygen生成一对key,使用SSH2 DSA,生成的时候要用鼠标在空白部分不停的动以生成随机数。同样,把生成的public key上传到服务器端(honeynet主机)一个用户的$HOME/.ssh/authorized_keys,在putty的Connection -> SSH -> Auth下选择生成的private key文件,保存这个session,就可以无需口令登陆了。
pscp可以使用-i指定生成的private key文件,无需口令传输文件,如:

pscp -i private.ppk file user@192.168.7.140:/tmp

3、客户端分析日志

由于日志是使用snort记录tcpdump格式的数据,所以数据传过来后还得用snort分解一下,并且可以配合SnortSnarf生成简报。另外数据导入数据库以便以后用acid做分析统计。但是由于找不到固定的linux机器,只能吭哧吭哧在自己winxp的工作机装了snort、mysql、apache、php、acid、perl、SnortSnarf。由于每天都会有很多工作,每天的粗略分析想尽可能少占时间,从tk那里要来一个sh.exe,形成如下的bt脚本:

#!/bin/sh
#-----------------------------------------
# daily_get.sh
#-----------------------------------------
# 注意,里面使用的date/tar/gzip/rm都是
# GNU的windows下相应软件。
#-----------------------------------------

DM=`date +%Y%m%d`

# 由于打包目录使用的是前一天的目录,这个由gnu date实现就比较好了。
DA=`date -d yesterday +%b_%d`

pscp -i ssh.PPK honeynet@xxx.xxx.xxx.xxx:/data/snort/data-$DM.tar.gz logs

# 日志文件里如果有codered等扫描,norton会把日志删除
net stop "Norton AntiVirus 客户端"

# 解压,windows下tar的z参数好像不能找到gzip,所以用这个笨办法。
gzip -d logs/data-$DM.tar.gz
tar xf logs/data-$DM.tar -C daily/

# 开mysql
net start mysql

# 用snort分析日志,并且生成警告日志到log目录以及导入数据库,以便总体统计分析。这个需要配置snort
cd \\snort
rm -rf log
mkdir log
bin\\snort -c etc\\snort.conf -r \\working\\honeynet\\daily\\$DA\\*-snort.log

# 重新开启norton
net start "Norton AntiVirus 客户端"

# 用snortsnarf生成每日汇总日志。先清空前一天的东西
cd \\working\\honeynet\\tmp
rm -rf snortsnarf
mkdir snortsnarf

cd \\working\\honeynet\\snortsnarf
perl snortsnarf.pl ..\\..\\..\\Snort\\log\\alert.ids -d ..\\tmp\\snortsnarf

cd ..\\tmp\\snortsnarf
"C:\Program Files\Internet Explorer\iexplore.exe" "D:\working\honeynet\tmp\snortsnarf\index.html"

# 看看fwanalog的日志
cd \\working\\honeynet\\daily\\$DA
gzip -d fwanalog-$DM.tar.gz
tar xf fwanalog-$DM.tar
"C:\Program Files\Internet Explorer\iexplore.exe" D:\\working\\honeynet\\daily\\$DA\\fwanalog\\today.html

#EOF

再写一个批处理,ft.bat:

sh -x daily_get.sh

在计划任务里加上每天9点运行ft.bat,以后9点的时候硬盘淅沥哗啦一阵响后跳出IE窗口,如果没有什么有兴趣的攻击的话,随便看看就行了,感兴趣的话就需要手工分析tcpdump日志,找出别人在honeypot里做什么,也许能发现许多好玩的。一般如果日志突然增大很多就肯定受到过攻击或者网上又蠕虫泛滥有大规模的扫描,比如最近的CodeRed II就像非典型性肺炎一样流行,每天都有无数的机器来扫描你。

上面的bt脚本都是使用GNU的工具,如果使用linux当作桌面平台,一切就更简单了。

参考资料:
http://honeynet.xfocus.net/papers/uml/
http://honeynet.xfocus.net/papers/vmware/