漏洞信息

Cisco ASA Software中存在不可信的搜索路径漏洞,该漏洞源于程序没有正确设置LD_LIBRARY_PATH环境变量。本地攻击者可通过在外部存储器中放置‘Trojan horse library’文件利用该漏洞获取权限。以下版本受到影响:Cisco ASA Software 8.4(3)之前8.x版本,8.5版本,8.7(1.13)之前8.7版本。

漏洞成因分析

Linux动态链接查找过程

参考本博客Linux动态链接库查找过程

思科ASA启动流程(以842为例)

思科ASA的操作系统是基于Linux内核的嵌入式系统,所以它的启动过程与Linux启动过程相似。这里用于分析的操作系统固件是asa842-k8.bin,存在CVE-2014-3391漏洞。
ASA防火墙启动过程,如图1所示:

图1

BIOS,即开机自检,所有计算机启动的必经过程,ROMMOM是设备的系统维护层,这一层的操作系统与路由器的操作系统没有关系,仅仅存放在CF卡(设备的存储卡,类似于以前手机的SD卡),这一层可以用来升级操作系统固件,和更换操作系统固件,BootLoader是操作系统内核运行之前,用于初始化硬件设备、建立内存控件映射图,grub菜单是用于选择启动的操作系统,接下来就运行设备定制的Linux内核,内核调用init进程对系统进行初始化,init进程调用rcS初始化脚本,这个脚本位于/etc/inid.d/rcS。
asa842-k8.bin固件操作系统的文件系统如图2所示:

图2

文件系统的提取以及原理以后会在博客中说明。
如图2,固件操作系统的文件系统类似于Linux的树形文件系统。那么根据图1,init进程调用rcS脚本,用于初始化的rcS脚本位置如图3所示:

图3
rcS脚本内容如图4所示:

图4

如图4,rcS脚本启动了/etc/init.d/目录下所有以S开头的脚本(关键启动操作已用红色标出)。
见图3,该目录下以S开头的脚本总共有四个,分别是S10udev,S20urandom,S40network,S59asa。这四个脚本中,S10udev是操作系统底层设备相关的;S20urandom脚本用于设置随机数种子,被关机、中断、重启等脚本调用。S40network脚本用于网络配置相关。而S59asa才是与我们的ASA防火墙启动有关的脚本。S59asa脚本如图5所示:

图5
图5中,S59脚本启动了/asa/scripts/rcS脚本
/asa/scripts/rcS脚本内容如图6所示:

图6
在/asa/scripts/rcS的部分脚本中,启动了当前目录下一个叫rcS.common的脚本文件,剩下的内容全都是将一些操作的命令写入/tmp/run_cmd。
在当前目录查看rcS.common部分脚本,如图7所示:

图7
如图7,该脚本,创建了/mnt/disk0和/mnt/disk1两个目录,注意到这两个目录是在/mnt文件夹下(即是挂载的文件夹),也就是说这两个文件夹是在CF卡下创建的,普通用户可以更改这两个目录下的内容。
rcS.common脚本另外一部分内容,如图8所示:

图8
图8中显示的是rcS.common脚本的最后一部分,注意到该部分设置了LD_LIBRARY_PATH环境变量为/mnt/disk0/lib、/asa/lib、/mnt/disk0/csco_config/lib
写入到运行时启动的脚本,也就是说在ASA启动的时候,将设置这样三个环境变量。之前声明了Linux下动态链接库的查找的过程,若在编译时指定目录查不到所需库,则会到LD_LIBRARY_PATH环境变量中查找。而在图7中提到,/mnt/disk0和/mnt/disk1这两个目录的内容可以被更改替换,也就存在动态库劫持的隐患。