工作前的准备: ①Linux操作系统环境 ②ASA 二进制文件(bin) 准备工作完成, 那么下面我们就可以开始如何破解出ASA bin文件中的一个完整的linux系统,关于CISCO对PIX和ASA里使用了开源程序的说明和列表: http://www./en/US/products/ps6120/prod_release_note09186a008086944e.html 根据上面这个地址,可以清楚的看出ASA 操作系统是一个linux系统的改造过来的,基于linux 内核版本为2.6. 1: 进入Linux系统,从cisco官方下载 asa802-k8.bin,验证其MD5值. 命令: # md5sum asa802-k8.bin a94c3eff8c6d12d6ae6d1be9ba2ea529 asa802-k8.bin 与Cisco 官方网站MD5一致;
2: 使用hexdump输出asa802-k8.bin 十六进制数据流,将其输入到一个指定文件中. 命令: # hexdump -C asa802-k8.bin > asa802-k8.hd
3: 利用grep在生成的asa802-k8.hd 16进制文件中搜索串“1f 8b 08 00 1d”. 命令: # grep "1f 8b 08 00 1d" asa802-k8.hd 001228b0 1f 8b 08 00 1d 3d 73 46 00 03 ec 3a 6d 54 14 57
4: ① 首先获取asa802-k8.bin文件的大小,然后使用10进制的文件大小数减去16进制头 001228b0,得到最后N bytes 数(10进制).
得到asa802-k8.bin文件大小为14524416 字节. 下面我们可以使用linux下非常实用的脚本语言Perl来帮助计算145244160-0x001228b0 命令: # perl -e '$x=14524416-0x001228b0;print "$x\n"' (单引号) 13334352 这样我们就得到了偏移量 13334352 5: 使用tail 获取asa802-k8.bin 中CPIO镜像文件(一种linux文件系统压缩格式) 命令: #tail -c 13334352 asa802-k8.bin > asa802-k8.gz 这时文件夹内已经生成了一个gzip压缩格式文件. 6: 使用gzip解压asa802-k8.gz 命令: #gzip -d asa802-k8.gz 这时我们发现文件夹内已经包含一个asa802-k8的CPIO镜像文件.接下来使用cpio命令解压该文件. 7: 使用cpio解压 命令: cpio -i --make-directories --no-absolute-filenames < asa802-k8 OK,下面可以看到当前文件夹内出现了一个标准的文件系统,可以使用ls查看: 下面需要做的是一些编辑相关文件,之后在将这个文件系统打包,然后使用Qemu这个虚拟机来引导它. 8:编辑相关文件(etc/init.d/rcS 注意此文件并非linux根下的/etc,而是解压asa802-k8所得的文件系统内的/etc),打包文件系统. 命令: # vim etc/init.d/rcS 看的内容为上面,那么我们应该使用vim来编辑它,编辑后的内容如下: 保存退出 注意拷贝出vmlinuz内核文件(模拟需要它来引导) 下面进行打包ASA文件系统工作. 打包命令: # find . | cpio -o -H newc | gzip -9 > ./asa802.gz 到这里asa802-k8.bin这个二进制文件已经完全的被破解出来,我们可以很清晰的发现,Cisco ASA的操作系统就是个Linux系统,唯一的只是在asa文件夹内的两个asa的操作程序,lina和lina_ monitor (后面关于模拟部分会执行lina_ monitor这个程序). [root@rhe5 ~]# cd /asa802/ [root@rhe5 asa802]# ls asa802-k8.bin [root@rhe5 asa802]# [root@rhe5 asa802]# ls asa802-k8.bin [root@rhe5 asa802]# hexdump -C asa802-k8.bin > asa802-k8.hd [root@rhe5 asa802]# [root@rhe5 asa802]# grep "1f 8b 08 00 1d" asa802-k8.hd 001228b0 1f 8b 08 00 1d 3d 73 46 00 03 ec 3a 6d 54 14 57 |.....=sF...:mT.W| [root@rhe5 asa802]# [root@rhe5 asa802]# ls -la total 84024 drwxr-xr-x 2 root root 4096 Feb 6 05:14 . drwxr-xr-x 26 root root 4096 Feb 6 05:08 .. -rw-rw-rw- 1 root root 14524416 Jul 9 2007 asa802-k8.bin -rw-r--r-- 1 root root 71393157 Feb 6 05:15 asa802-k8.hd [root@rhe5 asa802]# perl -e '$x=14524416-0x1228b0;print "$x\n"' 13334352 [root@rhe5 asa802]# [root@rhe5 asa802]# tail -c 13334352 asa802-k8.bin > asa802-k8.gz [root@rhe5 asa802]# [root@rhe5 asa802]# ls -la total 97072 drwxr-xr-x 2 root root 4096 Feb 6 05:18 . drwxr-xr-x 26 root root 4096 Feb 6 05:08 .. -rw-rw-rw- 1 root root 14524416 Jul 9 2007 asa802-k8.bin -rw-r--r-- 1 root root 13334352 Feb 6 05:18 asa802-k8.gz -rw-r--r-- 1 root root 71393157 Feb 6 05:15 asa802-k8.hd [root@rhe5 asa802]# [root@rhe5 asa802]# [root@rhe5 asa802]# gzip -d asa802-k8.gz gzip: asa802-k8.gz: decompression OK, trailing garbage ignored [root@rhe5 asa802]# [root@rhe5 asa802]# ls -l total 114568 -rw-r--r-- 1 root root 31251968 Feb 6 05:18 asa802-k8 -rw-rw-rw- 1 root root 14524416 Jul 9 2007 asa802-k8.bin -rw-r--r-- 1 root root 71393157 Feb 6 05:15 asa802-k8.hd [root@rhe5 asa802]# [root@rhe5 asa802]# cpio -i --make-directories --no-absolute-filenames < asa802-k8 cpio: Removing leading `/' from member names …… cpio: Removing leading `/' from member names 61039 blocks [root@rhe5 asa802]# [root@rhe5 asa802]# ls -la total 116312 drwxr-xr-x 12 root root 4096 Feb 6 05:19 . drwxr-xr-x 26 root root 4096 Feb 6 05:08 .. drwxr-xr-x 4 root root 4096 Feb 6 05:19 asa -rw-r--r-- 1 root root 31251968 Feb 6 05:18 asa802-k8 -rw-rw-rw- 1 root root 14524416 Jul 9 2007 asa802-k8.bin -rw-r--r-- 1 root root 71393157 Feb 6 05:15 asa802-k8.hd drwxr-xr-x 2 root root 4096 Feb 6 05:19 bin drwxr-xr-x 3 root root 4096 Feb 6 05:19 dev drwxr-xr-x 3 root root 4096 Feb 6 05:19 etc lrwxrwxrwx 1 root root 7 Feb 6 05:19 init -> linuxrc drwxr-xr-x 3 root root 4096 Feb 6 05:19 lib lrwxrwxrwx 1 root root 11 Feb 6 05:19 linuxrc -> bin/busybox drwxr-xr-x 4 root root 4096 Feb 6 05:19 mnt drwxr-xr-x 2 root root 4096 Feb 6 05:19 proc drwxr-xr-x 2 root root 4096 Feb 6 05:19 sbin drwxr-xr-x 2 root root 4096 Feb 6 05:19 sys -rw-r--r-- 1 root root 563896 Feb 6 05:19 System.map drwxr-xr-x 3 root root 4096 Feb 6 05:19 usr -rw-r--r-- 1 root root 1095856 Feb 6 05:19 vmlinuz [root@rhe5 asa802]# [root@rhe5 init.d]# cd /asa802 [root@rhe5 asa802]# ls asa asa802-k8.bin bin etc lib mnt sbin System.map vmlinuz asa802-k8 asa802-k8.hd dev init linuxrc proc sys usr [root@rhe5 asa802]# cd etc [root@rhe5 etc]# ls init.d inittab mtab [root@rhe5 etc]# cd init.d [root@rhe5 init.d]# ls rcS rcS.common [root@rhe5 init.d]# more rcS #!/bin/sh #------------------------------------------------------------------ # Copyright (c) 2006, 2007 by Cisco Systems, Inc. # All rights reserved. #------------------------------------------------------------------ export MOUNT_OPTS=umask=0000,noatime,check=s,posix,shortname=mixed /bin/sh -c /etc/init.d/rcS.common export LD_LIBRARY_PATH=/mnt/disk0/lib:/mnt/disk0/lib # launch our user space processes /asa/bin/lina_monitor (改为/bin/sh) [root@rhe5 init.d]# [root@rhe5 asa802]# find . | cpio -o -H newc | gzip -9 > asa802.gz cpio: File ./asa802.gz grew, 14319616 new bytes not copied 317854 blocks [root@rhe5 asa802]# ls asa asa802-k8 asa802-k8.hd dev init linuxrc proc sys usr asa802.gz asa802-k8.bin bin etc lib mnt sbin System.map vmlinuz [root@rhe5 asa802]# 将asa802.gz和vmlinuz拷贝出来 模拟ASA 1. 利用Qemu引导(模拟)Cisco ASA Linux 文件系统. 准备工作: ① Qemu 程序 ② 破解出来的ASA Linux文件系统asa802.gz ③ 内核:vmlinuz 下面模拟在windows系统进行(从http://www./bbs/thread-8308-1-2.html下载解压而得) 打开文件夹: 看到内容如上图,之后打开asaemu: asa802-k8是我们通过上面的步骤破解出来的asa文件系统. 这里需要说明一下:破解的步骤不能在windows环境中进行,虽然像cpio这样的程序都有一个windows的移植版,但是无法创建linux下的链接文件! Ⅰ.点击创建Disk.cmd 文件. 之后该文件夹内将会生成一个asa802.vmdk 大小为64.0 KB的文件. Ⅱ.编辑ASA802.bat 文件 我们将看到该批处理文件的主体内容如下 : ..\qemu.exe -L ..\bios -hda asa802.vmdk -hdachs 980,16,32 -kernel vmlinuz -initrd asa802-k8.gz -m 256 --no-kqemu -append "auto nousb ide1=noprobe bigphysarea=16384 console=ttyS0,9600n8 hda=980,16,32" –net nic,vlan=0,model=i82557b,macaddr=00:aa:00:00:02:01 –net pcap,vlan=0,ifname=\Device\NPF_{E93E58F7-430F-45F7-9565-0CEED2108E27} -net nic,vlan=1,model=i82557b,macaddr=00:aa:00:00:02:02 -net pcap,vlan=1,ifname=2 -serial telnet::1007,server,nowait 注意上面的命令是为一行,下面解释一下部分的意思: –net nic,vlan=0,model=i82557b,macaddr=00:aa:00:00:02:01 在asa中创建一个网卡,型号为intel i82557b,vlan号为0,mac地址为00:aa:00:00:02:01。 这条命令后面: –net pcap,vlan=0,ifname=\Device\NPF_{E93E58F7-430F-45F7-9565-0CEED2108E27} 意思是说将创建的这个属于vlan0的网卡桥接到本地网卡中,其中本地网卡的参数为\Device\NPF_{E93E58F7-430F-45F7-9565-0CEED2108E27} -net nic,vlan=1,model=i82557b,macaddr=00:aa:00:00:02:02 -net pcap,vlan=1,ifname=2 在asa创建另一个网卡,vlan为1,mac地址为00:aa:00:00:02:02,并将其桥接到网卡号为2的本地网卡上. 这里肯定会有一个疑问: ifname=\Device\NPF_{E93E58F7-430F-45F7-9565-0CEED2108E27} ifname=2 这是两个参数主要是用来桥接到本地网卡,那么它是如何得知? 答案就在下面 Ⅲ. 点击获取网卡参数. .(注意需要安装winpcap,附件文件夹内已提供) 2008-4-10 22:40 如图:以上就是我的机器中所有可用的网卡,和它的参数 这里同一个网卡参数,可以用两个不同的方法去表示.比如3号,Intel的无线网卡.我们即可以ifname=3 也可以ifname= \Device\NPF_{E93E58F7-430F-45F7-9565-0CEED2108E27} 意思都是将某一个asa中的端口桥接到本地的这个无线网卡上.(这里ifname还可以支持tap接口,因为篇幅问题加上tap接口配置有比较烦琐,不加详细介绍,有兴趣可以邮件讨论) 所以在第一次运行之前请务必需要修改文件中的网卡参数为你主机对应的网卡参数 提示:当然3.ASA802.bat 文件的批处理只模拟运行一个asa(2个端口),你也可以模拟更多的接口,创建接口: -net nic,vlan=N,model=i82557b,macaddr=00:aa:00:00:02:01 -net pcap,vlan=N,ifname=XXXX 运行多个asa可以在附件文件夹内复制多个asaemu文件夹,分别运行文件夹内的相应文件 Ⅳ.做好一切准备工作后,点击3.ASA802.bat 将看到: 之后使用telnet 连接上去了,将会看到一个启动信息: 进入shell 命令环境 依次如图键入命令: 以上是对Disk进行格式化和挂载分区(使用linux fdisk命令),按照上面操作完毕即可,另外这一步只在第一次启动时需要操作,以后就不再需要! 依次键入下图命令: 上面这一步是加载e100模块和激活网卡(注意在3.ASA802.bat中模拟了几个端口这里就需要up几个网卡,eth0,eth1,….ethN),然后启动lina_monitor程序(asa操作程序),在输入/asa/bin/lina_monitor后回车,之后就可以进入到ciscoasa>界面 可选操作--begin(如果对linux系统不熟悉可以跳过下面步骤): 这一步骤是在每次启动都必须执行的. 当然可以这样做,在打包asa linux文件系统之前可以写一个自动的脚本在其中(). 首先使用vi编辑一个脚本存放在bin/文件夹内,如图:
之后编辑etc/init.d/rcS.common文件,如图:
然后保存,这样每次就可以自动启动相关命令. 可选操作—done 所有的步骤都已经完毕 这样一个虚拟的ciscoasa就呈现在我们眼前 3.我们可以用这个虚拟ASA做什么? l 可以在没有设备在旁边的时候在自己本本上熟悉ASA的命令,完全可以当作一个去现场前的”练习场” l 可以通过网络搭配,配合dynamips(cisco IOS 模拟器)来搭建一个实验环境. l 支持单模式下的ASA所有实验. l 因为模拟不完全原因,FLASH是有问题的(启动时提示flash没有格式化,不能决定防火墙工作模式),这样造成不能多模式,另外保存配置需要使用命令: copy running-config disk0:/.private/startup-config 虽然会报错,但是确实是可以保存。Copy run start 不能生效. ciscoasa(config-if)# copy run disk0:/.private/start-up Source filename [running-config]? Destination filename [/.private/start-up]? Cryptochecksum: 7c813112 1682dbc4 32338bfe 0842bfe8 %Error copying system:/running-config (Not enough space on device) ciscoasa(config-if)# l 这仅仅只是个虚拟化的ASA,请不要对它期望过高.仅做学习之用.
|